Привет ребят ещё раз раскажите мне пожалуйста Сколько вас человек Что понимать сколько нас примерно ждать нас семь было по-моему Да было начинали да Ну грубо говоря фазу ноль смы проходили вместе сейчас посчитаем Ну сколько у вас там финальный проект Когда вы делились Да у нас было семь две по три одна по две групы два человека в группе сем не пори во во и получается у нас ещё Люба и Сергей получается да любовь 10 человек Ну давайте подождём немножко а всё 11 человек математика математика

получается да любовь 10 человек Ну давайте подождём немножко а всё 11 человек математика математика сходится скажем так да Значит можно и начинать Так ну что рад вас всех приветствовать е раз на фазе о фаза будет принципиально отличаться от фазы но в плане режима возможно в плане интенсивности материала фокуса вот фаза о фаза 2но где будет местами непросто но принимайте в расчёт все советы которые вам давали и соответственно по ходу мы будем с вами коммуницировать будет много кризисов будет

вам давали и соответственно по ходу мы будем с вами коммуницировать будет много кризисов будет непросто но знаете что не вы первые такие и все справлялись и всё было замечательно почти всегда с хэпи эндом вот так что Удачи вам в этом плане А теперь давайте переходить к делу видно мо ан Да отлично смотрите А это наши с вами наш с вами Рабочая репозиторий будет да 4 недели у нас с вами будет на фазе один первые две они особенно они особенно трудными могут показаться для людей у кого не было

фазе один первые две они особенно они особенно трудными могут показаться для людей у кого не было технического бэкграунда какого-то математического Да потому что это речь пойдёт о математики Вот первая неделя будет посвящена Теория вероятности статистики тестированию вторая Линейная алгебра матанализу и ведения в машинно обучения Ну в принципе там Линейная алгебра матанализ в основном третья неделя у нас будет Третья четвёртый грубо говоря это уже всё что связано с машинным обучением первые 2

у нас будет Третья четвёртый грубо говоря это уже всё что связано с машинным обучением первые 2 недели да будет казаться что дышится очень тяжело но опять же скажу что это нормальная история вот потом дышать будет легче и сказать время немножко пройдёт всё начнёт укладываться в голове и будет Штиль и будет будет хорошо вот в каждый из ней соответственно можно провалиться Да вот в это такой мини навигации соответственно я могу провалиться понедельник Да сегодня у нас с вами Т вероятности здесь

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

лучше переходить тогда когда вы сделали уже все задани что распыляться вы ощутите и вот некоторые давали вам такой совет будет ощущение желания распыляться влево вправо но лучше Вот то что мы просим делать Вот лучше Вот это делать потому что как бы на дистанции вы поймёте почему это так работает вот что ещё я хотел вам сказать Не знаю вероятности те вам сказать на твоём опыте Как лучше воспринимать материал сейчас и в последующем конспектировать по ходу что-то на бумажках где-нибудь в цифровом

материал сейчас и в последующем конспектировать по ходу что-то на бумажках где-нибудь в цифровом формате или просто Внимательно слушать и потом использовать то что есть в репозитория А ну я знаю что как бы мы все по-разному воспринимаем информацию кому-то вот как помогает её переложить на бумагу Да вот если из таких людей то может быть какие-то ключевые вещи Может стоит сделать но на самом деле во время лекции Я бы советовал лучше фокусироваться на лекции иногда короче Бывает такое вот как бы

во время лекции Я бы советовал лучше фокусироваться на лекции иногда короче Бывает такое вот как бы часто я замечаю как бы я и по себе замечал и соответственно Вижу у ребят что лекции иногда со второго раза доходят То есть первый раз как раз внимательно послушали потом чуть-чуть переварить уже задание опять всё непонятно опять вернулись соответственно вот уложиться как бы ну я не сторонник честно говоря писать да Но если кому-то удобно то пожалуйста какие-то ключевые вещи Да ключевые Угу Все мы

говоря писать да Но если кому-то удобно то пожалуйста какие-то ключевые вещи Да ключевые Угу Все мы по-разному воспринимаем Вот но на самой лекции Я бы советовал больше слушать может какие-то ключевые пометки делать но чтобы это не было самоцелью знаешь и фокусом что О как бы всё успеть как бы всё успеть Да мы как бы в принципе не в институте и у нас здесь будут записи которые будут С вами до конца ваших дней до конца наших дней да соответственно это будет навсегда и вы всегда сможете к этому

ваших дней до конца наших дней да соответственно это будет навсегда и вы всегда сможете к этому вернуться без всяких проблем завтра послезавтра и через 5 месяцев как-то так Окей вопросик такой что какие корректные ожидания по поводу того насколько лекции покрывают и тетрадки покрывают то что нужно Ну в смыс я виу доф тетрадок длинных Возможно они уже покрывают то что нужно Короче говоря просто назе было такое что в раздаточных материалах было заведомо меньше чем нужно для решения задач

назе было такое что в раздаточных материалах было заведомо меньше чем нужно для решения задач соответственно ние что нужно много искать будет такое Ну я вообще советовал бы этот навык прививать как можно быстрее У нас в принципе построено обучение во многом чтобы с каждой фазы вы становились всё самостоятельные и Это правильно Это хорошо собственно говоря это очень ценно на работе Поэтому дальше будем заходить где-то надо будет искать дополнительно но я буду всегда рядом как бы вы

дальше будем заходить где-то надо будет искать дополнительно но я буду всегда рядом как бы вы соответственно можете у меня спросить если что-то будет вот Ну так в принципе поначалу такого не будет поначалу то есть всё в принципе как бы есть всё я буду проговаривать Так ну что давайте начинать тогда как я вам сказал первой неделе Бут посвящена Теория вероятности статистики И как прикладной такой коридор Да коридор в прикладной мир тестирования мы начнём с теории Вероятно это один день это вообще

Да коридор в прикладной мир тестирования мы начнём с теории Вероятно это один день это вообще де единствен Когда вы по факту кодить не будете сегодня можно ручкой как в институте там порисовать вероятность почитать короче особенному отнеситесь к этому дню в плане правильно медитативное Вот так Сегодня область применения теории вероятности основные термины в теории вероятности понятия условно полной вероятности формула басам занима чати величи их свойст возможно операции Но на самом деле как бы

вероятности формула басам занима чати величи их свойст возможно операции Но на самом деле как бы я долго сам для себя пытался сформулировать роль вероятности она достаточно простая вот вторая фраза вот эта те вероятности нужна лишь для одного чтобы принимать рациональные решения да то есть данные нам помогают вероятности искажать в нашу удобную сторону Да Какова вероятность ша что это зима то вероятность уже стала другая и соответственно мы как пытаемся делать так чтобы почти наверняка быть

вероятность уже стала другая и соответственно мы как пытаемся делать так чтобы почти наверняка быть уверенным в том что произойдёт То бишь стреми вероятности к единице там или к нулю в случае негативных Да решений вот как-то так как-то так вероятно самом деле достаточно теоретична да то есть как бы она задаёт очень большой контекст вы будете постоянно слышать слово вероятность Вот вот имен Конте прино одно базируется именно на теории вероятности Так мы начнём с вами с основных э терминов Мы

прино одно базируется именно на теории вероятности Так мы начнём с вами с основных э терминов Мы пойдём с самого-самого простого и будете чувствовать что как бы к концу недели градус будет немножко повышаться Да в плане будем всё ближе и ближе к каким-то реальным истории вот а так а нам нужно будет четыре вот этих определения Первое - это элементарный исход это исход нашего опыта Например если мы бросаем две монетки элементарным исходом будет Вектор из двух координат то есть элементарный исход

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

магазин или купил у мне да в онлайн магазине что-то и соответственно либо женщина здесь у меня под экспериментом считается две координа тоь монетки что первый и что выполнено второй а это называется в анализе данных Вектор Может быть вы помните Это школа слово со школьных или Институтский времён Да вот то есть Вектор - это просто совокупность нескольких а координат далее пространство элементарных исходов это все возможные Элементарные исходы Ну вот в случае с монеткой Давайте вот у нас две

исходов это все возможные Элементарные исходы Ну вот в случае с монеткой Давайте вот у нас две монетки сколько у меня всего возможных элементарных исходов ре по идее три Ну типа режка одной Вектор 5 52 и 25 это не одно и тоже Поэтому порядок тогда да Абсолютно верно получается что у нас с вами либо два орла либо орл решка либо решка орл каких-то может быть называют вот Омега большое либо пространство элементарных исходов То бишь все эти исходы все эти исходы все эти исходы вот далее далее Далее

элементарных исходов То бишь все эти исходы все эти исходы все эти исходы вот далее далее Далее собственно говоря Мы потихоньку подводим к вероятности Да ещё есть такое вещь такая вещь как события это вообще наверное самое частое вот события Если вы возьмёте какую-нибудь аналитическую статью вот у аналитиков очень много столкновений с вероятностями там вот это слово события очень часто фигурируют пото что мы именно будем вычислять вероятности событий события - это некая совокупность

фигурируют пото что мы именно будем вычислять вероятности событий события - это некая совокупность элементарных исходов вот даже в двух монетка мне же Вот хотелось бы Например посчитать хотя бы один орел а когда хотя бы один Орел это какие комбинации нам подходят Решка Решка Орел олтри Да ореол решка орешка ореол и орл Да всё верно три комбинации три элементарных Исхода вот какая-то исходов называется событием Ну и последнее определение - это вероятность Да непосредственно вероятность Это

называется событием Ну и последнее определение - это вероятность Да непосредственно вероятность Это количество получается вот так обозначают таким знаком модуля да Или мощность это ещё называют количество элементов которые нас как бы удовлетворяют Да количество подходящих исходов событии делить на всё количество которое есть самом дете фров кото може в принципе все как бы я думаю плюс-минус знают как считать вероятность Да из разряда типа Какова вероятность что на кубике выпадет счётное число

как считать вероятность Да из разряда типа Какова вероятность что на кубике выпадет счётное число Ну там из шести вариантов три значит 3/6 это в принципе ровным счётом то что мы сейчас с вами проговорили просто в некой такой математической Да ну задали немножко скажем так строгость строгость всем это вот вопросы какие-то если есть спрашивайте хорошо мы пока пойдём с вами дальше пойдём с вами дальше А ну да ну давайте Ладно одну тренировочка я бросаю два два кубика Какова вероятность что выпадет

А ну да ну давайте Ладно одну тренировочка я бросаю два два кубика Какова вероятность что выпадет чётная сумма сколько кто-то сказал я просто 27 2736 имеешь в виду или как вероятно же вероятность не может быть больше одного я просто три в третью степени л и всё Ну ну я не знаю 27 вероятность Не может быть а а в плане чётное суммы что-то не понял ну чёт ная сумма вот на одном кубике выпал один на другом три сумма вот ну сколько у нас вообще различных вариантов с вами исходов не 2Т половина 50%

другом три сумма вот ну сколько у нас вообще различных вариантов с вами исходов не 2Т половина 50% Да 50% Сколько у нас всего с вами различных исходов может [смех] быть степени ой нет нет ста комбинаторика очень важная что-то оценить посчитать сколько мощностей компьютеру надо Какая какой объём выборки там что-нибудь ещ периодически см сталкиваешься сечас сейчас мы будем шахмат у нас будет последовательно что ть получается так да 36 вариантов это в комбинаторике классическая история То есть у

что ть получается так да 36 вариантов это в комбинаторике классическая история То есть у меня на первый кубик шесть вариантов второй кубик независи тоже вариантов таких слух просто Т на 36 вариантов различных возможно вот я собственно говоря их визуализировать нарисовать Ну и чётные суммы как вот правильно Анастасия говорит да получается чётная сумма Это что это либо чётно плюс чётно правильно ой нечётное плюс да нечётно плюс нечёт п нам будет подходить Как вы понимаете ровно 18 соответственно

нечётное плюс да нечётно плюс нечёт п нам будет подходить Как вы понимаете ровно 18 соответственно вероятно что выпадет чётное число она на самом деле 1/2 1 когда вопрос настолько это просто по идее вероятность например сем она сильно больше чем вероятность усно двойки или это надо учитывать здесь они все равновероятны а а всё чно Если бы ты по-другому бы начал делать типа вот вот как раз таки этот хороший момент поднял это вот к вопросу Вот как раз таки важности правильно моделирования

таки этот хороший момент поднял это вот к вопросу Вот как раз таки важности правильно моделирования адекватного отношения к данным Потому что если посмотреть под другим углом А ну давайте расчёт на сумма какие суммы возможны у меня возможна сумма 2 3 4 5 6 7 8 9 10 11 12 солас есть самый маленький вариант ше дают 12 Если мы посмотрим типа ну давайте посчитаем сколько чётных здесь комбинаций Ну учётных сумм 2 4 6 8 10 12 это 6 всего здесь 11 чисел то есть вероятность 61 Хотя правильная

Ну учётных сумм 2 4 6 8 10 12 это 6 всего здесь 11 чисел то есть вероятность 61 Хотя правильная вероятность 1/2 Вот именно вот здесь вас ещё не запомнил тут Сергей получается что вот здесь как раз таки нельзя так просто сказать что давайте я двойку посчитаю как шестёрку потому что двойка может выпасть только как 1 вероятность 136 а шестёрка она может выпасть совершенно разными комбинациями Да это может быть 1 51 24 42 33 вот как-то так да классические Уловки теории вероятности понял спасибо Угу

может быть 1 51 24 42 33 вот как-то так да классические Уловки теории вероятности понял спасибо Угу Вот соответственно мы как бы да будем находить вероятность события поэтому мы с вами проведём некую классификацию событий события могут быть несовместны события могут быть зависимые независимые и ещ проговори с вами Что такое полная группа полная группа полная группа событий вот начнём совместно не совместно совместные события события одновременное появление которых Возможно да ну наме Давайте

не совместно совместные события события одновременное появление которых Возможно да ну наме Давайте вот приме можете из монеток можете из жизни что угодно Ну в смысле снег и ветер возможно снег и солнце возможно себе Если бы я был человеком у которого вообще нет никакого знания о том какая погода завтра будет условно да то В каком-то смысле Я бы мог строить себе вероятностные модели и утверждать что как бы в одном разрезе ветер в другом снег это вне и богатая и такое бывает да соответственно

что как бы в одном разрезе ветер в другом снег это вне и богатая и такое бывает да соответственно Вполне себе как бы события могут вместе фигурировать хорошо несовместные события Орёл Орёл решка одновременно на броске самый простой Орёл а орёл решка Ну да ну типа мы же 550 мы не можем иметь то И то и другое ну это прямо без какой-то монетки обратно Угу Ну да да Да ну что типа красивая богатая и умная Ладно давайте Ладно извините извините Давайте другие какие-нибудь примеры ещё не совместности

умная Ладно давайте Ладно извините извините Давайте другие какие-нибудь примеры ещё не совместности день ночь Ну например да да именно так вот у вас в циане Ну там конечно как бы нет Такой необходимости вероятность насчитать что-то но есть у вас вот квартира условно каждый собе - это событие и есть вещи ну намер не совместна не знаю что квартира будет 100 ме и она является однокомнатной условно Ну может быть конечно это и возможно Да но в очень исключительных случаях Ну сейчас так делают часто

может быть конечно это и возможно Да но в очень исключительных случаях Ну сейчас так делают часто про Чтобы наверняка 500 МТ и однокомнатная квартира и даже тут конечно нано возможно но бы я думаю суть выносимые воа вами занимаемся анализом данных анализ данных - это в каком-то смысле поиск зависимости поэтому зависимые независимые важнейший разрез среди этих всех зависимое события появление одного события влияет на появление другого события Давайте примерки был пример в подготовке к

одного события влияет на появление другого события Давайте примерки был пример в подготовке к выступлению когда мы вычисляли дни рождения сотрудников там были Я скрипте инсты если вот у одного уже наступило день рождения то общее количество становится меньше поэтому событие зависимое Но если я правильно помню Ну смотри есть например наша группа Да и мы вычисляем вероятность когда там у кого следующего Наступит день рождения если мы не знаем когда эти даты и когда у одного из нас уже наступило

Наступит день рождения если мы не знаем когда эти даты и когда у одного из нас уже наступило то дальше остаётся меньше то есть общее количество Да да это зависимо Ну то есть собственно говоря получается что события А это решение сейчас у кого будет день рождения событий б после того как первый вскрылся да говоря Ну дадада да да о нему зависимы согласен ещё какой-нибудь пример здесь примеры по-моему классические из медицины вот типа человек реально болеет чем-то и у человека анализ показал это

классические из медицины вот типа человек реально болеет чем-то и у человека анализ показал это или не показал и соответственно А где здесь зависимые независимые то есть чётко надо вот в зависимость событиях Надо чётко как бы есть А есть б б зависит от а то есть я попробую помочь а ну продолжай всё нет говори Ну вероятность то что ты болен это а вероятность которая это то что тебе пришёл положительный тест и у тебя из этого повышается сильная вероятность то что ты заболел но Ну вот ну Этока

тест и у тебя из этого повышается сильная вероятность то что ты заболел но Ну вот ну Этока Ловушка бай я тут так скажу вот я Я оттуда более простого У нас есть солнце Какая вероятность что дождь она всё ещё присутствует но сильно меньше потому что солнце Ну типа так оно да да да Абсолютно верно хорошо так независимые события появление события не влияет на появление другого Давайте пример чик какой-нибудь Э ты богатый и девушка тебя любит независимость с Бахте Хорошо понял Ну вообще как бы в

Э ты богатый и девушка тебя любит независимость с Бахте Хорошо понял Ну вообще как бы в целом такие вещи все надо ещё статистически проверять то есть мы с вами начнём я не конкретно про этот пример говорю Да А в дальнейшем мы будем как бы как вообще правильно это работает копятся Как раз таки выборки Да и мы выдвигаем гипотезы и статистически доказываем там независимость или Зависимость чего-либо так ну и последний вариант - это полная группа событий образуется если в результате испытания

так ну и последний вариант - это полная группа событий образуется если в результате испытания обязательно наступает одно из событий Да например не знаю замкнутой Груп по является время года осень весна лето зима если взять Случайный день в календаре он обязательно будет отнесён либо к осени либо к весне либо к зиме либо к лету получается да вот какие-нибудь ещё варианты жите все варианты погоды перечислить не буду перечислять но но оно есть да да да да согласен А если чтото бизнесом вы аналитик

не буду перечислять но но оно есть да да да да согласен А если чтото бизнесом вы аналитик своей компании вы анализируйте данные Ну пусть вот у вас будет не знаю онлайн магазин какой-нибудь там X раз Угу Ну если X раз объединить в одну группу тогда да то есть как получается что мы эту группу как бы сами можем формировать на ровном месте Вот мы с вами Вот здесь Да нас можно по-разному сгруппировать и мы будем полной группой событий например не знаю пол Да что есть мужского пола люди есть женского

и мы будем полной группой событий например не знаю пол Да что есть мужского пола люди есть женского пола Да и можно считать вероятности что Случайный человек будет там мужского или женского пола Мы бы уже являлись полными группами можно в другом разрезе было посмотреть не знаю в разрезе Может на наших музыкальных интересов или чего-то ещё так так хорошо давайте небольшой пример в мешке пять чёрных и четыре белых шара события а первым достали чёрный шар событие б вторым достали Белый шар какого

и четыре белых шара события а первым достали чёрный шар событие б вторым достали Белый шар какого класса это событие вот событие б какого класса независимое Да оно зависит Абсолютно верно то есть то что мы вытянем на первой трас конечно на это влияет второй Вот как раз точно такое же моделирование в каком-то смысле вот Костя озвучил Да с именинниками в принципе похожее моделирование ко А можете объяснить поподробнее почему это зависимое событие если мы вытягиваем просто шарик Вот и мы просто

объяснить поподробнее почему это зависимое событие если мы вытягиваем просто шарик Вот и мы просто вторым на Рандом также вытягиваем шарик но я понимаю что вероятность уменьшится с уменьшением шарико В корзине Вот и типа это является критерием зависимости критерием зависимости является когда вероятность наступления б влияет вероятность наступления событий влияет то что происходило на итерации а а всё понял И вот что шариков меньше стало это мы как бы то есть если Я вытянул первый чёрный шар то

всё понял И вот что шариков меньше стало это мы как бы то есть если Я вытянул первый чёрный шар то у меня как бы вытянуть второй белый будет вероятность 1/2 потому что 4 к четырём Но если Я вытянул сначала белый шар то у меня она как бы соответственно сколько там получается 3/8 да чуть меньше Так на улице безоблачной идёт дождь К какому какой классификации можно это отнести вот из того что мы с вами проговариваем не совместной совместной Да они не без Не совмест ну метеорологи бывали скажем что

проговариваем не совместной совместной Да они не без Не совмест ну метеорологи бывали скажем что это несовместная история Да обычно как бы мы видим облака когда идт дождь хорошо наступило утро и идт дождь они совмест сч зависимости надо проверять я не знаю тонны информации в нём то вы бы как статистики должны бы были выходить на улицу каждый божий день сколько я не знаю Вам элементо выборки нужно было не знаю предположим 400 вот годик потратите каждое утро стабильно встаёте и смотрите и

нужно было не знаю предположим 400 вот годик потратите каждое утро стабильно встаёте и смотрите и соответственно Точнее не утро тут же имеется в виду что утром дождь более вероятен чем вечером например короче собираете выборку и смотрите вот но я думаю что это независимые событие моё предположение я могу ошибаться так студент на зачёте сдаст или не сдаст полная группа нет да полная группа другого быть не может да либо сдал либо не сдал Отлично А у меня вопрос есть можно диаграммами Вена то есть

быть не может да либо сдал либо не сдал Отлично А у меня вопрос есть можно диаграммами Вена то есть тремя кругами показать это они взаимо исключаемые вот эти три класса То есть это может быть совместимые независимые и полная группа или может только совместимые и независимые а пол Груп они все как бы как сказать сейчас дальше у на будет визуализация по факту разные раз по-разному комбинироваться То есть как бы хорошо Так ну что ж мы собственно говоря Для чего всё это проходим чтобы правильно

То есть как бы хорошо Так ну что ж мы собственно говоря Для чего всё это проходим чтобы правильно считать вероятности да Потому что сам таких тривиальные вероятностей не будет всё равно есть некая конструкция вероятностная и она как правило вот как бы по кирпичикам собрана из этих трёх составляющих всегда Да вот и Давайте начнём с самого простого совместные несовместные события Итак если события а иб не совместные то вероятность возникновения хотя бы одного из них это просто немножко по

а иб не совместные то вероятность возникновения хотя бы одного из них это просто немножко по обозначениям вот так обозначают это да что выпадет хотя бы одно из Вот это значок как бы если переводить на язык н да это аналог оператора то есть возвращает тогда когда хотя бы одно из грубо говоря вот например не знаю бросаем мы бросаем мы игральную кость катно событие А на кости выпала двойка событие б на кости выпала четвёрка поэтому вероятность проми получается 2 вы как бы даже без знания

событие б на кости выпала четвёрка поэтому вероятность проми получается 2 вы как бы даже без знания совместности не совместности прекрасно бы это понимали Как посчитать Давайте какой-нибудь ещё [музыка] пример Давайте смотрите красных машин предположим в Давайте внутри МКАДа чтобы ограничить генеральную совокупность ши порядка водители девушек водители девушек Ну пусть будет 30% эти события независимые А ну хотя нет я вам уже к следующему даю вопрос следующему нет задач вернёмся но когда будет

А ну хотя нет я вам уже к следующему даю вопрос следующему нет задач вернёмся но когда будет зависимость независимость совместно не совместно здесь не получится именно в это моделировать что-нибудь ещё придумаем что-нибудь такое как бы более прикладное чтобы вот проецировать немного с кубиков всяких что-то другое а для совместных и несовместных считается одинаково Нет мы Пока говорим про несовместные сечас Нест получается что несовместны - это всегда часть как это называется полный какой те был

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

типа Какая вероятность что Клиент купил от нуля до покупал от нуля до одного раза это очень это в очень тривиальный тривиальный рассуждаешь а иногда бывает сти ый не знаю что привести пример Ну короче два события совершенно параллельны друг другу Ну вот например безоблачный идёт дождь Да соответственно Они вообще никак друг друга не зависят там уже немножко по-другому Так ну Давайте какой-нибудь ещё пример Представьте что вот вы опять же в онлайн-магазине вот у вас трафик льётся вы что-то там

ещё пример Представьте что вот вы опять же в онлайн-магазине вот у вас трафик льётся вы что-то там смотрите вопервых что там было бы не совместном во-вторых можно в цифрах посчитать было бы немножко вероятность пощупать ты то есть здесь мы в том числе о разных разрезах говорим Например если в пятницу мы делали эти анализ недвижке Да соответственно Например у недвижке есть там 20 параметров Угу хочешь ли ты здесь намекнуть На то что мы можем здесь разные параметры как бы да да да но ня на самом

ли ты здесь намекнуть На то что мы можем здесь разные параметры как бы да да да но ня на самом деле сейчас достаточно примеры в рамках одного то есть э что-нибудь такое Я так хочу чтобы все поняли Ну вероятность того что у квартиры есть балкон и вероятность того что квартира однушка там Так ну и вот Что вот у однушки есть балкон это не то нет ну это будет во-первых совместные события однушка же может быть с балконом Правильно мы сейчас говорим про несовместные А мы гори горим про мы говорим про

быть с балконом Правильно мы сейчас говорим про несовместные А мы гори горим про мы говорим про несовместны Мы ещё совместно даже не научились вят может лифт и балкон то что в одной Ну я вам так скажу в таких задачах очень редко считают эти вероятности они нужны больше в других историях Ладно давайте сначала разберём совместность потом вернёмся к этому так придумал давай дава если относить Я всё пытался онла магази свать вероятность выбора средст для покупки взять там типа наличка онлайн и

всё пытался онла магази свать вероятность выбора средст для покупки взять там типа наличка онлайн и что-то ещё Также можно не совместный по что что-то одно вот типа также навер Ну хотя Блин здесь распределение не ти не одинаковое всё да Ну да в принципе как бы это действительно будет несовместны и это то что вот там Анастасия в том числе говорила да что там не знаю человек совершал одну покупку две тче если бы мне нужно было бы считать вероятности то я действительно их складывал Да Какова

две тче если бы мне нужно было бы считать вероятности то я действительно их складывал Да Какова вероятность что ме шит покупку за предположим переводом просто переводом если у меня переводом либо наличкой давайте так ЕС у меня 30% перевод 40% безнал и сколько стоит 30% наличка соотвественно было 30 + 30 60% вот как бы Всё достаточно просто так далее идём вот ебя совмест вероятно опять же вероятность их совмест Ну наступление одного из Да одного из Да одного из как было соответственно теперь

их совмест Ну наступление одного из Да одного из Да одного из как было соответственно теперь тоже самое вероятность события А плюс вероятность события минус вероятность их пересечения Вот этот значок пересечение - это аналог оператора в питоне да то есть это как бы и то и другое Выстрели и событие А и событие Давайте посмотрим сначала Давайте вот наверно сначала вот этот рисунок а потом к задач к задачки перейдём вот когда у нас были несовместные события Представьте что вот у нас есть

к задач к задачки перейдём вот когда у нас были несовместные события Представьте что вот у нас есть пространство элементарных исходов это вот это всё да есть какие-то Элементарные исходы вот омега-1 омега-2 которые как попадают в а есть какие-то которые попадают в Б возможно но они нет их пересечения нет поэтому чтобы мне узнать вероятность совместного Ну наступления одного из Я просто складывал вероятность Да а далее Далее как бы Когда совместные события происходит такое что они могут наложи

вероятность Да а далее Далее как бы Когда совместные события происходит такое что они могут наложи друг на друга и теперь если я просто сложу То есть мне по факту когда вот вот эту вероятность про найти мне на самом деле нужна вот эта область правильно Если я тупо сложу плю то как бы Согласитесь что серединку я учитываю два раза поним здесь все Точнее Элементарные сходы как бы их вероятность суётся дважды и будет как бы искажение поэтому мы это вычитаем просто и того получается вот такая форма

дважды и будет как бы искажение поэтому мы это вычитаем просто и того получается вот такая форма тепер Давайте вернёмся как раз таки задач Ну тут достаточно тривиально чуть посложнее у вас будут сегодня задачи на практике бросаем игральную кость Какова вероятность что выпадет число либо чётное либо крат вот смотрите Я бы мог утверждать что событие А - это как ки события А у меня что вот на кости выпало чётное число соответственно у меня сюда входит кто двойка согласны двойка же чётная чётно

выпало чётное число соответственно у меня сюда входит кто двойка согласны двойка же чётная чётно четвёрочка там и шестёрочка шестёрку пока сюда поставлю забегая вперёд ну как бы это всё находится в рамках а согласны в рамках А вот далее соответственно на кости выпало кратная трём кратные трём у нас какие числа Ну это троечка и та же самая шестёрочка правильно вот они вошли двое соответственно Теперь если я просто сложу да то у меня как бы число чётно выпадет вероятность как бы 3/6 а вероятность

если я просто сложу да то у меня как бы число чётно выпадет вероятность как бы 3/6 а вероятность того что число выпадет крат 3 2/6 но вы понимаете что как бы вот эта шестёрка она сейчас лежит и здесь и здесь соответственно сделано двойная работа Это неправильно поэтому мы вычитаем и получается 3 + 2 ра 4/6 такая формула есть для общего вида для общего вида называется она формула включения исключения или формула весов которая позволяет находить объединение Ну как бы грубо говоря или что

исключения или формула весов которая позволяет находить объединение Ну как бы грубо говоря или что произойдёт или это или это или это для абсолютно любого произвольного числа для абсолютно любого произвольного числа событий Да вот ну как правило с большим не сталкиваешься то есть в аналитике оно может до Четы РУП формируется больше сильно не сталкиваешься вот собственно говоря формула я сильно на ней не буду останавливаться у вас будет одно задание сегодня там где нужно будет поднять формулу Ну

ней не буду останавливаться у вас будет одно задание сегодня там где нужно будет поднять формулу Ну собственно говоря взять и подставить просто в неё и посчитать А какие вопросы здесь есть совместность не совместность разобрались идм дальше теперь идм к зависимой независимой события опять идм с простого если события и независимые то вероятность их совместного наступления это просто умножение вероятностей то есть там получается у нас с вами было что сложение Да здесь умножение формула достаточно

то есть там получается у нас с вами было что сложение Да здесь умножение формула достаточно простая Ну как бы вот это напоминаю это что произойдёт и А и Б Да вот например классификатор правильно классифицирует объект с вероятностью 07 Вот мы с вами будем строить классификаторы строит Как как бы мы на фазе один их будем строить например классификатор который должен за детективе Да это его задача по входным данным которые есть как бы ну решить задачу и сказать что у этого человека есть вероятно

по входным данным которые есть как бы ну решить задачу и сказать что у этого человека есть вероятно проблемы с сердцем у этого нет там не знаю это классификатор может быть неровная сеть которая на картинке ищет людей Да она классифицирует постоянно Ну и в общем Везде где нужно как бы решать задачу классификации которую мы будем говорить на третьей неделе это всё можно назвать классификатор Итак классификатор правильно классифицирует объект с вероятностью 0,7 Какова вероятность что он правильно

правильно классифицирует объект с вероятностью 0,7 Какова вероятность что он правильно классифицирует два объекта подряд вот собственно у нас здесь 0,7 здесь 0,7 0,49 но тут очень важное условие чтобы а и б были независимы друг от друга это тоже важно Так а вот здесь собственно говоря есть ещё один очень хороший способ визуализации это дерево Вообще это на самом деле Одна из таких очень сильных структур дерево вы сегодня в принципе поймёте что через дерево Можно очень много что рисовать и там

структур дерево вы сегодня в принципе поймёте что через дерево Можно очень много что рисовать и там всё насто становится настолько прозрачно и удобно и хорошо что это очень классно Это не просто так в программировании одна из очень известных типов данных Да типов данных Потому что так удобно хранить данные и удобно их доставать это в анализе данных удобно Да структуризация и как бы за пределами анализа данных думаю много Это кто использует Кто хоть как-то структурно пытается мыслить вот что у

анализа данных думаю много Это кто использует Кто хоть как-то структурно пытается мыслить вот что у нас здесь с вами было бы есть у меня есть событие А я его ставлю на первый этап у меня произойдёт либо событие А что я правильно классифицировал с вероятностью на 07 либо событие не А вот обозначается это отрицание сверху вот эта линия то есть произошло противоположное То есть это как бы ошибка наша 03 далее соответственно события б не Б И тут тоже б не б итогово у меня вот они четыре разных

наша 03 далее соответственно события б не Б И тут тоже б не б итогово у меня вот они четыре разных варианта которые здесь есть и здесь я просто умножаю вот меня спросили раз что правильно дважды от классифицировал То есть я раз меня вот интересует вот этот А если бы у меня был бы такой вопрос К вам смотрите Какова вероятность сейчас немножко см совместно не совместно и зависимо Независимо Какова вероятность что классификатор правильно классифицирует один объект ровно один какая бы она была

вероятность что классификатор правильно классифицирует один объект ровно один какая бы она была [музыка] и вот эта ветка правильно то есть вот смотрите если некий такой Тайлан включим я вот часто как для себя такой Тайлан делаю всё равно зависимости Независимости есть как бы сначала одно событие потом идёт другое и получается что как бы вот в контексте вот этого таймлайна то у нас как раз таки зависимость независимость А вот мы складываем вот эти две ветки две вероятности потому что они

таки зависимость независимость А вот мы складываем вот эти две ветки две вероятности потому что они несовместны я либо по этому сценарию ибо поэтому правильного нено вот четыре выхода они четыре выхода У меня всё они несовместны я либо на двух объектах угадал два либо не угадал ни одного либо угадал там один Да не может быть как бы и того и другого там объекта Шрёдингера у нас здесь не будет да то есть это факт Я уже вижу это глазами правильно это произошло или нет всё А так что ну сейчас мы с

есть это факт Я уже вижу это глазами правильно это произошло или нет всё А так что ну сейчас мы с дерева ещё много будем рисовать теперь зависимые события зависимые события в принципе говорю самое наверно ну по факту самое важное что ли я бы сказал не то чтобы самое важное Но самое часто встречается Итак зависимое события если события А и Б зависимые то вероятность их совместного наступления можно посчитать с помощью так называемых условных вероятностей вот собственно говоря как это происходит

посчитать с помощью так называемых условных вероятностей вот собственно говоря как это происходит то есть Какова вероятность что наступит и А и Б это либо сначала наступило б тогда а наступает при условии б Вот этот значок это условные вероятности называется то есть а при условии и соответственно Либо наоборот если сначала происходит событие А тогда ОТБ при условии а пример в уровне пять белых и два чёрных шара Какова вероятность что мы достанем сначала белый шар потом чёрный смотрите вот

и два чёрных шара Какова вероятность что мы достанем сначала белый шар потом чёрный смотрите вот событие А что мы достали белый событие б что мы достали чёрный событие зат отбытия АС от что проо на первый тра это можно визуализировать на дереве Обратите внимание Вот первый первый у нас шар у нас а это достали белый белый мы достанем с вероятностью 5/7 То бишь произойдёт событие А чёрный с вероятностью 27 далее вот пойдём по этой ветке Обратите внимание - это вытянуть чёрный шар здесь вытянуть

27 далее вот пойдём по этой ветке Обратите внимание - это вытянуть чёрный шар здесь вытянуть чёрный шар это вероятность 2 потому что оба ных шарика у нас е а вот здесь соответственно нет уже здесь уже только Оше потому что один из двух чёрных шаров забрали вот это и есть условные вероятности которые как бы поменяли сценарий Да вероятностный в зависимости от того что было на этапе А вот здесь Обратите внимание как оставалось 07 к03 так и оставалось 07 к03 То есть б было вообще пофигу на угадали

внимание как оставалось 07 к03 так и оставалось 07 к03 То есть б было вообще пофигу на угадали мы там или не угадали само событие вероятность не меня никак а здесь уже имеет зависимость в принципе как бы весь анализ данных строится во многом ради поиска этих зависимостей Да мы эмпирически их будем восстанавливать алгоритмы машинного обучения будут строить Вот эти деревья за нас да и самые продвинутые алгоритмы классического машинного обучения если не брать нети они так или иначе построены на

алгоритмы классического машинного обучения если не брать нети они так или иначе построены на деревьях решений то есть они на основании данных пробуют сами построить это дерево и выискивать зависимости Да какие признаки важные были какие неважные вот если понятно же что не знаю квадратные метры будут важным признаком правильно и очень важным А есть наверно признаки которые могут быть Ну не сильно [музыка] важными так как ещё можно короче условную вероятность Мы в принципе проговорили с вами про

[музыка] важными так как ещё можно короче условную вероятность Мы в принципе проговорили с вами про неё Да вот мы столкнулись с вами с условной вероятностью условная вероятность она обозначается горил а при условии Б и её можно сказать её можно выразить вот такой формулой вот такой формулой но проще на самом деле посмотреть на картинках Я вообще больше фанат картинок Давайте посмотрим задачу и картин Потри Пусть имеется 12 шариков из которых пять чёрные а сем белые пронумеруй чёрные шарики от

Потри Пусть имеется 12 шариков из которых пять чёрные а сем белые пронумеруй чёрные шарики от одного до пяти а белые от 6 до 12 случайным образом из мешка достаётся шарик требуется посчитать вероятность того что шарик чёрный если известно что он имеет чётный номер то есть видите у нас есть известно а то есть выходят как бы условные вероятности правильно то есть теперь мне нужно не просто найти что достали чёрный шар А ещё При условии А что шар с чётным номером сможете на скидку сказать сколько

достали чёрный шар А ещё При условии А что шар с чётным номером сможете на скидку сказать сколько это И как вы рассуждали в таком смысле у меня в голове половина 50% умножить на 5 из 12 Давайте начнём кстати за меньше чем 5% понимаю потому что этих чётных их в сумме шесть они неравномерно распределены Да соответственно Не ну шары Я случайно достаю что что шары я буду случайно доставать Да к тому что по чёрном и по белом чётны распределены неравномерно смотрите если а известно то по факту У меня

по чёрном и по белом чётны распределены неравномерно смотрите если а известно то по факту У меня 2 4 6 8 10 вот только и 12 правильно только вот эти шары можно могут быть правильно соглас вот 2 4 6 8 10 из них вот эти две да 1 получается ны кто не стоп 2 чёрные А вот эти то есть ви как бы условна вероятность она просто ограничила Круг того что может быть да Ну предположим знаю в казино играть а Сергей там работает и инфу нам скинул что ребят сегодня сегодня выпадет обязательно чётный номер и мы

там работает и инфу нам скинул что ребят сегодня сегодня выпадет обязательно чётный номер и мы с вами начинаем сразу же выдаваться в подробности потому что смотрите вот это очень важно как бы в анализе данных это вообще Ключевая мысль это вообще Ключевая мысль именно как бы в анализе данных а там не в написании нере сетей в том что они решают А вот именно как бы когда мы ищем причины следственное связи - Это Ключевая история вот Какова вероятность что мы просто вытянем чёрный шар 5 да 51 А

связи - Это Ключевая история вот Какова вероятность что мы просто вытянем чёрный шар 5 да 51 А здесь соответственно у нас появилась какая-то водная Да ПБ при условии [музыка] а при условии А и вероятность поменялась мы с вами её посчитали 2/6 она поменялась в худшую сторону стало менее вероятно но она поменялась и в принципе как бы по факту все продукты которые мы видим не знаю какая-нибудь Яндекс еда порекомендует вам купить крабовый салатик потому что знаю что вы любите крабовый салатик и

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

я честно не понял почему Можно разок быстренько е раз Ну нам известно что шар имеет чётный номер Правильно Давайте сразу вот картинка Вот здесь собственно говоря вот вот можно вот здесь посмотреть нам поступила инфа что шар имеет чётный номер то есть вот смотри вот здесь весь сценарий у меня зарисованный [музыка] сказа что Ну точно будет счм номером если мы Сергею доверяем на 100% то есть вероятно что Сергей говорит нам правду 100% Да тогда мы можем доверять соответственно мы можем утверждать

что Сергей говорит нам правду 100% Да тогда мы можем доверять соответственно мы можем утверждать что это уже буквально факт и тогда как бы правила игры поменялись теперь вот этого всего нету Есть только вот это и нас спрашивают Какова вероятность что мы чёрный шарик достанем смотри шаров 2 4 6 8 10 12 из них д а из них два чёрных 2/6 либо 1/3 Угу а в формуле вот 2/12 по 6/12 это вот пересечение Ну я понял всё но если ты посмотришь Вот вот в знаменателе в знаменателе это вот эта вот часть А в

Ну я понял всё но если ты посмотришь Вот вот в знаменателе в знаменателе это вот эта вот часть А в числителе это вот эта вот часть то есть в каком-то смысле мы находим вес вот этого относительно вот этого это ровно то что мы словесно проговорили на графике нарисовали и можно это в дереве сделать и ещё всего ш Ну да да да не обязательно конечно с уменьшением пространства исходов но может быть в большинстве случаев это так и происходит да условная вероятность - это какие-то как бы какие-то данные

случаев это так и происходит да условная вероятность - это какие-то как бы какие-то данные которые искажают вероятность любого действия любого действия Вот например я не знаю я кидаю монетку ол решка Как вы думаете я её сечас скину с какой вероятностью выпадет ол С какой решка Ну примерно 05 055 предположим Да а вот знает что я научился монетку подбрасывать Так что у меня вероятность выпадение 95% соответственно как бы вот это знание если вам подскажет вы уже можете говорить что выпадет на 95%

соответственно как бы вот это знание если вам подскажет вы уже можете говорить что выпадет на 95% итно что вы нете будет вы это можно сделать можно Мот Что такое монетка по факту там чудес никаких нет просто Физика и всё соответственно Если вы как-то под контрольно это возьмёте то Вполне себе можно монетку бросать Так что будет ближе к 100% Ну человеку с его как бы грубо говоря рукой Да который и как бы не контроле слабой силы Сложно это сделать но исказить можно я ещё в институте это пробовал

как бы не контроле слабой силы Сложно это сделать но исказить можно я ещё в институте это пробовал не знаю зачем но пробовал интересно мне было почему 50 на 50 Как так с чем это связано Вот с таким вопросом я как бы пришёл тому что учился бросать монетку что её искало немного е фров данные которые искажают что искажают Ну не искажают смотри я гово вероятность предло согласен иоро записать себе конск сказал если вот смотри целевое действие предположим орл или решка вот оно если нету никаких

конск сказал если вот смотри целевое действие предположим орл или решка вот оно если нету никаких данных 50 на было менто не просто так монетку А что-то как бы имею Вот это знание Да которое о говорит луба Может вам соответственно помочь ставить на Орёл предположим и вы будете всегда ставить на Орёл А у меня Орёл выпадает с рят 70% всё у вас уже Успех на 70% Ани на 50 Если бы вы случайно угадывали это ещё называют априорная вероятности и апостериорная вот это априорная вероятность это

угадывали это ещё называют априорная вероятности и апостериорная вот это априорная вероятность это вероятность до того когда мы что-то знаем об этом процессе который ыва Вот это апостериорная вероятность когда появились новые данные которые как-то поменяли вероятность здесь поменяли в меньшую сторону Но как правило всех интересуют крайности то есть либо нулевая вероятность я не куплю этот крабовый салатик А значит я не буду этому человеку показывать выслать рекомендовать да Или в обратную

салатик А значит я не буду этому человеку показывать выслать рекомендовать да Или в обратную сторону в обратную сторону ближе к единице но монетку Да не хочется хочется хочется всё-таки более фактического получается так да Так ну что А я предлагаю мы можем с вами ещё посмотреть один блок он коротенький и сделать перерыв мы будем делать перерывы периодически либо сейчас сделать перерыв не плави точ нормально Давай посмотрим не нормально нормально А сколько перерыв это важно условная вероятность

нормально Давай посмотрим не нормально нормально А сколько перерыв это важно условная вероятность перерыв Ну минут 10 где-то сделаем вот так вот как как как хотите Я думаю что я думаю что давайте Да продолжим ВС Давайте продолжим так формула полной вероятности позволяет собственно говоря мы с вами что поговорили мы проговорили зависимость то чтобы вы па держали в голове и не уходили от него Да Мы научились находить вероятно вообще говорить Что такое совместно не совмест как они наход зависимая

научились находить вероятно вообще говорить Что такое совместно не совмест как они наход зависимая весь контекст этот обработали Да что в зависимых событиях есть условная вероятность но так или иначе это нахождение как бы вероятности для зависимых событий и последний разрез который как бы изначально у нас был в классификации событий - это полная вероятность Итак формула полной вероятности позволяет вычислить вероятность события А через вероятность его совершения при выполнении некоторых гипотез

вычислить вероятность события А через вероятность его совершения при выполнении некоторых гипотез заданной вероятностью Ну что тут скажешь Ну давайте вот как бы я сначала пример какой-нибудь нарисую А у меня есть пример Ну давайте чтобы не на урнах например [музыка] был Ну вон машины ездят в окошке у меня Давайте с машинами тогда пусть будет предположим предположим у меня сервисный центр Да я занимаюсь там ремонтом немецкого так получилось что данные которые я собрал знаю ня это Audi Да вот

занимаюсь там ремонтом немецкого так получилось что данные которые я собрал знаю ня это Audi Да вот пусть будет 30% [музыка] BMW вот 20350 Ну пусть будет 40% 40% это Mercedes Да вот и оставшиеся 10% Я назову это типа другое какие-нибудь другие Маши приехали так получается что я их Объедини всех в одну группу Может быть там Volkswagen Да это может быть там Opel и так далее Вот в общем как бы такая история и Давайте собственно говоря каждый человек когда заезжает он делает какое-то целевое

такая история и Давайте собственно говоря каждый человек когда заезжает он делает какое-то целевое действие Ну например купил какую-то услугу Да такое же может быть и оказалось что водители Audi Ну по каким-то причинам Я не знаю очень хорошо у нас с вами покупают услуги возможно механик с которым они разговаривают или продавец он кайфует по aud нап гоняет и советует что хорошая машина там ещ короче подкупает Но работает мы собираем данные мы владельцы бизнеса в итоге получается что целевое

короче подкупает Но работает мы собираем данные мы владельцы бизнеса в итоге получается что целевое действие совершалось там СР 80% здесь 20% Я буду обозначать как плюс-минус плюс-минус у BMW похуже BMW похуже 50% Да а 50% не берут далее Mercedes далее Mercedes Ну пусть ещё будет хуже не знаю 20 20% а здесь 80% и Давайте другое пусть другие хорошо покупают 50% тоже 50% 50% И вот такой вопрос стоит смотрите Какова вероятность что Случайный человек который к нам в общем катно купит у нас что-то

смотрите Какова вероятность что Случайный человек который к нам в общем катно купит у нас что-то это 02 на 08 п 03 на 05 п 0402 Да абсолютно То есть как бы у нас в данном случае являлось бы плюсом да Или событием А вот этим являлся бы факт что у нас что-то купили у нас что-то купили действительно четыре выход у на вами есть эту вероятность пото что мы знаем полную группу в данном случае полная группа у меня было бы Audi BMW Mercedes и другое они были бы полной группой Именно поэтому я могу как

у меня было бы Audi BMW Mercedes и другое они были бы полной группой Именно поэтому я могу как раз таки найти вот по формуле которую Серёже озвучил да то есть 20 на 80 30 на 50 ну и можно посчитать эту вероятность и мы будем знать Какова вероятность что у нас купит человек вот это полная вероятность опять заметьте конструкции дерева конструкции дерева очень удобна и всё прозрачно видно в том числе и по полной вероятности да как-то Так здесь у меня промер с урнами я его сейчас пропущу Антон это

и по полной вероятности да как-то Так здесь у меня промер с урнами я его сейчас пропущу Антон это Ольга говорит можно ещё пожалуйста вот Вернись на примерки который только что как вот ээ можно вот прописать как бы то есть 20 уть на 80 дальше Вот как пропишите как бы вот ну без ответа но просто м как бы это как эту задачку бы решили да хорошо А Ну вот пусть у меня А - это событие А - это купил да да событие А - это купил тогда бы я считал вероятность А вот она как раз-таки считается по вот этой

да событие А - это купил тогда бы я считал вероятность А вот она как раз-таки считается по вот этой формуле Да я у него не спросил всем ли знаком вот этот знак сумма я понимаю вот это сум су значок суммы получается что у меня в каком-то смысле это P от а при условии B1 Уно на P от B1 А это могло бы быть вот эта ветка то есть вот если бы вот Audi - это было бы B1 событие да Угу то получается что вероятность что зашёл покупатель владелец Audi и умножить на вероятность того что он купил это вот

вероятность что зашёл покупатель владелец Audi и умножить на вероятность того что он купил это вот эта ветка будет 02 у 08 вот далее где у нас ещё покупка есть может водитель BMW зайти да то есть это при условии что B2 это Пусть водитель BMW умножить на что вообще он к нам прит это водитель потому водите на самом де Они покупают хуже Но их больше то есть на самом деле денег может лежать здесь больше А вот это Баски ловушки про которые вы говорили в каком-то смысле вот то есть в данном случае

А вот это Баски ловушки про которые вы говорили в каком-то смысле вот то есть в данном случае было бы 03 у 05 п 04 у 02 А всё поняла Вот теперь понятно стало 0 на 05 и тогда и что мы посчитали мы посчитали вероятность того что к нам Зайд покупатель что-то купит правильно бы спросили не знаю какую ты прогнозирует выручку Угу Ну не выручку можно количество покупок давай так количество покупок месяц ты бы соответственно могла бы за счёт вот знания того Какова вероятность что человек который пришёл

ты бы соответственно могла бы за счёт вот знания того Какова вероятность что человек который пришёл купит предположим она оказалась 0,6 Я не знаю сколько оно Я не считал А ты знаешь А у тебя трафик 1.000 человек Ага соответственно если Сколько человек у тебя купит скорее всего 600 правильно а дада да Ага у тебя уже есть инструмент ты уже строишь финансовые модели может быть даже ценообразование своё под этот трафик как-то Да а угу подгоняет скажем так чтобы существовать хорошо и комфортно Ну

своё под этот трафик как-то Да а угу подгоняет скажем так чтобы существовать хорошо и комфортно Ну вот как-то так всего классно вот Теперь стало всё понятно спасибо большое вопрос почему в Формуле вот от от и до n а не от единицы до и от от кого ещё раз от и до н суммы Ага ну а от единицы до до и потому что у нас же и типа число не и - это вот вы когда пишете for I in Range правильно вот у меня так не не я вот про это и говорю что вот снизу единица А сверху и потому что N у нас вообще Неди нет

не не я вот про это и говорю что вот снизу единица А сверху и потому что N у нас вообще Неди нет и это счётчик Ты же когда пишешь for Range вот я же говорю что снизу типа один единица сейчас сейчас погоди пожалуйста вот они два числа о и N а I - Это счётчик который изменяется внутри формул и он сначала ран одному потом двум потом трём и так далее просто я говорю про то что вот у нас в сноске формулы и - это число гипотез общее Вот и мы получается в рендже и это делаем а не в рендже n нет и А ну

и - это число гипотез общее Вот и мы получается в рендже и это делаем а не в рендже n нет и А ну тут можно вот как бы вот это вот вот эта фраза кривая Вот её надо немножко переформулировать и не обязательно число гипотез и это как бы это Ита гипотеза Ита какая-то конкретная гипотеза Ну вот N тогда число гипотез а и счётчик да да да да Так а далее Соответственно что ещё А ну вот пример Вот это скал можете как проецировать и посмотреть А как полная вероятность считается собственно говоря через

можете как проецировать и посмотреть А как полная вероятность считается собственно говоря через дерево опять же но мы уже с вами с Мерседесом BMW Audi проделали ровно то же Что указано здесь поэтому как бы в лекции сможете вернуться и Ну вот это дерево я нарисовал для вот этой задачи да где есть три урны каждой белая чёрная вытягиваем А вот вот почему как бы очень популярна задача с урнами задача с монетками потому что они очень хорошо моделируют бизнес-процессы которые происходит в жизни

с монетками потому что они очень хорошо моделируют бизнес-процессы которые происходит в жизни моделирует процесс то есть по Дурной у меня подразумевалось BMW Audi Mercedes и другое белое Чёрное купил не купил поэтому как бы очень много есть процессов в жизни которые моделируются с помощью Вот таких простых и тривиальный игровых примеров типа монетки там да или М шариков или шариков Так ну и Давайте вам ещё одна Задачка последняя и уйдём на перерыв нам на самом деле Остаётся только формула байс

вам ещё одна Задачка последняя и уйдём на перерыв нам на самом деле Остаётся только формула байс А задача такая я её периодически задаю всем а соответственно там её Серёжа уже наверное знает может быть а Люба помнит задача следующая вот смотрите у вас 10 человек да у вас 10 человек мы решили с вами собраться поиграть в Мафию Я думаю так или иначе вы все слышали про игру в Мафию Да я буду раздавать я буду ведущим вы будете игроками 10 игроков у меня будет 10 карт одна Мафия де не мафий правила

я буду ведущим вы будете игроками 10 игроков у меня будет 10 карт одна Мафия де не мафий правила игры таковы что ну точнее вы все хотите быть мафией вам нравится эта роль вам хочется быть мафией мы договорились вами на определённое врем например а там зашла Оля первая я ей из десяти карт даю Да зашёл Кост второй я ему из девяти карт даю и так далее последний Но я ему даю последнюю оставшуюся карту так вот вопрос таков А какими бы вы зашли какими бы вы зашли за стол Если бы вы хотели если бы вы

так вот вопрос таков А какими бы вы зашли какими бы вы зашли за стол Если бы вы хотели если бы вы хотели быть мафией и максимизировать эту вероятность какими бы вы сели первым вторым третьим и так далее пятым шестым посередине посерединке понял звучит здраво а пятым или шестым вс-таки или без разницы без разницы Они же она же не делится ровно пополам там Медиа так хорошо услышал каке ещё варианты хочешь быть поэтому тебе уже приходится аналитику включать ещё до того как даже зайти за стол Так

хочешь быть поэтому тебе уже приходится аналитику включать ещё до того как даже зайти за стол Так ну пятый всё-таки пятый Мне кажется а не шестой пятый ко ещё какие версии я уже так понял что получается трое грубо говоря за пять-шесть да кого ещё не слышал Давайте вот Настя Дмитрий Люба если не помнит не пом под конец может под конец услышал то есть десятым Да ну в районе Ну по-любому оста во девятым десятого всё хорошо понял ещё варианти Я как рассуждаю что чем дальше ход тем выше вероятность

десятого всё хорошо понял ещё варианти Я как рассуждаю что чем дальше ход тем выше вероятность получить Мафию Но это как будто бы в расчёте что Эта карточка не имеет шанса пропасть А вот как посчитать бегло вероятность с счм того что возможно карточки уже нет там я пока затрудняюсь мысль-то да хорошая на самом деле Чем дальше мы заходим у нас в одном прибывает в другом убывает прибывает в том что карт становится меньше а убывает то что ВС больше есть риск то что Мафи просто не осталось я

что карт становится меньше а убывает то что ВС больше есть риск то что Мафи просто не осталось я правильною что это Ой извиняюсь перебил что это дерево по сути дела из двух решений Первое это то что мафия ещё осталась вторая то что ну вероятность е нахождения из оставшихся карточек и просто нужно перемножить две ветки Какая из них даст больше Я посчитал 10 этих веточек 10 так и есть но если 10 А давайте мы с вами знаете что сделаем давайте мы сейчас с вами зарисуй сек за здесь смотрите вот

А давайте мы с вами знаете что сделаем давайте мы сейчас с вами зарисуй сек за здесь смотрите вот давайте так давайте так пусть будет событие АИ всегда кстати очень правильно вот сегодня на практике формулируйте для себя чётко события тогда будет проще находить вероятность ЕС структуре не Подойдите закапывать будете очень сильно игрок в Мафии то есть Логично можно формулировать по-разному задача следующая Давайте попробуем оценить Какова вероятность что выпадет событие А1 То бишь Мафию вытянул

следующая Давайте попробуем оценить Какова вероятность что выпадет событие А1 То бишь Мафию вытянул первый игрок Какова вероятность Теперь смотрите А2 так вот если дерево нарисовать то мы увидим как раз таки эта штука решается с помощ дере и полной грубый потому вот не вытянул Мафию правильно соответственно тогда дальше начинает идти после этого тянет второй вот у меня таймлайне после этого начинает тянуть второй после м да после этого тянет второй и вот уже на этом этапе вот к этому моменту

тянуть второй после м да после этого тянет второй и вот уже на этом этапе вот к этому моменту времени Да вот к этому моменту времени двое вытянули карты возможно четыре варианта во-первых Первый вытянул Мафию и второй вытянул Мафию Ну то смотрите первый вытягивает Мафию С какой вероятностью мы посчитали 1/0 то есть не вытягивает 9 тогда вот здесь вот если первый вытянул Мафию второю Мафию вытягивает С какой вероятностью но нет 0 де Абсолютно верно мафии в колоде нет А если вытяну вытяну всё и с

С какой вероятностью но нет 0 де Абсолютно верно мафии в колоде нет А если вытяну вытяну всё и с вероятностью 99 То есть 100% он вытянет не Мафию по этой ветке как бы есть надежда Почему Потому что де десяток Да и А2 у нас с Вами тогда Какова вероятность ЕС не вытянул Мафию у второго Какова вероятность вытянуть Мафию 1 1 да Абсолютно верно и 8 де что он этого не сделает так вот собственно говоря где вытягивает Мафию второй Нам же надо ответить на вопрос а Какова вероятность что второй вытянет

где вытягивает Мафию второй Нам же надо ответить на вопрос а Какова вероятность что второй вытянет Мафию он либо вот здесь либо Вот здесь Да произошло событие А2 тогда мы начинаем считать это 1 Умно 0 тоь но это 9 у 1/9 9 у 1 и того получилась 1 де То есть если вы Сравните то вы увидите что вероятность абсолютно одинаковая она не поменялась и вот например P3 Давайте посчитаем Ну на самом деле вот как бы можно нарисовать все ветки Да А3 уже вариаций в четы сценариях как бы А3 выстрелит Но на

вот как бы можно нарисовать все ветки Да А3 уже вариаций в четы сценариях как бы А3 выстрелит Но на самом деле как бы не нулевая вероятность только у одного Исхода первый не вытянул Мафию с вероятностью 9 правильно второй не вытянул Мафию с вероятностью 8 де тогда третий С какой вероятностью вытянет Мафию Нет почему и если вы увидите после сокращения опять получается 1 а это знат неважно Каким бы вы зашли дем Что первым все получат вероятно я как-то просто в Москву ходил на Мафию и вот там меня

вы зашли дем Что первым все получат вероятно я как-то просто в Москву ходил на Мафию и вот там меня чувак грузил что надо садиться первым без разниц каким садишься А ну там не то чтобы надо первым он говорил о том что из-за того что чувак сидит первым у него Мафия более вероятно возни поиграем в [музыка] субботу телеграме проверим эксперимент Да я буду вам раздавать карты и мы потихонечку но тут е понимаете выпадало вот когда мы собирались Мафии у первого действительно чаще выпадало Но это

тут е понимаете выпадало вот когда мы собирались Мафии у первого действительно чаще выпадало Но это связано не с тем что он первым получал карту Это скорее ведущий как-то мешал Так мы как бы не можем полностью случайно размешивать карты Человек и скорее всего ведущий как бы у него так получалось просто случайно что у него Мафия оказывалась сверху это никак не связано с карту знае что она там где-то помята в уголочке Ну либо такое да либо такое то есть какая-то другая информация если ВС

там где-то помята в уголочке Ну либо такое да либо такое то есть какая-то другая информация если ВС действительно чисто случайно делать то тно без разницы первым вы Садитесь или последним Да Костя вопрос возник во-первых по ощущению мне очень зашла э сдача потому что какая-то магия Несмотря на то что я помню как проходила тервер ещ в банке Но сейчас по-новому всё это вспоминаешь Забавно А и вопрос опять про Универ значит ли это что например можно такую задачку переложить на вот эти темы Когда

опять про Универ значит ли это что например можно такую задачку переложить на вот эти темы Когда ты идёшь на экзамен и хочешь что пойти быстрее чтобы вытащить билет который ты точно знаешь Угу или там что-то по-другому как-то считается Ну например если есть 20 человек Какова вероятность что вытянет первый первый билет девятнадцатый вытянет первый билет мы бы с вами пошли человек на экзамен и у нас был какой-то порядок который Мы заходили выйти нать первый билет до эксперимента у нас была бы

нас был какой-то порядок который Мы заходили выйти нать первый билет до эксперимента у нас была бы одинаковая вероятность в отличие от Мафии там бы если ты зал первый не вытянул первый билет мы бы это узнали и вероятность К сожалению мы не знаем Мафия закрыта я тебе выдал первую Кату как бы соответственно там не знаю полу этого легче не стало по что не знает Вот то есть как бы такие тонкости моделирования А так как бы если до эксперимента если дефакто вот люди договариваются первым заходить или

А так как бы если до эксперимента если дефакто вот люди договариваются первым заходить или последним если билеты расположены Так что типа действительно не поймёшь что к чему Вот что первый что последний вероятность вытянуть одинаково это классическое правило анализа данных такая вот штучка Прикольная да это Но сегодня сегодня ещё это сегодня ещё разминочка разогреваем скажем так вот так Ну что ж я предлагаю сделать перерыв у нас с вами у нас с вами получается остатся только разобрать форму

ж я предлагаю сделать перерыв у нас с вами у нас с вами получается остатся только разобрать форму Поэтому вот сейчас 50 57 минут 57 минут Давайте в 07 минут возвращаемся выходите с конфы не нужно просто выключайте микрофон выключайте камеру через 7 минут ой через 10 минут в 07 минут я продолжу вещать пере Так ну что давайте возвращаться нам с вами осталось разобрать формулы байеса я уже так понял что кто-то с ней знаком кто-то её слышал да вот пр значит для некоторых не будет совершенно новым

что кто-то с ней знаком кто-то её слышал да вот пр значит для некоторых не будет совершенно новым но в принципе тут как бы ничего сложного нет тоже построена условных вероятностях вообще она является очень популярной даже как бы называют басовский подход теори вероятность В чём он заключается смотрите вопервых сама формула формула страшная может показаться вот где мы писали вот эту формулу с вами про зависимые независимые события вот что типа как бы это либо PB Уно на P от а при условии B либо

про зависимые независимые события вот что типа как бы это либо PB Уно на P от а при условии B либо P от а Уно на P ОТБ при условии А вот Представьте что в этой формуле Я бы хотел выразить P от а при условие B что было бы ну то есть мне вот это вот член нужно выразить как знаешь в школе уравнение решаем 2X + 3 = 7 вот выразить X вот тут вот се ещ А ну поделить всё на P ОТБ Да делим обе части на P ОТБ получаем соответственно вот такую вот формулу верно и это собственно говоря и есть формула

на P ОТБ получаем соответственно вот такую вот формулу верно и это собственно говоря и есть формула которая называется формулой байса м которая у нас с вами здесь изображена эта формула имеет большое практическое следство следствие гу так сейчас секунду у меня солнце компьютера греется уже очень сильно а Давайте разбираться Давайте разбираться итак у формулы есть очень строгое моделирование в принципе смотрите вот вот эта фраза Она очень хорошо говорит о том как бы в ЧМ идея байки концепции Как

смотрите вот вот эта фраза Она очень хорошо говорит о том как бы в ЧМ идея байки концепции Как это работает случилось какое-то событие А Какова вероятность что этому предшествовали обстоятельства А вот смотрите до этого я вам всегда говорю что есть какой-то временной и мы часто вот с вами выше везде находили вероятность Вот именно события б мы там как-то вот шли по веткам Да вот у нас было дерево а здесь мы с вами поступим В каком-то смысле в обратную сторону у нас будет следствие у нас будет

а здесь мы с вами поступим В каком-то смысле в обратную сторону у нас будет следствие у нас будет следствие и нам нужно определить А что являлось причины Ну то есть например задачи с BMW задачи с BMW Ну мне как бы сложно его в прикладном ключе смоделировать Но типа из разряда была совершена покупка Представьте что я вам говорю что у меня купили думаете кто у меня вероятнее всего её купил вот я говорю что вот ну пришёл чувак купил Mercedes А Audi Audi Audi Audi да более вероятно покупают но это

что вот ну пришёл чувак купил Mercedes А Audi Audi Audi Audi да более вероятно покупают но это вот это есть Байл ушка которую надо проконтролировать Я не говорю что тут Audi неправильно но Audi покупают лучше но их меньше Я думаю Mercedes не Audi 40 пришло 40% не там потому что 0 на а 20 на два раза больше всё Вы уже в принципе сами формулу баса как бы разобрали и понимаете как она работает то есть в каком-то смысле надо оценить вот вес масштаба Да вот Представьте не знаю А давайте так ну 100

в каком-то смысле надо оценить вот вес масштаба Да вот Представьте не знаю А давайте так ну 100 человек плохо Ну пусть 1.000 человек есть 1.000 человек да соответственно 200 уходит сюда Это ауст из этих 200 200 получается сколько 80% это 4/5 правильно 150 150 Да не не 150 Почему 160 160 160 да 160 вот 160 Купили бы да вот а как бы соответственно здесь есть какое-то количество купленных здесь есть какое-то количество купленных и так далее И когда я вам говорю что Ну вот у меня купили не факт что

какое-то количество купленных и так далее И когда я вам говорю что Ну вот у меня купили не факт что вот их будет больше всего Да потому что покупают да О не часто аус Но их меньше Mercedes наоборот мерседесам сееса больше но покупают они реже и соответственно вот формула как раз таки поможет вот это вот оценить это оценить у меня для этого есть пример задачки Давайте мы его с вами вместе разберём онлайн магазине было проведено исследование продаж розовых телефонов Выяснилось что посетители

онлайн магазине было проведено исследование продаж розовых телефонов Выяснилось что посетители женщины этот телефон покупают в 55% служ влу де в 50% женщин 40 мужчин 10 детей Итак был продан розовый телефон ко вероятно что его купила женщина [музыка] аж квая каких случаев пото что они в сумме не дают поэтому имеется в виду что если ты женщина вероятность того что ты купишь 55% типа того м ну да женщина купили не купили конкретно мужчина купили не купили и конкретно короче дере как в том как в

женщина купили не купили конкретно мужчина купили не купили и конкретно короче дере как в том как в той же ситуации с машино Да и давайте сейчас вместе с вами попробуем сонно говоря построить дерево применить формулу бас вы поймёте что у нас уже все ресурсы с вами для этого на самом деле есть тут Главное вот как бы и вы сейчас на практике будете решать правильно у себя в голове построить смотрите вот опять же бас это случилось какое-то следствие что ему предшествовал у нас с вами под следствием

вот опять же бас это случилось какое-то следствие что ему предшествовал у нас с вами под следствием подразумевается что был продан розовый телефон да и у меня его спрашиваю а кто его купил розовый телефон Ну может быть у меня нету как бы у меня Поэтому пользователю есть его уникальный р ID но я не знаю портрете этого пользователя если я буду знать что это предположим женщина возможно я буду как-то более правильно таргетироваться более правильно предлагать ей услуги в дальнейшем соответственно

более правильно таргетироваться более правильно предлагать ей услуги в дальнейшем соответственно Как получу какую-то информацию которую считаю что как бы мне будет может быть поле так вот тогда первый меня такой вопрос К вам это всегда точка холодного старта А если бы не было бы известно что куплен розовый телефон Какова вероятность что женщина купила Давайте вот я вот так поме вот Раз аж женщина пусть будет женщина мужчина и ребёнок типа А Купил купил а то есть либо купил либо купила а Ну

пусть будет женщина мужчина и ребёнок типа А Купил купил а то есть либо купил либо купила а Ну соответственно мужчина точнее женщина мужчина или ребёнок вот Какова вероятность что женщина совершила покупку 1/22 Да потому что ну раз как бы 50% женщин то Да 1/2 ну точнее на самом деле не совсем Ну да Да 1/2 всё верно тут правильно сказать что Посетитель женщина да то что вот не купил я Неправильно сформулировал если бы нас просто бы говорили что Посетитель Да Жен Жен ру говоря вот да это

сформулировал если бы нас просто бы говорили что Посетитель Да Жен Жен ру говоря вот да это действительно было бы 1но второй вот сейчас мы посмотрим тот факт что нам известно что это розовый телефон Был куплен поменяет ли наше знание об объекте как-то или нет Вот для этого нам нужно будет посчитать вероятность Да у кого-то был вопрос какой-то Да там не 0275 вот что женщин почему Ну что вероятность того что Посетитель женщина там 05 и потом 055 055 она покупает розовый телефон я говорю давайте

того что Посетитель женщина там 05 и потом 055 055 она покупает розовый телефон я говорю давайте пока о нём забудем А мы пришла же да то есть это это может быть у вас база данных в SQ где-то юзер ID по пользователю лежит мы о нём ничего не знаем Он просто бродит как бы у нас по онлайн магазину и всё А тут Бау Покупочка покуп речь это не не покупка а Посетитель получается Ну да да да да можно так угу Итак поехали Давайте построим дерево построим дерево а на первом этаже ну что сначала изначально

Итак поехали Давайте построим дерево построим дерево а на первом этаже ну что сначала изначально посещают то есть мужчина женщина ребёнок вот у меня вот так вот Нарисуем как раз-таки HM H G и HR А вот начнём с мужчины тут какая у меня вероятность что Посетитель мужчина 40 всё правильно а потом женщина получается 50 Да и ребёнок 0 0 далее Соответственно что у нас возможно мужчина если пришёл то он у нас может либо купить розовый телефон либо его не купить да то есть более глубокой аналитики у

он у нас может либо купить розовый телефон либо его не купить да то есть более глубокой аналитики у нас нет мы смотрим просто куплен розовый телефон против не куплен розовый телефон купил он там может быть чехол может ничего не купил Может наушники меня это не интересует как бы либо розовый либо не розовый телефон соответственно розовый телефон ж покупают в 5% случаев да то есть мужчин очень много в генеральной совокупности но при этом они мало покупают розовый телефон Итого получается 0.05

в генеральной совокупности но при этом они мало покупают розовый телефон Итого получается 0.05 верно значит вот здесь сколько будет 095 095 Абсолютно верно Так ну у меня дерево кривое получилось у меня в целом с рисунками не силь моя сторона Так что не обращайте внимания вот здесь соответственно у нас купил не купил женщина купит розовый телефо С какой вероятностью 55 более охотно покупают да то есть их и много они ещё и хорошо покупают розовые телефоны То есть как бы вот здесь 055 у меня Ну

есть их и много они ещё и хорошо покупают розовые телефоны То есть как бы вот здесь 055 у меня Ну ладно 055 соответственно здесь сколько будет что [смех] [музыка] роо телеон покупат в 15% случаев соответственно будет 05 и против не купить это будет у нас 085 Всё мы всё нарисовали Обратите внимание у нас есть во ой шесть выходов Да шесть выходов это несовместные события в жизни произойдёт лишь что-то одно Да в нашей в нашем временном пространно времени мы уже находимся здесь грубо говоря Вот бы

одно Да в нашей в нашем временном пространно времени мы уже находимся здесь грубо говоря Вот бы на этом этапе и нам говорят что телефон-то куплен и мы с вами понимаем Ага куплен телефон мы либо здесь Правильно Потому что здесь была покупка Это мужчина купил либо здесь либо здесь то есть вот они собственно говоря три три точки то есть вот эти они отпадают вот этот сши что это женщина Да есть но я думаю что вы все согласитесь тут невооружённым взглядом видно что женщина более вероятна среди всех

думаю что вы все согласитесь тут невооружённым взглядом видно что женщина более вероятна среди всех трёх их больше всего вообще в целом больше всего так ещё и они покупают лучше всего Мужчин много но покупают не очень Да детей мало Да и они покупают не очень ну собственно говоря понятно что вот вот это как бы скорее всего мы по этой ветке пришли это просто более вероятно Да И вот эту вероятность надо оцифровать для этого есть форму который как раз таки и позволяет нам с вами посчитать у формулы

оцифровать для этого есть форму который как раз таки и позволяет нам с вами посчитать у формулы байеса Вот она у меня здесь на языке H при условии А здесь она записана на а при условии б в принципе без разницы это одно и тоже как просто какими буквами назовёте но Давайте вот посмотрим вот вот здесь то есть у меня спрашивают Какова вероятность что купила женщина покупателем была женщина при условии что куплен розовый телефон то есть чем байс необычен тем что мы как бы анализируем прошлое исходя

что куплен розовый телефон то есть чем байс необычен тем что мы как бы анализируем прошлое исходя из того что сейчас произошло да то есть куплен розовый телефон это вот сегодня предположим а покупал его человек ну как бы это раньше было по времени Поэтому часто называют что есть следствие Что было причиной сломал свою машину движок Что является причиной опытные механики пытаются вычислить Да исходя из соответственно тся там в следующем виде То есть это вероятность того что был купленный телефон

из соответственно тся там в следующем виде То есть это вероятность того что был купленный телефон женщины розовый умножить на вероятность того что женщина вообще пришла к нам в магазин вот а в знаменателе знаменателе формула - это вероятность того что розовый телефон Был куплен сейчас если вот эту формулу расписать п а вот что такое П где у меня розовый телефон купили здесь здесь и здесь правильно по полной группе поэтому можно записать это следующим образом что это вероятность того что розовый

по полной группе поэтому можно записать это следующим образом что это вероятность того что розовый телефон Был куплен мужчиной для этого мужчине надо прийти соответственно умножим наше плюс вероятность того что телефон Был куплен женщиной для этого женщине надо прийти к нам и соответственно вероятность того что была куплено ребнком при условии что собственно говоря ребёнок к нам пришёл Вот и вот это всё как бы и есть п а теперь если посмотреть геометрическую интерпретацию Она до ужаса простая

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

есть знаменатель сумма всех этих трёх то есть сценарий что Был куплен розовый телефон а в счастлива именно женщина если вот как посмотреть на дерево то это достаточно тривиально и просто вот ну остаётся остаётся дело за Малом дело дело техники Как говорится посчитать в числитель у меня будет что 05 у 0,55 да знаменатель это женщина пришла женщина купила всё просто Вот соответственно в в знаменателе у меня мужчина пришёл 04 мужчина купил 05 только местами наоборот если что здесь вот стоит для

у меня мужчина пришёл 04 мужчина купил 05 только местами наоборот если что здесь вот стоит для тех кто будет лекцию пересматривать прокомментируй этот момент и в знаменатель тоже самое всё соответственно я я просто честно не особо на формулу опери я конечно её знаю но у меня в голове скорее сначала картинка А по картинке я восстанавливаю формулу понимаете да Ну тут у всех разное как бы восприятие кому-то нужно форму как в принципе мне когда-то но сейчас почему-то у меня мозг стал по-другому

кому-то нужно форму как в принципе мне когда-то но сейчас почему-то у меня мозг стал по-другому работать так в общем 04 у5 далее плюс что женщина купила ой женщина пришла женщина купила и ребёнок пришёл 0 да вот он пришёл к нам и ребёнок купил 05 Вот так вот посчитать Ну в принципе у меня это здесь посчитано и всё здесь расписано я как бы вместе с вами проделал чтобы мы максимально погрузились в процесс построения но всё в принципе здесь как бы у меня есть вот все эти расчёты вся эта формула Ну

построения но всё в принципе здесь как бы у меня есть вот все эти расчёты вся эта формула Ну и получилось 89% Обратите внимание Просто что Посетитель просто что Посетитель вероятность что женщина Посетитель 50% Это значит что если бы Ям [музыка] моего пользователя То вероятно что он принадлежит женщине 50% Да ну как бы если у меня есть данные о генеральной совокупности сколько у меня мужчин женщин и детей заходит то вот конкретно вот так далее соответственно исходя из розовых телефонов я могу

и детей заходит то вот конкретно вот так далее соответственно исходя из розовых телефонов я могу утверждать что так как розовый телефон Был куплен что это уже 50% под а 89% - это уже ого-го это уже достаточно уверенное решение по пользователю риск ошибится всё меньше и меньше Да я прошу прощения я не расслышал на созвоне Как правильно вот называть Бул Бул или просто Бул Бул Да всё у меня вопрос в вопросе задании Там написано сколько это процентов времени это [музыка] это 89% того что купили

в вопросе задании Там написано сколько это процентов времени это [музыка] это 89% того что купили Купили ро телефон из всех вероятностей или что это 89% да 89% это го Представь представил Случайный пользователь не можно можно на примере этого этого вопроса я к этому и подвожу тебя есть покупатель Посетитель онлай загатного не знае вероятность того что э женщина 50% правильно вот мы это в принципе сами строили как бы видели что у на женщина % но Был куплен розовый телефон вот это априорная

сами строили как бы видели что у на женщина % но Был куплен розовый телефон вот это априорная вероятность Вот это апостериорная вероятность и там и там мы находим вероятность что ID принадлежит женщине просто во втором случае мы ещё получили Дон И эту до воплотили в то что тено или что вот этот Посетитель конкретный А женщина вероятность будет 89% на же спрашивают вопрос другой делитель который внизу 31% Это это ри того что купили ро телефон вообще Абсолютно верно Да То есть у нас как бы вообще

31% Это это ри того что купили ро телефон вообще Абсолютно верно Да То есть у нас как бы вообще просто если вот человек придёт и купит то на 31% что это будет розовый телефон Ну так вот топи за розовый Да снизу это розовый телефон а сверху это что именно женщина купила розовый телефон есть Обратите внимание что вот то что в числителе является одной из составляющих того что в знаменателе и как бы если бы у вас был мужчина Мы бы здесь сделали бы H2 и была бы вот э если ребёнок то H3

и как бы если бы у вас был мужчина Мы бы здесь сделали бы H2 и была бы вот э если ребёнок то H3 соответственно была бы вот как бы вот эта сть Ну вот оставшиеся 11% это на двоих муж и ребнок виду что две вероятности туда уходят Ну собственно говоря вот оно дерево Да здесь Обратите внимание Здесь всё совмещен то есть Ну вот например вот это вот это вот это это несовместные события да или любой сценарий Вот например вот этот да что это женщина пришла женщину купила и вот этот сценарий мужчина

сценарий Вот например вот этот да что это женщина пришла женщину купила и вот этот сценарий мужчина пришёл мужчина не купил они не совместно этого никогда не произойдёт Поэтому если надо было я бы складывал эти вероятности ене было И то и другое зависимый Независимый здесь можно проследить Ну например розовый телефон влияет на пол человека который его покупает Нет не влияет Почему влияет Почему не влияет Ну смотри женщины покупают вот так мужчины покупают вот так Дети покупают вот так Ну то

не влияет Ну смотри женщины покупают вот так мужчины покупают вот так Дети покупают вот так Ну то есть мужчины только в 5% случаев его попат а женщины в 55% это было а это это работае в обратную сторону то есть Влияет ли ээ цвет твоего телефона на твой пол так можно этой вопрос перевернуть его ну тутс тебя руду телефон то ты женщина так нельзя сказать Ну если ты хочешь просто говорить как бы о корреляции то можно Если говорить о причино следственная связи то я бы скорее сказал наоборот Да что

то можно Если говорить о причино следственная связи то я бы скорее сказал наоборот Да что ты женщина поэтому у тебя вероятнее розовый телефон Да он наоборот не работает м наоборот и не работает я могу иметь розовы телефон и не женщина Ну да да Ну так ты можешь быть и женщиной И не иметь розовый телефон я и говорю наче ну зависимость есть это же она просто не стопроцентная это не значит что у любой женщины розовый телефон Ну у женщины более вероятно розовый телефон чем у мужчин значит

что у любой женщины розовый телефон Ну у женщины более вероятно розовый телефон чем у мужчин значит зависимость - это не полная зависимость это вероятность того то что это случится но это не вот я в самом начале меня сши зависимость это когда Ну как бы одно событие влияет на другое в данном случае это изменение вероятностей то есть вот вероятности меняются если у тебя квартира 50 МТ и квартира 1000 МТ То вероятно что она будет стоить 1 млн в случае 50 квадратов одна а в случае 1000 квадратов

1000 МТ То вероятно что она будет стоить 1 млн в случае 50 квадратов одна а в случае 1000 квадратов другая правильно то есть однозначное влияние есть но там настолько тривиально это влияние что там даже не надо проверять зависимость каждый человек знает что квадратный метр как бы и оценивается Да есть цена за квадратный метр поняти а когда-то приходится выискивать какие-то более сложные зависимости собственно говоря этим занимаются аналитики данных выдвигают постоянные гипотезы проверяют

собственно говоря этим занимаются аналитики данных выдвигают постоянные гипотезы проверяют зависимость независимость вопрос не про задачи А про такой тему про то что есть частотный подход Да френски я не знаю по-русски исинский подход в целом к статистике и вопрос насколько реально на практике используется второй соответственно нужно липни себе его ботать дальше Да у меня не об одном и том же на самом деле Ну как бы для меня вот частотно это если бы у меня было бы 100 человек 60 ушли сюда 40

самом деле Ну как бы для меня вот частотно это если бы у меня было бы 100 человек 60 ушли сюда 40 ушли сюда а вероятность на это было бы что вот у меня есть вся популяция это единичка 06 здесь 04 здесь Так что как бы если ты разберёшься в одном то у тебя не будут проблемы с другим совершенно Вот к чему я хочу сказать на самом деле как Типа я вижу что люди это учат Ну учат и практикуют отдельно типа что-то такое Ну не знаю дела людей я вот как бы считаю что на самом деле это очень близкая

типа что-то такое Ну не знаю дела людей я вот как бы считаю что на самом деле это очень близкая история не стоит закапывать в этом конечно на самом деле Ну бо если если не работать прямо в больших больших компаниях то как бы больше с частотой сталкиваешься в больших компаниях там строят более сложные Модели там чаще вероятностный язык но как бы вот если не грузиться то частотный проще Как по мне дальше я буду всё больше больше прогрессировать на частотный уровень Но это по факту одно и тоже

дальше я буду всё больше больше прогрессировать на частотный уровень Но это по факту одно и тоже чистота и вероятность реально одно и тоже так что Данки методы Да ы мой совет не грузиться по этому поводу ответ на вот так мо вопрос мы пока общались ть немного 8 попо 89% это купили женщины не там же про конкретну женщину ре покупок этого телефона конкретно про женщину шла какая преста я говорю Представьте очень хорошо представлять прям ну в реальном бизнес кейсе да у вас есть юзер какой-то у него

очень хорошо представлять прям ну в реальном бизнес кейсе да у вас есть юзер какой-то у него есть какой-то р ID представил это физически какой-то человек по у тебя нет этой информации кто это но тебе было бы плохо знать её мот конечно в лоб спросить да какую-то формулу там заполнить или что-то ещё ну как бы под вот этим полом как здесь может быть всё что угодно какая-то другая информация юзера да Но в нашем случае пол остаётся загадкой И если бы я бы тебя спросил без всякого вот этого а зная

да Но в нашем случае пол остаётся загадкой И если бы я бы тебя спросил без всякого вот этого а зная только распределение в генеральной совокупности вот эти данные я тея сл Какова вероятность что вот за этим сть это 120 роется женщина сказал чтото Она 50% правильно Да вот и как бы ну достаточно неуверенно решение Я конечно могу в базе внести теперь что это женского пола человек и дальше там наши рекламные там маркетологи Исходя из этого что там вырисовываются монетку подкинуть А в анализ данных

там маркетологи Исходя из этого что там вырисовываются монетку подкинуть А в анализ данных стремятся как бы не монетку подкидывать пото что монетку подкидывать как бы ну в чём прикол заниматься анализом данных вот а мы пытаемся как-то решить собственно говоря эту по в данном случае по действиям вот этого юзера его пол и как бы у нас есть инфа что розовый телефон как бы это такая прерогатива Женская Да исходя из статистики И соответственно когда она произошла с этим ID как бы ну математика

Женская Да исходя из статистики И соответственно когда она произошла с этим ID как бы ну математика говорит о том что теперь 89% вероятно что это женщина И вот это уже как бы ну можно более спокойно спать правильно быть более уверен свом решени Ой я понял Иногда просто за этим решением может быть поставить женский мужской а сказать надо лить человека или нет и принимать решение на миллионы для компаний и цена решения может быть очень серьёзная цена промаха цена ошибки может быть очень большая

и цена решения может быть очень серьёзная цена промаха цена ошибки может быть очень большая поэтому Большая разница я не кульминируют комедии хотя да вот так же то есть о оценивают кто это и потом потихоньку Они видят его причём Если вы находитесь предположим в экосистеме кани Я за Россию скажу в экосистеме Яндекса Яндекс ещё мониторит как бы Миллион Ну как бы миллион ещё других факторов собирает чтобы лучше вас понять и Да действительно сказать вам Когда вы хотите комедию о вам сказа вот есть

чтобы лучше вас понять и Да действительно сказать вам Когда вы хотите комедию о вам сказа вот есть классная комедия посиди покайфу или соответственно Если вы хотите чего-то другого да именно так это работает у вас будет на фазе 2 рекомендательная система вы будете обсуждать точно так же как бы там те же самые вероятности Да точно так же как бы там прям компьютер выдаст вероятность 087 что этот фильм зайдёт Сергею например да если Нас устраивает такая вероятность то мы с Сергей говорим

этот фильм зайдёт Сергею например да если Нас устраивает такая вероятность то мы с Сергей говорим потрясающий фильм смотри наслаждайся так всё это работает а теперь стало Понятно Потому что я так смотрю и фильм и аудиокниги точно так же то есть там сколько ты послушаешь и потом так У меня вопрос возник как так попадание Спасибо это да это задача рекомендательных систем бы Есть ну определённое моделирование в анализе данных рекомендательных систем Так ну что вам ещё рассказать то итог могу

моделирование в анализе данных рекомендательных систем Так ну что вам ещё рассказать то итог могу сказать теория вероятностей используется во многих областях знания с вероятно вероятно смыс можно интерпретировать многие задачи с операциями на вероятно надо быть очень аккуратными условны вероятности баский подход очень мощной концепции Если у вас есть какие-то ко мне вопросы по лекции Вы можете их задать а я вам кстати задам ещё одну задачку её ВС в её периодически задают просто под разным

их задать а я вам кстати задам ещё одну задачку её ВС в её периодически задают просто под разным соусом как бы суть одна смотрите Представьте что в семье есть двое детей представили это факт это уже сложившаяся история вот ну кто знает тот знает как бы кто не знает Подумайте в семье есть двое детей Один из двух детей мальчик Какова вероятность что второй ребнок девочка из известных фактов что мальчик девочка в каждой семье появляются равны вероятно то есть 50 на да И каждый новый ребнок его пол

девочка в каждой семье появляются равны вероятно то есть 50 на да И каждый новый ребнок его пол не зависит от предыдущих То есть это не значит что если бы в семье было бы 20 20 мальчиков точно была бы Девочка не была тоже 50 на мальчик девочка возвращаемся к исходному в семье двое детей это фа э дест что второй из них дево 1/4 1 либо мальчик а 1 вни у кого не получается у меня получается с должно приходить как бы я не говорю что это правильно просто рассуждаю с вами если рисовать де ма девочка

приходить как бы я не говорю что это правильно просто рассуждаю с вами если рисовать де ма девочка если на уга рождаются по факту то если нарисовать дерево если нарисовать дерево то нам подходят три ветки мальчик мальчик мальчик-девочка и девочка мальчик Угу давайте нарису да А так да В семье двое детей соответственно был когда-то первый ребёнок да потом родился второй ребнок родился второй ребнок здесь соответственно у меня будет м Здесь здесь получается м и здесь будет ж Да вот так и теперь

здесь соответственно у меня будет м Здесь здесь получается м и здесь будет ж Да вот так и теперь давайте вспоминаем то есть смотрите вот так как я вам говорю что мальчик девочка рождаются равновероятно значит 50 будет с мальчиками 50 с девочками вот нас вот это частотный вид да то есть в частотном виде пишу невероятном на 100 человек примерно будет 5050 соответственно здесь будет 25 здесь будет 25 здесь 25 здесь 25 Почему Да потому что соответственно Как вы понимаете от старого к новому ребёнку

здесь 25 здесь 25 Почему Да потому что соответственно Как вы понимаете от старого к новому ребёнку не меняются есть это независимые события да то есть кто у вас родится вторым ребнком никак не зависит от того кто у вас родился первым ребнком Вот это независимые событие значит вероятность сохраняются Итого как бы ВС достаточно равно вероятно все четыре сценария Да если бы сечас Взяли бы случайную как бы семью то она в принципе равно вероятно с любым из составов была бы в таком моделировании но

как бы семью то она в принципе равно вероятно с любым из составов была бы в таком моделировании но есть небольшая водная ложим сечас семьям сказали что пришла придёт семья с двумя детьми и там сказали Каб фразу а у меня там сын Тото мальчик соответственно отпадает лишь один сценарий только вот этот в плане последовательности Разве мы не считаем что навер то что наверху Это первый ребёнок соответственно я один из двух Я не говорю что первый ребёнок Мальчик я говорю один из двух это на самом деле

я один из двух Я не говорю что первый ребёнок Мальчик я говорю один из двух это на самом деле хороший момент заметила но я как бы подчёркивал это один из Потому что ты права если первый ребёнок мальчик то второй мальчик или девочка без разницы отпадёт всё Вот это угу 50 на 50 з он из дете мачи ска У меня сын то не зна сына с тренировки надо забрать ВС какого сына старший он или младший информации не имеем просто сына значит такого семьи невозможно и остаются три состава вопрос стоял следующий

не имеем просто сына значит такого семьи невозможно и остаются три состава вопрос стоял следующий что второй ребнок девочка получается нам подходит как бы два из трх либо ротного 2 поэтому знаете если разговариваете с какой-то семьёй и вам что-то скажут про сына а и вы знаете что там двое детей что там Дочка это более вероятный сценарий Блин можно добавлю Я просто когда давным-давно изучал было мне кажется Саша тоже в курсе скал супер классна Ну для меня меня мозг сма изначально про вероятность

кажется Саша тоже в курсе скал супер классна Ну для меня меня мозг сма изначально про вероятность заражения и если те прил предположительный тест пом Да я перебью те извини потому что у вас за эту тематику ва зада как ки Тубер доста редкое заболевание иде свой путь да Так ну что ж соответственно полека немножко посмотрели какие-то топ истории Да ну тут тоже моделирование достаточно часто как бы просто го его могут по-разному подать могут по-разному подать Давайте поговорим теперь тогда о

бы просто го его могут по-разному подать могут по-разному подать Давайте поговорим теперь тогда о заданиях сегодняшний день [музыка] в принципе будете писать ручкой а не код единственный такой у вас день Ну Кто хохочет Может в коде считать как бы можно всё и в коде делать но собственно говоря что у нас здесь есть смотрите у нас с вами вопервых задача из лекции советую с неё начать и здесь у нас есть 19 задачи задач может кому-то показаться много кому-то мало правильно нащупайте свой Темп

нас есть 19 задачи задач может кому-то показаться много кому-то мало правильно нащупайте свой Темп правильно оценивайте свои силы не рете потому Ну вы все приходите с разным бэкграунда кому-то Будет казаться что-то слишком простым сейчас кому-то что-то будет казаться слишком сложным через 3 недели может поменяться ролями когда фокус будет на другие вещи Data Science очень многогранный кто-то хорош в математике кто-то хорош в коде кто-то хорош генерирование гипотез кто-то хорош в железе там

хорош в математике кто-то хорош в коде кто-то хорош генерирование гипотез кто-то хорош в железе там кто-то хорош в ещё чём-то А как бы к чему я веду может такое произойти что вы как бы не успеете сегодня доделать это нормально Это нормально а можете сделать запас мы всё равно ориентируемся больше под скажем так тех кто Ну как бы то чтобы все с работы остались но постарайтесь наверное дойти примерно ну вот как бы задач 12 - это такой минимальный уровень который я хотел бы чтобы вы сделали если

ну вот как бы задач 12 - это такой минимальный уровень который я хотел бы чтобы вы сделали если сделаете всё прекрасно потрясающе Я буду только рад я буду только рад И постарайтесь помогать друг другу У вас есть какой-то общий видео видео скажем так типа да созванивались СТ как раз таки ВС что вокруг а не само обучение пото что этото всё обязательно поднимется и пойм очень важен микроклимат помогает друг другу там Атмосфера посмеяться полы обязательно всякие вот такие клюшки должны

помогает друг другу там Атмосфера посмеяться полы обязательно всякие вот такие клюшки должны присутствовать это Это хорошо Это это помогает тепер что е могу вам сказать но бы реквест Да ну или в общем у вас как-то проверяли на фазе ноль ваше задание фаза один будет построена как и фаза д как и фаза 3 на самопроверки Что это значит Это значит что мне никаких реквест от вас не нужно Вы Решаете вы можете как бы вот ну сделайте форк репозитория к себе и себе туда путе Да обязательно сохраняйте я

можете как бы вот ну сделайте форк репозитория к себе и себе туда путе Да обязательно сохраняйте я периодически буду ходить смотреть эти форки вот но как бы привыкайте к самопроверки Да привыкайте что у вас будет из ресурсов ресурсов много во-первых я Вы можете у меня спросить всё что угодно во-вторых я вам буду присылать сабмишн файлы в конце дня в которых будут как бы решения Да грубо говоря и каждый день мы с вами в 17:30 будем вместе созваниваться по вечерам и подводить итоги дня вот плюс в

день мы с вами в 17:30 будем вместе созваниваться по вечерам и подводить итоги дня вот плюс в конце каждой недели у нас будет возможность записаться на ревью один на один и соответственно задать все вопросы вопросы могут быть как прикладного характера типа я не понимаю что такое улыбается так и если вдруг у вас есть какие-то просто переживания может быть да и ну какие-то переживания это нормальная история Потому что я не пугающе хочу сказать я хочу сказать чтобы вы правильно просто к этому

история Потому что я не пугающе хочу сказать я хочу сказать чтобы вы правильно просто к этому отнеслись тем будет [музыка] [музыка] ввинчивается как кода так и касается каких-то факторов из то есть смотрите как бы отправлять ничего не нужно но у вас будет subm файл мы созваниваемся по вечерам и в конце каждой недели Вы можете записаться со мной Один на один пообщаться плюс соответственно у вас вместе какое-то общение помощь друг другу Ну вот вроде как бы по этой части Я всё сказал Если есть

вместе какое-то общение помощь друг другу Ну вот вроде как бы по этой части Я всё сказал Если есть какие-то вопросы можете спрашивать меня насчёт самопроверки типа то есть мы по факту а ти узнать или Неа буду отправлять вечером а ВС так собственно говоря по этой части мы с вами поговорили ещё у нас каждый день каждый день кроме пятницы пятница проектные дни очень часто кажды дет проходить в 2 в 9:00 утра созвон На нём мы все вместе мы правда будем делиться на комнаты чтобы быстрее это делать

9:00 утра созвон На нём мы все вместе мы правда будем делиться на комнаты чтобы быстрее это делать сегодняшний день является исключением потому что знакомство Ну в общем как бы с утра поговорили рассказали там ну Какие Какие впечатления там о прошлом дне что получилось что не получилось Ну в общем как бы вот такое утреннее приветствие скажем так да потом у нас будет в 2 часа дневной тоже общий созвон этот созвон на самом деле он очень важный его как бы почему-то некоторые недооценивают но это

этот созвон на самом деле он очень важный его как бы почему-то некоторые недооценивают но это очень важная История это этот сезон связан с новостным стендапом всегда будет эстафетная палочка и выделяется один человек который отвечает за новости и рассказывает про новости близкие к нашей теме Ну понятно что сейчас хайпует ии Да искусственный интеллект Но это может быть возможно просто технологии ли это может быть про бизнес да про каких-нибудь там техов и куда всё это идёт у нас в общем около

ли это может быть про бизнес да про каких-нибудь там техов и куда всё это идёт у нас в общем около того очень часто Ребята с разным бэкграунда рассказывают например кто-то пришёл из медицины как не знаю искусственный интеллект решает зада буквально 10 минут Да небольшой рассказ Это позволяет как бы видеть шире вы пошли в такую сферу которая меняется чуть ли не каждый день это Надо чётко понимать то есть если бы вы бы изучали какой-нибудь не знаю язык программирования чтобы быть там не знаю

то есть если бы вы бы изучали какой-нибудь не знаю язык программирования чтобы быть там не знаю разработчиком энда или фронтенда там нет такой динамики которая сейчас происходит в её нет да какие-то изменения кажды день выходят новые нейросети поэтому очень классно как бы расширять в этом плане Кругозор в каком-то смысле в ширину Да когда все рассказывают разные новости плюс какие-то актуальные вещи как-то так как-то так на первой неделе Вам никто не будет передавать эстафетную палочку Да а

вещи как-то так как-то так на первой неделе Вам никто не будет передавать эстафетную палочку Да а соответственно Приходите посмотрите там старшая группа иногда бывает короче да за 3 минуты кто-то рассказывает Ида за 10 то есть ну не надо долго Да потому что чтобы учёба это не мешало Ну и собственно говоря всё в 17:30 у нас созвон уже созвон только Ну наш наш с вами как группа вот такой вот распорядок дня Антон если не будет вечером на созвоне то это тебе в личку писать или если на созвоне

дня Антон если не будет вечером на созвоне то это тебе в личку писать или если на созвоне вечером сегодня не будет то тебе в личку написать или куда Да предупреждайте меня лично Если если вы по каким-то причинам отсутствует мы будем вести мы будем вести оно сказать ба В каком-то смысле за пропуски система очень простая Если вы будете пропускать вы потом будете не понимать Вы будете отставать и соответственно пропускать не надо пропускать не надо я имею в виду в первую очередь лекции поэтому

соответственно пропускать не надо пропускать не надо я имею в виду в первую очередь лекции поэтому Будьте добры их посещать Да как бы для вас всё это делается хоть и записи есть но всё равно надо и поэтому Если вдруг вас по каким-то причинам Личного характера его-то не получается можеть х проблем есть это просто чтобы я знал главно мы вас не теряли вечерний соз это получается подведение итогов сегодняшнего дня правильно Да да Хорошо можно быст То бишь нам задание нужно выполнить до вечернего

сегодняшнего дня правильно Да да Хорошо можно быст То бишь нам задание нужно выполнить до вечернего что вы ВС успеете Но вообще чет неделя первый день так и последний финализировать тем мы уже лучше будем вливаться и вы будете понимать как вообще происходит у нас здесь Да всё это Бывают дни когда мы можем просто с вами дружно зво 17:30 не надо потому что вам надо просто как бы лучше походить никаких проблем Это подвижная история но если так да 17:30 вечерни звон 9:00 14:00 дневной как-то так

проблем Это подвижная история но если так да 17:30 вечерни звон 9:00 14:00 дневной как-то так всё Ну что побежали Тогда погнали решать всё Удачи вам в новом путешествии сегодня удовольствие того просто ручкой насладитесь этим моментом всё хорошего дня до получается 14:00 а именно лично до 1737 пока

kom если что у тебя звук включен ели вдруг ты не хотел спасибо ага походу здесь вот там что ты будешь хавать толубай толу что ты будешь хавать рассказывай нам Доброе утро всем Кого видел кого не видел привет привет Как вы бодренько моренко все выспались вообще всё супер работаем Это приятно так сейчас я открою всё секундочку у нас кого-то одного не хватает Люба нет да Люба нет да Угу что у нас с утра было Ну что всё тогда начинаем с вами тогда начинаем Сегодня у нас с вами такой денёк будет а

утра было Ну что всё тогда начинаем с вами тогда начинаем Сегодня у нас с вами такой денёк будет а сейчас секунду Сегодня у нас с вами будет предложение как бы В каком-то смысле вчерашней темы потихоньку Погружение в статистику Ну в общем такой некий мостик этих двух наук плюс основные основные характеристики которые здесь есть и Да у меня просьба ребят к вам включайте камеры Работайте с включенными камерами чтобы мы все были погружены чтобы я всех видел Вот так вставлю свои 5 копе А Итак

камерами чтобы мы все были погружены чтобы я всех видел Вот так вставлю свои 5 копе А Итак сегодня у нас сопоставление теории вероятностей статистики основные распределения предмет изучения области применения поехали Итак составление теории вероятности статистики Ну понятно что статистика на самом деле прикладная наука Да а не теории вероятности то что мы вчера обсуждали но так или иначе вся статистика именно базируется на теории вероятности то есть её бы как бы не было бы грубо говоря Да если

именно базируется на теории вероятности то есть её бы как бы не было бы грубо говоря Да если бы не Т вероятности вот поэтому Нам нужен некий мостик между того между одной и другой науко И как это вообще выстраивается Итак мостик на самом деле в первую очередь строится на двух главных понятиях это Генеральная совокупность и выборка Генеральная совокупность - это все объекты которые имеют качество свойства интересующие исследователя Ну не знаю например например я не знаю хотел бы измерить рост

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

так как часто всю генеральную совокупность нам просто-напросто вытащить сложно Да вот такая иллюстрация в принципе как бы достаточно понятно что к чему то есть вот есть у нас вся Генеральная совокупность есть различные виды выборок да то есть вот это Например маленькая выборка но мы ещё на неделе с вами будем обсуждать будем обсуждать такой момент Что является маленько вы а где размер выборки достаточен чтобы принимать какое-то решение Да вот далее Ну нерепрезентативная выборо в данном случае у

чтобы принимать какое-то решение Да вот далее Ну нерепрезентативная выборо в данном случае у меня делится там да на мужское женское Ну соответственно здесь просто нарушена пропорция Поэтому вот в контексте как бы такого разделения это не репрезентативность ну и вот хорошая репрезентативная выборка ну [музыка] это наша неделя мы будем именно мата аппарат больше рассматривать Да считая что мы уже работаем с репрезентативные выборками но в жизни это не всегда просто на самом деле действительно

работаем с репрезентативные выборками но в жизни это не всегда просто на самом деле действительно собрать репрезентативный выборку потому что есть очень много факторов которые могут сделать Ну смещающий да Тебе кажется что эта выборка будет отражать твой бизнес-процесс или твою задачу А это вообще какая-то другая выборка вот так ну в общем здесь текста много но это больше для вас Да я в принципе проговорил есть Генеральная совокупность есть вы Итак всё так или иначе пойдёт вокруг этого и сейчас

есть Генеральная совокупность есть вы Итак всё так или иначе пойдёт вокруг этого и сейчас дальше у нас пойдёт некая терминология Мы тоже её будем смотреть в контексте как бы описание генерально совокупности описание выбо но ещё немножко терминов которые нам понадобятся рание дан в статистике называются поставление значений исследуемых данных с частотой возникновения этих значений либо с вероятностью в питоне вам это уже штука знакомая это хипт или барплот выглядит примерно следующим образом это

в питоне вам это уже штука знакомая это хипт или барплот выглядит примерно следующим образом это и есть это и называется распределением данных то есть ничего нового в принципе для вас нет тут у меня приведено в частотном виде где-то Нам нужно будет выводить в вероятностном виде но как бы из вероятностного вида в частотный перевести это просто разделить на общее количество то есть То есть это в принципе как бы никакой принципиально новой информации не даёт что вероятность что частота в принципе

как бы никакой принципиально новой информации не даёт что вероятность что частота в принципе Об одном и том же вот справа у меня видите соответственно есть числовой признак слева у меня дискретный категориальный признак на как правило Ну категориальное числовое отличаются между собой к подходу и к анализу данных поэтому мы будем это немножечко разделять всем ли Вот понятна разница между дискретных и непрерывных величин дискретно как правило категориальные в большинстве случаев Ну иногда бывает

и непрерывных величин дискретно как правило категориальные в большинстве случаев Ну иногда бывает какая-то нумерация не знаю например там количество людей количество людей не знаю пришедших на на наш сайт Там ежедневно вс-таки как бы некая дискретизация присутствует Да потому что Полтора человека зайти не может Вот но чаще всё-таки дискретно ассоциируется с категориальный [музыка] быть что-то ещё другое Не знаю цвет да Или ещё много категориальных признаков вы там с ними сталкивались на фазе

другое Не знаю цвет да Или ещё много категориальных признаков вы там с ними сталкивались на фазе ноль тоже вот и числовые признаки которые измеряют числовое шкали так Ну тут примеры приведены дискретные непрерывное дискретный тип автомобиля легковой грузовой словесное обозначение жёлто-красный количество людей в очереди на касе супермаркета непрерывные рост расстояние возраст и прочее так А вот теперь собственно говоря переходим вот вокруг распределения распределение - это очень важная часть

теперь собственно говоря переходим вот вокруг распределения распределение - это очень важная часть вообще анализа данных Это важнейшая история она есть везде и повсюду Да как поэтому вокруг распределения у нас пойдёт много телодвижений и Первое - это функция вероятности или pmf сейчас нас ждёт с вами четыре аббревиатуры pmf PDF cdf и PP пойдём по порядку может путаницу вызывать на самом деле не такой пута больши первое из них - это функция pmf или probity M Да это аббревиатура или по-русски это

пута больши первое из них - это функция pmf или probity M Да это аббревиатура или по-русски это функция вероятности это очень простой инструмент это функция возвращающая вероятность того что дискретная случайная величина X примет определённое значение K является инструментом анализа дискретных Велин нужен только для дискретных величин только для дискретных для непрерывных у него есть аналог собственно говоря здесь обозначение которое вы сможете встретить в статьях А в какой-то литературе или в

говоря здесь обозначение которое вы сможете встретить в статьях А в какой-то литературе или в чём-то ещё где вы столкнётся То есть это общепринятое название буков КП снизу Какая случайная величина и то чему Она равна То есть pmf xk можно увидеть вот например смотрите Давайте посмотрим аэ даже не так вот то что мы с вами вчера разбирали Как вы думаете почему у нас вчера не фигурировал Вот вот такое вот вчера мы с вами разбирали так называемую классическую вероятность это когда мы считаем

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

более вероятное есть которые менее вероятно и соответственно мы просто вот тупо создаём как не знаю как в школе вот y = x к функции были вот тут В каком-то смысле действительно тоже функция которая позволяет нам по значению оценить вероятность теперь что я ещё хотел сказать М давайте наверное даже открою А что я хотел ещё сказать по этому поводу так вот у меня в примере там приведено так называемое распределение берну Если вы увидите Сейчас секунду ещё пожалуйста вот если вы меня Посмотрите вот

распределение берну Если вы увидите Сейчас секунду ещё пожалуйста вот если вы меня Посмотрите вот у меня случайна Велина имение не известно но немножечко о распределения какие-то распределения вы уже точно слышали при поступлении например кто-то слышал по-любому нормально распределённое слышали вот я бы это знаете Как назвал то есть это в прямом смысле семейство вот проведём параллель проведём параллель в школе в школе нам с вами говорили когда-то всем что вот есть уравнение прямой линии оно

параллель в школе в школе нам с вами говорили когда-то всем что вот есть уравнение прямой линии оно имеет вот такой вид + верно и соответственно ставте свои к иб как бы у Вас как-то себя будет вести Прямая линия но она остаётся прямой линией неважно какой вы к и Б поставите она остаётся прямой линией она принадлежит семейству прямых линий Точно также будет в теории вероятности вот прямо тот же самый принцип есть семейство распределений и одно из них - это распределение Берли распределение Берли

принцип есть семейство распределений и одно из них - это распределение Берли распределение Берли оно очень простое с одной стороны и сверх популярно с другой Потому что часто возникает его моделирование Что такое определение Вернули Это игра в данет купил не купил понравилось не понравилось придёт не придёт прошёл следующий этап конверсии не прошёл да поддерживает не поддерживает и ещё много вариантов кошка или собака э Везде где есть моделирование бинарное у нас даже будет с вами очень много

кошка или собака э Везде где есть моделирование бинарное у нас даже будет с вами очень много во время обучения решения задач бинарной классификации То есть это либо ноль либо один это как раз-таки подчиняется а закону Берли это подчиняется закону Берли и вот у этого берну есть один параметр P вот этот параметр можно сравнить как вот здесь Было K и B здесь есть P Почему Потому что P P - это вероятность возникновения единицы тогда нолик С какой вероятностью выпадет если других вариантов больше

возникновения единицы тогда нолик С какой вероятностью выпадет если других вариантов больше нет 1 ми да Абсолютно верно Вот ИП же разное бывает согласитесь но например с монеткой примерно считается что она около 05 Хотя это как бы не всегда так например можно не знаю сходить опросить на улице уровень удовлетворённости там главой там какого-то муниципального управления Да узнать не знаю что популяция думает а можно вообще Какова вероятность встретить на улице динозавра какое там вот это будет то

думает а можно вообще Какова вероятность встретить на улице динозавра какое там вот это будет то есть P1 равно это значит что встре какое тамп будет видел кто динозавры но по кране мере там стреми у нас уже выб настолько большие что мы можем статистически значимо утверждать что встретить динозавра практически возможность Ну нету да в обычной повседневной жизни не Откуда взяться тиранозавра просто на улиц дивли не встретил я поддерживаю либо не поддерживаю я орл или решка просто вот этот везде

на улиц дивли не встретил я поддерживаю либо не поддерживаю я орл или решка просто вот этот везде разный А так ВС одинаково и вот у разного семейства распределения в дальнейшем мы увидим что есть вот ряд Вот таких вот гипер параметров скажем так Да как как вот прямо как у прямой линии и Б то есть распределение Берли мы параметр задаём для успеха но в этом плане СРО Уно едини не всегда это действительно реальный успех например это может быть обнаруженный рак условно да то есть выборки единицы

реальный успех например это может быть обнаруженный рак условно да то есть выборки единицы обозначаю Как именно вот такие вещи что что-то найдено Да ну как бы так как бы не официаль типа вероятность успеха то есть вероятность возникновения единиц так просто игра Вт [музыка] и у меня P Рав 06 P = 06 теперь как это в код мы ещё с вами будем проецировать в код давайте сейчас я его открою код чтобы мы ещё с вами Коди тоже А у меня сегодня DMS хороший так что ещё ч [музыка] вот смотрите а в

чтобы мы ещё с вами Коди тоже А у меня сегодня DMS хороший так что ещё ч [музыка] вот смотрите а в библиотеке ой в питоне есть такая библиотека которая называется Сай Эта библиотека она очень нужна для работы со статистикой очень нужна для работы со статистикой это библиотека где всякие распределения статистики статистические тесты и так далее Короче как бы вот типа Ну как-то так вот собственно говоря можете здесь найти её Ну документацию всё что угодно вот мне нужен под модуль в CP stats он

говоря можете здесь найти её Ну документацию всё что угодно вот мне нужен под модуль в CP stats он здесь там покажет вам много-много разных методов Здесь много распределений по сона вернули биномиальная нормальная Лог нормальная тут в принципе есть всё что ну очень большая библиотека действительно как бы хороший лай мне нравится вот и например например Я бы хотел смотрите Давайте вот к коду придём это ваш дефай он у вас есть он у вас есть подключаю стандартны Да мне для отрисовки нужно будет

это ваш дефай он у вас есть он у вас есть подключаю стандартны Да мне для отрисовки нужно будет пока что как бы сильно нам не делаем акцент тоже будет сво время на следующей неделе когда мы больше о НМ будем говорить пока что вспомогатель бито сечас здесь ячейку создадим вот как например создать распределение которое у меня вот в лекции вот здесь у меня смотрите это распределение бе вероятность успеха 06 То есть я просто пишу точка Вот у меня Берли он должен найти это распределение вот он его

успеха 06 То есть я просто пишу точка Вот у меня Берли он должен найти это распределение вот он его находит у распределения Берли это уже методы идут но здесь не видно Значит надо открывать документацию но я сам знаю что здесь надо указывать параметр самый главный - это вероятность успеха есть P равно P равно 0.6 вот собственно говоря я его создал это это Представьте это как даже не знаю как представить Это как коробка которая вам выплёвывает эти вот элементы выборки которые будут оттуда падать

Это как коробка которая вам выплёвывает эти вот элементы выборки которые будут оттуда падать То есть это само распределение Переведите эту параллель с математики в код то есть это само распределение Вот соответственно я бы его там не знаю А ну назову просто дист перемен и теперь Теперь если бы я бы хотел узнать а Какова вероятность выпадения единицы вот здесь мне нужна моя функция pmf Да которая как бы позволяет по значению по значению найти Вероятность возникновения и Давайте просто подставим

как бы позволяет по значению по значению найти Вероятность возникновения и Давайте просто подставим да pf единички вот вероятность возникновения единички ра 0 вероятность возникновения Нура 04 вот эти ерунда даже не реагируйте Вот например чтобы на монетке выпало 02 он говорит бы вероятность но или на монетке Ну понятно потому что у нас как бы только два варианта питон ошибку не бьёт просто говорит что такое невозможно нулевая вероятность вот создали уже как полноценный полноценный экземпляр

что такое невозможно нулевая вероятность вот создали уже как полноценный полноценный экземпляр класса Вот например ещё ниже [музыка] падает у него от одного до шести всё равновероятно правильно Вот точно также создаю есть R in то есть типа ну как бы случайное целочисленное число сгенерировать в диапазоне от одного до семи но как и в питоне это не правое число не включительно то есть на самом деле 1 2 3 4 5 6 это вот сам кубик вот экземпляр класса Да сди это сам кубик далее я например могу его

1 2 3 4 5 6 это вот сам кубик вот экземпляр класса Да сди это сам кубик далее я например могу его подкинуть подкинуть - это сгенерировать выборку оттуда это есть метод rvs у любого А ну ладно дальше про говорю про этот момент сгенерировать выборку вот 10 элементов 10 раз подбросил кубик А и получил вот такие вот подбрасывания Но об этом Мы ещё поговорим дальше Вот теперь pmf смотрите что здесь по pmf Я здесь ещё вывел для кубика видите pmf можно подавать удобно сразу же все значения То есть я

pmf Я здесь ещё вывел для кубика видите pmf можно подавать удобно сразу же все значения То есть я хочу найти Какова вероятность что выпадет на кубике дни че п шест для этого я как бы пользуюсь методом барплот потому что ну категориальный признак Да в каком-то смысле и просто по оси X вбиваю значение кубика по оси Y метод pmf То бишь вероятность Ну и собственно говоря мы с вами видим что для кубика действительно все значения равно вероятны от оного до ше удобном что чтобы его было конкретно на

действительно все значения равно вероятны от оного до ше удобном что чтобы его было конкретно на каждом конкретно на каждом двойка с вероятностью 0,16 но я думаю что 1/6 - это и есть примерно вот 0,16 и Семёрки на кубике быть не может Вот то есть мы с вами и кодово посмотрели немножечко Да и начали обрастать теоретически все э терминологии по pmf есть какие-то вопросы или нет Угу Хорошо тогда идём дальше следующее - это PDF или probability density это полный аналог pmf Ну почти полный аналог

дальше следующее - это PDF или probability density это полный аналог pmf Ну почти полный аналог там есть некоторая разница Но это вообще ерунда P и PDF PDF аналог только для непрерывных величин понимаете да то есть когда величина непрерыв у на график уже вот не так дискретен как здесь вот з В каком-то смысле и вот когда вот именно слотом аналогом является метод работает он в принципе точно так же как бы выражает нам вероятности Да конкретно в какой-то точке это нам понадобится и завтра

так же как бы выражает нам вероятности Да конкретно в какой-то точке это нам понадобится и завтра послезавтра и послепослезавтра И вообще это в целом очень полезный инструмент его абревиатура Да плотность вероятности функция плотность веро у меня на рисунке как вы думаете какой какой вид распределения нарисован норма нормально всё верно нормальное распределение но как вот обернули я вам сказал что может быть параметр Вот 1п который играет Да как бы вид грубо говоря вот у меня здесь P равно 06

может быть параметр Вот 1п который играет Да как бы вид грубо говоря вот у меня здесь P равно 06 был но он может быть 0,9 или 0,8 то есть в общем параметр распределения у нормального распределения это два параметра о них Мы ещё дальше поговорим но сейчас чтобы быть в контексте это грубо говоря м - Это середина купола серединка А вот э Сигма Это насколько широко А мы от этой серединки отклоняет собственно говоря вот у меня три примера вы можете увидеть что вот это вот у меня вот Сигма равно 2 2

говоря вот у меня три примера вы можете увидеть что вот это вот у меня вот Сигма равно 2 2 кубик расползается да А вот если сравнить вот эти два у нас то М ра 2 м ра 4 просто как бы купол сдвинула в сторону Вот и для такого распределения для такого распределения Мне бы нужно было находить PDF именно я бы уже не смог бы найти pmf потому что Ну было плохо Просто так вот у меня здесь отдельно распределено дискретно и непрерывно Вот давайте к непрерывному опустимся Я здесь у меня ти распределение

дискретно и непрерывно Вот давайте к непрерывному опустимся Я здесь у меня ти распределение Аля рост людей считаю что в среднем 175 отклонение на 8 пока Не суть важно об этом мы чуть дальше поговорим ещё короче есть какое-то распределение людей и я могу Ну во-первых вот у меня опять выборка и по 100 случайных людей измерил но я также могу вот построить график дифа что мне для этого нужно смотрите для графика в питоне функции строятся очень просто питон говорит ребят Вот мне нужна вот эта ось И

для графика в питоне функции строятся очень просто питон говорит ребят Вот мне нужна вот эта ось И мне нужна для них соответственно вот эта ось это все графики питоне строятся так Поэтому я здесь сам сгенерировал вот эти значения иксов А Y просто поставил функцию PDF генерировать точки можно через NP то Lin Space Я говорю что вот нужно от вот этой точки это правило трёх сигм Кто не знает уже ну короче правило трёх сигм чуть дальше проговори но я исходя из него генерировать в общем оно мне

ну короче правило трёх сигм чуть дальше проговори но я исходя из него генерировать в общем оно мне позволяет понять где примерно точки лежат вы как бы когда будете уже смотреть код приступите к заданию вы поймёте что я имею в виду в общем я вот от этого до этого числа сгенерировал 1000 точек И вот оно всё вот это вот просто наведение красоты сам график Вот он я поставил вот эти точки то бишь рост людей и посчитал насколько их вероятно встретить Ну ещё сюда элементы выборки тоже отобразил Ну

людей и посчитал насколько их вероятно встретить Ну ещё сюда элементы выборки тоже отобразил Ну короче получился Вот какой-то вот такой график не получился Вот теперь получился с помощью PDF Я бы мог конкретно ответить на вопрос а Какова вероятность встретить человека с ростом 175 можно воспринимать это Какова вероятность его встретить или какой процент людей в моей генеральной совокупности имеет такой рост ну и в общем как бы так далее соответственно вот у меня получается 175 Ну более вероятно

такой рост ну и в общем как бы так далее соответственно вот у меня получается 175 Ну более вероятно чем 183 Вот такая история вопросики какие-нибудь всё ли понятно тут с PD Можем пока пока далеко не ушли обобщить ещё раз области применения pmf и PDF PDF - это непрерывные величины и нормальное распределение pmf - это дискретные и распределение не совсем распределение вернули мы привели пример но я бы сказал - это любое непрерывное распределение А pmf любое дискретное это я просто привёл на

но я бы сказал - это любое непрерывное распределение А pmf любое дискретное это я просто привёл на примере нормального распределения и распределения берну но ещё очень много других разных распределений о которых мы в конце проговори то есть непрерывное распределение но не обязательно нормальное вот всё понял то есть сечас функции сво голове не связывать с распределения просто понимать что что Абсолютно верно Да я так понял в МФ мы считаем точное число а в фе считаем до этой позиции от начала

верно Да я так понял в МФ мы считаем точное число а в фе считаем до этой позиции от начала всю плотность под графиком как получается имеешь в виду Вот это это парабол то есть да вот так считаем не мы считаем конкретно вот этот участок сечас точку этом ие Ну например вот 175 175 где Ну 175 не ровно Вот давай 183 вот 183 где-то вот здесь ты как бы и Находишь в принципе В каком-то смысле вот это значение Поня всё А про то что ты говоришь мы дальше про говорим это тоже как бы важная штука

это значение Поня всё А про то что ты говоришь мы дальше про говорим это тоже как бы важная штука интервальную вероятность находить всё соответственно мы как бы уже с вами Если знаем распределение то можем всегда просто в одну функцию вывести вероятность возникновение какого-либо события е раз давайте подытожим бы отдельному есть непрерывное распределение есть дискретное Я просто как бы на примере привёл нормально Тут может быть как говорится здесь могло бы быть ваше распределение вот если

привёл нормально Тут может быть как говорится здесь могло бы быть ваше распределение вот если только оно являлось бы непрерывным вот и собственно говоря с pmf тоже самое Да если бы только Главное чтобы оно было категори вы кстати вот вот смотрите можно знаете как вот вот в принципе Википедии есть распределение Давайте например возьмём distribution распределение посо это дискретное распределение тут всегда хорошо написано в Википедии про эти распределения видите у него график pmf M F потому что

всегда хорошо написано в Википедии про эти распределения видите у него график pmf M F потому что оно дискретно да вот и всегда здесь какие-то характеристики Многие из них вы уже знаете о многие мы сейчас с вами проговори здесь в общем описание того как оно моделируется как в жизни возникает короче в Википедии на самом деле хорошо О распределения написано так например Давайте возм экспоненциальное распределение это тоже м проговори дано непрерывным видите тогда PDF высвечивается probity и там и

распределение это тоже м проговори дано непрерывным видите тогда PDF высвечивается probity и там и там лежит cdf собственно говоря про который у нас с вами и пойдёт речь дальше Теперь cdf смотрите часто часто В задачах нам нужно с вами найти не часто нам нужно с вами найти не точечную вероятность а интервальную вероятность или не точечный процент а интервальный процент но например не знаю Я бы хотел узнать не ровно сколько людей у меня ростом там 175 а Каков процент людей в популяции который

хотел узнать не ровно сколько людей у меня ростом там 175 а Каков процент людей в популяции который там выше или ниже чем 175 да Или например у меня льётся трафик на сайт и я его могу анализировать А с какой вероятность у меня завтра будет больше 100 человек которые зайдут да то есть меня не интересует чтобы ровно 102 зашло человека Или ровно 1005 Какова вероятность что больше 100 зайдёт Или например от 90 до 110 То есть как бы инструмент интервальной вероятности он очень нужен нам интервально

от 90 до 110 То есть как бы инструмент интервальной вероятности он очень нужен нам интервально вероятности или интервальной процентов и как бы именно этим инструментам является cdf или то есть здесь как бы кумуляция обозначается буков F большое Я считаю что очень часто применимый инструмент даже может быть пого что было вероятность того что мы с вами меньше чем задно число Вот давайте вам Задачка Давайте вам Задачка так сейчас первый раз в этом редакторе что-то он-то не уделяет всю массу

Давайте вам Задачка так сейчас первый раз в этом редакторе что-то он-то не уделяет всю массу Представьте что X - это у меня кубик вот просто всё кубик он честный действительно всё падает равновероятно и тогда такой к вам вопрос есть Давайте PDF вот у этого икса в тройке посчитаем и cdf у этого икса посчитаем в тройке Чему равен PDF у нас будет 1 Абсолютно верно потому что это вероятность возникновения тройки на кубике 1 А чему ра кто Хорошо понял сейчас молчит хочу чтобы вот те кто не уверен

тройки на кубике 1 А чему ра кто Хорошо понял сейчас молчит хочу чтобы вот те кто не уверен там или так далее подумал порассуждал и не стесняйтесь отвечать у нас здесь с вами никакие не это не школа да то есть моя задача на Бро что меня все поняли внутри 05 Так почему 05 Ну что у нас всего шесть Угу возможностей исходов Вот и дада да всё верно я просто А вот этот вот этот обозначение у самой функции cdf вот можно вот обратно к к обозначению в слайдах а да дадада А вот это греческая буква е Или

cdf вот можно вот обратно к к обозначению в слайдах а да дадада А вот это греческая буква е Или там что это какая вот э вот имеешь в Ви нет нет нет ну там где x сама переменная обозначается у cdf перед скобочка а это X у меня вот вот и что Что это Это у нас это случайная величина которую мы исследуем это вот исход случа Ну типа часто Вот вы можете увидеть вот так обозначают типа распределено тако Да спасибо А где у меня ну в этой Лучано вот Какова вероятность что примет значение там 1 2 3 4 5 6

Да спасибо А где у меня ну в этой Лучано вот Какова вероятность что примет значение там 1 2 3 4 5 6 и так далее и мы всегда рассматриваем что будет меньше или равно кото указали вот всё верно всё верно Вот здесь я зарисовал видите вероятность единички 1/6 вероятность двойки 1 вероятность тройки 1/6 чеки 1 такое распределение на самом деле тоже есть оно называется равномерное или его по-моему вот так подчёркивают говорят что дискретно равномерно и указывают просто на каком интервале от одного до

подчёркивают говорят что дискретно равномерно и указывают просто на каком интервале от одного до ше то есть Вот видите мы уже с берну Познакомились уже с равномерным дискретным распределением и нормальное распределение тогда у меня такой к вам вопрос Окей как бы вероятность быть Меньше но вроде как А собственно говоря Почему здесь 1/2 Саш давай закончим мысль-то чтобы все поняли Ну что X у нас меньше или равно х То есть это 1 2 3 и три значения ше да да Дада Всё верно Так сейчас я то есть cdf -

или равно х То есть это 1 2 3 и три значения ше да да Дада Всё верно Так сейчас я то есть cdf - это интеграл PDF по X или дадада да да так и есть Так и есть cdf у нас с вами то есть вот э вероятность того что X будет меньше либо равен трх то есть на кубике выпадет меньше либо равно ТМ собственно говоря это вот вот эта часть Да просуммировать чтобы всем было наглядно и понятно о чём идёт речь Ну собственно говоря как бы интервальная вероятность в нижнюю сторону это классно но иногда она нужна

собственно говоря как бы интервальная вероятность в нижнюю сторону это классно но иногда она нужна например в верхнюю сторону а как мне ответить на вопрос следующего Какова вероятность что на кубике выпадет число больше пяти например [смех] 1 мину cdf п Всё верно действительно так потому бы Смотрите по факту менят как бы вот эта часть правильно но если я возьму C5 то я вот получу вот эту вероятность если я из единички выч то у меня останется ровно вот этот кусочек правильно Поэтому Если уж

если я из единички выч то у меня останется ровно вот этот кусочек правильно Поэтому Если уж прямо полностью это записать то можно записать это единичка минус вероятность того что мы будем меньше либо равны пяти А это и есть cdf 5 cf5 иго 1 ми CD всё Вот такая вот вот такая вот история А есть ли это интервал какой-то сейчас ага сейчас обсудим это как раз был мой Следующий вопрос здесь короче вероятность у нас Сколько получается кстати Давайте кого-нибудь кого я редко слышу Дмитрий например да не

у нас Сколько получается кстати Давайте кого-нибудь кого я редко слышу Дмитрий например да не про что вопрос вопрос вот чему Вот это выражение будет равно это будет 5 да Абсолютно верно потому что только шест Да у нас попадает под условия только является больше пяти на кубике как бы поэтому это 1 вероятность Так теперь теперь теперь что ещё я хотел да интервальная вероятность интервальная вероятность давам от на такой вопрос а Какова вероятность что на кубике выпадет число Ну давайте от д от

давам от на такой вопрос а Какова вероятность что на кубике выпадет число Ну давайте от д от двух Ну пусть от двух не включительно до пти включительно вот так вот cdf 5 мину [музыка] cdf действительно вот если я от до ПС сча считаю получается я учитываю всю вот эту вероятность правильно но мне-то нужно только вот 3 4 5 так давайте тогда вот эти числа просто минус онм отсюда и всё и возьмём мину cdf 2 Итого получим здесь 3/6 Да потому что это либо тройка либо четвёрка либо пятёрка вот как

мину cdf 2 Итого получим здесь 3/6 Да потому что это либо тройка либо четвёрка либо пятёрка вот как работает cdf причём cdf работает одновременно этот инструмент как для дискретного вида так и для непрерывного да как бы без всяких ограничений вот по поводу интеграла Да вот Настя говорила в том числе как бы cdf он имеет свой график конечно свой график имеет и то что я вам показывал Вот например у этого распределения или у распределения у распределения пна график cdf есть но чаще как бы cdf сам C

распределения или у распределения у распределения пна график cdf есть но чаще как бы cdf сам C пот Короче нас об что име вду смотрите вот у меня был PDF график плотности вероятности то получается что как бы в ПДФ в ПДФ то есть вероятность получить ровно единичку она вот у меня в данном случае около 0,25 А cdf одного отвечал бы вероятность быть меньше единицы то есть в каком-то смысле всю вот эту площадь то есть всех вот этих вот ребят которые левее оказались Понятно или не очень ещё раз Ну вот

площадь то есть всех вот этих вот ребят которые левее оказались Понятно или не очень ещё раз Ну вот смотрите Давайте на примере Ладно давайте на примере сечас так вот возьмём вот у меня здесь пример си для людей напоминаю у меня распределение у меня распределение у меня распределение Люде но здесь конечно много что написано Но на самом деле здесь Ключевая строчка буквально одна Вот cdf то есть Например я подаю cdf 180 и спрашиваю А какой процент людей или какая доля людей меньше чем 180 см

Например я подаю cdf 180 и спрашиваю А какой процент людей или какая доля людей меньше чем 180 см ростом да получается Вот такая история вот смотрите вот она как бы это сам-то график фа сам график и вот мы там с вами 183 брали рост и получали около 3% встретить Да выше на этом же графике я могу из cdf отметить это просто площадь закрашена вот если ниже 180 это все вот эти вот люди суммарная площадь под графиком Как вы думаете Какая Ну процент 180 не вот вся единичка единичка под всем А вот

под графиком Как вы думаете Какая Ну процент 180 не вот вся единичка единичка под всем А вот именно я просто вам хотел подчеркнуть что как бы вот всё пространство все люди весь рост их это 100% соответственно когда я вот так подаю CD в 180 он мне выделяет левую часть и говорит что как бы ну тут получилось 0,73 или 73% моей популяции Да лежит левее То есть если я сейчас пойду и случайно выйду на улицу А я считаю что на улице репрезентативная выборка если я просто случайно выхожу в неё да то

на улицу А я считаю что на улице репрезентативная выборка если я просто случайно выхожу в неё да то вероятность встретить первого попавшегося человека ниже этого роста оно будет ниже чем 180 что я сказал вероятность встретить человека ростом ниже 180 будет 73% во так вот вопросы по по понять не стало вот вот например процент людей меньше чем 162 в процентах часто иногда проще переварить да чем в вероятностях поэтому кому удобно Вот частотный процентный вариант пожалуйста а там 05 А давайте

в вероятностях поэтому кому удобно Вот частотный процентный вариант пожалуйста а там 05 А давайте теперь помогите мне это не процент это доля А ну это доли ладно ну описался как бы смысл Я думаю вы поняли на 100 здесь доно вот так вот это процент доля Да п процент 5 Так давайте тогда такой вопрос вам Давайте попробуем мне поко Ну например не знаю там от 175 до 185 очень поняла Я так вот планирую что я буду пересматривать я поняла Вот до этого который пример показывали но с графиками не поняла

что я буду пересматривать я поняла Вот до этого который пример показывали но с графиками не поняла Вот который с кубиками вот только что мы рисовали это всё понятно там сдф ПДФ а вот с графиком Я так и не поняла как понял ничего страшного Так давайте тогда пока Дава с тобой ой так сейчас значит что там нужно рост людей Каков процент с ростом от 175 до 185 Угу до 185 Ну мый должны взять cdf от 185 Угу У чего я беру cdf Да я уберу своего распределения именно Да у своего распределения High

от 185 Угу У чего я беру cdf Да я уберу своего распределения именно Да у своего распределения High distribution Да точка 185 мину тока cdf от 175 Абсолютно верно Вот смотрите если мы с вами Вот так выведем то 89% меньше чем 185 но мы забираем вычитаем весь процент который ниже 175 собственно го 175 Вот это нужно уничтожить и соответственно на выходе у меня Остаётся только вот эта вот часть Да которая меня интересует вот там получается можно вот ещё уточнить То есть получается вот CD Она же идёт

меня интересует вот там получается можно вот ещё уточнить То есть получается вот CD Она же идёт как не убывающая и мы видим на ней крутую область когда прирост идёт большой Да а потом когда мы переходим вот эту точку среднего да то там приро прирост маленький да да где большая производная то есть где большой рост Это говорит о том что там Большая плотность значений тут много вероятно как оно и есть Да почти всё лежит здесь вокруг нуля А где роста уже нет то есть вероятность почти не меняется я

Да почти всё лежит здесь вокруг нуля А где роста уже нет то есть вероятность почти не меняется я говорю вот этот график редко анализирует он как бы всегда в принципе больше ассоциируется вот с этим PDF и на нём видно CD закрашено точне Да не убывающий Да был А у меня вопрос в нашем примере от 175 до 185 185 включительно 175 не включительно ну по факту Да но видишь тут непрерывное распределение и в непрерывных распределения это вообще игнорируют так ты правильно заметил потому Ну таких Можно

и в непрерывных распределения это вообще игнорируют так ты правильно заметил потому Ну таких Можно конечно указать пря если нужно 1749 Да как бы вот так вот условно Ну видишь где-то там поменялась борода тамм знаке после запятой но 175 Здесь точно входит часто как бы вообще забивают на это и просто ставит 175 потому что ну есть там тонкости в непрерывных распределения короче что считается что вероятность попасть в точку равна нулю типа вот встре человек 175 почти нету вероятности порено даже из

попасть в точку равна нулю типа вот встре человек 175 почти нету вероятности порено даже из мим 175 може 172 и Да нас всех когда измеряют Где врачи или какие-то ещё органы когда они измеряют они нас всегда дискретизирован значениями и cdf нужно просто логику подключать вот а для дискретных это может быть актуально для дискретных это может быть актуально потому что там всё идёт дискретно Да и там вот надо проследить вот за этими границами потому что границы - это полноценное значение если оно в

вот надо проследить вот за этими границами потому что границы - это полноценное значение если оно в себе содержит большую вероятность то это может быть опасно а в нормальных как бы в принципе игнорируют потому что типа вероятность быть Ну ровна 175 она стремится к нулю Спасибо угу так хорошо вот по cdf остались какие-то либо вопросы Хорошо хорошо точно так же вот как бы собственно говоря можно всё это найти в CP и применять А ну мы уже применяли с вами Так теперь у нас ещё с вами есть ppf ppf

это найти в CP и применять А ну мы уже применяли с вами Так теперь у нас ещё с вами есть ppf ppf или последняя четвёртая аббревиатура осталась Да PDF pmf cdf проговорили остаётся ppf или Person Point function или квантиль распределением квантиль квантиль это обратно это обратная функции это обратная функция распределения Давайте сразу же наверно вот сюда в код посмотрим вот здесь мы с вами считали какую историю Я вам давал значение а вы мне возвращали процент значение процентний мечем это ние

какую историю Я вам давал значение а вы мне возвращали процент значение процентний мечем это ние соответственно 5% меньше чем 162 правильно вот а иногда нужно в обратную сторону действовать когда я вам говорю процент а вы мне возвращаете значение Ну например Какой процент точнее Вот вполне нормальный бы вопрос был да а каков уровень заработной платы средней заработной платы в России в России да таков что 30% получают меньше чем эта цифра а 70% больше чем это То есть вопрос понятен да то есть

таков что 30% получают меньше чем эта цифра а 70% больше чем это То есть вопрос понятен да то есть тут Меня интересует сама цифра у меня вот есть процент или доля как их угодно называете Но меня интересует сама цифра здесь наоборот тут я тоже мог спросить а какой рост какой рост такой что 40% ниже этого А 60 выше да то есть отметка какая-то я не зна шю костюмы Я может хочу ткани запасом купить и указываю какой рост Что 95% людей ниже него чтобы ну считаю что я не натк на человека который очень

указываю какой рост Что 95% людей ниже него чтобы ну считаю что я не натк на человека который очень высокий там да и у меня не произойдёт никакого разрыва общем рационально достаточно подойдут Вполне себе логичная история квантиль бывает у квантиль есть такое понятие уровень потому что квантиль может быть уровне 02 это значит 20 с 8 справа можеть УВ 03 может быть 08 это значит 8 слева 20 справа и один из квантилей Я думаю что вы все уже слышали квантиль уровня 05 Как называется медиана

справа и один из квантилей Я думаю что вы все уже слышали квантиль уровня 05 Как называется медиана Абсолютно верно медиана Да медиана она что с вами 50% левее 50% правее медиана если правильно назвать это квантиль уровня 05 вот-то так собственно Гоя Давайте потаем Дава поем ми вот здесь А ну у меня есть pf Опять с красивым графиком там все дела Что здесь вот я просто подставляю квантиль уровня 032 и смотрите мне возвращается значение 171 171 это такое значение роста что 32% лежат левее 68

032 и смотрите мне возвращается значение 171 171 это такое значение роста что 32% лежат левее 68 правее если что если что я не претендую на точность измерений Да это я сам придумал такие фры то есть Может быть в реальности это не так й что-то другое Да да да ppf Вот он у меня вот qu value но мы сейчас отдельно тоже посмотрим тут я просто с графика то есть смотрите до этого какая у нас с вами была история я вам давал значение вы мне давали Вот вот эту площадь А теперь я говорю что вот есть

была история я вам давал значение вы мне давали Вот вот эту площадь А теперь я говорю что вот есть площадь На каком она значении должна закончиться просто в полную обратно то есть ppf и cdf противоположны друг другу противоположны друг другу вот если счита тиль вот я Альфа квантиль уровня Альфа равного 05 подставляю 175 Ну понятно ровно серединка 50% Да медиана у меня ниже 175 у [музыка] меня 50% А вот например значение давайте что такое значение роста что 90% ниже него вот 185 и2 90% популя че

А вот например значение давайте что такое значение роста что 90% ниже него вот 185 и2 90% популя че [музыка] это НТИ тоже можно один минус делать рокировку в другую сторону у вас ещё будет на Это задание всем ли Понятно Как устроен квантиль в целом Да правильно понимаю что он всегда ppf всегда возвращает только значение да да P возвращает значение где-то нужен где-то нужен cdf В общем Мы ещё поговорим с вами об этом так Ну что что у нас тут ещё осталось матожидание дисперсия ско спт ПЧ Ну есть

с вами об этом так Ну что что у нас тут ещё осталось матожидание дисперсия ско спт ПЧ Ну есть вариант сделать Сейчас перерыв или ещё проговорить про мат Ожидание дисперсию и потом сделать перерыв Выбирайте как ваше самочувствие можно ещё самочувствие бодрое да мне не разошлись Ну давайте давайте вот этот блок добьём он в принципе коротенький про мажида дисперсию и соответственно потом пойдём отдыхать Так напоминаю чтобы такой знаете нить повествования не терять пока что мы начали с вами

отдыхать Так напоминаю чтобы такой знаете нить повествования не терять пока что мы начали с вами говорить о распределения и о том всё что с ними связано уже знаем как находить вероятность Да вероятность точки бы в зависимости от того Какое увас распределение находить интервальную вероятность для это у нас есть cdf и у нас есть обратно cdf это ppf который позволяет находить наоборот по вероятности находить значение Да собственно говоря Вот они у нас четыре инструмента чере инструмента Да слушаю

находить значение Да собственно говоря Вот они у нас четыре инструмента чере инструмента Да слушаю получается кванти это просто разделитель справо [музыка] делает Ну тут уже как бы кому как удобно воспринимать но в целом Я согласен что его можно назвать этим разделительным не слышал чтобы его так раньше называли где-то но я согласен да что Вполне себе логичное вроде как название Итак следующее что мы с вами пойдём говорить это матожидание дисперсия это всё тоже характеристики самого

что мы с вами пойдём говорить это матожидание дисперсия это всё тоже характеристики самого распределения Да напоминаю с мили что есть распределение даль мы сечас Смотрим как ходить вероятно про медиану сред дисперсию стандартно отклонение и так далее Это ВС характеристики распределения и следующая важная характеристика - это математическое ожидание или в народе просто средне да то есть если вы в англоязычной истории увидите это будет называться как [музыка] это сколько в среднем мы мм ждём

в англоязычной истории увидите это будет называться как [музыка] это сколько в среднем мы мм ждём Сколько в среднем Мы ждём На сколько в среднем принимает случайная величина на Большой дистанции формулы для вычисления Вот они то есть у нас для дискретной вот такие ИТ Умно напт А здесь соответственно ИТ Здесь через интеграл вот Ну давайте какой-нибудь пример посмотрим вот скажите мне пожалуйста мат ожидания кубика чему оно равно 3 могу ошибаться с по давайте для этого посмотрим есть у меня кубик

ожидания кубика чему оно равно 3 могу ошибаться с по давайте для этого посмотрим есть у меня кубик у этого кубика есть значение единичка двойка тройка четвёрка пятёрка шестёрка и 1/6 1 1 1 Ну кубик считаем что он честный на самом деле на практике почти все кубики вот такие игровые они нечестные вот Ну наверно те которые в казино используются Я думаю что они честны там потому что уже как бы серьёзнее нужно подходить ко всем этим вещам так вот получился кубик Вот такой у меня как считается мат

нужно подходить ко всем этим вещам так вот получился кубик Вот такой у меня как считается мат ожидания мат ожидания обозначается как да либо Ну чаще е поэтому я в это сумма это Нано прикладной статистике уже в народе значение на вес этого значения да Вот и у меня получается что е Умно 1/6 плю д у 1/6 плюс и так далее 6 у 1/6 действительно если это досчитать тут вообще совпало это как среднеарифметическое то есть вес везде одинаковый поэтому это как просто 1 П 2 П 6 6 Вот это ВС ра 35 вот ма

то есть вес везде одинаковый поэтому это как просто 1 П 2 П 6 6 Вот это ВС ра 35 вот ма ожидани мол типа самое ожидаемое значение но на кубике никогда 3 с по не может выпасть согласны Кубик это Ой матожидание это то что в среднем мы принимаем и Это важнейшая история важнейшая история потому что ну очень часто Если Вы посмотрите какую-то аналитику везде оперируют средний уровень того-то среднее то-то среднее то-то среднее как бы интересует это бы значило для кубика что если бы мы много бросали

среднее то-то среднее как бы интересует это бы значило для кубика что если бы мы много бросали кубик то в среднем выпадало бы 3 по я негу точно сказать что выпало бы на каждом броске но на Большой дистанции в среднем выпадало бы 3 с по это вообще очень важная мысль Вот смотри теория вероятностей как бы штука такая что мы пытаемся предсказать Случайность предсказать Случайность - это в принципе дело-то неблагодарное на самом деле Да мы всё равно всегда рискуем но оказывается в науке которая

дело-то неблагодарное на самом деле Да мы всё равно всегда рискуем но оказывается в науке которая занимается случайностям есть неслучайные вещи и ряд теорем плюс как бы матожидание это доказывает Спокойно это значит что вот если я кубик буду много раз бросать то в среднем будет в среднем выпадет 3 с по всё это уже говорит о том что у нас есть кое-какая не Случайность и например вы бы вы бы были бы какой-нибудь компанией у которой соответственно есть прибыль которая всё равно как-то зависит от

бы какой-нибудь компанией у которой соответственно есть прибыль которая всё равно как-то зависит от случайности Да Случайность пришёл Клиент не пришёл кликнул на вашу рекламу не кликнул и так далее если т во поть мажида выигрыша и вы будете спокойно спать не переживая что купил этот клиент или не купил когда он пришёл к вам Ну короче зна ожидание положительно у вас прибыль положитель как бы по конкретно каждому элементу Пари может и не стоит есть как бы для выбо является выборочно средне

по конкретно каждому элементу Пари может и не стоит есть как бы для выбо является выборочно средне выборочно среднее собственно говоря вот оно считается как Ну понятно Просто сумма всех элементов выборки разделить на их количество чаще Конечно мы будем сталкиваться именно с выборочным средним нежели чем с мато ожиданием потому что чаще матожидание - это Генеральная совокупность рост людей Ну давайте ограничимся она может получить другое значение как бы хотя мы можем работать по одной и той же

ограничимся она может получить другое значение как бы хотя мы можем работать по одной и той же генеральной совокупности Ну как бы элементы выборки разные Что сделаешь Вот такая вот история Вот такая вот история А Мы ещё поговорим с вами о том как Они между собой связаны выборочная средне считается лучшей оценкой мат ожидания То есть если бы если бы меня попросили сказать сколько сейчас не знаю Ну даже Давайте хорошо средним ростом раз про него говорим Какой средний рост вот людей кто внутри

Ну даже Давайте хорошо средним ростом раз про него говорим Какой средний рост вот людей кто внутри МКАДа Ну что бы я сделал я бы пошёл бы в максимально репрезентативной место А я думаю что говорю просто какая-то Случайность на улице это репрезентативной бы этих людей и соответственно говорил бы как бы именно по выборочному среднему короче выборочное среднее ближе всего оценивает Вот это матожидание как-то так это первая важная характеристика первая важная характеристика теперь вторая важная

как-то так это первая важная характеристика первая важная характеристика теперь вторая важная характеристика - это дисперсия дисперсия показывает Давайте возьмём Васю и Петю предположим два ученика в школе есть Вася есть Петя Вася получил за четверть по четырём предметам как бы че давайте-ка вот так сделаю 3 4 4 3 вот и опять я получил 25 25 ну ка не знаю математика русский там английский что-нибудь ещё вот тогда если мы говорим про среднее мат ожидания сколько среднего У Васи 35 3 и5 Какое

ещё вот тогда если мы говорим про среднее мат ожидания сколько среднего У Васи 35 3 и5 Какое среднее у Пети у ну в какой-то парадигме так можно рассуждать если бы мне просто бы нужно было максимизировать среднее Да чтобы меня в среднем ученики хорошо учились то как бы мне можно игнорировать но при этом на самом деле Вася и петь они очень разные Да Вася он такой более стабильный он такой более авантюрный скажем так Да где-то прям газует где-то сбавляет но среднем которая занимается тем что

авантюрный скажем так Да где-то прям газует где-то сбавляет но среднем которая занимается тем что считает отклонение от этого матожидания является Ну дисперсия или стандартное отклонение то что будет дальше Ну вот мы начнём с дисперсии дисперсия Да это мера м того как сильно мы отклоняется от 3 с половиной понятно что у Васи дисперсия будет меньше да чем у Пети А ну давайте в принципе можем посчитать пото что у вас сегодня на Это задание одно будет первое самое причём Давайте посчитаем одну

пото что у вас сегодня на Это задание одно будет первое самое причём Давайте посчитаем одну дисперсию У Васи или у Пе Давайте вот возьмём Васю У Васи У Васи сколько у него Какая вероятность что у него тройка грубо говоря вес тройки какой что ровно половина оценок да то есть из четырёх оценок ой из чех оценок две тройки Давайте сначала проговори формулу которая как бы понятно что отражает суть а потом поговорим как она считается это как бы эквивалентны формулы Но вот чтобы понять суть лучше

а потом поговорим как она считается это как бы эквивалентны формулы Но вот чтобы понять суть лучше здесь смотрите вот X это оценка да э оценка она либо три либо че ну либо д либо П В общем случае либо Ко Вот такая-то оценка что показывает вот Эли на ш вз кони она показывает отклонение да то есть сколько мы отклонились от своего среднего конкретно Да например Я бы хотел посмотреть наше с вами телесни вот у нас есть там не знаю какой-нибудь Ну предположим возьмём КиноПоиск мы с вами там смотрим

вот у нас есть там не знаю какой-нибудь Ну предположим возьмём КиноПоиск мы с вами там смотрим фильмы ставим рейтинги но есть такая история что кто-то живёт по парадигме что я ставлю хорошему фильму потому что настоящий легендарный фильм ещ впереди Да а кто-то как бы вызвал эмоцию какую-то положительную и уже готов ставить 10 да Все мы люди разные с вами по-разному к этому относимся поэтому X - E очень хорошая характеристика которая показывает В какую сторону мы отклонились от своего жима от

E очень хорошая характеристика которая показывает В какую сторону мы отклонились от своего жима от ожидания а если бы вот Представьте что вот этого квадрата бы не было Вот вот это бы показывало получается ещё раз мажда иве То есть это сколько в среднем мы отклонятся от своего среднего Ну как вы думаете в чём проблема такой истории было бы равно Ну да Было бы равно Ну потому что что у меня делал Вася он меня здесь по факту отклонился Ну в нижнюю сторону Да от своего матожидания 3 с поной здесь

Вася он меня здесь по факту отклонился Ну в нижнюю сторону Да от своего матожидания 3 с поной здесь он отклонился в верхнюю здесь в нижнюю здесь в верхнюю в среднем он отклонятся на ноль но нас же как бы не интересует влево или вправо мы отклонились нас интересует именно сам факт отклонения ну поэтому в математике была придумана такая история что А давайте-ка мы возведена для всех что Квадрат это всегда число положительное оно убивает знак да И после этого на весим е Вот такая вот штука

это всегда число положительное оно убивает знак да И после этого на весим е Вот такая вот штука получилась дисперсия Вот здесь понятно что это всё правильно работает можно прит что-то страшное но Нет давайте считать для Васи во-первых вот эта вторая часть у меня уже известна 3 с по ма ожидание в квадрате да А вот это что-то сложное тут мат ожидание от x ква как бы X ква - это тоже случайная величина в моём случае Как вы думаете X ква Какие значения может принять если X принимает 3 и 4 91 Да

в моём случае Как вы думаете X ква Какие значения может принять если X принимает 3 и 4 91 Да абсолютно Вете Что это значит и так далее Это эфемерно скрытые штуки как бы прикладного применения Они здесь не несут они нужны тупо для вычисления формы если тройка на неё ложится вероятность 1/2 то значит как бы у x ква девятка тоже удается 1/2 и 16 тоже 1/2 всё и мы можем посчитать вот эту величину Давайте её вместе посчитаем чему Она равна Сколько в среднем принимает значение Как считать это по как

её вместе посчитаем чему Она равна Сколько в среднем принимает значение Как считать это по как посчитал Ну 9 на 1/2 п 16 на 1/2 всё верно 9 на 1/2 п 16 у 1/2 Итого получается 25/2 да либо 12,5 всё вот здесь Было бы 12,5 здесь 3,5к не знаю сколько это ну и собственно говоря итого итого получается вот такое вот какое-то число на выходе Это и будет дисперсия ва также мы почитаем персию Пети она будет существенно ниже Ой наоборот существенно выше Да потому что у Пети Ну как бы его отклонять Здоров

существенно ниже Ой наоборот существенно выше Да потому что у Пети Ну как бы его отклонять Здоров в среднем можно ещё разик уточнить 9 умножаем на 1/2 потому что мы берём 1/2 вот отсюда где x ква Да правильно дадада то есть мы считаем же ожидание Поэтому соответственно мы смотрим в эту таблицу поня говорю не переживайте вам этого не придётся считать за вас посчитает вам придётся это считать ровно один раз сегодня но вообще в целом как бы это делает компьютер да И точка есть метод точка да Или

один раз сегодня но вообще в целом как бы это делает компьютер да И точка есть метод точка да Или или дисперсия которая нам позволит просто её вычислить вот опять же Это для генеральной совокупности характеристика дисперсии Да как бы по выборкам это называют выборочная дисперсия А что такое в это в методе дайс до говорю вот смотрите вот соответственно обозначается буков принято обозначать буков Но если речь идт о выборах вы можете увидеть S ква типа ну как бы это СМЛ Да это выборочная и формула

если речь идт о выборах вы можете увидеть S ква типа ну как бы это СМЛ Да это выборочная и формула на самом деле такая же абсолютно только мы считаем Это по выборке как вот здесь Мы считали по выборке тут тоже смотрите что я считаю сколько я отк от среднего правильно возвожу это в Рем здесь на Во почему ми Ну хочется написать просто 1 я согласен и это нормально как бы ставится когда всегда когда выборо что ли Да сейчас закончу соб [музыка] вот эту дисперсию это просто статистический вывод Вы

выборо что ли Да сейчас закончу соб [музыка] вот эту дисперсию это просто статистический вывод Вы можете загуглить посмотреть и посмотреть эти полотна вычислений но я советую как бы беречь психику и туда не залазить просто поверить мне минус оди деление возникает потому что ну так точнее Но это на самом деле чувствуется только на анализе малых выборок То есть если вы занимаетесь анализом малых выборок тогда Разница есть если вы занимаетесь анализом больших выборок ни уже Вообще ни о ЧМ Поэтому

тогда Разница есть если вы занимаетесь анализом больших выборок ни уже Вообще ни о ЧМ Поэтому в бизнесе часто большие выборки поэтому там все забивают На вот эту историю и как бы просто игнорируют этот факт А вот у кого маленькие выборки разни делить разницу На три или делить наче может быть существенно А делить на 1 н или делить на 1 Милн разница будет в пятом знаке после запятой так ном кубик у [музыка] ня кубика ВС это считается вот ма ожидани я беру обратить внимание само распределение это

[музыка] ня кубика ВС это считается вот ма ожидани я беру обратить внимание само распределение это у меня вот если бы мы переводили физическую параллель физическую паралель это у меня материя кубик сам кубик был вот пря внутри него сколько раз Ну короче подбрасывал в итоге получилось у меня нет это это я не Кубик подбрасывал это я людей подбрасывал уже получается Давайте вот кубик всё-таки подкинем Да чтобы корректно всё было Вот собственно говоря вот у меня подбрасывание кубика 10 раз и считаю

Да чтобы корректно всё было Вот собственно говоря вот у меня подбрасывание кубика 10 раз и считаю СМЛ точками ну здесь ещё по лайту сейчас погодите здесь ещё по лайту возникла а так вот сделаем вот смотрите то есть видите выборка маленькая 10 я ещё могу огого как отклониться да 3 с поло это мат ожидания в среднем но у меня получилось по выборке аж 3 Ну почему бы и нет Я охотно верю что вообще можно и шесть получить да типа ну 10 раз шестёрка может такое бывает и такое Как говорится в жизни

можно и шесть получить да типа ну 10 раз шестёрка может такое бывает и такое Как говорится в жизни поэтому отклониться ещё сильно можем то есть вот это собственно говоря у меня было бы матожидания вот это выборочно среднем точно также я могу посчитать с дисперсией выборочной дисперсией точка Вар это просто у меня была бы дисперсия вот она 2.91 а это как бы неудобная величина Если вы средне понимаете что такое то дисперсия просто понимает что это уровень отклонения но интерпретировать его очень

что такое то дисперсия просто понимает что это уровень отклонения но интерпретировать его очень сложно sle War У меня получилось 2.4 так вот собственно говоря продолжая да ис уходим с вами на перерыв проблема дисперсии Как вы думаете Какая Ну в том что это квадратичные значения да да то есть мы возводим в квадрат если у меня величина избирается в метрах то смотреть отклонение в квадратных метрах как бы немножко не то да Если величина у меня измеряется в годах то отклонение года Квадратное Но

как бы немножко не то да Если величина у меня измеряется в годах то отклонение года Квадратное Но если у меня кубик в очках да то считать очки квадратные Ну как-то так себе идея собственно говоря поэтому есть более наверное такая в интерпретации полезная штука это стандартное отклонение или Сигма её обозначают это корень из дисперсий Раз уж Мы в квадрат возвели то мы обратно извлечён Обратно извлечён корень и это удобно тем что мы измеряем мы с вами измеряем м той же самой единицы измерения той

корень и это удобно тем что мы измеряем мы с вами измеряем м той же самой единицы измерения той же самой единицы измерения всё вот такая Сигма Ну в коде соответственно просто через а std метод это запускается Да а то Я описался std и СД к вопросу ещё кто хотел вот ddof о равно по умолчанию он стоит ноль но его можно ставить его можно ставить один А почему так Поня Что А это дисперсия не туда подставляю вот выборку надо подставлять вот сюда Да вот он видите по умолчанию стоит но то есть мы делим

вот выборку надо подставлять вот сюда Да вот он видите по умолчанию стоит но то есть мы делим на знаменатели Вот как вот здесь у меня указано если хотеть делить на ми1 чтобы типа быть более точным соответственно вот рано Кстати на выборке видите в 10 У меня бы не 10 а 1.000 да то Соответственно что я беру ddof равно О что я беру ddof равно но ну уже разница настолько маленькая что как бы ерунда вот так что нут вопрос на счёт дисперсии и стандартного отклонения тогда смысл дисперсии нам Если

вот так что нут вопрос на счёт дисперсии и стандартного отклонения тогда смысл дисперсии нам Если удобнее работать со стандартным отклонением Да можно работать со стандартным отклонением Ну интерпретацию частот Старт отклонение много где просто в в алгоритмах которые вычисляют какие-то вычисления внутри Извиняюсь за тавтологию скажем так короче под капотом каких-то алгоритмов часто работают с дисперсией она удобнее она дифференцируема даст производ много псов есть Да вот так вот использовать

она удобнее она дифференцируема даст производ много псов есть Да вот так вот использовать дисперсию человечески Если бы я был мы бы с тобой были бы коллегами на работе Я думаю я бы и ты хотел бы чтобы мы оперировали стандартом наполнением конечно потому что это понятно Вот а диспепсия как бы все понимают что она является какой-то мерой разброса Но как правило именно применяется она где-то внутри под капотом Да там мы на следующей неделе будем уже разбирать с вами методы там есть понятие доли

под капотом Да там мы на следующей неделе будем уже разбирать с вами методы там есть понятие доли объяснён най дисперсии как бы всё внутри считается Точка Но нам людям как бы лишний герой себе создавать Я согласен стандартное отклонение вполне понятная история понял также Короче вы тут можете посмотреть потом все эти War и sample считаются для стандартного отклонения ой для непрерывного распределения всё тоже самое вот ну что ж а вопрос вопрос последний Почему у тебя код в питоне не сработал ты

всё тоже самое вот ну что ж а вопрос вопрос последний Почему у тебя код в питоне не сработал ты применил К объекту распределение ddof 1 Да и нет такого параметра просто Да это дисперсия всё всё всё дисперсия она у нас константная то есть у неё нет равно О это для выборочной дисперсии поэтому здесь всё окей здесь здесь типа мне говорит чувак что не тем занимаешься В смысле он понял что это К объекту применено к не выборочному объекту а к полному объекту типа он понял это сам то есть метод один и

применено к не выборочному объекту а к полному объекту типа он понял это сам то есть метод один и тот же ме метод один и тот же но веь у меня здесь не Ну это же ния это вообще экземпляр клас библиотеки собственно говоря если клас Ну как бы сюда не стоит смотреть лучше просто сказать что это просто кубик кубик Вот сам кубик цельный в среднем на кубике такая дисперсия А здесь результат выва пере в 41 я буду продолжать Давайте перерыв Так ну что давайте возвращаться Давайте возвращаться так э так

41 я буду продолжать Давайте перерыв Так ну что давайте возвращаться Давайте возвращаться так э так так так Ну что ж мы с вами проговорили распределение да то есть если говорить на языке сущности то есть какое-то распределение какое-то распределение распределение у него мы уже проговорили что можно находить вероятность в точке можно находить интервальную вероятность можно находить квантиль можно находить среднее Да можно находить дисперсию и стандартно отклонение из того что мы с вами

можно находить среднее Да можно находить дисперсию и стандартно отклонение из того что мы с вами проговорили и в принципе в принципе если если мы с вами зайдём Да все эти характеристики они записаны здесь то есть вот pmf формула Да у распределения полна можете конечно смотреть формулу Вот cdf Но я советую просто в питоне вводить Да [музыка] попятное вот средня медиана е есть мода Я думаю мо Вы тоже слышали самая часто встреча распределени дисперсия Ну стандартное отклонение просто ко Это

Вы тоже слышали самая часто встреча распределени дисперсия Ну стандартное отклонение просто ко Это дисперсии есть е более глубокие статистические характеристики Да тамс это наклон энтропия разброса величин Ну какие-то более глубокие штуки нам в принципе как бы они для базовой статистики так сильно и не нужны Не нужны Вот теперь немножечко в другой плоскости с вами поработаем поговорим о двух важных теремах и Первый из них - это Центральная предельная теорема Центральная предельная теорема она

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

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

у меня средний рост всех к сожалению не получится измерить Но я могу убрать какую-нибудь выборку и предположим я возьму вот выборку я схожу измерю 10 человек потом там Костя измеряет Серёжа бу Дима Люба Серёжа величину согласны поэтому выборочно среднее выборочное среднее оно тоже случайная величина это важно понимать то есть среднее по выборке она тоже случайно и оно тоже имеет своё распределение Как и любая Случайность так вот Центральная предельная теорема говорит что выборочная средняя

Как и любая Случайность так вот Центральная предельная теорема говорит что выборочная средняя имеет нормальное распределение вокруг среднего генеральной совокупности в нашем случае это м вот это м Рав 175 и с стандартным отклонением Сигма квадрат де N где размер выборки точнее это дисперсия если стандартное отклонение вот надо записать вот так Сигма де коре сейчас поподробнее на примерах обо всём поговорим То есть это как бы среднее это отклонение Так для этого мже код [музыка] вот здесь

всём поговорим То есть это как бы среднее это отклонение Так для этого мже код [музыка] вот здесь Центральная предельная теорема Вот вот собственно говоря смотрите Центрально предельная теорема выборочно средняя по Центрально определено теореме выборочно средня имеет нормальное распределение со следующими параметрами которые собственно говоря я вам записал и Давайте проверим этот эксперимент исходное распределение причём неважно Какое исходное распределение у меня может быть все все возможные в

распределение причём неважно Какое исходное распределение у меня может быть все все возможные в природе подбрасывания кубика грубо говоря да ну или сам кубик Обратите внимание не имеет нормальное распределение он имеет равномерное распределение но мы проведём с вами следующий эксперимент я а проведу Ну 1.000 раз там 10.000 раз не суть эксперимент в каждом эксперименте я буду подбрасывать 10 раз Кубик это было бы эквивалентно тому что сначала я 10 раз подкинул да потом луба 10 раз подкинул Потом

это было бы эквивалентно тому что сначала я 10 раз подкинул да потом луба 10 раз подкинул Потом Саша 10 раз подкинул Потом Оля потом нас и так далее У нас у всех всё время будет разное средне Да после десяти подбрасывания и собственно говоря мы как бы эмпирически получим это распределение и Давайте взглянем Как оно выглядит здесь у меня просто идт генерация То есть я вот 10.000 запусков дальше собственно говоря это я подкидывают метод Ну в данном случае что я делаю я просто говорю что случайно

говоря это я подкидывают метод Ну в данном случае что я делаю я просто говорю что случайно Возьми мне из вот этих чисел есть 10 на СМ бке тоже может выпасть оди и в я буду записывать среднее по каждому значению Да по каждой десятки Итого получается Вот такая вот история смотрите Что вышло то есть слева это повторюсь распределение кубика самого одного подбрасывания кубика А здесь у меня здесь У меня средняя после с вами что 3 с поно встречалось чаще всего да то есть чаще всего сбалансированная

средняя после с вами что 3 с поно встречалось чаще всего да то есть чаще всего сбалансированная выборка выпадала но всё-таки к сожалению бывали такие истории что бывали Вот видите аномалии в эту сторону то есть в какой-то выборке Ну так случилось рука лёгкая Да полетели одна за другой Пятёрочка шестёрочка Там и так далее и получилось что 5 с56 соответственно в обратную сторону могло тоже получиться Как вы видите образуется образуется вот этот купол нормального распределения нормального

получиться Как вы видите образуется образуется вот этот купол нормального распределения нормального распределения причём чтобы ощутить что дисперсия вот смотрите зависит от элементов выборки причём раз N у меня в знаменателе значит чем больше выборка тем у меня что с отклонением будет происходить уменьшаться уменьшаться Чем больше мы выборку берм чем больше людей на улице измерю тем мне сложнее отклониться от средне если оно 175 вы попробуйте на двух людях Да на двух людях я могу получить как

отклониться от средне если оно 175 вы попробуйте на двух людях Да на двух людях я могу получить как не знаю 210 так и 150 там или не знаю какие значения Да но вы пробуйте так Измерьте 50 случайных людей на улице будет гораздо сложнее это сделать Да вот и Давайте немножко с вами что если каждый будет подбрасывать не 10 раз кубик А 100 раз подбрасывать тогда поло веще у 5 с по того бы ну она должна быть очень лёгкой Чтобы 100 раз подряд подбросить 65 правильно ну Давайте проверим что из этого

быть очень лёгкой Чтобы 100 раз подряд подбросить 65 правильно ну Давайте проверим что из этого получилась Вот такая история но это вот вот такие вот штуки не обращаете внимания Это отрисовки питона не более Итого получилось у нас с вами Вот оно нормальное распределение и диапазон уже сужается то есть теперь самое аномальное - это 2,8 пото насвая уже сложнее са я вам хотел продемонстрировать именно принцип что вот как бы отклонение оно зависит от элемента выборки оно зависит от элемента выборки

принцип что вот как бы отклонение оно зависит от элемента выборки оно зависит от элемента выборки Это важно Это важно какое практическое следствие у Центральной предельной теоремы оно на самом деле ровно обратное а представьте представьте вот вы собеседуем Да я вас спрашиваю вот кубик докажите мне что он честный и тогда собственно говоря мы долж по понять как себя ведёт Генеральная совокупность или наш кубик Я могу подбрасывать и предположим я подбрасывают 100 раз давайте 100 раз подкину вот

или наш кубик Я могу подбрасывать и предположим я подбрасывают 100 раз давайте 100 раз подкину вот прямо на собеседовании мне чувак дал кубик Я говорю Ну всё поехали кидаем он сидит на записи я соответственно кидаю 100 элемент выборки набросали посчитали среднее вот если у вас вдруг оказалось среднее не знаю вот где-нибудь вот здесь 4 иче что Вы подумаете честный кубик или нечестный нечестный очень хочется сказать что он нечестный если Ну не факт я согласен Вот сейчас мысль свою продолжу если

хочется сказать что он нечестный если Ну не факт я согласен Вот сейчас мысль свою продолжу если он вс-таки честный то вероятность получить то что вы получили она стремится к нулю там может быть она её можно посчитать Может она там одна Миллионная или что-то такое Либо вы тот самый Счастливчик который на собеседовании попали в эту миллионную выборку с шансом о на миллион Да что уже эквивалент выигрышем в тере либо вс-таки если подходить рационально К данным как бы может быть кубик всё-таки

выигрышем в тере либо вс-таки если подходить рационально К данным как бы может быть кубик всё-таки нечестный Может там центр тяжести смещён может точки вот эти которые собственно говоря когда кубик создавали на производстве они имеют большой вес тогда 6 5 4 будут чаще книзу правильно Ну или что-то ещё какие-то причины можно выискивать почему это так но вопросы уже должны возникать естественно наш бы был ответ что он нечестный то есть вот Центральная предельная теорема ско как бы в реальности

бы был ответ что он нечестный то есть вот Центральная предельная теорема ско как бы в реальности позволяет нам делать обратное то есть зная что это должно быть так мы можем делать выводы льной совокупности Если вдруг я подброшу и у меня получится 3,7 что мы скажем собеседуем честный кубик или нет вполне Ну по крайней мере как бы достаточно как будто бы вероятно не такой уж экстремально редкий случай как выставлять эту область принятия решений мы будем проговаривать с вами завтра Да но по

случай как выставлять эту область принятия решений мы будем проговаривать с вами завтра Да но по крайней мере у нас уже появляется инструмент чтобы не на шару просто говорить Да что нам сердце или интуиция подсказывает а именно как бы на основе данных на основе данных такая вот история Обратите внимание что я ещё хочу подчеркнуть Центральная предельная теорема работает практически всегда а это значит что видите исходный распределение оно вообще как бы никакого отношения к нормальному не имеет

что видите исходный распределение оно вообще как бы никакого отношения к нормальному не имеет нормально распределено именно выборочное среднее то есть здесь у меня распределение вот здесь у меня PDF у выборочного среднего а здесь у самого икса у одного случайного броска кубика Вот это надо разделять у себя в голове и очень часто как бы Исходя из этого у меня есть клиенты которые что-то покупают Я не знаю выдвигаю новую гипотезу предположим что они станут покупать лучше просто-напросто не знаю

Я не знаю выдвигаю новую гипотезу предположим что они станут покупать лучше просто-напросто не знаю что там поменял какую-то может быть лояльность добавил да Или что-то ещё и после этого Вдруг у меня я оказался здесь Да я скажу что скорее всего да произошло меня вправо сильно бросило маловероятно что это вот как бы в исходных данных было справедливо но как быть раньше времени не будем для этого у нас есть завтрашний день сейчас надо чтобы вы поняли Как устроена Центральная предельная теорема

у нас есть завтрашний день сейчас надо чтобы вы поняли Как устроена Центральная предельная теорема Итак ещё раз подытожим Центральная предельная теорема гласит что выборочная средняя посчитано выборо из какого-то из какой-то генеральной совокупности имеет нормальное распределение с серединкой с центром со ждани среднего реальной генеральной совокупности в нашем случае матожидание кубика или средни кубика 3 с по поэтому мы вокруг 3 с по пляшим в случае с людьми там у меня было бы 175 Вот и

средни кубика 3 с по поэтому мы вокруг 3 с по пляшим в случае с людьми там у меня было бы 175 Вот и стандартным отклонением вот здесь смотрите Такой тонкий момент тоже гдето пишут как стандартное отклонение в какой-то литературе вы увидите как дисперсию вот вот так писать в основном прерогатива статистика так они лют в коде бы именно вот так боль Я бо Да поэтому просто себя в голове держите как бы эту историю вот се ква де N - это дисперсия если я извлек из неё корень то я получу ровно вот эту

эту историю вот се ква де N - это дисперсия если я извлек из неё корень то я получу ровно вот эту величину согласны все поэтому Будьте будьте на контроль Так вот с Центральной предельной теоремой проговорили Да Костя у нас в подготовке к поступлению был вопрос как раз на эту тему В чём отличие выборочного среднего от мат ожидания и что их связывает Ну если я сделал правильный вывод то выборочное среднее работает для выборки мат ожидания для всей генеральной совокупности Абсолютно верно Да

среднее работает для выборки мат ожидания для всей генеральной совокупности Абсолютно верно Да связывает их в принципе то что они считаются почти одинаково Единственное что от ожидания Мы ещё умножаем на вероятность Ну я бы не сказал что на вероятность просто особенность формул их связывает то что они оба являются характеристикой среднего просто одно сред по геку другое по выборке Угу Окей спасибо как бы на самом деле статистика бы вообще нафиг не нужна была как наука мы бы чисто теория

спасибо как бы на самом деле статистика бы вообще нафиг не нужна была как наука мы бы чисто теория вероятно оперировали если бы мы бы всегда могли достать всю генеральную совокупность а чаще на практике Как раз таки только выборки мы имеем вот Попробуйте реально измерить всех людей это сложно или Я открываю не знаю открываю ресторан новый или сервис новый вот я хочу прогнозировать спрос или что-то ещё я же не могу как бы всех людей просить я буду брать выборок или Ну в ресторане какое-нибудь

ещё я же не могу как бы всех людей просить я буду брать выборок или Ну в ресторане какое-нибудь новое блюдо например хочу зате да начина копить выборку потом экстраполировать на всю генеральную совокупность первую очере и об что они характеризуют одно и тоже средне так да дмитри эсси генеральной совокупности при это замерить эти откуда вообще существуют конкретные реальные значения точны Вот смотри сколько красных машин в Москве их же конечное число правильно соглас в природе где-то Если я

смотри сколько красных машин в Москве их же конечное число правильно соглас в природе где-то Если я смогу достать зна во нафиг статистика не нужна я уже могу посчитать средне всё по генеральной совокупности но чаще всего это невозможно вычисляется только косвенно по вот этим выборкам да да да да нам больше-то на самом деле вот то что мы описательно говорим про генеральную совокупность нужно будет для формулировки гипотез завтра что мы вот мы с завтрашнего дня будем среднее в генеральной

будет для формулировки гипотез завтра что мы вот мы с завтрашнего дня будем среднее в генеральной совокупности равно такому-то значению медиана в генеральная совокупности равно такому-то значению да Или квантиль генеральная совокупности равн такому-то значению Если прямо на язык людей переводить это бы значило что если я прошу выборку людей на улице вот мне надо вот их мнение экстраполировать на всю генеральную совокупность Генеральная совокупность разная если вот я говорю у меня сервис сервис

всю генеральную совокупность Генеральная совокупность разная если вот я говорю у меня сервис сервис Ну автомобильный сервис какой-то Генеральная совокупность это все мои потенциальные клиенты все мои потенциальные клиенты правильно яж всех к сожалению не достану их Я даже не знаю кто из них мой потенциальный клиент пока что но по крайней мере соответственно выборку я нащупать смогу Если выборка Чем больше тем лучше темнее реу тотже са сказал давайка поглубже посидим покидаем и 10.000 по бросаем

больше тем лучше темнее реу тотже са сказал давайка поглубже посидим покидаем и 10.000 по бросаем Да соответственно не знаю понравилась бы ему эта идея или нет что это время Попробуйте 10.000 раз подкинуть кубик Вот Но тем не менее отклонение уже видите становится насколько меньше мы всё увереннее уверены в своём решении и где-то на бесконечности когда выборка будет бесконечной Мы от 3 с по уже отклоняться не будем То бишь достигнем состояние имеете виду предел Вот этих да да А меня волнует вот

не будем То бишь достигнем состояние имеете виду предел Вот этих да да А меня волнует вот момент что мы увидим вот такое бешеное значение в середине Как определить Это прикол питона или у нас что-то не в порядке с данными Ну мозг сам будет достраивать Если всё идёт вот так вот О'Кей О'Кей О'Кей О'Кей и потом просто какая-то пушка вылетает и потом вот так то скорее всего это питон криво отобразил Я думаю что так Ну я ли не могу тебе точно ответить на этот вопрос У меня нет как сказать Большой

Я думаю что так Ну я ли не могу тебе точно ответить на этот вопрос У меня нет как сказать Большой выборки достаточно чтобы увидеть все случаи выпрыгивания вот этих бросков Но вот там я сразу увидел что это как бы выброс А можно ещё играть знаете вот уже есть вот такой параметр как be знаете вот этот вот вот я его тоже здесь выставил где-то вот здесь а не вот здесь вот я могу я бы его тоже мо поставить и вот с помощью вот этого bein управлять например Я бы мог бы задать beans Давайте чтобы он

и вот с помощью вот этого bein управлять например Я бы мог бы задать beans Давайте чтобы он lnp то R Range это значит сгенерирует мне точки в диапазоне пусть будет Давайте от 3,4 от 3.4 до [музыка] А ну до 3.6 пусть будет на 3.6 61 поставлю так шагом 02 ой шагом 0 видишь как получилось то есть теперь я говорю В диапозоне 34 36 агрегирующие [музыка] это всегда решение человека но мы пока здесь доверием уже машине и она по-своему сделает я поняла Да просто в тот Бин попала чуть больше у не вопрос

уже машине и она по-своему сделает я поняла Да просто в тот Бин попала чуть больше у не вопрос этот получается сейчас в данный момент на график каждый э ну блин каждая палочка типа отображает 10.000 бросков Да ну средне 10.000 брусков нет каком на правом графике да да да вот Вот здесь суммарно лежит 10.000 и можно знаете как ещё сделать вот Вот знаете у меня ста стоит равно пробили А можно сделать ста равно наверно называется на документацию смотреть Я не знаю Да вот видишь в частотном виде

ста равно наверно называется на документацию смотреть Я не знаю Да вот видишь в частотном виде только что-то Почему такие большие значения у меня так [музыка] самом деле я рисую у меня имеет меньше значений ще суммарно 10 должно было бы быть потому что ня он у меня должен иметь 10.000 элементов Да 10 элементов по во можно вывести в частотном виде можно вероятно Но вот здесь суммарно все броски твои все 10 которые у нас есть чаще всего бывали в районе 3 с поно понял Чуть реже бывали там вот

твои все 10 которые у нас есть чаще всего бывали в районе 3 с поно понял Чуть реже бывали там вот здесь чуть реже там вот здесь как-то вот так то есть это суммарно сформируется ВС рас а а когда мы выбираем типа 100 100 также потом Выра это тогда типа что мы изменяем на графике Я не понимаю почему честно он так фкн строит Но это где-то я как бы просто что-то не вижу я знаю как правильно Точно Вот здесь суммарно суммарно а получается 10.000 бросков 10.000 Вот и ещё раз лба твой вопрос Ну вот

Вот здесь суммарно суммарно а получается 10.000 бросков 10.000 Вот и ещё раз лба твой вопрос Ну вот собственно Ну так получилось что теперь та же самая история я подкинул 100 раз 100 раз вот твои 100 раз могли быть где-то Вот здесь то есть у тебя средний 42 у меня могли бы быть где-то здесь у меня там 3 и3 средни Да а у Любы получилось предположим достаточно ожидаемое значение То есть у него сбалансированно получилось бросить Поня То есть она может быть где-то Вот здесь Я где-то здесь Ты где-то

получилось бросить Поня То есть она может быть где-то Вот здесь Я где-то здесь Ты где-то здесь и так далее Ну вам надо просто приварить эту мысль как бы вы ВС поняли на самом деле вам просто надо в не немножко Повари Так что давайте пойдём дальше и ещ один единствен коммента на практике у вас будет одна выборка и вы попадете только в одно место Просто если я попаду куда-нибудь сюда у меня выпадет на кубике 3 с по после 100 обв я скажу что кубик честный а если я попаду сюда то я скорее скажу что

на кубике 3 с по после 100 обв я скажу что кубик честный а если я попаду сюда то я скорее скажу что кубик нечестный и тогда риск ошибиться у меня будет практически нулевой ведь помните что я вам вчера говорил те вероятности это не про то мини Шиб вот так хорошо с этой теоремой разобрались собственно говоря здесь прописано ровно то что я вам проговорил Да ничего нового здесь кстати можете посмотреть моделирование из разных распределений вот из нормального брали выборку из юниформ это как кубик у

моделирование из разных распределений вот из нормального брали выборку из юниформ это как кубик у меня да из гамма распределения брали вот выборки мы с вами 10.000 раз делали здесь 100 разли брали выборку размером 25 ино везде нормальное распределение как-то так плюс ещё по центральной предельной теореме Я вот здесь соответственно вам где-то где-то оставлял Сейчас секунду так Сегодня вторник Да вот здесь в принципе есть принцип работы Центральной пределе тереме Кто хочет чтобы как бы в моменте

здесь в принципе есть принцип работы Центральной пределе тереме Кто хочет чтобы как бы в моменте посмотреть но правда питон это долго считает стро не получится ждать есть ещ соответственно вот здесь я ссылку скинул здесь на YouTube видео идт где показывают анимацию в ускоренном варианте кому вот хочется прям да визуально всё это более глубоко посмотреть обязательно посмотрите вот а здесь разные примеры делал запускал причём самый прикол в том что чтобы вы понимали Я просто генерис нде ре вобще

делал запускал причём самый прикол в том что чтобы вы понимали Я просто генерис нде ре вобще стра сильный инструмент про не говорят эмпирики говорят Ну типа Центрально преде теорема Но это вроде как бы в теории говорят что она работает а теоретики её до конца не доказали она не доказана полностью и они говорят что ну как бы эмпирически она работает Короче друг на друга стрелки скинули и все ей пользуются но тут я проводил эксперимент но тем не менее просто вот сидел и вот писал вот писал писал

но тут я проводил эксперимент но тем не менее просто вот сидел и вот писал вот писал писал писал числа и что получилось у меня такое распределение получилось вот такое И как вы видите Короче я тут не намного запустил но статистический тест показал что это всё нормальное распределение То есть даже по выборке которые взяты из моей головы Я уж не то что молчу про реальные данные всё равно Центрально такая вотка кто наверное её до конца не понимает Но все все ей верят в принципе уже много лет не Ну

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

к этому же самому кубику когда я посываю кубик очень мало раз очень мало раз Ну где-нибудь вот здесь да то я ещё могу сильно отклониться Да даже вот здесь смотрите вот у меня там Например 300 запусков примерно Да там около 300 Я не знаю сколько я ещё сильно так-то отклоняться от матожидания правильно но закон больших чисел подчёркивает очень простую идею большая выборка равно большой богатство Вот это девиз закона больших чисел потому что на больших выборках сложно отклониться От данных

Вот это девиз закона больших чисел потому что на больших выборках сложно отклониться От данных генерально вот и всё и с кубиком как бы мы моделировали с вами Давайте откроем вот кубик у меня был вот здесь вот где я его там подкидывал с вами в самом начале мы с вами подкидывать Вот давайте вот так вот здесь вот смотрите се не здесь а где я делал Ну ладно здесь просто сделаю и всё вот смотрите Давайте предположим я подкидывал во вот здесь мне надо быть Вот здесь надоть и будем считать смотрите я

предположим я подкидывал во вот здесь мне надо быть Вот здесь надоть и будем считать смотрите я подкидывают Монополию или что-нибудь е там вообще буквально два кубика Да бросаете там ещ отклонение может сильнее Там две шестёрки могут вылететь Я думаю не раз Вы это в своей жизни видели а Попробуйте 100 раз подкинуть кубик чтобы у вас рок выпало вот как статистике Вы должны были бы задуматься да сложнее и сложнее отклониться А теперь я возьму ещё 000 раз подброшу и Обратите внимание видите всё

сложнее и сложнее отклониться А теперь я возьму ещё 000 раз подброшу и Обратите внимание видите всё сложнее Вот это закон больших чисел всё вот я вот постоянно создаю выборку Я уже не могу сильно отклониться от 3 с по и они на самом деле Центрально предельные теоремы связаны между собой потому [музыка] что как бы вот закон больших чисел на самом деле не явно вшит в центральную предельную теорему в знаменателе чем больше Выка тем сложнее отклониться от среднего колокол сжимается да и

теорему в знаменателе чем больше Выка тем сложнее отклониться от среднего колокол сжимается да и соответственно поначалу мы поначалу Мы у меня в коде тут тоже есть запуск Да соответственно види поначалу это тут с ростом людей Поначалу я ещё мог сильно отклониться Но потом меня всё равно ведёт уже выборо очень большие меня ведёт к реальному значению ещё я привожу в пример знаете такую историю вот Представьте хорошо вот на примере людей вот у вас есть всего два измерения и к вам приходит человек

Представьте хорошо вот на примере людей вот у вас есть всего два измерения и к вам приходит человек который является очень большим выбросом в Росто распределения Я имею в виду Вот и то есть у него большой-большой рост там не знаю 250 см Конечно вы как бы ваша выборка из двух элементов сильно среагировать на это правильно а представляете когда выборка из миллиона элементов Ну что такое для миллиона элементов один человек ростом 250 Ну Ничто по факту популяция как была в среднем одного роста так

элементов один человек ростом 250 Ну Ничто по факту популяция как была в среднем одного роста так и останется поэтому на больших выборках уже реакции на всё это нет и всё потихоньку стабилизируется и приходит к значению которое реально есть Вот они вот мы с Тамарой ходим парой вот эти два две теоремы Да закон больших чисел и Центральная предельная теорема которые между собой очень связаны и в принципе на самом деле рассказывают одно и то же просто под разным углом Ну да да так далее Далее Ну в

на самом деле рассказывают одно и то же просто под разным углом Ну да да так далее Далее Ну в принципе всё как бы дальше уже потре Какие распределения могут быть Ну вот например нормальное распределение здесь я писал что я здесь писал Чему равно матожидания и Сигма то есть мат ожиданий и стандартное отклонения у каждого распределения первое самое известное распределение - это нормальное распределение у него как бы два параметра у него прямо вовнутрь параметрами вшиты мат ожидания и стандартное

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

среднее значение средний рост людей грубо говоря да то 68% значений будут жа лежать в пределах одной сигмы то есть 68% если случайно взять элемент да случайную выборку взять случайно сечас сходить измерить людей если там действительно 175 средний рост то с вероятностью 68% я Отклонить в рамках двух сиг Ну ИТ сиг это суммарно уже 99,7 практически 100% практически 100% значени вот как-то так так я поэтому сейчас секунду закончу мысль Я поэтому на самом деле И вот когда вот здесь создавал пример я

сейчас секунду закончу мысль Я поэтому на самом деле И вот когда вот здесь создавал пример я Никаких данных не поднимал там стий где она у меня там была пророст Людей Да пророст людей вот я видите взял что-то я уже запутался А вот Да собственно говоря рост 175 Сигма 8 я взял примерно Почему Потому что три сигмы 8 у на 3 это 24 Ну типа от 151 до 199 практически все ну я думаю похожи на правду согласитесь насколько уж средне 175 это просто запрос в Google не более того который мне выдал это

согласитесь насколько уж средне 175 это просто запрос в Google не более того который мне выдал это значение бы более глубокой аналитики я здесь не имею поэтому я выбрал вот такую сигму предположительно и вот получилась Вот такая вот история такие распределения и все следствия которые мы дальше с вами имели по трём Сигма по трём сигм и когда я генерировать с небольшим засим окошко отобразилась Да ну как бы можно и сиг было взять это генерация самого А ну это потому что у меня сейчас СМЛ СМЛ -

ну как бы можно и сиг было взять это генерация самого А ну это потому что у меня сейчас СМЛ СМЛ - это кубик мне надо перег нери распределение Ну то есть собственно говоря видите Да 151 до 199 почти вот наша выде [музыка] получилось нормально распределение всё обсудили Давайте идём дальше распределение вернули Ну тоже про него уже проговорили где оно моделируется дискретное распределение вероятности моделирующий Случайный эксперимент бла-бла-бла короче да нетка да у меня орл решка всё что угодно

моделирующий Случайный эксперимент бла-бла-бла короче да нетка да у меня орл решка всё что угодно у этого распределения лишь один параметр это P вероятность успеха собственно говоря она является и средним Да вот стандартно наполнение считается по такой формуле е здесь написа в принципе вы ВС равно будете в питоне делать Ну формула лёгкая можно как бы по ней считать можно считать по [музыка] ней чтобы убедиться что она работает Представьте что не знаю давайте вероятность успеха 08 на какое-то

чтобы убедиться что она работает Представьте что не знаю давайте вероятность успеха 08 на какое-то событие Да на какое-то событие тогда Какова вероятность если без кода было чтот вот если вы сюда формулу поставите единичку меня ра 08 а стало равно о то есть вероятно что будет едини 08 у 1 на 1 мину получается 08 в степени 1 ми1 Вот это в степени но уходит в единицу Остаётся только 08 собственно говоря Вот это вероятно считать если у нас только два варианта ну здесь не зачем согласен здесь

говоря Вот это вероятно считать если у нас только два варианта ну здесь не зачем согласен здесь незачем в другом случае может быть может быть здесь вот уже посложнее здесь уже посложнее здесь вариантов больше И это биномиальное распределение вы сегодня с ним столкнётся вам его надо будет разглядеть биномиальное распределение очень часто возникает потому что ну как бы часто такая история что конкретно одного а социальные опросы конкретно одного человека на улице опросить в принципе бывает часто

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

человек каждый из них раден берну именно в мо моделировани подж спрашиваю Да не знаю Вам нравится что не знаю Здесь вместо магазина построили спортзал Да начинаю спрашивать и соответственно как бы я людям не оставляю выбора предположим либо да либо нет Третьего не дано чтобы было чисто распределение берну Да в моём примере и тогда соответственно каждый из них бы имел распределение берну отвел бы либо о либо но Прим п это была бы вероятно с упе То бишь если на 1.000 человек примерно в

отвел бы либо о либо но Прим п это была бы вероятно с упе То бишь если на 1.000 человек примерно в генеральной совокупности 700 довольны то скорее всего встретить случайного человека с вероятностью 0,7 он мне скажет да правильно И тогда вот сам Y он же тоже случайная величина правильно всё в жизни является функциями случайности Да вот что проехала какая-то машина сейчас у меня за окном Это тоже цепочка случайностей поэтому случайности зависит от случайности это нормально Y случайная величина

цепочка случайностей поэтому случайности зависит от случайности это нормально Y случайная величина так как зависит от вот этих случайных величин так вот Y имеет биномиальное распределение с двумя параметрами N и где P - это вероятность что мне каждый даст ответ положительный Успех А - это сколько людей я опросил и собственно говоря уже можно считать можно считать Вот то есть у нас говори гори в Бином распределении это такой же параметр как вну для каждого отдельного Да потому что и зависит от

Бином распределении это такой же параметр как вну для каждого отдельного Да потому что и зависит от берну распределения Угу Вот например смотрите вот бы я вас спросил да на собеседование Ну ну пусть будет собеседование ладно больше водных никаких не дам сейчас заедет во двор одна машина случайно Какова вероятность что она красная будет хотя нет нет немного не то давайте по-другому сделаем заедет 10 машин во двор ка РОНО что из них будет две красны вот так в принципе достаточно свободная задача

10 машин во двор ка РОНО что из них будет две красны вот так в принципе достаточно свободная задача которая может подчеркнуть ваши аналитические истории Но мы пока сильно глубоко не будем углубляться Давайте сначала просто прикинем Сколько красных машин у нас Давайте речь идёт опять же ну чтобы замыкать территорию чтобы замыкать территорию Пусть это будет внутри МКАДа сколько мо достаётся эта информация Ну сколько просто на скидочку Давайте прикинем Ну пусть будет 20% Хорошо пусть будет 20% то

Ну сколько просто на скидочку Давайте прикинем Ну пусть будет 20% Хорошо пусть будет 20% то есть вот на самом деле это значит что если у меня 20% красных машин Это значит что вот как бы каждая машина с вероятностью 02 будет Красная правильно вот у меня 10 машин заезжает это десятая первая заезжает уверенно вторая третья и так далее получается что мой Y имел бы биномиальное распределение С какими параметрами 102 машина заезжает 02 и я вас спросил по факту я говорю А чему равен у Ире pmf это

параметрами 102 машина заезжает 02 и я вас спросил по факту я говорю А чему равен у Ире pmf это дискретная величина что заедет две красных машины вот собственно говоря у вас есть всё чтобы посчитать Вот она формула но как бы я наверное это сделаю в питоне питоне Да вот вопрос Да можно получается там мы умножаем все возможные комбинации этих десятерых машин на вероятность Угу Где где умножаем не совсем понял pmf pmf fy вот форму Да вот к комбина коэффициент это все возможные комбинации дадада да

понял pmf pmf fy вот форму Да вот к комбина коэффициент это все возможные комбинации дадада да мильный коэффициент - это минимальный коэффициент - это знаете как бы вам привести вот смотрите предположим предположим вас 10 человек у вас вас 10 человек мне нужна не знаю помощь Мне нужно выбрать случайно из вас двоих ой из вас дех случайно двоих людей сколько у меня есть различных вариантов Ну вот коэф да да вот вот это если что это и есть НК просто по-другому бы Значит у меня не вылазила поэтому

да да вот вот это если что это и есть НК просто по-другому бы Значит у меня не вылазила поэтому так указал Ну тоже в принципе часто и такое увидете 10 под соответственно 10 ФК 8 ФК 2 ФК с вами получается 10 пополам 45 вариантов всё 45 вариантов а это значит что у меня 45 различных комбинаций есть да как вас взять то есть это может быть например Бул и Костя да может быть там Саша и Люба и так далее 45 различных комбинаций если взять что один началь закончу мысль если проводить параллель с

далее 45 различных комбинаций если взять что один началь закончу мысль если проводить параллель с машинами почему мне это нужно считать у меня красными могли бы быть первая и Девятая машина вторая и Сея мне это надо учесть поэтому бинт Да давай Т вопрос А ты уже доказал в принципе так 10 машин заезжает вероятность того что она красна 02 подставляю и считаем что будет две красных машины Ну ничего так так-то на самом деле достаточно этот са Боша ЕС 20% красных то две как раз таки 20% мы так и

так так-то на самом деле достаточно этот са Боша ЕС 20% красных то две как раз таки 20% мы так и ожидаем это очень логично А хотя нет стоп 20% это каждая пятая А ну всё правильно это самое ожидаемое значение Вот другой вопрос 10 красных что приедет это чудеса Мы в какой-то район красных фонарей попали Да где чисто уже почему Там скорее люди угорают по красному цвету например или почему-то ещё то есть случайно наткнуться на такое явление очень маловероятно [музыка] Вот например 5 2% вероятности

есть случайно наткнуться на такое явление очень маловероятно [музыка] Вот например 5 2% вероятности Ну собственно говоря всё у нас появился инструмент который позволяет всё оцифровать как-то так единичка тоже Очень вероятно нолик Может может ни одна красная машина не заехать Но по крайне мере мы смоделировали процесс и мы можем вероятност оценить Что к чему здесь происходит вот это биномиальное распределение так далее Можно вопрос да да коро вот в предыдущем примере Можем ли мы посчитать какой

так далее Можно вопрос да да коро вот в предыдущем примере Можем ли мы посчитать какой будет самый вероятный исход вот на этих данных что-то я зад нулся пони машинами крас Ну вообще ты можешь по-моему есть мода просто напрямую [музыка] Давай загугли ти биномиальное распределение здесь собственно говоря как везде у них описание Что к чему там бла-бла-бла примеры нам нужно методы найти мин [музыка] медиан что-то я не вижу а как вы же этот сейчас изучали я что-то я не вижу моду здесь Да но можно е

медиан что-то я не вижу а как вы же этот сейчас изучали я что-то я не вижу моду здесь Да но можно е вручную посчитать никаких проблем в этом нет совершенно да Но мне интересно было чтобы метод не видно совсем не суть просто интересно в теории Есть возможно конечно я мог бы сделать у меня красных машин Сколько может быть от ну до 10 правильно Ну значит 11 указываю по-хорошему П [музыка] 1 так от одного тогда по идее на может не одна красная машина заехать Может же не одна красная машина заехать

тогда по идее на может не одна красная машина заехать Может же не одна красная машина заехать правильно согласны Дава Маши их вероятность вот так вот ну собственно говоря Ну да вот двойка самая вероятная да про на самом деле это было сделать на графике в этом типа plt точ то Вот как я Вот здесь сделал plt Bar получается вот здесь вот да вот так вот взять plt Bar и вот сюда Давайте где я тут писал всё это вот здесь вот здесь соответственно сюда мне надо подать Ну я сюда могу подать сказать что

всё это вот здесь вот здесь соответственно сюда мне надо подать Ну я сюда могу подать сказать что красных машин может быть от Ну до о шагом оди он мне сгенерирует выборку ровно вот такую и посчитает соответственно вот у меня ди есть pmf вот в этой выборке Ой конечно ну я сечас красотой кода не занимаюсь Так что на это более вероятно А вот уже 6 се видите уже очень очень маловероятно вот 0 1 2 3 4 Да наверное как-то вот так это стоит ожидать это стоит ожидать Ну что ж тогда идём дальше есть ещё

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

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

приближением биномиального распределения и у распределения пона есть только один параметр лямда который говорит сколько элементов выборки было И сколько у него среднее равно лямбда стандартно отклонение равно коре лямбда форму для P есть здесь и собственно говоря просто в питоне как угодно Тоже периодически возникает распределение посо здесь этих распределений тонны я как бы сам наверно знаю може прон процентов 10-15 распределений их очень много и некоторые распределения Они имеют очень

може прон процентов 10-15 распределений их очень много и некоторые распределения Они имеют очень локальный характер и вы просто с ни никогда не столкнетесь мы проговори только самые основные вот экспоненциальное распределение Да так оно выглядит Где оно может возникнуть моделирование время между отказами оборудовани это кстати возникает это вообще задача есть такая Data Science предсказание отказа У оборудовани потому что ладно когда я буду предсказывать что у меня лампочка перегорит но

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

же лучше как бы сначала это сделать пока это не сломалось Потому что когда сломалось исправления могут быть гораздо тяжелее и это кстати тоже одна из задач Sci Я с не чуть-чуть имел косвенно дело Но типа предсказание отказа вы наво ли делаю холодные звонки делаю понятно что как бы чаще всего когда я позвоню мне скажут что спасибо не надо Да и таких разговоров будет больше всего то есть где мало времени и в исключительных случаях как бы мы там и за жизнь поговорим и все дела там за 20 минут наш

и в исключительных случаях как бы мы там и за жизнь поговорим и все дела там за 20 минут наш разговор уйдёт обо всём ини о чём то есть вероятность этого очень маленькая Ну в принципе всё итоге случайно величины появляются повсеместно свойства объектов измерения и прочее часто они бывают близки каким-то распределения распределение - это просто мат модель у распределения есть характеристики об этом надо помнить всех распределени выучить Кто хочет может посмотреть эту карту я сейчас её не буду

надо помнить всех распределени выучить Кто хочет может посмотреть эту карту я сейчас её не буду открывать Ну там короче как все распределения в природе между собой взаимосвязаны на самом деле если говорить про практику конечно чаще всего вы будете сталкиваться с просто произвольными распределения Но даже к ним можно поступаться и об этом мы тоже будем говорить вопросы произвольное распределение поди ние значит распределение которое как бы на практике что про практику здесь сказа Если вы в циане

ние значит распределение которое как бы на практике что про практику здесь сказа Если вы в циане выведете у себя Не знаю гистограммы У вас же не все распределения будут прям к какому-то семейству относиться иногда они бывают же возни является ни распределением берну ни биномиальный ни ещё каким-то мир гораздо сложнее чем просто теоретические распределение Но к ним тоже можно поступаться об этом будем говорить у на но при этом очень часто возникают и да на этой неделе очень часто возникают

будем говорить у на но при этом очень часто возникают и да на этой неделе очень часто возникают распределения и теоретического характера в том числе угу вот так давайте тогда посмотрим ваше задание на сегодня ваше задание на сегодня собственно говоря демо который я с вами вот сегодня проговаривая он у вас здесь прикреплён слайды лекции прикреплены Но кто Вот про цпт хочет посмотреть её генерацию собственно говоря вот здесь задани заданий у вас Бут сегодня существенно меньше первое задание там

собственно говоря вот здесь задани заданий у вас Бут сегодня существенно меньше первое задание там про короче во многих задачах Вам самое главно понять что это за распределение или это произвольное распределение и уметь посчитать можно это делать через это Рен То бишь рукой кому какме в первом тут просто надо увидеть составить решение найти вероятно во втором нужно понять какой закон распределения Просто даже не буду комментировать четвёртое тоже нужно понять закон распределения подставить

Просто даже не буду комментировать четвёртое тоже нужно понять закон распределения подставить пятое понять зако постать вот по что если ты это сложность этой недели во многом как раз таки именно в каком-то плане не то чтобы созидательной истории это надо понять вот где-то нужно делать Вот дальше у вас будут недели там нужно много делать А вот эти недели нужно понять нужно поварить то что я говорил как бы может не сразу быть понятно и перевариваемая думайте а потом обязательно решите эти задачки

как бы может не сразу быть понятно и перевариваемая думайте а потом обязательно решите эти задачки собственно говоря Восемь задач у вас будет на сегодня а вопрос вот как раз-таки повредиться в пути мы рассматриваем изделие которое в целом повредится не понял вость Ну вот задача где повредиться в пути изделия там чуть пониже шестая Вроде да вот а упакованные изделия вероятность того что изделие повредится в пути вот мы рассматриваем вероятность того что изделие в целом повредится или только в

повредится в пути вот мы рассматриваем вероятность того что изделие в целом повредится или только в пути то есть весь срок эксплуатации изделия рассматриваем или только пока оно едет Ну а где ему ещ повредиться тут только по [музыка] пути Ну то есть мы контекст не берём может коне разгружали некачественно но Пустим эти моменты довери ребятам что всё нормально дела тут подразумевается конечно что именно поди пути хорошо тетрадки в самом Юпитере в браузере Я просто сейчас работаю всё время в -

именно поди пути хорошо тетрадки в самом Юпитере в браузере Я просто сейчас работаю всё время в - коде с тетрадками да да разницы Никой нет исполнительные пакеты одни и те же то есть что ты открываешь Юпитер ноутбук как бы есть ноутбук где он у тебя открыт в Юпитер лабе или вде без разницы Ну например там какие-нибудь полезные фишки типа вот я видела что он тебе подсказывал подсказывал Какие аргументы есть это в равной степени работает или не в равной степени работает Ну вде этого существенно

есть это в равной степени работает или не в равной степени работает Ну вде этого существенно больше Да мне просто Юпитер нравится не знаю много в м работы сердечки гдето код когда что-то там не знаю вот у меня тоже как бы когда мне что-то больше надо писать проект собирать Я ухожу над Да если речь идёт соответственно если ит о чём-то небольшом то я делаю это лично моё ждн как в коде Да поэтому когда что-то маленькое Лично я здесь работаю но когда что-то большое Когда уже с файловая система надо

что-то маленькое Лично я здесь работаю но когда что-то большое Когда уже с файловая система надо работает то конечно код он гораздо больше Да может дать выхожу так чтоб вот этот файл у вас без всяких проблем запустится в коде и все вот эти вещи которые там то что вот я собственно говоря вот эти окошки открываются точно также всё посмотреть иде без всяких проблем Так ну что тогда будем прощаться а можно ещ Вопрос вот не по занятию А по будущему Вот нас в конце недели тоже ждёт какое-то общее

а можно ещ Вопрос вот не по занятию А по будущему Вот нас в конце недели тоже ждёт какое-то общее задание И что в этом роде Ну первые 2 недели у вас не будут проектами потому что в эти 2 недели нужно много что понять осознать да и у вас будут как бы ну скажем такие ключевые задания в конце они более такие практического характера но вопрос не понял до конца ты имеешь как проект на прошлой неделе как на они будут у вас но они будут у вас чуть позже первые 2 недели математически там не будет проек

на они будут у вас но они будут у вас чуть позже первые 2 недели математически там не будет проек СБО явного такого проекта ВС но ребята вместе обсуждают вме подходит к этому прого не будет да конический микро вопрос сеча под написано уже в аргументах как ткнуть туда скобках и вызвать подсказку если шаришь скажи если нет то ничего страшного Да нет давай попробуем просто так то есть пока я пользуюсь так сереть всё э начать писать тогда она вылетает убрал курсор она пропадает Как вызвать снова я

так сереть всё э начать писать тогда она вылетает убрал курсор она пропадает Как вызвать снова я не знаю с чем-то написанном Дада дата может не сейчас давайте знаете как сделаем сейчас секунду так всё это открывается Сейчас я просто Давайте вот вашу папочку открою создам файл например [музыка] ну не давайте сдела ты экран вроде не показываешь а серьёзно вообще не а е выключил так так так вы собственно говоря сейчас он погрузит но то Ну давайте сделаю просто участник курса который реферальной

говоря сейчас он погрузит но то Ну давайте сделаю просто участник курса который реферальной программ кони пере давай уже сразу реферальную ссылку с параметром чтобы тебе там продал хорошая вещ Ну вот ту собственно говоря просто наводишь и вот то есть курсор просто наводишь на метод это когда он пустой он пустой Да вот теперь что-нибудь Начни писать как как снова блин пошёл пробовать у меня не работало это просто курсор наводишь сюда и всё На сам метод наводишь тут он как бы именно на аргумент

это просто курсор наводишь сюда и всё На сам метод наводишь тут он как бы именно на аргумент дедов А вот именно на саму функцию навед Ну я так по крайней мере всегда смот офигенно Спасибо Сейчас проверю Угу ато А ты так делаешь постоянно или или Короче просто хочется понять как Как профи Профи которые хотят понять Какие аргументы вставить они наводят или они не занимаются этим они там гуглят например и так далее наводят многие наводят Окей наводят тут иногда как бы в принципе достаточно

например и так далее наводят многие наводят Окей наводят тут иногда как бы в принципе достаточно объяснения ну иногда не недостаточно тогда гуглишь как бы вот ситуацию Ок Ну всё тогда да Всё Давайте успешного вам продуктивного денёчка и на связи вечера пока-пока давай

Привет С кем не виделись а вы кто а бывший у меня хороший вкус я не похож Ну что все посмотрели лекции Я нет которые ВКонтакте да Ну да я проспорил себе денёк понял что будет интересно толь там подача не очень пода не очень там мягко говоря не очень чулок просто как будто читает всё подряд негу воспринимать дамо я рано не могу Я тоже его посмотрела он мне очень сильно напомнил Знаете есть Такой жанр в Китае новостные Ну когда-то ещё пару лет назад ещё до видео генерации они сделали что новости

в Китае новостные Ну когда-то ещё пару лет назад ещё до видео генерации они сделали что новости читают сгенерированные ведущие очень похоже очень похоже А я ещё просто всегда смотрю типа на x1.5 либо 175 а тут очень быстрые склейки у меня ещё голова из этого туда-сюда Он летает Слушай я посмотрела на 2 и И мне было ровно так же плохо дети дети учитель пришёл в класс ну-ка встали все поздоровались Здравствуйте Анто Ефимов Здравствуйте Здравствуйте всем Приветствую вас ученики Так ну что готовы

Здравствуйте Анто Ефимов Здравствуйте Здравствуйте всем Приветствую вас ученики Так ну что готовы сегодня будет хороший денёк хороший денёк Так что будем потихоньку начинать а будем потихоньку начинать секундочку так экран видно Угу угу отлично А сегодня мы начинаем переходить к статистике Но кстати статистика есть описательная статистика это как раз-таки то что в каком-то смысле мы вчера говорили да что в распределении можно посмотреть моду медиану квантили Там бла-бла-бла вся вот эта э

да что в распределении можно посмотреть моду медиану квантили Там бла-бла-бла вся вот эта э история и есть другая сторона статистики которая называется проверка стат гипотез наверное как бы ну самая сложная часть статистики но в целом как бы думаю у нас всё получится хорошо вот сегодня посмотрим как отличить Как отличить статистически достоверное событие от случайного узнаем как устроен пайплайн проверки гипоте реализуем функцию расчёта для некоторых статистических тестов в короче для каждого

проверки гипоте реализуем функцию расчёта для некоторых статистических тестов в короче для каждого кейса есть свой стате подходящий чтото в интернете Я пока не нашла нормальное таблички шита который бы просто показывал бы Для чего чего может быть ты видел Нет з с я прям знала поэтому проверка статистических гипотез Что такое вообще статистическая гипотеза статистическая гипотеза предположение свойства генеральной совокупности Вчера мы с вами выстраивали мустик вчера говорили как что в

свойства генеральной совокупности Вчера мы с вами выстраивали мустик вчера говорили как что в генеральных совокупностей совокупности средни медианы мод далее Это Константа вот всю генеральную совокупность мы исследовать не можем А значит мы должны собрать репрезентативный изучить её А после проверить гипотезы нашу вот какую мы тамм задача с кофе Ну мы посмотрим с вами на примере задач с кофе это кстати любезно сгенерировал мне картинку не кандинский Как видите пальчики немножко себя чувствуют

кстати любезно сгенерировал мне картинку не кандинский Как видите пальчики немножко себя чувствуют неуверенно но бы всё нормально Итак В чём состоит задача Давайте представим в торговом центре стот каждый второй есть гипотеза что у нашего автомата сложный интерфейс и некоторых людей Это сбивает с толку и они просто уходят есть идея изменения Да разработан новый тестовый интерфейс и поставлен наш автомат Ну тут помимо того что это идея эта идея уже воплощается а в случае успеха можно будет

наш автомат Ну тут помимо того что это идея эта идея уже воплощается а в случае успеха можно будет выкатывать на все остальные наши автоматы То есть у нас их много мы просто берём один как для теста чтобы проверить что действительно есть проблема у пользователей взаимодействия с нашим интерфейсом Ну просто тупо сложно заказать кофе хотя очень-то и хочется на самом деле Вот и соответственно что было до что было после напоминаю до у нас с вами была из тех кто подходил к нему с кофе уходил каждый

до что было после напоминаю до у нас с вами была из тех кто подходил к нему с кофе уходил каждый второй после мы собрали выборку из 300 людей которые подошли к нему к нашему автомату и купили 167 собственно говоря Как вы думаете подтвердилась ли наша гипотеза результа пока что ну ваше сердце что подсказывает там или подсознание не знаю что угодно к чему вы интуитивно склоняется с выбором так как внедрение будет стоить денег а промахнуться не хочется я бы пошёл А это вопрос или нет Это вопрос

внедрение будет стоить денег а промахнуться не хочется я бы пошёл А это вопрос или нет Это вопрос вопрос всё решение соответственно как бы Если говоришь что взлетело мы внедряем тратим много денег но потом спрос будет если ошибка интуитивно Я пошл бы в вычитание от этого процента прироста Мы видим что чуть больше стало чем половина интуитивно посчитал бы в процентах сколько это относительно предыдущих результатов которые были ранее и начал бы както ну бизне оценивать то есть стоимость сложения

результатов которые были ранее и начал бы както ну бизне оценивать то есть стоимость сложения изменения в каждом автомате на вот этот прирост в деньгах на каждом автомате ЕС второе больше чем будто бы ты скорее уже знаешь что делаешь Ты по факту Уже принял тот факт что улучшение есть А дальше уже рассчитываешь насколько оно хорошее для нас а может ли такое случайно получиться вот смотрите кидаю я монетку она действительно честная представили А это ведь на самом деле моделирование тоже самое

я монетку она действительно честная представили А это ведь на самом деле моделирование тоже самое берлев моделирование чисто монетка орл это Купил кофе решка не купил предположим вот есть монетка которая у меня чест Но может меня после 100 подбрасывания выпав 50 54 том что монетка честна соответственно тут тоже самое может произойти верно И поэтому ты как бы Костя отвечаешь он уже наследствие что дальше ты бы рассчитал финмодель посмотрел бы там Импакт Да если он соответственно нас

что дальше ты бы рассчитал финмодель посмотрел бы там Импакт Да если он соответственно нас удовлетворяет то Окей выкатываем А именно сам факт что есть улучшение или нет тебе подсказывает сердце что есть да получается хорошо У кого ещё какие варианты кто я бы если можно ждал бы ещ большего количества людей чтобы закон больших чисел сделал дело Да да я согласен что это вот в принципе хорошая история здесь Наверное это не так долго накопить эту выборку но Давайте представим что мы больше не можем

здесь Наверное это не так долго накопить эту выборку но Давайте представим что мы больше не можем взять выборку 300 - это ограничено Но вообще ответ мне нравится то есть как бы ответ хороший Если есть возможность держать выборку и есть время почему бы её не поддержать действительно чем больше выборка тем точнее результат Ну вот не всегда к сожалению есть такая возможность и вот по каким-то причинам у нас с вами вот 300 людей - это максимум что мы смогли Выжить и принимать решение надо сейчас у

у нас с вами вот 300 людей - это максимум что мы смогли Выжить и принимать решение надо сейчас у меня вопрос Угу а Неважно какая у тебя хорошая большая и инклюзивная выборка если гипотеза ужасная то ты придёшь к ужасному выводу так получается Ну в каком-то смысле Да ну тебе это надо понять что ты ужасный вывод вот сечас купили 167 тому что гипотеза важнее выборки Ну да идея будет первый согласен нам просто понимаете вот как бы где-то статистика вообще не нужна если я придумал такую гипотезу

нам просто понимаете вот как бы где-то статистика вообще не нужна если я придумал такую гипотезу которая мне дала ор прибыль там да Или оверу увеличение метрик каких-то Ну зачем мне статистика я глазами вижу что как бы всё окей да было 100 руб стало 500 руб раньше было 100 плюс минус 5 руб стало 500 Ну что тут в принципе говорить всё очевидно да то есть статистика она не ради статистики совершенно и там где она не нужна Ну какой смысл в неё погружаться вот а вот так где на тоненького начинается

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

не знаю в три раза большой компании Это не просто сделать она уже становится тяжёлой и она вот потихоньку потихоньку микросервисами что-то меняет меняет меняет как-то вот выискивают соответственно как бы возьмём не знаю любую компанию какую-нибудь Hunter они вот эти вот гипотезы у них просто конвейер гипотез стоит и мы с вами постоянные участники Да там ну если не ханте но любого сайта в интернете мы с вами заходим мы постоянно становимся участниками проверки гипотез сами того не знают Но об

мы с вами заходим мы постоянно становимся участниками проверки гипотез сами того не знают Но об этом я поподробнее расскажу попозже так вот меня всё уводите в сторону только Костя мне ответил ито Короче что-то я решила помнить посмотрела квадрат да тест Ну по 150 на 300 и 167 на 300 и тные они пересекаются поэтому типа стаки но ня парит в этом то что я не понимаю как бы здесь нужно считать или не нужно и как он счита Ну да тут ещё нужно посмотреть какая дисперсия изначально вы уже сегодня

не нужно и как он счита Ну да тут ещё нужно посмотреть какая дисперсия изначально вы уже сегодня знаете поже уе слова Говорите Мста Поня эти умные слова которые зау это распределение берну распределени дисперсия считается знаю только вероятность успеха вот поэтому если вы откроете любой калькулятор там по счёта выборки и так далее в интернете от вас не потребуют дисперсию пото что дисперсия дисперсия в распределение берну у меня распределение берну кажы НЕФ смотри что что именно считается Дай

в распределение берну у меня распределение берну кажы НЕФ смотри что что именно считается Дай вы меня немножко в сторону уводите пока был вопрос такой мы обязательно это всё разберём только чуть дальше мы ещё даже про стат теста не поговорили смотрите вопрос был очень простой сейчас ваш стат тест - это ваша интуиция кому что подсказывает Мне кажется ниче подсказывает что не Измени нет нет разницы чески не значима наве всё всё хорошо вот вот это я хотел услышать вот это хотел у кого-то как бы

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

что мы имеем Генеральная совокупность - это все люди которые бы подошли к нашему автомату всех их я естественно не достигну поэтому у нас есть с вами Выка в данном случае Выка имеет 300 элементов 300 людей Каждый элемент выборки он случаен и имеет распределение Берли с неизвестным параметром P согласны то есть долю купивших Я не знаю вот этот под знаком вопроса как бы В каком-то смысле Этока Какой процент людей в генеральной совокупности покупает кофе вот п неизвестный для нас параметры

Какой процент людей в генеральной совокупности покупает кофе вот п неизвестный для нас параметры генеральной совокупности до тех кто купил бы подойдя к автомату то есть мы его в принципе не знаем Ну Т вот у меня пример выборки да то есть единичка нолик 167 купили 133 не купили всё чуть-чуть формализации задали сейчас будем всё потихоньку переходить Итак что такое статистические гипотезы гипотеза формулируются всегда так это помара у меня закончился Извините и моя душа тоже ула вот гите всегда

формулируются всегда так это помара у меня закончился Извините и моя душа тоже ула вот гите всегда как гипотеза h0 и гипотеза H1 Ну на самом деле может ещё H2 H3 H4 но всегда есть h0 и есть что-то h0 Да скажем так противостояние h0 смотрите нулевая гипотеза h0 это гипотеза которой мы придерживаемся пока наблюдение не заставит нас признать обратно ей всегда сопутствует альтернативная гипотеза H1 вот вот это может быть не так просто понять но мы на самом деле всегда гипотезы как бы Проверяем так

вот это может быть не так просто понять но мы на самом деле всегда гипотезы как бы Проверяем так Мы как с вами консерваторы работаем Многие думают что h0 это как бы наоборот типа кайфовая гипотеза Да но в реальности Наоборот в реальности именно H1 как правило формулируется Так что мне бы хотелось принять H1 потому что h0 говорю это консервативно в данном случае с кофе я бы сказал что улучшений нет кофе стали покупать луше к сожалению Это значит что значимые изменения есть в 95% случаев

нет кофе стали покупать луше к сожалению Это значит что значимые изменения есть в 95% случаев формулируется гипотеза именно так чтобы нам хотелось попасть в H1 понятно То есть H1 - Это для нас кайфовая гипотеза h0 - Это значит что ваша гипотеза не взлетела вот будете вы на работе вы придумали новую гипотезу А как бы они будут сформулированы так да оцифровано Так что H1 будет подразумевать что ваша идея взлетела и принесла там что-то компании Да вот а h0 соответственно нет вот это вот собственно

идея взлетела и принесла там что-то компании Да вот а h0 соответственно нет вот это вот собственно говоря первое что нам нужно принять помните Да что H1 вкусно h0 не очень И от этого мы сейчас и будем плясать от этого мы сейчас и будем плясать Итак давайте немножко опять оцифрування что подходило каждый второй покупал так и осталось То есть h0 видите консервативный взгляд что ну что-то поменяли интерфейс но нифига он не помог а H1 H1 говорит о том что конверсия увеличилась конверсия увеличилась

но нифига он не помог а H1 H1 говорит о том что конверсия увеличилась конверсия увеличилась пока что как бы без какого-либо уточнения просто что она увеличилась после мы сейчас с вами проведём А как бы результатам исследования Мы остановимся на одной с вами из этих двух гипотез на какой-то из Мы с вами уже попробовали интуитивно принять решение Да кто-то вот сказал что улучшение есть то есть выбрал H1 кто-то сказал что улучшения нет выбрал h0 сейчас за бы не на уровне интуиции А на уровне цифр

H1 кто-то сказал что улучшения нет выбрал h0 сейчас за бы не на уровне интуиции А на уровне цифр собственно говоря это сделать вот то есть Покажите в голове что мы с вами сделали мы собрали выборку мы выдвинули с вами гипоте h01 Тестируем нашу гипотезу Сейчас потихоньку будем обрастать нужным контекстом для принятия решения Да а почему 05 поставили Почему решили потому в зада у меня сформулировано кто подходил к кофе уходил с кофе каждый второй то есть вероятность успеха 1/2 это как с монеткой

кто подходил к кофе уходил с кофе каждый второй то есть вероятность успеха 1/2 это как с монеткой Да всё я поняла то есть вот каждый человек каждый человек Он из распределения берну Вот это у меня как бы в рамках h0 оно равно п что если бы мы с вами были той самой генеральной совокупностью вот нас 10 человек здесь с вами сейчас в данный момент это бы значило что кто-то пято Поня с кули луше хотелось бы и у нас как раз возникла идея что возможно людей это затык интерфейса зак с интерфейса

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

событий смотрите это реальность это наше решение что может произойти мы с вами можем сказать что h0 было Давайте начнём с H1 H1 для нас как бы Аля Позитив реакция да раз она для нас Позитив реакция для нас оци Давайте даже вот здесь пока нарисую Здесь много е того что пока что чтобы не грузить вас У нас возможно с вами четыре варианта Исхода то есть вот это пусть будет реальность и h0 H1 и соответственно это наш как бы предикшн да наше предсказание наше решение А что может быть я могу сказать

это наш как бы предикшн да наше предсказание наше решение А что может быть я могу сказать что было H1 и там действительно было H1 То есть я сказал что Улучшения есть и они действительно были имы с вами выкатили новый интерфейс А дальше нам Костя посоветовал мы ещё можем посчитать это справа насколько Для нас это выгодно Ну в общем это самое самое хорошее Что может для нас быть правда этот квадрат ещё по-другому называют True POS POS Вот либо я могу сказать что h0 сказать Что Блин ну такое на

ещё по-другому называют True POS POS Вот либо я могу сказать что h0 сказать Что Блин ну такое на самом деле Бывает даже чаще большинство гипотез на практике не взлетает Да к сожалению как бы мы сказали попробовали гипотезу но получилось так что у нас недостаточно оснований говорить о том что наш интерфейс повысил конверсию Мы остаёмся в h0 И это была правда Действительно h0 а то что купила как бы вместо 150 167 Это случайно как монетку кинуть Ну при десяти подбрасываниях выпало шесть ролов а не

вместо 150 167 Это случайно как монетку кинуть Ну при десяти подбрасываниях выпало шесть ролов а не пять Ну так бывает да такое случилось Но Это случайность как бы она как бы причина следственную связь что у нас лучше стал интерфейс тут ни при чём соответственно это было бы негатив срабатывание негатив То есть h0 как бы мы сказали ну негативно Да H1 не взлетел мы бы пра Вот соответственно есть ещ две ошибки вот эти две ошибки Это уже как бы менее приятный для нас сценарий Давайте начнём Со

ещ две ошибки вот эти две ошибки Это уже как бы менее приятный для нас сценарий Давайте начнём Со следующего сценария мы с вами сказали что изменени есть круто [музыка] классно всё начинаем выкатывать менять но на самом деле мылись изменени бы сза ми правильно Вот Но мы ошиблись это называется fse POS срабатывание и это называется ошибка первого рода ошибка первого рода или её ещё обозначают буков кой Альфа Ну и как вы понимаете по другой логике есть другая ошибка когда мы с вами сказали что мы

кой Альфа Ну и как вы понимаете по другой логике есть другая ошибка когда мы с вами сказали что мы остались консерваторами но не помогает а он на самом деле действительно помогал и тогда тогда мы с вами остались в негатив но мы ошиблись и получился вот собственно говоря квадрат из этих четырёх значений Вот это Это ошибка второго рода ошибка второго рода либо её обозначают буков кой бета бе и Аль это больше ческое обозначение нети это больше такое манговое обозначение скажем так это в принципе

это больше ческое обозначение нети это больше такое манговое обозначение скажем так это в принципе является полной эквивалентность друг другу полной эквивалентность А как-то так как-то так некоторая сложность да чуть дальше мы её увидим при уменьшении ошибки первого рода увеличивается ошибка второго рода и наоборот вот в данной случае что бы у меня являлось ошибкой Ну давайте предположим первого Вот давайте я коллега Из соседнего отдела вашего Я вообще в этой статистике ничего не понимаю просто

давайте я коллега Из соседнего отдела вашего Я вообще в этой статистике ничего не понимаю просто объясните мне вот на языке вот нашей бизнес задача чтобы для нас значила ошибка первого рода Говорите кто-нибудь Кто первый начинал Я не слышал с бы ну ладно тогда второ Ну это если если на самом деле так сейчас я если мы принимаем то что если мы по своей если мы подтверждаем гипотезу то что интерфейс помогает а на самом деле нет и это случае случай из-за чего у нас улучшилась наша Метрика тогда у

помогает а на самом деле нет и это случае случай из-за чего у нас улучшилась наша Метрика тогда у нас ошибка первого рода Да и какие последствия для нас будут для нашей компании Мы потратим деньги на бесполезный проект который не не повышает ничего Да супер Отлично Так а тогда ошибка второго рода Настя давай тебе ошибка второго рода чтобы для нас было это когда нужно было бы потратить деньги но мы их не потратили в результате люди не покупают кофе в результате мы теряем попло да Да всё верно то

их не потратили в результате люди не покупают кофе в результате мы теряем попло да Да всё верно то есть мы потеряли потенциальную прибыль в каком-то смысле Да любая из ошибок всегда это потеря чего-то Ну то есть этого не избежать в реальных задачах в реальных задачах бывает как бы важнее одна ошибка Да где-то ложно положительно то биш [музыка] но чаще конечно чаще более проблемной является именно ошибка а более грубой ошибкой является ошибка первого рода или второго рода они в принципе от зада

ошибка а более грубой ошибкой является ошибка первого рода или второго рода они в принципе от зада могут меняться то есть вот зани когда изучал первого и второго рода у меня был такой пример что вот в неотложку поступает пациент и у врача стоит вот выбор провести операцию и у человека и пости Жень вот либо человек здоров и как бы всё с ним нормально У вот что первого рода и первого рода - Это то что он решил что ему операция не нужна и человек умер и то что второго рода - это то что операция не

он решил что ему операция не нужна и человек умер и то что второго рода - это то что операция не нужна и её провели типа ну просто посмотрели что там ничего страшного вот Вот и вот я запомнил что первого рода прям критика а второго не особо это конкретно в этой задаче конкретно в этой задаче нету такого как бы общего где-то где-то важнее где-то важнее негатив чаще Конечно вот но нельзя как бы однозначно говорить что нети - это где-то на отшибе такая история Да А может нам это как бы хорошую

однозначно говорить что нети - это где-то на отшибе такая история Да А может нам это как бы хорошую прибыль приси здесь Да может внедрение этого интерфейса для нас копейки понимаете тогда как бы ошибиться совершить Альфу Ну потратить не так страшно да а соответственно здесь для нас очень большая прибыль кроется Ну тогда что бы для нас страшнее было наверное бы ошибка второго рода правильно Поэтому как бы это вопрос такой который не имеет ответа просто чаще действительно POS потому что POS

как бы это вопрос такой который не имеет ответа просто чаще действительно POS потому что POS требует каких-то усилий чего-то нового внедрения и очень жалко когда это просто впустую А как бы Ne это просто консерватор остался при своём ничего не потерял поэтому как бы флс против из-за этого чаще считается это я как бы про бизнесов стори говорю медицина - это ещё более сложная штука потому что там fse по fse негатив иногда равно человеческая жизнь и это как бы совершенно другие м другие другой

fse по fse негатив иногда равно человеческая жизнь и это как бы совершенно другие м другие другой уровень ошибок Да Ну сейчас чуть дальше Вот раскрою этот смысл там нужно быть более уверенным в своём решении нежели просто в бизнесе Да Кость меня просто короткий пример родился вот в сану историю Что например если мы в бизнесов работаем где-нибудь в продажах и там ставят задачу ну там план допустим просто мко план поставили и мы не приняли гипотезу и не до заработали эти бабки то есть не

допустим просто мко план поставили и мы не приняли гипотезу и не до заработали эти бабки то есть не выполнили план и поэтому тут ти получается уже Ока второго потому что на уволили [музыка] нужны то есть они обе важны попытаются как бы сделать так чтобы и то и то было можно меньше Насколько это возможно Да следить надо за об А вопрос про взаимосвязь этих двух ошибок там я несколько раз проходила и каждый раз какая-то Путаница в главе у нас дальше это будет или нет Вот это пересечение двух Крек

и каждый раз какая-то Путаница в главе у нас дальше это будет или нет Вот это пересечение двух Крек и вот это вот всё да будет да Ой так нуб вот Матрица Да ещ раз рисованная Ну в общем мы мы все с вами сценарии проговорили которые возможны теперь надо собственно говоря к этому сценарию приходить что нам А Ну тут примеры например суд выдвигает гипотезу h0 подсудимый невиновен а он на самом деле виновен то есть суд принимает гипотезу хотя она не верна Вот это ошибка какого рода второго Почему

виновен то есть суд принимает гипотезу хотя она не верна Вот это ошибка какого рода второго Почему первого Да мы сказали что он виновен а стоп роро Думаешь Думаешь не было а оно есть о на самом деле вино второго Это я прочитал кри Да ошибка второго рода ошибка второго рода соответственно срабатывание ложно положительный результат при медицинских анализах понятно Это ошибка какого рода Кови вам случайно поставили В общем тут всё просто так ну что ж нам надо как-то потихоньку приходить к принятию

поставили В общем тут всё просто так ну что ж нам надо как-то потихоньку приходить к принятию решений Итак у нас есть выборка Ну в принципе Ключевое и центральное определение в таком предмете как статистика Как вы думаете как называется это статистика вот статистика - Это любая функция получаемая по выборке В каком-то смысле это просто посчитано Метрика мы с вами по каждой вым сного ри Рива наз называют статистикой Вот вы можете по-разному агрегировать данные со своих 300 пользователей лишь бы

статистикой Вот вы можете по-разному агрегировать данные со своих 300 пользователей лишь бы это как бы отвечало отвечало тому что вы исследуете да то что вы проверяете если вам нужно проверить что у вас не знаю Ну вот у нас как бы конверсия Ну давайте что-то близко конверсии посчитаем Да у меня может быть нет смысла суммировать их всех и брать от них синус так себе Метрика будет когда я конверсию считаю да вот и так далее собственно говоря если говорить простым языком понятным для всех можно

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

они могут быть там маркетинговыми и и всё что угодно да то есть они могут быть абсолютно разные и Не сегодня а завтра мы разберём такой инструмент который позволит как бы проверять гипотезы по факту чуть ли не для произвольной метрики Да это очень сильная штука на самом деле очень сильно Вот Но сегодня мы больше будем говорить Вот именно о самых частых статистика Да самых базовых вещах средняя доля Медиа и так далее а именно сред итак хорошо статистика проговорили Давайте нашем задаче Какую мы

Медиа и так далее а именно сред итак хорошо статистика проговорили Давайте нашем задаче Какую мы статистику возьмём но мне кажется очень как бы у меня речь идёт о количестве купивших Так давайте я просто посчитаю количество купивших как вам такая Идея мне кажется очень даже простая и нормальная да то есть я просто посчитаю количество купивших людей тогда моя статистика это Т сумма их напоминаю каждый и у меня либо единичка либо нолик А знат эта статистика полностью отражает количество купивших

и у меня либо единичка либо нолик А знат эта статистика полностью отражает количество купивших людей а Итак мы посчитаем эту статистику в нашем случае Она получилась сколько по нашей выборке 167 167 Абсолютно верно Первое что надо понимать статистика является случайной величиной наша статистика Почему Потому что она посчитано по выборке Сегодня у меня купили 167 Завтра у меня купят 163 сейчас у меня орл выпал восем раз завтра он выпадет но при этом как бы причина следствен сто поменялась я

у меня орл выпал восем раз завтра он выпадет но при этом как бы причина следствен сто поменялась я кидаю Ту же самую монетку у меня ходят те же самые люди к тому же самому интерфейсу и собственно говоря Ну как бы в этом-то и возникает необходимость предмета статистики потому что возникает Случайность а возникает выборок нам надо эту Случайность как-то рационально обработать по факту Да и принять решение по поводу 16 се купивших либо в сторону h0 либо в сторону H1 так чтобы минимизировать

решение по поводу 16 се купивших либо в сторону h0 либо в сторону H1 так чтобы минимизировать вероятность ошибок насколько это возможно потому что как бы до конца правильного ответа нет Вот вы в начале начали говорить что кто-то сказал что не взлетела идея кто-то взлетела в принципе Такой сценарий возможен и для такого и для такого согласны это могло быть при том что это и помогло и не помогло Но мы с вами лишь попробуем прийти к такому решению где риск ошибиться будет меньше а более того мы

Но мы с вами лишь попробуем прийти к такому решению где риск ошибиться будет меньше а более того мы сами будем управлять этим риском да то есть допусти риск для выставлять Итак важно понимать что стака знает имее значит имеет своё распределение это очень важно Как и любая случайная величина Она имеет своё распределение Вчера мы этому посвятили очень много времени да разговаривали Какие распределения есть и так далее вот статистика тоже случайно так зависит от выборки именно знание распределения

есть и так далее вот статистика тоже случайно так зависит от выборки именно знание распределения статистики даёт нам понимание насколько маловероятно или не маловероятно значение мы вообще получили вы вот это 167 Вы на самом деле без знания статистики все интуитивно наш мозг так устроен силу насмотренности на мир да Или на получение знания какого-то у нас уже ВС равно какая-то парадигма формируется а 167 - это много или мало да то есть это вероятно или невероятно как бы в принципе это есть то

а 167 - это много или мало да то есть это вероятно или невероятно как бы в принципе это есть то что мы будем оцифровывать в каком-то плане и даже интуиция может выступать статистическим критерием у некоторых она хорошо развита и даёт хорошую точность Почему бы и нет Вот Но на честность полу 90 Орлов после 100 подбрасывания кажется Слим слишком экстремальным такое Возможно да возможно Ну уж очень маловероятно соответственно Конечно я уйду скорее в сторону того что она нечестно просто потому что

маловероятно соответственно Конечно я уйду скорее в сторону того что она нечестно просто потому что как бы мне риск ошибиться меньше вот и всё да напоминаю вероятность и статистика это про принятие рационального решения Ну что ж тепер Давайте подумаем меня вам вопро TX ра X1 п блаблабла п x300 Скажите пожалуйста как вы думаете каждый и иты напоминаю имеет распределение берну с вероятностью P причём даже в нашем случае но пока что ладно поставлю P тогда Какое распределение имеет статистика TX

даже в нашем случае но пока что ладно поставлю P тогда Какое распределение имеет статистика TX биномиальное номинально Абсолютно верно биномиальная С какими параметрами и не понятно пока что поставим 300 ИП Абсолютно верно Вот теперь смотрите как проверяется гипотеза Помните я вам сказал что мы с вами будем консерваторами мы как бы консерваторы которые в душе верят что всё обязательно взлетит Вот и сам факт консерватор подразумевается что будем с вами действовать такой h0 То бишь ничего не

Вот и сам факт консерватор подразумевается что будем с вами действовать такой h0 То бишь ничего не взлетело пока наблюдение нас не заставят признать обратно как бы не самая простая мысль Может быть но как есть соответственно мы будем считать что у нас P с вами что у нас с вами P равно 05 То есть а что если Как бы как бы ну идея Не взлетела если она взлетит то мы это как бы увидим просто попадём в маловероятны да А если собственно говоря не взлетело значит вот так распределено так вот Давайте

в маловероятны да А если собственно говоря не взлетело значит вот так распределено так вот Давайте построим распределение этой статистики вы сами сказали что оно биномиальное биномиальное распределение имеет ну как бы это в принципе такой представитель нормального распределения только для дискретного мира для дискретного мира вот у нас сценарий на самом деле у нас тут как бы можно и до нуля продолжить что Ноль Человек купит кофе и до 300 просто вероятности этого настолько малы что ВИМ бы идея

что Ноль Человек купит кофе и до 300 просто вероятности этого настолько малы что ВИМ бы идея Не взлетела Если h0 действительно верна Если h0 действительно верна то самое ожидаемое количество будет у нас с вами 150 купленных кофе Ну ровно 150 на самом деле как вы видите вероятность купить что ровно 150 купят всего 4% то есть это самое вероятное значение Да но вот именно попасть в 150 очень маловероятно мы можем в 152 в 151 157 142 143 и так далее теперь отметим А куда же наше выборке то есть в

мы можем в 152 в 151 157 142 143 и так далее теперь отметим А куда же наше выборке то есть в каком-то смысле мы из этого распределения взяли один элемент А это наша выборка это наши 300 человек и мы упали с вами вот сюда Упали в значение 167 у нас уже с вами есть ресурсы оценить насколько вероятна вот эта вещь то есть Насколько вероятно получить такое значение дам быва тон открою ещ то не по мелочи будем писать Так что мне нужно будет мне нужна будет библиотека са и пусть будет нам па вот

мелочи будем писать Так что мне нужно будет мне нужна будет библиотека са и пусть будет нам па вот смотрите моё собственно говоря распределение будет биномиальное Мы с вами сказали что что у нас N = 300 = 05 05 и Мо распределение в данном случае будет биномиальное Я так и назову что это статистика ди назову имеет биномиальное распределение с параметрами и тогда мы можем с вами посчитать вероятность что купит 167 человек кофе с помощью какого метода мне это можно сделать Да правильно pmf

что купит 167 человек кофе с помощью какого метода мне это можно сделать Да правильно pmf probability ма function Ну даже если вы забыли P введёте вам тут как бы подскажет да то есть Нам нужно именно pmf 167 собственно говоря видите вероятно что у нас ну ровно 167 как бы она будет маленькая Это всегда так Это всегда так даже если я как бы ввожу 150 то вероятность всё равно не очень большая потому что всё размазывается Поэтому мы с вами будем делать немножечко Иначе мы с ми нам надо напоминаю

что всё размазывается Поэтому мы с вами будем делать немножечко Иначе мы с ми нам надо напоминаю принимать решение а чтобы принимать решение чтобы принимать решение нам нужна с вами некая граница некая границ разделения там где мы будем говорить что мы принимаем гипотезу H1 потому что типа нуж слишком маловероятно Да видеть такое Либо мы будем принимать H Вся левая сторона теперь собственно говоря мы с вами знакомимся Дава пока ро ошибка первого рода вот если мы с вами Вот здесь примем гипотезу

мы с вами знакомимся Дава пока ро ошибка первого рода вот если мы с вами Вот здесь примем гипотезу H1 вот H1 Но на самом деле это действительно выпало из этого распределения мы с вами совершим ошибку какого рода первого бета первого Да именно это Альфа тогда давайте как бы вот мы с вами зададим границу зададим границу ошибка вот этого первого рода не превосходила значение которое мы с вами хотим как правило это значение ставят 5% по Почему первого пото что это раз не почему это POS я скажу что

как правило это значение ставят 5% по Почему первого пото что это раз не почему это POS я скажу что H1 А было h0 это чтобы сказать что это в обратную сторону так вот вот в принципе сейчас самые тоненькие моменты то на самом деле возникают Так что давайте напрям и слушаем Вот мы с вами зададим предположим Альфа это люди всегда задают сами потому что это влияет на границу принятия решения уровень готовности совершить POS То бишь совершить ошибку первого рода в индустрии принято что она равна Ну

готовности совершить POS То бишь совершить ошибку первого рода в индустрии принято что она равна Ну как бы Аля Да ставит на уровне значимости 5% Это значит что компании готове ошибку fse POS с вероятностью 5% А это значило бы что если мы начинаем выкатывать проект по внедрению интерфейса на все наши автоматы Том спокойно в том что наша ошибка не превосходит 5% если это нас удовлетворяет там где цена высока где цена ещё выше соответственно эта ошибка может становиться мы можем управлять ставить

высока где цена ещё выше соответственно эта ошибка может становиться мы можем управлять ставить её ниже Да когда какие-то лекарства в медицине там соотвественно ошибку понижают сильнее а или в обрат ну или где-нибудь в физике где важно открытие Ну прямо с очень большой вероятностью Вот но как бы это имеет свои проблемы сейчас об этом мы тоже с вами обсудим Итак Альфа равно 5% это значит смотрите я должен я должен выставить число такое чтобы у меня вот смотрите предположим вот так правильно даже

должен я должен выставить число такое чтобы у меня вот смотрите предположим вот так правильно даже скажу вот смотрите я поставил вот такую границу Вот она у меня выделена Да вот эта вся область вот эта вся область здесь мы с вами Какую гипотезу будем принимать H1 H1 и дай Бог мы правы но может быть такое что мы как раз-таки из этого распределения берём соответственно вся суммарно вот эта область - это и есть как бы наша ошибка понимаете это и есть наша Альфа Потому что везде Мы здесь с вами

- это и есть как бы наша ошибка понимаете это и есть наша Альфа Потому что везде Мы здесь с вами примем Позитив То бишь H1 То бишь H1 и Дай Бог чтобы это было нефос но тем не менее Такое возможно при h0 возможно согласны вот возможно соответственно как бы нам надо оценить риск ошибки Это Давайте оценим что в случае если не взлетело если не взлетело но поставим Альфа пусть превосходит не более чем 5% если не взлете Как мне найти вот УВ чтобы короче 5% Здесь было а 95% здесь как мне найти

чем 5% если не взлете Как мне найти вот УВ чтобы короче 5% Здесь было а 95% здесь как мне найти количество купленного кофе вы поняли да что я имею в виду PDF PDF единица минус cdf ради cdf Да единица минус cdf думаете не cdf А обратно от него изб назы cdf cdf cdf вам даёт по Если бы я ему вот подал 167 и он бы мне дал вероятность это accumulative distribution function да квантиль Дели Да это называется это называется Мне нужен пятипроцентный квантиль или квантиль уровня 0,95 Вот Но если я

называется это называется Мне нужен пятипроцентный квантиль или квантиль уровня 0,95 Вот Но если я напишу вот так вот точка ppf Альфа буду ли я прав на ваш взгляд нет потому что нет слева пото что я наоборот сделаю вот так правильно 595 А как мне сделать стати о минус альфа что ли Абсолютно верно 1 мину Альфа и мы получили 164 кофе можно кстати в обратную сторону посчитать и убедиться что 164 подставляем один минус вот как бы ну я посчитал вероятность быть правее чем 164 и собственно говоря Вот

один минус вот как бы ну я посчитал вероятность быть правее чем 164 и собственно говоря Вот она 4% 4,6 ровно 5% я не могу достичь потому что распределение дискретное понимаете да то есть там как бы 164 одно 165 другое Ровно 5% не будет Поэтому мы говорим не более всё-таки интуиция нас подвела типа значимая 167 - это значимая из Не факт Не факт я вам тогда не уточнял каком уровне значимости Я другой Альфу ставил для себя 1% то есть тут я не сдавал Альф Поэтому собственно говоря да получается

Альфу ставил для себя 1% то есть тут я не сдавал Альф Поэтому собственно говоря да получается значение 164 Ну вот эта вот граница где-то здесь Да вот Но если вы готовы Давайте теперь обсудим что получилось теперь вот эта линия - это граница принятия решения если у вас больше чем 164 кофе У вас есть достаточно основание утверждать что ваша гипотеза взлетела при этом вас ваш риск совершить ошибку будет 5% на самом деле чуть меньше Но как бы он не будет превосходить 5% по крайней мере если вы

будет 5% на самом деле чуть меньше Но как бы он не будет превосходить 5% по крайней мере если вы понимаете поши по вашим Фин моделям что м нез 5% слишком ного стоит пря существенных денег и времени тогда мы можем поставить Альфу равную 0 тогда теперь только в случае Если купят больше 170 кофе да 170 Кофе это бы было бы эквивалент для нас здесь тогда бы у нас граница разделения была с вами Вот такая на H1 и h0 кажется Ну блин Круто я буду ошибаться не в случае Нафига мне вобще это надо ВС Как вы

на H1 и h0 кажется Ну блин Круто я буду ошибаться не в случае Нафига мне вобще это надо ВС Как вы думаете какие есть плохие последствия полученная прибыли ошибка второго Абсолютно верно если мы консерваторы по жизни то мы где-то упускаем возможность правильно Априори Вот то есть есть авантюра есть консерватизм авантюра будет заключаться в том что боль альн чтобы Малей на самом деле стали не 150 покупать а 170 представили То есть у меня распределение на самом деле сечас подите дайте-ка [музыка]

а 170 представили То есть у меня распределение на самом деле сечас подите дайте-ка [музыка] У меня на самом деле распределение стало каким-то вот таким вот таким вот Ну такое могло быть это же как бы вот вот это вот H1 взлетело слишком толсто H1 H так H1 взлетело А вот это как бы h0 и получается что вот Давайте роль консерватора у нас предположим сыграет Серёжа и тогда как бы вот где-нибудь здесь Да разделение смотрите что происходит ошибка Альфа действительно становится маленькая Да но при

Да разделение смотрите что происходит ошибка Альфа действительно становится маленькая Да но при этом во всей вот этой части вот этого распределения Сержа примет Какую гипотезу нулевую нулевую А могло быть такое H1 то есть на самом деле вся вот эта область вся вот эта область Это и будет ошибка бета понимаете вся вот эта область будет ошибка бета и возьмём А например консерватор Да пусть Люба будет консе Ой да наоборот авантюр так подойдёт да да пусть у меня ошибка первого рода будет не знаю 25%

консе Ой да наоборот авантюр так подойдёт да да пусть у меня ошибка первого рода будет не знаю 25% То есть Ну вообще буквально как бы каждый один 1 к четырём да 1 к Тём там ошибиться соответственно ставим Альфа равный 0,25 тогда уже 156 кофе для нас будет основание принимать уже будет основание принимать гипотезу H1 мы выставляем с вами эти 156 вот так вот и получается что Ошибка первого рода становится просто колоссально большой попав в наше вот в том числе 167 кофе мы рискуем ошибиться Да но

просто колоссально большой попав в наше вот в том числе 167 кофе мы рискуем ошибиться Да но при этом ошибка второго рода у нас становится го меше поэтому и в обратную рону что где вот эту вот плашку поставить вот эта плашка зависит только от альфы от ошибки первого рода и ваше дело как исследователя её выставлять чаще всего она встаёт на уровне % вопрос Можно да пер хоте дава 167 человек купили Кофе это вот Наша задача Да и мы говорим начальству что давайте примем гипотезу H1 заработаем

Кофе это вот Наша задача Да и мы говорим начальству что давайте примем гипотезу H1 заработаем побольше денег на новом интерфейсе но мы можем ошибиться с вероятность Сколько процентов вот сколько мы сами выставим столько и выставим нет а вот и давай Твой руководитель я тебе говорю что Слушай ошибаться нельзя нам делото серьёзное будешь делать есть Вот именно в промах выкатывать это просто поставки ждать долго этого там что-нибудь ещё короче миллион проблем внедрение непростое ошибаться нельзя

ждать долго этого там что-нибудь ещё короче миллион проблем внедрение непростое ошибаться нельзя твои действия ты аналитик я тебе доверяю на все 100% если ошибаться нельзя тогда сидим в своём болоте вот ну это действительно так В каком-то смысле статистика отражает действительно какие-то даже жизненные истории Да потому что как не ошибиться ничего не делать Мы не ошибся Вот но собственно говоря риск как бы действи всегда будет сопутствовать 2 где-нибудь чтоб ты тогда сделал мы по-моему не

риск как бы действи всегда будет сопутствовать 2 где-нибудь чтоб ты тогда сделал мы по-моему не укладываемся со 167 Ну этоже посчитать Но ты как бы понимаешь да то есть соответственно действительно мы бы поставили если 2% 002 168 кофе и ты бы [музыка] сказа а у меня вопрос именно в питоне Как определить вот нам Мы получили 167 Угу И вот если это граница 167 Это сколько процентов Альфа тогда нет Ну смотри Альфа зависит на критическую историю Да 167 тут ни при чём ты просто окажешься по какую-то

смотри Альфа зависит на критическую историю Да 167 тут ни при чём ты просто окажешься по какую-то из сторон то есть Заметь я когда считал критическую область я никак 167 не учитывал мы 167 как критическую это какая будет Альфа вот как посчитать в питоне А вот это вот к тебе уже Вопрос получается Как тут можно посчитать давай подумаем Как посчитать по значению вероятность А это по значению вероятность это нам правую часть Надо посчитать Да тебе же нужно не ровно 167 тебе нужно вот эту всю часть

это нам правую часть Надо посчитать Да тебе же нужно не ровно 167 тебе нужно вот эту всю часть посчитать вот эту Вот Угу сейчас по значению вероятность это тебе надо считать именно вот эту всю область будет всю вот эту область нуже будет о мину вот так Ну будет посчитать мину и забегая вперёд это имеет название сейчас мы это ещ обсудим как называется ещ раз имеет смысл А всё точно да да про про вот если на график свой вернуться то Альфа и Бета вот сейчас они на твоём графике выглядят как одно с

если на график свой вернуться то Альфа и Бета вот сейчас они на твоём графике выглядят как одно с точностью определяет другое да то есть мы определили Альфа и как бы Понятно бета но явно тут как бы не так всё просто Да Ну в смысле оно зависит и от H1 центрального значения от variance H1 и так далее и короче и в sle Сай Господи ну да В некоторых калькуляторах например в калькуляторе важном для анализа размера выборки ты отдельно ставишь Альфу и бету Ну в смысле они там не то что как-то там

анализа размера выборки ты отдельно ставишь Альфу и бету Ну в смысле они там не то что как-то там условно линей по формуле зависимо А ты их Независимо друг от друга ставишь и короче наверное мой вопрос Ну поскольку короче хочется то что называется ну Ну обернуть свою голову вокруг это осознать короче хочется Как как они почему мы их ставим как бы отдельно и как они зависят друг от друга не зависит это будет потом мы сможем это может быть потом мы это будем обсуждать в следующие дни они тся

это будет потом мы сможем это может быть потом мы это будем обсуждать в следующие дни они тся отдельным потому что они выбираются для другого они выбираются для почёта количества элементо выборки а не для разделяющей критического обла вот поэтому сказать история мы это всё обсудим просто чуть-чуть Попозже чуть-чуть попозже и тогда сейчас до формулируют это чуть попозже там когда-то когда какой-то Лектор там Рассказывал Ну грамотный что когда А тестами мы занимаемся то мы сейчас секунду

какой-то Лектор там Рассказывал Ну грамотный что когда А тестами мы занимаемся то мы сейчас секунду сформулирую Короче там есть какая-то последовательность ти Сначала мы определяем Альфу а потом мы думаем об сейчас соре не восстановлю можно просто записи мои потом посмотреть ближе к вечеру Ну давайте по порядку всё пойдём чтобы я к тому что просто запрос есть осознать это это будет пото я это про говорю когда мы дойдём до этого хорошо когда мы дойдём до этого Да Саша так вопрос почему мы

про говорю когда мы дойдём до этого хорошо когда мы дойдём до этого Да Саша так вопрос почему мы выставляем вот этот вот интервал Альфа только справа 5% а не с двух краёв по 2 с поно Угу Вот и второй вопрос почему почему у нас взялось Вот это зелёное распределение спи 170 вот это я не уловил до конца отвечаю на первый вопрос так А первый вопрос в ЧМ был то что двусторонне или одностороння мы ещё просто не дошли до этого я проверял гипотезы Вот это называется правосторонняя проверка гипотез вот

просто не дошли до этого я проверял гипотезы Вот это называется правосторонняя проверка гипотез вот право сю спра [музыка] Отвечая Да ну мы это это момент Ещё обсудим ниже тоже Отвечая на второй вопрос Ну я просто предположил что 170 на практике это называют mde или Minimal detect Effect я точно то есть это распределение уже новое с новой вероятностью для того что у нас H новое новое может быть и таким быть если идея Не взлетела Я просто как бы предположил Да что если радение для H1

быть и таким быть если идея Не взлетела Я просто как бы предположил Да что если радение для H1 предполагаемого да дадада сожалению Точно Вот знаете почему как бы h0 консервативно потому что именно для h0 Мы всегда знаем распределение типа старое H1 на сколько взлетело я не знаю Ну вот вы знаете Бул Ты знаешь но сколько кофе стали больше покупать у нас вот и я не знаю точно То есть как бы нету на это ответа и мы его к сожалению не узнаем но есть инструменты как и к этому поступаться об этом мы с

ответа и мы его к сожалению не узнаем но есть инструменты как и к этому поступаться об этом мы с вами поговорим в пятницу вот называется ну забега ВД то есть минимальный который мы хотим уловить нашим статистическим тестам Потому что одно дело увидеть глазами что было 150 стало 155 а другое дело было 150 стало 300 Я думаю что если бы стало 300 Мы бы с вами без 100 тестов в принципе справились самостоятельно и поняли что мы кажется решили проблему Да которая у нас была что у нас каждый второй

и поняли что мы кажется решили проблему Да которая у нас была что у нас каждый второй уходит без кофе дабл что бы в голове А так у меня вобще шанс моей ошибки - Это Альфа пото что я не прав шанс что я не прав Это Альфа тем самым это последст того что я прав и потенциальные упущенные возможности нет это шанс что ты тоже не прав просто в другую сторону а ты имеешь в виду в рамках гипотезы да Ну да как бы не смотри H1 Ты утверждаешь что твоя гипотеза влетела но ты ошибся и деньги ушли впустую а

как бы не смотри H1 Ты утверждаешь что твоя гипотеза влетела но ты ошибся и деньги ушли впустую а бета наоборот с взн он на самом деле работал да но мы к сожалению остались при своих и не стали рисковать и внедрять вот то есть это является ошибкой по факту Альфа и они они не могут существовать одни вдвоём на одном графике Альфа и Бета А вот они существуют Вот смотри Представь что действительно как бы если в реальности бы было бы 170 предположим да Ну пусть вот эта критическая зона вот 164 у

как бы если в реальности бы было бы 170 предположим да Ну пусть вот эта критическая зона вот 164 у меня да Вот соответственно вот это вот это всё вот это Альфа Почему Потому что когда вот зде предположим тея 167 кофе 167 кофе Ты какую гипотезу вопервых примешь то что я прав H1 Да соответственно либо это Очень вероятно что действительно ты прав либо Возможно ты попал в это распределение И к сожалению ошибка вот твоя ошибка Альфа Я пра 95% и на 5% у ты будешь ты примешь один ты будешь знать что

ошибка вот твоя ошибка Альфа Я пра 95% и на 5% у ты будешь ты примешь один ты будешь знать что ты на 95% прав и не более чем на 5% Ты ошибаешься Да а ошибка бета на графике вырисовывается вот здесь Если бы у тебя купили 160 напоминаю Вот это блин у меня тут цвет одинаковый Ну ладно у тебя купили 160 кофе какую ты гипотезу выберешь Ну я провалился как человек и в личность Так ну короче выберешь гипотезу Вот и соответственно ты мог ты мог быть правым ты мог быть правым Да отсюда вот вот это из

гипотезу Вот и соответственно ты мог ты мог быть правым ты мог быть правым Да отсюда вот вот это из левого распределения соответственно также ты мог как бы и совершить ошибку да то есть вся вот эта область вся вот эта область у второго распределения у зелёного она подразумевает тот факт что я могу ошибиться Да могу ошибиться и через си это можно посчитать и оценить сколько бы была бы вероятность ошибки я понял что по в абсолюте нельзя Ты только про соотношения слушаешь Я вот столько там шансов

ошибки я понял что по в абсолюте нельзя Ты только про соотношения слушаешь Я вот столько там шансов прав вероятность такая вероятность что я не прав но абсолютно я не могу сказать то что я прав Конечно нет нет то только ситхи думают абсолюте Всё спасибо да уба А я немного запутался получается вопрос ээ вот мы Альфу выбрали как ээ типа какой-то процент Угу право от него мы будем то есть правы правильно то есть мы принимаем H1 Да от него h0 и слева от него h0 да получается я момент с бетой не

то есть мы принимаем H1 Да от него h0 и слева от него h0 да получается я момент с бетой не понял как если например мы выбрали Альфа справа от него получается h0 Мы приняли ой H1 Мы приняли H1 и тогда в таком случае в ЧМ вообще смысл учитывать ошибку зависит от того насколько сильный был эффект её смысл есть учитывать потому что мы не хотим делать ошибку второго рода Вот Но вы гоните паровоз Давайте Чуть подальше пока что что нужно уловить Мы с вами уже в принципе чуть ли не все 3 дня разобрали

Чуть подальше пока что что нужно уловить Мы с вами уже в принципе чуть ли не все 3 дня разобрали Потихоньку всё что нужно Здесь пока что уловить обла и у нас будет грани разделения H1 э граница полностью зависит от Альф или от который вы готовы совершить про ошибку второго рода мы чуть попозже ещ обязательно поговорим просто ошибку второго рода можно высчитывать только в том случае если знаем какой эффект Мы ждём Потому что одно дело 170 кофе в среднем другое 190 то есть купол здесь или купол

эффект Мы ждём Потому что одно дело 170 кофе в среднем другое 190 то есть купол здесь или купол здесь как бы эния до эксперимента дефакто делаем мы наверняка знать не можем поэтому это называется дизайн эксперимента мы можем лишь прикинуть но пока не грузите этим пока не грузите вы меня очень охотно отводите в сторону но мы пока с вами должны двигаться по нашему маршрутом Итак а проверка гипотез алгоритм у нас какой сформулировать основную альтернативную гипотезу То бишь h0 Да так в То бишь

алгоритм у нас какой сформулировать основную альтернативную гипотезу То бишь h0 Да так в То бишь собственно говоря h0 и H1 Да задать уровень значимости Альфа найти критическое значение статистики для соответствующего уровня значимости то есть для конкретного Альфа то есть толубай поставил 1% Настя поставила 5% на для одной и той же задачи критическая зона у них будет разная Да у толубай соответственно это может быть 170 купленных стаканчиков кофе у нас и 164 купленных стака вот далее мы

это может быть 170 купленных стаканчиков кофе у нас и 164 купленных стака вот далее мы вычислили значение статистики оно у нас уже посчитано сколько у нас это значение статистики с вами для нашей выборки 167 Да 167 попало ли оно в критическую область критическая область это там где принимается гипотеза H1 То бишь в нашем случае когда мы 164 поставили как разделял критическая область - это вот это М4 знание 164 Да на уровне значимости 05 164 Вот и сделать вывод Если значение попало в критическую

М4 знание 164 Да на уровне значимости 05 164 Вот и сделать вывод Если значение попало в критическую область отвергнуть нулевую гипотезу в противном случае её принять вот как-то так далее далее [музыка] Далее нуб Гоя вот рисунок как бы немножко в цвете да что именно у нас произошло 05 лексическую область Вот h0 вот H1 у нас купили 167 кофе мы принимаем H1 на наш риск ошибки Он такой достаточно маленький и вроде как вроде как взлетела идея вроде как залетела идея Вот но опять же наверняка мы

маленький и вроде как вроде как взлетела идея вроде как залетела идея Вот но опять же наверняка мы знать не можем Время покажет как правило время Всё показывает так далее ну собственно говоря критическая область вопросу того что мы с вами что Саша спрашивал мы с вами находились вот в этом сценарии когда альтернативная гипотеза в моём случае сформулировал что больше чем 05 то есть больше да то есть критическая область или область принятия H1 она была справа вообще говоря она может быть не только

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

может Вполне себе спокойно возникнут Да конечно более редко но тем не менее она возможна и бывает двусторонняя проверка гипотез двусторонняя Тогда смотрите здесь Какая история у нас критическая зона с вами она как бы и слева и справа теперь Но мы с вами сказали что мы хотим ошибаться меньше чем Альфа тогда мы по-братски делим на две стороны по Альфа пополам и влево и вправо тогда у нас получается две кри два критических ползунка их называют к Low Да собственно говоря которые задают границы

две кри два критических ползунка их называют к Low Да собственно говоря которые задают границы принятия решений всё что внутри было бы h0 всё что по краям было бы как H1 такое тоже вполне себе возникает когда нам просто нужно ответить на вопрос изменилось или не изменилось то есть не в лучше или не в худшую сторону Да и вообще на самом деле как бы критические зоны можно выставлять постфактум их никто не мешает вам сначала посчитать статистику а потом уже собственно говоря посмотреть но где-то

никто не мешает вам сначала посчитать статистику а потом уже собственно говоря посмотреть но где-то где эксперименты очень строгие цена шеб ры потому что я помню как я первый раз столкнулся с историей короче а нет Давайте сначала вот это расскажу про Потом расскажу историю Итак собственно говоря последнее что нам по факту именно с сегодняшнего дня осталось разобрать это pv А ну Люба уже затронула тему pv pv смотрите есть сложное определение pv такое сложное научное определение это вероятность

тему pv pv смотрите есть сложное определение pv такое сложное научное определение это вероятность получить такое же или более экстремальное значение То бишь 167 в условиях истинности гипотез h0 но у меня есть альтернатива которая как бы статистик может быть Вам бил бы по рукам за это Но практически оно самое идеальное и оно очень понятно вас все поймут и оно очень хорошо отражает происходящее Говорить прямо сверх научным языком но если говорить вот по обычному языку то если вы вы так скажете то

прямо сверх научным языком но если говорить вот по обычному языку то если вы вы так скажете то и вас там вдруг на собеседование об этом спросят бойтесь людей кто вас за это определение будет ругать вот большинство должно сказать Что окей Тогда очень хороший смысл вот смотрите pv - это вот эта вот область вот э область и то есть бы 167 ещё более экстремально мы pv можем посчитать Вот давайте Как посчитать pv мне подскажите а ну я его уже посчитал здесь вместе собственно говоря А с Любой да Это и

pv мне подскажите а ну я его уже посчитал здесь вместе собственно говоря А с Любой да Это и было P value в нашем случае P value получилось 2% и согласитесь очень удобно трактовать То есть вы можете сказать что если мы примем гипотезу H1 если мы примем гипотезу H1 то вероятность ошибиться гипоте взлете всего 2 а далее вы эти 2 уже можете сравнить своей альфой Ой что произошло вот вы можете сравнить своей альфой то есть есть такая история можно сравнивать ваше значение статистики Я назову это

своей альфой то есть есть такая история можно сравнивать ваше значение статистики Я назову это стат он у нас с вами равен 167 Вы можете его сравнивать с т критическим это называется сравнение в абсолюте то есть сравнение самого значе то мы с вами принимаем какую гипотезу H1 собственно говоря иначе Иначе мы примем вот а можно сравнивать на уровне на уровне Альфа потому что статистики иногда бывают такие которые как бы они нечитаемые вот если я предположим ваш руководитель ко сза латентные В

такие которые как бы они нечитаемые вот если я предположим ваш руководитель ко сза латентные В каком-то смысле Да они не интерпретируются явном виде то есть они как бы скрыты смысл имеют и мы его не сможем объяснить явно мы не сможем его объяснить явно и тогда можно это объяснить руководителю или любому человеку который как бы далёк от статистики на языке вероятностей вы всегда можете посчитать в нашем случае 2% и выставить Аль вот ми Альфа выстав 5% получается что если меньше чем Альфа то мы с

нашем случае 2% и выставить Аль вот ми Альфа выстав 5% получается что если меньше чем Альфа то мы с вами принимаем какую гипотезу Да Абсолютно верно H1 иначе принимаем H То есть это полный эквивалент два способа принятия решений через саму статистику или через полный эквивалент потому что вот это однозначно задаёт вот это вот этот вот это вы скажете как бы кому-то что ребят мы сейчас начинаем внедрять наши автоматы потому что кажется что как бы идея взлетела и мы правы почти на 98% у нас риск

наши автоматы потому что кажется что как бы идея взлетела и мы правы почти на 98% у нас риск ошибиться 2% в принципе мы можем спать спокойно Казалось бы да но очень уверенное решение мы Тем более на уровне 05 сравнивали То есть у нас как бы идеология такого что мы вообще готовы были на 5% А у нас 2% то есть у нас ещё лучше чем 5% да вот как-то так как-то так вот вопрос такой маленький а если не равны если равны тоже мой выбор Да если ровно получится да Ну я сомневаюсь что у тебя ровно получится

если равны тоже мой выбор Да если ровно получится да Ну я сомневаюсь что у тебя ровно получится у меня ни разу не получилось потому что там бородатые знаки после запятой То есть это Не ну а нету Ладно ладно в дискретной величине может получиться вот здесь критическая Может может получиться Но блин Да дело за тобой дело за тобой Спасибо у меня в данном случае получилось что вот именно между 163 и 164 разделка 163 ещё ваш 0 164 уже ваш о то есть вот у меня именно так получилось Поэтому здесь даже

разделка 163 ещё ваш 0 164 уже ваш о то есть вот у меня именно так получилось Поэтому здесь даже по-хорошему вот такой значок нужен Ну это такие нюансы как бы пря а какм е тьб ну здесь нету я не сформулировал вы знаете насколько у нас я смогу посчитать бета Только если в одном случае я даже про это ещё не говорил совершенно я б это смогу посчитать Если вы мне чётко скажете что у меня конверсия конверсия Да тривога в Москве прям орёт P -05 Ну то есть конверсия которая у вас стала грубо говоря да

Да тривога в Москве прям орёт P -05 Ну то есть конверсия которая у вас стала грубо говоря да как её обозначим Давайте Вот вот так вот минус конверсия которая была она предположим Ты утверждаешь что она возросла хотя бы на 10% То бишь доля увеличилась на 0 вот тогда я могу сказать что это ты подразумеваешь 160 и более тогда у тебя будет купол и тогда Исходя из этого я могу посчитать твою бету здесь она Почти 100% я понял понял то есть как бы а пока я не знаю собственно говоря чётко формулировки

она Почти 100% я понял понял то есть как бы а пока я не знаю собственно говоря чётко формулировки H1 я к сожалению не могу этого сделать это очень даже логично Почему Потому смотрите Что такое когда была истина H1 но для этого мне надо понимать хотя бы H1 насколько Потому что одно дело у меня покупали 150 кофе а стали покупать 152 это не так просто увидеть не то чтобы человеку это статистики тяжело увидеть а другое дело у меня было 150 о стало 250 покупать тут как бы и человек увидит без

тяжело увидеть а другое дело у меня было 150 о стало 250 покупать тут как бы и человек увидит без статистики правильно Ну короче вот по ошибки это вот проблемы завтрашних нас проблемы Да после завтрашних даже я бы сказал ну ладно буду грузить вас уже завтрашнего дня значит я виню в этом Настю Ну то что мы тебе вопрос задавали дальше темы и вот получили по башке так да не всё нормально самом деле мы всё равно от контекста не уходим держим ничего лишнего не произносим так в принципе всё А ну вот

мы всё равно от контекста не уходим держим ничего лишнего не произносим так в принципе всё А ну вот собственно говоря видите получается Какая история с с история следующая Я когда-то первый раз работал когда там была Короче какая история первый раз столкнул статистикой нам нужно было короче через отобрать важные признаки там короче инсайды найти комка ВТО и короче мы договорились с моим руководителем что Альфа будет стоять 0 10% и мы получили получили 02 то есть мы должны какую гипотезу принять

что Альфа будет стоять 0 10% и мы получили получили 02 то есть мы должны какую гипотезу принять вот а а нам надо как бы сказать что идея взлетело подходит 15 горит поставим Ну и что получается H1 значит говорит получается H1 И всё И мы презентовали что вау Это капец что мы нашли просто типа инсайды дичайшие самое главное возможно он прав да то есть возможно ведь он прав возможно просто риск совершить ошибку первого рода он увеличился То есть он 13% но 87 Его не будет условно и Ирино когда прот

ошибку первого рода он увеличился То есть он 13% но 87 Его не будет условно и Ирино когда прот вот эти вот Альфа она просто двигается она самая подвижная вообще буква в мире просто в этот момент становится Да как бы готова как бы всегда подстроиться под ситуацию потому что даже любой статистический тест мы с вами видим он вам возвращает только и значение статистики решени он за вас принимать никогда не будет скажет ребят речь идёт о серьёзных задачах где цена большая да где вот как бы мне Ну

не будет скажет ребят речь идёт о серьёзных задачах где цена большая да где вот как бы мне Ну мне это не очень приятно было то что там происходило в целом ну как бы это правда Это просто это так есть такое возникает Вот Но где-то где всё очень серьёзно и на потоке стоит то конечно есть чётко фиксированный Альфа и по нему принимаются решение там такого как бы нет да такого нет да Люба Мне кажется неточность у тебя есть записях потому что смотри получается что Альфа - это площадь которая будет Ну

у тебя есть записях потому что смотри получается что Альфа - это площадь которая будет Ну если мы берём право стороннюю границу Да мы хотим увеличить количество продаж кофе Альфа - это площадь справа от бегунка вот этого да Угу P - это тоже площадь справа от бегунка причём если pv будет больше альфы вот эта твоя запись Угу то получается что мы должны остаться h0 у тебя а у тебя написа где если больше чем Альфа описал Да да да давай вот так хоп хорошо Ну спасибо да ты права Я описался дам меньше

чем Альфа описал Да да да давай вот так хоп хорошо Ну спасибо да ты права Я описался дам меньше что у меня со слов со слов написано что меньше а сказал что меньше да дадада так Ну значит просто описался хорошо Что поправили да то есть говорю одно пишу другое Так а ну в принципе всё в принципе всё м да пока что наверное всё итоге статистические тесты позволят позволяют ответить Есть ли статистически значимый Результат есть ли статистически значимый результат а ошибки первого и второго рода не

значимый Результат есть ли статистически значимый результат а ошибки первого и второго рода не хороши для нас Но Однако в большинстве случаев их не избежать катастрофи каждой из них зависит от конкретной задачи лю позволяет оценить вероятность ошибки и принять решение сейчас мы ещё с вами в коде всё это [музыка] сделаем сделаем ещё в коде Так ну что какие у вас есть вопросы Давайте ещё раз полный пол па голове проговори Что у нас сегодня с вами было у нас была выборка где она у нас там Да у нас

пол па голове проговори Что у нас сегодня с вами было у нас была выборка где она у нас там Да у нас была выборка у нас была задача была выборка была проблема всё начинается с проблемы была проблема мы выдвинули гипотезу как её решать Да собрали выборку далее соответственно сформулировали гипоте вот э всё это формализовать дело сформулировали h0 H1 для нашей гипотезы далее посчитали а статистику Да посчитали статистику она у нас 167 но она у меня уже выше посчитано с помощью Альфа задали

Да посчитали статистику она у нас 167 но она у меня уже выше посчитано с помощью Альфа задали критическую зону с помощью Альфа задали критическую зону м да тут в общем прогрели про статистику с помощью Альфа задали критическую зону получилась какая-то критическая зона Давайте вот сюда приду Вот то есть вот эта площадь у нас с вами это Альфа вот задали критическую зону и собственно говоря приняли решение приняли решение в сторону H1 вот как-то так Ну всё остальное такой некий контекст как-то так

приняли решение в сторону H1 вот как-то так Ну всё остальное такой некий контекст как-то так да Саша рук просто не опускал да Или что Не он понял только что бы звук к меня слышно меня слышно сейчас слышно да Ну вот когда у нас альтернативная гипотеза со знаком не равно вот мы получили какое-то статистическое значение так оно относится в сторону H1 Вот и какм посчитать вероятность ошибки имеешь да да вот с двух сторон это мы суммируем симметричные вот эти стороны или только с одной Ну вот

да да вот с двух сторон это мы суммируем симметричные вот эти стороны или только с одной Ну вот возьмём Например я не знаю вот предположим мы с вами Так мы с вами возьмём то есть вот пусть Вот это у меня всё будет тоже вот этой областью хорошо Да да это вот по 2 с по мы взяли получается да это это по 2 по процента положили Да условно тогда pv будет это вот эта область вот эта область плюс симметрично симметрично вот эта вот область Ну вот да я про это и спрашивал в целом вообще правильно Если

симметрично вот эта вот область Ну вот да я про это и спрашивал в целом вообще правильно Если говорить по науке Да вот именно это нужно только для расчёта pv - это вероятность получить такое же как у на 167 или ещё более экстремальное а более экстремально - это значит менее вероятное То есть это все вот эти значения и все вот эти значения Всё я понял спасибо Угу то есть нужно будет с двух сторон учитывать даже я как раз быстро хотел спросить в каком случае вобще может потребоваться типа с двух

учитывать даже я как раз быстро хотел спросить в каком случае вобще может потребоваться типа с двух сторон изменение метрики пофиг В какую сторону когда просто мы проверяем есть какое-то изменение или нет то есть неважно куда то есть тронулась Метрика тронулся лёд как отреагировала просто корреляцию пофиг какую как в питоне посчитать двухстороннюю ю я хотел конечно сегодня это на вас оставить Ну ладно ладно не окей О'КЕЙ в смысле окей Не не окей Ну я не думаю что это сложно просто это такой

Ну ладно ладно не окей О'КЕЙ в смысле окей Не не окей Ну я не думаю что это сложно просто это такой мозг ищет лёгкие ответы всё нормально да да да А давайте мы сейчас с вами вместе просто какую-нибудь задачку разберём вот а у нас получается сегодня будет укороченая лекция что ли или пауза на 10 минут её не будет а дада да что-то что-то Раш вошёл видимо забыл про паузу Давайте 40 минут Сейчас самое время как раз отдохнуть 40 минут Давайте в 50 продолжаем и с вами просто походим немножечко всё

время как раз отдохнуть 40 минут Давайте в 50 продолжаем и с вами просто походим немножечко всё что мы проговорили на лекции Всё Давайте пер Так ну что давайте возвращаться потихонечку Ну что давайте по кодим чуть-чуть по кодим Так у нас есть сервис по доставке еды который заявляет что среднее время и доставки составляет 20 минут у нас есть выборок это кстати абсолютно реальная история я выгружал своё время заказов вот ну правда достаточно много факторов менялось за это время да и в том числе

своё время заказов вот ну правда достаточно много факторов менялось за это время да и в том числе политически но тем не менее девиз такого был и оставался что среднее время доставки 20 минут Ну что ж у меня нет всей генеральной совокупности У меня нет всех их заказов но как бы это не имеет какого-то бизнес Да условно выхлопа Просто такая небольшая развлекаловки я нерепрезентативная выборка и живу в районе в котором лучше или хуже Да нюансов может быть много вот но тем не менее Почему бы не

живу в районе в котором лучше или хуже Да нюансов может быть много вот но тем не менее Почему бы не попробовать так Ну что что мы с вами имеем во-первых у нас выборка на чтобы она была не очень маленькая 123 А 123 заказа и поехали Давайте по порядку что мы с вами будем сначала делать какие у вас есть иде найти среднее по выборке наверно наверно да это абсолютно правильно это вообще очень хорошая мысль типа зачем заниматься Ну как бы сначала Давайте если у нас просто среднее время доставки

мысль типа зачем заниматься Ну как бы сначала Давайте если у нас просто среднее время доставки Давайте сначала е обще Посмотрим может оно миллион минут и тогда Нафига мне проверять гипотезу понимаете о чём я говорю то есть статистика ради статистики - это так себе история вот Получается примерно Вот такая вещь получилось 23 минут 236 вот здесь собственно говоря как бы опять же интуиция уже что-то может подсказывать кому она что подсказывает или молчи то что нормально доставляет нормально как бы

может подсказывать кому она что подсказывает или молчи то что нормально доставляет нормально как бы держит слово типа да да это как на честной монетке Просто после 100 подбрасывания 52 ла получить в принципе может быть типа того да Поня поня мы сейчас стандартные характеристики вытаскиваем из этой выборки чтобы определить сущность этого распределения с кем мы имеем дело с Ким зверем не это знаешь это как бы скорее как бы я просто рассуждал если меня спрашивают среднее время доставки Я бы

знаешь это как бы скорее как бы я просто рассуждал если меня спрашивают среднее время доставки Я бы сначала посчитал среднее время доставки А дальше Ну вот вот тут-то надо понимать что 23,6 как бы это же выборка а они утверждают что в целом по генеральной совокупности и мы сейчас будем проверять А может ли при полученной выборке в 236 по всей генеральной совокупности быть 20 минут вот мы проверяем сопоставляя э факты с реальностью факты дадада дадада В каком-то смысле Да в каком-то смысле Да а

сопоставляя э факты с реальностью факты дадада дадада В каком-то смысле Да в каком-то смысле Да а средне мы считаем потому что как бы у нас в принципе это называется гипотеза о среднем одна из самых частых например в лекции у меня была гипотеза о доле я проверял долю людей кто купит кофе Яги пользо средним потому что среднее время их доставки Итак поехали во-первых нам с вами надо разобраться со статистикой Какую мы статистику с вами возьмём для того чтобы проверять среднее Ну я предлагаю взять

Какую мы статистику с вами возьмём для того чтобы проверять среднее Ну я предлагаю взять среднее как вам идея вроде хорошо как будто бы звучит нормально да стат всё равно sample me Итак мы с вами получили 23 там ише А во-первых нам надо сформулировать гипотезы даже вот не правильно я вас немножечко поторопился Нет ну 20 минут меньше или равно а не м нет ровно 20 то есть консервативно среднее время доставки ровно 20 равно 20 сказали 20 проверяем на уровне двадцати Так сейчас я да вот отлично Ну

доставки ровно 20 равно 20 сказали 20 проверяем на уровне двадцати Так сейчас я да вот отлично Ну часто средне обозначают буковка МЮ поэтому мы обозначим буковка МЮ вот против МЮ Больше чем 20 Почему больше ставим а не просто не равно что типа а можно поставить так можно поставить так можно поставить Так что среднее не равно ДТИ что среднее не равно д Вот хорошо Ну видите как в принципе видно что мы отклонились в правую сторону Да поэтому можно проверять правосторонним я уже подсознательно

что мы отклонились в правую сторону Да поэтому можно проверять правосторонним я уже подсознательно написал больше и Давайте даже больше оставлю пото что я хочу чтобы вы сами попробовали разобраться с двухсторонней гипоте чтобы я за вас всю работу сделал да он вам сегодня надо будет посчитать двусторонне я буду останавливаться на правой стороне В общем как бы я вижу что Отклонение вправо Ну насколько оно как бы типа насколько сильное о на Отклонение вправо а хорошо гипотеза сформулирована

насколько оно как бы типа насколько сильное о на Отклонение вправо а хорошо гипотеза сформулирована статистика у нас с вами посчитано мм что нам нужно дальше делать определить критическое значение так хорошо что мне нужно для этого для критического значения распределение узнать Альфа распределение раз Альфа два правильно Давайте Альфа распределение Давайте Альфа зададим 05 пока что да по распределению я с вами полностью согласен нам распределение чего нужно знать нам по факту нужно знать с вами

я с вами полностью согласен нам распределение чего нужно знать нам по факту нужно знать с вами распределение нашей статистики Да наша статистика с вами так и пропишу наша м наша статистика будет получается TX а средняя по выборке как у нас называется помните вчерашнего [музыка] дня ну средне по вы нет не это средневзвешенное обычно называют а sle Min да Или выборочно средня или средня по выборке так и называют обозначается сейчас если у меня получится я просто не помню как точно здесь Да вот

так и называют обозначается сейчас если у меня получится я просто не помню как точно здесь Да вот выборочно средне Помните у нас с вами так было и там получается так это в принципе то что я пишу вообще не обращает внимания На это это вам не нужно Угу нужен только а так я не помню только как здесь пишется Ну ладно пусть будет так ну вспомнил отлично [музыка] всё то есть вот такая вот формула это выборочное средняя правильно то есть сумма всех элементов сумма всех времени заказов разделить на их

средняя правильно то есть сумма всех элементов сумма всех времени заказов разделить на их количество наша статистика Какое имеет какое Она имеет распределение нормально Почему вы так решили потому что у нас есть Центральная предельная теорема Абсолютно верно а в этом-то и фишка что гипотеза о среднем легко проверяется И за счёт Центральной предельно теоремы гипотеза о среднем покрывает чуть ли не 70% гипотез который существует но часто ведь согласитесь жизни мы оперируем среднее то среднее то

70% гипотез который существует но часто ведь согласитесь жизни мы оперируем среднее то среднее то среднее то среднее то поэтому Центральная определена теорема на подстраховки как бы и всегда подъезжают такие моменты нам помочь вот нам нужно просто записать это распределение то есть TX у нас с вами имеет распределение так да Ну или я от Просто сразу же лучше так напишу выборочная среднее у нас с вами имеет какое распределение нормальное А с какими параметрами Ну вот 23 20 нам и Сигма мы не знаем

имеет какое распределение нормальное А с какими параметрами Ну вот 23 20 нам и Сигма мы не знаем наверное да посчитаем поделим на сиг мы сейчас посчитаем поделим на коре Да Сигма мы как бы с вами посчитаем по выборке ВС правильно говори здесь у меня должна быть сиг То есть те в знаменателе ре N Вот то есть вот такое оно распределение имеет это как бы получается у нас с вами по по центральной предельной теореме по центральной предельной теореме а так ну что ж Альфу записали Да Альфу записали

теореме по центральной предельной теореме а так ну что ж Альфу записали Да Альфу записали распределение Ну давайте создадим экземпляр класса распределения Да соответственно я напишу это распределение моей статистики Поэтому мне надо ещё подписать сюда что м равно 20 Да и собственно говоря хочется написать Сигма де у меня во-первых сиг Нет сигму пока что мы с вами приблизила Это не совсем чисто и правильно Ноя зада прави чтобы ня Поня сае г поэтому приблизил как О да выборка согласны как вам

и правильно Ноя зада прави чтобы ня Поня сае г поэтому приблизил как О да выборка согласны как вам такая идея хорошо красиво Да мне тоже нравится ещё соответственно надо взять размер выборки Да потому что он знаменателе будет по формуле поэтому это просто Её называют стандартная ошибка среднего то есть она даже имеет своё название часто вы можете увидеть что её называют SE SE - это и есть вот это сразу же Сигма дел на √ N Да √ N как бы я в принципе просто её назвал другой переменной ни какой-то

сразу же Сигма дел на √ N Да √ N как бы я в принципе просто её назвал другой переменной ни какой-то прям новой информационной нагрузки сильно не несёт просто есть такое название можете как бы его и не знать вообще пофигу Вот и соответственно я его сюда подставляю всё у меня уже есть все данные есть все данные и что тогда мы с вами делаем что мы тогда с вами делаем дальше подсказывайте находим критическое значение исполь есть ческое значение так хорошо как это сделать а это е расставлю вам мы

значение исполь есть ческое значение так хорошо как это сделать а это е расставлю вам мы можем новое распределение сделать для Ну по вот этим данным давайте я нарисую график чтобы всем было по понятнее Да вот у меня есть распределение статистики распределение статистики чтобы было наглядно Так для этого мне надо Что сделать мне надо сгенерировать диапазон исов это метод это просто стандартная штука сгенерируйте у меня для моей статистики это SE и ри Сигма вправо не путайте SE и сиг Сигма это

сгенерируйте у меня для моей статистики это SE и ри Сигма вправо не путайте SE и сиг Сигма это стандартное отклонение одного заказа времени одного заказа SE это стандартное отклонение на сколько там у меня 160 что-то зака 120 заказ Вот поэтому так у меня распределение статистики мне на стандарт отне статистики Ну и пусть точек Y Чтобы построить купол проби PDF Абсолютно верно то есть PDF просто PDF X вот так [музыка] вот всё вот такую историю получили вот такую историю ить поставлю Вот у меня

PDF X вот так [музыка] вот всё вот такую историю получили вот такую историю ить поставлю Вот у меня распределение статистики Можно конечно Красиво там написать там да распределение статистики уже визуально видно что у нас с вами получилось 2365 это вообще куда-то сюда уходит выле я напоминаю у меня окно это сиг то есть мы куда-то ушли вообще далеко То есть как бы 20 среднее уже даже отклонение на такой выборке на выборке такого размера по закону больших чисел уже сильно отклониться как бы это

такой выборке на выборке такого размера по закону больших чисел уже сильно отклониться как бы это уже не h0 будет это уже как будто бы не h0 но мы сейчас всё это дело собственно говоря и посмотрим так хороо вот я рисунок м бы сдел подс обла Давайте почитаем два ста или один правый правый правосторонние гида оми CD этого это Альф [музыка] Альфа принимает значение см [музыка] нужен нам нужно с вами найти м найти такое значение чтобы вот эта площадь была Альфа То есть у нас есть вероятность но нет

найти м найти такое значение чтобы вот эта площадь была Альфа То есть у нас есть вероятность но нет этого значения правильно А это делает именно квантиль Именно квантиль поэтому Диктуйте Что мне писать ниже Давайте назовём переменную Рид равно Ну типа 1 мину ppf двадцати тёх ppf 1 мину 1 минус ppf но Альфа точнее просто ppf ppf от Альфа и всё не ppf от альфы он сделать вот так 1 ми альми нет именно 1 мину Альфа внутри единичка вероятностью поэтому внутри Да вот только что писать-то вот я же не

1 мину Альфа внутри единичка вероятностью поэтому внутри Да вот только что писать-то вот я же не напишу точ ppf у меня будет ошибка Как кому распределение тест ади Да да Сейчас я вот Абсолютно верно тест ади точка ppf 1 мину Альфа и можно посмотреть Т критическая Вот она критическое время заказов 21 минута Ну там четы сотых грубо говоря да 4 со короче почти почти 21 с по минута вот можно теперь это всё на графике даже добавить Давайте вот так вот добавим на графике я ещё соответственно по-моему

всё на графике даже добавить Давайте вот так вот добавим на графике я ещё соответственно по-моему называется Да поставим с вами вертикальную линию Т критическая Пусть стена будет красного цвета и назовём её так и наом вот и посмотрим Куда упала наша статистика поставим здесь стат цвет пусть будет мягкий зелёный и вот что-то с таким мы с вами столкнулись вот с таким мы с вами столкнулись уже у нас есть всё с вами Чтобы принять решение да Угу поэтому я пишу что если ста больше чем КД то Print

нас есть всё с вами Чтобы принять решение да Угу поэтому я пишу что если ста больше чем КД то Print [музыка] Абсолютно верно H1 иначе иначе H вот далее Далее далее Ну давайте Теперь ещё давайте я возьму симпатичнее было даже Мы даже за четвёртую симу улетели это очень много 4 с по просто чтобы в окошко влезло Ну что-то типа такого ещё знаете надо прописывать такую штуку это надом задать что вот как бы нам в вероятностях создаётся впечатление что здесь большие вероятности на самом деле нулевой

как бы нам в вероятностях создаётся впечатление что здесь большие вероятности на самом деле нулевой уровень вот он понимаете да О чём я говорю Может проставить этот кого поставить Григ сетку просто или там не будет такой Не ну можно да с ней визуально но можно е просто Y поставить и указать что именно чтобы ноль был правда Верхнее значение Я не знаю сколько ну на глаз поставлю 05 как бы вот как-то так вот Вот сейчас видно да то есть Смотрите по факту как бы уже вероятности вообще нулевые вот

так вот Вот сейчас видно да то есть Смотрите по факту как бы уже вероятности вообще нулевые вот там мы где оперируем Ну что ж помогайте мне считать P тогда P - это единица минус наша штука точка cdf ра едини минус наша штука это какая штука Ну распределение не помню название давайте подсказывайте угу так ди далее cdf и sle Min Ну те Да наш да да один минус сделали потому что как бы просто сам cdf возвращает левую часть относительно че то есть он вернёт всю вот эту площадь а нам нужно правую нам

возвращает левую часть относительно че то есть он вернёт всю вот эту площадь а нам нужно правую нам нужно правую и поэто мину Как вы видите он очень маленький то есть если мы Прим гипотезу H1 вероятность ошибиться она у нас сколько 8 миллионных Ну стремится к нулю стремится к нулю да то есть как бы в принципе однозначно А хотя интуитивно сначала как бы ощущение то не такое явное правильно вот луба показалась например в гипотез h0 Я думаю что многим так могло показаться и в том числе мне вот а

показалась например в гипотез h0 Я думаю что многим так могло показаться и в том числе мне вот а как бы если верить статистике такая вот история такая вот история А у меня вопрос такой я когда ты говорил лекцию Я записывал то что мы считаем cdf Т Крита а не стата здесь нету драки меж ими нами или что-то не понял не cdf мы считаем Крит Если бы ты Альфу хотел посчитать то есть смотрите есть вообще две сущности это критическая зона и есть Куда упала ваша статистика То есть то что получено по

две сущности это критическая зона и есть Куда упала ваша статистика То есть то что получено по выборке и разделка связа с критом потому что мы ри вычисляем именно по Альфе а связан с стам и вы Чтобы принять гипотезы либо вот эти между собой сравниваете либо вот эти между собой сравниваете Спасибо большое вот поэтому как бы мы точно также с вами здесь можем прописать дальше если больше чем Аль Томы принима какую гите луше меньше пропишу H1 Да H1 Иначе мы принимаем гипотезу H Вот такая вот

Томы принима какую гите луше меньше пропишу H1 Да H1 Иначе мы принимаем гипотезу H Вот такая вот история приняли наше Давайте ещё раз проверим всё что-то прям сильно большое отклонение мне оно не казалось раньше большим Ну как есть как бы видите то есть заявленные 20 минут даже близко не выполняются если так Ну бы Дальше можно рать о последствиях для на такое 3 мину как бы кто расстроится Да на 3 минуты люди даже этого и не заметят условно это уже как бы следствие и я Не берусь здесь их

Да на 3 минуты люди даже этого и не заметят условно это уже как бы следствие и я Не берусь здесь их оценивать совершенно Мы с вами сфокусировать именно на Стар на статистическом инструменте но можно где-то потушить его немного Давайте вот я поубирать что-нибудь магическим образом всё ускорилось да вот сколько у меня стало кстати даже не сильно упало Хотя я так-то прилично срезал часика четы здесь но ВС рано видите так вот вопрос на больших выборках закон больших чисел видите как играет Да не

но ВС рано видите так вот вопрос на больших выборках закон больших чисел видите как играет Да не даёт просто так взять и уронить средни что 2276 напоминает всё равно где-то вообще где-то очень далеко где-то очень далеко Ну давайте вот неожиданно стало вот так 223 Да соотвественно дальше тоже самое [музыка] проделываем получился тысячных но всё равно как бы Слишком маловероятно даже при таких реалиях видеть такой исход Хотя вот говорю видите по ощущениям так и не поймёшь да 22 потому что нашему

видеть такой исход Хотя вот говорю видите по ощущениям так и не поймёшь да 22 потому что нашему мозгу кажется что 22 и 20 Ну что такое 2 минуты а в масштабах выборки 127 элементах 2 минуты это очень много 2 Уте на 127 240 минут - это 6 часов вашего времени Ну там раскручивать эту мысль как хотите дальше кстати реально сложно укладывается в голове Угу Вот именно ф именно факт да да есть такое Есть такое вот Ну в принципе у меня всё у меня всё если какие-то вопросы ко мне остались я этот файл вам

такое вот Ну в принципе у меня всё у меня всё если какие-то вопросы ко мне остались я этот файл вам скину вот если какие-то есть Если есть какие-то вопросы ко мне задавайте какие-то будут подсказки напутствия двухстороннего А давайте сейчас откроем соответственно ваш ваш файл так так Сегодня у нас среда да получа ще бы Т надо много на самом деле проговорить что у вас здесь у вас здесь всего на самом деле две задачи Как я вижу у вас некоторые с неплохим бэкграунда пришли что скорее является

самом деле две задачи Как я вижу у вас некоторые с неплохим бэкграунда пришли что скорее является таким как бы фактором того что нечасто происходит да для кого-то может показаться сегодня всё очень простым тогда нам Бут переходить к завтрашнему дню я сейчас объясню цель сегодняшнего дня цель сегодняшнего дня на самом деле главное это понять Как устроен статистический пайлан проверки Да от момента когда у нас есть проблема до момента принятия решения собственно говоря здесь я его прописал ещё

когда у нас есть проблема до момента принятия решения собственно говоря здесь я его прописал ещё раз так или иначе мы с вами Коди обсуждали на лекции Под разными углами всё это дело смотрели то есть выборка формулировка гипотез готовность совершить выбор статистики значение статистики распределение этой статистики даж стат приняти Рени у вас будет две задачки гипотеза о среднем здесь я в принципе всё описал Что к чему Да как всё устроено это очень близко с тем что мы делали с вами на лекции но

всё описал Что к чему Да как всё устроено это очень близко с тем что мы делали с вами на лекции но с небольшим с небольшими поправочка Да кстати здесь вот у меня смотрите вот сейчас прокомментирует момент я забыл его исправить У меня здесь у меня здесь записано си к де N - это дисперсия если что да в в этом в на лекции сейчас вот мы с вами здесь писали здесь я писал Сигма де Нан это стандартное отклонение Просто иногда пишу так иногда так соответственно я как бы раньше чаще писал дисперсию

отклонение Просто иногда пишу так иногда так соответственно я как бы раньше чаще писал дисперсию сейчас стандарт не пишу забыл это поправить момент Так что вот как бы вот пожалуйста здесь собственно Уте Да что нужно будет стандартные отклонение в общем всё по пункти кам абсолютно то что мы с вами делали Окей вторая задача чуть поинтереснее она выходит немножко за рамки того что мы с вами обсуждали требует как бы некого вашего логического предложения наших с вами обсуждений Сегодня я всё что я

требует как бы некого вашего логического предложения наших с вами обсуждений Сегодня я всё что я делал это называется одно выборочный тест То есть я работал с одной выборкой бывают дву выборочные тесты дву выборочные тесты они бывают на самом деле чаще Когда у меня будет две выборки в данном случае у вас будет эксперимент что есть старое блюдо и новое которые хотят поставить на замену ему ну поменяли рецептуру там не знаю что-нибудь ещё сделали да короче какое-то изменение это оце старого блюда

рецептуру там не знаю что-нибудь ещё сделали да короче какое-то изменение это оце старого блюда и есть нового Ну здесь небольшая как бы такая простая Экспертиза происходящего и вот это вам нужно описать попробовать исходя из всех трёх гипотез нулевой первый трёх видов трх видов это двусторонняя правосторонняя и левосторонняя гипотеза здесь все подсказки вам есть какая считается статистика Какое Она имеет распределение танито узнает Завра мы это будем обсуждать вот пока что здесь можно просто

Она имеет распределение танито узнает Завра мы это будем обсуждать вот пока что здесь можно просто довериться тому что здесь написано да и вс взять как бы исходя из того что здесь есть в принципе пайплайн самое главное Вот вы должны понимать Какие бы стат гипотезы не были придуманы от самых больших Биг тех компаний до самых маленьких от тех что тестирует не знаю Open Microsoft Google до самых простых идей не знаю проек гипотез там не знаю в рамках своей жизни статистически работает везде

простых идей не знаю проек гипотез там не знаю в рамках своей жизни статистически работает везде одинаково и поэтому если вы его поймёте то у вас будет очень большая гибкость к проверке гипотез потому что гипотез их существует много о среднем о медиане о доле о квантили доверительные интервалы какие-то кастомные статистики Но все они проверяются одинаково Поэтому вот очень важно понять пайплайн да то есть а вот собственно говоря сам пайплайн у меня прописан здесь Ну и как бы да как-то Так и

да то есть а вот собственно говоря сам пайплайн у меня прописан здесь Ну и как бы да как-то Так и нужно будет написать пункцию которую всё это сделал Итак это первая часть Кто кто с ней это как бы в принципе если вы сделаете за сегодня это это будет хорошо Это будет хорошо особенно если вы это переварите дальше как бы сегодняшний и завтрашний день они В каком-то смысле объединены поэтому поэтому вот в среду [музыка] Проваливай вот задание О это ровно то что я открывал есть ещ задание задание -

вот в среду [музыка] Проваливай вот задание О это ровно то что я открывал есть ещ задание задание - это применить уже какие-то готовые статистические тесты там тест Z тест протест доверительный интервалы и так далее страпы если кто-то это вдруг знает или соответственно сделать сегодняшнее задание может потихонечку начать читать задания завтрашнее здесь именно будут виды статистических тестов которые уже готовы Сегодня мы как бы с вами их с вами во-первых мы их писали с вами сами Да вот а завтра

уже готовы Сегодня мы как бы с вами их с вами во-первых мы их писали с вами сами Да вот а завтра как бы будем обсуждать готовые статистические тесты потому что очевидно что не вы первы вы проверяете гипотезы на этой планете Вот соответственно можете почитать эту лекцию почитать лекцию и потихоньку переходить к заданиям Это для тех кто сделает сегодняшние задачи Но самое главное говорю чтобы Вы хорошо прямо переварил и уложили у себя в голове Как устроен пайплайн проверки гипотез вот таков вот

прямо переварил и уложили у себя в голове Как устроен пайплайн проверки гипотез вот таков вот план на сегодня то есть сегодня завтра 2 дня будут очень близкие Ну и пятница будет близкая пятница просто Поговорим немного про тестирование которая как бы является продолжением Да продолжением того что мы будем с вами обсуждать Ну вроде всё понятно круто круто круто А кому вдруг кажется что что-то страшное происходит не переживайте относитесь нормально немножко порите в этой истории и хоку будет

страшное происходит не переживайте относитесь нормально немножко порите в этой истории и хоку будет приходить понимание потому что я гово контекст проверки ста гипотез нас ждт с вами е достаточно предложите время и Осознание может произойти буквально воскресенье вечером А может произойти через 2 недели вот но постарайтесь себя выжимать максимум понять как это устроено это и делать задание самое главное делать задание что-то может непонятно как Паша говори [музыка] думать об этом Можно

самое главное делать задание что-то может непонятно как Паша говори [музыка] думать об этом Можно бесконечно надо просто начать делать а мысли потом потихоньку могут догнать Да когда уже собственно говоря будет что-то сделано тогда и вопросы будут более хорошие сформулированы у вас к самому себе Да по поводу задач Всё тогда давайте хорошего дня всем продуктивного если что на связи работаем по старой схеме всё вам жино всё Вам известно Давайте пока-пока спасибо пока пока-пока N

так Привет всем Как вы Приветики Здравствуйте настрой боевой отлично Сейчас давайте всех дождёмся Сейчас минутку буквально ладно Так ну что сегодня у нас на повестке дня с вами Продолжение по факту вчерашнего только мысль очень простая то что мы с вами Вчера делали очевидно Не Мы первые с вами это делали далеко не первые А значит что есть какие-то готовы статистические решения поэтому поводу сосно из них с вами и обсудим и обсудим вот так-с экран видно да да вчера мы с вами проговаривать м так

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

уже статистические критерии которые готовы Вчера мы с вами на лекции придумали свою статистику на самом деле как бы тоже она имеет название но тем не менее свою статистику сво решение Далее в коде мы бы тоже с вами вписали от руки ноф это тоже имеет своё название тест Ну вот собственно говоря об этом всём мы сегодня с вами и поговорим Итак первая самая частая История - это проверка гипотезы о среднем То есть у нас сейчас будет с вами на самом деле сегодня отличаться глобально Вот вот так

о среднем То есть у нас сейчас будет с вами на самом деле сегодня отличаться глобально Вот вот так отличаться Вот это слово то есть Вид гипотезы грубо говоря вид гипоте и не боле первоя самае часто - это гипотеза о среднем сонно как она формулируется H что средняя Генеральная совокупность равно какой-то константе против альтернативно гипоте что это не так альтернативно может быть правосторонняя может левосторонняя у меня на слайде приведена двусторонняя двусторонняя гипотеза это ровно то что мы

левосторонняя у меня на слайде приведена двусторонняя двусторонняя гипотеза это ровно то что мы делали с вами вчера да то есть самая частая история и кто собственно говоря нам в этом может помочь Ну есть так называе вос равно ли среднее генеральной совокупности какой-то константе или у нас как бы есть основание утверждать что это не так заданный уровне вероятности за статистика считается следующим образом выборочная среднее выборочно средня минус среднее в генеральной совокупности среднее в

образом выборочная среднее выборочно средня минус среднее в генеральной совокупности среднее в генеральной совокупности делить на вот эту нормируют вот Напомните мне пожалуйста Какое имеет распределение выборочное среднее но нормально да имеет нормальное распределение С какими [музыка] параметрами и Сигма к Ну си либо ере ИТ дисперсии как бы средней генеральной совокупности Да средней генеральной совокупности Сигма - это тоже собственно говоря стандартное отклонение элемента выборки из этой

совокупности Сигма - это тоже собственно говоря стандартное отклонение элемента выборки из этой генеральной совокупности - это объём выборки здесь прорисовывается напомню закон больших чисел что чем больше выборка тем отклонение начинает падать мы сужаем и нам всё сложнее отклониться от реального значения Да вот выглядело бы это примерно см образом есть быто коло нормального распределения Ну давайте наом бы это общее это подразумевает что какое-то конкретное число но Ну и как-то вот за вот эту

наом бы это общее это подразумевает что какое-то конкретное число но Ну и как-то вот за вот эту историю за вот эту историю отвечает вот здесь подпишу сиг де ко Теперь давайте подумаем С вами А что если я возьму из выборочного среднего выч среднее по генеральной совокупности А что произойдёт можете графически сказать можете математически Ну вот с графиком есть он станет у нас с вами вот таким вот верно И какое он будет иметь распределение на ваш взгляд нормальное распределение С какими

вот верно И какое он будет иметь распределение на ваш взгляд нормальное распределение С какими параметрами 0 нет абсолютно далее собственно говоря это называется масштабирование ием две величины между собой это вообще вот это вот преобразование оно заложено в нормировки данных мы дальше об этом с вами поговорим является очень важным потому что Ну все мы с вами знаем что как бы что-то измеряется в одних шкалах что-то в других и это не значит что то Что измеряется в меньших скалах Априори меньше

одних шкалах что-то в других и это не значит что то Что измеряется в меньших скалах Априори меньше а для компьютера это будет так даму мы делим на стандартное отклонение получается Вот такая вот ме мне не хватает короче вы поняли Вот такая штука это значит что вот здесь график он как бы таким станет в стандартизированной виде и вот это как раз таки имеет нормальное распределение 01 чем это удобно какие это удобные следствия для нас имеет это имеет для нас очень удобное следствие Почему так дела

какие это удобные следствия для нас имеет это имеет для нас очень удобное следствие Почему так дела принципе с ми са Вчера делали Просто мы не занимались нормировка мы просто считали выборочное среднее а распределение статистики брали таковым правильно никто не реагирует забыли уже Мы ваем Тода всё так вот А и тогда получается чем это удобно во-первых серединка в нуле во-вторых у нас стандартное отклонение с вами равно 1 2 3 тогда очень удобно как бы Сигма равна одно очень удобно измерять

отклонение с вами равно 1 2 3 тогда очень удобно как бы Сигма равна одно очень удобно измерять статистику Ну например у сержи получилось что в его эксперименте в его эксперименте у него за статистика получилась 303 О чём это нам может говорить что мы улетели за третью сигму правильно туда где вообще лежит всего Там меньше чем 3% значений это нас наведёт на мысль что мы скорее отклоните зу что средне в генеральной совокупности такое Да и наш риск ошибиться будет там будет меньше чем 3%

что средне в генеральной совокупности такое Да и наш риск ошибиться будет там будет меньше чем 3% очень-очень маленький А собственно говоря вот в принципе всё что я вам хотел здесь сказать по статистике всё остальное вы уже знаете да то есть вот это Z Z статистика да или Z распределение оно использует знание Центральной предельной теоремы которые мы с вами м который мы с вами уже собственно говоря знаем точно также дальше выставляется Альфа А и выставляется критическая зона и из этого исходит

знаем точно также дальше выставляется Альфа А и выставляется критическая зона и из этого исходит принятие границ принятия решений Да Кост капельку не уловил Как пришли к единице в нормировки как нормировать э ю вижу то есть понятно что вычли у вот мы разделили на мы разделили на стандартное отклонение это даёт гарантированно стандартное отклонение единиц это просто математическое правило такое вот это Как знаешь Если бы у тебя значения были от нуля до 100 и ты бы разделил каждое значение на 100

это Как знаешь Если бы у тебя значения были от нуля до 100 и ты бы разделил каждое значение на 100 они бы стали от нуля до одного это немножко вид нормировки но он как бы именно за масштаб за масштаб отвечает вот собственно говоря здесь это устроено таким образом это гарантировано можете на любой выборке протестировать и убедиться что это действительно так вот всё тут в принципе да Напоминаю что это проверка гипотеза о среднем Да так как фигурирует выборочно средня если у вас какая-то другая

это проверка гипотеза о среднем Да так как фигурирует выборочно средня если у вас какая-то другая гипотеза связана вообще с чем-то другим это в принципе проверка не для вас да Саш Вот ты говоришь что фор это Усть я предположил что - это средня Генеральная совокупность А всё всё спасибо Так вот Ну соб пример Ну пример такой достаточно тривиальный и сдн решаете Это просив несколько человек Получи следующее вы 95 77 4 10 дано у нас стандартное отклонение и дисперсия как следствие Да проверим

следующее вы 95 77 4 10 дано у нас стандартное отклонение и дисперсия как следствие Да проверим гипотезу что среднее равно на уровне значимости против односторонняя альтернатива что оно больше ше Да может быть я не знаю эк [музыка] ум причинно-следственную связь гипотезы сформулированы гипотеза сформулированы что далее собственно говоря критическая область у меня правосторонняя я могу найти Z критический это делается для нас очень с вами легко да давайте Вот то есть всё как вчера я просто

Z критический это делается для нас очень с вами легко да давайте Вот то есть всё как вчера я просто возьму нормальное распределение 0 так называемое Z распределение и скажу что у меня Альфа сколько у меня там Альфа 0 да 0 Поэтому чтобы найти собственно говоря Z критическа то есть критическую границу статистики что мне здесь надо прописать 1 ми атно верно квантиль правосторонний Вот и получаем значение 22 [музыка] да Удобно измерять То есть если мы за 233 сиг улетаем вправо то уже что-то так на

22 [музыка] да Удобно измерять То есть если мы за 233 сиг улетаем вправо то уже что-то так на тоненького Да как бы утверждать что среднее равно ше и мы бы ушли бы в альтернативу с вами теперь считаем что у нас выборочно среднее равно се Сигма равно 1 N = 6 и всё подставляю просто вот в эту формулу которая у меня была вот здесь получаю что моя статистика равна 245 Значит мы принимаем с вами гипотезу H1 да то есть Ну тут конечно на самом деле очень маленькая выборка в реальности на такой выборке

H1 да то есть Ну тут конечно на самом деле очень маленькая выборка в реальности на такой выборке проверять это очень опасно но в целом типа вот эти оценки говорят о том что средне как будто бы больше чем ше причём статистически значимо больше Да Ани просто на шару как вот у нас выпало вот так собственно говоря в чём недостаток Z критерия недостаток Z критерия заключается в том что часто выборках Вам никто не даёт стандартное отклонение Сигма то есть оно неизвестно Да потому что мы генеральной

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

делали я вам говорил что это слегка неправильно в первой задаче но разница очень минимально он говорит что надо на самом деле немножко по-другому поступаться и собственно говоря это Этот человек я не помню как его звали но не юдент его звали юдента В общем звали его как-то вот вот этот чувак он придумал собственно говоря это распределение но у него компания в компании которой он работал она ему запретила публиковаться под своим именем Да в те времена и и он собственно говоря взял м Student Да

запретила публиковаться под своим именем Да в те времена и и он собственно говоря взял м Student Да псевдо Student и это вот закрепилось как бы и более того это стало самым известным статистическим тестом вообще вот собственно говоря какую проблему он решал относительно распределения Да очень простую он говорил что ребят Если у вас сигмы нету то давайте приблизив стандартным отклонением это формула тоже нам знакома из вторника Да мы просто как бы считаем Это стандартне поке и поставляем его то

тоже нам знакома из вторника Да мы просто как бы считаем Это стандартне поке и поставляем его то также есть бы си Он утверждает что распределение оно на самом деле немножко другое да давайте Вот ещё раз сюда окун откроем распределение юдента или Т распределение это одно и тоже оно в принципе имеет очень похожий вид как бы чем больше выборка тем разницы вообще никакой нет на выборках где-нибудь уже размером больше п что вы примените тест что тест разницы нет кто вот вчера в первом задании себя с

размером больше п что вы примените тест что тест разницы нет кто вот вчера в первом задании себя с тестом Там должна была быть Небольшая разница но она должна была быть настолько маленькой это как раз-таки потому что тест всё-таки Т распределение брал А мы с вами там брали нормальное распределение в первой задаче вот как бы то же самое правило те же самые три сигмы Как вы видите Да но вот у этого распределения есть один параметр здесь он изображён K Ну как бы чаще его называют N или число

этого распределения есть один параметр здесь он изображён K Ну как бы чаще его называют N или число степеней свободы или это повязано всегда к элементам количеству элементов выбо У вас есть да чем больше выборка тем соответственно более уверенно решение тем как бы стандартное отклонение эмпирическая приближается к генеральной совокупности и тем это более становится похожим на нормальное распределение но собственно говоря если говорить объективно все как бы на практике просто забили на это и

но собственно говоря если говорить объективно все как бы на практике просто забили на это и просто пользуются всегда Т теста то есть есть такая конечно история где там Z статистику запускает Но как-то вот в массах именно закрепилась Т статистика вот А собственно говоря что то есть у меня вот такая статистика посчитано Она имеет распределение сюн или Т распределение с N ми о степени Свободы с N - оно степени свобод всё точно так же собственно говоря а она имеет где-то распределение у нас с вами

оно степени свобод всё точно так же собственно говоря а она имеет где-то распределение у нас с вами куда-то статистика упала мы собственно говоря вычисляем критическую зону здесь здесь не знаю и принимаем либо аж но либо а принцип тот же самое и точно так же это проверка гипотезы а [музыка] среднем идём дальше Угу Теперь смотрите часто бывает вы уже и с этим столкнулись вчера часто бывает соответственно дву выборочная проверка гипотез Да когда мы сравниваем не об одно не по одной выборке

дву выборочная проверка гипотез Да когда мы сравниваем не об одно не по одной выборке говорим что-то о генеральной совокупности А когда у нас есть две выборки чаще всего это нужно в пайплайн на одну выборку что-то выкатываем изменение какое-то другую оставляем при прох раны самы мы пытаемся наилучшим образом вычленить причинно-следственную связь и это заключается Да в механизме двух выборок h0 тут формулируется тоже очень консервативно как и всегда что Изменений нет ничего не помогло Всё тлен

формулируется тоже очень консервативно как и всегда что Изменений нет ничего не помогло Всё тлен это не работает да против альтернативной гипотеза H1 что всё-таки на среднее наша гипотеза как-то повлияла наше изменение как-то повлияло тогда считается Вот такая статистика она на самом деле по факту вот там статистика была выборочная средняя мину М0 делить на корень квадрат я вот так запишу Сигма ква де это и есть сиг де Если что я хочу чтобы вы провели параллель что и тут даже на самом деле

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

то есть сумма элементов первого выборки второй минус д если выборки независимы то у нас нет требования чтобы выборки были одинакового размера в одной может быть 50 в другой может быть 70 никаких проблем в этом но стараются конечно всё-таки делать выборки одинаковые У меня вопрос а с это есть же СД с это выборочное стандартное отклонение то есть вот мы дисперсию записывали вы меня ещё спрашивали помн на пому спрашивал почему деление на ми1 это во вторник было как бы вот это само это S ква это

помн на пому спрашивал почему деление на ми1 это во вторник было как бы вот это само это S ква это выборочная дисперсия А с - это ну как бы корень из дисперсии То бишь стандартное отклонение типа точка и да да равно он это вот если тебе вот так надо а если например использовать вот так выборочную оценку стандартного отклонение но при этом DD один не вписать то это вот у тебя вот будет вот так у тебя вот су Ну я тебе говорю на больших выборках там не знаю больше семидесяти это во-первых это не

тебя вот су Ну я тебе говорю на больших выборках там не знаю больше семидесяти это во-первых это не большие выборки я так на не маленьких на не на не совсем маленьких выборках как бы эта поправка она не особо актуальна и имен оных задача по науке это ошибочно но в прикладных задачах Там разница на пятом знаке после запятой она никому не нужна Окей понял и вопрос Типа если например мы находим дисперсию с помощью типа точка Да и точка типа Можно ли например просто под корень закинуть также

дисперсию с помощью типа точка Да и точка типа Можно ли например просто под корень закинуть также использовать Ну например просто да Это значит что разработчики метода разработчики на за тебя извлекли внутри ко То есть в принципе это одно и тоже так собственно говоря проверка гипотезы что у меня здесь вообще о среднем Ладно я не буду останавливаться если тите сами Посмотрите тут в принципе ничего нового следующее что бывает иногда ещё есть такая гипоте гипоте о виде распределения распределён а

нового следующее что бывает иногда ещё есть такая гипоте гипоте о виде распределения распределён а это значит что по квантиль Всё плюс-минус совпадает одинаково много там знаю больших Рафиков одинаково много маленьких одинаково много средних и гипотеза о виде распределения называют Ну точнее статистический критерий которые помогают решить эту задачу его называют критери или просто критерий Вот он немножко посложнее именно с точки зрения внутри как строится статистика то есть вот статистика вам

немножко посложнее именно с точки зрения внутри как строится статистика то есть вот статистика вам вам этого не при делать Сразу говорю просто неплохо знать как это выглядит дальше статистика - это минималь из этих двух значений и гарантировано что она имеет нормальное распределение он называется Не параметрическим потому что он не зависит Ни о каких сигма и так далее он зависит тупо от размеров выборки и всё ни больше ни [музыка] меньше например возьмём Давайте с вами запустим ой запустим с

выборки и всё ни больше ни [музыка] меньше например возьмём Давайте с вами запустим ой запустим с [музыка] вами давайте я сгенерирует м так Да пусть будет у меня sle о равно А давайте я возьму точка норм Пусть нормальной распределение и Средние у них одинаковые М1 равно 10 2 ра Пусть о ра 1 2 ра 1 короче средне одинаковы Здесь пусть будет стандартное отклонение без разницы ра Пусть будет так собственно говоря есть первая выборка Да и Давайте возьмём выборку размером [музыка] этот метод делает

говоря есть первая выборка Да и Давайте возьмём выборку размером [музыка] этот метод делает пому size Да size равно n а вторую выборку я возьму как sample 1 ST тон здесь надо подавать нам только Scale равно М2 так всё вот две выборки есть м нарисую ещё график нарисую график [музыка] там с 1 см о напис а ага Дава [музыка] м Так секунду эти вот всякие моменты 1Д всё здесь тогда будет Первое окно вставим здесь вот как вы видите в принципе распределение на самом деле даже можно выборку взять чуть

здесь вот как вы видите в принципе распределение на самом деле даже можно выборку взять чуть побольше чтобы наверняка понимать то есть как вы видите Ну распределение вообще разное Давайте запустим статистический тест тте так inde меня две выбо независимы подаём sle 1 sle 2 это ТТ запускаем То есть если бы я хотел проверить два равенства средних итак у меня статистика получилась мину О я ушёл в левую сигму а это значит что среднее sle 2 вот здесь оно чуть больше вышло но однако как бы P у меня

сигму а это значит что среднее sle 2 вот здесь оно чуть больше вышло но однако как бы P у меня 027 Давайте нам скажет к нам скажет Давайте нам скажет Сергей Сергей который сейчас без камеры Какую мы гипотезу здесь принимаем ЕС у нас больше чем 05 Мы разве принимаем Чем меньше м лучше тем лучше да но как можно 27 интерпретировать А это 27% 0 2 что средняя у них разница риск ошибиться 27% достаточно большой этим самым я вам хотел подчеркнуть такую простую истину смотрите что тест на самом деле

большой этим самым я вам хотел подчеркнуть такую простую истину смотрите что тест на самом деле ему вообще пофигу Какое распределение он тупо среднее мониторит видите да то есть видите он говорит что ну ребят средне одинаково А давайте теперь запустим матест просто часто их путают и Вас могут особенно кто будет ближе к бизнес продуктом и анализу вот всех статистических истории бизнеса могут загрузить по поводу Многие считают что это одно и тоже но на самом деле кстати Странно что так получилось

по поводу Многие считают что это одно и тоже но на самом деле кстати Странно что так получилось настолько как большой всё [музыка] равно выв не то сделал вообще он должен давать очень-очень маленький выборку Да вот видимо выборка была маловата чтобы делать правильное принятие решений то есть выборку сделал побольше выборку сделал побольше и видите что получается то есть ттст до сих пор пропускают Да считаю что среднее одинаковое оно действительно одинаковое я взял из генеральной совокупности с

Да считаю что среднее одинаковое оно действительно одинаковое я взял из генеральной совокупности с одинаковым средне уже Дат фактически нулевой утверждая что эти два распределения они очень очень разные Поэтому нужен там где нужна природа распределения там где нужна его иногда вставляют Представьте У вас есть модель в продакшене модель она даёт неплохие точности она решает какую-то бизнес зада модель будет продолжать корректно работать и держать те же метрики на том же уровне только в том

модель будет продолжать корректно работать и держать те же метрики на том же уровне только в том случае когда входные входные данные их природа не меняется да Ну например не знаю модель которая которая Что оценивает предположим не зна рекомендуют рекомендуют Что покушать да рекомендуют Что покушать собственно говоря там нас удовлетворят она строится на каких-то входных данных например не знаю предпочтение пользователя его активность там он может какие-то данные себе заполнить или мы какие-то

пользователя его активность там он может какие-то данные себе заполнить или мы какие-то данные собрали по нему так вот модель она как бы Понимаете вот как в прямом смысле вот как человек вот человек мы с вами обучили на чём-то то что мы знаем мы себя чувствуем хорошо правильно соответственно когда мы выходим и сталкиваемся с чем-то новым мы начинаем ошибаться это нормально У модели та же самая история и часто ма у тест он даже там имеет немножко другое название пока ва буду ставят как

самая история и часто ма у тест он даже там имеет немножко другое название пока ва буду ставят как триггерами или индикаторами здоровья то есть возьмём какую-нибудь большую компанию которая крутится в продакшене ML модель она описана десятками ста тестов чтобы сразу бить тревогу если природа входных данных меняется собственно говоря как бы вот во многом в этом может помочь тест ма утни который говорит ребят сейчас данные пошли другою природу что-то поменялось соответственно Есть риск что модель

ребят сейчас данные пошли другою природу что-то поменялось соответственно Есть риск что модель будет так называется деградировать и ошибаться вот Понятненько Да если сейчас мы используем на нормальном распределени и распределении там ва будет большое получается не понял вопрос ещё раз можно если вместо экспоненциального распределения здесь наверху мы делаем Т распределение кото быть большое Давай попробуем Дава Попробуем так это закоментить то нуми что ему вы не [музыка] генерируется так Почему

попробуем Дава Попробуем так это закоментить то нуми что ему вы не [музыка] генерируется так Почему такое получилось А ну потому что радение види это смещено немного и оба теста говорят что это не одно и тоже давай попробуем вот так поставить Вот сейчас Должно быть нормально Вот здесь 08 здесь ма тоже пропустил но всё-таки выборки большие видишь некоторую разницу он видит как бы но и кстати в случае истинности гипотез h0 он вообще равномерно распределён грузить сейчас не буду вот эта ошибка

случае истинности гипотез h0 он вообще равномерно распределён грузить сейчас не буду вот эта ошибка произошла какого рода второго скорее всего первого Да ну потому что там маленький P мы бы ушли в H1 мы ошиблись на самом деле здесь иена h0 как бы такое возможно каждый Двадцатый запуск при Альфа равным 05 то есть в случае говорит о том то что чем меньше тем они не похожи Чем больше тем они [музыка] похожи Вот так Ну ладно я пока Тода так оставлю там са Попробуйте вопрос непонятно почему есть

похожи Вот так Ну ладно я пока Тода так оставлю там са Попробуйте вопрос непонятно почему есть Каким образом это определять Почему Чем больше тем они больше похожи чем меньше тем оно не меньше можно как-то про это вероятность ошибиться когда ты примешь гипотезу H правильно Маленьки Значит мы можем утверждать что очень мало вероятность ошибиться что они похожи то есть Ма будет делать меньше более не похожее распределение вот у меня до этого было экспоненциальное распределение было 10 Мише Я даже

похожее распределение вот у меня до этого было экспоненциальное распределение было 10 Мише Я даже такого числа не знаю какие-то там квинтиль в общем что-то очень одна квинтиль онная там вероятность предположим То бишь ноль просто проще говоря Вот это матест идм дальше всё остальное вообще ничего не меняется Вот вот всё тоже самое вообще всё тоже самое Да единственно что меняется статистика е распределение так дальше есть ещё такой есть ещё такой слово вы статистический тест который проверяет

так дальше есть ещё такой есть ещё такой слово вы статистический тест который проверяет зависимость категориальных признаков например но он не только эту задачу решает это статистический тест квадрат он может много разных вещей решать но од из них вот такая классификации и в проверка гипотез где есть какая-то категориальной с числовыми а с катеринами нормально Итак бизнес здесь получается типа конверсия купил не купил да ну можно проверить Да но это дальше гипотеза от доли будет Вот Ну давайте

купил не купил да ну можно проверить Да но это дальше гипотеза от доли будет Вот Ну давайте разберём пример здесь предположим у нас есть датафрейм и нам необходимо оценить влияние категориальных признаков на наш ференс То есть у нас есть лайки дизлайки Я ставлю очень чёткую гипотезу жанр влияет на настроение Ну потребителе да этого контента грубо говоря что там один один жанр лучше заходит другой хуже Да и так далее собственно говоря как у меня Давайте сначала как формулируются гипотезы

другой хуже Да и так далее собственно говоря как у меня Давайте сначала как формулируются гипотезы гипотезы формулируются опять консервативно Да ну имеется в виду h0 что признак как бы жанра не влияет Да на наш ференс H1 влияет Конечно мы хотим в H1 потому что это будет для нас значить что мы нашли какой-то Инсайт и причино следственной связ это всегда хорошо вот а как здесь считается статистика смотрите Ну если мы с вами утверждаем утверждаем что в принципе жанр не влияет на ференс то давайте

смотрите Ну если мы с вами утверждаем утверждаем что в принципе жанр не влияет на ференс то давайте посмотрим вот в этот столбец у меня комедию смотрели дважды раздва то в целом как бы если комедия не влияет да На ференс то мы должны С вами ожидать что ну как 50 на 50 поэтому ожидаемое значение что один лайк один дизлайк таблица в не очень привычном виде роп называется в коде Ну методы готовые есть они за вас по-моему делают лайк дизлайк по одному ждём наоборот получается в моём случае давайте

они за вас по-моему делают лайк дизлайк по одному ждём наоборот получается в моём случае давайте вот так рестик илак с драй таже самая история ждм одному Ну да и из комедии смотрите Она на практике оказалось её дважды лайкнули то есть Комедия как будто бы что-то такое на позитивчики Да как то есть ноль к двум нас в эту сторону клонит теперь смотрим на драму драма дизлайк дизлайк Вот получается опять Мы ждём как бы один к одному дизлайк лайк получаем два к нулю в другую сторону вот Ну и с

опять Мы ждём как бы один к одному дизлайк лайк получаем два к нулю в другую сторону вот Ну и с триллеров Мы ждём опять же один дизлайк один лайк и получаем действительно То есть - это у нас ожидаемое значение Да - это у нас наблюдаемое вот поэтому как бы получается что то что мы получили то что мы ждали в рамках h0 Теперь мы как бы будем смотреть вот эту Дельту В каком-то смысле и насколько сильно мы отклонились просто ну ровно же 50 на 50 не получишь всегда правильно вот поэтому мы будем

сильно мы отклонились просто ну ровно же 50 на 50 не получишь всегда правильно вот поэтому мы будем смотреть эту Дельту и намдо будет-то агрегировать эту информацию так вот для это есть она агрегирующие образом что то есть числители мы смотрим наблюдаемое минус ожидаемое возводим в квадрат и нормируемое вот и суммируем все эти значения Вот такая статистика которая Вы можете посчитать по выборке имеет хи квадрат распределения хи квадрат распределения Можно опять же открыть документацию Когда вы

хи квадрат распределения хи квадрат распределения Можно опять же открыть документацию Когда вы столкнулись с каким-то новым видом распределения Вот как-то так оно выглядит Но на самом деле Оно даже давайте знаете как вот это вот вот что-то вот такое вот чаще всего квадрат вот какой-то такой получается это типа знаете как бы как нормально но его вот немножко накло в сторону нуля вот оно кстати несимметричное первое распределение которое несимметричное Так что когда вы сегодня будете считать

несимметричное первое распределение которое несимметричное Так что когда вы сегодня будете считать Будьте [музыка] аккурат логика дальше та же самая То есть если у меня статистика упала куда-нибудь сюда то я какую гипотезу [музыка] принимаю это бы в контексте нашей задачи что бы [музыка] значило влияет Абсолютно верно Абсолютно верно то есть опять же критическая зона где-то попали попали сюда у нас нет оснований утверждать что это не так в обратную рону собственно есть основание так вот тако

нас нет оснований утверждать что это не так в обратную рону собственно есть основание так вот тако вот про про кофе когда мы говорили или когда говорили про кофе вот здесь тоже хи квадрат да смотреть не хи Квадрат - это гипотеза от доли Это следующее то что мы проговорили хи квадрат как правило нужен Когда вы хотите проверить зависимость категориальных признаков от чего-то там всё-таки немножко другое моделирование происходит вот квадрат квадрат ещ Вот например Хорошо пока просвечивается на

другое моделирование происходит вот квадрат квадрат ещ Вот например Хорошо пока просвечивается на кубике я Вас спрашивал на днях Как проверить что кубик честный и мы почему-то с вами проверяли средние кубика помните Но ведь это может быть не так если у меня на кубике будет выпадать всегда 1,6 у него же тоже будет средне 3 с по но это не значит что это честный кубик А вот х ква лучше проверить Это почему потому что ну давайте я подброшу давайте я подброшу 36 раз кубик Да 36 раз кубик собственно

почему потому что ну давайте я подброшу давайте я подброшу 36 раз кубик Да 36 раз кубик собственно говоря у меня будет наблюдаемая Да наблюдаемая И ожидаемая да тся Да ВС правильно вот пусть это единичка двойка тройка четвёрка пятёрка шестёрка по аналогии с нашими жанрами там Комедия Драма трилер да Ну например единичка мы ожидаем с вами что если кубик честный если кубик честный то всё выпадет по ше раз правильно Ну очевидно что Ровно выпала четыре раза тройка выпала шесть четвёрка аж 10 раз

по ше раз правильно Ну очевидно что Ровно выпала четыре раза тройка выпала шесть четвёрка аж 10 раз выпала Да пятёрка три раза 12 18 28 31 шестёрка пять раз вот собственно говоря вот эти отклонения мы смотрим и мы можем утверждать как бы что через Х квадрат посчитать да и говорить что могло ли если кубик честный выпасть на рише элементах выборки такие значения Там тоже будет или Абсолютно верно ВС тоже самое внутри то есть есть статистика есть её распределение есть ну там к как-нибудь вот так

ВС тоже самое внутри то есть есть статистика есть её распределение есть ну там к как-нибудь вот так предположим выглядит Да соответственно у тебя статистика упала сюда собственно говоря всё тоже самое ничего не меняется тоже самое единственно что меняться будет [музыка] он такой достаточно специфичный Но объективно не очень часто применяемый статистический тест Но вот имеет место быть что у нас про кофе как бы Вроде как тоже доля была ну это есть это называется ги на одни и теже зада можно под

кофе как бы Вроде как тоже доля была ну это есть это называется ги на одни и теже зада можно под разным углом смотре применять разные статически критерии Ну поподробнее не буду останавливаться просто могу сказать что некоторые корреляции есть и квадрат может В каком-то смысле помочь ответить на вопрос даже о среднем может помочь вот здесь он мне помог на самом деле проверить то что делает проверить висни сталкиваетесь с тем что Вы хотите проверить влияние категориального признака на вашу

висни сталкиваетесь с тем что Вы хотите проверить влияние категориального признака на вашу таргетированную историю Вот это было бы актуально Если бы ты проверить хотела Знаешь как не знаю цвет волос покупателя вот у тебя подходит у тебя подходит человек кофе покупает ты вот хочешь понять вот цвет волос влияет у него или нет на покупку кофе посмотрела Там блондинов брюнетов и начала бы соответственно бы через делать в принципе ожидается что что блондины что брюнеты купят одинаково да вот доля А

бы через делать в принципе ожидается что что блондины что брюнеты купят одинаково да вот доля А как бы если влияет Тото иначе Угу Да Бул получается в хи квадрате exped зависит полностью от нашего решения мы говорим как будет expected равно равно равноценно можно сказать то expected как правило Ну вот вообще ты прав Да ты вообще прав но на самом деле expected - это как бы вот консервация консервативно что это не влияет а не влияет это значит что доля одинаковая Вот то есть мык берём равноценные

что это не влияет а не влияет это значит что доля одинаковая Вот то есть мык берём равноценные вероятность для всех берём честно короче вот следующая гипотеза доли она безусловно вторая по популярности либо первая на пару с гипотез о среднем наверно всё-таки вторая вот есть абсолютный Лидер в анализе числовых случайных величин непрерывных иначе говоря это гипотеза среднем тест есть чемпион среди категориальных Да категориальных историй Это гипотеза о доли и вот задача с кофе которая у нас была

категориальных Да категориальных историй Это гипотеза о доли и вот задача с кофе которая у нас была вчера это чистая гипотеза о доли чистая гипотеза о доли мы там собирали свою статистику немножко отличающийся от того что здесь есть Да Ну даже не немножко а сильно отличающийся с виду хотя в принципе что мы там что они здесь используют одно и то же следствие так вот если вы почитаете такую статистику ку то она имеет распределение да Или но по-другому стандартное нормальное распределение или

ку то она имеет распределение да Или но по-другому стандартное нормальное распределение или нормальное распределение со средним в нуле и стандартным отклонением в единицу здесь опять тоже самое то есть то что вы получили по выборке то что в генеральной совокупности А вот эта штука вот эта штука на самом деле в бино Нини а мы вчера убедились что это биномиальное распределение поэтому на самом деле если вы увидите то сколько мы получили по выборке минус Генеральная совокупность разделить на сиг

если вы увидите то сколько мы получили по выборке минус Генеральная совокупность разделить на сиг ничего нового вообще нет просто другие буковки а принцип тот же самый Сейчас погоди Вот ты вчера на графике просто понять связку Ты вчера на графике рисовал пони на графике по факту рисовал Вот это долю я как бы просто не разделил на количество Мы считали с вами не 167 писали а не 167 Но это одно и тоже по факту Ты вчера и сегодня использовал разные статистики или нет Ну да разные Да и они обе

и тоже по факту Ты вчера и сегодня использовал разные статистики или нет Ну да разные Да и они обе одинаково валидные типа идуть конечно ты можешь свою статистику придумать Если ты будешь знать как она распределена в смысле не статистики а Господи как правильно этот термин сказать статистика у нас это количество купивших Ну это у меня была там такая статистика здесь другая статистика я как бы вчера применил статистику которую мы с вами поймём как люди Да вот 167 купленных кофе очень понятно то

применил статистику которую мы с вами поймём как люди Да вот 167 купленных кофе очень понятно то что здесь считается как бы уже так прозрачно на человеческий мозг не прикладывается Ну вот как бы в стандартах так принимают причём чем вы глубже Заходите в статистику Ну это уже такие какие-то кто занимается прям очень серьёзной глубоко статистикой тем чаще пишут всегда свои кастомные статистики то есть не те которые в общем виде А вот Но это требует большего погружения и конечно большего времени

есть не те которые в общем виде А вот Но это требует большего погружения и конечно большего времени чем то что у нас с вами есть если вдруг вы столте статистикой вы будете и это будет вашим хлебом вы будете много-много развиваться Там и так далее но на самом деле от Базы далеко это никуда не [музыка] уходит ша нуно абсолютно вот ЕС зада проверим гипотезу что доля признака генера совокупности ра 0 на уровне значимости 05 Ну например не знаю уровень поддержки какого-то избирателя Да есть как бы

0 на уровне значимости 05 Ну например не знаю уровень поддержки какого-то избирателя Да есть как бы всех не можем опросить да Или избиратель хочет себя откалибровать как-то до того как пройдут выборы всех жен не будет опра вот получили 02 вот эти 02 сюда подстав 0 сюда подстав Да в генеральной совокупности а получается в дальнейшем Везде где М0 пи 0 это всё относится к генера левая это Гене относится а наверху которая гипотеза h0 это P с шапкой равно p0 Да нет но это мы утверждаем что как раз

а наверху которая гипотеза h0 это P с шапкой равно p0 Да нет но это мы утверждаем что как раз таки в генеральной совокупности среднее равно p0 вот то есть скорее вот вот Оно сюда поставлено А это п Это что такое бе Ну это просто мы говорим что как бы можно вот так убрать если вам угодно что скорее P как бы ну как я даже не знаю как объяснить мы утверждаем что средне генеральной совокупности равно там 0,2 вот я теперь вот эти 02 подставляю сюда то есть 0 здесь как бы обобщённая буква что у тебя

там 0,2 вот я теперь вот эти 02 подставляю сюда то есть 0 здесь как бы обобщённая буква что у тебя там 03 будет Вот точнее п обобщённая буква а0 - это частности в моей задаче может быть 02 в твоей 03 там да у Димы ещ какой-то всё Угу Да на счёт доли - это получается среднее делённое на N насчёт доли - это среднее делить на N ничего не понял Ну типа пи - это типа доля Да дада дада да не среднее делить на N это и есть уже доля это и уже есть средний если мне из 10 человек давай не из дети человек

на N это и есть уже доля это и уже есть средний если мне из 10 человек давай не из дети человек из пяти человек из четырёх человек давай ладно из пяти Угу а из пяти человек мне трое сказали что поддерживают а двое нет то твоё п с крышечкой здесь будет сколько пятых Абсолютно верно 0,6 а О'кей понял то это просто А мы вчера с вами как бы не делили на количество мы просто посчитали количество купивших поф Угу так конечно как бы я вчера это делал чтобы мы лучше с вами поняли лучше всё пощупай с

поф Угу так конечно как бы я вчера это делал чтобы мы лучше с вами поняли лучше всё пощупай с этой целью всё-таки всегда конечно доли больше оперируют а потому что как бы 167 вот скажете вы какому-то своему начальнику у нас 167 если он не знает сколько людей подошло то ему ни о чём не говорить 167 совершенно да А вот если мы ему скажем что 167 трх соток Ну в проценты переведём то как бы всем будет понятно о чём идёт речь А вот эта правая часть формулы означает что она распределена как

всем будет понятно о чём идёт речь А вот эта правая часть формулы означает что она распределена как нормальное нормированное распределение то есть мы получим от нуля до единицы Да что-то нет ну как нормальное распределение вот ничем не отличалось от того что я рисовал вот здесь выше вот здесь вот нарисовали вот так вот Угу если у тебя выпадет что у тебя 344 44 Вот давайте Ладно давайте Хорошо быстренько сделаем с вами такую историю вот есть такая гипотеза небольшая Ну у меня предположим я так

сделаем с вами такую историю вот есть такая гипотеза небольшая Ну у меня предположим я так по приколу как бы спрашивал ческих Груп что кошек и собак в генеральной совокупности любят примерно в равной пропорции то есть кто-то больше кошек кто-то больше собак мы как бы опустим факт там аллергии может да Или кто просто не любит животных Давайте вот сечас попробуем провести с вами эксперимент поно ре вот у меня есть выборка нас с вами здесь 11 человек Давайте каждого собственно говоря спросим кто

вот у меня есть выборка нас с вами здесь 11 человек Давайте каждого собственно говоря спросим кто кого больше любит пусть будет собственно говоря а собака - это один кошка - это ноль вот я начну с себя давайте я больше люблю собак у меня единичка Ты кого больше любишь кошки кошек хорошо так бу кошки Угу Люба кошки Дима ноль шки Шатки собаки Самое главное чтобы мы здесь все принимали решение Независимо да то есть в этом и суть эксперимента Так [музыка] Саша собаки Угу Серёжа собаки Костя собаки

да то есть в этом и суть эксперимента Так [музыка] Саша собаки Угу Серёжа собаки Костя собаки собаки просто комт Оля кошки кошки и Сержа собаки собаки собственно говоря как бы это выглядело да То есть даже эту выборку можно сразу же в питоне реализовать так не отличается я поставлю 61 нужно знать Каждый элемент выборки Вот это х у меня получился Да я проверяю на то что в среднем любят одинаково 0,5 вот а элемента выборки у меня 11 Это конечно очень маленькая выборка но как бы всё соответственно

вот а элемента выборки у меня 11 Это конечно очень маленькая выборка но как бы всё соответственно мы собираем с вами Вот этот статистику нашу теста напоминаю Вот она у меня P минус p0 Х типа это называют пи эмпирическая так часто вро ты её называла не не или почему вдруг Нати перешёл на Т перешёл А здесь ну давай за ста О'кей А так э вот собственно говоря числитель записал и делим с вами на делим это всё на корень квадратный из Ну собственно говоря там будет я формулу помню p0 у 1 - p0 и всё

это всё на корень квадратный из Ну собственно говоря там будет я формулу помню p0 у 1 - p0 и всё это дело нам нужно разделить на N вот так скобок много сделал вот так мне хватит вот собственно говоря формула так [музыка] нет так так так ну в общем вот у меня полу 03 А [музыка] это и первой сигмой понимаете да то есть если бы я сейчас pv считал то оно было бы очень большим тут в принципе как бы понятно что ли будет очень большой решение будет очень как бы уверенное да то есть дальше что я должен

что ли будет очень большой решение будет очень как бы уверенное да то есть дальше что я должен был создать стат там Z ST ди имеет у меня в данном случае распределение 0 Я бы мог посчитать P value свой Да там правосторонний и левосторонний или двусторонний Не суть важно сейчас совершенно считаю pv cdf zst и подставляю один минус получаю pv очень большой то есть 038 и собственно говоря Это говорит о том что по такой выборке у меня нет оснований совершенно отклонять гипотезу о том что генеральной

о том что по такой выборке у меня нет оснований совершенно отклонять гипотезу о том что генеральной совокупности одинаковые Хотя с прошлой группой Серёжа Помнишь мы же так же пому делали там что-то вообще де к одному получилось вот ну обычно как бык средне Ну не девять но да там было больше собак Да так однозначно вот Ну это такая как бы развлекательная история Да чтобы ощутить Как работает вот гипотеза о доли например всё идём дальше и потом наверное да посмотрим карту сделаем перерыв

вот гипотеза о доли например всё идём дальше и потом наверное да посмотрим карту сделаем перерыв небольшой Я здесь ещё указал гипотезу о дисперсии я сильно на ней Останавливаться не буду так как она на самом деле достаточно ну редкая история достаточно редкая история Также можно сравнивать дисперсии двух выборок да или одну выборку с генеральной совокупностью тогда можно выдвинуть гипотезу что у вас дисперсия равна чему-то Да И вот такая статистика которую Можете посчитать по выборке то есть

у вас дисперсия равна чему-то Да И вот такая статистика которую Можете посчитать по выборке то есть напоминаю Вот это по выборке будет да по выборке вот [музыка] вот как бы ну тут можно подписать что это не просто х ква а х квара имеется в виду с N ми о степенью Свободы То есть как бы вот такая статистика имеет такое распределение здесь привёл небольшой пример ну говорю сильно на нём не буду останавливаться достаточно редкая задача просто чтобы вы знали Да мысли в шир как бы не более того всё

достаточно редкая задача просто чтобы вы знали Да мысли в шир как бы не более того всё остальное абсолютно то же самое вот абсолютно то же самое внутри всё тоже самое статистика критическая value решение Альфу которую вы хотите задавать Там и так дае в принципе Единственное что меняется везде это как бы вид статистики И всё А можно да спросить то есть мы во всех вот предыдущих гипотезах получали А сейчас мы получали что там Да вроде бы а вот в гипотезе о доли мы получаем не если мы хотим мы

А сейчас мы получали что там Да вроде бы а вот в гипотезе о доли мы получаем не если мы хотим мы должны там ещё кое что доделать дата Я про Опять от руки писал это вы можете из взять из это можете взять из библиотеки и там возвращает pv тоже да Ну конечно любой стати ките возвращает Ага Так ну и собственно говоря карта статистических тестов Она очень большая и тут дофига тестов Ну я например тоже тут половину не знаю на Ну ладно уж не половину как бы ну процентов 10 тут в принципе можно

тоже тут половину не знаю на Ну ладно уж не половину как бы ну процентов 10 тут в принципе можно примерно рассуждать да сколько у вас Мы с вами разговаривали про одно выборочную историю или дву выборочную историю ещё бывают Множественные сравнение То есть три более выборки Да Далее собственно говоря можно рассуждать там собственно говоря числовой Да у нас или категориальный Ну там например Идём по числовой истории Да там вот собственно говоря у нас ТТ юдента есть незнакомые я вам не советую Это

числовой истории Да там вот собственно говоря у нас ТТ юдента есть незнакомые я вам не советую Это учить вообще от слова совсем основные статистические тесты которые с вами как бы проговорили вот они Да они как бы часто всё остальное запоминать нет смысла Скорее надо как бы вот понять что бывают разные моделирование процессов в жизни да и по-разному можно проверять здесь есть вещи которые вообще с помощью машинного обучения проверяется об этом мы с вами будем говорить дальше там как бы ну в

с помощью машинного обучения проверяется об этом мы с вами будем говорить дальше там как бы ну в общем собственно говоря Ну например пройдём не знаю вот по вот этой ветке Да не знаю по вот этой ветке например пройдём здесь кстати Матрица корреляций вот для числовых признаков Да как один из способов А можно приоритеты типа Гру те которые я проговорил выше когда внутри этих тестов квадрат например явно там несколько очень популярных применений можно просто короче сери что Гру говоря каж по

явно там несколько очень популярных применений можно просто короче сери что Гру говоря каж по применение я поч Ниго бо непо для а там вроде бы одинаковость двух распределений - это хи квадрат или нет Я видь я вам всё не про говорю вот я вам то что я говорю выше то что то я считаю очень важной историей всё остальное Вы обязательно провались и посмотрите просто не перегружайте себе голову сейчас этим всё ра как раз пытаюсь не перегружать а именно задаться вопросом че используется каждую неделю

этим всё ра как раз пытаюсь не перегружать а именно задаться вопросом че используется каждую неделю грубо говоря всегда можете пройтись по этой карте если будете поть смо статистики И обязательно найдёте здесь свой свой маршрут Вот я говорю вот например как бы вот например вот этот тест Да я его как бы не очень знаю моделируем да моделируем Сва Я открываю просто и ввожу Википедии как правило про них всё это прописано собственно говоря здесь описывается да то есть вот проверяющая зависимость

них всё это прописано собственно говоря здесь описывается да то есть вот проверяющая зависимость зависимых каких-то данных Да показывается моделирование как он моделируется показывается как считается статистика как считается статистика как формулируется гипотеза h0 H1 Да точнее Вот как считается статистика как сформулирована гипотеза h0 H1 А дальше всё тоже самое собственно говоря там Альф pv и так далее Всё то есть у вас есть всё чтобы это понять вот когда столкнётся тогда я разберётесь да с

так далее Всё то есть у вас есть всё чтобы это понять вот когда столкнётся тогда я разберётесь да с этой например сто там А ну там какая-то ерунда Сложи что-то придумали новые перемен Да такая ну как правило это ну да Можно и так сказать можно так сказать можно так сказать это мы тоже можем придумать это как Да вы можете своё придумать как с логистической регрессией там можно тоже помножить Вы можете свой может НН и там будет твой статистический тест с твоим моделированием знает Не ну тако Фин

свой может НН и там будет твой статистический тест с твоим моделированием знает Не ну тако Фин Я тоже придумаю конечно ну сейчас так уже на самом деле всё детерминирован новая как бы статистический анализ уже существует давно поэтому я прям не слышал то что бы популяр набирает сечас проговори с популярность набира мощности появляются мощности дают некоторый некоторое преимущество [музыка] Да вот в общем Здесь вы всё найдёте здесь есть ровным счётом те что мы проговорили плюс ещё какие-то другие

общем Здесь вы всё найдёте здесь есть ровным счётом те что мы проговорили плюс ещё какие-то другие статистические тесты это на самом деле даже не далеко не самая такая оптимальная вот эта вот карта но просто их на самом деле не так много почему-то в интернете они все не очень красиво сделаны это более-менее Так ну что собственно говоря мы первый подход к проверке гипотез проговорили есть ещ Один он связан с доверительным интервалами и я предлагаю сечас сделать небольшой перерыв собственно

Один он связан с доверительным интервалами и я предлагаю сечас сделать небольшой перерыв собственно говоря потом уже добить Да давай любой вопрос У меня вопрос по вчерашнему дню если можно Смотри когда мы говорили ония с функцию распределения ф она возвращает вероятность того что там случайная величина примет определённое значение Но в философском смысле эта вероятность равна нулю Ну компьютер за вас считает он небольшой интервал Берт на самом деле который вы просто не видите вот поэтому как бы

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

сейчас рассматривали разные гипотезы там уже зашита какая-то точность Да нет нет мы сами смотрим по пиво Илью всё вопрос Нет Угу спасибо большое так Ну что давай тогда 22 минуты в 32 встречаемся всё перерыв Так ну что давайте возвращаться возвращался такс такс Так ну что ж мы с вами проговорили разные статистические тесты что они проверяют так далее Также также иногда бывает точечное оценки недостаточно Ну то есть знаете типа утверждать что прибыль увеличилась а увеличилась насколько точно не

Ну то есть знаете типа утверждать что прибыль увеличилась а увеличилась насколько точно не знаю Можно конечно указать число но не факт что как бы всё будет хорошо например в генеральной совокупности среднее равно пяти а не 52 не 57 не 515 есть том чтобы строить интервальные оце чтобы строить интервальную оце и Давайте собственно говоря попробуем с вами это сделать Ну тут в принципе у меня для распределения для Т распределения Давайте сразу к т распределению перейдём как бы в принципе смысл один

для Т распределения Давайте сразу к т распределению перейдём как бы в принципе смысл один и тот же [музыка] так да поехали вот такая вот у нас с вами история опмо Лав даже об И самое главное что стандартное отклонение если неизвестно то надо использовать Т доверительный интервал из чего он состоит это на самом деле всё выражается ровным счётом из того что мы с вами проговорили выше Если вы просто введёте в например доверительный интервал для среднего в Википедию то вы собственно говоря увидите

введёте в например доверительный интервал для среднего в Википедию то вы собственно говоря увидите как эта формула выводится в чём в чём её суть смотрите вот Давайте на каком-нибудь примере Давайте на каком-нибудь примере вот предположим предположим У меня есть кубик да на кубике у нас с вами Какие значения возможны 1 2 3 4 5 и 6 правильно Давайте этот кубик подбросим с вами какое-то количество раз здесь у меня это обычный лист Я бы мог это через распределение создать но я создам немножко

раз здесь у меня это обычный лист Я бы мог это через распределение создать но я создам немножко по-другому чтобы под другим углом вы именно на код посмотрели есть метод NP Random Choice который позволяет взять случайное число Ну вот например то есть это эквивалентно тому что я подбросил кубик представили вот а далее Далее далее Далее Ну давайте его подкинем с вами сколько Давайте подкинем его с вами 10 раз 10 раз далее что мне ещё здесь нужно собственно говоря если я укажу сай равно n то вот

вами 10 раз 10 раз далее что мне ещё здесь нужно собственно говоря если я укажу сай равно n то вот они у меня 10 подбрасывания Ну как бы е Наре равно но он по умолчанию стоит что ну вообще может выпасть две единицы Вот мои подб назовём это ти моя То есть выборка Да чаще У нас вот этого нету как раз таки вот этого нету а есть выбо и по выборке надо делать-то значение какой-то вывод вот у меня получилось sle 3.3 Можно конечно как бы выдвинуть гипотезу что средне на кубике 3 с по и скорее всего мы

sle 3.3 Можно конечно как бы выдвинуть гипотезу что средне на кубике 3 с по и скорее всего мы останемся в АНО А есть другой способ это построить доверительный интервал Давайте его с вами соберём Итак собственно говоря вот эту часть Я уже посчитал Мне нужна теперь вот эта часть что нам нужно что нам для неё нужно Да как в кулинарном рецепте начнём по порядку идти стандартное отклонение Давайте его так и назовём как-нибудь я его назову или просто считаем можно указать Ну выборка у нас с вами есть

так и назовём как-нибудь я его назову или просто считаем можно указать Ну выборка у нас с вами есть Я вообще могу это назвать SE я вам вчера это говорил стандартная ошибка это стандартное отклонение делённое на ре N стандартная ошибка среднего называется всё вот она у меня появилась далее вот эта вещь Это когда вы увидите такое обозначение что буковка а снизу как бы индекс какой-то это называется квантиль то есть это прописано Здесь всё у меня квантиль вот такого вот уровня то есть мне нужно у

квантиль то есть это прописано Здесь всё у меня квантиль вот такого вот уровня то есть мне нужно у моего Т распределения взять квантиль уровня 1 мину Альфа пополам А давайте это сделаем так Ну я назову это квантиль так и назову Мне нужно взять Т распределение нужно взять N ми о степень свободы и взять квантиль уровня 1 ми Альфа де 2 вот так вот получается какая-то история Теперь давайте наом это целиком Дельта назовём целиком Дельта Дельта у меня это вот эта вся вещь её называю Дельта

наом это целиком Дельта назовём целиком Дельта Дельта у меня это вот эта вся вещь её называю Дельта подставляю Дельта равно стандартная ошибка умножить на умножить на квантиль всё умножить на квантиль и тогда Теперь я могу построить доверительный интервал доверительный интервал е раз будет иметь вид Вот вы сред вы Поли на самом деле он будет от минус Дельта до плюс Дельта вот такой вот давайте это выведем на экран для этого что мне нужно сохраню это вот так sle me и пропишу сэл пропишу sle me

выведем на экран для этого что мне нужно сохраню это вот так sle me и пропишу сэл пропишу sle me минус Дельта и sle mean плю Дельта вот собственно говоря получился диапазон значений То есть а что мы с вами на данный момент получили мы с вами получили следующую историю что реальная средняя генеральной совокупности откуда пришла эта выборка в данном случае наш кубик лежит диапазоне от 1,61 до 4,98 68% одна Сигма это 68 Нет этот 95 Вроде это 955 на же Альфа задана была на 5% за да да да Хорошо

68% одна Сигма это 68 Нет этот 95 Вроде это 955 на же Альфа задана была на 5% за да да да Хорошо Давайте я вот здесь ещё подпишу Альфа равно 0.05 сейчас только у меня поменяется доверитель Интер взяли одну сигму там в этом Дельте Мы же квантиль взяли Нет ну как бы это не совсем то это не совсем то это близко к тому что ты говоришь но я сейчас как бы не буду раскручивать э мыс чтоб не запутать Если хочешь поня как это произошло вот можеш на Википедии посмотреть статью вот как выводится эта

Если хочешь поня как это произошло вот можеш на Википедии посмотреть статью вот как выводится эта формула здесь надо понимать что есть левая и правая границы так вот с вероятностью 95 Ну доверительный интервал доверительный интервал называют Альфа доверительный интервал то есть Альфа - это ошибка природа А мы здесь в обратную сторону говорим Да то есть сколько вероятность не совершить то есть с вероятностью 95% реальное значение здесь а реальное значение среднего лежит вот в этом диапазоне

с вероятностью 95% реальное значение здесь а реальное значение среднего лежит вот в этом диапазоне собственно говоря поэтому как бы ну мы здесь бы в какой гипотезе с вами остались скорее АНО Да потому что 3 с по накрыли А значит у нас недостаточно основания утверждать что недостаточно оснований утверждать [музыка] что что кубик нечестный тогда следующий У меня к вам вопрос Если я увеличу размер выборки Что произойдёт с доверительным интервалом уменьшится уменьшится Да он будет уменьшаться в

выборки Что произойдёт с доверительным интервалом уменьшится уменьшится Да он будет уменьшаться в силу просто закона больших чисел правильно Всё верно Вот это собственно говоря будет уменьшаться потому что в знаменателе стоит выс дотель интервал Уменьши попробуем вот он сузился опять с вероятностью 95% мы лежим здесь пощу можно взять ещ больше Понятно Чем больше тем мы сильнее сужаем знаете тоже серединку вывести потому что у нас симметрично относительно вот этой истории то есть тут просто

серединку вывести потому что у нас симметрично относительно вот этой истории то есть тут просто выборка так получилось что мы попали прямо в серединку в серединку тогда такой у меня к вам вопрос ещё один будет ещё один а если я Альфу увеличу Ну точнее Давайте хорошо Альфу умень есть ять [музыка] уреня проце доверительный интервал он будет уменьшаться или увеличиваться увеличиваться увеличиваться Абсолютно верно Это даже логично да то есть если я хочу меньше ошибаться доверительному интервалу

Абсолютно верно Это даже логично да то есть если я хочу меньше ошибаться доверительному интервалу нужно расширяться Давайте попробуем подставляем сюда Альфу понятно что как бы размер выборки у нас влиял на вот этот множитель в Дельте а собственно говоря Альфа будет влиять на вот этот множитель в Дельте итогов получается интервал расширился не так значительно но расширился Если вы авантюристы или задача позволяет вам рисковать Вы можете поставить Например я готов на 40% ошибаться Вот то есть

задача позволяет вам рисковать Вы можете поставить Например я готов на 40% ошибаться Вот то есть интервал из этого очень сильно судится То есть у меня будет Более точная оценка но я в голове всегда должен держать мысль что у меня риск ошибиться 40% 40% 40 конечно никому не нужно но здесь нам пове в может и не произойти вот здесь не повезло например да 40% попали видите накрыло Нет не видим Ну с по середина кубика она не попала в этот [музыка] интервал мы упа но при этом как бы стандартный

с по середина кубика она не попала в этот [музыка] интервал мы упа но при этом как бы стандартный доверительный интервал пятипроцентный он накрывает и всё в порядке В поря ошибится Да есть доверительный инвал примерно тоже самое что и ва типа отображает ти насколько можем ошибиться или что-то я не до конца понял что он именно он показывает интервальную оценку те доверительный интервал он похо на Аль ты выстав 5% зону так принятия решений чтобы ошибка не происходила 5% А здесь доверительный

на Аль ты выстав 5% зону так принятия решений чтобы ошибка не происходила 5% А здесь доверительный интервал он опять за тебя решение не принимает он тебе говорит что с верностью 95% средняя генеральной совокупности или иначе говоря истинное матожидание кубика в нашем случае лежит от 333 до 354 можно вот это убрать если это путают вот так вот ну тоже есть же да Он какой-то Библиотечный Да да да а что а что он возвращает Ну он Верт нижнюю верхню границ и мы тогда проверяем и там наш этот гипоте

что а что он возвращает Ну он Верт нижнюю верхню границ и мы тогда проверяем и там наш этот гипоте но часто бывает такое мы внедряем какую-то историю которая должна повысить прибыль Да предположим Ну или выручку у нас была выручка до и выручка после мы можем почитать говоря статистику их разницу ЕС положите области я могу утверждать что я точно получил положительный эффект класс да но для этого надо знать распределение статистики То есть тут как бы не гарантировано здесь-то для выборочного

надо знать распределение статистики То есть тут как бы не гарантировано здесь-то для выборочного среднего мы знаем распределение а для разницы двух вырученные неточные показания Вот но вопросы здесь есть какие-то Ну в принципе лёгкая штука на самом деле В каком случае его использовать А в каком случае можно пропустить как то и то запустить ком они используют то есть при при построении доверительного интервала у нас будет гипотеза что вот среднее оно принадлежит этому значению диапазону

интервала у нас будет гипотеза что вот среднее оно принадлежит этому значению диапазону альтернатив что прилежит [музыка] средня 3 с по против среднего не 3 с по всё хорошо и соответственно в данном случае как бы мы попали в А мы попали в АНО но собственно говоря вот всё что мы с вами проговорили всё это имеет некоторый недостаток Да выборо средня там доля да или про акту шки безусловно но иногда бывает А что если вы хотите собрать какую кастомную метрику это эквивалентно тому что собрать

бывает А что если вы хотите собрать какую кастомную метрику это эквивалентно тому что собрать кастомную статистику её же вы распределени не знаете правильно Вот ты знаешь как синус выбра среднего распределён Нет я не знаю вот в этом-то и проблема да то есть мы этого зна ИС три [музыка] метрики должны отражать суть задач Вот Но тем не менее как бы они иногда бывают очень сложные большие они бывают там взвешивая что-то и там уже нельзя утверждать выборочно средне я по Центрально пределе тереме

там взвешивая что-то и там уже нельзя утверждать выборочно средне я по Центрально пределе тереме знаю что оно нормальное и вот это всё берётся как следствие Центральной определенной теории и как бы понятно что это всё хорошо но вот отходишь в сторону могут возникнуть проблемы могут возникнуть проблемы просто дать неточные результаты В таких случаях как бы есть метод бутстрап бутстрап Ну такой плотненький плотненький метод и очень очень хороший на самом деле идея бутстрап она в корне отличается

плотненький метод и очень очень хороший на самом деле идея бутстрап она в корне отличается от того что мы с вами проговаривать вообще выше вот выше Мы всегда базировались на какое-то теоретическое знание мы доверяли статистика что вот эта статистика распределена хи квадрат вот это как нормальная вот это как Т распределение вот это там как ещё какое-то распределение бутстрап говорит идея бутстрап Да точнее бутстрап статистики я бы сказал заключается в том что а давайте эмпирически получим

Да точнее бутстрап статистики я бы сказал заключается в том что а давайте эмпирически получим распределение нашей статистики Каким образом это можно сделать Каким образом это можно сделать А давайте тоже самое собственно говоря вот здесь я просто поставлю доверительный интервал пометку доверите зна с вами как сделаем в одной [музыка] ячейке [музыка] сгенерирует уже была в общем виде чтобы нам посмотреть с вами два случая вот доверительный интервал всё собственно говоря мы его здесь получили и

с вами два случая вот доверительный интервал всё собственно говоря мы его здесь получили и теперь давайте сделаем с той же самой выборкой попробуем построить бу доверительный интервал есть так и пропишу доверительный интервал Итак вернёмся ещё раз в чём его суть его суть заключается в том что а Давайте попробуем утверждать что наша выборка с вами вот которая у меня есть это как бы некий прототип генеральной совокупности представили Ну такая Генеральная совокупность и тогда мы попробуем с вами

генеральной совокупности представили Ну такая Генеральная совокупность и тогда мы попробуем с вами много раз отсюда взять вы взять выборку посчитать вот эту статистику которая здесь получилась и далее получить эту статистику Как построить её гистограмму и получить эмпирическое распределение до этого я всегда статистика брал в теории к статистика или что-то ещё а тут я прямо эмпирически это было бы эквивалентно если бы например там не знаю мы бы с вами были выборкой все миене совокупность

было бы эквивалентно если бы например там не знаю мы бы с вами были выборкой все миене совокупность выборок того же причём самое главное понимать того же самого размера А как Ответьте мне тогда на вопрос как можно взять например вот нас с вами здесь 11 человек сколько вариантов из 11 человек взять 11 человек один один да А как я тогда здесь много получу выбо повторение Абсолютно верно то есть бутстрап - это выборки с повторением а это значит что в первую выборку могло получиться такое что я не

- это выборки с повторением а это значит что в первую выборку могло получиться такое что я не попал а например Люба попала два раза да Я посчитал средний там если мы бы измеряли рост Да предположим средний рост соответственно здесь во второй выборке Наоборот я попал толубай не попал да там не знаю Серёжа не попал а там Саша попал дважды Настя попала дважды Ну в общем вариантов это как бы считается легко сочетание с повторениями Но их очень много поверьте их очень много и никаких сильных проблем

легко сочетание с повторениями Но их очень много поверьте их очень много и никаких сильных проблем это не вызовет вот хорошо собственно говоря Давайте попробуем это проделать Давайте попробуем это проделать с [музыка] вами сейчас я запущу давайте а равно пусть будет 1000 это ну количество бустра количество бутстрап выборок и что я делаю поехали R напоминаю вот этого у меня Представьте что у меня теперь этого нету всё то есть у меня есть только выборка У меня есть только выборка я беру именно из

этого нету всё то есть у меня есть только выборка У меня есть только выборка я беру именно из выборки то есть опять проделывают же историю Random Choice но беру из этой выборки выборку тогоже самого разме не меняется Да сайз вообще надо указывать по факту сайз равно надо указывать lle вот так да В общем виде чтобы было того же самого того же самого размера Вот и Ну давайте так и назовём это bootstrap sample sle всё сделали теперь надо будет куда-то сохранять то есть Я посчитал я всё время Беру

sample sle всё сделали теперь надо будет куда-то сохранять то есть Я посчитал я всё время Беру Беру Беру Беру из из выборки которые у меня есть и давайте куда-то это сохранять но назовём это мы всё-таки строим для среднего Поэтому я буду средний записывать собственно говоря когда мы это посчитали Я в Min напишу а me то upend и вот то что по выборке получилось точками всё Вот они получили значения Теперь я могу построить Теперь я могу построить Давайте только это в n я сделаю чтобы вот так не

Теперь я могу построить Теперь я могу построить Давайте только это в n я сделаю чтобы вот так не спамить ми равно точ [музыка] и sample вот так вот хорошо и теперь sns вот такое распределение у нас получилось с вами это эмпирическое распределение понимаете о ЧМ Я говорю или [музыка] потеряли Что значит слово эмпирическое Эри значит получен за счёт эксперимента хорошо то есть полученное по выборке что из нашей же выборки кото у на есть из просто рандомно и а а ну всё этова понял только смысл

что из нашей же выборки кото у на есть из просто рандомно и а а ну всё этова понял только смысл этого не понял А что мы сделали понял смысл в том что мы получим ещё раз Представь это вот здесь статистика у меня лёгкое выборочно среднее Я знаю её распределение А если ты создал какую-то кастомную сложную статистику ты её распределение наверняка не знаешь и использовать теоретические методы Т ТСТ з тест и прочее может быть э как бы неправильно а бустра позволяет вообще в общем виде посчитать Для

тест и прочее может быть э как бы неправильно а бустра позволяет вообще в общем виде посчитать Для любой статистики Вот что тебе в голову любую метрику придёт посчитать Вот ты с помощью бу сможешь восстановить её распределение а там где я знаю распределение там я могу выставить квантили и получить доверительный интервал для своего реального [музыка] значения тго не имеет очень чёткого теоретического доказательства но имеют очень хороший эмпирический практический я правильно по что мы по сути

доказательства но имеют очень хороший эмпирический практический я правильно по что мы по сути дела создаём огромное количество синтетических выборо на осно выбо и сред по Рим радение любо любую статистику Ну в данном случае в данном случае данном случае да случае Но бустра вам не позволит подставить то что он позволит интервальную То есть как бы мы сейчас можем построить доверительный интервал Вот например как это нам сделать нам вот у меня есть минс Давайте собственно говоря если я хочу

Вот например как это нам сделать нам вот у меня есть минс Давайте собственно говоря если я хочу построить девяносто пятипроцентный доверительный интервал да Ну давайте значит ошибка 5% риск Тогда я могу Давайте поста назовём это типа назовём это Нижняя и Верхняя граница вот так вот И для этого я возьму метод ум есть квантиль и скажу что вот у этой выборки средних нужно взять квантиль уровня Нижний получается как справа Взять квантиль ой слева точнее что нужно мне туда загнать Альфа пополам в

получается как справа Взять квантиль ой слева точнее что нужно мне туда загнать Альфа пополам в мину а а ну что ж Давайте выведем и посмотрим что у нас получилось у нас получилось вами 332 3538 немножко отличается от этого но совсем немного кстати обратить внимание это потому что ну эмпирическое изменение вс-таки есть Но это ерунда изменения могут быть сильными если бы какой-то метрики который имеет вообще непонятно Какое распределение Вот именно сама Метрика Непонятно какое распределение вот

вообще непонятно Какое распределение Вот именно сама Метрика Непонятно какое распределение вот очень жёсткой штукой объективно Это очень крутая штука Я советую с ней разобраться понять как она устроена потому что она Ну покроет большой Спектр задач и Это идея буп она ещё используется и в машинном обучении и много где то есть как делать данные из воздуха у него есть свои проблемы мы сечас о них поговорим но как-никак хорошая эмпирическая альтернатива про метрики вот на ум приходит медиана и так

но как-никак хорошая эмпирическая альтернатива про метрики вот на ум приходит медиана и так далее какие какие статистики Как сказать полезно на практике использовать просто чтобы от задачи зависит есть средние медианы там дисперсии мо ква А есть вобще клиентов Да как вы её оцифровать Я не знаю разная компания по-разному это оцифровывать и для них точно также можно это же тоже случайная величина у меня была лояльность какой-нибудь который сложно построить доверительный интервал для нса никаких

у меня была лояльность какой-нибудь который сложно построить доверительный интервал для нса никаких проблем нет И самое главное там ну да Сейчас я сделаю Вот давайте медиана а Нон не имеет Медиа ме медианы часто используют что медианах как бы это очень логичная штука правильно часто вот смотрите как распределена медиана Вот если бы вы запустили тест то вы бы утверждали что у Вас как бы медиана имеет нормальное распределение а как вот вот на самом деле она имеет такое распределение но тут для

имеет нормальное распределение а как вот вот на самом деле она имеет такое распределение но тут для дискретных Велин е сложнее как бы не особо поможет Но в целом чтобы вы понимали что статистика может иметь вообще другое распределение Совершенно не обязательно нормально как имеет это выборочное средне Да [музыка] Серёжа Я уже забыл что хотел спросить сейчас а я правильно понимаю что страп он помогает нам не ну типа не предполагать Какое у нас распределение а просто эмпирически смотреть такое

нам не ну типа не предполагать Какое у нас распределение а просто эмпирически смотреть такое Ага вот сл да Даня ну не распределение переменно распределение статистики Ну распределение статистики Да да у не вопрос чисто вот по вот этому коду типа 1000 раз находим среднее из тысячи у да да и потом заполняем его типа в список Ича вот эти столбики Ну график Да да да а О'кей А почему такая засада была с медианой средняя нормальная медиана какая-то ерунда Ну да просто медиана так Сея ждёт это средняя

с медианой средняя нормальная медиана какая-то ерунда Ну да просто медиана так Сея ждёт это средняя реагирует на каждое изменение Угу Да медиана нет знаете анекдот Когда в бар заходит Бил Гейтс все в среднем становятся миллионерами Угу сред очень реагирует на каждое минимальное изменение а медиана бы зал бы ВЛГ ба медиане было бы фиолетово нал в данном случае да Поэтому у медианы всего три возможных варианта Там они реагируют на эти изменени да са а вот мне интересно как к примеру построить

варианта Там они реагируют на эти изменени да са а вот мне интересно как к примеру построить доверительный интервал для условно экспоненциального распределения есть также или это другая логика не абсолютно та же самая я понял [музыка] спасибо Вот Ну в принципе всё нопа есть минусы Какие во-первых Если вы попали сразу у вас выборка смещённая относительно генеральной совокупности то её бу рать равно на самом деле как бы уже работать с сильным смещением понимаете м я гово представте у меня кубик 1

на самом деле как бы уже работать с сильным смещением понимаете м я гово представте у меня кубик 1 2 3 4 5 6 да 1 2 3 4 5 6 это реальное значение я возьму и наткнулись до кода bootstrap требует генерации выборок и это ладно когда у нас игрушечные выборки размером тысячи если речь идёт о многомиллионных выборках да и их ещё миллион раз будут трепи Ну как бы уже хуже всё происходит да то есть как бы здесь вот Ладно у меня компьютер ещё не задумывается считает более-менее быстро Хотя нет Вот

как бы здесь вот Ладно у меня компьютер ещё не задумывается считает более-менее быстро Хотя нет Вот видите уже 100.000 для него проблем это время А это это ещё небольшие выборки которые могут как бы возникнуть поэтому бустра есть это как бы не Панацея от всего е ограниченные мощности то могут возникнуть пробле есть конечно там решение это проблемы новки бустра всякие но как бы просто вот именно самом помните что вот у него есть ограничения выборок Много брать равно нужно врем на это то есть

самом помните что вот у него есть ограничения выборок Много брать равно нужно врем на это то есть представте [музыка] конечно на миллиардный чисел смещения очень маленькие там может и не понадобится это ну это такой некий компромисс просто как бы бутстрап он не самый быстрый но при этом он принципиально по-другому позволяет решить задачу то есть открывает нам большой-большой Горизонт вообще и фантазию То есть если вы осознаете это это сверхсильный инструмент вообще любую статистику которая вам

То есть если вы осознаете это это сверхсильный инструмент вообще любую статистику которая вам в голову придёт Можно попробовать зать Вот и как вы видите не сильно то он отличается для от теста да то есть получилось вообще фактически то же самое какая-то статистическая магия там внутри происходит намыли что Ну тут Тут ещё наверное этот алгоритм NP Random Choice влияет как мы выбираем полно случайного числа нельзя сгенерировать [музыка] Согласно есть в жизни что-то случайное полностью как

случайного числа нельзя сгенерировать [музыка] Согласно есть в жизни что-то случайное полностью как [музыка] думаете вот этот вопрос открыто не остаётся всё ли описывается законами Мы просто этого не знаем или есть Ну там что-то вроде броское движение в физике считается не объяснимо но в целом как бы как компьютер заставить полностью случайное число сгенерировать вы даже если свою голову попробуете это сделать у вас не получится Это всё равно будет псевдо случайные числа у вопрос Короче насчёт

это сделать у вас не получится Это всё равно будет псевдо случайные числа у вопрос Короче насчёт то что ограничение тогда в таком случае что использовать если например там дофига строк и насчёт того что типа открывает больше возможно я до конца не понял потому что по сути у на примерно она вышли И в чём Ну типа в чём вот такой ну я уже четвёртый раз говорю вы потом пересмотрите просто я понимаю что тяжело сейчас всё это уложить в голове тест требует Ой вот точнее Вот это доверительный интервал

тяжело сейчас всё это уложить в голове тест требует Ой вот точнее Вот это доверительный интервал он для выборочного среднего он требует он знает распределение как распределено выборочно среднее а бутстрап позволяет считать для произвольных статистик я я тебя я именно тебя спрашивал помнишь синус X как распределён ты знаешь Нет я не знаю а бустра может в этом нам помочь понимаешь у понял спасибо а ну как быт доверительный интервал уже не сможет пото что он именно для того что распределено по Т

а ну как быт доверительный интервал уже не сможет пото что он именно для того что распределено по Т распределению или по нормальному закону понял вот в ЧМ дело был вопрос но отпал даже вот Везде где может приме распределение Понятно важна часть работы с данными визуализация важна проверка гипотез очень тонкая процедура очень тонкая процедура Давайте немножко посмотрим что у вас сегодня по заданиям кто-то может быть уже вчера приступил к ним ну собственно говоря смотрите здесь [музыка] кто вчера

кто-то может быть уже вчера приступил к ним ну собственно говоря смотрите здесь [музыка] кто вчера в принципе Расписал может уже пользоваться готовыми решениями и кто уже уверен что он понял как это работает это больше как предложение вчерашнего дня для полного закрепления Да гипотеза до гипотеза среднем доверительный интервал дальше уже задания идут такие Знаете по лайку чисто как бы на релаксе порешать немножечко для закреп са просто Кто хочет потренировать написание классов это вам ещ

порешать немножечко для закреп са просто Кто хочет потренировать написание классов это вам ещ пригодится не раз не два Можете написать свой класс стат тестер который позволит в общем виде возможно решать строительные интервалы гипотезы там всё что угодно Да Сержа не слышно тебя А чем вторая задача отличается от вчерашнего как будто слово в слово Действительно это она же да да да ладно Просто иногда не успевают вторую разобрать вот если уже всё понял ты можешь вот это просто убрать и запустить

не успевают вторую разобрать вот если уже всё понял ты можешь вот это просто убрать и запустить тест и ничего против я не имею совершенно Хорошо если что-то не дописали то можете Дописать да Настя А по поводу последней задачи с ооп вопрос сейчас в данный момент ооп пока это очень тяжело там для меня написать класс поэтому вопрос на будущее это там в Лайф кодинг на на интервью на работу ожидать что они могут потребовать написать что-нибудь подобное или нет где-нибудь могут ожидать Ну я не могу

они могут потребовать написать что-нибудь подобное или нет где-нибудь могут ожидать Ну я не могу тебе в общем виде сказать но были случаи когда спрашивали Значит значит что можно ожидать Ну вероятность что это именно класс написать Я думаю что вероятность этого события небольшая У но что-то простое написать могут потреб Угу то есть мы там сами придумываем я возьму там допустим корень кубический из там для статистики если хотите можете в общем виде то есть проявляйте какие-то свои творческие

из там для статистики если хотите можете в общем виде то есть проявляйте какие-то свои творческие позывы Я в целом как бы к этому только положительно отношусь вот здесь надо минималка сделать или статистику реализовать полностью Да именно как нагрузки с точки зрения статистики Она имеет Ну не принципиально новую а нагрузку с точки зрения кода потому что как бы классы Ну на самом деле на нашей фазе в меньшей степени это придётся А вот вторая фаза там готовьтесь там будет много классов у и

фазе в меньшей степени это придётся А вот вторая фаза там готовьтесь там будет много классов у и соответственно пока есть возможность надо разминаться правильно чтобы в тонусе быть всегда Угу держи нас в тонусе разминая нас перед второй фазой Минай меня полностью [музыка] Так ну что вопросы ещё какие-нибудь до вчерашнего дня остался вопрос как раз по задачки которая здесь дублируется и вспомню вчера спрашивал не до конца понял разницу Т распределения И нормального Т распределение оно же тоже

вчера спрашивал не до конца понял разницу Т распределения И нормального Т распределение оно же тоже нормальное ну по факту Да но на больших выбрать Ну смотри давай возьмём вот такую историю Вот смотри представим что выборка 10 элементов представил Ага X = NP то Space 3 Сигма я сделаю Ну даже ладно 3 С5 Сигма ми 3 С5 35 1 точек И сейчас построим графики сначала построим графики нормального распределения 0 так да Вот и давай ещё также построим Т распределение Т распределение напоминает Ну можно

0 так да Вот и давай ещё также построим Т распределение Т распределение напоминает Ну можно указать можно ми1 без разницы собственно гово видишь Разница есть но она очень маленькая вот если мы выборку возьмём больше то разница уже не вид поэтому все бы на Тиват отождествляют в реальности выбо из элементов это вобще ниче есть конечно исключительные задачи где просто Ну например лечение редкого заболевания Да оно на той редкое что очень сложно найти элементы выборки да Или когда один элемент

заболевания Да оно на той редкое что очень сложно найти элементы выборки да Или когда один элемент выборки стоит оного года да то есть как бы тогда да но вот если уже даже говорю взять 20 то есть ну уже фактически не есть малека включение у себя в голове держишь что это фактически одно и то же О'кей значит я просто буду искать ошибку потому что мой график оказался правой частью только лишь нормального распределения и вот тут тут я не не понял в чём проблема вчера то есть вот у кого вчера

нормального распределения и вот тут тут я не не понял в чём проблема вчера то есть вот у кого вчера получилось по-моему Бул говорил что там Небольшая разница получилась с т тестом в первой задаче А мы по что считали через нормальное а там через т поэтому там вот седьмой знак отличается в силу вот разницы вот этих двух графиков которые у меня сейчас здесь изображены Да США да В сегодняшней задаче там был момент про выборку ДТИ элементов вот а по-моему в слайдах лекции было для выбора Который

там был момент про выборку ДТИ элементов вот а по-моему в слайдах лекции было для выбора Который больше три Вот и я не помню всё условно всё условность как бы ну я для себя в голове держу 20-30 элементов То есть тут не хороо нет такого едино правильного вообще в анализ данных вообще есть мало что едино правильно анализ данных - это в целом такая вещь Она очень сильно связана со случайностью А поэтому имеет в себе очень много эврик То есть никто не может наверняка сказать что вот ровно 20

А поэтому имеет в себе очень много эврик То есть никто не может наверняка сказать что вот ровно 20 элементов на выборке поэтому как бы ну есть такие условности где-то больше ДТИ где-то больше 30 где-то больше п я вот 20 30 и 10 держу в голове выборки меньше ДХ вообще опасно анализировать на самом деле что ещё риск слишком маленькие выборки смещения очень большие и получать точные оценки сложно просто напросто хорошо большие данные большое богатство но нашего с вами века можно да спросить Просто

напросто хорошо большие данные большое богатство но нашего с вами века можно да спросить Просто вы меня немножко концептуально запутали под конец всё было понятно пока пока Костя не задал вопрос свой смотрите я поняла Так что нормальное распределение это тип распределения случайно нев вот когда мы говорим про Т распределение это распределение которое строится по какой-то по какой-то выборке да вы говорите О том что оно то что мы можем так Как задать вопрос правильно короче вот у меня получилась

говорите О том что оно то что мы можем так Как задать вопрос правильно короче вот у меня получилась Путаница нормаль когда сравнивают с распределени то есть мы можем просто если на простом уровне понимания просто Т распределение оно очень похоже на нормальное тогда я принимаю [музыка] у так есть то с отве дагу Ну ладно спасибо Вот Ну в принципе что и давайте договоримся так смотрите можно сегодня начать ревю не буду никакой Файлик составлять но особенно те кто идут локомотивом вперёд Да кому

начать ревю не буду никакой Файлик составлять но особенно те кто идут локомотивом вперёд Да кому Граунд позволяет это сделать Я думаю что вы уже примерно для себя сформировали какие-то общие паттерны Да и понимать что к чему может быть какие-то вопросы у вас есть Вы можете мне написать в личку мы с вами договоримся о времени завтра я создам небольшой списочек в который можно будет себя вписать и со мной поговорить но должна быть конкретика Да что времени ограничено я один вс-таки и 20 минут

и со мной поговорить но должна быть конкретика Да что времени ограничено я один вс-таки и 20 минут примерно на человека вопрос формулируйте чётко то есть чтобы размытости не было никакой Да и не было там блин я не понял Давай заново всё объясняю у вас есть лекции у вас есть чаты а у вас есть задания У вас есть сабмишены как бы если что-то непонятно то надо быть более Ну более конкретно Да Ани А не размыто то есть как бы уважаем друг друга и время друг друга Вот и абсолютно нормальная практика

не размыто то есть как бы уважаем друг друга и время друг друга Вот и абсолютно нормальная практика Если вы понимаете что у вас нет никаких вопросов и вам лучше походить или что-то может дополнительно спросить у меня что вам подсказал интересное порешать то можно сделать так да то есть если никаких вопросов не возникло то никаких проблем нет ну или ещё Если есть вопросы которые можно решить в чате Если есть вопрос которые можно расшить можно чать как правило на код ревю вопросы с кодом связаны

Если есть вопрос которые можно расшить можно чать как правило на код ревю вопросы с кодом связаны то есть расписанию или гибко по пятницам Да по пятницам Ну четверг пятница че пятниц Потому что если все 10 человек придут то это 200 минут это больше 3 часов времени я не уверен что у меня так хорошо получится Но у меня уже есть там доверительные интервалы сколько людей приходит реально на ревью неко насмотренность Сами понимаете уже чучуть знаю как здесь поступиться правильно скажем так так

неко насмотренность Сами понимаете уже чучуть знаю как здесь поступиться правильно скажем так так остались ли вопросы какие-нибудь ко мне какое время просто напишите мне в личку Ну как бы во второй половине дня мы это будем делать после обеда обеда я не смогу Я думаю вы тоже не сможете Всё тогда давайте приступайте к заданию Всем удачи успехов и фали это слу Спасибо на с пока

Приветик всем О мой бывший вернулся Доброе утро Всем доброе утро будем начинать будем начинать эта неделя у нас с вами будет посвящена математике Лениной алгебры всё что с ней связано будет наверное непростая неделя но в тоже время достаточно интересная В общем всё как обычно так экран мой видно да Угу первые 2 дня понедельник вторник у нас с Вами будут посвящены линейной алгебре так или иначе а среда будет посвящена матанализу четверг пятница уже будет дение в ML мы будем писать свои алгоритмы

будет посвящена матанализу четверг пятница уже будет дение в ML мы будем писать свои алгоритмы машинного обучения то есть будет такая агрегация вообще всего на самом деле то есть там и статистика и а Линейная алгебра и матанализ и код в общем всего всего-всего Так ну что ж поехали кстати актуальный вопрос какой-то из дней в общем нужно будет на полдня отлучиться в какой-то из дней это в какой лучше каком меньше нагрузки будет завтра наверное м О'кей Так ну что А пойдём опять от меньшего к

лучше каком меньше нагрузки будет завтра наверное м О'кей Так ну что А пойдём опять от меньшего к большему самое ну Линейная алгебра ключевое слово здесь линейное мы будем заниматься так или иначе линейными преобразованиями трансформациями и всё что связано так или иначе с линейность а Линейная алгебра - это про анализ линейных пространств и работу с ними поэтому самое важное и первое определение которое есть - это Вектор Что такое Вектор - это элемент векторного пространства произвольной

которое есть - это Вектор Что такое Вектор - это элемент векторного пространства произвольной размерностью по одному из измерений когда-то вы в все это слышали в школе там или в институте может кто-то Да не знаю нам говорили что вот есть пространство какое-нибудь пусть будет X1 X2 есть какие-нибудь два вектора Ну например Вектор вот такой и Вектор вот такой кани сть Вот это Вектор имеет коорди 3 Вектор имеет координаты 1 полтора вот так ну в нашем случае Вектор всегда будет подразумеваться то

Вектор имеет координаты 1 полтора вот так ну в нашем случае Вектор всегда будет подразумеваться то что выходит с нуля так устроен Data Science Да это не совсем физика Где начало вектора - это точка приложени силы скажем так S всё будет начинаться с 0 поэтому мы Вектор будем однозначно задавать просто координаты конца или или же это можно воспринимать просто как совокупность координат совокупность координат мы с вами наме сталкивались когда подкидывать две монетки И говорили что результатом

координат мы с вами наме сталкивались когда подкидывать две монетки И говорили что результатом подбрасывания будет являться Вектор из двух типа Орёл Орёл Орёл Решка Решка Орёл Решка Решка Вот и с вектором вектор вектор вектор вектор Вы очень много будете слышать Вектор поэтому такое фундаментальное достаточное определение Итак А какие что нам понадобится понятно что не только векторы а операции над ними первая операция очень тривиальная ну тут всё тривиальное на самом деле вот ну первая

над ними первая операция очень тривиальная ну тут всё тривиальное на самом деле вот ну первая операция сумма двух векторов Если два вектора складываются между собой то это эквивалентно тому что нужно сложить соответственные координаты то есть вектора разной размерности складывать между собой нельзя а одно и можно вот если у меня вот это вектор А а вот это Вектор B в моём случае то а п B чему У меня [смех] равно 4 2 и 5 да первая координата 2 Тото овате разм то есть мы сложили получается у нас

[смех] равно 4 2 и 5 да первая координата 2 Тото овате разм то есть мы сложили получается у нас вот этот Вектор имеет координаты 31 вот этот имеет 1 полтора да то есть мы сложили соответственные координаты получили как бы первую четвёрку тоже самое сделали со второй координаты получили 2 с по вот далее с разность векторов тоже самое то есть мы просто вычитаем соответственные координаты то есть вектор А ми на вами было бы ВНО случае 205 а нет 2 Ми 2 ми 05 Да Абсолютно верно 2 ми 05 вот далее Что

А ми на вами было бы ВНО случае 205 а нет 2 Ми 2 ми 05 Да Абсолютно верно 2 ми 05 вот далее Что ещё можно делать с векторами вектора можно домново в данном случае это у меня обозначено как лямбда это эквивалентно тому что умножается каждая координата на число то есть мы удлиняем вектор У потому что если мы посчитаем с вами д вектора А это у нас чему два вектора А будут равны 62 62 собственно говоря это было бы эквивалентно 62 Ну то есть гарантировано это где-то вот здесь то есть мы просто

говоря это было бы эквивалентно 62 Ну то есть гарантировано это где-то вот здесь то есть мы просто Вектор растянули в два раза ни больше ни меньше вот что нам подо с мим понадобится вектора Иногда вы услышите что это называет норма вектора Вот её обозначение обозначение И на самом деле на самом деле Вот давайте посмотрим ещё раз на вектор А вот как найти Вот это расстояние теорема Пифагора Да теорема Пифагора школьно действительно что гипотенуза равна сумме квадратов катетов Ну извлечь корень

Пифагора школьно действительно что гипотенуза равна сумме квадратов катетов Ну извлечь корень из неё Да сумма квадратов катетов равна квадрату гипотенузы получается что в нашем случае длина вектора А буде ре 10 22 нет а нет там там 10 дада да толубай Прав √10 да √1 3к п 1К и всё это под корнем Да того равно 10 √1 вот но А смотрите мы с вами не будем работать в 2D пространствах более того пространство иногда пространство работы иногда измеряется миллионами Да и нарисовать уже возможности не

иногда пространство работы иногда измеряется миллионами Да и нарисовать уже возможности не будет Поэтому как бы Но логика математическая Она проецируется из 2D в миллион D поэтому операции на самом деле сильно не меняют своё свойство хоть и визуализировать уже возможностей нет Поэтому если бы у меня было трёхмерное пространство как в примерах Да вот здесь везде ой-ой-ой то это было бы эквивалентно тому что мы складываем квадраты всех сторон И извлекаем корень и извлекаем корень вот а далее

тому что мы складываем квадраты всех сторон И извлекаем корень и извлекаем корень вот а далее Далее далее Что нам ещё понадобится можно умножать два вектора друг на друга можно умножать два вектора друг на друга а ну как бы есть вообще две разновидности скалярное произведение векторное произведение но нам нужно будет именно только скалярное произведение как самая частая операция скалярное произведение двух векторов вектора А и вектора B это длина вектора первого умножить на длину вектора

двух векторов вектора А и вектора B это длина вектора первого умножить на длину вектора второго умножить на косинус угла между ними Ну давайте какой-нибудь тут Я неудачный пример подобрал углы не очень удобные вот где-нибудь здесь ещё раз нарисую пусть у меня будет Вектор пусть у меня будет Вектор вот один сюда идёт вот такой вот это вектор А вектор А он имеет координату 1 пото сделаю марке Вот и пусть будет Вектор B вот Вектор он у меня будет иметь координату 1 тогда скажите пожалуйста

Вот и пусть будет Вектор B вот Вектор он у меня будет иметь координату 1 тогда скажите пожалуйста скалярное произведение вектора А и Б В данном случае у меня чему равно можете вслух как бы не сразу ответ давать чтобы все поняли что дела су длина вектора А у нас Чему равна о а это вот этот Нижний длина вектора у нас Чему равна потере Пифагора и умножить на косинус угла здесь над там вот этот угол у нас 45° правильно косинус 45° рад над сразу забега кто не помнит или не знает эту историю

угол у нас 45° правильно косинус 45° рад над сразу забега кто не помнит или не знает эту историю тригонометрию ного вообще нет это на самом деле не особо нужно вот это почти не нужно тут нужно понимать только другую историю смотрите косинус 0 градусо Чему равен ени по косинус Ну градусо равен единиц Да а косинус 90° чему Ну нулю Абсолютно верно Это вот берётся из вот этой вот тригонометрической окружности дагде косинус синус и вот онара Когда у нас угол нулевой косинус равен одному А когда мы

окружности дагде косинус синус и вот онара Когда у нас угол нулевой косинус равен одному А когда мы приходим сюда в эту точку косинус равен нулю а здесь угол 90° А это То есть дата Sci это в принципе применили очень прикладным образом есть такая Метрика которая Как вы видите у меня под пунктом сем косинусное сходство и очень часто мера близости двух объектов в пространстве используют как косинусное сходство вот особенно Очень актуальная История - это в тексте то есть текст рекомендательной

сходство вот особенно Очень актуальная История - это в тексте то есть текст рекомендательной системы там вот прямо конусное сходство очень популярно э используется как такая одна из самых основных метрик чтобы оценить близость двух двух а двух объектов каких-то Ну например не знаю у нас было бы с вами фильм смотрения у вас конечно об этом будет задача сегодня Ну проговорил я сейчас этот момент секунду Давайте вот уберу вот предположим у меня здесь есть такое небольшое пространство и Представьте

Давайте вот уберу вот предположим у меня здесь есть такое небольшое пространство и Представьте что я как бы смотрю насколько мы моя задача построить рекомендатель систему так чтобы человек зашёл захотел посмотреть приятный фильм вечерочка покайфовать соответственно Мы же не на шару ему будем рекомендовать жим в мире два фильма первый фильм и второй Каждый из нас с вами Ну ставил предположим по десятибалльной шкале какую-то оценку Да ну там даже можно взять по пятибалльный Ну и возьмём

по десятибалльной шкале какую-то оценку Да ну там даже можно взять по пятибалльный Ну и возьмём собственно говоря Давайте трёх людей предположим вот толубай да толубай поставил первому фильму вос а второму фильму поставил три Ну то есть второй фильм не очень зашёл да Вот я например сде я посмотре Да я поставил первому фильму едини поставил дев то есть куда-то вот сюда ушёл в данном случае это как бы это будет мой Вектор Да это Вектор будет голубая щ вот так Ну и предположим ещё Костя смотрел Да

бы это будет мой Вектор Да это Вектор будет голубая щ вот так Ну и предположим ещё Костя смотрел Да Костя поставил м кость поставил предположим 72 оценки се первом фильму 2 втором косинус на сходство или косинус угла будет отражать насколько наше телес смотрит в каком-то смысле в одну сторону понимаете о чём я говорю То есть получается что условно Кости и толубай смотрят в одну сторону близко их телес мотре похоже Точнее не телес мотре их Ну вкусовые интересы Возможно да соответственно у Антона

мотре похоже Точнее не телес мотре их Ну вкусовые интересы Возможно да соответственно у Антона оно бы сильно отличалось Ну значит нравятся какие-то другие моменты Там и так и вот косинусное сходство как одна из метрик очень удобно Очень удобно чтобы оценивать эту историю то есть косинус угла показывает насколько два вектора смотрят в одну сторону и мы с вами ещё раз проговорили что если два вектора смотрят в одну сторону угол между ними 0° а косинус нуля с вами - это у нас единица вы мне

вектора смотрят в одну сторону угол между ними 0° а косинус нуля с вами - это у нас единица вы мне проговорили да вот а cos 90° cos 90° вот у Кости Антон достаточно большой угол стремящийся к 90 это было бы эквивалентно тому что у нас косинус на сходство Было бы очень маленьким вот как-то так да Костя а мы S как бы обуславливать Что смотрим только от нуля до единицы сходства или в отрицательные плоскости тоже срезаем и смотрим другие цифры нет от минус одного до одного смотрим миго до одного

плоскости тоже срезаем и смотрим другие цифры нет от минус одного до одного смотрим миго до одного Просто если бы смотри Ноль - это считается что вот если бы у нас с тобой косинус сходство было ноль Это значит что наши интересы тобой друг на друга никак не влияют они не подают закономерности Если бы у нас тобой косинус сст была единица это значит что мы бы с тобой в каком-то смысле смотрели од сторону А если бы у нас тобо коче на сходства стремилась к минус единице Это значит что то что

од сторону А если бы у нас тобо коче на сходства стремилась к минус единице Это значит что то что нравится тебе не нравится мне и наоборот вот может такое получится в яв но есть где-то нормированные данные там от нуля до одного то есть где-то от мину оно до одного где-то от нуля до одного зависит от контекста зависит от контекста Вот например в рекомендательных системах здесь никак не получится отрицательный косинус потому что я максимум какой угол могу получить 90° согласен оценки

получится отрицательный косинус потому что я максимум какой угол могу получить 90° согласен оценки положительные да у меня быстрый вопрос насчёт А и ка Сравни их векторов Да а и счас дойду до этого момен мы с вами остановились здесь посчитали что скалярное произведение ВМ с не достаёт неудобно но оказывается скалярное произведение - это абсолютно математически доказанная История это эквивалентная формула косинусная ой скалярное произведение можно высчитывать тупо через координаты а это значит

формула косинусная ой скалярное произведение можно высчитывать тупо через координаты а это значит что Ну например вот Кость у нас бы имел а получается 72 Вектор да то луба имел бы Вектор 81 А я бы имел а соответственно А я бы имел Сколько сколько ты бы имел 1,9 получается и тогда и тогда как бы скалярное произведение кости луба какое было почему оно равно было по вот этой формуле можно прямо Вот здесь таки приписать то есть кося и то сколько бы это скалярное произведение было бы сколько ну типа

таки приписать то есть кося и то сколько бы это скалярное произведение было бы сколько ну типа 8 на 7 П 1 на 2 да то есть сумма произведения соответственных координат как у нас было там и на теории вероятности мы сталкивались то есть 8х 7 + 1х 2 Итого получается 58 а сколько туда а я забыл умножение просто вот вот 58 Да как бы Для нас это в принципе какое-то эфемерное число мы его не можем однозначно утверждать что это но Сравните например не знаю Антон и толубай у нас сколько бы было бы 17 что

утверждать что это но Сравните например не знаю Антон и толубай у нас сколько бы было бы 17 что существенно меньше правильно говорит о том что ну мы чуть подальше находимся наша как бы история но это именно скалярное произведение скалярное произведение неудобно у нас тем что вот оно кстати в числителе у меня здесь записано не очень удобно Вот эта шкала Да как бы от нуля до бесконечности можно приложить шкалу от нуля до одного и как раз таки это э угла то мы что с вами получим мы получим что как

шкалу от нуля до одного и как раз таки это э угла то мы что с вами получим мы получим что как раз таки вот произведение вот этих координат числителя А в знаменателе длина вектора А вот она и длина вектора правильно это даёт нам гарантированно что будет Ну в данном случае от нуля до одного значения и как бы если посчитаете до считаете то у Кости в этом примере оно будет ближе близко к единице А вот у антоно Кости например будет близко к нулю примерно такая история примерно такая [музыка] история

у антоно Кости например будет близко к нулю примерно такая история примерно такая [музыка] история Нет давайте по порядку в чате вопросы евклидово расстояние это бы если бы я бы нашёл бы вот это расстояние оно тоже используется вам сегодня его нужно будет посчитать как вот это расстояние можно было бы найти Ну в голове до прямоугольного треугольника достроить и вс расстояние посчитать никаких проблем нет Это другая просто другой взгляд на то чтобы что считать близким друг другу А что считать

нет Это другая просто другой взгляд на то чтобы что считать близким друг другу А что считать далёким друг от друга вот а так второй вопрос был Любы в чате они взаимозаменяемы это кто они скалярное произведение и косинусное ско они об одном и том же по факту просто одно одно не нормированного Мирова это знаешь как сказать что человеку 56 лет а можно сказать что среднем люди живут 70 лет предположим Да в среднем условно значит человек которому 56 лет как бы если от нормированного то он 567 жизни

Да в среднем условно значит человек которому 56 лет как бы если от нормированного то он 567 жизни прожил Примерно вот как бы то есть какая-то нормировка некоторая в единую удобную шкалу далу если вот это для сравнения например использовать косное сходство да то есть когда они будут постоянно сравнивать только два типа один с чем-то один с чем-то и опять Вот так постоянно пар по объектам смотри Ну в данном случае сти вечером заходит хочет посмотреть кино Да а система знает что телес мотре ну ТВ

в данном случае сти вечером заходит хочет посмотреть кино Да а система знает что телес мотре ну ТВ смотрение кости очень похоже с луба соответственно система найдёт то что посмотрел ты поставил высокий рейтинг порекомендует это кость тут же не два фильма будет на самом деле этих фильмов будет гораздо больше да и соответственно два я только сделал чтобы смочь отрисовать это вам Ну как бы здесь изобразить так-то всё это работает вполне и для гораздо большего пространства понял вот вот у ребят

изобразить так-то всё это работает вполне и для гораздо большего пространства понял вот вот у ребят Сейчас начнётся неделя текста Вот у старшей группы одна из самых сложных недель и там на самом деле тоже вот они будут находить вы увидите ну а ну Хотя может быть на этой неделе нет может быть и да но на следующей точно сходство Например я пишу что-то хочу найти текст мы будем находить в близость текстов не знаю Представь есть база с лекарствами я пишу у меня болит голова там то Тото и как-то вот

не знаю Представь есть база с лекарствами я пишу у меня болит голова там то Тото и как-то вот можно сделать так чтобы по вот этой фразе рекомендовали Ну как бы необходимые таблетки Да чтобы когда у меня болит голова Мне там не порекомендовали не знаю МАЗ от синяков Да чтобы такого не произошло в автоматическом режиме правильно рекомендовал он попарно всех проверит но найдёт где самая лучшая коч с на схост три да формулу не загонишь одно временно [музыка] Угу Так ну собственно говоря вот как-то

на схост три да формулу не загонишь одно временно [музыка] Угу Так ну собственно говоря вот как-то так такое небольшое интро Да линейной алгебры далее векторное пространство но мы на самом деле с вами проговорили и уже его миллион раз зарисовать но это чтобы у вас в слайдах оставалось можно тут взглянуть Как себя ведут разные операции когда что сложить с вектором что сложить два вектора вычесть два вектора умножить их на констан это могло бы выглядеть Так что вот если вы например с дата фреймом

вектора умножить их на констан это могло бы выглядеть Так что вот если вы например с дата фреймом работаете вот у вас есть два объекта выборки объект А и объект б ну вполне себе вот у вас был был проект по циновки квартирам правильно и там были фичи один фича два соответственно я могу сказать что вот объект а ой вектор А у меня задаётся 1 2 это не знаю может быть однокомнатная квартира с двумя балконами условный да а тут четырёхкомнатная квартира с тремя балконами и уже из этого можно плясать

условный да а тут четырёхкомнатная квартира с тремя балконами и уже из этого можно плясать насколько эти объекты похожи друг на друга или не похожи или какие-то вообще во-первых телодвижения проделывать с ними какие-то телодвижения проделывать с ними да 4D и выше явной возможности отобразить у нас нет однако все операции над векторами которые вот мы здесь проговорили они всё также продолжают работать и мы просто будем базироваться на математических формулах уже не имея возможности нарисовать ну

и мы просто будем базироваться на математических формулах уже не имея возможности нарисовать ну ничего страшного ничего страшного далее Что нам ещё пригодится с вами нам пригодится такое понятие как Базис векторного пространства Ну не сильно на самом деле пригодится Но на самом деле понимать его полезно Что такое Базис векторного пространства это такой набор векторов в пространстве что любой вектор этого пространства может быть единственным образом представлен в виде линейной комбинации

вектор этого пространства может быть единственным образом представлен в виде линейной комбинации векторов из этого набора теперь перем что я имею в виду вот смотрите самом де даже возм Да вот нас с вами здесь 11 человек нас с вами можно описывать по-разному правильно можно описать не знаю Рост вес цвет волос цвет глаз форма там лица или чего-то ещё А можно нас характеризовать не знаю наш бэкграунд или наш институт или Наш город рождения или наш год рождения или А может быть музыкальные

бэкграунд или наш институт или Наш город рождения или наш год рождения или А может быть музыкальные предпочтения может спортивные предпочтения Может ещё что-то и ведь это всё как бы наши характеристики но объек остаётся объектом правда объект остаётся объектом и вот по факту то в чём мы измеряем грубо говоря его в данном случае у меня какая-то фича о фича 2 называют базисом называют базисом и более того надо ещё задать какую-то шкалу как правило это 1 0 имеется в виду то есть вот вот это дают 1

того надо ещё задать какую-то шкалу как правило это 1 0 имеется в виду то есть вот вот это дают 1 0 типа единичка по первому измерение Ноль по второму а фича 2 - это 01 то есть нолик по первому единичка по второму и теперь теперь вот любой вектор этого пространства можно выразить через фи О фи 2 через вот эти базисные вектора Ну давайте вот какой-нибудь не знаю число какое-нибудь Давай число се Ну скажи короче Вектор какой-нибудь две координаты только 65 65 То есть это было бы где-то вот здесь

скажи короче Вектор какой-нибудь две координаты только 65 65 То есть это было бы где-то вот здесь э точка Да у нас 65 и векто 65 можно было раз взяли фичу о фичу О да вот так векторно плюс п раз взяли фичу 2 вот если мы с вами подставим То есть у нас получается 6 у 1 0 плю 5 у 01 итогово это равно чему 65 Да 65 и будет равно то есть по В каком-то смысле мы занимаемся тем что все и так подсознательно понимают Но это нам нужно для дальнейших как бы операции вообще совершенно другого взгляда на

понимают Но это нам нужно для дальнейших как бы операции вообще совершенно другого взгляда на мир это знаете как вот мы привыкли с вами с детства считать по десятичной системе исчисления и это вот у нас сидит в голове а компьютер работает иначе компьютер работает в двоичной системе исчисления то есть на одно и тоже как бы да физически счётные объекты вообще по-разному отображаются тут примерно тоже самое мы будем меть переходить из одного в другой это это полезная штука вот в данном случае да 6

самое мы будем меть переходить из одного в другой это это полезная штука вот в данном случае да 6 фича о плю 5 фича 2 даб получается Базис вектора - это просто оси нашего пространства Да да да Ну не совсем Оси Оси плюс как бы заданный масштаб этой Оси Оси масштаб Да оси масштаб всё Угу нуно простыми словами действительно можно сказать оси то есть то в каком пространстве мы описываем объекты которые у нас есть Ну например Ну давайте вот я приводил Давайте вот один из давайте как объект возьмём

у нас есть Ну например Ну давайте вот я приводил Давайте вот один из давайте как объект возьмём вот у вас была недвижимость Да недвижимость у вас Конечно всё сразу было собрано но я мог бы каждую квартиру описывать в контексте а площадь квадратных метрах площадь квадратных метрах и удалённость от центра мог так записывать в таком базисе работа мог другой Базис мог быть количество комнат количество ком и не знаю отношение площади кухни ко всей площади да то есть насколько Большая кухня другой

ком и не знаю отношение площади кухни ко всей площади да то есть насколько Большая кухня другой Базис чем у вас больше координат тем вам как бы легче будет но вот эти переходы из одного базиса в другой где ненужно убирается нужно оставляется он происходит периодически в анализе данных да А например скажем там типа будет фичей больше чем чере Да скажем и вообще ну идейно в пространстве типа ну там только три да существует существу прост а то есть можно вообще бесконечно брать и типа сравнивать

только три да существует существу прост а то есть можно вообще бесконечно брать и типа сравнивать там дофига с друг другом Да я же вот собственно говоря здесь прописал То есть у нас просто рисунок потеряется возможность отображать так Ну вы и будете работать в пространства которые очень большие очень больши Так что этого не избежать Да как отбор фичей вопрос не понял если как отбирать фичи то об этом я не сегодня буду рассказывать у нас будет целый день на это посвящён на следующей неделе всё

этом я не сегодня буду рассказывать у нас будет целый день на это посвящён на следующей неделе всё по порядку идём не вот выбор базиса вот ты говоришь выбор базиса я так своего ответа что это один из способов отбора фиче Ну не совсем так Ну да да да можно можно так сказать если грубо сказать то так да вот так а что нам нужно дальше что нам ещё понадобится коллинеарные векторы такое понятие векторы называются коллинеарными если один можно выразить линейным образом через другой достаточно простое

называются коллинеарными если один можно выразить линейным образом через другой достаточно простое тоже на самом деле школьное определение геометрия там в каком шестом седьмом классе Ну что-то Вот такое примерно Да суть очень простая что есть две фичи у нас с вами если одна полностью отображает другую то получается что фича 2 нам Ну вообще новой информации не приносит практически тут конечно в реальности в жизни у вас не будет идеальной линейной зависимости что всё на одну прямую легло тут как

в жизни у вас не будет идеальной линейной зависимости что всё на одну прямую легло тут как бы есть некоторый коридор Да То есть как бы это называют шум то есть некая дисперсия отклонение есть но она небольшая думаю все видят что Линейная зависимость у нас с вами есть И если вы вне свом Посмотрите я Бон что там есть линейно зависимые признаки такая история если особенно те кто будет работать не там не с табличками и с текстом Ой не с картинками с текстом А кто будет работать с табличными данными

не с табличками и с текстом Ой не с картинками с текстом А кто будет работать с табличными данными там вам Просто дадут 1.000 фичей и скажут что вот надо построить модель там 1.000 фичей Они вообще как бы очень сильно ко линеар Там могут скинуть средняя сумма трат и Просто сумма трат они как бы линеар между собой и как бы для нас-то ладно А вот алгоритмы эту штуку не любят модели машинного обучения они не очень любят и считается Вообще идеально чтобы все признаки были как бы независимы каждый

они не очень любят и считается Вообще идеально чтобы все признаки были как бы независимы каждый приносил новую информацию Если записать что что-то в рублях измеряется потом что-то измеряется в Ну что-то измеряется в рублях что-то измеряется в долларах то это коллинеарная история и как бы ну мы дальше узнаем Какие следствия от этого есть неприятные Ну в общем калинено надо стараться убирать есть даже отдельная история так и называется проблема мультиколлинеарности в Data Science

убирать есть даже отдельная история так и называется проблема мультиколлинеарности в Data Science мультиколлинеарность - это когда коллинеар не два вектора А там риче в группе Вот Но логика та же самая а нет ни в чём корреляция корреляция показывает степень коллинеарности если у вас корреляция 100% это значит у вас полностью стопроцентная мультиколлинеарность вот если 08 значит сильная вот здесь была бы корреляция около 8 корреляции фичи 2 и фичи о вот так Ну что ж переходим дальше Матрица

была бы корреляция около 8 корреляции фичи 2 и фичи о вот так Ну что ж переходим дальше Матрица Матрица - это самое важное вектор и Матрица - это самое важное что нам нужно из линейной алгебры это самое важное и матриц как бы наверное поважнее чем Вектор Хотя фиг его знает как бы он строится на векторах но матрицы чаще по крайней мере фигурируют Что такое матрица Матрица - это прямоугольная структура хранения данных матрицу можно трактовать как совокупность векторов и использовать для хранения

хранения данных матрицу можно трактовать как совокупность векторов и использовать для хранения данных Ну например смотрите табличные данные можно воспринимать как матрицу Вот вы уже в принципе с дата фреймами работали но вот это всё внутри я могу считать как Матрица где у меня Ну например можно по строкам смотреть у меня пять пять векторов Вектор человек да В данном случае получается что у меня по нему есть у меня есть по нему его имя Да его возрастом и так далее В общем каких-то пять

у меня по нему есть у меня есть по нему его имя Да его возрастом и так далее В общем каких-то пять характеристик мы собрали как-то так как-то так это можно воспринимать матрицу и сейчас когда мы будем обсуждать матричные операции можно будет вот через призму А что было бы с вашими табличными данными рассуждать вот далее текстовые данные тоже можно положить в матрицу и когда-то вы дойдёте до этого Но на самом деле ещё на нашей с вами фазе то есть не на фазе фазе один мы столкнётся с текстами с

Но на самом деле ещё на нашей с вами фазе то есть не на фазе фазе один мы столкнётся с текстами с очень тривиальным конструкциями но тем не менее то есть вот у нас есть представьте вот у меня есть четыре текста четыре текста самый простой способ оцифровать называется BG of Words сейчас это нам не нужно знать вообще как бы для этого будет отдельный день Я тут просто показать пример где я просто посчитал количество слов да Как вы думаете размер пространства равен чему Ну всему количеству слов

посчитал количество слов да Как вы думаете размер пространства равен чему Ну всему количеству слов которые есть или это называют размер словаря вы может слышали есть такое понятие у чата gpt есть размер словаря там на миллион токенов миллиард токенов триллион токенов У любой лингвистической модели есть словар как как у человека у каждого из нас с вами есть какой-то словар в голове с Количество слов которые мы знаем и беру я какой-то документ Ну определённый текст и просто подсчитывают фане

слов которые мы знаем и беру я какой-то документ Ну определённый текст и просто подсчитывают фане единожды встретилась там и единожды встретилась единожды встретилась Тем самым я получил для каждого документа его векторное представление А значит что например я бы уже мог оценить косинус на сходство двух текстов понимаете да О чём я говорю или что-то ещё какие-то плюшки навешивать то есть уже получается что что-то лингвистическое неожиданным образом оцифровал это прикольно да был а но на порядок

что что-то лингвистическое неожиданным образом оцифровал это прикольно да был а но на порядок мы не сохраняем порядок слов тут он мешку да да Но это надо понимать это самая простая история то есть нейросети делают по-другому Угу контекст пытаются сохранить и порядок как бы ча gpt будет понимать разницу ты напишешь я пришёл пришёл Я то есть он как бы это увидит этот Конечно алгоритм никогда не ут но как быва где-то и таких простых штук на самом деле достаточно Вот Но это уже всё болячки NLP

ут но как быва где-то и таких простых штук на самом деле достаточно Вот Но это уже всё болячки NLP болячки NLP наша же история понять что там тоже Матрица Там просто кодируются тексты подругому что мы всё стараемся привести к матрице к матрице А дальше уже с ней как-то плясать вот Следующая история - это IM Matrix то есть и изображение можно тоже воспринимать как матрицу ну здесь в принципе я думаю видите Да контур человека чёрно-белое изображение в шкале от Ну до 255 где Ноль это у нас с вами

видите Да контур человека чёрно-белое изображение в шкале от Ну до 255 где Ноль это у нас с вами Ноль это у нас чёрный пиксель Да а там близко к 255 это белый пиксель тем самым игра интенсивностью пикселя интенсивностью пикселя Мы можем с вами получить что-то такое и когда там нейронные сети которые генерируют картинки Да Кай Кондинский нейросеть Она изначально кодирует Ой она как бы ну предсказывает в каком-то смысле или говорит каким числом надо заполнить каждый пиксель и так образуется

в каком-то смысле или говорит каким числом надо заполнить каждый пиксель и так образуется картинка то есть как бы и тут можно подступиться потому что все алгоритмы дальше так или иначе работают с матрицами то есть мы в принципе с вами в этой жизни оцифровать можем практически всё да очень многие вещи оцифрован оцифровывать информацию получается достаточно неплохо Поэтому такие результаты как пи и тому подобное уже существуют и мощности про растут мощности вот вот вот вот Ну в принципе всё как

и тому подобное уже существуют и мощности про растут мощности вот вот вот вот Ну в принципе всё как бы вот с вами в контексте обучения в Эльбрусе вы столк с табличными данными с этим мы будем сталкиваться на фазе о немножко с текстом на фазе оди но Фаза 2 в основном и изображение тоже фаза д фаза д так основные виды матриц что нам немножко может понадобиться во-первых надо будет знать что такое квадратная Матрица квадратная Матрица - это когда количество строк равно количеству ЛВ всё очень

квадратная Матрица квадратная Матрица - это когда количество строк равно количеству ЛВ всё очень простори размерность у матрицы есть размерность и вот эта Матрица Какою бы у меня размерность имела 33 да 33 Ну ладно тут легко А если бы вот такая была Матрица 1 2 3 4 5 6 вот эта Матрица чему какой размер сме 32 32 Да сначала строки и Обратите внимание это полностью эквивалентно 2D листу в питоне то есть вот 2D лист - это 2D список двумерный список или как-то так да он называ двумерный список в

то есть вот 2D лист - это 2D список двумерный список или как-то так да он называ двумерный список в питоне - это Матрица а одномерный список питоне - это Вектор параллели проводите даже и в код хорошо ложится сегодня с на Работать много на чисто для этого и нужен на самом деле для работы с векторами матрицами То есть получается не строки лист Ну это это это зависит от задачи можно под где-то надо смотреть под одним углом где-то под другим Я могу я могу я могу список списков сделать и списков

смотреть под одним углом где-то под другим Я могу я могу я могу список списков сделать и списков будет либо строка либо столбец мне плевать зависит дада да Не ну это как это как бы как сказать задача определить тебе что нужно сделать строкой что делать столбцом понял то есть от контекста зависит от контекста То есть я вот эту матрицу могу воспринять как у меня три вектора в двухмерном пространстве А могу воспринять как два вектора в трёхмерном пространстве и это уже я буду манипулировать этой

А могу воспринять как два вектора в трёхмерном пространстве и это уже я буду манипулировать этой историей и под себя подгонять то есть я сам себе художник здесь и как бы где надо посмотрю Так где надо иначе х друг друга легко будень деть спасибо большое угу вот если все элементы матрицы равны нулю то Матрица нулевая это далее мы с вами поймём полный эквивалент нуля в нашей системе счисления Мы когда с вами любое число умножаем но что получим ноль ноль Да вот это как бы ноль в мире матриц грубо

с вами любое число умножаем но что получим ноль ноль Да вот это как бы ноль в мире матриц грубо говоря у матриц тоже там ну по понятиям также они живут там у них есть тоже кто За что отвечает Все вот эти истории Вот это чисто ноль у них вот если элементы главной диагонали матрицы равны единички остальные нулю то Матрица единичная то есть обратить внимание что вот у меня главная диагональ главная диагональ нува диагональ с левого верхнего в правый нижний Вот это побочная диагональ называется ну

диагональ нува диагональ с левого верхнего в правый нижний Вот это побочная диагональ называется ну ей редко оперируют всегда всё упирается вот в эту диагональ так вот эта диагональ главная если она единичка то все нули то это единичная Матрица А если любое число у нас с вами умножить на единичку то что получается само число само число Да вот в мире матриц в мире матриц тоже вот аналогом умножения на единичку чтобы остаться самим собой вот эта вот Матрица единичная есть сейчас как раз дальше у

на единичку чтобы остаться самим собой вот эта вот Матрица единичная есть сейчас как раз дальше у нас будет умножение и во всём этом можно будет убедиться Так ну что ж операци надо матрицами самая важная операция - это матричное умножение Вот это сказать что это самое важное это вообще ничего не сказать при всех красоте нейронных сетей Да вот то что все видят Да что там происходит когда gpt работает генерируют текст и когда генерируют картинку или в табличных Дан идут предсказания просто

работает генерируют текст и когда генерируют картинку или в табличных Дан идут предсказания просто табличные данные не производят такой фурор да в голове Как производит работа с картинками и текстом внутри вот просто по факту сплошное перемножение матрицы Ну ещё там всякие разные дополнительные комбинации ой преобразование но доминирующая операция в нейросетях - это умножение матриц а пряно доминирующая операция вот как-то так Ну что ж Давайте теперь поговорим во-первых матрицы можно умножать

операция вот как-то так Ну что ж Давайте теперь поговорим во-первых матрицы можно умножать не все матрицы можно умножать не все вот размерность у этой матрицы Какая Скажите пожалуйста у первой 32 32 Да 32 давайте я знаете где вот здесь сейчас запишу вместе с вами посчитаем 1 2 5 6 7 8 5 6 7 8 действительно у неё размерность 3 на 2 вот у второй векто Вектор тоже можно назвать просто одномерной матрицей одно и тоже на самом деле 3 4 вот так вот здесь какая у нас с вами размерность 21 21 Да 21

матрицей одно и тоже на самом деле 3 4 вот так вот здесь какая у нас с вами размерность 21 21 Да 21 итого итого гого Что получается смотрите матрицы можно умножать только в одном случае матрицы можно умножать только в одном случае когда второе число или количество первой матри микрофон включён я себя слышу Выключите пожалуйста спасибо Вот количество столбцов второй матриц то есть внутреннее число равно количеству строк первой или иначе говоря Ида говор что вот внутренние числа должны быть равны

равно количеству строк первой или иначе говоря Ида говор что вот внутренние числа должны быть равны если они разные то не будет и нельзя умножать вам и питон ударит ошибку итор в дальнейшем и на все дружно скажут дружище мы не умеем так делать а выходная размерность образуется как раз-таки двумя остав оставшимися числами и она будет равна 3 на о Вот и тут на самом деле Всё достаточно системно несложно вот 3 на оди Да смотрите это один столбец один столбец и три строчки вот возьмём например вот

вот 3 на оди Да смотрите это один столбец один столбец и три строчки вот возьмём например вот элемент я возьму Давайте вот этот элемент один на один он лежит на пересечении первой строки и первого столбца согласны это эквивалентно тому что вот отсюда я буду брать строчки а Отсюда буду брать столбец что я беру первый строчку и умножаю на первый столбец делаю скалярное произведение скалярное произведение И получаю 1 у 3 П 2 у 4 скалярное произведение Итого де сюда подставляю вот она девка Вот она

И получаю 1 у 3 П 2 у 4 скалярное произведение Итого де сюда подставляю вот она девка Вот она девчка кем-нибудь умножить Давайте попробуем с Дмитрием вот что будет вот здесь вот у меня вот внизу нижнее число и не конечный ответ А прямо с вычислениями вслух чтобы все понимали Дмитрий с нами так понятно Давайте час сейчас а рассуждай вслух прямо то есть не сразу ответ может что к чему там ну третье число имеется в виду Да вот это нижнее это что у нас то есть мы берём как бы нижнюю строчку 7,8

число имеется в виду Да вот это нижнее это что у нас то есть мы берём как бы нижнюю строчку 7,8 умножаем на 3,4 7 и 3 21 Угу и 8 4 32 32 + 21 53 Абсолютно верно то есть Почему девять в первом 5 у 3 А как я получил девять я не знаю там 5 у 15 не Стоп ой да 1 2 1 у на 3 + 2 у 4 Да ну это у меня с математикой просто проблема так 11 да 1 у на о 1 у 3 + 2 у 4 11 Абсолютно верно Вот а то есть да возвращается 53 третья строчка на первый столбец скалярное произведение получили 53 Ну и Давайте попробуем

53 третья строчка на первый столбец скалярное произведение получили 53 Ну и Давайте попробуем попробуем снастей вот центральное число как будет у нас образовываться ну 5 у 3 + 6 у 4 это будет 39 Господи нет приме присно Ну собственно говоря вот мы посчитали вот мы посчитали и часто что одна Матрица что вторая имеет под собой какую-то Ну интерпретацию это не просто какие-то числа да А например изображение умножается на какой-нибудь фильтр да Или табличные данные умножаются на веса или что-то ещ

умножается на какой-нибудь фильтр да Или табличные данные умножаются на веса или что-то ещ Ну мы посмотрим чуть дальше приме собственно говоря вот здесь можно убедиться Да что мы посчитали с вами правильно всё умножила всё умножила так давайте вот смотрите вот вам задача теперь посложнее чуть-чуть вот есть две матрицы надо умножить их и кто посчитает скидывайте ответ в в чат Зума чат Зума минутку Давайте считаем потом вместе разберём Ja так вижу два ответа пока разошлись уже Три разных вижу

Давайте считаем потом вместе разберём Ja так вижу два ответа пока разошлись уже Три разных вижу ответ ну сходится к одному понял Так ну что ж Давайте тогда пока потихоньку начнём вместе считать кто до считывает до считывает Так во-первых у нас с вами Матрица Давайте первая Матрица 31 катка [музыка] форму короче в правом нижнем углу cx21 по идее нужно cx2 + D в правом нижнем углу там по идее так ещё раз нижний угол cx2 плю А да [музыка] D могу тоже что-то проглядеть что мне говорите спасибо Вот

раз нижний угол cx2 плю А да [музыка] D могу тоже что-то проглядеть что мне говорите спасибо Вот 3 1 1 2 -1 2 1 так Давайте попробуем с Олей начать Оля давай размерность первой матриц Какая так строка на столбец я так 3х -1 П 1 Давай по порядку смотри разме Давай сча разме 2 и в 2 на от можно матри Да потому что внутренние похожие цифры внеш ой размер значит какая будет у нас на выходе 2х 2 2х 2 Абсолютно верно И вот она получается Давай мы с тобой посчитаем вот это вот число которое как бы тос

верно И вот она получается Давай мы с тобой посчитаем вот это вот число которое как бы тос 1 2 1 2 что будет Вот здесь снизу образовываться тогда это будет Нижняя строка и нижний столбец тогда о двойка умножаем Ой ну на первый столбец 1Д Умно на ми1 и дво тогда 1 на -1 -1 П 2 на 2 4 получается ри Абсолютно верно тройка хорошо Так давайте Вот это число Верхнее Верхнее правое посчитаем посчитаем Сергеем Сергеем вас два вот есть Сергей Кудинов А вот Серёжа второго фамилии нет и я это я тут Да

Сергеем Сергеем вас два вот есть Сергей Кудинов А вот Серёжа второго фамилии нет и я это я тут Да давай получается мы берм так правое Верхнее Да мы берём Ага мы берём первый столбец на вторую матри мы что берм Ну о первую строку Да первую строку Да а во второй берём получается второй столбец Уно 3 на и на Итого у нас получается 3 П 1 4 Да здесь чере Отлично так хорошо Спасибо Серёжа Давайте дальше здесь у нас с вами давайте что вот здесь слева сверху будет Люба давай с тобой слева сверху да 1 1

здесь у нас с вами давайте что вот здесь слева сверху будет Люба давай с тобой слева сверху да 1 1 значит мы должны умножить первую строку матри умножаем на первый столбец матрицы в это 3 умножаем на -1 Угу плюс А так 3 Умно так плюс 1 умножаем на -1 погоди погоди Мы ещё раз с первого Матрица мы что берём сейчас с первой матрицы мы берём первую строку Угу из второй матрицы второй матрицы мы берём первый столбец Да и умножаем скалярную А скалярна это как Да просто я согласен Только как слуха так

первый столбец Да и умножаем скалярную А скалярна это как Да просто я согласен Только как слуха так сейчас 3 3 x -1 + 3х 2 да А ладно 3 всё 3 у -1 +1 у -1 Нет нужно умножать соответственные координаты первую умножаешь на Первую вторую на вторую 3 у -1 п а п1 а ну всё всё теперь я поняла спасибо И того Сколько получается 3 у -1 получили -3 и плю 1 учили 2 Итого ми абсолютно ми Давайте те Нижне нижнее правое число Давайте бу так нижнее правое второй столбец вторая строка 12 у 1 П 2 3 абсолютно

правое число Давайте бу так нижнее правое второй столбец вторая строка 12 у 1 П 2 3 абсолютно вот у кого получилась такая Матрица изначально те были правы с [музыка] будет иметь размерность Там миллион Бывает и такое там ну или 100.000 Ладно умножить на 572 Главное чтобы второй матрице было там не знаю 572 может быть 36 то есть вот эти матрицы Спокойно множатся это уже не просто делать но лю выключи пожалуйста микрофон я опять себя слышу по-моему через тебя это идёт вот собственно говоря да ну

пожалуйста микрофон я опять себя слышу по-моему через тебя это идёт вот собственно говоря да ну бы никаких проблем всё это мы над простили точно также делат нети просто существенно большим количество чисел большими размерности но правила игры от этого совершенно совершенно не меняются Так так ну собственно говоря вот число далее Далее далее Далее что ещё я предлагаю сделать перерыв Может сейчас потому что нам так Осталось совсем чуть-чуть давайте сделаем Сейчас детй перерыв и будем продолжать

потому что нам так Осталось совсем чуть-чуть давайте сделаем Сейчас детй перерыв и будем продолжать хорошо минут Всё в 24 я вас жду теперь Так ну что давайте возвращаться потихоньку А можно вопрос быстренько Да а э вам во сне Леона Давинчи не приснится за то что вы монали зу искривились монали зу искривились уклонением виде не снится ли вам Давинчи Леонардо с топором в руке не знаю мне не снился лично ещ бессовестный человек заимствовал пример так что А ну тогда он бессовестный человек ктото

лично ещ бессовестный человек заимствовал пример так что А ну тогда он бессовестный человек ктото другой бессовестный к нему может получается Поэтому вам не приснилось Всё спасибо Так ну что продолжаем а операции над матрицей проговорили попробовали умножить И на самом деле матрицу можно воспринимать как объект линейной трансформации входного объекта путём линейных преобразований вот сейчас я даже объясню что в чём мысль смотрите [музыка] м вот когда-то у нас там в школе была у всех математика

объясню что в чём мысль смотрите [музыка] м вот когда-то у нас там в школе была у всех математика да на самом деле вот при всей вот всей математике какая бы она разная не была главная суть математики на самом деле это функция что есть X Вот давайте как-то мы на этот X полия какую-то функцию F применим Да и получим какой-то Y ра FX то есть что-то на входе что-то на выходе правильно всё можно вообще как-то В каком смысле любой бизнес-процесс можно рассуждать что какие-то функциональные

вообще как-то В каком смысле любой бизнес-процесс можно рассуждать что какие-то функциональные преобразования только в случае там алгоритм машинного обучения это надо строго как бы оцифровывать а вмм виде АБ одна из идей матриц как раз-таки заключается в том что она может выступать вот пусть у меня будет Матрица а Неважно какая что она будет как-то входное преобразовывать в выходное выходное и часто это происходит По какому-то правилу То есть это очень правило чем больше там алгоритмы тем

и часто это происходит По какому-то правилу То есть это очень правило чем больше там алгоритмы тем сложнее уловить да это просто человеку уже сложно интерпретировать Но на самом деле правила всё равно какие-то есть И вот Давайте посмотрим вот смотрите вот у меня есть Матрица -2 0 0 -2 То есть я её могу Назвать как угодно вот Давайте назовём именно так -2 0 0 -2 Хорошо а теперь теперь теперь зарисуй вот в эту схему зарисуй какой-то X умножается на эту матрицу А и выходит какой-то Y Вот давайте

вот в эту схему зарисуй какой-то X умножается на эту матрицу А и выходит какой-то Y Вот давайте посмотрим вот наше исходное пространство вот наше исходное пространство мы сейчас посмотрим это пространство состоит из на самом деле множества векторов из бесконечного количества векторов правильно то есть каждая точка пространства - это какой-то вектор какой-то вектор и мы посмотрим судьбу нескольких векторов что с ними произошло во-первых что нужно понимать А изначально пространство когда оно в

векторов что с ними произошло во-первых что нужно понимать А изначально пространство когда оно в ровном виде и в привычном системе исчисления грубо говоря у нас с вами под базисом подразумевается 0 1 0 и вот всё привычно как прямая на картинках Это очень хорошо видно вот как бы вот как прямо просто вот это Матрица -20 0 -2 можно воспринимать следующим образом что вот это это новый базисный Вектор новый базисный вектор по первой координате то есть вот он у меня А вот этот второй 0 -2 по второй

новый базисный вектор по первой координате то есть вот он у меня А вот этот второй 0 -2 по второй координате В принципе видите что произошёл какой-то вот такой вот поворот на 180° у нас с вами и ещё и увеличение в два раза представили то есть повернули растянули в два раза и оказывается что вот Линейная алгебра в этом-то её прикол Что она это поведение повторяет вообще для всех не только для вот этих двух векторов а для всех потому что трансформация Линейная и Давайте взглянем любой вектор Вот

этих двух векторов а для всех потому что трансформация Линейная и Давайте взглянем любой вектор Вот например возьмём вот этот Вектор 1 если я подаю на вход матри а Вектор 1 Что произойдёт с этим вектором на выходе это мне нужно подписать её справа матричное умножение совершается справа вот сюда 1 и Давайте посчитаем во-первых эти матрицы можно умножать между собой да 2х 2 2х 1 и того получается 2х О ну и Давайте запишем Верхняя координата у нас Кост Давай с тобой сверху Какая координата будет

2х О ну и Давайте запишем Верхняя координата у нас Кост Давай с тобой сверху Какая координата будет -2 прибавить но да ми -2 на 1 0 на 1 иго -2 Отлично Так а Нижняя координата Нижняя координата Давайте лба также 0 на 1 это 0 плю -2 у 1 это -2 получается -2 и Обратите внимание то есть вот этот Вектор вот этот Вектор он переместился сюда то есть пря логика даже не нарушилась никак всё работает вот ВС переносится вот в прямом смысле линейно линейно можно взять какой-нибудь другой вектор А более

ВС переносится вот в прямом смысле линейно линейно можно взять какой-нибудь другой вектор А более того сейчас покажу вам лайфхак что можно делать это сразу с несколькими векторами предположим -20 0 ми 0 Ми 2 Давайте сразу же проверим несколько векторов Давайте возьмём вот этот Вектор 12 вот я его подпишу сюда Потом возьму какой-нибудь ещ один Вектор Ну давайте возьму Вектор 21 Вот так и ладно давайте ещё один Вектор возьмём пусть будет Вот этот Вектор -1 0 и попробуем умножить во-первых Можно

ещё один Вектор возьмём пусть будет Вот этот Вектор -1 0 и попробуем умножить во-первых Можно ли умножать эти матрицы между собой да да итоговая размерность Какая 2 на 3 отлично 2х 3 А давайте тогда пойдём по порядку вот левый верхний угол 1 координата какое там число будет Давайте с Сашей Ми 2 на 1 Угу П 0 на 2 -2 отлично -2 сюда Давайте вот эта Нижняя координата Давайте с Серёжей Дино так Нижняя координата это у нас 0 на -2 мы умножаем на ми вра строка первый столбец да то есть вторая строка

координата это у нас 0 на -2 мы умножаем на ми вра строка первый столбец да то есть вторая строка первый столбец тогда это у нас пми я перегрел меня с вычислениями сть если его отдельно подать отдельно не в матрице как я это сделал а подать отдельно то ВС сработает Точно также и -24 где у нас Ой -2 -4 -2 -4 координаты вот здесь Ну похоже на правду Да что вот этот Вектор перешёл туда если представить себе рокировку вот эту то в целом всё работает Давайте теперь А куда перет Вектор 2 зада в более

себе рокировку вот эту то в целом всё работает Давайте теперь А куда перет Вектор 2 зада в более общем виде без уния вопрос Ну можно уже лайфхак принять сказать что там если Матрица диагональная то мы просто умножаем на этот коэффициент на один Вектор Да дада да сейчас это один раз проделаем и всё это проговори ты правильный тренд заметил да А вот Давайте Вот вот Вектор 21 его судьбу посмотрим и посчитаем куда он перешёл Давайте с Настей я так знала только только мне тяжело меня вызывает к

и посчитаем куда он перешёл Давайте с Настей я так знала только только мне тяжело меня вызывает к доске только мне легко не вызывает А в каком смысле гда придёт В смысле при на строчку и на на ну короче делать колонку вторую дадада да Ну чего по по первой строчке -4 П 0 будет -4 а по второй строчке 0 -2 будет -2 всё верно то есть Вектор 21 вот этот Вектор перешёл у нас как бы в минус ми4 -2 то есть перешёл сюда но опять же очень похоже на правду верно очень похоже на правду Ну и Давайте с

то есть перешёл сюда но опять же очень похоже на правду верно очень похоже на правду Ну и Давайте с третьим вектором третий Вектор вот также надо проделать Давайте с Дмитрием -2 у ми1 2 есть говорим -1 0 перешёл Вектор 2.0 опять же похоже на право Да если верить что мы на 180 повернули и растянули в два раза Всё как вы видите То есть можно подавать много входных данных и Матрица всё равно просто преобразовывает как бы каждое По отдельности это очень удобно это очень удобно далее у вас будет

преобразовывает как бы каждое По отдельности это очень удобно это очень удобно далее у вас будет десятки тысяч картинок заезжать в архитектуру нейронной сети Вот это была бы нейронная сеть Вот это были бы входные данные а это мог быть ваш текст Как говорится здесь мог бы быть ваш текст примерно так да или это могли быть ваши табличные данные или всё что угодно то есть какая-то трансформация причём в случае именно с линейным а а матанализ который мы будем в среду проходить он ещё добавит

причём в случае именно с линейным а а матанализ который мы будем в среду проходить он ещё добавит нелинейности нам Да вот именно как бы любая нейронная сеть Она состоит из линейных плюс нелинейных преобразований причём в равной степени примерно хотя не линейных на самом деле больше вот за линейную отвечает как раз-таки матричное умножение линейной алгебры и собственно говоря да вот монализа та и к нам пришла можно взглянуть то есть вот исходная исходное изображение мы с вами даже уже можем

и к нам пришла можно взглянуть то есть вот исходная исходное изображение мы с вами даже уже можем примерно прикинуть на Какую матрицу домново данное изображение для этого полтора пять смотрите вот Давайте вот возьмём тут хоть и больше стрелочка больше стрелочка но Ну давайте просто скажем Вот вот Что вот единичный отрезок вот он единичный отрезок Вот и как бы получается что в каком-то смысле смотрите у нас вот эта вот ось ось она осталась точно такой же 1 А вот как бы ось по ней произошёл такой

у нас вот эта вот ось ось она осталась точно такой же 1 А вот как бы ось по ней произошёл такой вот наклон сюда немножечко да стал сколько ноль и 1 2 3 4 Да 02 примерно 0,2 Вот теперь по факту если любой пиксель данного изображения любой пиксель данного изображения прогнать Подожди а наверху Почему ноль Ну вот в первой строчке Почему Но потому что типа координаты У него по а стоп да наоборот да получается не показа 0 21 не Да дада да Да всё верно 0 2 1 вот так я 0 по вот этой оси и единичка по

не показа 0 21 не Да дада да Да всё верно 0 2 1 вот так я 0 по вот этой оси и единичка по Вот это ВС Давайте попробуем какой-нибудь один пиксель Давайте вот возьмём например вот вот эту току воз Почему 0 откуда 0 взялось нути если вот п клеточек это единица примерно то как бы вот сдвиг на Вот это расстояние Это примерно 02 как бы я погрешно глаза да которая ближе к носу у у этого глаза он имеет у нас координату с вами ми 02 ми 02 получается правильно - 02 6 и попробуем умножить что получается

у нас координату с вами ми 02 ми 02 получается правильно - 02 6 и попробуем умножить что получается Давайте посчитаем с кем мы посчитаем с Любой А почему шесть Почему ше неше А 1 ид тоже да а да да да Абсолютно верно шарите 1.2 всё давай Люба Так ну первая Матрица 2х 2 вторая 2х 1 значит результирующая Матрица будет иметь размерность 2х 1 первую строку это 1 ум -02 п 02 у 1 и2 это мы ВП раз 1 и2 уменьшаем в п раз Ну будет примерно 025 соглас 0 примерно прозвучало поэтому согласны п 024 будет

уменьшаем в п раз Ну будет примерно 025 соглас 0 примерно прозвучало поэтому согласны п 024 будет около ну вторую строку 0 умми ми 02 получаем 0 П 1 у 1 и 2 будет 1 и 2 и того вот 1,2 - это вот эта ось что вот вот нам нас интересует как бы вот этот пиксель по факту вот здесь то есть 1 ид вторая координата верно но первая ноль Но это всё связано с тем что я вот делал небольшие поправки то есть округлял Видите яже вот забил На это расстояние вот оно и сказалось вот здесь у меня то есть если бы я

Видите яже вот забил На это расстояние вот оно и сказалось вот здесь у меня то есть если бы я бы на него не забил Всё ровно то есть вот и так каждому пикселю любая часть изображения любая часть Да в зависимости от вашего разрешения картинки если сделать то происходит Вот такая вещь сейчас всё-таки для для убедиться чтобы Понятно Вот один в правом векторе 1.2 Да внизу то есть мы получается смотрим не абсолютную координату а чисто высоту носа это точно вот это координата 1.2 не в начале до до

не абсолютную координату а чисто высоту носа это точно вот это координата 1.2 не в начале до до знака равно до знака равно Да вот это 1.2 кото 1.2 который до знака равно Да вот это это вот вот это вот это высота А всё это вс-таки абсолютно Да точно клеточками сначала не путаешься потом путаешься потом снова не путаешься и Обратите внимание Вот эта Матрица она по высоте никак не меняет то есть глаза остались На том же самом уровне да то есть она бы формация вот как кос начал замечать что есть

остались На том же самом уровне да то есть она бы формация вот как кос начал замечать что есть паттерны действительно и так Так оно и есть как в обычной математике мы с вами знаем что линейное преобразование такое параболоид нае такое там какое-то ещё там логарифмирования алгебре тоже есть матрицы растяжения сжатия есть матрицы увеличения приближения и совокупность этих факторов вот в данном случае понятно что у нас было Вот изображение и как бы его вот так вот немножечко сделало да за угол

понятно что у нас было Вот изображение и как бы его вот так вот немножечко сделало да за угол отвечал вот этот вот Лине - это умножение на матрицу у которой главная диагональ единичная Да так ещё раз Ну получается Линейная Можно же нелинейно преобразовать картинку если мы хотим линейно преобразовать мы будем умножать на матрицу у которой главная диагональ едини не обязательно вообще всё что мы здесь Разбираем в плане умножения матриц это Априори Линейная трансформации то есть какие бы ты числа

Разбираем в плане умножения матриц это Априори Линейная трансформации то есть какие бы ты числа бы не взяла здесь монализа всё равно останется прямой то есть её не не сломает так ей спину там голову не растянет как-то неестественно вот чтобы ты не подставлял этого не произойдёт Да что не знаю как бы нижняя часть головы ушла вправо и Верхняя тоже вправо Хотя по естественному движение Должна бы была в леву уйти а если мы не единички возьмём она просто увеличится в масштабе Да там допустим если мы

в леву уйти а если мы не единички возьмём она просто увеличится в масштабе Да там допустим если мы возьмём по горизонтали она будет толстая да Угу Ну блин вот здесь была хорошая ссылка её заблокировали что-то там можно было поставить и свою картинку и например любую матрицу поставить и посмотреть что с ней происходит Надо поискать будут какие-то аналоги тут Да Ну мы сейчас ещё поговорим Какие матрицы виды есть какие матрицы есть но Априори умножение на матрицу равно линейное преобразование

матрицы виды есть какие матрицы есть но Априори умножение на матрицу равно линейное преобразование потому что матричное умножение - это линейное умножение с а для себя тота поть правильно или нет линейное преобразование это когда мы каждый Вектор умножаем каждый Вектор изображения с ним происходит одинаковая операция нелинейная есть условно нас будет рази сраз Поня Ну на самом деле не совсем так нелинейное преобразование - это когда на каждую часть входных данных может разный эффект наложи Вот

нелинейное преобразование - это когда на каждую часть входных данных может разный эффект наложи Вот например логарифмирование на маленькое число маленький эффект А на большое больший э а в лих это ВС бы Умно на вот риро по но нелинейное преобразование там график вот такой поэтому на одних один эффект на других другой эффект А всё понял В каком-то смысле близко к твоей мысли но немножко отличается можете проделать собственно говоря самостоятельно там не знаю палец мазы взять да Или что-нибудь

можете проделать собственно говоря самостоятельно там не знаю палец мазы взять да Или что-нибудь ещё и убедиться что это действительно работает в общем виде и вот у нас появляется такая манипуляция Более того я вам скажу вот я сейчас приоб отдаю Да поворачивать онет здесь вложени в целом Вот именно в этот момент Что происходит на уровне компьютера происходит матричное умножение вот я сейчас умножаю есть Матрица приближение это называется Матрица растяжения Матрица растяжения имеет вид например

есть Матрица приближение это называется Матрица растяжения Матрица растяжения имеет вид например растянуть изображение в два раза 2 02 вот если 2 02 взять то изображение растянется в два раза ровно в каком-то смысле Представьте что у меня детерминированное окно и приближение эта картинка становится больше чем Мони и уходит куда-то за пределы представили То есть это вот как бы и есть умножение на матрицу Смотря во сколько раз мы хотим увеличить изображение любые онлайн фоторедакторы в том числе

матрицу Смотря во сколько раз мы хотим увеличить изображение любые онлайн фоторедакторы в том числе шп в своё время это на уровне компьютера Это матричная история матрична истори ссылка открывается В смысле в России она заблокирована ты про это говори у меня я начну лагать поэтому тогда просто Пройдите самостоятельно и там Попробуйте разные матрицы Ну в смысле я не в России нахожусь может быть это Да я понял я имею в виду ну кто собственно говоря в России через VPN значит откроете кто не в

это Да я понял я имею в виду ну кто собственно говоря в России через VPN значит откроете кто не в России откроется вас ссылка без проблем у меня просто сейчас VPN выключен мне не откроет её ссылка вот периодически здесь будут вот такие ссылки снизу в презентациях обращайте внимание на не Так ну вот например смотрите немножко как бы от визуала к цифрам Да вот например нам нужна Матрица А да и Линейный оператор которая увеличивает входной Вектор в два раза Чтоб Для нас это значило То есть у меня

оператор которая увеличивает входной Вектор в два раза Чтоб Для нас это значило То есть у меня эта Матрица состоит Ну в случае 2D пространство из четырёх координат Но мы с вами сказали что новый базисный вектор и новый базисный Вектор идут по строкам Но вот эти базисные векто пространства жено соответственно раз в два раза значит они должны быть 2 0 2 и оказывается достаточно просто понять как ведут себя базисные векторы и всё изображение вынуждено подчиниться этому же правилу силу линейных

ведут себя базисные векторы и всё изображение вынуждено подчиниться этому же правилу силу линейных преобразований Вот теперь любой вектор Давайте Вот любой вектор какой-нибудь серже Давай Назови какой-нибудь век 5 8 с по Да я придумал Лучше давай просто XY ВОМ Вот в общем виде что у нас произойдёт Верхняя координата у нас чему будет равна 2x 2x Да а Нижняя координата 2y Абсолютно верно Как вы видите подставьте свои XY сюда и в том числе 5 и 8 с по и они как бы будут 2 у 5 2 у 85 как-то так-то

подставьте свои XY сюда и в том числе 5 и 8 с по и они как бы будут 2 у 5 2 у 85 как-то так-то так это од Изет приме ня с другим вектором Давайте вот сюда сначала щусь вот например вот такая Матрица Как вы думаете что такая Матрица делает уме Наверно она на 30% сжимает о сменяя пропорции это знаете куда-нибудь соцсеть фотографию ставите огого разрешения зае естественно немножко ВС выглядит это эту историю если бы вот моё изображение сейчас которое есть в Зуме здесь Да это выглядело бы что меня

историю если бы вот моё изображение сейчас которое есть в Зуме здесь Да это выглядело бы что меня бы вот так жалоб Антон вопрос на 30% или до 30% оригинала до Да говори так хорошо тогда вторая Матрица представте что это новый Давай она оставит нас по Иу по и растянет то есть это было бы вот эквивалентно что меня вот в эту ось бы начало растягивать соответственно сейчас смотрим вки на колонке или на строчке в данном случае смотрится на колонке В смысле колот больше ста пото о то есть было вот

на строчке в данном случае смотрится на колонке В смысле колот больше ста пото о то есть было вот так а стало на 50% больше Поэтому у меня вот по по высоте изображения Я к тому что может быть на примере А3 там в правом верхнем углу единичка она Что даёт Хороший вопрос Давайте сначала я спрошу вас а потом рисуем Как вы думаете что век 1 у нас остаётся самим собой да вот это как бы его сейчас называют а вектор и а другой Вектор Стал вот таким то есть он как бы был таким условно Да исходно исходно

а вектор и а другой Вектор Стал вот таким то есть он как бы был таким условно Да исходно исходно всегда всё прямо то есть он был как бы условно таким Но вот пришёл сюда и то есть у меня произошло вот если вот так я был ориентирован вот это можно г поставить любой вектор сюда иди что это проходит дава Но типа удлинился да он удлинился но это не называют в данном случае удлинением или растяжением сжатием Ну происходит такое да про есть расстояние между двумя пикселями центром изображения и вот

сжатием Ну происходит такое да про есть расстояние между двумя пикселями центром изображения и вот этой точкой оно увеличилось Ну вот 1 2 вот какой результирующий вектор получается 32 32 Да 32 То есть у меня Вектор 1 который был Вот здесь где-то Да стал вектором 32 2 3 то есть вот перешёл также то есть по общему правилу подчиняется был таким стал таким Ну в общем все дружно как бы выполнят эту телку этой матрицы и будет трансформация вот так последняя Матрица она посложнее но это на самом деле

этой матрицы и будет трансформация вот так последняя Матрица она посложнее но это на самом деле в общем виде выведена Матрица поворота когда вы нажимаете когда вы нажимаете у себя в приложении повернуть изображение на 90° происходит вместо подстановки Альфа 90° и изображение просто поворачивается и всё просто поворачивается Вот такая штука Матрица поворота вопрос простейшие матрицы поворота увеличени масштабирования они дхд все Не ну это просто для 2D пространства для НД более сложное штуки ну

масштабирования они дхд все Не ну это просто для 2D пространства для НД более сложное штуки ну для картинок 2 над а для картинок 2 над для картинок да для картинок 2 над то есть вот для привычных м картинок 2х 2 их на самом деле больше существует всяких разных но вообще в каком-то смысле в каком-то смысле если очень грубо говорить то нейронные сети нейронные сети в том числе восстанавливают эти матрицы придумывая новые преобразования то есть понимаете мы как бы создаём что-то эмпирическое своё

придумывая новые преобразования то есть понимаете мы как бы создаём что-то эмпирическое своё Вот например как создать матрицу которая для у человека на голове Просто ему шляпу отобразить да то есть мы подаём входное изображение а выходное тоже самое только со шляпой там уже одной матрицей вот такой не отделаешься там нужны миллионы матриц Ну не миллионы но многие так кого Опять звук Люба [музыка] а миллионы матриц много матриц которые как бы могут добиться того что неожиданно на голове появится

а миллионы матриц много матриц которые как бы могут добиться того что неожиданно на голове появится шляпа вот эти матрицы - это есть обучение нейронных сетей в каком-то смысле то есть восстановление закономерности и понимание паттернов потому что даже вот смотрите предположим мы берём нам нужно классифицировать на изображение кошка или собака Да ну там вот вот это будет кошечка Ну рисунок не обращает внимания короче вы поняли кошечка а она имеет какой-то размерность это же Матрица правильно это

внимания короче вы поняли кошечка а она имеет какой-то размерность это же Матрица правильно это же Матрица изображение Ну давайте давайте возьмём какую-нибудь простое изображение 8 наме дальше здесь может происходить преобразований назовём это всё нет или нейронная сеть Ну например а часто знаете какую историю делают ещё часто делают историю следующую то есть вот это изображение 8 наво перекладывают в 1 на 64 то есть пиксели записывают не так чтобы удобно их было отображать А чтобы удобно было

в 1 на 64 то есть пиксели записывают не так чтобы удобно их было отображать А чтобы удобно было считать в Ленту разворачивают кота представили это моё дело все те же 64 64 то у Нет ну я так захотел мо же дело прави 64 То есть это как бы с точки зрения кода никаких проблем вообще не составит вот здесь могут стоять ребята типа ну я думаю где-то вы на картинках всегда видели нейронные слои что-то такое Да всё равно Data Science чуть-чуть примерно представляет Ну короче какие-то нейрончик стоят вот

Да всё равно Data Science чуть-чуть примерно представляет Ну короче какие-то нейрончик стоят вот эти нейроны под собой подразумевают даже давайте я чуть больше зарисуй это вы всё будете делать это сейчас неважно запоминать моя задача очень простая выстроить вам какую-то интуицию что это не просто какие-то эфирные числа которые вообще ничего за собой не несут нет Вполне себе логика как бы присутствует во всём этом Вот например например я бы это знаете как сделал тогда вот 1 на 64 Значит у меня

во всём этом Вот например например я бы это знаете как сделал тогда вот 1 на 64 Значит у меня пусть будет Вот это у меня X1 Это первый вход первый пиксель левый верхний X2 второй вход X3 и где-то там далеко внизу X64 это правый нижний пиксель Вот его число отдаётся сюда далее У меня здесь ну давайте какое-нибудь простое сделаем пусть у меня будут три нейрона есть Вид архитектуры где каждый соединён с каждым То есть это вот все сюда придут потом все сюда придут потом Да все сюда придут потом все

с каждым То есть это вот все сюда придут потом все сюда придут потом Да все сюда придут потом все придут я для двух Ну ладно все сделаю окей Просто сейчас нагромождать рисунок немного и можно как смотрите назвать Вот это называют веса нейрона сети или веса алгоритмов это наме 7b модель от Face которая занимается генерацией текста Это значит что 7 млр весов которые во время обучения должны были настроиться нас в голове с вами 80 млр нейронов примерно Да ну как бы наш мозг Понятно гораздо более

нас в голове с вами 80 млр нейронов примерно Да ну как бы наш мозг Понятно гораздо более сложно обустроен но чтобы проводить какую-то параллель небольшую Вот и у меня соответственно мо это реакция второго нейрона на первый вход Ну например вот этот вес можно было бы назвать Омега 64 3 потому что реакция третьего нейрона на шестьдесят четвёртый вход и это вылилось бы у нас с вами в очень простую вещь если я подаю одного этого одного котёнка тогда значит один подаётся у меня было бы X1 блаблабла

если я подаю одного этого одного котёнка тогда значит один подаётся у меня было бы X1 блаблабла X64 здесь встречает Матрица в нашем с вами рисунке в нашем с вами рисунке она была бы как Омега 1 Ну давайте запишем М что я хотел сделать Ну 64 на3 матрицу Да матрицу 64 на3 получается что я сделаю вот так Омега 1 2 и здесь Омега 1 64 потом здесь Омега 21 бла-бла-бла А и Омега наоборот Наоборот там 641 Ну я так индекс Ну давай хорошо ладно чтобы было удобнее О'кей это в принципе дело человека но

641 Ну я так индекс Ну давай хорошо ладно чтобы было удобнее О'кей это в принципе дело человека но чтобы удобнее было Пусть будет так То есть можно было бы это всё в матричном виде записать Омега 1 1 Омега 21 Омега 641 ну и соответственно здесь это Омега 1 2 Омега 22 Омега 64 2 здесь Омега так это Омега 13 Омега 23 получается да и Омега 643 вот ну что ж во-первых Давайте обсудим с вами здесь размерность 1,64 у второй матрицы Какая размерность 64х 3 64х 3 64 на 3 Итого выходное у нас

здесь размерность 1,64 у второй матрицы Какая размерность 64х 3 64х 3 64 на 3 Итого выходное у нас пространство где 1т Абсолютно верно причём вопрос вам именно 1 натри да то есть Ну в данном случае это построчно вот так происходит 1 на 3 три координаты возвращаются нам причём первая координата Скажите пожалуйста что это на что это у меня первая строка на первый столбец правильно А это значит первая рока одержит вхо сда правильно то есть на самом деле первое число - это выход или реакция первого

рока одержит вхо сда правильно то есть на самом деле первое число - это выход или реакция первого нейрона на входные данные Точно также будет у второго и у третьего да то есть раздва далее архитектура может быть ещё следующего характера Мы можем поставить ещё один слой нейронной сети например сюда и получить получить ну здесь бы у меня как было давайте я назову типа второй слой Вот это у меня будет первы выход в первый вход это второй слой второй выход в первый вход и третий слой второй выход

первы выход в первый вход это второй слой второй выход в первый вход и третий слой второй выход ой третий выход в первый вход всё соответственно Дальше я бы сделал бы у меня вот это 1 на 3 вот это вот сюда Перенесу здесь запишу 1 на 3 У меня бы умножила на вот эту матрицу из этих трх коэффициентов которые бы в име бы наме один можно умножать Да получится один на один оди на один да то есть один выход всё одно число какое-то часто это интерпретируют в будущем вы поймёте как вероятность

один выход всё одно число какое-то часто это интерпретируют в будущем вы поймёте как вероятность вероятность принадлежать классу то есть здесь могло прийти число 0,6 это значит нейронная сеть считает что вероятность того что здесь есть кошка 60% Т 100 руб Люба ты что-то сказала или мне послышалось Ладно лыба и что вообще лучше типа дофига слоёв вы торопите событи иногда То есть у вас будет будет на это 4 недели вообще чтобы ответить на вопрос что лучше много сло Эри которые соединяют первый

на это 4 недели вообще чтобы ответить на вопрос что лучше много сло Эри которые соединяют первый слой и выходной точку одну это э вероятность Это что Это кошка по одному из признаков по первому второму и третьему признаку Ну это уже Да это ты уже додумывать можно так интерпретировать типа первый Нейрон может обращать внимание на на нос нарушено Да на нос Да что-нибудь такое да да то есть получается э э это наша работа а придумать эти признаки э эти эти нейронные ноды точки Угу создать

получается э э это наша работа а придумать эти признаки э эти эти нейронные ноды точки Угу создать архитектуру неровности да А архитектура неровности называется Всё спасибо то есть вот это всё вот это всё вот вот так вот поставим Вот это блин ну вы короче поняли меня вот это красиво нарисую вот так вот это всё это и есть нейронная сеть которая которая работает как функция ей что-то на вход дают она что-то даёт Вы когда чату gpt что-то берёте вот вот это ваш текст входной вот здесь ну здесь как

что-то даёт Вы когда чату gpt что-то берёте вот вот это ваш текст входной вот здесь ну здесь как бы не одно число надо возвращать но надо возвращать новые токены то есть новые слова что вам отвечать а вот здесь могут быть игры Ну очень серьёзные то есть не то что у нас ребячество да четыре нейрона а но есть модели типа gp5 будет более триллиона иметь Ну вообще уже триллион модели уже идут вовсю которые име триллион весов из тебя Атон гори получается выходная Вот это одна целая вероятность я

которые име триллион весов из тебя Атон гори получается выходная Вот это одна целая вероятность я решаю как я вот эти w11 w21 w31 который соединяет первый тре Нерона с выходным я решаю как их как каком виде их суммировать в конце Ну на самом деле решает за тебя Вот этот вес А вот эти веса все это и есть обучение неровности любое обучение алгоритма - это настройка вот этих весов понял То есть ты-то в принципе это не будешь трогать это за тебя алгоритм обучится и сам даст веса кого как слушать В

в принципе это не будешь трогать это за тебя алгоритм обучится и сам даст веса кого как слушать В какой мере А ну ну а я ему говорю же и он же он подумает Может мне вот эти вот три Нерона и выходной между ними стоят вот эти три значения Это вероятность того то что кошка нос кошки СТ кошки Вот ты знаешь точно где нос где Глаза где у кошки я или или нет Вот ты знаешь вот какой Нейрон будет отвечать за нос какой за глаза а то есть я даже этого не знаю как конечно Нет единственное что ты сделаешь

за нос какой за глаза а то есть я даже этого не знаю как конечно Нет единственное что ты сделаешь ты скажешь что вот эта картинка ты метишь её как что здесь есть кошка и ты сделаешь таких миллион картинок Обратите внимание может быть не одна кошка здесь может быть N кошек и это всё равно всё умножить корректно и модель Как раз-таки должна научиться понимать паттерны что здесь есть кошка Здесь нет здесь есть здесь нет и восстанавливать вот эти веса потихонечку Но мы с вами потихоньку начинаем

здесь есть здесь нет и восстанавливать вот эти веса потихонечку Но мы с вами потихоньку начинаем уходить в сторону обсуждения неровных сетей я вам хотел показать лишь матричное умножение что оно не эфемерно а очень даже логично очень Логично Спасибо хорошо [музыка] Да с Вот то есть ну как бы изображение текст табличные данные точно также могут проходить через эту всю историю Ну этим мы займёмся с вами на этой неделе в общем Матрица Прикольная штука Матрица Прикольная штука так ну что ж Давайте

вами на этой неделе в общем Матрица Прикольная штука Матрица Прикольная штука так ну что ж Давайте подводить итоги матрицы векторы и операции над ними Ключевое ВНО алгебри прино матри для матриц полезными характеристиками также являются ранг матрицы определитель матрицы и обратная матрица это у нас остаётся на само изучение Раньше я это рассказывал но как бы сейчас это очень редко спрашивают это знаете как вот примерно вот когда-то когда машины только появлялись желательно было бы понимать

это знаете как вот примерно вот когда-то когда машины только появлялись желательно было бы понимать поглубже есть то просто Обслуживаю машину достаточно как бы уметь рулить плюс-минус да И знать какие-то базовые концепции сейчас себя будет нормально чувствовать человек который не имеет большой экспертизы по тому как устроен двигатель автомобиля вот с и происходит примерно та же самая история да и все вот эти вещи они уходят в глубину то есть они хорошо Так там как бы процедуры с ними сделаны я

все вот эти вещи они уходят в глубину то есть они хорошо Так там как бы процедуры с ними сделаны я не помню что кого-то на собеседовании были столкновения с этим это может Яндекс и тому подобные компании могут как бы это поспрашивать вот Ну в принципе у меня все ресурсы все источники в в репозитории прикреплены Кто хочет может прочитать это в принципе достаточно простая штука достаточно прочитая простая просто остаётся на самоизлечение И то когда вы сделаете основную заданию вот здесь есть

простая просто остаётся на самоизлечение И то когда вы сделаете основную заданию вот здесь есть плейлист такой неплохой можете провалиться посмотреть первые пять видео Ну там просто про сущность линейной алгебры примерно тоже что я рассказывал просто с очень красивыми визуализация у меня такого ресурса Нет я вот особенно кто визуалы прикольно посмотреть то видео Но это надо делать перед сном для крепкого сна как бы вот так вот примерно начили уже какие вопросы по теории легче Линейная алгебра

крепкого сна как бы вот так вот примерно начили уже какие вопросы по теории легче Линейная алгебра чем статистика гораздо Давайте откроем домашку я говорила домашка какая-то вызывающая недоумение большое своим размером сложность алгебра тоже с полегче Матан может показаться чуть сложнее Хотя вот Мне из всех этих четырёх дисциплин Она всегда меньше всех нрави линейна алгебра Да завтра с ВС говорили про векторы Да я так понимаю что всё это речь шла О матричных изображениях это был Вектор Как как

про векторы Да я так понимаю что всё это речь шла О матричных изображениях это был Вектор Как как определитель одного пикселя нет нет вот смотри вот предположим ты подала бы выборку 20 котов Представила тогда бы ты подала матрицу 20 на 64 где каждый Вектор - это один код или собачка изображе обычного изображена одноканальное Ну вот здесь ули вектором является бы пожалуста микрофон э очень большо вотря ссж э в табличных данных может являться объект либо столбец иногда то есть Вектор имён да или

вотря ссж э в табличных данных может являться объект либо столбец иногда то есть Вектор имён да или здесь Вектор пользователей там или чего-то ещё здесь вот у меня закодированный текст Да вот вектори зова ий текст это кодировка вот этого текста Movie Funny в изображениях Ну в изображениях меньше оперирует как бы в самом изображении вектором но тем не менее Вот как бы вот можно так воспринимать Вектор столбец ой Вектор строка Вектор столбец то есть один пиксель - это всё-таки одно число один

Вектор столбец ой Вектор строка Вектор столбец то есть один пиксель - это всё-таки одно число один пиксель - это одно число Так ну что ж сегодняшнее задание у вас сегодня вас ждёт э Много работы Много работы блоков будет много Итак первый блок - это Линейная алгебра Ну так пощупать Немножко там ручками Кто хочет входе никаких проблем Ну самые такие знаете тривиальные история типа сложите два вектора умножьте на константу Да Найдите длину вектора какие-то базовые базовые базовые вещи вот э далее

умножьте на константу Да Найдите длину вектора какие-то базовые базовые базовые вещи вот э далее второй блок Смотрите вот вы уже изучили питон да Ну в целом как бы знаете что яы Какой самый главный минус у питона знаете Он боится мостов скорость наверно да самый главный минус его скорость он очень такой рфн язык Да у него достаточно простой код но он боится кого он боится лений боится много данных и всего А мы Казалось бы питон в анализе данных используем но это очень хорошо сделаны типа пишите

и всего А мы Казалось бы питон в анализе данных используем но это очень хорошо сделаны типа пишите на питоне Но на самом деле многие фреймворки или многие библиотеки которые будут так или иначе связаны с анализом данных они написаны на других языках А вам просто дают интерфейс питонов ский Вот и библиотека нампа не исключение библиотека нампа написана на языке Си Ну c+ + семейство это языки более низкоуровневые более быстрые Почему Потому что обычный питон он будет очень медленным я вам советую

низкоуровневые более быстрые Почему Потому что обычный питон он будет очень медленным я вам советую привыкнуть к нам изм не так много надо чтобы понимать вот настало время когда у вас прямо 2 дня будет повозиться с наем хорошенько Ну сокращение вот библиотека это как раз таки библиотека которая нужна для вычисления для быстрых используется най а не циклы for питонов ские Какой самый главный тип данных в пансе Да Frame Да как правило у каждой библиотеки Есть основные типы данных и вот если в

данных в пансе Да Frame Да как правило у каждой библиотеки Есть основные типы данных и вот если в пансе всё крутится вокруг dataframe Serious то в нампа всё крутится вокруг NP array Это полный А ну давайте назовём это ну з типа список а назову это список что это нам паевский то есть выглядит это у нас с вами примерно следующим образом вот он 1 2 3 это Вектор Да это Вектор это может быть там стать матрицей очень легко если я вот так сделаю 1 2 3 4 5 4 5 6 всё это стало матрицей и все

там стать матрицей очень легко если я вот так сделаю 1 2 3 4 5 4 5 6 всё это стало матрицей и все телодвижения которые мы с вами проделывали можно делать в коде без всяких проблем както Тип тип называется namp nray или N dimensional array или массив произвольной размерности Да вот вот если в пансе всё крутится вокруг датафрейма то в нампа всё крутится абсолютно всё крутится вокруг вот этого арея у вас должно восприниматься что нам пая - Это работа с векторами матрицами я точно также мог бы

у вас должно восприниматься что нам пая - Это работа с векторами матрицами я точно также мог бы создать новский лист Да и посмотреть его тип в принципе Это полный эквивалент они отобрази даже похожи 1 2 3 1 2 3 как лист но как бы понятно что нам пай более производителе функционален для конкретно наших задач конкретно наших задач это первый его плюс в том что он очень-очень быстр очень-очень быстр что ещё из таких сильных отличий Ну во-первых во-первых во-первых во-первых вот смотрите вот как вы

что ещё из таких сильных отличий Ну во-первых во-первых во-первых во-первых вот смотрите вот как вы думаете что будет если я запущу вот такой код ошибка будет Почему мы пытаемся ить к списку я правильно помню сес Да Абсолютно верно то есть он говорит что я не поддерживаю ребят такую операцию как бы до свидания А нам паевский давайте также запустим ВС прошло есть в данном случае п рано но как бы в на это сделано за вас только на языке си то что вы не видите Да чтобы просто это работало

как бы в на это сделано за вас только на языке си то что вы не видите Да чтобы просто это работало производительне поэтому первое Старайтесь правила это не всегда возможно но возможно в 90% случаев даже в 95 чтобы иль тоже можно работать бе там не надо интегрироваться по всем лпм по всем строкам есть App и тому подобные функции Если вы что-то хотите применить потому что на самом деле когда вы пишете или когда вы пишете Что происходит внутри Пан запускается метод который работает на кото

вы пишете или когда вы пишете Что происходит внутри Пан запускается метод который работает на кото работает на c+ поэтому это быстро з нампа изучать вообще ни к чему и совершенно и поэтому я вам остановлюсь на главных фишках Пока ещё вторая фишка вторая фишка заключается в следующем Давайте я вот его создам вот так вот всё-таки как Матрица 4 5 6 вот так вот если я делаю плюс оди то без проблем опять все прибавляются на единичку но или Вот давайте например почитаем S томи вот когда пока уберу

опять все прибавляются на единичку но или Вот давайте например почитаем S томи вот когда пока уберу точками берёт и вот по этим шести числам считает среднее А часто Я хочу например среднее в каждом векторе посчитать Ну почему бы нет среднее в каждом векторе Ну значит что я делаю Я добавляю равно но по-моему нет не угал как все ра вот я это с ним не сталкиваюсь никогда не могу запомнить Я уже просто забил На это и всё не угадал с первого раза со второго угадаю советую вам также делать а не

просто забил На это и всё не угадал с первого раза со второго угадаю советую вам также делать а не пытаться в голове это понять это ладно ещё в 2D когда там в 3D кто Куда идёт начинается некоторая путница вот в общем 2,5 среднее по каждому вектору это второй такой очень крутой функционал нампа Я думаю в пандас Вы с ним столкнулись тоже когда нужно применить операцию вдоль строк или вдоль столбцов и вот в принципе две главные фишки всё остальное надо выискивать методами и смотреть документацию

и вот в принципе две главные фишки всё остальное надо выискивать методами и смотреть документацию Ну не знаю например вот не знаю метод есть num Select и вы можете найти любой метод та через gpt через Overflow метод который Вам нужен да И собственно говоря Ну нампа как бы далеко не самая прямо крутая документация но в целом пойдёт похоже чем-то на пандусов скую В общем что на вход что на выход какие-то экземпл Ну и всё собственно говоря Поэтому если вы столк с какой-то задачей вот вот вам

какие-то экземпл Ну и всё собственно говоря Поэтому если вы столк с какой-то задачей вот вот вам сегодня например вот этот ме понадобится npw который делает замену замену По какому-то правилу вот даже они приводят смотрите пример эквивалентности обычного Кода да то есть чему это эквивалентно относительно питонов ского кода но надо запускать имен это вы не ощутите разницу когда у вас Пять элементов выборки когда у вас будет 10 млн выборки Вы ещё ой как ощутите как-то И кстати это было с из

выборки когда у вас будет 10 млн выборки Вы ещё ой как ощутите как-то И кстати это было с из учеников или бруса Я [музыка] помню мы с ним были за границе в одной стране и вот он запустил какой-то скрипт инго так лоно сделал через форы и в итоге за всю ноч даже не успела посчитаться хотя там ну сколько ноч 8 а потом мы переписали с ним нампа всё замочили красиво сделали и Это почиталось буквально в пределах часа то есть Прим чем сложнее чем больше данных тем тем тем разница ощутима вот кто про

в пределах часа то есть Прим чем сложнее чем больше данных тем тем тем разница ощутима вот кто про алгоритмы слышал лекции проводит по алгоритмам вот это как раз таки вся тематика сложность алгоритмов N вот n квадрат Как использовать эффективную память время это вот все вот эти плюшки эти все плюшки Вот какие вопросы здесь есть сейчас я ещё кое-что Открою кое-что открою У меня вопрос Угу А когда мы поедем за границу когда что Когда мы поедем за границу учитель ученик а ну я скоро поеду

А когда мы поедем за границу когда что Когда мы поедем за границу учитель ученик а ну я скоро поеду присоединяйтесь Всё спасибо Вот так а теперь смотрите Второй второй второй пункт как раз-таки будет посвящён именно вот этой истории с нампа то есть здесь задачи именно базовые задачи на нампа они никак не проецируются на плоскость машинного обучения и всех тонкостей просто знаете как не знаю на Лид коде порешать или Как на как там Похоже это на литкод называется ноч вот на НМ порешать например

коде порешать или Как на как там Похоже это на литкод называется ноч вот на НМ порешать например смотрите вот у нас есть 0 нужно сделать кодировщик получается В каком-то смысле Вот как раз здесь например может быть полезен метод можно это конечно прописать через я встретил но Замени на если я встретил Иза к нампа третий блок это Линейная алгебра и нампа в контексте машинного обучения одна задача у вас будет примерно то что мы с вами обсуждали на лекции будет такое некое фильмо смотрение людей

у вас будет примерно то что мы с вами обсуждали на лекции будет такое некое фильмо смотрение людей надо будет написать алгоритм который находит Мише Михаэль тех кто его единомышленники в что мы с вами разбирали надо будет посчитать косинусное сходство А и евклидово расстояние то есть два потом задание будет соответственно пощупать картинки немножко это вообще не фокус наш сегодняшний на картинке у вас будет отдельное время Ну чтобы вы примерно представляли что картинка - это не что-то страшное

у вас будет отдельное время Ну чтобы вы примерно представляли что картинка - это не что-то страшное а любая картинка - это просто любая картинка - это просто мат А ну хотя сейчас погодите кое-что я хотел вам здесь показать ещё сейчас открою Не на гитхабе а входит так в общем в общем вот в общем вот собственно говоря вот наше задание Вот наше задание Вот например какая-то картинка просто из интернета взятая случайная картинка будете просто ссылка и я её подгружает вам подгрузить картинку можете

взятая случайная картинка будете просто ссылка и я её подгружает вам подгрузить картинку можете взять такую же возникнет проблема с этой можете посмотреть в сторону какой-то другой никаких проблем то есть Вот видите вот оно изображение изображение это просто даже тип данных у нас с вами тип данных на Т это картинка вот собственно горя размерность картинки 664 Вот она вот здесь у меня это высота картинки 1601 - это ширина картинки как вы думаете три что это такое ГБ канал Да Гб на лекции мы с

картинки 1601 - это ширина картинки как вы думаете три что это такое ГБ канал Да Гб на лекции мы с вами обсуждали чёрно-белое здесь будет цветное изображение цветное изображение Ну и так вам немножко нужно пощупать картинку задание здесь следующее то есть нужно оставить только красный канал только синий только зелёный чтобы изображение было чисто вы увидите что контур не потеряется вы также [музыка] ВС это будет видно Несмотря на то что вы рисуете в красном цвете в синем или в зелёном тут сама

ВС это будет видно Несмотря на то что вы рисуете в красном цвете в синем или в зелёном тут сама логика чтобы матри пощупать поработать с ними так далее ну собственно говоря 33 задания это и 34 тут в принципе всё подробно расписано всё подробно расписано Тут нужно правильно умножить или сделать так называемый правильно прямой проход алгоритма то есть веса за вас здесь уже Да даже ес СРО убрать ве Вот они я вам м как было пря на лекции совпало просто можно было назвать веса первого шага Вот это

Вот они я вам м как было пря на лекции совпало просто можно было назвать веса первого шага Вот это веса второго шага да или вот первый шаг вот второй шаг собственно говоря нужно прогнать нужно прогнать можно прогнать через изображение изображение через вот такую архитектуру вот этом то есть вот если вы вот эти два не успеете сделать не смертельно вот до картинки дойти это будет хорошо Это ваш минимум на сегодня Ну и Последний пункт он уже дополнительный для тех кто сегодня локомотивом полетит

на сегодня Ну и Последний пункт он уже дополнительный для тех кто сегодня локомотивом полетит Да и имеет какой-то не знаю ну короче бэкграунд Да позволяет всё это дело быстрее сделать вот четвёртое - это собственно говоря типа ранг матрицы можете почитать про все вещи типа ран обратная матрица потому что с точки зрения кода - это одна команда ну типа одна стро с ВС у матри почитается больше можете немножечко ТНУ что это к чему опять же это всё со звёздочкой Если вы это не делаете ничего

можете немножечко ТНУ что это к чему опять же это всё со звёздочкой Если вы это не делаете ничего страшного в этом вообще не Какие вопросы ко мне а ну и да последний комментарий последний комментарий у вас вот здесь в репозитории лежит блокнот впе сильно не напрягаясь Не надо тут считываться и пытаться понять каждый символ я сам 80% этого не помню вообще просто посмотреть о возможностях нампа Да так быстренько пролистать здесь все эти вещи по поводу сложения вычитания по поводу условных

Да так быстренько пролистать здесь все эти вещи по поводу сложения вычитания по поводу условных конструкций по поводу того что можно всё без Фора делать Ну короче он как бы достаточно большой но не знат Что мдо сегодня угореть по нему и понять кажы Вот это будет ваша небольшая Галка иго за 2 дня у вас будет за 2 дня у вас будет фокус нампа достаточно большой причём на во многом будет ну таком как бы уже на само изз учени естественно я рядом gpt рядом чат с коллегами в группе Рядом рядом дефай

бы уже на само изз учени естественно я рядом gpt рядом чат с коллегами в группе Рядом рядом дефай рядом Ну вот надо подраз браться пощупать эту библиотеку потому что это ВС рано од из основных библиотек же как бы со среды уже фокуса на нампа не будет а вот понедельник вторник так как нампа - это матричное преобразование очень часто поэтому когда как не в дни линейной алгебры с ним разобраться Всё теперь я сказал всё Какие раунд раун Да раунд именно так если чат Да Любу добавьте обязательно не у

теперь я сказал всё Какие раунд раун Да раунд именно так если чат Да Любу добавьте обязательно не у нас только discord сла добавьте Любу у меня ещ про по поводу пятничного видео добавить сегодня лучше на фокуси если у вас в голове сидит мысль А повторю я прошлую неделю это неправильная мысль Да сиди такая мыс врем вечерком не переживай много времени не будет занимать сильно Точнее не так много времени будет занимать потому что база уже выстроена вы сами того этого не понимаете пока что не

времени будет занимать потому что база уже выстроена вы сами того этого не понимаете пока что не осознаёт просто потому что мало времени прошло но всегда быстро к этому откате сейчас лучше фокусироваться на дней Потому что сейчас начнёте выпадать здесь просять к концу недели конкретно а присаживаться к концу недели нежелательно А когда лучше пожива после вечерка в баре присаживаться да Когда лучше присаживаться если Если к концу пятницы нельзя просаживается [музыка] Если сейчас не Когда

лучше присаживаться если Если к концу пятницы нельзя просаживается [музыка] Если сейчас не Когда присаживаться можно просаживается присаживаться хорошо так и делаю Да ну что всё тогда давайте хорошего дня вам и если что Всё правильно на связи Всем пока пока-пока а

сер звук включ Выключишь сорри Доброе утро всем ещё раз так кого-то у нас нет Люб Да по-моему нет Угу Так ну что Надеюсь сегодня мы с вами быстро справимся сегодня прям такой как бы сильно нагрузок будет теория не будет есть сегодня на вас больше нагрузка ложится так видно экран Да собственно говоря вот мы дошли с вами начинали с самого простого подбрасывали монетку Да и какие там были комбинации после двух подбрасывания заканчиваем последня тема эту неделю это тестировани вы очень часто увидите

двух подбрасывания заканчиваем последня тема эту неделю это тестировани вы очень часто увидите его [музыка] в они называются вакансиях вакансиях Там как бы Когда будет [музыка] информации Да которая у нас с вами была на этой неделе то есть часто вакансиях у вас не будут прописывать проверка статистических гипотез а будут писать А тестировани вот там где там где вы видите вакансии а тестирования это как бы подразумевает что от вас требуется экспертиза а та которую мы с вами обсуждали на этой

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

атест Ну вот смотрите например да Допустим мы работаем в интернет издании каждый день к нам заходят пользователи и смотрят наш контент Наша задача рекомендовать пользователю максимально релевантно статьи Да это вообще задача рекомендательных систем с ней сражатся tikt YouTube shorts в том числе и ещё много разных платформ типа там не знаю Яндекс музыки книжные сервисы и так далее В общем с их стороны Понятно рекомендовать пользователю максимально релевантные статьи чтобы пользователь больше

стороны Понятно рекомендовать пользователю максимально релевантные статьи чтобы пользователь больше времени проводил на нашем сайте возвращался в дальнейшем ранее у на была какая-то моде рекомендаци но пови ноде ю лучше если мы е внем Как количественно оценить что рекомендации стали лучше Вот собственно говоря этим занимается тестирование именно этим занимается тестирование и опять же как тестирование как тесты могут даже не понадобиться в сильном виде Есть разница Ну прям колоссальная да А

как тесты могут даже не понадобиться в сильном виде Есть разница Ну прям колоссальная да А если речь идёт о небольших разних иние чего-то трет бох всё это через атест через та тест аккуратненько крутит Итак обобщённый алгоритм об тестирования наш трафик делится на две группы может и больше называют их как правило контрольная Экспериментальная группа контрольная группа получает старые рекомендации Экспериментальная группа получает новые рекомендации после проведения А теста зафиксировать

Экспериментальная группа получает новые рекомендации после проведения А теста зафиксировать измеряемую нами метрику в контрольной и Экспериментальный группы и сделать вывод Есть ли статистически значимые отличия а тестирование на данный момент является лучшим инструментом для попытки научно доказать причинно следственную связь Да потому что ну как бы в идеале конечно не получится этого сделать потому что чтобы прям чисто доказать причины следствен связ Что именно наши рекомендации на это

потому что чтобы прям чисто доказать причины следствен связ Что именно наши рекомендации на это повлияли я должен взять пять одинаковых людей 10 или 20 их клонировать и соответственно чтобы именни же смотрено это чистенький эксперимент его пытаются сделать Вот атест - это да лучший инструмент чтобы пробовать доказать причинно-следственную связь в нашем случае в нашем случае одна группа Видела бы старые рекомендации другая Видела бы новые и у нас в роли метрики бы что здесь Было бы скорее всего

старые рекомендации другая Видела бы новые и у нас в роли метрики бы что здесь Было бы скорее всего среднее время проведённое на сайте Да среднее время проведён здесь бы подол бы какой-нибудь тест Да потому что это гипотеза о среднем вот ттст здесь бы вполне справился как бы было бы именно об тестирование где под капотом просто ттст ну на рисунке у меня гипотеза о чём Как вы думаете не о среднем а о конверсия какой-нибудь конверсия Да но Какое название имеет процент подругому процент как если

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

у нас конверсия в Клик Да по нашей карточке увеличится и так далее да Саш а это же не обобщённые Да название гипотеза о доле гипотеза о среднем это просто вот здесь в Эльбрусе такие условное обозначение этих гипотез Угу Ну я что имеешь в виду я до конца Просто вчера я смотрел лекцию там были просто вот гипотеза согласия гипотеза согласия условно это вот то что одна выборка согласна другой типа имеет одинаковые какие-то Вот это гипотеза согласия и так далее Вот то есть ну гипотеза согласия - это

одинаковые какие-то Вот это гипотеза согласия и так далее Вот то есть ну гипотеза согласия - это немножко другое это критерий согласия несогласия это как правило зависит от того чётко сформулирована альтернативная гипотеза или нет это другой немножечко А вот эти-то это в принципе стандартная история Вот и как бы если вы где-то скажете вас прекрасно поймут Да что гипотеза о доле гипотеза о среднем там Хорошо я понял Так ну Для чего нужны а тесты я в принципе думаю каждый из вас это понимает Ну

там Хорошо я понял Так ну Для чего нужны а тесты я в принципе думаю каждый из вас это понимает Ну ладно проговори сознание любого продукта - это непрерывный Процесс поиска улучшений которые нужно фиксировать как правило это касается продуктов не Аля стартапов которые только где главная ценность это сейчас не аналитика Да текущего как бы процесса а построение самого продукта и так далее где вот уже как-то компания детерминировать она начинает разворачивать аналитику Да и собственно говоря

вот уже как-то компания детерминировать она начинает разворачивать аналитику Да и собственно говоря пытаются сделать всё лучше лучше лучши продукт Ну в общем да создание любого продукта непрерывный Процесс поиска улучшения который нужно фиксировать каждая гипотеза или идеи нововведений требуют требует проверки а иначе наш продукт может уйти не туда как правило вообще есть такое понятие журнала гипотез Да их аналитические отделы в каких-то там в компаниях ведут чтобы одни и те же гипотезы не

гипотез Да их аналитические отделы в каких-то там в компаниях ведут чтобы одни и те же гипотезы не тестировать Да не знаю мы проверили что сейчас делаем то то то пользователи отреагируют так так так там в этом журнале Вы можете найти что такая гипотеза проверялась уже она не взлетела и соответственно Гене Гене Гене гипотезы их как-то приоритизировать вот ожидаемое улучшение не всегда на самом деле улучшает продукт новый функционал может быть никому не нужен или реализация портит всю затею Ну к

улучшает продукт новый функционал может быть никому не нужен или реализация портит всю затею Ну к вопросу о том что то что нам кажется что типа блин вот сейчас мы сделаем это и это точно будет круто но это иногда наше возможно наше даже когнитивное искажение на что-то Да как человека как субъекта вот а тут именно показа тестов могут быть во-первых чтобы атест был корректен И это у меня лишь минимум как бы есть ещё очень много нюансов Да и если будет вам необходимость вы погрузитесь и вы поймёте

как бы есть ещё очень много нюансов Да и если будет вам необходимость вы погрузитесь и вы поймёте О чём там идёт речь там в принципе несложно но самые основные конечно наблюдения пользователей независимы независимы Да чтобы это не рушила эксперимент никак То есть если у нас покупаю чтобы покупки делали Ну насколько возможно Это независимо Да насколько возможно Это независимо вот вчера когда мы с вами кошек собак обсуждали кто любит больше кошек или кто больше собак Я даже проговорил что надо

с вами кошек собак обсуждали кто любит больше кошек или кто больше собак Я даже проговорил что надо вот и независимо это да то есть не смотреть что а доминирует одно теперь мы будем выбирать другое Именно тогда как бы эксперимент становится чистым вот группа пользователей эквивалентны из одной генеральной совокупности вот второе очень часто нарушается второе очень часто нарушается [музыка] може приходит инструмент деления нашего трафика работает ошибочно и ещё бывает такое что мы можем случайно

инструмент деления нашего трафика работает ошибочно и ещё бывает такое что мы можем случайно попасть на не репрезентативные выборки А всё это подразумевает тот факт что у Вас как бы вы понимаете в идеале в идеале Я хочу взять две группы которые изначально как бы Аля одинаковые потом одно и что-то сделать и посмотреть как стало лучше или хуже вот а иногда бывает такое что если вы кое-что не проверите что одна группа уже лучше чем другая представляете группа Б уже оказалась лучше чем группа А ну

что одна группа уже лучше чем другая представляете группа Б уже оказалась лучше чем группа А ну так получилось как бы что она не репрезентативна оказалась выбо мы выкатываем гипотезу и видим что лучше чем а но уже было лучше чем А это как бы промах по факту промах и неточность вот чтобы бороться с такой историей есть так называемый Аа тест что чтобы удостовериться что группа пользова [музыка] готовки данных необходимо провести Аа тест В чём суть Аа теста простыми словами смотрите вот

готовки данных необходимо провести Аа тест В чём суть Аа теста простыми словами смотрите вот Представьте что мы с вами та те самые как бы испытуемые да нас вот 11 человек Давайте собственно го вот я Саша Настя Серёжа и кости мы группа А да мы контрольная группа Нам будут показывать стары все остальные ребята группа Б конечно стараются делать одного размера но как бы у нас 11 поэтому без варианта вот в чём заключался Аа тест нас разбили с вами на две группы нас разбили на две группы и

варианта вот в чём заключался Аа тест нас разбили с вами на две группы нас разбили на две группы и предварительно показывают и тем и тем старые рекомендации Вот если бы это вот в контексте задач которые мы с вами обсуждали это было бы что г Да вот вот эта задача с интернет изданием это бы значило что нам и группе А да и остальным ребятам тоже будущем ГП показали одно и тоже тем самм что ВС у нас с вами одинаково Если как бы как на ваш взгляд атест правильный Какой хороший для нас больше чем 05

с вами одинаково Если как бы как на ваш взгляд атест правильный Какой хороший для нас больше чем 05 или меньше Ну или какая гипотеза для нас хороша больше 05 Да больше потому что мы остаёмся в0 а это значит что группа эквивалентна Да и как бы можно стартовать без всяких проблем вот пос это [музыка] но вобще бы в задачах это проде так пому больше чем 05 а не просто 055 вот что е в принципе как бы то есть всегда все дни которые у нас были у нас были детерминированные выборки в реальности выборки

то есть всегда все дни которые у нас были у нас были детерминированные выборки в реальности выборки копятся во времени да то есть иногда эксперимент нужно держать неделю Иногда нужно держать месяц Иногда нужно день-два то есть это как бы разная история всегда и и и и А мы с вами поговорим про такое понятие что надо смотреть именно на кумулятивные метрики для этого можно Взглянуть на вот этот график и почему это важно в том числе вот смотрите эксперимент будет заключаться в следующем я буду

график и почему это важно в том числе вот смотрите эксперимент будет заключаться в следующем я буду держать свой а свой статистический тест 60 дней У меня к сожалению ежедневно появляется только 10 ну 20 элемента выборки Да ну или 10 в каждой группе контрольной Экспериментальный это может быть покупка какая-то Да это может быть там не знаю вот как раз-таки вход в интернет-издание наше с вами который у нас был и так далее а Итого получается за 60 дней сколько я накоплю выб Ну то а да да по 600

у нас был и так далее а Итого получается за 60 дней сколько я накоплю выб Ну то а да да по 600 по 600 в каждом по 600 в каждом и мы с вами посмотрим то есть что у меня здесь все эти списки это [музыка] ежедневно мы будем смотреть будем смотреть метрику среднего и [музыка] кумуляция сню на графике что это такое здесь собственно говоря я пошёл по дням генерируют У меня разница на самом деле есть то есть видите она на пять а это значит что истинна гипотеза H1 на самом деле то есть какого-то буста

есть видите она на пять а это значит что истинна гипотеза H1 на самом деле то есть какого-то буста я добился но посмотрим как как это всё выглядит на графиках вот если смотреть ежедневное среднее А такое периодически смотрят то возникает у нас с вами такая история Вот вы никогда бы в левый график посмотрев не поняли бы на 100% что вот как бы жёлтенькая у меня доминирует Да над контрольным графиком над чёрным Ну не очень это понятно где-то На самом деле чёрная было лучше в какой-то день лучше

над чёрным Ну не очень это понятно где-то На самом деле чёрная было лучше в какой-то день лучше покупала контрольная группа да в какой-то лучше Экспериментальная группа вот поэтому всегда нужно смотреть именно на график кумулятивного среднего а кумулятивно средня график он на самом деле важный Вот давайте я на примере конверсии покажу конверсия Представьте что у меня в первый день в первый день у меня зашло 100 человек 100 человек да и купила 90 во второй день у меня зашло 1.000 человек и

у меня зашло 100 человек 100 человек да и купила 90 во второй день у меня зашло 1.000 человек и купила и купила Купила Давайте 100 ладно вот так вот Вот это понедельник предположим Вот это вторник Давайте посчитаем конверсию сколько у нас конверсия в понедельник получается 90% согласны А во вторник 10% так вот у меня вопрос какова средняя конверсия у нас с вами на вторник ко вторнику В смысле чуть меньше девятнадцати чуть меньше Дети так услышал или ты или что а Дада Да не вопрос Вы правильно

меньше девятнадцати чуть меньше Дети так услышал или ты или что а Дада Да не вопрос Вы правильно поняли среднюю конверсию 19,2 Да с достал 17 Ну типа 19 на точнее 0 на Если я правильно понял 190 да я ты правильно понял И самое главное как бы вот здесь есть такая ошибка посчитать конверсию здесь 90% а здесь 10% и сказать что средняя конверсия Сколько получается 50% это неправильно Почему неправильно всем ли Понятно хочу чтобы вы подумали потому что у нас с вами здесь сся здесь то знаете как в

всем ли Понятно хочу чтобы вы подумали потому что у нас с вами здесь сся здесь то знаете как в басе да когда диспропорция есть большая и мы со не [музыка] правиль 9 А если кумулятивная я бы считал Это любая метри средний чек и конверсия и там дисперсия ВС что угодно на понедельник у меня была бы с вами Сколько получается 90% да ну или я запишу вот так то есть 100 купивших ой 100 пришедших 90 купивших это было 90% а на вторник ко вторнику у меня купивших потому что 1000 новых людей прило ой

купивших это было 90% а на вторник ко вторнику у меня купивших потому что 1000 новых людей прило ой пришедших точне и 190 купивших 190 Я так понял 172 Да это примерно про то есть представляете какая разница 50% 17,2 Так вот кумулятивность это про вот этот случай и надо Правильно У вас тоже просто будут сегодня данные записаны какм надо будет правильно собрать аккумуляции потому что именно так правильно считать там какие-то гипотезы и тому подобное вот да да ГИС Абсолютно верно говорит так

правильно считать там какие-то гипотезы и тому подобное вот да да ГИС Абсолютно верно говорит так сейчас вот собственно говоря по правому графику можете взглянуть как это выглядит А в силу закона больших чисел силу закона больших чисел рано или поздно средняя каждой группы начнёт приходить где-то как бы в конце туннеля если в реальных задача гори если бы всех взять тех кому показали рекомендации с б и всех кому А если там разница действительно есть то мы всё ближе бы к ней приходили правильно у

б и всех кому А если там разница действительно есть то мы всё ближе бы к ней приходили правильно у нас она действительно есть 105 против 100 но Обратите внимание Какой сложный период нам приходится проходить в начале согласны вот здесь вот представляете там не знаю Саша приходит день У него вообще не то хотел выделить собственно говоря Ну давайте десятый день десятый день Саша приходит на работу смотрит истина но а он эту гипотезу придумывал буквально вынашивал и она должна была взорвать просто

истина но а он эту гипотезу придумывал буквально вынашивал и она должна была взорвать просто в итоге мы видим что но все на дизморали пристроена а на самом деле как бы счасть не за как говори да то есть не так далеко идти примерно И это самом больша проблема называется проблема подглядывание чуть дальше мы её поговорим с вами А когда останавливать в эксперимент вот сколько на ваш взгляд элементо выборки надо копить Вот вы выдвинули гипотезу сколько вам элементо выборки надо потому что элементы

выборки надо копить Вот вы выдвинули гипотезу сколько вам элементо выборки надо потому что элементы выборки А да отвечаю отвечаю на твой вопрос есть вот Подумайте пока на вопрос я сейчас принесу себе зарядку тут Сколько нужно элементов выборки вот Как определиться как бы если я буду 10 дней держать эксперимент Ну соответственно я могу в ловушку попасть А если там 30 дней то могу уже не попасть и вот в какой момент собственно говоря надо тормозить какие у вас есть идеи по этому поводу и часто

и вот в какой момент собственно говоря надо тормозить какие у вас есть идеи по этому поводу и часто как бы атестат [музыка] Если вы при на и СРО скаже что я придумал гипоте кафо Давайте годик подержи и посмотрим вас только испытательный срок 3 месяца я думаю что врядли вам одоб проверку вашей гипоте работала Ну это я прочитал это это правильно Да но это немножко не то это немножко не то вот то есть тут как бы 30 - Это просто типа Нижний лимит вообще для порога входа грубо говоря А вопрос

то есть тут как бы 30 - Это просто типа Нижний лимит вообще для порога входа грубо говоря А вопрос Сколько верхний лимит типа потому что Представьте Представьте такую во-первых верхний лимит это бесконечно держать собрать всю выборку но в реальности это понятно сложно Почему Потому что ограничение во времени есть ограничение в сборе иногда не знаю Пять элементов выборки в день приходит иногда 100 элементов выборки день иногда 1.000 и держать э держать этот атест классно конечно наше решение

100 элементов выборки день иногда 1.000 и держать э держать этот атест классно конечно наше решение будет всё точнее и точнее это скорее про закон больших чисел помните когда маленькие выборки мы можем сильно отклониться от реального значения генеральной совокупности это как бы и Центрально определены терим в том же Но на больших выборках это делать всё сложнее То есть если было бы строить если бы мы бы строили доверительный интервал в каждый момент времени то чем мы дальше заходим он бы сжался

мы бы строили доверительный интервал в каждый момент времени то чем мы дальше заходим он бы сжался бы этот доверительный интервал да то есть в начале он бы мог быть вот например не знаю берём вот эту точку Или давайте вот эту точку в начале он может быть очень здоровым доверительный интервал потому что он зависит от объёма выборки вы вчера его считали то есть получил я к десятому Дню вот для экспериментальной группы среднее 103 оно бы было бы в доверительном интервале очень большим

вот для экспериментальной группы среднее 103 оно бы было бы в доверительном интервале очень большим доверительный интервал зависит от объёма выборки и в конце концов он бы потихоньку начал сужаться хорошему надо так чтобы доверительные интервалы не пересекались у этих двух групп тогда это будет статистически значимое решение если сюда ещё доверительные интервалы прикручивать Вот Но где останавливаться то есть держать есть такой классический м на эту историю Сейчас я его попробую найти всё хотел

то есть держать есть такой классический м на эту историю Сейчас я его попробую найти всё хотел его вставить сюда но всё не встал Ну вот что-то типа такого когда решил держать АТС 2 года то есть очень такая характерная История это конечно классно и прекрасно но 2 года держать через 2 года мир уже будет другим поэтому поэтому поэтому надо конечно знаете что нужно делать нужно пытаться вычислить минимальный объём выборки который удовлетворит наши прихо по нахождению эффекта кото мым для этоо

минимальный объём выборки который удовлетворит наши прихо по нахождению эффекта кото мым для этоо сегодня с вами обязательно разберёмся Но чуть подальше да ко А ну всё ты ответил у меня просто было предположение Я думал к чему привязаться чтобы вычислить вот момент где нужно остановиться я привязался бы Например к какому-то проценту от генеральной совокупности То есть я бы предположил мы знаем Сколько в ГС Ну примерно я бы сказал Вот 5% пока не наберётся выборки из всей ГС то как бы вот держим

в ГС Ну примерно я бы сказал Вот 5% пока не наберётся выборки из всей ГС то как бы вот держим на самом деле не совсем так не привязываются ВС равно главный ресурс - это конечно время так или иначе То есть все хотят как можно быстрее его крутить Вот но минимальный объём выборка с точки зрения статистики зависит от немножко других вещей чуть ниже у нас будет формула мы [музыка] соберём вот так давайте дальше идти Вот иногда график смотрит не в таком виде не в таком виде когда с а смотрит вот в

дальше идти Вот иногда график смотрит не в таком виде не в таком виде когда с а смотрит вот в таком в таком виде То есть это может быть любая Метрика разница одного человека от другого Давайте Вот её мы с вами перевариваем тут в принципе иногда пишут B де а иногда А Де это как бы в принципе без разницы но как по мне B де де а показывает историю лучше Вот скажите пожалуйста Глядя на форму сможете енро что она показывает переводить формулу цифры в понятный язык Ну мы Наверное каждый день смотрим

енро что она показывает переводить формулу цифры в понятный язык Ну мы Наверное каждый день смотрим разницу между аккумуляционный вот экспериментальной и контрольной Ну я же их не вычитают делю Ну предположим это средний чек Да что очень часто бывает Ну процент отличие там да одна да ну и типа единица Ну если Типа если отрицательную то а выигрываете если положительную то б Да ну то есть если в каком-то смысле говорить то какая Насколько процентов B отличается от а правильно именно разница

в каком-то смысле говорить то какая Насколько процентов B отличается от а правильно именно разница потому что мы минус единичку вычитаем и в нашем случае это может вылиться Вот в такой не может вылиться в такой запустим эксперимент вот здесь повезло видите сразу однозначно прыгнули одно сверху пошло одно снизу но нет гарантии что вы будете теми счастливчика на практике нам с точки зрения статистики надо просто минимизировать риски и всё и не думать даже об этой случайности просто минимизировать

надо просто минимизировать риски и всё и не думать даже об этой случайности просто минимизировать риски вот собственно говоря график как мы видим сначала доминировала группа а контрольная хотя она хуже Я генерированию в силу закона больших чисел приходить к какому-то своему значению в данном случае у нас 5% как-то так как-то так поэтому на десятый день остановить тест было бы большой ошибкой было бы большой ошибка так прежде чем ещё собственно говоря прийти к тому чтобы Как считать выборку так

бы большой ошибка так прежде чем ещё собственно говоря прийти к тому чтобы Как считать выборку так чтобы случайно раньше времени не заглянуть я ещё дам небольшой комментарий по поводу выбросов он пригодится вам на практике сегодня в реальных задачах всегда есть выбросы эти выбросы могуть связаны с каким-то ными сбоями или представляете Я бы хотел бы проверить что у меня средний чек увеличивается группы А и группы Б по факту я научно вчиняю причинно-следственную связь А ко мне приходит типсон в

группы А и группы Б по факту я научно вчиняю причинно-следственную связь А ко мне приходит типсон в группу б у него настроение было такое ну он захотелось ему по покупать и он у вас купил всё что только можно то есть у него у него очень большой чек он попадает в группу б он средне этой группы Б поднимает и мы каже нам кажется что у нас есть эффект Но на самом деле на самом деле как бы это просто так вышло понимаете да то есть ему Я думаю что вот этому парню который купил на все бабки без

так вышло понимаете да то есть ему Я думаю что вот этому парню который купил на все бабки без разницы в группе А он оказался или в группе б что он там увидел что мы поменяли Да предположим интерфейс чуть-чуть поменяли сайта Да интерфейс сайта поменяли и проверяем как среднестатистические пользователи реагируют вот такие как бы пользователе надо убирать стараться потому что они бы при следственных связей Да [музыка] вот можно ещ пока Дальше не пробежались пробеги ещё разик по графикам вот ты

связей Да [музыка] вот можно ещ пока Дальше не пробежались пробеги ещё разик по графикам вот ты например получил эти результаты и первое что у тебе приходит в голову как бы что ты с них ну что ты из этих графиков видишь выше выше прямо с самого самого начала Подожди где там это а всё это первый Да всё Ты вот потом и следующее Вот это увидел и Ну просто вот пока ты как бы что ты Какую информацию ты с них получаешь вот я вижу что Экспериментальная группа доминирует над контрольной группой чески

ты с них получаешь вот я вижу что Экспериментальная группа доминирует над контрольной группой чески значимо это или нет Я не знаю надо проверить через стат тест Угу Выглядит как будто бы статистически значимо как бы как это на самом деле то есть это как раз таки атест это и проверяет то есть есть это получается вот это жёлтое да это получается а или потому что потом дальше у нас эта формула в которую мы делим график то есть он тебе говорит что вот это вот это Поэтому если провести параллель то

мы делим график то есть он тебе говорит что вот это вот это Поэтому если провести параллель то вот с этим ниже кото собственно говоря можно увидеть что эти графики ведут себя Похоже да что как бы это де вначале как бы а доминирова над поэтому начинает приходить к вот этим [музыка] пятипроцентного выражается То есть как бы он однозначно повторяет потому что вот как бы грубо говоря если вот это разделить на Вот это и сделать Да Дада оно будет это разница понятно да Дима вот у меня тоже по графику

на Вот это и сделать Да Дада оно будет это разница понятно да Дима вот у меня тоже по графику второму вопрос то есть я понял что я не понимаю про что он кумулятивное среднее правильно для двух групп Каким образом как кумулятивное среднее может вообще опускаться относительно предыдущего значения если оно кумулятивное Нет есть кумулятивная группа вот Представь что ещё раз давайте вот как Давайте просто быстренько на примере двух человек вот мы с тобой Дима группа а представил контрольная группа А

быстренько на примере двух человек вот мы с тобой Дима группа а представил контрольная группа А вот Оля Сержа группа Б если группа Если мы с тобой лучше покупаем то как ты думаешь график вот этот будет ниже или выше если мы группа покупаем лучше то он будет ниже Вот вот так собственно говоря у нас и получилось вот здесь нет это сечас а этото ВТО име не нет А меня про третий как бы вопроса нет у меня вот именно про второй график вопрос про второй это какой Ну вот вот этот не нет выше предыдущий

вот именно про второй график вопрос про второй это какой Ну вот вот этот не нет выше предыдущий вот этот правее который правый вот этот да вот про это То есть я здесь же Каждый каждый график показывает кумулятивное среднее по группе правильно Да да кумулятивно это я насколько понимаю это мы каждый раз следующее значение прибавляем предыдущее Да дада да Нет я имею в виду ты имеешь в виду как бы Когда мы будем запускать стат тест не всё это будет являться выборкой Нет я имею в виду вот мы возьмём

мы будем запускать стат тест не всё это будет являться выборкой Нет я имею в виду вот мы возьмём ка любой один из этих двух графиков либо для группы А либо для группы Б Почему предыдущее Почему последующее значение здесь может проваливаться если оно может только накапливаться и будет всё больше больше и больше вот мне что не Поня кумулятивно среднее кумулятивно среднее может уменьшаться спокойно Может уменьшаться ты купил в первый день на 10 руб у тебя средняя 10 во второй день купил на 5 руб

Может уменьшаться ты купил в первый день на 10 руб у тебя средняя 10 во второй день купил на 5 руб Средняя 7 с поно то есть на данный момент здесь кумулятивная средня 10 а на этот день кумулятивная средня 7 с по на каждый день кумулятивно за все предыдущие дни дано спасибо Так ну что ж возвращаемся к выбросам выбросы надо удалять но как бы всё это условности в том плане Никто вам не скажет точно что являтся выбросами есть условности вопервых Кост ги всегда её держите при себе а Не ищите

точно что являтся выбросами есть условности вопервых Кост ги всегда её держите при себе а Не ищите какие-то скорее прям сверх стандартные шаблоны Да выброс это понятие условное Ну как правило смотрят стопроцентный центиль или депрон центиль вот как бы там как задачи выгоднее так собственно говоря и делаю их лучше убирать и у вас сегодня как раз из запу ри с выбросами и без них и посмотреть как это собственно говоря может влиять вот так Ну что ж мы уже финишной прямой блим теперь я в принципе

это собственно говоря может влиять вот так Ну что ж мы уже финишной прямой блим теперь я в принципе это уже в неявном виде проговорил Но вообще это имеет название Вы можете с этим столкнуться называется проблема подглядывания проблема подглядывания заключается в том что я хочу остановить Ну то есть когда входит чис что максимально не раскрывается давайте сейчас я запущу А тут надо ещё чтобы мне повезло с генерации се объясню что я имею в виду здесь просто А вот например вот такая история пусть

с генерации се объясню что я имею в виду здесь просто А вот например вот такая история пусть будет такая история вот смотрите мы с вами сформулировали гипотезу К сожалению она не взлетела то есть истина h0 Обратите внимание я генерируют из одного и того же эксперимента и я бы хотел Конечно я в глубине души хочу чтобы у меня была истинна гипотеза H1 и Прихожу я такой Значит на работу да держим эксперимент сколько там дней мы его держим 60 дней опять и на второй день на второй день pv у нас с

эксперимент сколько там дней мы его держим 60 дней опять и на второй день на второй день pv у нас с вами ниже чем вот уровень 0,5 кажется что вот она Эврика Да и гипотеза сработала но слишком на маленьких выборках большая дисперсия в силу Центральной предельной теорема и мы можем просто случайно сюда залететь И это не будет ничего иметь общего со статистически значимыми выводами Вот это история когда мы останавливаем эксперимент раньше чем достигаем минимального объёма выборки чтобы быть

когда мы останавливаем эксперимент раньше чем достигаем минимального объёма выборки чтобы быть уверены в решении называется проблема подглядывания Она всегда имеет место быть и всегда хочется но как бы на маленьких выборках лучше решение не делать да проблема подглядывания раскрывает как раз таки проблему маленьких выборок что мы можем просто случайно залететь как у меня получилось здесь если мы уходим дальше ну здесь как бы не явным видем вот Ну вот здесь например смотрите да то есть вот в

мы уходим дальше ну здесь как бы не явным видем вот Ну вот здесь например смотрите да то есть вот в начале из-за того что контрольная группа Как вы видите она у меня просто-напросто в один момент случайно оказалась выше существенно чем экспериментально чем экспериментально и у меня pv pv получился меньше чем 05 Казалось бы вот она разница капец колоссально но если держать эксперимент дальше то как Потихоньку всё начинает выравниваться и приходить к реальному значению наш лишь вопрос стоит в том

Потихоньку всё начинает выравниваться и приходить к реальному значению наш лишь вопрос стоит в том А где собственно говоря уже принимать уверенное решение на какой на Двадцатый день может быть на сороковой день может быть на й день может быть на десятый день то есть вопрос остаётся открытым потому что как вы видите Ну я думаю вот этот рисунок очень хорошо показывает насколько как бы можно по-разному да лицезреть Что происходит если смотреть в разные дни в разные дни и как бы во-первых это да

да лицезреть Что происходит если смотреть в разные дни в разные дни и как бы во-первых это да ещё раз повторюсь называется проблема подглядывания когда мы хотим остановить или picking problem когда мы хотим остановить эксперимент раньше времени для этого для этого надо сразу на берегу определяться сразу на берегу определяться Сколько времени нам держать атест И для этого есть формула есть формула Вот она есть формула а которая позволяет нам оценить минимальный объём выборки эта формула

формула Вот она есть формула а которая позволяет нам оценить минимальный объём выборки эта формула достаточно в принципе известна и она агрегировать себе по факту четыре основных сущности вокруг которых статистика возится какие это сущности во-первых это ошибки первого и второго рода они влияют на минимальный объём одно дело когда я не хочу ошибаться вообще другое дело когда я готов ошибаться дальше дисперсии дисперсии далее вот этот треугольник это минимальный эффект который мы хотим закти Ну

дисперсии дисперсии далее вот этот треугольник это минимальный эффект который мы хотим закти Ну и собственно говоря объём выборки Вот они вот эти че суно статистически их связывает од Фор форму Давайте пойдём по порядку начнём с дисперсии дисперсия группы А дисперсия группы Б почему это важно Почему это важно Представьте случай когда они у меня лежат вот так вот то есть вот у меня группа А вот у меня группа Б Ну пусть это вот 100 и 1005 100 и 105 105 даже давайте знаете как сделаем с вами

у меня группа Б Ну пусть это вот 100 и 1005 100 и 105 105 даже давайте знаете как сделаем с вами Сейчас секунду лучше нарисую отдельно мы к этому будем возвращаться [музыка] вот Представьте ситуацию следующего характера м вот есть у меня как бы а есть у меня как бы распределение группы А и есть распределение группы Б вот когда у нас большая дисперсия то они накладываются друг на друга достаточно и вот в данном случае истинна гипотеза H1 действительно группа Б стала лучше чем группа а но в чём

и вот в данном случае истинна гипотеза H1 действительно группа Б стала лучше чем группа а но в чём проблема Проблема в следующем что вот даже если бы мне границу принятия решения разделения надо было бы где-то сделать Ну слишком дисперсия велика и они друг друга и наезжают например Вы получили по выборке среднее 104 Вот Вы получили средне 104 вы никогда не уйдёте в сторону улучшения что группа Б улучшилась Вы скажете что это вот здесь вероятно и останетесь в консервативной своей истории

Б улучшилась Вы скажете что это вот здесь вероятно и останетесь в консервативной своей истории останьтесь в своём консервативном А как бы консервативном м мире Да потому что риск ошибиться очень большой очень большой Я бы ещё такой пример а привёл Я давайте сначала нарисую другой сценарий другой сценарий когда группа а имеет те же самые 100 Да и группа Б имеет те же самые 105 но они имеют маленькие дисперсии практически не пересекающиеся практически не пересекающиеся тогда как вы понимаете

дисперсии практически не пересекающиеся практически не пересекающиеся тогда как вы понимаете гораздо легче это определить Да потому что как бы я даже неправильно выделил вам Не не А надо это назвать не А и Б А как бы h0 H1 это в принципе если как бы поглубже задуматься эквивалентной мысли Ну вот лучше h0 H1 чтобы у меня сейчас лучше поняли то есть это вот h0 а вот это H1 то есть есть у нас улучшение в сторону H1 Либо всё-таки мы остались как в h0 и вот здесь стоит как бы увидеть эту историю Да

в сторону H1 Либо всё-таки мы остались как в h0 и вот здесь стоит как бы увидеть эту историю Да что дисперсия капец как на это влияет потому что нам с вами нужно будет принять где-то границу Ну разделения разделения и вот здесь она была бы очень лёгкая и у меня риски ошибиться были бы минимальные вообще минимальные то есть ну когда мы попали бы сюда мы бы с вами приняли H1 А насколько это вероятно при h0 Да практически нифига уходит в ноль То есть это знаете как раньше был средний чек 100 п ми1

при h0 Да практически нифига уходит в ноль То есть это знаете как раньше был средний чек 100 п ми1 осталось 105 но согласитесь как бы хочется сказать что улучшение есть верно средний чек был 100 п ми1 а раньше было 100 п ми1 ой 100 п -2 здесь я вот так поставлю А стало 105 плю мину 20 вот из-за того что вот эти плюс минус 20 105 вам не будет казаться чем-то редким и у вас не будет основания уро вот чтобы выкупать разницу при таких больших дисперсия нужна большая выборка тогда закон больших

вот чтобы выкупать разницу при таких больших дисперсия нужна большая выборка тогда закон больших чисел начинает всё как бы сводить к генеральной совокупности к её параметрам но как бы сама дисперсия требует больше выборки Обратите внимание поэтому она находится в числителе Потому что если у дроби больше числитель Да будет больше результат соответственно больше потребления выборки мы имеем далее Давайте теперь пойдём по поводу По поводу а mde Minimal detect Effect его называют Если вы хотите

Давайте теперь пойдём по поводу По поводу а mde Minimal detect Effect его называют Если вы хотите Если вы хотите сформулировать минимальное вот сейчас услышите мою мою мысль потому что это отличается от того что мы с вами разбирали в остальные дни мы вообще с вами ошибку второго рода никак не трогали вот настал момент и её потрогать а [музыка] Если вы хотите посчитать минимальный объём выборки то вы обязаны указать какой вы минимальный эффект хотите получить к сожалению к сожалению к сожалению

вы обязаны указать какой вы минимальный эффект хотите получить к сожалению к сожалению к сожалению большому не всегда мы это заранее знаем Но примерно прикинуть стоит всё равно например Серёжа сгенерировал гипотезу Да которая говорит что там вот это вот идея должна увеличить Там средний чек как бы это и будет mde это минимальный эффект если больше классно мы будем только рады как бы наша гипотеза победить но мы смотрим минимальный эффект которого нам возможно бы хотелось чтобы окупа свои

победить но мы смотрим минимальный эффект которого нам возможно бы хотелось чтобы окупа свои инвестиции да то есть внедрение это стоит столько-то а как бы нам нужен прирост как минимум какой-то Вот только так мы можем как бы только так мы [музыка] можем только так мы можем к сожалению посчитать объём выборки потому что Представьте одно дело одно дело было 100 и мы хотим увидеть 101 Ну возможно надо очень много выборки чтобы увидеть эту разницу а другое дело мы хотим 100 ой у нас 100 а мы хотим

очень много выборки чтобы увидеть эту разницу а другое дело мы хотим 100 ой у нас 100 а мы хотим чтобы стало 200 Я возможно и без 100 тестов вам по двум объектам выборки скажу что блин если 200 но улучшение есть да то есть Всё может быть однозначно без статистического теста это наводит на эту мысль что вот как бы вот этот минимальный эффект который вы хотите увидеть без него никак не посчитать объём выборки никак Вот это следующая сущность и Обратите внимание Она находится в знаменателе а это

выборки никак Вот это следующая сущность и Обратите внимание Она находится в знаменателе а это значит что чем больше вы хотите увидеть эффект Ну давайте будем базироваться что у нас средний человек 100 и мы проверяем хотя бы на 5% - это 105 или хотя бы на 20% 120 так вот чем больше у нас с вами эффект тем элементо выборки что нужно Больше Меньше меньше меньше потому что чем больше знаменатель тем меньше выборок и это очень даже логично Ну типа Нафига мне много выборки когда мне нужно детек

тем меньше выборок и это очень даже логично Ну типа Нафига мне много выборки когда мне нужно детек разницу в 20 ещё это называют типа задеть То есть когда статистический тест выкупает и находит детект разницу чтобы зать такую Большую разницу выборка уже нужна поме ре рационально с минимальными ри Вот вот сейчас как-то на слух короче легло что минимальный эффект супер коррелирует с альфой который мы раньше использовали вот можешь как-то прокомментировать вот этот ну да они все между собой

мы раньше использовали вот можешь как-то прокомментировать вот этот ну да они все между собой связаны то есть они все между собой связаны пото минималь дест коррелируют с дисперсией то есть они все между собой связаны сейчас мы ещё и про ошибку поговорим то есть они однозначно коррелируют но это не значит что я не могу через Альфу однозначно выразить минимальный эффект связь есть но однозначной Связи нету К сожалению потому что Альфа - это ошибка первого рода Она говорит h0 против Она говорит

Связи нету К сожалению потому что Альфа - это ошибка первого рода Она говорит h0 против Она говорит короче эффект это вобще про ошибку второго рода а не первого Альфа - это когда мы ушли в H1 А было истинно в h0 и как бы это всё-таки про вот эту гипотезу Ну сейчас Ладно сейчас запутаются самой выборки здесь именно Сигма самой выборки Сигма квадрат А что что это ну Из какого распределения Ну тут у тебя средний чек из какого-то же распределения берётся конкретно Ну точнее средний чек состоит из

у тебя средний чек из какого-то же распределения берётся конкретно Ну точнее средний чек состоит из чеком вот какая у тебя дисперсия чека одного вот вот это и есть то есть у кого-то люди покупают на 100 руб Плюс минус 10 а у кого-то на 100 плюс минус 50 вот поэтому это а мы заранее это знаем или Ну как правило да у вас выборки есть у вас У вас выборки же есть знания есть Хорошо Так ну и ошибка собственно говоря первого и второго рода понятно что если я хочу ошибаться на самом деле Альфа не

собственно говоря первого и второго рода понятно что если я хочу ошибаться на самом деле Альфа не сильно влияет Альфа не сильно влияет сильно влияет бета сильно влияет помните когда у на была задача с кое задача с кофе я вам говорил что как бы вот есть вот эта граница которая зависит от Альфа Да и как бы я могу её уменьшать тогда Альфа у меня уменьшается но начинает увеличиваться бета короче бета в любом случае зависит от того предположим Вот это у меня критическая зона от того насколько близко

в любом случае зависит от того предположим Вот это у меня критическая зона от того насколько близко эти два купола h0 H1 расположен друг другу то есть здесь вот это бета Потому что здесь я приму h0 а была истина H1 может быть бета Вот такая то есть здесь бета существенно меньше а как бы вы эту бету сами задаёте Почему Потому что м Чем меньше выборов тем больше риск ошибиться и все вот эти четыре сущности связаны одной формулой связаны одной формулой есть разновидности этой формулы с уточнения и

связаны одной формулой связаны одной формулой есть разновидности этой формулы с уточнения и так далее Ну вот надо как бы помнить в голове что четыре сущности эффект который мы хотим увидеть насколько Мы готовы ошибаться при этом насколько у Насри большой у выборок что это однозначно влияет Ну и собственно говоря минимальный объём вы вообще как бы для этого всего для этого всего есть не вы первый Понятно А есть калькуляторы АТ да калькулятор Ате Рона Так калькулятор А теста Ну вот открываем блин

А есть калькуляторы АТ да калькулятор Ате Рона Так калькулятор А теста Ну вот открываем блин Я хочу открыть Люба здесь Люба у тебя у тебя по-моему Да да я здесь сын у тебя здесь по-моему работал Ты рассказывал в этой компании Да и продолжает работать у что-то вас сместили обычно mbx всегда на первом месте был по этому запросу передам Да собственно говоря Вот как это выглядит этих калькуляторов миллионы а то есть ну здесь например конверсия это приведено Ну то есть количество вариантов то у меня

а то есть ну здесь например конверсия это приведено Ну то есть количество вариантов то у меня две группы средний показатель указ вот ожидаемый прирост средний показатель нужен для вычисления дисперсии для биномиального распределения этого достаточно то есть по факту Здесь вы задаёте в неявном виде дисперсию То есть у нас средний показатель конверсии сечас 20% ожидаемый прирост например Мы хотим 3% вот достоверность или Доверие это всегда связано с с ошибкой первого рода То есть она [музыка]

3% вот достоверность или Доверие это всегда связано с с ошибкой первого рода То есть она [музыка] если я её начинаю увеличивать Как вы видите смотрите справа объём выборки необходимо начинает расти если я её уменьшаю то есть готов ошибаться больше ошибку первого рода совершать случайно уходить ложно в то что моя гипотеза это фантастика Тогда могу как бы собственно говоря избавлять элементы выборки теперь есть мощность есть мощность можно достоверность это Альфа получается или конфиденс интервал

теперь есть мощность есть мощность можно достоверность это Альфа получается или конфиденс интервал да то есть это конфиденс ну как бы они Они они антагонисты друг другу Точнее не не одни об одном и том же Одно однозначно определяет другое е а вот здесь а здесь достоверность - это конфиденс интервал да то есть мы задаём 95% конден интервал и тогда Альфа получается 5% правильно Да так ну интервал здесь не правильное слово просто confidence то есть мы доверяем на 95% Ага тогда как бы исходя из

здесь не правильное слово просто confidence то есть мы доверяем на 95% Ага тогда как бы исходя из того что мы задаём Альфу 5% да да Вот ты сформулировал это что я хочу улучшить то-то то-то у тебя Я просто пытаюсь с этой формулой которую мы только что смотрели мы там задаём Альфу Альфа Бета Да Альфа Альфа 5% вот в данном случае Альфа 5% Поня Ага всё понятно Вот вторая История - это мощность мощность А в принципе это очень важная штука мощность - это так давайте вот здесь нарисую Давайте вспомним

А в принципе это очень важная штука мощность - это так давайте вот здесь нарисую Давайте вспомним как у нас с вами всё проходило у нас с вами проходило всё следующим образом что вот у нас здесь Было актуальное значение здесь наше решение было да наше решение и мы могли с вами принять либо h0 либо H1 h0 H1 Да как-то вот так соответственно соответственно даже Давайте лучше не так [музыка] у меня True POS Да реакция вот здесь у меня какая реакция была бы fse негатив fse негатив Да кстати не не

True POS Да реакция вот здесь у меня какая реакция была бы fse негатив fse негатив Да кстати не не false fse positive false POS я позитивно среагировал что гипотеза H1 Кайф А И ошибся вот э ошибка какого рода у нас Альфа Аль наверно да только дадада всё правильно Альфа ошибка рода соответственно здесь бета Или это у нас fse Ne Тогда Тогда Тогда Тогда да да Так вот здесь понятно что будет квадрат у нас соответственно тив это когда мы как бы остались в h0 и всё вот с ошибками мы Много говорим а

у нас соответственно тив это когда мы как бы остались в h0 и всё вот с ошибками мы Много говорим а про не ошибки мы мало говорим вот смотрите реальность она одна по крайней мере если не фантазировать Да у нас есть какая-то определённая реальность когда вы выдвинули гипотезу что-то в жизни произошло какие-то изменения уже произошли то есть в реальности истина либо H1 либо h0 согласны Вот и предположим истина H1 то что нам нужно тогда есть два сценария когда мы говорим h0 то есть мы не выкупили

истина H1 то что нам нужно тогда есть два сценария когда мы говорим h0 то есть мы не выкупили наши изменения это ошибка второго рода обидно неприятно мы выкупили H1 когда была действительно H1 вот этот критерий Ой вот этот вот этот квадрат Тоже имеет своё название и часто именно про него спрашивают но знаете что это связано с ошибкой второго рода его называют мощность или Power или обозначают W то есть мощность - это Насколько вероятно что ваш статистический тест выкупит разницу если она

W то есть мощность - это Насколько вероятно что ваш статистический тест выкупит разницу если она существует То есть если гипотеза взлетела Насколько вероятно что ваш тест её выкупит Ведь если гипотеза взлетела это ещё на самом деле не всё её надо не проглядеть бета это и есть вероятность её проглядеть а мощность это нет как правило как правило если Альфу ставят на уровне 5% то в во многих задачах бета менее катастрофи проблема Почему Потому быб что мы остаёмся при своих Да гипотеза не взлетела

бета менее катастрофи проблема Почему Потому быб что мы остаёмся при своих Да гипотеза не взлетела но у нас не требуются какие-то изменения перестройки процессов там чего-то ещ это Особенно для больших компаний тяжело делать поэтому поэтому поэтому её ставят около 20% вот как бы я зашёл сюда Да у них вот стоят вот эти стандартные значения 95 и 80 Но если вдруг я хочу чтобы мой статистический тест выкупа безошибочно разницу если она есть тогда будьте добры ему предоставить большую выборку тогда

выкупа безошибочно разницу если она есть тогда будьте добры ему предоставить большую выборку тогда закон больших чисел начнёт опять ему помогать и всё будет хорошо Ну собственно говоря вот игрушка и есть всё здесь можно играться с разными параметрами Да там не знаю вот меняет что-то это как бы для Это для доли точно также можно найти там для абсолютных метрик каких-то да для среднего Вот вот так вот в принципе в принципе всё Вот видите Здесь даже доверительный интервал строит доверительный

так вот в принципе в принципе всё Вот видите Здесь даже доверительный интервал строит доверительный интервал устроит для доверительного интервала вы вчера его делали нам нужна только ошибка первого рода первого рода в идеале Видите вот как бы можно Помните я м говорил что доверительные интервалы не пересекались вот а в данном случае они пересекаются то есть на таком элементе выборки Вот такая конверсия имеет такие доверительные интервалы и у меня ещё нет однозначно это вот как бы не на языке h0

имеет такие доверительные интервалы и у меня ещё нет однозначно это вот как бы не на языке h0 H1 А на языке доверительных интервалов у меня недостаточно оснований утверждать что B лучше чем а а вот если бы я взял бы вот так даже тут ещё пересечение есть до сих пор Да а вот число конверсии надо конечно поднять его Давайте вот так вот видите всё они не пересекаются если бы такое увидел Бул у себя в эксперименте что бы он сказал про свою гипотезу Ну ты вот увидел бы такое Смотри в группе А ты

в эксперименте что бы он сказал про свою гипотезу Ну ты вот увидел бы такое Смотри в группе А ты получил конверсию 14% для неё доверительный интервал от 12 до 16 в группе конверсию получил 20% для не доверительный интервал от что мы можем сказать оправдала гипоте я пра да да с вероятностью 95% То есть ты можешь спать спокойно риск ошибки только 5% хочешь чтобы вообще ошибка 99 Ну тут пока есть небольшое пересечение но как-то так У меня вопрос появился сше выше там достоверность это вероятность

пересечение но как-то так У меня вопрос появился сше выше там достоверность это вероятность того что я не прау что я не прав 5 да Так а мощность того что я прав Ну у тебя вообще своя терминологии Я уже заметил за 3 дня под прав что ты подразумеваешь H1 что твоя гипотеза взлетела достоверность Нет не вот просто скажи вот ты вот под своим под твоим прав что подразумевается мощность Я поведаю то что имен тво слово пра что знат говориш я прав что это знат сде правиль выбор рение с реальностью

что имен тво слово пра что знат говориш я прав что это знат сде правиль выбор рение с реальностью реальностью так понял нет тогда как бы достоверность и мощность А это про ошибки как раз-таки в То есть у нас вот есть смотри вот рисунок Вот здесь ошибок нет а вот здесь ошибки есть правильно Угу согласен да да можно тогда вот прямо подписать сюда что вот это confidence А ну всё тея понятно Понял да то есть как бы иногда вот на языке не ошибок а иногда на языке ошибок но они однозначно друг друга

то есть как бы иногда вот на языке не ошибок а иногда на языке ошибок но они однозначно друг друга определяют есть мость мость это всегда 1 [музыка] ми это всегда о мину это кстати вот у меня когда статистики там я матрицу эту рисовал там все вот эти вещ подписаны прог [музыка] знали говорим проши говорим [музыка] тоже прав Только правота разная ты здесь на 95% прав в случае если истина h0 А 80% ты прав в случае если истина H1 понял Всё спасибо большое Да здесь параллель именно h0 H1 Вот такая

ты прав в случае если истина H1 понял Всё спасибо большое Да здесь параллель именно h0 H1 Вот такая вот типа что на Еву да то есть в актуальности что в реальности Угу Вот спасибо огромное угу так так так так собственно говоря вот ну здесь У меня небольшой пример есть небольшой примерки есть Давайте прям это называется дизайн эксперимента это уже как бы не то чтобы выше пилотаж но это более серьёзное понимание статистики оно может показаться сегодня вам непонятным и это вполне нормальная история

понимание статистики оно может показаться сегодня вам непонятным и это вполне нормальная история вот если вы уже сейчас понимаете это то вы понимаете очень много про статистику больше чем понимают 95% людей про Да в ЧМ суть как бы точнее ничего нового если вот вы уже переговорили вот вот это вот мои мысли все это хорошо Это значит что вам вообще по статистике Ничего не страшно что бы у Вас не спросили на собеседовании вообще ничего не будет страшно если вы себя чувствовать будете достаточно

спросили на собеседовании вообще ничего не будет страшно если вы себя чувствовать будете достаточно уверен потому что так или иначе вы всегда поймёте О чём речь происходит Вот например я формулируют да давайте на примере Я хочу я хочу чтобы Като эфект Давайте поставим 20 вот я даже могу подписать сюда вот так сть будет Вот так Блин мину сбивает Пусть Ладно слит будет или просто [музыка] под мо генеральной совокупности там ну или по моим старым данным историческим 100 Я хочу проверить и достичь

совокупности там ну или по моим старым данным историческим 100 Я хочу проверить и достичь эффектов 20 у меня выборка Ну как правило дисперсия одинаковая Почему Потому что я одну и ту же выборку разбиваю на две части 95% случаев дисперсия одинаковая 40 с 4 всё соответственно у меня есть у меня есть две дисперсии У меня есть д два стандартных отклонения они как правило одинаковые я ставлю стандартно ошиб Альфа и Бета 05 и 02 далее я собираю вот эту формулу которая у меня здесь есть в общем собрал

ошиб Альфа и Бета 05 и 02 далее я собираю вот эту формулу которая у меня здесь есть в общем собрал формулу и получил ничего я к сожалению не получил вот а теперь получил минимальный объём выборки [музыка] 62 тут что я похоже меня с прошлой групп 62 как-то Ну короче да 622 [музыка] например А что будет Вот давайте вопрос У меня к вам а что если я хочу закти разницу не на 20% то бишь в абсолюте на 20 а только на 10 Как вы думаете больше мне выборки потребуются или меньше меньше больше больше

на 20 а только на 10 Как вы думаете больше мне выборки потребуются или меньше меньше больше больше больше уменьшили Да больше однозначно больше то есть 251 элемент выбрать да чем меньше разница тем мы всё требовательно становимся к выборке причём выборка начинает расти по по квадратическом закону Да на квадратичной зависит от N квадратичной Например у нас дисперсия в данных на самом деле больше к сожалению у нас чеки бывают то ребята закупаются на весь кэш то покупают Вообще ни о чём то есть

к сожалению у нас чеки бывают то ребята закупаются на весь кэш то покупают Вообще ни о чём то есть как бы ну это как правило ценообразование на это влияет То есть если у вас ассортимент большой то и дисперсии будут большие То есть если дисперсия ассортимента большая то и средний чек будет иметь большую дисперсию Если бы у меня всё в магазине продава бы на 100 то это было бы менее вариативно Ну предположим Сигма больше 60 что у меня произойдёт с минимальным объём выборки вырастет вырастет Да

предположим Сигма больше 60 что у меня произойдёт с минимальным объём выборки вырастет вырастет Да вырастет однозначно То есть это у меня для каждой из групп Да посчитано поэтому 2260 потребовалось бы вот как-то так Ну также с альфой и бетой можете поиграть Давайте поставим 20 То есть как бы видите всего 62 элемента выборки нам нужно чтобы увидеть разницу На 20% то есть ну типа вообще по лайку давайте убедимся что Шед элементов выборки хватает чтобы совершить ошибку 05 и 02 Но не более как это

убедимся что Шед элементов выборки хватает чтобы совершить ошибку 05 и 02 Но не более как это проверить проверить это очень очень просто давайте я тысячу раз с моделируют эксперимент и посмотрю Сколько раз я совершил ошибку первого и второго рода А у нас не 20 было 20 написано в Это ниже Гру меня видимо Давайте 20 поставим так раз запущу и средня 100 20 сигму записал Альфа Бета известно здесь у меня а у меня здесь ошибка второго рода сначала [музыка] считается точнее ошибка второго рода может

меня а у меня здесь ошибка второго рода сначала [музыка] считается точнее ошибка второго рода может возникнуть у нас только в том случае когда когда в истинности Какая гипотеза верна H Вот ещё важно понимать ребят в какой момент мы времени с вами находимся это называется дизайн а тестирования это уже более серьёзная статистика чем просто загрузить в стат тест И вообще ну выдала те P А ты не понимаешь контекста от слова совсем мы сечас с вами Вот если вот здесь время экспериментов то мы сейчас с

контекста от слова совсем мы сечас с вами Вот если вот здесь время экспериментов то мы сейчас с вами находимся вот здесь до эксперимента и мы пытаемся с вами выставить эффект Альфу и бету и объём выборки собрать такой чтобы был компромисс между всеми историями в данном случае я делаю как я выставил mde Альфа Бета посчитал Какой объём мне выборки нужен и я хочу проверить а Действительно ли так происходит что у меня ошибки вот такого уровня поэтому поэтому поэтому я запускаю 000 раз на практике у

что у меня ошибки вот такого уровня поэтому поэтому поэтому я запускаю 000 раз на практике у вас будет лишь один выбор лишь один выбор но я сейчас проверю 1000 раз и посмотрю Сколько раз я ошибался именно совершал ошибку второго рода в истинности у меня H1 напоминаю mde эфект и поехали вот у меня выборка А вот у меня выборка б сгенерировал собственно говоря запускаю тест как вы видите Арова внутри подразумевает использование какого-то статистического критерия в данном случае проти за средним

подразумевает использование какого-то статистического критерия в данном случае проти за средним поэтому тест запускаю тест и проверяю pv свой проверяю свой pv А ну как бы тест возвращает статистику и P value сама статистика мне не нужна я забираю только P value И добавляю в Second Type eror если pv больше чем Альфа это и есть ошибка То есть это будет Т запускаем смотрим получили вот такую историю Ну тут видно что она около 0,2 крутится да около 02 то есть всё круто ошибка второго рода то есть

Ну тут видно что она около 0,2 крутится да около 02 то есть всё круто ошибка второго рода то есть Ne или бета по-другому она у меня 02 мощность критерия 08 а Давайте проверим А что будет такой вопрос Если я про игнорирую этот факт и как бы для такого эффекта соберу выборку не 62 элемента А мне в падлу Я соберу 30 элементов Как вы думаете что прозой с ошибкой ВТО мощностью ошибка увеличится мощность уменьшится да да потому что мы станем чаще ошибаться статистический критерий говорит ребят Ну не

уменьшится да да потому что мы станем чаще ошибаться статистический критерий говорит ребят Ну не выкупаю я Ну мне мало ещё выборки я буду чаще путаться и ошибаться мне данных не хватает Как видите Вот вот Чем чревато не посчитать объём выборки изначально а мы с вами могли слепо как вчера вот вчера позавчера вы запускали И соотвественно мы никогда не говорили про обм вы может его недостаточно просто тупо недостаточно Вот если бы сил на тридцати то у вас риск ошибиться 50% это значит ваша

просто тупо недостаточно Вот если бы сил на тридцати то у вас риск ошибиться 50% это значит ваша гениальная гипотеза которая бы изменила мир на 50% пройдёт мимо ваших глаз так вот чтобы она проходила как минимум на 20% тогда надо как минимум 62 элемента выборки вот тогда так если вы больше элементов выборки можете собрать это круто стоит только порадоваться за вас потому что у вас ошибка второго рода видите она Почти нулевая то есть когда выборка с лихвой всё ошибки второго рода нет

второго рода видите она Почти нулевая то есть когда выборка с лихвой всё ошибки второго рода нет статистический критерий всегда выкупают эту разницу Ну такая вот история тоже самое можно сделать с ошибкой первого рода вот у меня здесь запуск проверяем ошибка первого рода когда видите эффекта достичь не удалось да то что h0 это значит эффекта нет Ну и всё что я это всё запускаю точно также ошибка первого рода действительно держится около уровня 05 как это давали выше А это значит если подвести

первого рода действительно держится около уровня 05 как это давали выше А это значит если подвести итог что 62 элемента для нас хорошая цифра И когда я запущу эксперимент и приму решение по pv Там и так далее я могу спать спокойно и знать что пропущу я её не более чем на 20% а уйду ложно в неё не более чем на 5% как-то так всё что чается АТС делает это он находит наши или conf и Power или Альфа и Бета мы мы здесь заданы и мы ищем пом искомые мы срав А можно ещё раз не понял Вопрос вот у нас

и Бета мы мы здесь заданы и мы ищем пом искомые мы срав А можно ещё раз не понял Вопрос вот у нас есть выли у нас есть заданы Альфа и Бета кото мы вычислили минимальный объём для выборки и мы мы делаем эксперименты показывает у нас такие Альфа и Бета и мы на это смотрим эти смотри когда ты эксперимент Получил две выборки ты уже афа не сможешь в у тебя две выборки Ты просто одно получаешь один результат но за сч вот того что мы сделали генерации до эксперимента Ты знаешь уверен что у тебя Альфа

но за сч вот того что мы сделали генерации до эксперимента Ты знаешь уверен что у тебя Альфа и Бета а просто то что мы делали вчера позавчера как бы по факту мы этого не проверяли И вот я вам говорил проверьте помните была задача например что новое блюдо лучше чем старое об этом не задумались А вот теперь как бы знаем Ну Москва не сразу строилась идём постепенно и потихоньку то есть всегда у вас есть возможность посчитать минимальный объём выборки так чтобы быть уверенным в том что вы а

у вас есть возможность посчитать минимальный объём выборки так чтобы быть уверенным в том что вы а допустите ошибки ровно так как вы хотите это называется уже как бы осознанный подконтрольный статистический эксперимент Да спасибо большое угу да Саша Антон можешь пожалуйста поменять N на 62 и заново две ячейки запустить потому что мне показалось что вот мы смотрим Альфа 05 на на 200 вот А ну сразу скажу что Альфа Альфа не реагирует на объём выборки это так устроено потому что h0 как бы

ну сразу скажу что Альфа Альфа не реагирует на объём выборки это так устроено потому что h0 как бы вероятность совершить ошибку первого рода она что на пяти элементах выборки что на тысяче отличается ой одна и та же имеет равномерное распределение А всё я понял я понял да да так Спасибо это тут вот связано объём выборки в первую очередь связан с ошибкой второго рода и с мощностью потому что выкупать вопрос выкупать 10 или выкупать 20 выкупать 10 или выкупать 30 Вот это сильно влияет да ко

выкупать вопрос выкупать 10 или выкупать 20 выкупать 10 или выкупать 30 Вот это сильно влияет да ко что-то прямо сложнее то ещё раз ёмко пройти вот этот путь от того когда Мы спрашиваем себя Достаточно ли нам 62 элемента выборки вот просто ещё раз чтоб ты проговорил А инструмент и наши наши выводы Я постараюсь уловить Угу Так ну давай с самого начала мы сформулировали гипотезу да всё начинается с гипотезы появилась идея надо копить под неё выборку встаёт вопрос А сколько выборки Ну логичный же

гипотезы появилась идея надо копить под неё выборку встаёт вопрос А сколько выборки Ну логичный же вопрос правильно дадада Сколько сколько выборки чтобы не попасть Вот в эти ловушки проблемы подглядывай там где они у меня были вот всякие вот такие истории какой объём выбрать Ну давайте объём выборки поставим Давайте его посчитаем хорошо А что влияет на объём выборки Ну во-первых эффект который мы хотим получить одно дело выкупать разницу на п другое дело на 1000 если у меня был средний чек 100

хотим получить одно дело выкупать разницу на п другое дело на 1000 если у меня был средний чек 100 А я хочу чтобы он 100 был я гарантирую что я это без статистических тестов вообще без знания статистики уверенно выкуплю правильно когда ре идт о маленьком эффекте показали далее что е влияет на этот данных одно дело раньше средний человек 100 п -2 был и мы проверяем что он станет 105 а другое дело что он был 100 П -40 И мы проверяем что он стал 100 5 105 Стал вот собственно говоря влияет Сигма

что он был 100 П -40 И мы проверяем что он стал 100 5 105 Стал вот собственно говоря влияет Сигма потом Альфа Бета твоя готовность ошибиться всё в принципе то что вот я здесь делал это вам можно не проверять как бы так сильно Это я проверил Один раз вместе с вами убедиться что эта формула работает корректно вот эта формула Угу так-то по-хорошему Ты просто посчитаешь [музыка] Люка любо катор и и вс тебе выдаст там 50 элементов выбо ты тогда значит собираешь 50 элементов и делаешь ровно то что мы

тебе выдаст там 50 элементов выбо ты тогда значит собираешь 50 элементов и делаешь ровно то что мы делали все предыдущие те получаешь делае когда ты его делаешь и намер тебя оказалось Ты знаешь что ты проспал совершил ошибку не больше чем на 5% вот как бы это просто даёт такое ощущение знаешь что как бы во всей этой случайности что-то что-то детерминировать и мы как бы уже действительно рационально Подходим к процессу вот Чем чревато меньше объём выборки мы с вами запустили просто мы можем

Подходим к процессу вот Чем чревато меньше объём выборки мы с вами запустили просто мы можем проспать наше улучшение когда выборки мало поэтому Если был бы твой пайплайн на работе Ты бы сформулировал гипотезу сформулировал метрику которую ты считаешь забил в калькулятор Если хочешь в питоне ль обм выборки понимаю что да времени достаточно её собирать собрали эту выборку провели и не подглядывать раньше времени если надо 10 дней держать Значит надо 10 дней держать не надо смотреть Что там

раньше времени если надо 10 дней держать Значит надо 10 дней держать не надо смотреть Что там происходит в пятый в шестой седьмой день до держали 10 дней собрали всю выборку и вот на дей день будет нашим результатом Надеюсь ответил да отве ки по формуле в целом Понятно выбираем мебо не уловил как ты проверил достаточно ли он вот ки вот то что ты говоришь то что я сделал вам не обязательно делать но вот хочется Это же не не сам эксперимент ещё это просто какая-то дополнительная про это я просто

но вот хочется Это же не не сам эксперимент ещё это просто какая-то дополнительная про это я просто Это это называется дизайн эксперимента то есть мы пытаемся посмотреть все сценарий ещё до того как это произойдёт Вот и мы вот здесь я проверил сценарий А что если мы действительно эффекта добьёмся это можно делать Я у меня очень хорошие статьи прикреплены в в сегодняшнем дне в дополнительных источниках там очень интересно Авита рассказывает как они собственно говоря дизайни свои эксперименты у

там очень интересно Авита рассказывает как они собственно говоря дизайни свои эксперименты у них крутятся тысячи а тестов у них огромнейший выборки и огромнейший продукт собственно говоря они рассказывают как они А как они проверяют Да всё как они дизайни эти эксперименты грубо говоря то есть они точно так же вот проверяют Да сценарий А что если эффект есть ага там часто у них какие-то свои кастомные критерии у меня тест А у них может быть Каяни свая разработка которая там более мощная более

критерии у меня тест А у них может быть Каяни свая разработка которая там более мощная более чувствительная или что-то ещё но принцип остаётся тем же самым проверяют Ага вроде ошибки подконтрольны значит можно можно действовать можно действовать что здесь треть строчка значит То есть Мы создали два сэмпла А после этого Вот это ну вот я запускаю тест он возвращает два значения статистику и вот заглушка называется то есть когда вам перемен ну не не сможете обра она просто сборщик мусора просто

называется то есть когда вам перемен ну не не сможете обра она просто сборщик мусора просто убирает выдамы находим А дальше делаем где здесь или в жизни и [музыка] соответственно тогда как бы ну я считаю Сколько раз я на сся ошибся Вот здесь я совершил 226 220 226 раз сделал ошибку второго вам это в принципе не придётся только если вых глубокой истории с глубокой истории статистики так в принципе достаточно просто посчитать это я уже так показал но это не является на самом деле обязательной

достаточно просто посчитать это я уже так показал но это не является на самом деле обязательной историей совершенно что это интересно поэтому хочется зари не никаких проблем то есть я рассказал и оставил это вам если хотите О классно написано и очень продуктивны Мне вообще нравится как Авита подступает к своему Ну аналитически да вообще очень такая приятная бигтех компания быстрый вопрос Это я что-то в коде не увидел а где ту используем Ису Альф сравнивал Ты же h0 H1 понимаешь на основании

я что-то в коде не увидел а где ту используем Ису Альф сравнивал Ты же h0 H1 понимаешь на основании Альфа а не бета а то есть бета Я использовал когда считал когда считал минимальный объём выг м О'кей понял и насчёт ти я не до конца понял насчёт того сколько дней нам нужно Ну ждать типа не подсматривать и Ну смотри если тебе 62 элемента выборки нужно у тебя 10 элементов выборки ежедневно Копится значит сколько тебе дней надо держать а ой понял как бы может у тебя на работе элементо в день Като

значит сколько тебе дней надо держать а ой понял как бы может у тебя на работе элементо в день Като гипоте кото за буквально есть гипоте кото нужно держать слож которы требуют как бы того чтобы [музыка] там и психология выходит На первый план очень много нюансов То есть я как бы это оставляю за бортом мы с вами не психологией здесь занимаемся правильно мне Мне важно показать вам инструмент а тонкости нюансы проведения тестирования от компании компании могут быть разными от гипотеза гипотезы

нюансы проведения тестирования от компании компании могут быть разными от гипотеза гипотезы могут быть разными Вот поэтому да да то есть если можно что-то проверить за один день можно за 2 дня можно за три да собирать фокус-группы всякие и так далее на самом деле по аналитике продукта для людей очень много психологии людей как не крути очень [музыка] много так ну в принципе у меня всё у меня [музыка] всё Давайте поговорим сегодня у вас демо демо у вас смотрите какой ой Давайте поговорим ваше

всё Давайте поговорим сегодня у вас демо демо у вас смотрите какой ой Давайте поговорим ваше задание ваше задание что м сегодня будет сделать сегодня нужно будет сделать следующую [музыка] историю собственно говоря смотрите Здесь много заданий связанных с пандусом вот Постройте график кумулятивной выручки кумулятивного среднего чека я это проговори сейчас для всех и не пропускайте не пропускайте эти мои слова мимо ушей не заморачивайся У меня есть демо Вот вы можете чуть-чуть переварить как

эти мои слова мимо ушей не заморачивайся У меня есть демо Вот вы можете чуть-чуть переварить как здесь устроено и просто сделать ctr ctr грами да то есть в некоторых вещах не надо пря све глубоко туда погружаться надо понимать что на входе что на выходе потому что ну главная цель сегодняшнего дня у нас безусловно это запустить сам результат А теста вот здесь смотрите Постройте график график график график график шестой тоже график зафак графики всм можно не слабенько уйти Поэтому gpt какой-то

график график шестой тоже график зафак графики всм можно не слабенько уйти Поэтому gpt какой-то собственно говоря Ну Ваше восприятие того что есть мой демо файл и то что у меня вмо написано это лишь один из вариантов этих вариантов может быть гораздо больше гораздо больше далее Далее восьмое девятое де Ну сед это про поть вотже де видите тоже график то есть графиков много И вот де Одина д и рие это нужно уже как раз таки дестра запустить статистический тест статистический тест вот как-то так

это нужно уже как раз таки дестра запустить статистический тест статистический тест вот как-то так как-то так то есть Моё главный мой главный главный посыл Вам сильно на графиках Не заморачивайся сама цель вообще не графики там не Старайтесь и сего стро ушивать их как-то Пятая десятая график нужен чтобы получить какую-то первичную информацию всё быстренько построили пошли дальше быстренько построили пошли дальше что вам нужно будет сделать у вас будет у вас будут Клиенты у вас будут клиенты

пошли дальше что вам нужно будет сделать у вас будет у вас будут Клиенты у вас будут клиенты которые посещали сайт и покупали что-то кто-то просто посещал А кто-то ещё и покупал за вас уже разделено на группу А и Б И все пред проверки типа Аа теста сделано выборки уже собраны К сожалению да объём выборки детерминирован вам нужно посчитать посчитать да Или проверить гипотезы в том что группе б увеличилось среднее количество заказов среднее количество заказов то есть стали чаще заказывать и далее

среднее количество заказов среднее количество заказов то есть стали чаще заказывать и далее Далее посчитать среднее количество разница среднего чека это очень частая история для любого бизнес продуктам бизнесом зама средний чек и среднее количество заказов - это очень важные метрики для любого бизнеса собственно говоря по факту две метрики То бишь два статистических теста Почему четыре потому что по сырым данным то есть с учётом выбросов и вот они по сырым Да и собственно говоря по очищенным

по сырым данным то есть с учётом выбросов и вот они по сырым Да и собственно говоря по очищенным данным Когда вы убрали всякие выбросы сделали поправочка как-то так и в конце принять решени Какие решения можно принять можно остановить теи победу одной из групп можно остановить тест зафиксировать отсутствие различий между группами То бишь h0 Да первая H1 И третье - это продолжить тест если вы считаете что объёма выборки не хватает Вот такая история Вот такая история данные абсолютно реальные

что объёма выборки не хватает Вот такая история Вот такая история данные абсолютно реальные просто они зашифрованные немножко Но это абсолютно реально да Какие ко мне [музыка] вопросы Бог в помощь нам Да да да ну говорю сильно постарайтесь правильный фокус делать по факту вам нужно просто запустить тест единственно что добавится ещё объём выборки может посчитать и всё понимаете о чём говорю то есть по факту красивая обёртка много чего сложного рассказывал это с можно пропеть переть зари в сухом

по факту красивая обёртка много чего сложного рассказывал это с можно пропеть переть зари в сухом Рите Вчера только для этого надо подготовить данные и посмотреть графики дополнительные и ещ посчитать возможно объём выборки и посмотреть хватает его или не хватает всё практически тоже самое что под соусом который называется атест Но если вы поймёте то что я [музыка] проговариваем сравнивать поверите это будет очень хорошим показа это будет очень хорошим показателем если бы мне на собеседовани

это будет очень хорошим показа это будет очень хорошим показателем если бы мне на собеседовани человек бы нормально ответил что такое мощность критерии например да или что-нибудь про размер выборки то я в принципе бы уже сильно грузить не стал совершенно то есть ну как проверил бы только относительно что ещё и логика как бы восприятия цифр к здравому миру выстроена и всё в принципе потос это понятно понима статистические пайплайн и Это уже хорошо Но даже если кстати этого не понимает ничего

понима статистические пайплайн и Это уже хорошо Но даже если кстати этого не понимает ничего страшного Главное чтобы не было такого наверное что просто типа о и всё вот знаю что надо чтобы было меньше 05 всё больше я вообще ничего пробивали не Ну в целом всё понятно клёво клёвое задание А что у нас сегодня по встречам у на нет и в 5 что проекта п проекта Посмотрите старшей группы буде некую насмотренность У них проект По кою Vision он самый пёстрый это мы что с вами с цифрами что-то скучного

У них проект По кою Vision он самый пёстрый это мы что с вами с цифрами что-то скучного занимаемся какие-то цифра а там картинки пойдут красиво поэтому это типа окончание фаз 2 или или как понять нет нет просто как бы Фаза 2 вообще вся Проектная если фаза о она 50 на то Фаза 2 Вся Проектная будет фаза о надо много базы выстроить вот у них сейчас неделя компютер это вторая неделя обучение на фазе поэтому Неде делат проек Да так ну собственно говоря мы сегодня с вами наверное Давайте созвонимся

поэтому Неде делат проек Да так ну собственно говоря мы сегодня с вами наверное Давайте созвонимся Давайте в 4 или в 4:30 вы вероятно не успеете доделать к этому моменту задани Ну так бы выпало ничего ного не успеете не успеете успеете значит чуть попозже сделать вам также скину сабмишн мы обсудим основные нюансы которые есть как-то Так как-то так ну и подведём итог недели потому что неделя Ну достаточно плотна достаточно плотна Вот ну как бы в моём понимании Она наверное самая сложная неделя

плотна достаточно плотна Вот ну как бы в моём понимании Она наверное самая сложная неделя Ну у всех расходится у всех расходится мнение она сложна если не имеешь представления о статистике ранее если конечно как бы есть понимание то не такой сложно так и по ревю соответственно я скину Файлик я скину Файлик но опять же вам напомню такую мысль что это как бы не есть Прямо знаете обязательная процедура по крайней мере сейчас если вас вам нужно работать Работайте если у вас вопросы как бы могут

по крайней мере сейчас если вас вам нужно работать Работайте если у вас вопросы как бы могут заданы быть мне в чат А лучше вообще Пишите в общий чат пока как бы по этому поводу я сильно не комментирую Мне многие пишут личку я всем отвечаю нормально Явление задаёте одно и тоже Вот соответственно гораздо более выигрышная стратегия Если писать в общий чат здесь никакие у нас не гонки вопросы может быть дурацкие или не дурацкие мне совершенно без разницы в этом плане дасть Като какой-то момент

быть дурацкие или не дурацкие мне совершенно без разницы в этом плане дасть Като какой-то момент сравнения Ну я говорю как бы о реальных болячках которые я наблюдаю выключайте эту историю ничего страшного нету задавайте вопросы в общий чат потому что вы можете помочь если что коллегам коллегам вот что ещё скажешь м да и собственно говоря я скину файл если не нужен то не нужен если вот как бы нужно работать или можно задать в чате если нужно то записывайтесь собственно говоря как-то так на

нужно работать или можно задать в чате если нужно то записывайтесь собственно говоря как-то так на расписание Файлик я вам скину ещё вопросы вроде всё обсудили Ну всё тогда давайте продуктивного вам завершения рабочей недели и на связи пока-пока спасибо пока пока

Уменя Доброе утро Всем приветики так а что-то нас мало с вами кого нет лю кого-то ещё одного не мешай они спят им сны сняться про интегралы Ил ещё нет но это было определённое время сейчас уже пора прийти в наш мир реальный любо была сейчас подключит скорее всего кого я забыл серже Так ладно мы будем начинать потихоньку будем [музыка] начинать Сегодня у нас с вами такой достаточно медитативного нам разобрать нужно сегодня мы поговорим вообще о матричных разложения Да продолжая тему матрицы и

нам разобрать нужно сегодня мы поговорим вообще о матричных разложения Да продолжая тему матрицы и рассмотрим всего лишь навсего жения идею в анализе данных которая применяется как бы много где под другим соусом под другими названиями Но идея останется той же самой Итак мы разберём с вами PC СВД начнём с PC смотрите в анализе данных есть такая история как точнее такая проблема Проблема она она вообще имеет название называется проклятие размерности и заключается она в том что поподробнее Мы

вообще имеет название называется проклятие размерности и заключается она в том что поподробнее Мы раскроем её чуть позже но вот сейчас вкратце смысл в том что иногда иногда бывает такая история что плохие размер большие размерности плохо на нас влияют Вот то есть вам Могут просто конвейером отдавать тонны фичей да тонны фичей И надо как-то их фильтровать как-то их убирать А есть много разных способов И один из них - это просто понижение размерности Давайте посмотрим на конкретном случае вот у

И один из них - это просто понижение размерности Давайте посмотрим на конкретном случае вот у меня а картиночка слева или хотя Давайте начнём с 2D Давайте с 2D начнём вот у меня было 2D То есть это выглядело бы как у меня есть какой-то датафрейм с двумя признаками какими-то Да там элементы выборки пошли элементы выборки Ну в общем вы поняли А в чём суть В чём суть в том что в данном случае мы вообще говоря видим с вами что эти два признака они как бы что вы можете про признаки X1 X2 сказать

вообще говоря видим с вами что эти два признака они как бы что вы можете про признаки X1 X2 сказать зависи или коллинеарны или коррелируют это в принципе всё будет об одном и том же То есть как бы в принципе В каком-то смысле они объясняют одну и ту же информацию Да потому что тот же самый X2 можно выразить через X1 а это значит что X2 какую-то принципиально новую информацию не привносит не привносит и как-то бы это можно было бы убрать как-то бы это можно было убрать во-первых можно было

привносит и как-то бы это можно было бы убрать как-то бы это можно было убрать во-первых можно было просто откинуть X2 такие способы тоже есть но иногда идея заключается немножко в другом а что если мы с вами попробуем понизить размер следующим образом вот у меня есть облако точек Я сначала возьму и поменяю Базис поменяю Базис и вот смотрите у меня изначально был Базис X1 X2 А вот после стал Базис PC dimension Да и PC dimension стали две размерности ой два базиса но они мы делаем их так делаем

PC dimension Да и PC dimension стали две размерности ой два базиса но они мы делаем их так делаем их так за вас будет делать компьютер и Линейная алгебра и Линейная алгебра вот за вас это будет делать компьютер Линейная алгебра но суть в том что одна из компонент будет расположена там где максимальная дисперсия другие уже по остаточному принципу далее алгоритм будет заключаться в следующем А мы возьмём и вот эту размерность просто выбросим мы её просто возьмём и выбросим Итого все вот эти точки

и вот эту размерность просто выбросим мы её просто возьмём и выбросим Итого все вот эти точки они спроецировать только одной координатой только одной можно это назвать После перехода Давайте назовём Это точно те же самые элементы выборки но мы назовём Это как y1 какую-то компоненту Вот она у меня pc1 называется могу называть y1 тем самым тем самым чего мы с вами добились теперь все точки задаются Одной одной координатой и мы понизили размерность это достаточно тривиальный пример как мы сделали

Одной одной координатой и мы понизили размерность это достаточно тривиальный пример как мы сделали с 2D в 1d точно также может произойти из 60D в 15d из 35d там не знаю в 4D и так далее теряем ли мы какую-то информацию абсолютно теряем это факт но не всегда для нас это катастрофа потому что смотрите представьте вот приведу пример на тексте там хорошо видно на тексте Да вот мне нужно классифицировать ль отзыв на фильм положительный или отрицательный Ну просто классифицировать да и вот у меня

ль отзыв на фильм положительный или отрицательный Ну просто классифицировать да и вот у меня есть текстовое сообщение Я ходил там с другом в кинотеатр там мы попали под дождь не знаю но всё-таки успели настроение было такое-то такое-то всё сели и в конце но фильм В целом понравился то есть по факту Тут столько информации много но именно Ключевая информация в контексте решения задачи классификации отзыва Да на положитель отте много информации лишней сос не является здесь релевантно достаточно

отзыва Да на положитель отте много информации лишней сос не является здесь релевантно достаточно поэтому не ассоциируете потерю информации с чем-то плохим потому что иногда можно потерять 10% информации Зато выиграть 100% мощности Ну не 100 точнее много сказал короче выиграть очень много процентов мощности скорости быстродействия интерпретируемые и все к этому Рем все будут Тора СБО что какая-то часть информации потеряется Вот примерно так можно взглянуть как это выглядело в 3D 3D вот у меня

часть информации потеряется Вот примерно так можно взглянуть как это выглядело в 3D 3D вот у меня здесь 3D вот у меня 3D здесь Можете представить что вот как бы точки опять мультикор присутствует да то есть у меня три признака три признака Ну три измерения и как бы они лежат на плоскости А значит как бы одна фича лишняя по факту да они ровно не лежат на плоскости вс-таки какой-то разброс есть но тем не менее близко к тому чтобы лежать на плоскости и в данном случае вот как бы вдоль плоскости Я

тем не менее близко к тому чтобы лежать на плоскости и в данном случае вот как бы вдоль плоскости Я пускаю две оси две оси это новый базис на самом деле здесь ещё есть где-то pc3 вот такая вот не знаю тут вам как бы понятно проек То есть она как бы вверх туда уходит от плоскости Т новый Базис номы взяли сза нам нуж мы е отбросили все точки с проецированием структуры информации да то есть мы берём только Как я понял у нас есть три плоскости заданные и есть мым содам новую плоскость включа ния

только Как я понял у нас есть три плоскости заданные и есть мым содам новую плоскость включа ния потом мы её плюм в 2D плоскость убирая pc3 потом мы её растягиваем превращая вообще её в линию убирая плоскость выбирая pc2 ты сам указываешь до какого размерности тебе понижать то есть в коде ты в прямом смысле пропишет что я хочу понизить до 2D тогда у тебя результатом будет плоскость две координаты Вот то есть это вот вот этот пример и вот этот это два разных Примера в одном случае мы переходили

Вот то есть это вот вот этот пример и вот этот это два разных Примера в одном случае мы переходили в 1 вот в прямом смысле мы будем создавать экземпляр класса в коде pca у которого один параметр Ну comp я сокращ N здесь равно о а здесь будет равно два а он сам там не обязательно всё до одного сжимать просто как раз таки понимаешь Проблема в том что PC хорошо борется с мультикор да то есть он хорошо понижает именно линейную зависимость А если бы у тебя были бы точки хаотичны как-то то ну как бы

понижает именно линейную зависимость А если бы у тебя были бы точки хаотичны как-то то ну как бы здесь понизить это потерять много информации потерять много информации и это не значит что я любое пространство буду схлопывается от задачи есть метри по которой можно как бы рассуждать мы о ней чуть дальше поговорим когда дойдём до кода получается сам выбираешь что теряешь что дада да Ну ты не сможешь наверное ответить что конкретно теряешь Ну ты указываешь доскольки понижать и можешь посмотреть а

наверное ответить что конкретно теряешь Ну ты указываешь доскольки понижать и можешь посмотреть а что потерялось что нет А я не смогу контролить процесс я только смотрю результат В общем видеть ты не сможешь да да О спасибо Вот в чём тут ещё особенность особенность в том что м так ну ладно давайте сначала в чате отвечу [музыка] это также как расположение Вектора в базисе Я не совсем понял Люба Что ты имеешь в виду а разложение Вектора в базисе Прочитал неправильно дадада В каком-то смысле это

ты имеешь в виду а разложение Вектора в базисе Прочитал неправильно дадада В каком-то смысле это так и есть просто понимаете вот я вам говорил что Базис - это то как мы смотрим на какой-то объект выб я вот этот объект выборки могу вот в этих координатах задать да А могу вот в этих координатах задать правильно в принципе это моё дело единственно знаете вот вот вот эти две координаты вот эти две координаты мы как правило их знаем То есть вы в датафрейме собрали их и вы имеете их интерпретацию вот

мы как правило их знаем То есть вы в датафрейме собрали их и вы имеете их интерпретацию вот эти координаты это так называемый латентный или скрытый Базис метода то есть мы его как бы его интерпретацию мы не знаем Единственное что мы с вами знаем Единственное что мы с вами знаем Давайте сделаю я вот так X1 X2 так устроена математика так устроена математика что вот переходим с вами в Базис в Базис y1 то есть в какой-то новый одну координату Единственное что можно сказать что y1 y1 это какая-то

y1 то есть в какой-то новый одну координату Единственное что можно сказать что y1 y1 это какая-то Линейная комбинация X1 и X2 вот эти коэффициенты за вас вычислит метод pca это называется собственные числа вектора ой собствен чис матри это то что дополнительным ло вчера принципе это считается ВС это Вычисли за вас оптимальным образом насколько это возможно самое главно понимать во-первых понижение идёт линейное да то есть Представьте у вас была бы зависимость точки были бы как-то вот так вот

идёт линейное да то есть Представьте у вас была бы зависимость точки были бы как-то вот так вот Вот такое 2 пространство То есть как бы попытался бы понизить PC он бы соответственно прол какую-то прямую и все точки бы спроецировать эту информацию ещ оцифровать оцифровать вот смотрите вот у нас исходная исходная была какая-то дисперсия по этому признаку правильно дисперсия X1 и была какая-то дисперсия по признаку X2 верно Вот в dat Science иногда как бы отождествляют немножко что дисперсия равно

по признаку X2 верно Вот в dat Science иногда как бы отождествляют немножко что дисперсия равно информации Почему Потому что Представьте что если бы признак у Вас имел нулевую дисперсию то он Априори не информативен Как оценить вклад того что детерминировано ну никак Если бы все все квартиры на рынке были бы 50 мтро мы бы никогда не смогли узнать влияние квадратных метров на цену правильно вот а потому что всё как бы относительно да и дисперсию да иногда отождествляют равно информации так вот

потому что всё как бы относительно да и дисперсию да иногда отождествляют равно информации так вот на самом деле мы с вами если вот это назвать y1 всё-таки метод делает так метод делает так чтобы первая компонента расположилась вдоль наибольшего распространения дисперсии То есть она в себе содержала больше всего информации если говорить какими-то словами и все остальные компоненты по убыванию по убыванию в данном случае у меня две компоненты Поэтому вот так дисперсия y1 и дисперсия y2 вот как

убыванию в данном случае у меня две компоненты Поэтому вот так дисперсия y1 и дисперсия y2 вот как бы изначально гарантировано изначально гарантировано что сумма вот этих дисперсий равна сумме вот этих дисперсий То есть как бы информация никакая не теряется но доля сохранённой информации в нашем случае с вами будет это дисперсия y1 де дисперсия X1 п дисперсия X2 то есть в каком-то смысле Ну предположим это равно не знаю 09 ну здесь даже будет больше чем 09 на самом деле Вот это для что фих

это равно не знаю 09 ну здесь даже будет больше чем 09 на самом деле Вот это для что фих часто это услышите и увидите что дисперсию ассоциируют с информацией вот так вот да то есть мы можем типа контролировать насколько сильно сжимать её по получается ну по дисперсии y2 не понял ещ раз вопрос можно количество компонент и можешь потре сохранилась информации если ты понимаешь что ты у тебя было 64d пространство ты его понизил до 2D и на выходе имеешь 0,2 сохранённая информация но ты понимаешь что

пространство ты его понизил до 2D и на выходе имеешь 0,2 сохранённая информация но ты понимаешь что в 2D нельзя сохранить всю информацию и будешь возможно 7D ставить а О'кей [музыка] вот как-то так то есть это не какой-то магический инструмент который Вам позволяет сделать компрессию данных что вы всегда сохраните там под 90% Нет так не бывает если у меня на мой объект влияет все 64 признака то не произойдёт Чудес я не смогу до двух жать Я всё потеряю А часто просто бывают мультикор признаки и

произойдёт Чудес я не смогу до двух жать Я всё потеряю А часто просто бывают мультикор признаки и у вас в циане они есть поверьте вот такие когда убираешь в принципе информации много не теряешь Ну например я не знаю я условно скажу квадратные метры связаны с количеством комнат нуте [музыка] да типа общая площадь и площадь кухни связана Ну конечно связана тут корреляция ещё существенно сильнее Ну и ещё ряд каких-то вещей Да это собственные векторы Саша прочая PC сам поймёт какой Базис выкинуть

и ещё ряд каких-то вещей Да это собственные векторы Саша прочая PC сам поймёт какой Базис выкинуть Да pcc строит новый Базис ранжиру вот эти вот эти Новые компоненты А дальше если вдруг я ему сказал оставить две компоненты Он оставит две если я ему сказал одну то он выкидывает самую слабую и так до того момента пока не останется одна Ну я бы на самом деле не грузил бы вот это вот собственный векторы матрицы отвлекайтесь от этой глубокой математики лучше воспринимайте лучше это воспринимать

векторы матрицы отвлекайтесь от этой глубокой математики лучше воспринимайте лучше это воспринимать через призму того это Я вот про комментарий в чате лучше воспринимайте через призму того что есть мультиколлинеарность а она на самом деле иногда очень плохо влияет на алгоритмы и их интерпретацию PC позволяет с ней бороться вот позволяет бороться с ней линейно Прямо туда глубоко проваливается собственный вектор и всё это там только себя запутай да если нет должной подготовки Ну и как бы

собственный вектор и всё это там только себя запутай да если нет должной подготовки Ну и как бы практической ценности это не так много несёт вот да на у нас мы этим занимаемся когда когда у нас мультиколлинеарность подозревается да мультиколлинеарность Когда нужно когда слишком много данных надо понизить размерность чтобы просто влезла в компьютер предположим оптимизировать расчёты Как оптимизировать рано если сах точе цов такое нужно понижать количество ЛВ Не ну когда столбцов настолько много

рано если сах точе цов такое нужно понижать количество ЛВ Не ну когда столбцов настолько много что лучше понизить но вы просто не Уте во время обучения А есть такая история когда модель 20 часов учится понимаете там за каждую за каждое улучшение будет бороться То есть если это сэкономит время если точность алгоритма упадёт на 2% а его производительность вырастет на 100% то я гарантирую 99% случае все пойдут в сторону увеличения производительности только ельные задачи где 1% - это ор успех для

все пойдут в сторону увеличения производительности только ельные задачи где 1% - это ор успех для компании может большие деньги может быть большие какие-то внутренние метрики оптимизации и другие истории Когда они пойдут на эти жертвы но в целом все стремятся всегда сделать просто чем проще тем лучше Вот все всегда если модель будет хорошо работать с одной фий значит все выберут одну фичу для интерпретирует и для производительности Да и для того для другого и последний момент про

фичу для интерпретирует и для производительности Да и для того для другого и последний момент про производительность когда мы говорим про обычное ML типа продуктовый ML какой-нибудь Там модель те же самые цены на недвига то там же производительность так понимаю не особо стоит вопрос просто потому что небольшая модель То есть ты сейчас когда говоришь про производительность ты говоришь про что-то более сложное чем ка продуктовы я имею в виду обучение её развёртывание и её поддержание и так далее

сложное чем ка продуктовы я имею в виду обучение её развёртывание и её поддержание и так далее ну обучение в первую очередь обучение конечно [музыка] обуче Да нет не обязательно даже классический алгоритм вообще молчу вопрос единственно что с чем мы можем играться с PC методом количество компонентов имеешь в виду комне то есть количество Ну для меня как количество осей на которых я Спускаюсь или Да можно так сказать Да это в принципе единственное с чем мы можем играть Вас могут спросить об этом

можно так сказать Да это в принципе единственное с чем мы можем играть Вас могут спросить об этом ещё на собе всегда помните что PC - это линейное понижение размерности дальше мы будем проходить алгоритмы которые имеют нелинейную структуру понижения размерности чем он хорош Он очень быстрый то есть есть нелинейные да это как нейроны сети вот нейроны сети Да они есть но они не покрывают очень много задач потому что ну это дорого просто-напросто дорого тяжело держать большую нейронную сеть и

много задач потому что ну это дорого просто-напросто дорого тяжело держать большую нейронную сеть и просить как бы 2 ПД Так может быть мне Пис взять для того чтобы 2 П2 складывать понимаете о чём я говорю да и PC как бы Топ за свои деньги Это линейный алгоритм который на больших данных достаточно быстро срабатывает и он не умрёт он будет жить хотя есть более сильные альтернативы где-то всегда Бут охватывать свою историю своё понижение размерности Так что помните что понижает размерность до

Бут охватывать свою историю своё понижение размерности Так что помните что понижает размерность до пространства которое вы указываете он понижает линейно если нелинейная зависимость то вы потеряете много информации он её не видит просто не видит так метод математически устроен да Люба а нет ли какого-то Правильно ли я поняла что вот мы хотим снизить разрядность то есть нам не хватит там мощности или е чего-то и подбираем а давайте там из 64000 сделаем там сто и сри сколько дисперсии мы теряем

или е чего-то и подбираем а давайте там из 64000 сделаем там сто и сри сколько дисперсии мы теряем если считать дисперсию мера Информации а нет ли такого инструмента типа атю которые нам выдаст скажет вот вам Ну ты сама ответила на свой вопрос есть такой инструмент АТ То есть можно и выбирать оптимальный в том числе Да конечно спасибо Ну для остальных если что как бы мы пока ТНУ не Не обсуждали будет время что Люб уже то есть то есть там можно подбирать фпт гиперпараметры PC можно да там всё

будет время что Люб уже то есть то есть там можно подбирать фпт гиперпараметры PC можно да там всё что буде Спасибо тюни вообще без разницы что рать это библиотека которая на самом деле минимизирует что и скажет перебрать то она и перер я Мы один раз на работе сталкивались очень сильно с PC там была история какая компания занималась вот ну это пря меня очень реальная история Где наш хлеб был конкретно В поисках чего-то хорошего компания занималась психологическими исследованиями но не научного

В поисках чего-то хорошего компания занималась психологическими исследованиями но не научного А бизнес характера типа психология в бизнесе ну ни для кого не секрет что много лони много зависит да так или иначе и человек может быть безумно талантлив и умн но иногда какие-то психологические Заки ему мешают или в обратную сторону короче какие-то истории вот эти вот есть и нам нужно было как-то Ну там ребята психологи были команды что как-то с помощью психологии собственно говоря улучшить процесс

ребята психологи были команды что как-то с помощью психологии собственно говоря улучшить процесс найма и процесс Ну там в том числе ещё и микроклимат Вт ком и там был в чём там был вопросник Ну Представьте что там не знаю тысяча вопросов Да не знаю первый вопрос второй вопрос тысячный вопрос на самом деле не ты 100 предположим он на самом деле занимал 15 минут любого человека который приходит в компанию просили пройти его и если это 15 минут времени занимало и проверяли как бы насколько это

в компанию просили пройти его и если это 15 минут времени занимало и проверяли как бы насколько это даёт Импакт и там в чём прикол как бы вот Представьте мы потом это пожали до трх компонент y1 y2 y3 И как я вам сказал что понижение размерности оно линейное то есть y1 на самом деле это А1 у X1 п А2 x x2 плю АФ N АФ 100 А1 ум на X100 и получалось очень красиво предположим первый вопрос не знаю первый вопрос Может быть о том что Ну не знаю готов точнее Да готов ли человек к переработка

знаю первый вопрос Может быть о том что Ну не знаю готов точнее Да готов ли человек к переработка предположим если вдруг возникнут как он к ним относится второе не знаю Работа в команде Да Работа в команде и так далее как-то И в итоге потом получалось что когда мы понижало очень неплохо и видно было что y1 y1 компонента она имела например большой вес связанный с командой там не знаю вопрос X3 мог быть связан с тем что хочется ли тебе проводить досуг со своей рабочей командой тоже имело бы

мог быть связан с тем что хочется ли тебе проводить досуг со своей рабочей командой тоже имело бы высокий вес Да вот это вот веса это веса каждого признака и получалось что y1 мог быть связан с тем чтобы работать с командой y2 там отношения к работе y3 ещё что-то получается что как бы вот эти компоненты на самом деле они как бы латентные я наверняка их не знаю но я могу посмотреть из чего они собираются и попробовать выстроить какую-то хотя бы какую-то интерпретацию какую-то интерпретацию да Да

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

делает Ну тут никакого термина у нас нет просто группировка фичей вот в прямом смысле то есть группировка как бы агрегация чей по группам никакого определённого названия это нет По крайней мере я его Да я тоже Ну типа придумал Ну в плане это не термин это не термин Да это просто как Таша вопрос не слышно тебя Если ты спрашиваю что-то получается вы на той работе вывели эти три новых параметра Ну этих и но объяснение что они означает Вы постфактум только нашли Да конечно а ты никак их заранее не

и но объяснение что они означает Вы постфактум только нашли Да конечно а ты никак их заранее не сделаешь есть а дам этих чах обучалась моде машинного обучения не получилось какого-то сверх результата но улучшения однозначно были рано допустил пошл помолился вернулся и то что вышло то вышло так получается А так весь анализ данных работает каком-то смысле Да на добром слове и на наших надеждах частая история тебе надо не знаю предсказывать Почему этот человек купит А этот не купит если ты

частая история тебе надо не знаю предсказывать Почему этот человек купит А этот не купит если ты соберёшь плохие данные Или ты просто не понимаешь как это устроено Что бывает очень часто это в смысле не за то что специалист слабый Это просто как бы непонятно что у него в голове у другого человека Ну будет г то 60% и всё Ну вот хоть стой хоть падай как бы там та же самая история мы же в голову каждому человеку не можем залезть и понять почему это там была история Какая чтобы сразу на берегу

каждому человеку не можем залезть и понять почему это там была история Какая чтобы сразу на берегу срезать тех кому некомфортно будет работать в данных условиях компании и пропустить тех кому будет комфортно то есть помимо их Skill иф skills ещ отфильтровать по какому-то психологическому комфорту людей в итоге как бы ну получилось улучшить всё равно получилось это длинный эксперимент Потому что это не так быстро выборка Копится и не так быстро проверяется Всё дело но в целом какое-то улучшение

не так быстро выборка Копится и не так быстро проверяется Всё дело но в целом какое-то улучшение Да появилось ихо впе ф Высшей Школы Экономики были крепкие ребята Ну психология для нас всех очень сложная штука классно Я люблю азартные игры я не зря пошл Sci да да поэтому это очень часто анализ данных идти вперёд и просто пытаться стать лучше не знаю где конечная точка очень много чего так работает в анализе Дан это исследовательский труд часто за большой вопрос глубокий вопрос ответ вот ну что

в анализе Дан это исследовательский труд часто за большой вопрос глубокий вопрос ответ вот ну что ж Давайте собственно говоря попробуем в коде запустить посмотреть как это выглядит так возьму на возьму панс чтобы было привычнее видеть и сегодня мне понадобится впервые библиотека есть документация Эрна Вот например я вбиваю P ВНО из семействе Pet Pet или SK это SK Image или Pet Image Сегодня мы сталкиваемся с самой основной библиотекой на следующей неделе на следующих двух неделях это будет

сталкиваемся с самой основной библиотекой на следующей неделе на следующих двух неделях это будет основная библиотека вообще в классическом машинном обучении и в работе с табличными данных данными это в принципе одна из самых главных ваших библиотек Да мы в ней будем очень много что делать элёр esal esal esal и ещё миллион раз я повторю за всё это время esor чаще чем на и вс что-либо однозначно вот собственно говоря здесь есть PC есть PC здесь немножко описание Что к чему Да можно даже

вот собственно говоря здесь есть PC есть PC здесь немножко описание Что к чему Да можно даже провалиться примерки Они показывают как понижают ккто хочет там красивые понижения посмотреть вот с 3D в 2D Да перемен до Как по мне вообще топ - это одна из лучших документаций которая вообще есть то есть она на совесть сделана тут всегда много инфы много всего расписано всё классно Так что почаще к ней обращайтесь вот собственно говоря и какая логика как правило у них какое-то описание в начале потом

обращайтесь вот собственно говоря и какая логика как правило у них какое-то описание в начале потом ну собственно говоря параметры Да параметры класса которые создаёшь здесь атрибуты Что такое атрибуты класса помните Да что такое Ну это какое-то значение присущее классу Ну которой обычно вы вы инити задаётся Ну либо не вы инити тоже может А в чём разница атрибута и метода класса Ну метод вызывается а атрибут просто есть метод это Ну функция какая-то заданная атрибут просто какая-то переменная

а атрибут просто есть метод это Ну функция какая-то заданная атрибут просто какая-то переменная да да да да примерно так ладно тогда давайте начнём Я сначала импортируют pca всё вот PC импортировались Ну давайте создадим какие-нибудь данные да создам Короче я Давай может быть три признака создам создам первый признак нормальное распределение пусть выборок у меня будет из 100 элементо элемен создам X1 дава он на самом деле как-то зависит от X1 и X2 представили так можно же так сделать А хотя

X1 дава он на самом деле как-то зависит от X1 и X2 представили так можно же так сделать А хотя знаете как сделаем не Мы сначала с вами по-другому сделаем чтобы можно было нарисовать чтобы можно было нарисовать Я сначала уже просто X2 вырежу через X1 так Ну пусть это будет как-то 2 у X1 плюс надо ещё на самом деле наложить шум надо ещё наложить шум по что име данные всегда зашумленные Поэтому в синтетических данных тоже будем накладывать шум так и собственно говоря создам датафрейм чтобы да ра

данных тоже будем накладывать шум так и собственно говоря создам датафрейм чтобы да ра X1 [музыка] X12 Так ну что ж вот я создал ну чем Дай обычно какой-то Дай есть какие-то два признака можно посмотреть X1 и DF X2 как у меня зависит друг от друга только скате мне нужен видите какая-то Линейная зависимость присутствует правильно даже можно чуть-чуть шуму дисперсию сбавить где-нибудь 0.5 вот собственно горя Линейная зависимость однозначно присутствует е есть такая ту Матрица корреляции Я думаю

горя Линейная зависимость однозначно присутствует е есть такая ту Матрица корреляции Я думаю что вы её тоже уже слышали Вот её можно в хит поворачивать у сибор у меня его небо вот ну то есть корреляция почти стопроцентная в принципе Кит информа корреляции там где высокие корреляции Ну что же Давайте попробуем понизить размерность собственно говоря Как происходит понижение Сначала мы создадим с вами экземпляр класса распределения pca Я создаю его и указываю здесь количество компонент Но мы с

вами экземпляр класса распределения pca Я создаю его и указываю здесь количество компонент Но мы с вами будем понижать до одной компоненты потому что у меня их всего две я понижуючий Вот мы с вами занимаемся машинным обучением машинном обучении буквально на самом деле две-три истории есть Fit predict это когда мы обучили потом способны предсказывать да то есть вот модели машинного обучения которого Мак запускал линейную регрессию мы их обучаем Т чтобы потом предсказывать дикт или оценивать а

Мак запускал линейную регрессию мы их обучаем Т чтобы потом предсказывать дикт или оценивать а есть ещё некоторые составляющие цепочки анализа данных которые работают по парадигме то есть они во время обучаются чему-то а дальше способны трансформировать данные и вот наш PC как раз таки то есть его задача какая когда он уже будет знать как это делать его задача трансформировать входные данные правильно правильно И вот я сейчас если пропишу трансформ вот смотрите метод трансформ есть я говорю а

правильно И вот я сейчас если пропишу трансформ вот смотрите метод трансформ есть я говорю а пони мне если говорить про вот эту историю он спрашивает Я не знаю вот этих коэффициентов Откуда мне их знать по какому правилу понижать он не знает Правильно Потому что он даже ещё с данными не знаком он их вообще не видел Вот где есть контакт Ну вот здесь Конечно есть контакт но самого Фит не было поэтому Сначала мы с вами делаем такую историю Fit PR будем сталкиваться очень много особенно на

поэтому Сначала мы с вами делаем такую историю Fit PR будем сталкиваться очень много особенно на следующей неделе делаем Fit и сюда подаём DF В итоге Ну вот вы так увидите высвечиваться будет в таком цвете это когда он обучился вот теперь я делаю pca transform так сейчас вот в нам возвращают по умолчанию но можно в СР выставить настройку [музыка] [музыка] заедаю так се [музыка] пому сейчас я не помню видите по умолчанию одат в А можно поставить е есть но это пока вам Неизвестная штука мы

я не помню видите по умолчанию одат в А можно поставить е есть но это пока вам Неизвестная штука мы поставим с Вами чтобы он выводил у меня в этом в пансе пансе выводил [музыка] Рас всё Теперь попробуем ещё раз создаём PC обучаем вот Ну так посипати да выглядит цело ми понизили того ти пониженный можно взглянуть Сколько информации мы сохранили это хранится в exp Вот pca pca - это экземпляр класса это Представьте это человек я любитель Так на самом деле отождествлять некоторые вещии вот pca он

это Представьте это человек я любитель Так на самом деле отождествлять некоторые вещии вот pca он умеет одно он умеет теперь понижать его обучили этому он умеет понижать размерность с двух до одного и никак больше соответственно у него есть какие-то характеристики которые он запомнил время обучения и одна из них - это Или explain variance rao точнее лучше выводить или доля сохранённой дисперсии она у меня 0,99 то есть очень очень большая Почему так получилось Да потому что у меня одна фича

она у меня 0,99 то есть очень очень большая Почему так получилось Да потому что у меня одна фича пустышка и удалив её или иначе говоря пустив Базис вот так вот Базис и теперь все точки задавать вот исходя из одной координаты а как бы которая у меня дальше в коде называется как pc0 pc0 Да вот здесь вот я её выводил на экран с помощью этой координаты в принципе сохраняется вся информация да получается система обучения - это Fit transform а третий шаг - это Дик три шага Ну нет просто что-то будет

система обучения - это Fit transform а третий шаг - это Дик три шага Ну нет просто что-то будет как бы что-то предикт что-то трансфорт трансфорт а кто-то будет предиктивное либо трансформирует од Ну вот смотри например у pca у pca Ты откроешь документацию Вот он видишь он работает а вот у них методы сейчас справа вынесли есть Т есть отдельный трансформ есть трансформ то есть ты обучился и сразу трансформировал это одна парадигма Вот возьму я какой-нибудь не знаю esor Random Forest Да например

трансформировал это одна парадигма Вот возьму я какой-нибудь не знаю esor Random Forest Да например То есть если его возьмёшь то у него есть Т есть дик то есть он работает на оценку кто-то на трансформацию кто-то на оценку Потому что тот кто вы сейчас грузите это очень легко различи просто вам нужно немного поводиться в этом Ну как бы PC нужно преобразовать данные поэтому он трансформирует ROM Forest ничего преобразовывать не будет ему нужно дать оценку поэтому он предикт всё А нет таких

ROM Forest ничего преобразовывать не будет ему нужно дать оценку поэтому он предикт всё А нет таких которые и трансфорт а потом Преди два шага не знаю так на ум не приходит Нет спасибо PC Ну в каком-то смысле Да в каком-то смысле Да в каком-то смысле ты прав очень отдалённо можно сказать что на фигачит ли негре Так ну вот собственно говоря мы с вами проделали Что ещё интересного я могу вам здесь рассказать м а Давайте попробуем сгенерировать когда X2 вообще не зависит от X1 вот я создам вот так

м а Давайте попробуем сгенерировать когда X2 вообще не зависит от X1 вот я создам вот так X2 рано Ну вот так вот всё тоже самое только Теперь смотрите точки вообще хаотично теперь как бросить мне Базис чтобы потерять немного информации напоминаю все точки будут на него проецировать представляете Какая потеря информации огромная идёт то есть здесь уже как бы ну понятно что вот это фича и вот это они дают принципиально разную информацию они имет ную Корре видно вот вот этому ИЖ корреляция нулевая

дают принципиально разную информацию они имет ную Корре видно вот вот этому ИЖ корреляция нулевая фактически и они вносят нулевой вклад раз они вносят нулевой вклад Ну как бы Аа удалять их ХЗ ХЗ тема сомнительная вот собственно говоря также обучаемся трансформируем доле объяснён дисперсии стало 53 Ну она ровно 0,5 не будет никогда из-за шумов данных но тем не менее понятно что как бы в данном случае метод говорит что ребят 50% информации потеряно Какую картинку сожмётся если бы у меня было бы

метод говорит что ребят 50% информации потеряно Какую картинку сожмётся если бы у меня было бы 10 признаков 10 признаков все они независимые и я бы понизил до одного То есть я бы потерял бы понял то есть для 2D сложно это уже сделать для 10d это проще будет сделать понял спасибо угу вот в принципе и ещё одна такая вещь которая вам пригодится в дальнейшем м Смотрите вот она нужна здесь называется нормировка данных Вот мы с вами люди как бы в принципе измеряем многие вещи в разных единицах

нормировка данных Вот мы с вами люди как бы в принципе измеряем многие вещи в разных единицах измерения правильно что-то измеряется в амперах что-то в килограммах что-то исчисляется в количестве и так далее мы с вами понимаем что больше 10 ам или 10 кг 10 ам или 11 Гра что больше ве можно мыс говорит то есть в контексте чего то есть в принципе как бы нас Учи что эти вещи сравнивать нельзя и по факту это Ну правильно В каком-то смысле но в контексте чего-то может быть можно и было бы сравнивать

это Ну правильно В каком-то смысле но в контексте чего-то может быть можно и было бы сравнивать Да если 10 а по тебе пройдёт или 1 Гра на тебя упадёт в принципе и там и там похоже Вот но ампер смотря конечно При какой мощности дадут это очень важной при ка мощности при кам напряжении кам напряжени 10 это оче много Вот к чему я веду к чему я веду А компьютер понимаете он будет воспринимать 10 и 11 два числа ему без разницы амперы это или килограммы и вот это как бы Наша задача сделать так чтобы

два числа ему без разницы амперы это или килограммы и вот это как бы Наша задача сделать так чтобы как-то он их мог между собой сравнивать это было достаточно объективной истории приведу пример достаточно типичный в данном случае Представьте что не знаю мы смотрим уровень удовлетворенности жизни человека или чтото типа такого и берм просто параметра во и его доход доход в какой-то валюте неважно В какой Ну мы с вами понимаем что возраст Ну сколько там ну до 100 лет даже возьмём да возраст от

В какой Ну мы с вами понимаем что возраст Ну сколько там ну до 100 лет даже возьмём да возраст от нуля до 100 из Мы даже возьмём от 18 да будем спрашивать уже совершеннолетних людей от 18 до 100 и доход Ну возьмём условно от 1000 до 10.000 каких-то условных единиц даже там если в рублях это будет ещё сильнее дисперсия Да дисперсия ещё сильнее будет чем в долларах или какой другой условно единицы так вот мы с вами понимаем что 10 лет жизни 10 лет жизни Это совершенно не то же самое что 10 лет

так вот мы с вами понимаем что 10 лет жизни 10 лет жизни Это совершенно не то же самое что 10 лет или 10 не то же самое что 10 руб или 10 долларов правильно уровень удовлетворённости может не поменяться от того что у меня Зарплата была не знаю 20.000 руб о стало 20.1 руб а то что я прожил на 10 лет больше Да получил какой-то житейской мудрости там Привоз дался или как там ну короче что-то такое да Ну по крайней мере изменения могут быть кардинальные очень кардинально а компьютер будет без

да Ну по крайней мере изменения могут быть кардинальные очень кардинально а компьютер будет без разницы ему вообще будет фиолетово фиолетово как бы он будет считать доминирует то Что измеряется в большой шкале всё это же большое это большое что там ерунда ребячество Какое летн вот Уно 1 руб это Т это 10 а тут потому что на самом деле мы сравниваем рубли с годами это как бы неправильно есть такое понятие нормировка данных нормировка данных заключается в том вот даже если взять например да Ну там

нормировка данных нормировка данных заключается в том вот даже если взять например да Ну там и собственно говоря там не знаю 83 36 и так далее какие-то возрастные истории здесь там пусть будет 10.000 20.000 там не знаю 15.000 короче какие-то большие числа Да 60.000 ну как вот они как бы понимаете для компьютера Вот это это вообще просто ну сильная доминация над тем что здесь хотя на самом деле мы понимаем с вами этот признак он просто измеряется в другой шкале он избирается в другой шкале и всё

понимаем с вами этот признак он просто измеряется в другой шкале он избирается в другой шкале и всё ни больше ни меньше Как происходит нормировка если я хочу получить нормированный H Например я беру из каждого возраста назову это X ий я выч средний возраст и разделю средний возраст и разделю на стандартное отклонение где мы такой трюк применяли вот эту конструкцию знаме называю стандарт среднего здесь другое где мы вычитали среднее и делили на стандарт отку в принципе Об одном и том же я вам

здесь другое где мы вычитали среднее и делили на стандарт отку в принципе Об одном и том же я вам сказал ещё тогда что мы с этим встретимся в контексте нормировки вот настал этот момент и самое удобное В чём берм сюда собственно говоря 20 подстав 5 лет предположим всё он зано ется как минус д он будет занова МИД все у нас будут примерно возраст лежать от -3 до тёх в трёх Сигма слева справа м вот как-то так в трёх Сигма слева справа и всё будет нормально этот минус д значит лежит где-то во

вот как-то так в трёх Сигма слева справа и всё будет нормально этот минус д значит лежит где-то во второй сигме слева и ещё один большой плюс сейчас я закончу мысль свою ещё один плюс большой А вот смотрите если здесь 20 лет Здесь тоже 30 лет и здесь стандартное отклонение Ну 5 лет то какая у нас единица измерения придёт на выходе разы Какая что-то Ну да я не знаю как её назвать но никакая без имя Как бы ни в чём не измеряющие и то же самое произойдёт здесь и они все будут ни в чём не

без имя Как бы ни в чём не измеряющие и то же самое произойдёт здесь и они все будут ни в чём не измеряющие и у нас будет как бы хоть какой-то паттерн чтобы их как-то сравнивать и объективно оценивать относительно друг друга потому что они во-первых сит и плюс они е не измеряются теперь там в годах в рублях в долларах в амперах в килограммах в метрах В чём угодно Да с чем вы можете столкнуться на практике вот Какая такая история Давайте тепер вопрос кто там первый был Настя наверно во-первых ну

практике вот Какая такая история Давайте тепер вопрос кто там первый был Настя наверно во-первых ну поло то данные ты тут же нормируется цена аренды вот мы когда моделировали у нас там получились приличные метрики модели но при этом насколько я помню не наша команда не другие они мы особо не нормировать это как понять типа мы совершили ошибку и нужно было ОТР каждую переменную в той модели или что Ну да да вы совершили ошибку ни в плане точности страдают другие вещи интерпретируемый моделью об

Ну да да вы совершили ошибку ни в плане точности страдают другие вещи интерпретируемый моделью об этом мы поговорим уже в конце этой недели ошибка Но вы это просто пока не знали ничего страшного делается быстро тут как бы действительно строчки а Дане [музыка] я один элемент выборки норми каждый это стандартная ошибка среднего на скольки-то элементов А у меня нормировка происходит одного элемента выборо А не сколько-то много поэтому сечас Томы будем использовать использу когда гипоте провер

выборо А не сколько-то много поэтому сечас Томы будем использовать использу когда гипоте провер спасибо Вот если для нормировки использовать типа формулу как ну число минус минимальное делить на максимальное будет ли разниться она сильно от этого ну там не совсем так можно было бы нормировать минус минимальный возраст делить на МАКС минус мин вот так вот сильная разница была бы если этому чуваку 20 минимальный 18 а максимальный 50 соответственно как бы у нас в каком-то смысле возрастная шкала

20 минимальный 18 а максимальный 50 соответственно как бы у нас в каком-то смысле возрастная шкала от 18 до п где чувак двадцатилетний по факту В самом начале этого пути да поэтому мы найдём в числителе Вот это будет два а в знаменателе Вот это разниц и все значения будут от нуля до одного надо пробовать никто точно не знает ни один математик тебе не скажет что лучше есть лишки предположения Какая из них лучше но существует и тот и другой скиле се у вас будут проек Когда вы сможете попробовать

из них лучше но существует и тот и другой скиле се у вас будут проек Когда вы сможете попробовать разные скеле и сегодня может попробовать разные скеле есть какие-то рекомендации о том какая мировка где может быть лучше но не более того попробовать без всяких проблем такую ро называется А вот это стандарт с да и ну там со средним в нуле правильно и с Сигма единиц получается да да да ну к нормальному Не факт что Приведёшь если изначально было ненормально то оно и останется Но стандартизация да

Не факт что Приведёшь если изначально было ненормально то оно и останется Но стандартизация да да ты прав что средние будет ноль а стандартное отклонение единиц Ну что ж Давайте тогда запустим [музыка] запустим запустим во-первых я вам сейчас покажу пример Давайте вот прямо так и сделаем AG AG и income пусть так будет Да у меня Давайте й пусть у меня будет не НМ пусть у меня будет выборка где возраст людей вообще случайно выбирается в диапазоне Ну давайте от 18 лет до 82 Ну или до 100 пусть

возраст людей вообще случайно выбирается в диапазоне Ну давайте от 18 лет до 82 Ну или до 100 пусть будет а будет нормальное распределение не знаю со средним в 40.000 и стандартным отклонением Нет давайте среднее 70.000 стандартным отклонением 10.000 вот так вот пусть будет Вот собственно говоря возьмём назовём здесь H здесь Age и здесь income и income Ну вот собственно говоря какие-то получились две выборки А почему мы их не строим потому что у нас не переименовано Вот ну как бы собственно

две выборки А почему мы их не строим потому что у нас не переименовано Вот ну как бы собственно говоря они не зависят Да друг от друга опять же корреляция у них ну фактически нулевая Это случайно так совпало что 0 такое тоже может быть да и на кубике после Ты подбрасывания может быть средни 4,5 Ну что ж мы с вами понижаем Вот мы понизили до одной компоненты И доля сохран информации 099 что это такое Почему так как вы думаете Ну у меня два независимых признаков друг от друга а сохранная

это такое Почему так как вы думаете Ну у меня два независимых признаков друг от друга а сохранная информация 9% Хотя я один из них выкинул он автоматически сам нормализовался Да Абсолютно верно Посмотрите на вот этот масштаб для него вот это изменение - это просто ребячество Ну просто ребячество если бы я бы выставил по-хорошему масштаб оси X в данном случае такой же как здесь сколько там у меня а но от 40.000 получается до 100.000 Вот давайте также поставим 40.000 100 000 даже точек не видно

а но от 40.000 получается до 100.000 Вот давайте также поставим 40.000 100 000 даже точек не видно видите их все прижала просто сюда и [музыка] всё нет то чтобы их прижал их просто не видно это я фигню тво Дава так вот они все ну вы Представьте что вот этот как бы признак относительно вот этого Если масштаб один к одно делать Ну ни о чём вообще Поэтому он просто как оло вот этот признак и всё на самом деле не понимаю что это признак всё в анализ данных и проявление относительности очень сильно

самом деле не понимаю что это признак всё в анализ данных и проявление относительности очень сильно проявляется так вот всё относительно чего-то большое и маленькое быстрое и не быстрое поэтому он просто говорит что так давай Ну в каком-то смысле писе сделал Просто он выкинул H и да Какая ещё штука Какая ещё хорошая штука хорошая штука ещё знаете что такое des вот у меня ну как бы дисперсия стандартное отклонение то же самое По одной 24 по другой 99.000 но как вы думаете если я выкину просто

отклонение то же самое По одной 24 по другой 99.000 но как вы думаете если я выкину просто вот этот столбец у меня останется 8996 из А 8996 + 24 понимаете то есть остаётся почти 100% потому что данные относительно друг друга не нормированные так вот теперь мы с вами сделаем предварительно нормировка данных Итак Для этого мне нужен изр изр изр мне нужен стандарт срн могу ошибаться истар всё таже самая история та же самая история тут что я делаю Я создаю Ну давайте назову его скейлер создаю

самая история та же самая история тут что я делаю Я создаю Ну давайте назову его скейлер создаю Стандарт скеле он работает как EPC по Fit transform если я ему сейчас говорю что дружище а трансформируйте не данные г он говорит так я необычный ещ А как я трансформировать буду мне чтобы трансформировать надо вычесть средние разлит стандартные уклонения я их ещё даже не знаю поэтому можно сделать можно отдельно Фит отдельно трансформ я сразу сделаю тфм то есть он обучится и сразу же трансформирует

отдельно Фит отдельно трансформ я сразу сделаю тфм то есть он обучится и сразу же трансформирует всё и давайте сохран это сохраним это в normalized DF вот вот такие вот истории и теперь можете Взглянуть на desy смотрите два средних равны нулю это просто косяк отображения Но на самом деле это два нуля средня стало ноль а стандартное отклонение стало единицей И вот теперь попробуй-ка выкинуть одну из двух признаков и оставить 99% информации так конечно не будет Давайте всё это дело теперь добьём

из двух признаков и оставить 99% информации так конечно не будет Давайте всё это дело теперь добьём добьём да раздва вот так вот ну тут ничего не поменяется вотт видите масштаб выровнял плюс-минус у них Да что у одного что у второго понижаем до одной компоненты только мы понизили не то надо вот так вот сделать и здесь назовём [музыка] А вот так вот ну и собственно говоря доля сохранная информации стала 50 видите что после нормировки произошло вот в принципе как-то так как-то так всем ли понятно

стала 50 видите что после нормировки произошло вот в принципе как-то так как-то так всем ли понятно что здесь происходит Угу Да Костя что тут происходит Понятно У меня сейчас мысли улетели как раз к цину опять я вспомнил что перед тем как нормировать нормировать мы сначала кодировали категориальные признаки и там использовали А ну чаще всего Target coding например И вот потом мы к таким значениям уже не могли применять норми вот пытаюсь Почему СС пытаюсь помни сло чтото вроде теряется

значениям уже не могли применять норми вот пытаюсь Почему СС пытаюсь помни сло чтото вроде теряется интерпретация То есть если приме то лучше не делать миров таким признаком либо меня какая-то кало получилась е ложишь просто всегда помните В таких ситуациях надо помнить одно всё всегда помнить одно что компьютер - это просто холодный кусок железа ну точнее чаще горячий кусок железа но в целом вы поняли он холодно смотрит на цифры ему вообще просто фиолетово что это такое только вы как человек

поняли он холодно смотрит на цифры ему вообще просто фиолетово что это такое только вы как человек понимаете здравур ну после какой-то категориальной перемены закодирована в сверх больших числа и вы будете использовать алгоритм который сравнивает числа между собой Вы должны понимать что компьютер просто отдаст Вес вес и всю силу большому признаку Вот как сейчас произошло как бы в общем виде лучше нормировать но всегда как бы рассуждайте логически от ситуации к ситуации вот вот это круто потому

нормировать но всегда как бы рассуждайте логически от ситуации к ситуации вот вот это круто потому что вот сейчас сошлось короче по полочкам немножко Круто Круто я рад неко сами нормируют Ну СПО утвержде Тае Да просто где-то Ну ладно мы ещ обм знаниями не буду Пока спешить паво сегодня вот то что мы узнали про нормировка это уже прекрасно Это уже прекрасно чуть поняли её смысл и философия кото для которой нужна нормировка да Для чего она вообще нужна Вот теперь как Да я уже собственно говоря

для которой нужна нормировка да Для чего она вообще нужна Вот теперь как Да я уже собственно говоря понизил и Всё сохранил 50% ИФИ поэтому поэтому вот у вас сегодня одно из зада лько в можно было при этом сохранить Вот есть такая условность это условность на самом деле от задаче к задаче она может разниться что 90% типа если больше 90% инфы сохраняете Тод меньше как бы ну сомнительно Понятно Ну вот у вас там есть по-моему какой-то признак который очень сильно в большой шкале измеряется и кто-то

у вас там есть по-моему какой-то признак который очень сильно в большой шкале измеряется и кто-то мне помню говорит что я понизил доно компоненты и хнр вот ловушку не нормирования данных обязательно Не забывайте нормировать то есть алгоритм PC требует чтобы данные были в в одних единицах измерения в одних масштабах то есть стандартное отклонение и среднее были одинаковыми такая вот история такие пироги ещё вопросы ко мне по поводу PC есть сегодня на самом деле P ради пи ради повозиться с нампа

пироги ещё вопросы ко мне по поводу PC есть сегодня на самом деле P ради пи ради повозиться с нампа со СР вас будет возможность е более детально поменять чуть позже Да но имплементировать Угу Да это стандарт скеле Вот ты топил зама скеле можешь попробовать нма скеле сюда поставить но в этой задаче не сильно будет разница это в других задачах которые на следующей неделе там скейлер может повлиять на результат Так ну что ж это была первая часть нашего сегодняшнего мероприятия далее будет его

на результат Так ну что ж это была первая часть нашего сегодняшнего мероприятия далее будет его братишка братишка покрепче СВД вот так что давайте мы с вами восстановим сейчас 20 минут и в 30 будем продолжать всё перерыв Так ну что давайте возвращаться Давайте возвращаться с писи мы с вами итоге проговорили разобрались посмотрели в коде и весь контекст Да которы может быть в то здесь прописан алгоритм понижения размерности Кто хочет как может взглянуть как внутри ВС устроено Вот Но в принципе

понижения размерности Кто хочет как может взглянуть как внутри ВС устроено Вот Но в принципе это не обязательная штука достаточно реализация в коде следующее следующее что мы с вами разберём это сингулярное разложение матри или svd с чего начнём начнём с того что этоже матри разложение и используется для того чтобы понижать размерность СВД тоже но СВД не только ещ Это умеет посмотрим сначала на рисунок справа рисунок точнее на рисунок слева рисунок слева вот смотрите вот у меня есть исходная

рисунок справа рисунок точнее на рисунок слева рисунок слева вот смотрите вот у меня есть исходная пространство есть Матрица м когда я как-то данные прогоняю через эту матрицу м помните мы на картинках вчера видели что что-то мы наклоняемся вытягиваем сжимаем или что-то ещё помните да то есть это могло выглядеть как-то вот так сингулярное разложение - это такое разложение которое разбивает одну Матрицу на произведение трёх матриц Казалось бы для чего это нужно Нафига усложнять жизнь но на самом

на произведение трёх матриц Казалось бы для чего это нужно Нафига усложнять жизнь но на самом деле все эти три матрицы они ну как бы простейшие матрицы они гораздо проще по конструкции чем Матрица м вот матрицы как правило идут их преобразование справо налево Поэтому вот у нас есть Матрица V это правая Матрица Матрица или правая сингулярная Матрица е ещ называют это Матрица поворота это Матрица поворота то есть в данном случае видите как бы мы исходный Базис исходный Базис просто повернули Да

поворота то есть в данном случае видите как бы мы исходный Базис исходный Базис просто повернули Да просто повернули далее Матрица Сигма на самом деле Самое важно Матрица Это центральная Матрица это Матрица растяжения сжатия она просто растягивает или нажимает всё аями какой она вид име типа но диагональный вид Абсолютно верно В общем виде она будет иметь вот такой Сигма 1 Сигма 2 Сигма N где вот это всё сингулярное число называется а всё остальное - это просто нули нули Вот именно такая

вот это всё сингулярное число называется а всё остальное - это просто нули нули Вот именно такая Матрица она просто растягивает сжимает мы с вами вчера это не раз видели на приме Ну и потом матри матри поворота уже сжатого пространства сжатого пространства Ну например в Википедии есть пример То есть если откроем СВД Да вот она исходная какая-то матрица Вот её разложением сингуляр видите Матрица ю и в Обратите внимание Матрица ю и в имеет как ки все чис короче лежат в Диане от ми до О так там

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

диагонали тоже могут быть нули но за пределами главной диагонали никаких чисел Нет там точно всегда нули гарантированы причём эти сингулярные числа так называемые они всегда аранжировать верхнем углу самое большое потом Чуть поменьше потом ещё поменьше и так далее Меньше меньше меньше меньше меньше меньше Вот теперь немножечко по размерностей поговорим по размерности А вот здесь запишу здесь запишу Ну тут у меня обрубленным Если исходная у меня Матрица имеет размерность на на на то мы её

запишу Ну тут у меня обрубленным Если исходная у меня Матрица имеет размерность на на на то мы её понижаем на три матрицы ю сигма и V где Матрица ю имеет размерность нам Она имеет квадратную размерность повой координате втори ва сингулярная матри имеет размерность тоже квадратная по второй размерности Центральная Матрица Сигма имеет размерность на то есть мы раскладываем с вами на три матрицы скажите вот эти матрицы можно умножать или нет да да можно Поче можно ВМ порядке по другом поря нельзя

вот эти матрицы можно умножать или нет да да можно Поче можно ВМ порядке по другом поря нельзя [музыка] помоему все вме вопрос первую и третью матрицу можно все все три все три вместе да и после их перемножения Какая размерность будет у на Михаил на Николая да то есть ровно так же как собственно говоря было у нас исходно как было исходно в общем вот и Казалось бы Нафига усложнять жизнь Нафига усложнять жизнь да То есть была одна Матрица мы разбили есть на матрицу е такого же размера плюс но

усложнять жизнь да То есть была одна Матрица мы разбили есть на матрицу е такого же размера плюс но лишнего Но это имеет очень крутые следствия мы с вами посмотрим на картинках и посмотрим на табличных данных на картинках даже реализуем с вами сами сингулярные разложения Так что мне для этого понадобится мне понадобится библиотека SK и Дава также я возьму сегодня чёрно-белое изображение начнём с чёрно-белого потому что чтобы один канал был ну какое-нибудь выберем красиво Давайте вот котика

с чёрно-белого потому что чтобы один канал был ну какое-нибудь выберем красиво Давайте вот котика возьмём копировать URL картинки вот копировали соответственно по-моему так да пишется у нас URL да Вот она подгрузило эта картинка Ну я назову это просто plp у меня включён во-первых IM Shape всё у меня всё корректно у некоторых сегодня из вас короче вот эту мысль Не пропустите мимо ушей некоторые короче чёрно-белые изображения Они хоть и чёрно-белые но заданы тремя каналами тремя каналами в таком

чёрно-белые изображения Они хоть и чёрно-белые но заданы тремя каналами тремя каналами в таком случа нужно взять один из каналов просто любой и всё ладно вместе Сейчас посмотрим что забуте что я имею в виду ну в общем что тут Давайте визуализирую визуализирую Ну тут по умолчанию стоит вот такая шкала Да как бы в таких-то желтоватых синева оттенках можно Сима равно поставить Грей Вот и мы получим с вами Ну чёрно-белый чёрно-белую шкалу это просто рисунок Вот 666 пикселей у нас с вами высота 1

с вами Ну чёрно-белый чёрно-белую шкалу это просто рисунок Вот 666 пикселей у нас с вами высота 1 шири следующую историю именно над этой матрицей мы проведём сингулярное разложение Для этого мне понадобится из библиотеки NP Но это ещё есть Ещё в ряди библиотек но я возьму из а СВД сюда подаю своё изображение запускаем видите О как бы обсчитывают всё за секунды и он возвращает мне три матрицы на самом деле он даже не совсем три матрицы возвращает он возвращает матрицу он возвращает сингулярные

самом деле он даже не совсем три матрицы возвращает он возвращает матрицу он возвращает сингулярные числа То бишь просто диагональ вот этой матрицы говорит Ну чувак дальше разберёшься сам Если всё остальное нули я тебе их просто так не буду высылать я тебе просто даю сингулярные числа Если хочешь сам там в нули всё это оборачивать да это для экономии ресурсов сделано одно дело когда Матрица 5 на5 другое дело когда Матрица 10 мл на 20 млн уже совсем другая история [музыка] и и сонно матри это

другое дело когда Матрица 10 мл на 20 млн уже совсем другая история [музыка] и и сонно матри это правая сингулярная Матрица Давайте взглянем по размерности U то shap 666 на 666 квадратная по по выведу ещё вот так чтобы мы с вами видели размерность квадратная по высоте тинки Да Далее вот сингулярные числа сингулярные числа видите это просто 666 сингулярных чисел потому что у меня Матрица получилась размерностью 666 а здесь там вторая помоему размерность 1000 была то есть вот он 666 и где-то

размерностью 666 а здесь там вторая помоему размерность 1000 была то есть вот он 666 и где-то снизу упёрся так как Матрица более длинная он упирается вниз а не в бок это называется Матрица в ширину и высоту по-моему вот у нас в ширину получилось когда как бы картинка горизонтально ориентирована а не вертикально я упёрся вниз Короче у меня 666 сингулярных чисел и мы с Вами просто это заполним заполним нулями заполним нулями самостоятельно сечас только выведу ещё то вот всё корректно но не

заполним нулями заполним нулями самостоятельно сечас только выведу ещё то вот всё корректно но не умножаться потому что здесь не Матрица мы с вами назовём эту матрицу Матрица Сигма Центральная Да сначала создадим её из нулей Да из нулей размер Нам нужен с вами какой типа пром вот так вот и тогда выходит у нас с вами всё хорошо И вот это Сигма теперь пока что это Сигма Она состоит из нулей А нам надо вот эти сингулярные числа положить по диагонали но это очень легко Гугли но я в принципе помню

надо вот эти сингулярные числа положить по диагонали но это очень легко Гугли но я в принципе помню этот метод он называется заполнить диагональю я сюда подаю только не помню в каком порядке сначала подам сча подам Да а потом значение которые нужно заполнить поэтому я подаю говорю что вот в сигму нужно положить сингулярные числа и всё можно взглянуть как эта Сигма выглядит Сигма Вот она заполнилась но тут не очень понятно выглядит можно вот как бы вот так чтобы просто нагляднее было Вот они

но тут не очень понятно выглядит можно вот как бы вот так чтобы просто нагляднее было Вот они сингулярные числа Пошли по диагонали видите Да всё ой вра И теперь мы здесь вс-таки выведем Сигма Тоше ля проверяем Можно ли умножить эти матрицы между собой да причём чтобы вы понимали Какая магия достаточная вот отдельно выведу матрицу ю вообще не пойми что это такое бессмыслица Матрица Сигма бессмыслица Матрица в бессмыслица А теперь мы умножим эти все матрицы внутри и собираем и опять котик

Матрица в бессмыслица А теперь мы умножим эти все матрицы внутри и собираем и опять котик разобранный котик вновь собрался причём собрался в целости сохранности да три какие-то эфемерные матрицы дают абсолютно адекватный то есть процедура она обратима Я разложил когда я обратно складываю Я получаю исходный результат сингулярные числа нам возвращает алгоритм вот аналог СВ то есть само разложение как оно делается Мы рассматривать не будем там сложная математика И это ни к чему Да Бул собачка это

оно делается Мы рассматривать не будем там сложная математика И это ни к чему Да Бул собачка это умножение матриц да получается оператор для пна Да да да я не знал Угу Можно вот так вот и это полный аналог np.dot то есть вот np.dot и собачка они друг другу эквивалентны спасибо большое угу это матричное умножение Я просто через собачку пишу кто-то через npd Ну через npt так-то как бы покрасив по правильней но не мне собачка привычнее дадада ещё раз Для всех собачка - это матричное умножение Ну

правильней но не мне собачка привычнее дадада ещё раз Для всех собачка - это матричное умножение Ну NP то Dot сначала две потом третью так нане надо читать там может быть читать смотреть документацию что м тут по свету npd смотрите может сюда вот звёздочка акс я думаю можно вообще подать все три матрицы сюда сразу же но я не уверен пробуйте проверяйте вот а к чему я веду сейчас мы будем кое-что делать помимо того что мы с вами проделали мы лишь убедились что сингулярное разложение работает

делать помимо того что мы с вами проделали мы лишь убедились что сингулярное разложение работает корректно теперь мы будем существенно сокращать размер данных понижать их Прим понижать очень естествен истори оказывается что вот э ные числа это информация вот реально В прямом смысле это информация они все идут в убывающем порядке а это значит что в первом сингулярное всего информации во втором поменьше в третьем поменьше и мы с вами попробуем сделать такую штуку смотрите вот у меня есть Вот у

в третьем поменьше и мы с вами попробуем сделать такую штуку смотрите вот у меня есть Вот у меня есть исходная Матрица мы с вами возьмём топк компонент это вот как в PC В каком-то смысле вот тут тоже возьмём топк Ках компонент и мы будем делать следующим образом мы из первой матрицы из первой матрицы возьмём топк столбцов топк столбцов из Центральной матрицы мы её ставим в квадратном виде с окошком к нак размером и из из третьей матрицы мы возьмём топка топ и в принципе в принципе как бы Чинг

к нак размером и из из третьей матрицы мы возьмём топка топ и в принципе в принципе как бы Чинг должен произойти вот эта Матрица станет на K Центральная Матрица будет K на K А вот эта Матрица K на N умножаться ли эти матрицы у меня между собой да причём будет размерность на N правильно то есть по факту мы вырезаем что-то латентное что-то внутри а наружняя размерность Вот она Нан Давайте попробуем это реализовать попробуем это реализовать и я буду это называть как это называется правильно да то

это реализовать попробуем это реализовать и я буду это называть как это называется правильно да то есть усечённая U Давайте тран U вот у меня есть Матрица U была я буду брать Ну давайте сначала сколько у меня всего сингулярных чисел у меня всего сингулярных чисел 666 поменьше размерности Ну давайте сначала возьмём с вами ну половину 333 так U вот как мне взять у матрицы U вот у этой матрицы все получается строки но 333 пса первы сре срез сделать Угу Так диктуй что здесь внутри ну если все

все получается строки но 333 пса первы сре срез сделать Угу Так диктуй что здесь внутри ну если все строки то двоеточия запятая ну типа дто 334 топк вот так не топ гарантировано нам Отлично Теперь давайте сделаем центральную матрицу усечённым там нужно взять нам топк строк и топк столбцов давайте а с кем мы Давайте с Олей Оля Как взять срез в ном пае чтобы взять топк строк и топк столбцов топк запятая топк просто вот так топк и топк да Через запятую от нуля от нуля тогда от нуля дто топка и от

топк просто вот так топк и топк да Через запятую от нуля от нуля тогда от нуля дто топка и от нуля Ну точно или точно также как вот можно неть просто Просто если ты бы просто топк топк написал один элемент получила бы который индекс имеет топк топк да то есть 333 333 конкретно одно число нам это не нужно нам нужно вот так Ну собственно говоря покой логике у делается подаём двоеточие топк Ой да Всё правильно топк строк нам надо взять топк и все Столбцы Всё Давайте выведем тран Q точ Shape н Сима

правильно топк строк нам надо взять топк и все Столбцы Всё Давайте выведем тран Q точ Shape н Сима то shap и V то Итак умножаться эти матрицы умножаться причём будет ровно той размерности которая у нас была исходная исходный наш котик Да вот этот 666 на 1000 Давайте посмотрим что из этого выйдет Давайте посмотрим что из этого выйдет Воля по что отличим правильно Может он стал менее чётким но в целом человеческий глаз и Ключевая информация что здесь происходит сохранена от слова совсем верно

целом человеческий глаз и Ключевая информация что здесь происходит сохранена от слова совсем верно Можно попробовать понизить Давайте не 333 оставим а 133 всё равно котика видно можно даже оставить Давайте 50 компонент оставим Ну вот его начинает размывать он становится более зашумленные Но это всё равно Котик а Ну как бы можно сказать что да алгоритм компрессии но он не свой он как бы известный и в целом Да в целом Да это принимается как алгоритм компрессии тоже но к чему я веду мысль видите

и в целом Да в целом Да это принимается как алгоритм компрессии тоже но к чему я веду мысль видите что мы на самом деле с вами потеряли Точнее не потеряли а оставили топк делить на Ну сколько по факту надо взять минимально у iMap то есть мы с вами оставили только 7% сингулярных чисел 7% Аля значений и при этом при этом у нас всё ещё также объект достаточно неплохо различим Можно конечно здесь вывести М давайте сделаем так [музыка] сделаем и здесь подадим АК это будет Первое акс [музыка] нулевое

М давайте сделаем так [музыка] сделаем и здесь подадим АК это будет Первое акс [музыка] нулевое сюда подойди просто вот этот вот где он у меня Ну вот собственно говоря видно разницу Конечно Да видно Так ну что ж вот собственно говоря такая история вышла Давайте вопросы да ко Правильно ли понял что оставив такую же размерность мы выиграли в том что в этой матрице теперь просто больше нулей и меньше данных и она значительно легче не понял вопроса мы выиграли что мы можем понизить буквально

меньше данных и она значительно легче не понял вопроса мы выиграли что мы можем понизить буквально размерность я сейчас её понизил оставив 7% размерности и просто на картинках это видно сейчас мы ещё запустим Других данных при этом как бы ну видишь суть по факту сохранилась правильно Да обет ВС равно читаемый то есть любое изображение - это всегда информация вот здесь информация больше всего что это код то есть в целом даже сингулярное разложение которое мы почти всё срезали мы всё равно можем

это код то есть в целом даже сингулярное разложение которое мы почти всё срезали мы всё равно можем сохранить информацию о том что код здесь изображён Вот вот где главная философия зарыта не знаю ответил вопро Ну ответил пытаюсь понять см это для какую заре ность мы делаем сам дай легче уходим от мерности какой-то огромной тут тут в итоге была большая Матрица и осталась большая в случае с картинками в случае с картинками тут нас интересует тот факт что хранить его будет проще то есть это

в случае с картинками тут нас интересует тот факт что хранить его будет проще то есть это алгоритм сжатия популяр сейчас вот например Когда вы ну сжимает было сингулярное разложение но есть ещ такой конкурент называется преобразование вот оно получше просто чем СВД делает это и ну оно там но сингулярное разложение можно было бы для сжатия изображения использовать без всяких проблем то есть исходную картинку вот не так хранить Да а с так с таким количеством пикселей а центральная матрица по

картинку вот не так хранить Да а с так с таким количеством пикселей а центральная матрица по факту Она же вся из нулей поэтому компьютер-то и возвращает просто сингулярные числа говорит Ну что зачем память вам тратить и это способ в случае с картинками компрессии изображений вот а теперь понял но ещё это можно использовать для понижения размерности сейчас мы дойдём дальше У меня вопрос Вот мы сжимаем по сути количество вобще типа ну вот высота типа картинки о остаётся той же да получается с

сжимаем по сути количество вобще типа ну вот высота типа картинки о остаётся той же да получается с используем берём какой-то кусочек но как остальные мы видим заполняются вот эти пропущенные клетки или типа пиксели как они заполняются одинаково количество одинаково просто они значение немножко другое стали занимать потому что они восстанавливаются по гораздо меньшему количеству данных по гораздо меньшему Ну то есть вот вот эти три матри они существенно меньше чем вот эти три матри нут у них

меньшему Ну то есть вот вот эти три матри они существенно меньше чем вот эти три матри нут у них имеет одинаковую размерность Угу Поэтому просто как бы вот эти пиксели они чуть-чуть отклоняются от этих пикселей и поэтому выглядит так что правое изображение оно чучуть хуже чем левое Но количество пикселей одинаковое То есть то что ты говоришь это называется интерполяция по-моему интерполяция изображений это когда я не знаю беру картинку на У меня есть и мы её растягиваем с вами в два раза да Угу

это когда я не знаю беру картинку на У меня есть и мы её растягиваем с вами в два раза да Угу к пикселе должно стать в четыре раза больше в 2 квадрат потому что я растянул по двум размерное системы встроенные они заполняют эти пиксели По математическому правилу здесь количество пикселей осталось одинаковым что слева что Справа просто правые пиксели они немножко другие по значению так как восстанавливаются не по полной матрице то А вот если они восстанавливаются не по полной матрице они откуда

не по полной матрице то А вот если они восстанавливаются не по полной матрице они откуда типа значение берут Вот вот матрицы три матрицы Вот они вот здесь которые есть угу вот которые вот эти три матрицы умножаются вот эти они просто отличаются Ну смотрите вот а а исходный он Ю си V эти матрицы имеют вот такие размерности где я там писал вот где ял 666 666000 А здесь матри имеют разме 660 5050 понимаешь сколько мы информацию урезали то есть чисел меньше внутри поэтому результат хуже он хуже в

сколько мы информацию урезали то есть чисел меньше внутри поэтому результат хуже он хуже в плане красоты но выигрывает миллионы других ресурсов Да Дима я правильно понимаю что нам это понадобится для машинного обучени и что от размера этих матриц зависит архитектура сет меньше нейронов быст Ну как вариант да Как вариант Но вы на самом деле с СВД столкнетесь не в контексте картинок просто на картинках лучше всего воспринимается Это пёстро красиво выглядит Чем сухие числа на самом деле СВД более

лучше всего воспринимается Это пёстро красиво выглядит Чем сухие числа на самом деле СВД более применим в рекомендательных системах и в текстах вот там популярны особенно в текстах СВД вме с пуще через неделю на четвёртой неделе на последней неделе нашей базы и С и сегодня сейчас я ещё запущу чуть ниже его а там получается что эти три матрицы будут подаваться Ну раздельно да для обучения или как Нет там немного иначе Блин я наверное не буду вам это рассказывать просто потому что это ни к чему

Нет там немного иначе Блин я наверное не буду вам это рассказывать просто потому что это ни к чему там тяжёлая математика Внутри там происходят некоторые е виды изменения я вам лу сейчас покажу пример просто и всё так будет лучше сильно глубоко туда не стоит лезть потому что сингуляр я сам его даже не до конца понимаю внутри именно математику Да потому что она действительно очень сложная и она её ни к чему знать совершенно про сингулярное разложение надо знать что он раскладывает и понижает

её ни к чему знать совершенно про сингулярное разложение надо знать что он раскладывает и понижает размерность вот что самое главное что нужно знать Серёжа давай тго вопрос или у тебя нет уже вопроса Да я забил На самом деле я пытался понять что именно мы уем урезаем в фотографии у меня была теория что типа у нас был пиксель от Ну 255 А мы всё типа усредни у нас диапазон стал меньше типа Чёрное не такой Чёрное белое не такой белой но я уже забил есть 10 ше на 10 ше хранилище это очень большое

не такой Чёрное белое не такой белой но я уже забил есть 10 ше на 10 ше хранилище это очень большое число 101 Правильно Согласен вот 10 далее мы с тобой ЕС его понизит будет иметь размерность какую 10 ещ раз одинако с квадрат надо не на квадратный матриц провести какой-нибудь пример а 1000 Ну давай 1 понижения матриц понял просто если остатся такое же количество пикселей то по идее у на пиксе обдает меньшим количеством информации чем раньше и по идее у нас просто ну типа у него более

пиксе обдает меньшим количеством информации чем раньше и по идее у нас просто ну типа у него более усреднённый [музыка] данные это не фигня потому что я могу не выкидывать Все сингулярные числа я их могу хранить понимаешь в упакованном виде в ужа Том и соответственно Я всегда смогу откатить изображение в обратную сторону я понимаю я просто Ладно я уже запутал Мне кажется то же самое что что и пост спрашивал о части за счёт чего у нас тут сжатия как я понял мы типа усреднённый ПП ти чёрный прям

спрашивал о части за счёт чего у нас тут сжатия как я понял мы типа усреднённый ПП ти чёрный прям чёрный белый прям белый а тут всё такое типа средненько блк и как будто бы меньше данных на пикселе становится Ну это моя теория Всё я уже как буд данных на пикселе становится Ну да данных на пикселе меньше становится просто как бы пиксели немножко тепер разнятся если правильный пиксель 10 то этот 12 может быть здесь пиксель 8 то этот се и вот это вот как бы так Брит немного понял давайте посмотрим

может быть здесь пиксель 8 то этот се и вот это вот как бы так Брит немного понял давайте посмотрим Дима ты руку забыл опустить ли у тебя ещё вопрос Нет у меня просто как раз к тому что Сергей говорит Просто насколько я понимаю что если брать именно как картинку то там как бы уменьшение данных нет По сравнению с исходной картинкой если брать промежуточные значения то есть эти три матрицы то как раз когда если их подавать вот там как раз идт уменьшение тут идёт выигрыш если обрабатывать именно

раз когда если их подавать вот там как раз идт уменьшение тут идёт выигрыш если обрабатывать именно эти три матрицы да дадада там какими не сетевыми технологиями с комте Ания выход то Одинаковый да но я хочу вам донести мысль что на самом деле слева и справа код всё равно Понимаете вот если сфокусироваться на том что я вижу кота и слева и справа Значит я не потерял эту информацию правильно только при этом я сократил на 7% то есть условно если бы сложность алгоритма была о отн это значит То что

при этом я сократил на 7% то есть условно если бы сложность алгоритма была о отн это значит То что бы занимало бы у меня 100 суток теперь занимать будет семь суток при том что ну что слева код что справа код это наш мозг с вами перфекционист считает что мы что-то теряем справа Конечно мы что-то теряем Но что-то приобретаем то что мы приобретаем скорость уменьшение данных существенное и так далее вот это как бы мозг не хочет наш принимать Но это так и есть то есть посмотрите сколько здесь

далее вот это как бы мозг не хочет наш принимать Но это так и есть то есть посмотрите сколько здесь пикселей вот Посчитайте сколько здесь пикселей надо хранить и Посчитайте сколько здесь пикселей надо хранить и вы ощутите разницу вот здесь у меня смотрите Ну 50 на 1000 это 50.000 всё остальное на самом деле относительно 50 сся ну ладно 2500 52500 и ещё что около около 30.000 около 80.000 пикселей теперь считаем здесь 80.000 пикселей 80.000 пикселей здесь только вот это даёт миллион пикселей уже

теперь считаем здесь 80.000 пикселей 80.000 пикселей здесь только вот это даёт миллион пикселей уже только вот это даёт миллион пикселей вот эта Матрица Блин не знаю сколько Ну много поменьше ми Дат е и есть Уде ляма з 8000 пикселей это то что вот серже те начал рисовать когда говорил Представь 10 соответственно если бы как бы мне нужна была какая-то обработка в более простом варианте Конечно бы я бы тянулся сюда Если бы у меня нейронная сеть например как следствие Если бы у меня нейронная сеть

бы тянулся сюда Если бы у меня нейронная сеть например как следствие Если бы у меня нейронная сеть позволяла отличить кошку на правой картинке так Я бы лучше бы приня пользователя эту картинку как-то бы понизил и в НТМ виде бы в нейронную сеть Во сколько раз Ну Посчитайте Оцените это даже при сложность алгоритма разница 3 мл де на 80.000 колоссальная разница А если сложится алгоритма от ква Ну это будет просто подавляющий домина поэтому Надеюсь я сейчас поподробнее раскрыл вопрос нормально

это будет просто подавляющий домина поэтому Надеюсь я сейчас поподробнее раскрыл вопрос нормально просто должно ложи А с картинками с с картинками на картинках просто лучше на самом деле всего видно но также можно запустить на всём чём угодно вот у нас есть там norf наш вот этот смотрите Да Normal fal Вот что я могу сделать Он есть в элёр метод СВД который занимается именно усечения мне нужно подгрузить его и подать количество компонент всё вот вот у меня где он лежит лежит там же где pca Но

его и подать количество компонент всё вот вот у меня где он лежит лежит там же где pca Но они в принципе два братишки друг с другом оба линейным образом понижают размерность просто у СВД есть некоторые плюсы относительно Пис Ну всё соответственно Давайте создадим СВ и скажем что мы понижаем размерность до одной компоненты Это я напоминаю буду ещ разделать вот для вот этого датасета Всё я его создаю точно также делаю Fit transform вот этих вот данных Вот и могу это указать normaliz DF svd более

точно также делаю Fit transform вот этих вот данных Вот и могу это указать normaliz DF svd более того можно вывести Здесь explained variant по-моему есть такой или нету Есть explain что-то поменяли здесь да Вот он есть Прим сингулярные числа там можно вытащить А я не к тому обращаюсь надо Мне у самого распределения всё 50% сохранено но они на Таких данных работают одинаково когда СВ занимается именно учением если мне память не изменяет матри U которая имеет размерность M нам а потом он берёт

именно учением если мне память не изменяет матри U которая имеет размерность M нам а потом он берёт матрицу он берёт матрицу матрицу Сигма матрицу Сигма M на N и матрицу VN на N и по-моему по-моему м он берёт Вот вы сказали понижает до одной размерности он берёт топк сингулярных чисел то есть берёт эту Матрицу на и схлопывается с первой что ли каким-то образом агрегирующие разложение так работает сингулярное разложение но чаще всего Оно используется в текстах Почему Потому что в текстах словари

сингулярное разложение но чаще всего Оно используется в текстах Почему Потому что в текстах словари как правило огромные пространства большие и там очень много нулей мы поймём эту специфику и именно СВД любит больше всего нулевые матрицы это называется разряженные матрицы матрицы содержащие матрицы в которых много нулей Так что вот СВ на самом деле Хоть я вам здесь показал с текстом и с кошкой то биш с картинкой с табличными данными и с картинкой чаще его Конечно можно увидеть в тексте но мы

то биш с картинкой с табличными данными и с картинкой чаще его Конечно можно увидеть в тексте но мы ещё текст не проходили с вами Да за вас задание будет с этим [музыка] связано вопросы какие есть так хорошо Тогда Тогда Тогда давайте по поводу ваших заданий сегодня по поводу ваших заданий [музыка] сегодня что вам нужно сегодня будет сделать Вам нужно будет А собственно говоря первое задание будет на пис и второе на СВД первое Ну попробовать PC тут вот датасет у меня приведён Да он в принципе в

на пис и второе на СВД первое Ну попробовать PC тут вот датасет у меня приведён Да он в принципе в папке лежит и здесь приведён как угодно забирайте тут Ну это реальная выборка в зависимость роста и веса человека как вы понимаете что это мультиколлинеарности вот далее Далее собственно говоря второ зание понизить для вашего датасета с циам и посмотреть сколько ну то есть проверить на мультиколлинеарность если например у Серёжи было 13 столбцов и он 95% там или 90% информации сохранил оставив се

если например у Серёжи было 13 столбцов и он 95% там или 90% информации сохранил оставив се столбцов то можно утверждать что как бы было шесть столбцов пустышек Ну не то что пустышек они как бы приносят практически не приносят новая информации Понятно Вот то есть Попробуйте Пойте Ну и коне зание второе на св Здесь вам нужно будет потренироваться и и и и вс что весь контекст короче выберите случайную картинку чтобы попробовать А вообще нужно реализовать сервис будет куда бы я мог подать вам

картинку чтобы попробовать А вообще нужно реализовать сервис будет куда бы я мог подать вам изображение А вы собственно говоря мне вернёте результат работы сингулярное разложения зде подробно описа Ну кто сделает трей этоже как бы добивать нам пай просто закрепление здесь про нампа про статистику базовые вещи 10 по-моему задачек Да 10 задачек на именно Нам сам всё потому что больше у вас Прямо именно Нам ради нампа не получится порешать Так что Пользуйтесь моментом вот такой вот план на сегодня

Нам ради нампа не получится порешать Так что Пользуйтесь моментом вот такой вот план на сегодня Похоже как будто на 2 дня работы возможно кажется Ну всё зависит от вас у меня конечно есть мат ожидания того сколько будет сделано заданий в среднем Вы тоже выбор из какого-то распределений поэтому е ожидание количество сделанных заказов у меня оно есть но я его озвучивать не буду так что делайте делайте делайте минимум надо постараться успеть СВД сделать и сделать стрим Так что Советую не тянуть

делайте минимум надо постараться успеть СВД сделать и сделать стрим Так что Советую не тянуть отдохнуть ить работе потому что это как бы не Тем не прямо тема сегодняшнего дня это больше для тех кто сделал чтобы не скучать и тренировать нам пай а вот именно PC svd надо сделать надо сделать [музыка] вот Ну что тогда будем заканчивать Всё Давайте на связи хорошего дня и Если будут вопросы записываемся пока-пока Спасибо Y

mit Доброе утро всем чева Сан Привет Привет Как как оно готовность хорошая а вот ви Тишина у ваем радостно так Сегодня у нас с вами на повестке дня на повестке дня матанализ а Конкретно в частности не так много из него Нам нужно будет из него нужно будет производные градиенты В общем собственно го вокруг этого построить сегодняшний день итак пойдём от меньшего к большему производная функции когда-то вы это слышали все точно потому что школьная тема Да кто-то Наверно это ещё в институте слышал

вы это слышали все точно потому что школьная тема Да кто-то Наверно это ещё в институте слышал поглубже Ну в общем производ то есть проговори что это с точки зрения с точки зрения Ну словами Да скажем так математически и графически если просто характеризовать словами то производная - это скорость изменения функции в данной точке Может быть вы из физики помните что например производная скорости - это что ускорение Да ускорение потому что ускорение показывает Как меняется скорость да то есть

- это что ускорение Да ускорение потому что ускорение показывает Как меняется скорость да то есть ускорение - это индикатор изменения скорости а скорость изменения пути во времени на физических примерах лучше всего видно то есть Самое важно понимать что да Это какая-то оцифрованная история нашего изменения В текущей координате в которой мы находимся это будет нам очень очень очень важно в дальнейшем чтобы правильно кое-что там делать Вот теперь давайте что сде вавож составляющий смотрите А как

чтобы правильно кое-что там делать Вот теперь давайте что сде вавож составляющий смотрите А как посчитать эту вообще скорость изменения функции по-хорошему то есть вот есть вот есть какая-то функция предположим Да ну вот какая-нибудь вот такая функция И вот я нахожусь в какой-то некой точке x0 То есть это вот вот это у меня как бы ось X Да У этой точки x0 есть значение функции f0 Как посчитать скорость изменения это графиче ЕС так просто словесно рассуждать даже графика не было я нахожусь

скорость изменения это графиче ЕС так просто словесно рассуждать даже графика не было я нахожусь какойто точке Как посчитать скорость фн по минимально да взять какую-то Дельту взять КАТО в любой истории в жизни Если бы я хотел посмотреть Как что-то меняется или оценить насколько сильно я бы взял две координаты и смотрел какую-то разницу между этими вещами Вот соответственно f от x0 п дель X f от x0 Вот такая история мы посмотрим эту разницу то есть f от x0 п дель X ми f от x0 То есть это то

от x0 Вот такая история мы посмотрим эту разницу то есть f от x0 п дель X ми f от x0 То есть это то Насколько изменилась функция но ещё принято ещё принято есть мы же хотим с вами ответить вопрос а Как оцифровать скорость изменения функции принято ещ нормировать это на на дельта X то есть вот на вот эту вот это расстояние скажем так да типа как бы изменения относительно отрезка в знаменателе Обратите внимание x0 сокращается Остаётся только Дельта X вот тено оди вопро Оле у тебя подсказка есть

внимание x0 сокращается Остаётся только Дельта X вот тено оди вопро Оле у тебя подсказка есть стремящийся к нулю да то есть как бы следующего числа как такового мы не знаем особенно во времени да которое не прорывной шкалой идёт и типа как бы мы будем брать две точки одна точка - Это как бы вот буквально прямо в прямом смысле следующая Точка Но так как математике это невозможно обозначить это называют что де X стремится к нулю то есть вот это вот это вот это расстояние оно Сколь угодно малое

что де X стремится к нулю то есть вот это вот это вот это расстояние оно Сколь угодно малое Сколь угодно малое и вс то есть мы пишем придел при дель стремящемся к нулю вот этого выражени это и есть производная функции обозначается на чёрточкой вот такой вот добавляется Это математическая История это математическая интерпретация производной очень понятно формула очень объяснима и как бы сама логика производной дифференцирования много Где используется Ну и последняя история Вот например смотрите

производной дифференцирования много Где используется Ну и последняя история Вот например смотрите вот вот возьму я вот эту точку и вот эту точку Пусть это будет точка X1 В какой точке Как вы думаете производная больше x0 0 почему Ну превращении функции больше а ну хотя [музыка] тут логично вообще из того что наклон касательный больше можно сказать можно сказать что там При таком же превращении будет больше превращение функции да то есть визуально видно что вот здесь как как ракета взлетаем То

больше превращение функции да то есть визуально видно что вот здесь как как ракета взлетаем То есть как будто бы быстрее возраста чем здесь и геометрическая оцифровка этой истории есть это касательная провен к точке вот Кате здесь у на вами такая здесь Кате у меня какая-то короче вы поняли какая-то Вот такая и вот этот уголок есть вот здесь вот я его назову Альфа Здесь тоже Альфа вот считается что тангенс угла наклона касательной тангенс альфа это значение тоже значение производно в точке x0 то

тангенс угла наклона касательной тангенс альфа это значение тоже значение производно в точке x0 то есть вот так геометри можно выть самом бы показывает да показывает насколько сильно мы насколько сильно мы растём так хорошо А что тогда мне скажете смотрите вот возьмём другую функцию например секунду возьмём возьмём какую-нибудь вот такую функцию вот какую-нибудь вот такую Что можете сказать даже не такую сейчас вот такую функцию Ну какую-нибудь вот такую Что можете сказать про вот эту точку что

такую сейчас вот такую функцию Ну какую-нибудь вот такую Что можете сказать про вот эту точку что здесь производной отте Да отрицательно потому что мы все как бы точнее мы летим с вами вниз все это ощущают то есть касательно вниз мы как бы на убывании лежим что можно сказать про вот эту производную Вот в этой точке ам бы низ ямки производная равна нулю Потому что считается что когда у нас переход производная равна нулю у нас нет изменения То есть получается что производная служит индикатором

производная равна нулю у нас нет изменения То есть получается что производная служит индикатором возрастания убывания функции Да когда функция у нас убывает производная имеет знак минус когда функция возрастает производная имеет знак плюс очень важно и этим знанием пользуются все нейронные сети когда обучаются Да потому что это подсказывает им Как менять веса и так далее так так так так так А ну в принципе всё здесь я проговорил здесь это расписано Но это ровным счётом то что я здесь зарисовал

в принципе всё здесь я проговорил здесь это расписано Но это ровным счётом то что я здесь зарисовал и сказал про касательную Да так что мы с вами пойдём дальше Вот ещё рисунок касательный с другой стороны всё то что мы с вами проговорили вот а ну производная она привязывается к какой-то математической функции Да и есть так называемые Элементарная производная которая строится на элементарных функциях элементарных функций на самом деле не так много это вот стандартно из школы типа возвести число

элементарных функций на самом деле не так много это вот стандартно из школы типа возвести число в степень да [музыка] Или как бы вот как в обратную сторону назвать типа какая-то Константа в степени вот этого изменяемого нашего числа да то показательный закон вот степенной закон там экспоненциальный Закон есть логарифмирования синусы косинусы тангенсы есть корень на самом деле их ещё чуть больше этих функций но как бы Мы остановимся вот здесь просто укажем вот такие так вот так вот вот вот такая

функций но как бы Мы остановимся вот здесь просто укажем вот такие так вот так вот вот вот такая вот история за эти производные за вас взяты благо Вам их брать не придётся и запоминать это вообще совершенно не нужно всегда сможете просто посмотреть Если вдруг такая необходимость будет нужна будет нужна вот так Ну давайте не хотя нет пока рано свойства производных конечно как бы как я вам вчера говорил или позавчера даже нейронные сети это на самом деле тупо сплошная цепочка функциональных

говорил или позавчера даже нейронные сети это на самом деле тупо сплошная цепочка функциональных преобразований вот просто всё больше меньше вот меньше и как бы сложность Ну текущая архитектура они как бы не состоят из одного логарифмирования Да они состоят из множества преобразований поэтому внутри у нас могут образовываться сложные конструкции например сумма двух функций производная суммы равна сумме производных производная разности равна разности производ с произведением чуть посложнее дем

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

я проговаривать это не буду всегда как бы можете посмотреть это в случае если одна функция делится на другую как про производ так небольшой небольшой тогда к вам вопрос вот есть функция например lnx п cos x Чему равна производная вот такой функции су о плю минус синус Да производная логарифма тако производная логарифма 1 есть 1 производ косинуса это минус синус то есть мину sin x Всё теперь я бы например хотел понять Как это функция себя ведёт в какой-то точке возрастает убывает или что-то ещё

например хотел понять Как это функция себя ведёт в какой-то точке возрастает убывает или что-то ещё мне достаточно было поставить производную посмотреть знак Это было бы ответом А как-то так как-то так какие здесь вопросы есть по первому по первому свойству ложили думаю что всё предельно понятно идём дальше более частый случай - это производная сложной функции производно сложной функции сейчас мы с вами проговори что это такое на самом деле у многих это путаницу вызывает Но это достаточно

мы с вами проговори что это такое на самом деле у многих это путаницу вызывает Но это достаточно простая штука достаточно простая штука а её просто надо как бы уловить и понять смотрите вот Представьте как бы вот у меня вот вот в этом примере вот в этом примере если нарисовать Граф А как бы библиотека pch которая будет нейронные сети вам программировать она такой граф рисует вы просто ну вы его можете визуализировать называется Граф вычислений В каком-то смысле В каком-то смысле вот в данном

можете визуализировать называется Граф вычислений В каком-то смысле В каком-то смысле вот в данном примере что у меня есть у меня есть раз вход два вход То есть у меня вот этот X заходит сначала в логарифм Да здесь заходит в косинус Ну дальше у меня там идёт какая-то операция сложение и результат верно Вот А а что если к одному иксу как бы будет ну то есть тут два два отдельных входа а что если как бы к к одной и той же как бы к одному и тому же входу Да данных будет применено несколько

если как бы к к одной и той же как бы к одному и тому же входу Да данных будет применено несколько функциональных преобразований например Y рано не lnx п cos x а ln от косинуса x может же такое быть Вполне себе тогда как бы если зарисовать цепочку если зарисовать цепочку она выглядит следующим образом приходит такой X Да сначала его встречает косинус функция косинуса дальше этот cos X идт дальше И здесь уже его встречает логарифм Ну и на выходе получается Y забегая вперёд не просто так всё это

И здесь уже его встречает логарифм Ну и на выходе получается Y забегая вперёд не просто так всё это рисую То есть это можно было бы назвать неровной сетью или чем-то ещё то есть какие-то функциональные преобразования которые X как-то делают им так вот если стоит вопрос чтобы взять производную Y штрих равно Тогда Тогда Тогда что нужно сделать Уно сколько у вас функциональных преобразований столько умножений в данном случае У меня два блока две коробки функциональных преобразований То есть у меня

умножений в данном случае У меня два блока две коробки функциональных преобразований То есть у меня будет два множителя первый и второй как правило Ну справа налево берут поэтому я также и сделаю производная логарифма вот смотрите мы с вами знаем что производная логарифма она ра 1 но в общем виде на самом деле не так ЕС производ 1 в общем виде правильнее сказать что производная логарифма от того что внутри равно 1 делить на то что внутри Понятно Можно даже написать но это грубо как бы

от того что внутри равно 1 делить на то что внутри Понятно Можно даже написать но это грубо как бы математики Меня бы сейчас били По рукам Но мы с вами как бы опустим этот момент Можно даже написать Вот так производ Лори от функции функцию вот так вот понятно отлично получается что тогда давайте в моём случае в моём случае вот у этого множителя да Или у логарифма у этой функции чему будет равна производная 1 делить на cos x Абсолютно верно 1 / cos x я так быстро стёр потому что штрих нужно было

1 делить на cos x Абсолютно верно 1 / cos x я так быстро стёр потому что штрих нужно было над логарифмом поставить а не на FX чего не обращайте внимание простом нет штрих надо ставить сюда сюда ставится степень Итак А у первого блока мы взяли с вами теперь есть второй блок косинус производная косинуса Чему равно у нас да можно посмотреть в таблице минус сину вот минус синус X А раз она равна ми sin x то как бы нам надо умножать на минус синус по факту того что внутри но у нас внутри косинуса x

x то как бы нам надо умножать на минус синус по факту того что внутри но у нас внутри косинуса x поэтому мину сину X вот так вот верно всё производная взята то есть её тут можно красиво преобразовывать это на самом деле тангенс образовался синус дели на косинус но как бы это меня совершенно не интересует то есть главное что мы вот саму логику уловили Как это работает вот здесь вот ровно то что я проговорил и проделал расписано на более сложном мат языке Но всё что нужно понять это что есть вот

проговорил и проделал расписано на более сложном мат языке Но всё что нужно понять это что есть вот эти блоки как бы по каждому нужно взять производную и производная берётся от того что приходит Как бы на вход вовнутрь этого блока то есть в логарифм приходит косинус А в косинус приходит X Поэтому вот всё получилось вот так Так ну что ж Давайте потренируемся Y ра Давайте вот здесь вот вместе с вами посчитаем ещё один пример суперпозиции это про что и я честно говоря не помню что такое

с вами посчитаем ещё один пример суперпозиции это про что и я честно говоря не помню что такое суперпозиции принципе или не знаю так в общем смотрите берём производную у функции T x ква Давайте сначала также засукавши этот X приходит в какую-то преобразование что сначала с этим иксом происходит возводится в квадрат да возводится в квадрат Абсолютно верно получается что вот образуется вот этот X ква да Ну и дальше Вот этот X ква идёт и здесь уже встречает нас с вами тангенс танген от x ква и

X ква да Ну и дальше Вот этот X ква идёт и здесь уже встречает нас с вами тангенс танген от x ква и выходит Y получается что опять же производ у нас будет состоять из двух частей Давайте тогда первая первая часть надо взять производную тангенс залазить в табличку и видим что производная тангенса 1 де косинус квадрат производная тангенса от того что внутри равно 1 деть на косинус квадрат того что внутри Так значит что будет а один на к X 1 де на косинус квадрат от x к Абсолютно верно Вот именно

внутри Так значит что будет а один на к X 1 де на косинус квадрат от x к Абсолютно верно Вот именно так и никак иначе то есть здесь сам косинус квадрата - это из-за производной а внутри тангенса так как был X ква то он сюда собственно говоря встаёт Вот теперь Второй член Второй член Давайте будем точечно посчитаем с кем-нибудь Давайте соли посчитаем вот этот взяли Теперь у 2x Абсолютно верно производная потому что у нас с вами x в степени N я проговаривать это для всех она равна N у x в Степе N

потому что у нас с вами x в степени N я проговаривать это для всех она равна N у x в Степе N - 1 или иначе говоря если здесь двоечка двойка встала сюда а степень на оди меньше то есть 2x по самае известна из школы производно типа X ква 2 супер взяли получили выражение которая у нас с вами есть теперь небольшая тренировочка небольшая тренировочка М давайте давайте Какую из этих функций выберем одну посчитаем Ладно давайте может давайте начнём с этой так А давайте у вас 3 минутки есть

выберем одну посчитаем Ладно давайте может давайте начнём с этой так А давайте у вас 3 минутки есть самостоятельно посчитать потом будем вместе считать и я только не помню производную рек тангенса Может кто-нибудь её загугли в принципе могу это сделать Я Угу производных таблица производных производная арктангенса вот производная арктангенса у нас 1 де 1 + X к я это сюда подпишу Чтобы у вас было на глазах всё все остальные производные есть в табличке вот тут выше у себя презу тоже открываете Всё

глазах всё все остальные производные есть в табличке вот тут выше у себя презу тоже открываете Всё Давайте время пошло ещё пойдём о о так Ну что потихоньку будем начинать потихоньку будем начинать значит посмотрим судьбу одного икса так X входные данные начинают идти первое действие Какое сксом у нас с вами Какая какое функциональное преобразование всё возведение в степень 3 возведение в степень 3 вот оно X хорошо дальше ку идёт Что происходит с ку Да верно арктангенс в квадрате Нет мы по

3 вот оно X хорошо дальше ку идёт Что происходит с ку Да верно арктангенс в квадрате Нет мы по порядку действуем сначала просто Анге функция арктангенса и здесь уже у нас идт AR X X Вот и дальше Вот этот нку что у нас происходит с ним возведение Да два Всё то есть на самом деле три действия вот эту запись кому так неудобно видеть кто особо с математикой раньше не сталкивался она вот такая НГ X и всё это возводится в квадрат вот так вот то есть вот эта Двойка это значит что сам AR возводится а

всё это возводится в квадрат вот так вот то есть вот эта Двойка это значит что сам AR возводится а тройка - это значит То что внутри арктангенса возводится вот пупупупупу да ну на выходе короче Y Всё Давайте брать производную Чему равна производная поехали идём отсюда а будем действовать по порядку Давайте первый член возьмём с Сашей ээ 2 у 1 / 1 + X к ты взял сразу же производную и этого блока и этого двух функциональных преобразований нужно тебе только вот два два арктангенса и куб Да 2 у

и этого двух функциональных преобразований нужно тебе только вот два два арктангенса и куб Да 2 у arct x ку Абсолютно верно Вот для тех кто немножко параллель не провёл то есть смотрите наше что-то возводится в квадрат правильно наша функция Вот производная X ква уже сегодня говори 2 на самом деле можно сказать что что-то возведённое в квадрат его производная равна два таких чего-то правильно Вот именно у степенной функции производная берётся по такому закону возведения в степени поэтому мы

Вот именно у степенной функции производная берётся по такому закону возведения в степени поэтому мы взяли Вот хорошо с этим разобрались Теперь берм у центрального это арктангенс Угу Так оно берётся от ку значит вот формула выше у тебя написано Анге раве 1 де 1 П x ква но X у нас уже в кубе поэтому мы берём X вку и в степени 2 - это X вшей степени Абсолютно верно Ну я пока оставлю вот так чтобы всем было наглядно видно что происходит да то есть всё собственно говоря мы взяли ещё и у этого блока

было наглядно видно что происходит да то есть всё собственно говоря мы взяли ещё и у этого блока Отлично Теперь остаётся у последнего блока взять Бул давай с тобой а последний 3X ВК это проста Да потому что у нас x+ да остаётся здесь x+ у производной X - это 3X к Вот вы таго мы взяли Сначала с вами Вот вот этого производную потом вот у этого потом у этого и всё получилось у нас прекрасно Так ну и ещё раз проделаем чтобы все немножко попробовали и поупа Вот такая у нас функция есть Давайте

ну и ещё раз проделаем чтобы все немножко попробовали и поупа Вот такая у нас функция есть Давайте приходит такой X Да приходит X что с ним начинает происходить Какое первое преобразование корень отлично корень выходит ре дальше этот корень из идт Какое следующее преобразование синус иго сину дальше что у нас идт следующим действием допустим просто косинус да та есть то есть следующие это косинус тут не допустим тут строго косинус косинус синуса Вот такая сложная конструкция дальше дальше

тут не допустим тут строго косинус косинус синуса Вот такая сложная конструкция дальше дальше дальше что у нас с вами Это куда Всё дело идёт верно Так я сюда запишу То есть это уже косинус квадрат от синуса Ко Вот так вот и всё это идёт в последнюю нашу с вами функцию [музыка] да все все все знают что такое Ларин н н да это число Лера возведённая в э степени да Не ну вообще с логарифмирование все знакомы Если надо я быстренько расскажу там всё быстро ещё бы было неплохо вспомнить себе Вот

все знакомы Если надо я быстренько расскажу там всё быстро ещё бы было неплохо вспомнить себе Вот смотрите вот смотрите д ко нужно разве вот смотрите Давайте 2 в степени x равно че Чему равен X двум двум Ну в принципе визуально видно Да всё понятно что ЕС 2 в степени ра чему ра по основанию 2 Отт да то есть получается что ну как бы мы не знаем такого числа пря Да чтобы вот ровно из двойки получить тройку но оно существует называется иррациональные числа как коп не извлекающие кор короче и мы бы

тройку но оно существует называется иррациональные числа как коп не извлекающие кор короче и мы бы в данном случае указали что это Лори вот кольцом таким замыкается Тогда быстренький вопрос логарифм 81 по основанию 3 чему ра ка степень нужно возвести 3 чтобы получить 81 этон ра по основанию E логарифм X по основанию E его принято называть lnx или натуральный логарифм вообще как бы в дата Science отождествления там часто данных и там в принципе как бы отождествлять я взял логарифм это всегда

отождествления там часто данных и там в принципе как бы отождествлять я взял логарифм это всегда подразумевает именно вот этот логарифм натуральный е - это одна из математических констант которая равна примерно равна 2,71 это вот как бы три их константы Да главные P E и Тау а можно узнать Где используется логарифмирование данных везде на следующем не деле узна Ну просто как фи Ирин как преобразование данных логарифмирования используется так А давайте тогда давайте тогда брать производную Да

данных логарифмирования используется так А давайте тогда давайте тогда брать производную Да также ишт идм с конца в начало Давайте первый блок Серёжа Давай с тобой Серёжа Кудинов так это по ln мы фига чем Угу Ну это 1 косинус ква сину √ X да 1 / коси ква синуса √ X Почему так потому что производная логарифма она у нас с вами как бы 1 / X А в роли икса вот эта фигня идёт Да вовнутрь логарифма хорошо взяли Отлично Так теперь давайте второй блок Давайте с Костей это квадрат возведения да да

хорошо взяли Отлично Так теперь давайте второй блок Давайте с Костей это квадрат возведения да да получается мы как бы вот это взяли Дада Всё тогда это 2 косинус от си отлично 2 коси от сину прекрасно хорошо Взяли у этой функции буду помечать теперь идём к третьему блоку Давайте третий блок Давайте снастей производная Косинус - это синус просто или что да производная косинус минус синус по-моему Тут я как раз спрашиваю про это минус или плюс минус Ну тогда минус синус от сейчас минус синус в

Тут я как раз спрашиваю про это минус или плюс минус Ну тогда минус синус от сейчас минус синус в скобках сину ре да да Абсолютно верно минус синус от синуса потому что внутри вот этого косинуса У нас сину вот он сюда собственно говоря переместился тепер уже и у этого функционального преобразования тоже всё взяли и идём дальше Давайте дальше с Серёжей чернышовым Так у нас получается синус Так значит коси Да абсолютно потому что на очереди был синус Да вот он производная синус - это косинус от

коси Да абсолютно потому что на очереди был синус Да вот он производная синус - это косинус от того что внутри косинус х хорошо так и последняя блок последний блок Давайте последний Блок Мы с кем есть кого я ещё вообще сегодня не трогал или спрашивал Дима Дима Да производная от корня Ну едини де на 2x Угу Абсолютно верно Да тоже взяты из таблицы всё вот мы собрали производную как бы конечно это за вас будет делать пач но вот он будет делать именно такое именно такие преобразования и это будет

за вас будет делать пач но вот он будет делать именно такое именно такие преобразования и это будет очень важным очень важным инструментом в обучении в обучении любого Ну большинства алгоритмов большинства так Какие вопросы здесь есть понятно как примерно берётся производная супер супер так ну здесь вот ещё немножко других функций которые уже более прикладные Так у меня из VP уехала картинка есть такая функция которая называется сигмоида Я её зарисуй сюда вот так вот функция сигмоида Сигма от x

такая функция которая называется сигмоида Я её зарисуй сюда вот так вот функция сигмоида Сигма от x вот эта функция имеет вот такой вид вот такой рисую это одна из короче очень популярных функций в анализе данных смотрите если мы подставляем большое большой большой X что у нас Чему равно выражение будет единиц Да ну Постав сюда бесконечность вот это уходит в ноль Да Е в минус бесконечности остаётся единица А что если мы подставим с вами сюда наоборот минус бесконечность Да теперь это становится

единица А что если мы подставим с вами сюда наоборот минус бесконечность Да теперь это становится е в степени бесконечной знаменатель становятся Огромно большим и мы становимся нулевыми и ещё есть отдельная точка А что если x равен нулю вот сюда если ноль поставить чему Мы равно п 0,5 1/2 действительно вот как бы вот на этом уровне значит будет 1/2 Примерно вот так вот Вот так вот чем эта функция удобна тем что она отрезок от минус бесконечности до п бесконечности перекладывают в отрезок от

удобна тем что она отрезок от минус бесконечности до п бесконечности перекладывают в отрезок от нуля до одного что очень удобно интерпретировать Как вероятности и Помните я вам по-моему в понедельник рисовал типа кошечку предсказывали там кошечка была Аля кошечка нарисована мы с вами говорили что она 8х 8 Что это значит как бы 64 вот 64 входа было да помните это всё дело тут у нас были три нейрончик где каждый там в каждый уходил и так далее потом ВС это уходило в один Нейрон и выход А вот кто

где каждый там в каждый уходил и так далее потом ВС это уходило в один Нейрон и выход А вот кто гарантировал что Выход будет типа я уже говорил что на выходе на ждёт вероятность то М гарантировал что как бы Нерона сеть будет возвращать от минус от нуля до оного так вот мы сами это сделаем вот сюда как быт звание вы это ВС будете обсуждать Да с Пашей Ну кстати смо мы уже Ладно с вами столкнётся и на этой неделе Но я так больше вам стараюсь выстроить мост вашем мышлении Да что это не какие-то

и на этой неделе Но я так больше вам стараюсь выстроить мост вашем мышлении Да что это не какие-то простые Циферки поиграться они имеют абсолютно прикладной характер в построени архитек неровных поя фун Давайте попробуем Взять её производную вместе с вами Сигма ' от x что скажете можно сказать то что это 1 + I в - X в мину перво степени Да можно так записать согласен 1 + e в степени - x в степени -1 Ну что ж Давайте производную брать Ну внешняя функция у нас какая Вот эта правильно производная

-1 Ну что ж Давайте производную брать Ну внешняя функция у нас какая Вот эта правильно производная от минус первой степени Чему равно минус этой эта штука в минус второй Да минус единиц выносится вперёд а степень становится на один меньше да то есть -1 у 1 + e в степени - x и всё это в степени -2 Вот так вот хорошо умножить теперь надо брать производную того что внутри производная того что внутри у нас Чему равна Ну во-первых производная суммы равна сумме производных правильно я скобочки значит

у нас Чему равна Ну во-первых производная суммы равна сумме производных правильно я скобочки значит открою производная единиц Чему равна нулю Да как и любой константы а производная е в степени Мих Чему равно ми e в степени ми в степени ми будет е в степени ми но вы кое ещ забываете надо производную ми взять Вот так производная ми ра ми1 всё вот вот этот момент что-то непонятен с минус единий Ну когда ты берёшь производную е в степени ми X тебе надо взять производную e в степени ми X ещё

Ну когда ты берёшь производную е в степени ми X тебе надо взять производную e в степени ми X ещё производную числителя ой числите производную степени а производная Мих равна ми1 То есть тут два их два два шага Да да да любое образование к иксу в том числе до множе на ми1 считается функциональным преобразованием которого нужно взять производную То есть ты просто два шага в один слил как бы ну да да тогда понятно если это будет другое умножение не внутри этой скобки тогда понятно нет но внутри

да тогда понятно если это будет другое умножение не внутри этой скобки тогда понятно нет но внутри этой скобки почему вот именно здесь оно идёт вот производная вот этого су Вот это производная вот этого А вот это производная внешней степени вот этой всё очень в принципе логично да Как раз таки если снаружи поставить было бы неправильно ну здесь это бы не поменяло сути только из-за того что как бы вот по факту ноль то есть вот этого всего нету минус на минус даёт плюс если посмотреть что у нас

вот по факту ноль то есть вот этого всего нету минус на минус даёт плюс если посмотреть что у нас ми остатся е в степени ми Да а вот эту обратно в знаменатель закинем 1 П e в степени ми X квадра вот так Если есть какие-то вопросы Я просто на каких-то базовых вещах не останавливаюсь типа возведение в степень может кто-то не знает что такое отрицательная степень вы не стесняйтесь спрашивайте А ты мог бы нарисовать график Вот этот по очерёдной квадратиками для вот этого варианта понятно было Ну то

бы нарисовать график Вот этот по очерёдной квадратиками для вот этого варианта понятно было Ну то есть заходит X выходит [музыка] Спасибо заходит X ну по факту здесь до умножени на константу да ну поставим это -1 просто дальше идёт - x верно дальше идёт - X к нему применяется экспонента получается е в степени е в степени - x Ну и тут ещё вот так рисуют что видите у нас есть вспомогательный вход единичка и вот это ВС Вещь Вот эта вещь идт дальше и здесь возведение в степень ми1 вот и получается

и вот это ВС Вещь Вот эта вещь идт дальше и здесь возведение в степень ми1 вот и получается уже выход выход нашей функции Вот так и Ну да в принципе Пато только этим занимается пото что это сложно реализовать Когда пойдёт он будет знать Ага здесь вот производную вот этого беру Даше она умножается на производную этого Ага здесь это производ су производ производная этой ветки производная этой ветки Ну благо здесь производна нулю но в целом это очень красивая процедура Мне она нравится так

ветки Ну благо здесь производна нулю но в целом это очень красивая процедура Мне она нравится так последний минус оди мы всё-таки на него не как бы ты на него то что умножил внутри или или на него ещё нужно до умножить эту скобку и сделать последний шаг умножить на минус О это всё какой мину О вот этот что ли там же 2 ми1 Ну вот этот ми о относится к этот первый понятно что он да отсюда а вот этот ми о относится к вот этому Вот А тебя в это в этой Ну в Ветке первый шаг Минус один он здесь Ну по

ми о относится к вот этому Вот А тебя в это в этой Ну в Ветке первый шаг Минус один он здесь Ну по идее нет Вот я пошёл с конца Вот я взял раз дальше Мне нужно умножить на производную А я вижу что здесь сумма стоит производна сума у на суме производных То есть мне нужно взять Вот эту производную вот она и вот эту производную Вот она и целиком я умножаю ну кому неудобно блоками воспринимать информацию а удобно воспринимать вот так как в школе учили то Окей кому удобно блоками может воспринимать

а удобно воспринимать вот так как в школе учили то Окей кому удобно блоками может воспринимать блочную информацию просто блоками Я думаю что вы многие видите впервые эту информацию и Ну за секунду Может уложиться в голове но ничего страшного в этом совершенно нет взяли производ Примерно засова как это происходит А как удобнее писать эти блоки слева направо Выходя изнутри наружу или снаружи справа налево входя снаружи внутрь а первая часть какая была ну то есть вот или с Иса идти до Ире Удобно

налево входя снаружи внутрь а первая часть какая была ну то есть вот или с Иса идти до Ире Удобно или с и до Иса Ну мне всегда было я помню с школьных лет было с Ирека до икса удобно но кому-то удобно как бы слева направо идти но нейронные сети когда берут производную за вас это они идут и это называется или обратно распространение ошибки нейронных сетей когда берутся производные когда берутся производные Да лю у меня тупой вопрос Почему когда мы раскручиваем вот это вот эти преобразования Да

Да лю у меня тупой вопрос Почему когда мы раскручиваем вот это вот эти преобразования Да от последнего к перво Почему мы всё ножа Ну вот так вот математику устроена нажать вот как бы можешь открыть учебник мата анализа посмотреть вот там есть я знаю насколько знаю вывод вот этой формулы почему это умножается вот почему типа производно сложной функции именно идёт цепочка умножения я не помню почему и беру Это просто как данные в данном случае конкретно в данном случае Так ну что ж вот небольшую

и беру Это просто как данные в данном случае конкретно в данном случае Так ну что ж вот небольшую трениро с вами провели рисовали И на самом деле вот ко всему то что здесь происходит относитесь немного медитативного не придётся много делать это нужно для базы то что вот нам нужно будет на самом деле это будет вторая часть лекции А тут мы просто обрастаем контекстом немножечко вспоминаем Как устроено производное что-то узнаём какие-то сигмой ды существуют Ага блоками что-то пресова вспоминали

производное что-то узнаём какие-то сигмой ды существуют Ага блоками что-то пресова вспоминали самые базовые производные То есть тут нет такого вот что там судорожно что-то не восприняли всё типа конец света вообще нет как бы это такая история это контекст контекст того что будет дальше Ну для сигмоида Ну вот собственно горя мы с вами такую производную получили оказывается что вот эту конструкцию можно через саму же сигмой выразить то есть вот вот эта дробь это вот такая умножить на оди мину

можно через саму же сигмой выразить то есть вот вот эта дробь это вот такая умножить на оди мину такая это используют в коде больше ну просто так в коде вам это понадобится кстати ещё сре И что бы я ещё хотел сказать в обозначение производной вы можете увидеть не только штрих А вот такое когда будете читать какую-нибудь литературу статьи или что-то ещё то есть вот это D си от x по DX То есть это называется взять производную у сигмы по переменной DX полный эквивалент того что записано здесь Кто

называется взять производную у сигмы по переменной DX полный эквивалент того что записано здесь Кто хочет как бы убедиться в этом может посмотреть вот вот сюда в принципе всё у нас с вами остаётся самая главная история самая главная история то ради чего мы сегодня здесь с вами собрались это градиентный спуск и Давайте перед этим сделаем с вами небольшой перерыв сейчас у нас с вами минут в 17 будем продолжать всё перерыв Так ну что давайте возвращаться А Или мы в 7 минут да заканчивали что-то я

продолжать всё перерыв Так ну что давайте возвращаться А Или мы в 7 минут да заканчивали что-то я вас поторопился так Ну теперь точно возвращаемся вопросы Может какие появились знаешь есть да говори да Антон ты там Я потерял твою мысль когда ты начал говорить про Я потерял что ты именно сказал то сказал Вы его будете отдельно обсуждать это просто название того как бы в контексте нейронных сетей когда берётся производная справа налево счита не я просто где-то читал что вот это когда не считаются

берётся производная справа налево счита не я просто где-то читал что вот это когда не считаются все производные на следующем шаге ещё раз а просто запоминаются предыдущие результаты или вот тоже само или вот [музыка] не это взяти ну взяти производное грубо говоря в обратную сторону то есть и Иса направо справо у нас справо налево У всех это именно взяти производ так так так Ну что Давайте продолжать Ну что ж градиентный спуск градиентный спуск сейчас будем много рисовать и собирать целостную

Ну что ж градиентный спуск градиентный спуск сейчас будем много рисовать и собирать целостную картину поехали Давайте возьмём какую-нибудь функцию возьмём какую-нибудь функцию Например А так что это у меня такое че сечас [музыка] секунду Угу смотрите я возьму функцию И назову её L от Омега равную Омега квадрат Ну предположим вот захотел Я его так назвать или даже Давайте не Омега квадрат Давайте ВОМ 2 оме к вот так вот такую функцию смотрите в школе мы с вами привыкли и вообще как бы такая ация

2 оме к вот так вот такую функцию смотрите в школе мы с вами привыкли и вообще как бы такая ация проводится что часто под функциями подразумевают x x и как бы FX Да как функциональное преобразование мы с вами часто будем работать немножко по другой в другой парадигме вами будет какой-то алгоритм можно его назвать Как бы нейронная сеть она будет выплёвывать наш какой-то Y э это Y то что как бы результат нейронной сети Да это вот то что вы вы пишете чату gpt Напиши мне то-то она вам что-то

бы результат нейронной сети Да это вот то что вы вы пишете чату gpt Напиши мне то-то она вам что-то возвращает это вот та же самая парадигма та же самая парадигма как мы с вами проговаривать нейронная сеть зависит от каких-то весов то есть здесь будут какие-то веса омега-1 там и так далее ну короче от каких-то весов она зависит эти веса мы будем настраивать во время обучения А в чём заключается обучение обучение заключается в том что есть то что мы предсказываем то что возвращает Народная сеть

обучение заключается в том что есть то что мы предсказываем то что возвращает Народная сеть и есть то что реально Y и мы хороши будем с вами когда когда предсказанное будет совпадать к реальному там где кошка мы говорим кошка там где собака мы говорим собака там где Клиент купил Он действительно купил там где не купил там он не купил там где текст положительный мы говорим положительный Да там где цена дома 100.000 руб мы говорим что 100.000 руб то есть хорошее попадание такое достаточно поэтому

цена дома 100.000 руб мы говорим что 100.000 руб то есть хорошее попадание такое достаточно поэтому часто это называют а oss функцией Вот здесь она считается всё это мы будем обсуждать завтра Сейчас я просто хочу вам через вот такой рисунок донести что мы будем работать в парадигме не FX а L Омега это называютс функцией или функция ошибок или функции потерь это будет оцифровка какая-то оцифровка того насколько мы ошибаемся насколько мы ошибаемся Единственное что мы здесь можем менять - это наши

насколько мы ошибаемся насколько мы ошибаемся Единственное что мы здесь можем менять - это наши Омега это как нейроны в вашей голове да то есть в каком-то смысле мы их постоянно с вами обновляем новые связи формируем тут то же самое мы будем пытаться подобрать оптимальный Омега так чтобы меньше ошибаться конечно всё зависит от того На каких данных мы учим есть такое понятие А типа Garbage in Garbage Out Да если мусор на входе то мусор на выходе будет Ну мы будем считать что мы собрали хорошую

Out Да если мусор на входе то мусор на выходе будет Ну мы будем считать что мы собрали хорошую репрезентативной всё классно всё супер вот это вот Омега вот это вот Омега это то что мы действительно будем настраивать поэтому часто будет терминология именно такая L от Омега и Наша задача с вами минимизировать данную функцию минимизировать по параметрам Омега вот немножко контекста из дата Санса А сейчас мы с вами переместимся сугубо в математическую задачку понятна моя мысль здесь что я имею в

сейчас мы с вами переместимся сугубо в математическую задачку понятна моя мысль здесь что я имею в виду отлично даже если не понятно ничего страшного как бы это просто с этим надо немножко Повари Ладно я пока это оставлю может ещё пригодится Да Костя говори что всё на что мы тут можем влиять это Омега но в Мом понимании Мы также можем влиять и на на NN то есть на нейрону сеть а именно на сами функции которые мы используем для нашей модели то есть по факту мы и на L Омега тоже можем влиять в

функции которые мы используем для нашей модели то есть по факту мы и на L Омега тоже можем влиять в этой ситуации Ну как бы потому что L Омега как бы и есть функция которая это делает не Омега Лос функция она она имеет чёткую формулу Ну например как отклонилась реальная цена дома от предсказано цены вот а вот под этой предсказано ценой дома кроется уже це архитектура и функциональное преобразование о которых ты говоришь Угу Вот Но мы будем считать что мы взяли детерминирован ную какую-то

о которых ты говоришь Угу Вот Но мы будем считать что мы взяли детерминирован ную какую-то архитектуру потому что это неку сегодняшнего нашего дня но так ты абсолютно правильно заметил что как бы здесь может быть простая инфузория туфелька Да скажем так очень простая архитектура А может быть что-то такое очень-очень-очень сложное то есть там gpt модели Ну они имеют очень сложную архитектуру внутри Да какая-нибудь Линейная или Логистическая регрессия которую мы будем завтра послезавтра Они имеют

Да какая-нибудь Линейная или Логистическая регрессия которую мы будем завтра послезавтра Они имеют очень тривиальные архитектуры внутри но они И те и другие работают по одному и тому же принципу обучаются по одному и тому же принципу градиентного спуска просто как бы Линейная модель как инз туфелька она вот всё только прямой линии может а нейронные сети могли бы что-нибудь сложно там вычленять в силу своей архитектуры Да но мы считаем сейчас что какая-то детерминированная архитектура внутри

в силу своей архитектуры Да но мы считаем сейчас что какая-то детерминированная архитектура внутри единственное количество весо им-то менять и так далее То есть фиксированы входные данные фиксирована архитектура единственное что как бы мы будем обучать это менять наши веса поэтому ещё раз терминология привыкайте к ней вы её будете видеть очень часто L от Омега L от Омега Всё теперь немножечко возвращаемся к математической постановке задачи к математической постановке задачи Мне нужно

возвращаемся к математической постановке задачи к математической постановке задачи Мне нужно минимизировать мою loss функцию подобрав оптимальный Омега все провели параллель То есть мне нужно настроить веса так чтобы я как можно меньше ошибался ведь это звучит очень даже логично Правда мы люди по похожему принципу обучаемся по похожему принципу обучаемся с чем-то знакомимся и в конце концов стараемся чтобы наш там Лос в каких-то наших историях Ну был минимален да насколько это возможно мы это

чтобы наш там Лос в каких-то наших историях Ну был минимален да насколько это возможно мы это через ошибки делаем конечно но в конце концов стараемся как доводить свою экспертность там если касается рабочих задач до А до каких-то вещей чтобы ошибаться меньше Итак как это можно сделать первое решение очень простое это называется аналитическое решение Вот отде его Если мы с вами возьмём производную во-первых Чему равна производная от Омега В данном случае у нас с вами 4 Омега Абсолютно верно 4

во-первых Чему равна производная от Омега В данном случае у нас с вами 4 Омега Абсолютно верно 4 Омега А пупу мы с вами в начале говорили когда производная положительная функция что делает возрастает возрастает когда функция когда производная отрицательная функция убывает и когда производная у нас равна нулю то функция не Ну да типа того Типа того Не возрастает не убывает Вот и как В таких ситуациях делают мы с вами найдём найдём найдём точку в которой производная равна нулю чтобы точку

ситуациях делают мы с вами найдём найдём найдём точку в которой производная равна нулю чтобы точку перелома найти то есть 4 Омега при равне к нулю это происходит при Омега равном нулю забыл я только кое-что нарисовать знаете как сейчас сделаем я забыл нарисовать график хотел график нарисовать но забыл график нам пригодится как график у этой функции выглядит помните такую функцию Парабола растянутая по иреку Да это пара Ну то есть возьмём 0 0 так возьмём но но далее если мы возьмём один то это

по иреку Да это пара Ну то есть возьмём 0 0 так возьмём но но далее если мы возьмём один то это два будет да раз д здесь минус оди Ну и короче какая-то она вот куда-то туда там улетает не суть сейчас важно но школьный школьный график пораду Вот м теперь продолжаем у нас при Омега равном нулю происходит перелом и вот отображает Вот такую вот штуку ти ставит Омега как прямую линию но и говорят вот здесь будет снизу у нас поведение самой функции предположим а сверху её производной и там где

вот здесь будет снизу у нас поведение самой функции предположим а сверху её производной и там где производная положительная функция возрастает Мы это с вами проговорили там где производная отрицательная она убывает а производная у нас с вами омельно люри оме поставить меньше ну согласны А если любой положительный Омега подставить то производная будет больше нуля в принципе вот этот макет который мы с вами зарисовать ровным счётом мы его видим на графике как бы всё выполняется Да такое шаблони

мы с вами зарисовать ровным счётом мы его видим на графике как бы всё выполняется Да такое шаблони но к сожалению к сожалению анализ данных занимается гораздо более более сложными конструкциями и графики нарисовать у нас возможности не будет пространства будут Ну например триллион ме М мы-то четырёхмерное не знаем а тут триллион мерное да И поэтому вот такое как бы возможности визуализировать к сожалению не будет Мы будем идти только за счёт как бы наших знаний О производной там о математике и

не будет Мы будем идти только за счёт как бы наших знаний О производной там о математике и всё вот в данном случае какая точка была бы у нас с вами При какой Омега у нас Лос мини в Ну в Тома как по графику видно что только здесь можно быть и вот вот вот она эта точка Всё соответственно Наш ответ был бы Омега равно нулю это как бы наш такой глобальный минимум Да глобальный минимум именно там функция принимает минимальное значения это аналитическое решение к сожалению когда данные становятся

принимает минимальное значения это аналитическое решение к сожалению когда данные становятся порядком больше И когда переменных становится порядком больше аналитическое решение становится недоступным в силу своей сложности тогда как бы как всегда и происходит заменой аналитическому приходит эмпирическая да то есть мы будем это делать Просто ну эмпирически исходя из наших наблюдений потихоньку щупа щупа щупа что происходит вот так теперь я эту схему убираю Ладно ещ снизу ещё в одном месте У вас

щупа щупа что происходит вот так теперь я эту схему убираю Ладно ещ снизу ещё в одном месте У вас могут возникнуть вопросы поехали Так что мне нужно будет мне нужно будет Давайте я подпишу что это аналитическое решение аналитическое А вот это будет эмпирическое эмпирическое решение эмпирическое решение это есть Ари градиентного спуска для него Мне нуж будет производная само минимизируем то есть ничего не меняется поэтому производная равна 4 Омега мы с вами сыграем в очень простую игру А давайте

не меняется поэтому производная равна 4 Омега мы с вами сыграем в очень простую игру А давайте мы как бы с вами где-то начнём Ну например я начну вот здесь где-нибудь то есть возьму какой-то Омега то есть вот это два я могу взять три да три это где-то там высоко у меня ну где-то есть там эта точка и я начну отсюда и потихоньку буду топать топать в какую-то сторону как мы вот знаете как человек в горах идёт и ему хочется спуститься вниз он потихоньку Шаг за шагом выискивают маршрут как туда

в горах идёт и ему хочется спуститься вниз он потихоньку Шаг за шагом выискивают маршрут как туда спуститься Вот мы с вами точно также сделаем мы возьмём стартовую точку Омега 0 равную Т Теперь какие у вас есть идеи Представьте что графика нет А есть только математика Потому что так оно и будет какие у вас есть идеи о том чтобы правильным образом дела движение в нужную сторону в данном случае нужна нужная сторона для меня это налево да в сторону нуля Вот какие у вас есть идеи Понятно на мой

нужна нужная сторона для меня это налево да в сторону нуля Вот какие у вас есть идеи Понятно на мой вопрос Это сейчас у нас есть подсказка в виде графика потом её не будет и нам сейчас нужно математическая история чтобы это потом закодировать а запрограммировать Да чтобы она в общем виде работала на уровне математики так чтобы двигалась Ну по возможности в правильную сторону Ну на знать наверное размер шага типа Ну давай пока не суть размеры шага Сначала со стороной надо разобраться взять

размер шага типа Ну давай пока не суть размеры шага Сначала со стороной надо разобраться взять производную понять возрастает или бывает функция Вообще так это Ага подставить наш Омега В функцию производной получил положительное значение понял что функция возрастающая значит минимум будет ГТО слева нам надо двигаться в левую сторону то есть в сторону уменьшения Омега да да да Верно верно молодцы так в общем виде эта формула выглядит следующим образом Омега и плюс перво То есть каждый новый шаг А

в общем виде эта формула выглядит следующим образом Омега и плюс перво То есть каждый новый шаг А мы напоминаю будем с вами обновляться это то где Я сейчас стою Омега ИТ Вот мы сейчас с вами как бы в плане в горах если было бы то мы с вами где-то Вот здесь сейчас стоим Да вот у нас координата какая-то вот я сечас здесь троечка Минус Я сначала запишу формулу потом мы всё обсудим здесь действительно Теперь если когда первый шаг вы Короче ладно здесь сначала запишем производную в точке в которой я

Теперь если когда первый шаг вы Короче ладно здесь сначала запишем производную в точке в которой я сейчас нахожусь Да это мой компас он мне подскажет влево идти или вправо и ещё то что Саша сказал есть такое понятие шаг обучения шаг обучения ну его где-то лямбдой обозначают где-то альфой дальше мы его там будем в коде Learning Create называть пока что пусть будет лямбда этот лямбда говорит А вообще говоря Ну насколько сильно шагать Я же могу так шагать А могу шагать вот так правильно А могу

говоря Ну насколько сильно шагать Я же могу так шагать А могу шагать вот так правильно А могу вообще вот так шагнуть случайно вот как бы вот этот коэффициент за это отвечает Теперь давайте перевариваем эту формулу лямбда лямбда его называют ещё раз Learning Rate и с этим вы будете сталкиваться вообще на протяжении всего обучения в Эльбрусе потому что как бы нейронные сеть обучаются все обучаются И lear вы его его задаёт человек сам это как правило положительная не как правило это всегда

И lear вы его его задаёт человек сам это как правило положительная не как правило это всегда положительная Константа Ну я её поставлю 01 она у меня будет 0м то есть вот это как бы это наша текущая положение А вот это в каком-то смысле на дельта Омега я так подпишу да то есть это ки есть то на что мы сдвинемся с вами влево вправо где вот это размер нашего шага А вот это в первую очередь наш компас который подскажет направление влево или вправо ведь действительно когда я нахожусь в этой точке Я

который подскажет направление влево или вправо ведь действительно когда я нахожусь в этой точке Я обращаюсь к своему компасу к своей производной и говорю А подскажи мне где я Для этого мне нужно вот эту троечку подставить вот сюда в свою производную правильно производ поется положительно мне говорят что я на возрастании нахожусь Значит у меня здесь что-то положительное здесь всегда положительное если я вычитают двинусь В какую [музыка] сторону влево потому что я число уменьшил сыграли бы

если я вычитают двинусь В какую [музыка] сторону влево потому что я число уменьшил сыграли бы сыграем в обратную сторону а я находился я Пошёл отсюда а Кост пошёл с другой стороны он находился здесь на уровне ми1 тогда Кост бы да кося тоже здесь находится кося спросил бы у производной А что мне подскажешь для этого нужно подставить вот эту ми1 правильно сюда производная получила бы отрицательный знак значит плюс минус вот этот минус Дат на вот этот минус даёт плюс Значит мы что-то прибавляем а

знак значит плюс минус вот этот минус Дат на вот этот минус даёт плюс Значит мы что-то прибавляем а когда мы что-то прибавляем мы Априори двигаемся В какую сторону вправо всем ли понятно что я гор или кому-то непонятно загадочно молчите просто всё кайф понятно хорошо Круто Так вот эта формула это и есть в принципе формула которая лежит в сердце обучения всего то есть по ней обучали и в том числе Ну с разными настройками но обучали всякие gpt модели являтся исключением покани придуманы ци новый

Ну с разными настройками но обучали всякие gpt модели являтся исключением покани придуманы ци новый какой-то система обучения да э формула немножко настраивают Но вот мы с вами буквально разобрали то почему всё в принципе работает процесс обучения Давайте попробуем с вами обновить один шаг даже не один предположим я беру Омега 1 беру Омега 1 С кем посчитаем следующую точку Вот мы сейчас с вами находимся в три и нам надо делать шаг Давайте посчитаем с Оле Так значит получается нам а мы следующий

в три и нам надо делать шаг Давайте посчитаем с Оле Так значит получается нам а мы следующий шаг не знаем мы его делали это у нас 0 А да там где мы сейчас находимся А я не знаю Давай давай прямо формулу подставлять вот мы считаем Омега 1 значит здесь тебе нужно Омега 0 Омега 0 - это Стар тогда 3 - 0 у на производную в точке Три Угу а производная в точке Т 3 на 4 это что ли да получается да да да всё верно 12 12 Итого так и получается 1,2 3 - 1,2 Угу 2,8 и вот сейчас вот это вот я не очень

да всё верно 12 12 Итого так и получается 1,2 3 - 1,2 Угу 2,8 и вот сейчас вот это вот я не очень понимаю да Угу 1,8 Да и нам теперь Значит мы получили плюс если мы получили плюс то куда же нам идти а нам мы уже сделали шаг мы уже сделали шаг мы находились здесь ещё раз вот нам надо идти сда и мы с тобой сейчас шагнули вот примерно вот сюда в 1.8 кто нам в этом помог производна которую ты посчитала 12 да ну и шаг с ко А вот то что в какую сторону считать это было бы вот это минус лямбда вот это

12 да ну и шаг с ко А вот то что в какую сторону считать это было бы вот это минус лямбда вот это вот если бы я получила отрицательное число пода пота поняла те комбинация вот этого минуса и производной работа всегда пойдёшь в правильную сторону всё поняла производная положительна ты вычитали производная отрицательна ты складываешь уходишь вправо здесь Е роль просто типа насколько сильна а Наша задача вот сечас с этими шагами узнать где минимум вот этой функции чтобы был ну мы на практике Ну

задача вот сечас с этими шагами узнать где минимум вот этой функции чтобы был ну мы на практике Ну как бы эмпирическое решение ровно нуль не даст как правило Ну около нуля около нуля Ага всё поняла Угу Да был а получается аналитическое решение мгновенное почувствую а эмпирическое требует времени Да это аналитическое мгновенное здесь когда одна переменная когда их миллиард оно не то чтобы не мгновенно Оно просто невозможно то есть никто ещё не делал такого чтобы на миллиард значений было

мгновенно Оно просто невозможно то есть никто ещё не делал такого чтобы на миллиард значений было аналитическое Нет ну всё толубай короче Тебе задание есть кстати вот все все видеокарты все видеокарты вот которые сейчас в N видео все покупают все покупают тупо для того чтобы как раз-таки обновлять вот эти веса то есть самая главная информационна Ну нагрузка - это обучение моделей обучение модели вот всё обучение сводится к тому чтобы подобрать оптимальный набор Омега или иначе говоря прийти

вот всё обучение сводится к тому чтобы подобрать оптимальный набор Омега или иначе говоря прийти сюда и для этого вот как бы все всем нужны видеокарты сейчас то есть это эмпирическое решение оче сложно аналитического вообще невозможно но оно возможно в теории но как бы там в принципе по-моему сколько-то миллиардов лет надо потратить Это что такое буже ситуация когда мы типа вообще до нуля не дойдём Да ну в плане даже близко будем езна вот выде ГВ в иллюзию вте что это не значит что Ладно потом

Да ну в плане даже близко будем езна вот выде ГВ в иллюзию вте что это не значит что Ладно потом дам комментарии короче ты ты прав толубай Да это не факт что мы туда дойдём Не факт что мы туда дойдём Ну что ж одну точку Обновили Давайте попробуем Омега 2 с кем-то с Не факт что дойдём это про глобальная версия с локальный минимум или это что другое Так а может же ещё функция быть которая имеет минимум не в нуле Да да да Вы абсолютно правы что мне тут остаётся сказать в конце проговори по поводу

не в нуле Да да да Вы абсолютно правы что мне тут остаётся сказать в конце проговори по поводу того о несовершенстве этого алгоритма и как с этим бору пока что давайте просто иде проговори до конца Да так вы в принципе все всё в точку говорите все всё в точку Ну что я бы сейчас хотел Может кто-то как бы хочет кто не до конца понял как это или не всем понимает вместе сейчас эту точку посчитать не стес я понимаю я понимаю но могу посчитать Давай давай ну что 1,8 ми 0.1 у на как там вид функции 2

стес я понимаю я понимаю но могу посчитать Давай давай ну что 1,8 ми 0.1 у на как там вид функции 2 к Да вид функции у нас функция Да но нам не функция то есть производная а производная 4 то есть 4 у на что там а Господи бем Что производ кай абсолютно Ну 72 получается да 72 вот ну и там что-то типа 1.08 Давайте округли короче примерно один поставлю то есть мы примерно с вами сюда попали уже как вам такое нормально Да в принципе ша полпути 66 про пути преодолели Ну в общем и вот по такой логике

такое нормально Да в принципе ша полпути 66 про пути преодолели Ну в общем и вот по такой логике мы пойдём Пойдём пойдём Если кто-то хочет ещё одну точечку можем посчитать А можно спросить а вот а если мы перепрыгнет это уже беда тут надо будет что-то думать мы смотрела Мы так раз и вот так большой шаг и потом раз так и прыгнули ноль Да да да я всё это в конце про комментирую и у вас сегодня задание будет с этим связано вопрос хорошие по существу с этим надо бороться Проблемы такие существуют

будет с этим связано вопрос хорошие по существу с этим надо бороться Проблемы такие существуют сейчас весь алгоритм здесь до конца закончим и потом о контексте поговорим и о проблемах этого агори Так ладно давайте ещё одну точку посчитаем ещё одну точку посчитаем Ну кто хочет что прямо все все всё поняли я могу попробовать Давай о получается ми 0 получается типа че Умно наче Угу и 06 да то есть мы уже куда-нибудь сюда попали с вами 06 то есть наш человечек здесь мы почти спустились теперь

мы уже куда-нибудь сюда попали с вами 06 то есть наш человечек здесь мы почти спустились теперь теперь точки посчитано вопрос вопрос У меня такой А когда останавливаться то есть мы с вами научили компьютер мы научили компьютер правильно двигаться А когда останавливаться то есть вот он крутится в этом цикле работает где его тормозить Ну когда шаг становится прям совсем совсем небольшим уходит До какого значения Мелкого не меняем пока что здесь ко Ноча например Мы передвинули сначала на там 1,2

какого значения Мелкого не меняем пока что здесь ко Ноча например Мы передвинули сначала на там 1,2 потом на 0,8 потом 0,4 когда вот это передвижение совсем маленьким можно завязывать не нас же интересует лизация функции то есть Нам нужно просто в этих точках вычислять функцию и смотреть когда она будет минимально я бы сказал ну до тех пор пока V ИТ П 1 не станет больше нет вру не больше А по модулю больше чем Ну короче я понял ты имеешь в виду когда шагнули не в ту сторону перегнули перегнули

больше чем Ну короче я понял ты имеешь в виду когда шагнули не в ту сторону перегнули перегнули начали увеличиваться по модулю Да все ваши между собой связа между собой связано то что вот озвучили но бы в коде Да и в самом градиенте исполь то одна она названа само фу производная то есть вот мы ищем там где получается но как я поняла ну чтобы меньше было потери Вот мы сейчас шагаем чтобы найти вот этот вот Но вот это да я по этому графику смотрю Да нужно понимать что даже ча gpt ошибается и у

этот вот Но вот это да я по этому графику смотрю Да нужно понимать что даже ча gpt ошибается и у него не равен нулю и это нормально имет нуло если зада более серьёз ло надо минимизировать это у меня конкретно в этом рисунке он оказался нулевым производная полос производная полос когда равна нулю Ну как бы её минимизировать нет смысла наш компас Конечно можно сказать что там где производна равна нулю значит мы как бы попали в ямку И это хорошо ность в локаль минимум есть невже точ пово то что

нулю значит мы как бы попали в ямку И это хорошо ность в локаль минимум есть невже точ пово то что Сержа сказали их мысль Ну в принципе я так понял близка смотреть Вот вот за вот этим шагом и как-то попробовать его контроле типа я также имеешь в виду что слишком маленький то пора останавливаться а ко сделал акцент на том что если перепрыгивание произошло да то надо останавливаться вот ну перепрыгивание это тут как бы только вот относительно Ну ес симметри будет формула сработает немножко

это тут как бы только вот относительно Ну ес симметри будет формула сработает немножко неточная формула там у сержи может быть изза вот изза изза твоя история Может остановиться и мы застрянем самы правильно сказал Дима мы минимизируем функцию это есть правильная история А мы минимизируем функцию Так давайте за этим будем следить и вот смотрите вот у меня Лос функция это то ради чего мы здесь сегодня собрались да Много контекст Но на самом деле как бы Для чего нужен и чтобы как бы что-то

сегодня собрались да Много контекст Но на самом деле как бы Для чего нужен и чтобы как бы что-то автоматизировать а какой и хороши тот который мало ошибается вот эти будет мало интересовать мы ВС рано нифига не понимаем в этих весах их миллиарды А мы будем понимать результат то есть то насколько он ошибается и мы хотим чтобы ошибка была как можно меньше правильно Поэтому вот здесь вот ну давайте я назову это 0 или Ну даву типа от оме потом у нас с вами был то есть это L от Омега 1 потом у нас

я назову это 0 или Ну даву типа от оме потом у нас с вами был то есть это L от Омега 1 потом у нас см упе наш Лос падает правильно то есть вот это расстояние это то насколько мы стали умнее и как бы Теперь мы с вами будем работать по следующей парадигме будет критерий станова и будет ещё один гипер параметр который называют часто или это то поставлю его пока мы стали умней будет меньше чем этот то мы останавливаемся то есть то когда я умней Ну когда я грубо говоря перестал становиться умнее

то мы останавливаемся то есть то когда я умней Ну когда я грубо говоря перестал становиться умнее Тогда я буду останавливаться потому что это часто ставит очень маленьким не 0 А например 0 давайте так и поставим то есть 0 всё и можно посчитать Давайте посчитаем на вот этой как он считается есть мне нужно взять разницу оме Омега 0 очень логично Да это было моё интеллектуальное развитие стало моё интеллектуальное развитие проверяем смотрим эту Дельту её смотрят по модулю и сравнивают с эпм

моё интеллектуальное развитие проверяем смотрим эту Дельту её смотрят по модулю и сравнивают с эпм Давайте её посчитаем сколько она у нас с вами равна в нашем случае 1 ид 1 и 2 - Это где я вообще не вижу уже ответ 1 ид а ответ да 3 - Давай давай тогда чтобы все поняли по порядку что что чему Вот равно вот этот член и как посчитала изначально а я по картинке смотрю изначально на было три мы на тройке стояли потом мы получили 1,8 3 - 1,8 1,2 Ну смотри Мы же договорились не по этой оси только что

стояли потом мы получили 1,8 3 - 1,8 1,2 Ну смотри Мы же договорились не по этой оси только что я проговорил а а а да точно правильно сам смотреть поэтому мне нужно вычислить вычислить именно ось Y сдаюсь тогда сечас Не ну как ты Как по вот этим значениям как по вот этому значению получить Вот это значение А где смотреть в какую функцию подставлять Подождите Вот где-то она здесь нарисована а а вот вот это вот нормально да Обычно значит тогда тройку 3 к Дада Абсолютно верно в саму функцию 18

вот вот это вот нормально да Обычно значит тогда тройку 3 к Дада Абсолютно верно в саму функцию 18 тогда 18 мину Угу 1,8 подставляем только у нас 18 здесь наоборот получается Ну это пофигу на самом деле каком порядке да давай 1,8 подставлять 1,8 в квадра умножить над Угу 1,8 сколько 300 не сколько 177к - это по-моему 280 324 если мне память не изменяет Ну не суть пусть будет 324 3 зап да 3 за 24 получается Умно на 2 648 Угу Итого сколько у нас разница получилось до фига правильно 11 это

за 24 получается Умно на 2 648 Угу Итого сколько у нас разница получилось до фига правильно 11 это существенно ещё больше чем Вот мой си Поэтому в данном случае как бы брейка не происходит происходит продолжение нашей игры мы переходим к следующему этапу собственно говоря тоже самое здесь считаем по такой же Фор Ну кстати 648 Теперь сюда уйдёт Да можно не считать теперь предыдущая точка Это является 648 согласны а новая точка У нас стала единичка для неё чему Лос функция будет равна давайте

648 согласны а новая точка У нас стала единичка для неё чему Лос функция будет равна давайте давайте Люба так для какой точки для V2 Да так для V2 значит что значение надо вот это чтобы посчитать Лос функцию мы должны взять от неё от V2 значит [музыка] ту производную то есть 1 4 у 1 4 Да правильно Уно на 1 вообще можно ещ раз мне задачу поставить ямно те нужно посчитать L от Омега 2 то есть твоя ошибка в точке Омега 2 Ага а так L от Омега 2 а так ну это Лос функция ну четыре четыре а где четыре

в точке Омега 2 Ага а так L от Омега 2 а так ну это Лос функция ну четыре четыре а где четыре ты берётся я не понимаю Вот у тебя Лос функция Вот же она у тебя Ты в производную подставляешь этой функции А да ой всё 2 у на Ну два короче Да будет двойка Итого 448 но опять же собственно говоря меньше не выполняется поэтому мы поэтому мы тоже здесь будем продолжать Ну в общем это будет продолжаться до тех пор пока мы не заскочим в эту Дельту То есть когда наро будет совсем маленький и Мы надеемся

до тех пор пока мы не заскочим в эту Дельту То есть когда наро будет совсем маленький и Мы надеемся что это произойдёт где-то уже очень близко к нулю еват точность кото мым получить Результат есть ти минимум с погрешностью это очень условно но как бы можно так выразиться Да ну чем ближе мы идём к нулю тем больше тем меньше шаг чем больше шагов нужно сделать тем больше нужно сравнить получается чем ближе тебе цели тем больше ней ходить поем тем уже начинаем быть аккурат Ну так оно и происходит

ближе тебе цели тем больше ней ходить поем тем уже начинаем быть аккурат Ну так оно и происходит да первые шаги достаточно уверенные а потом Ну у вас так и будет тоже когда какая-нибудь неровная сеть обучается у неё сначала точность модели Сначала она глупенькая пере Траса 30% потом Бау 50 потом 70 потом 75 потом 80 потом 82 82 и 6 83 и1 то есть понял будет аккуратненько так уже подбираться к цели Так что это нормальная парадигма это насчёт сравнивание с си всегда строго меньше будет или можно

Так что это нормальная парадигма это насчёт сравнивание с си всегда строго меньше будет или можно равно тоже Ну это такой на самом деле практический нюанс типа тут речь идёт о тысячных хочешь меньше ставь хочешь меньше либо равно это как бы капля в море понял то есть это вообще капля в море вот в контексте этих задач полу ты 29 29 Мало кого это будет интересовать гдето это важно но здесь это конечно поэтому даже не знаю са точно наверно меньше я так предполагаю Да лю вот скажи вот ты сказал что

поэтому даже не знаю са точно наверно меньше я так предполагаю Да лю вот скажи вот ты сказал что для подбора весов даже виде оптимизационные алгоритмы для подбора Ну что мы видим вот ты сейчас сам привёл пример что сначала у нас эти разницы растут существенно потом не существенно то есть допустим пока разница большая мы увеличиваем шаг Ну вот как мне пришёл в голову такой алгоритм есть Ну какие сейчас есть алгоритмы оптимизации подбора неравномерно спускаясь Да по шака у вас отдельный день Вы

сейчас есть алгоритмы оптимизации подбора неравномерно спускаясь Да по шака у вас отдельный день Вы там ВС Обсудите А есть такое отлично Нет это не гоните паровоз даже не обсуждается вот так за секунду там нужно разобрать там много нюансов е у вас будет отдельный учебный день связанный с этим но это нужно в сетях не в классическом поэтому это у вас будет на фазе 2 это будет на фа Так ну в принципе вот вам градиентный спуск как на ладони Да чему Мы научились с вами функция а этапе у любого

вот вам градиентный спуск как на ладони Да чему Мы научились с вами функция а этапе у любого алгоритма всегда есть инициализация э точка старта она как правило случайно берётся Ну вот мы тройку взяли инициализировать дальше итерация Вот она итерация Да вот они итерации пошли первая итерация вторая итерация третья итерация Ну и всегда у нас будет проверка на критерии остановки Да и где-то когда-то мы обязательно остановимся Вот так вот на самом деле красивая штука Как помня градиентный спуск тут

мы обязательно остановимся Вот так вот на самом деле красивая штука Как помня градиентный спуск тут в принципе всё прописано ровным счм тоже самое что мы с вами проговорили Вот как это может выглядеть Да наш шаг и поход поход к минимальной минимальной точке вот что ещё смотрите действительно градиентный спуск не очень-то инен я имею в классический градиентный спуск это ладно такая функция здесь всё легко какие есть ловушки у градиентного спуска Ну во-первых если будет функция Вот такая и вы

всё легко какие есть ловушки у градиентного спуска Ну во-первых если будет функция Вот такая и вы инициализируется здесь то вы скорее всего Остановитесь вот здесь понимаете о чём я говорю есть инструменты как с этим бороться всё это будет обсуждать на фазе 2 а далее Ну что ещё не любит то есть первая проблема ещё раз это называется локальный минимум То есть вы попали в локальный минимум но не в глобальный минимум далее Что ещ может быть Ну есть такое как бы седловые точки иногда проблема когда

минимум далее Что ещ может быть Ну есть такое как бы седловые точки иногда проблема когда какой-нибудь участок плато вы сюда попали вы на нём застряли Хотя вот там там за горизонтом были большие успехи были большие успехи ещё какие вы нюансы вы с ними Может сегодня столкнётся зде короче иногда бывает такое нужно правильно выставить компромис и что я имею в виду это вот вы меня спрашивали Оля пому спрашивал Итак если большой чем это чревато для нас мы можем перепрыгивать правильно это ладно ещё

спрашивал Итак если большой чем это чревато для нас мы можем перепрыгивать правильно это ладно ещё если мы как бы вот так криво но всё-таки спускаемся иногда я упол туда вот иногда Le Ну да вот это как бы сторона большого рейта у большого рейта проблема в том что мы сильно прыгаем Но какой большой плюс урей большой Может быть вы поняли большой плюс у большого Ну в том что мы локальные минимумы перепрыгнет е са реестре сть и как бы у нейронных сетей иногда одно обновление весов может занимать

перепрыгнет е са реестре сть и как бы у нейронных сетей иногда одно обновление весов может занимать часы понимаете А как бы Представьте у Вас одно обновление весов идёт либо минуту либо 30 минут Разница есть в 30 раз ждать поверьте будет напрягать потому что захочется много гипотез проверить разных что-то подкрутить добавить и постоянно ждать Ну бысть это боль плю но у него как бы минусы в том что можно с ним перебрать и никогда не попасть в идеальную точку мы можем как бы действовать по

том что можно с ним перебрать и никогда не попасть в идеальную точку мы можем как бы действовать по парадигме тише едешь дальше будешь то есть у нас будет маленький й и всё хорошо и всё классно мы обязательно не пропустим локальный минимум ой глобальный минимум то есть ну минимум котором мы идём мы не пропустим ничего но проблема какая есть понятное дело долго Да долго ТОЗ Да как бы вот этот параметр это ваше решение от задачи к задачи он может быть разный зада зада может быть разный оптимальны

это ваше решение от задачи к задачи он может быть разный зада зада может быть разный оптимальны часто его ставят в диапазоне там не знаю от одной от одно или от о до О де где-то вот так где-то могут побольше поставить е есть такая проблема короче вы можете что ЕС маленький поставите сегодня Тото э ловушку а н не такой уж маленький оказался то разница двух значений из-за маленького рейта у Вас случайно угодит и вы на горе застряли трение потеряли всё да наоборот точнее трение большое уходит Ну

угодит и вы на горе застряли трение потеряли всё да наоборот точнее трение большое уходит Ну короче застряли на горе не дошли Бывает и такое Да был то есть простыми словами - это шаг наш как мы как мы спускаемся поре там один шагом два шагом прыгаем там может быть а что это Это флаг который там стоит внизу Нет это си это точность Ну можно назвать её точность которую ты бы хотел получить минимум но на выходе н получается это то насколько ты умнее становишься вот как бы вот мы смотрим разницу лоз

на выходе н получается это то насколько ты умнее становишься вот как бы вот мы смотрим разницу лоз как она падает Если падае слишком слабо то ты остановишься и может тако про что это произойдёт вот здесь на горе где-то Хотя Помнишь ты говорил в самом начале что вот в конце мы делаем слишком маленькие шаги вот где-то там бы остановиться а не здесь поэтому си - это ну иногда я называю точность с которой ты хочешь получить результат точность если лямда это шаг то си - это расстояние шага Нет нет

ты хочешь получить результат точность если лямда это шаг то си - это расстояние шага Нет нет не знаю даже как объяснить с в этом Дине остановлюсь пми 100% остановлюсь А если у меня стоит 10 в мину 10 мину то такие маленькие шаги при правильно будут только где-то внизу поэтому это в каком-то смысле как точность какая-то понял МЧ на рисунке может быть пять оптималь точка то есть реальный минимум можно не получить как бы аналитический всегда будет некая погрешность и вот н как бы В каком-то смысле

не получить как бы аналитический всегда будет некая погрешность и вот н как бы В каком-то смысле отвечает за эту погрешность Просто если ты стоишь на горе а я под горой ты хочешь ко мне подойти и мы с тобой договорились что ты подойдёшь ко мне не дальше чем на расстояние вытянутой руки Н это вот это расстояние вытянутой руки Ну типа того да можно тако провести Костя или это чувак который стоит и говорит тебе что ты настолько уже медленно идёшь что почти не движешься поэтому всё останавливайся

говорит тебе что ты настолько уже медленно идёшь что почти не движешься поэтому всё останавливайся но вопрос не про этом а вопрос про то что на на теории это всё вобще как С добрым утром замечательно выглядит сейчас перейдём в код Обязательно будут вопросики есть какой-то лайфхак наверняка же первый не первая установка А ну первых итерации первой проверки поставил чуть-чуть больше заведомо какой типа Триггер какой сигнал скажет тебе что ты ушёл в неверную сторону что там не сеть долго не

какой типа Триггер какой сигнал скажет тебе что ты ушёл в неверную сторону что там не сеть долго не считаться как-то можно это определить остановить и переться ну во-первых Омега как правило инициализируется случайно в том числе у неровных сетей а то что ушёл не в ту сторону но ты можешь выводить себе Лос Если ты видишь что он растёт у тебя то ты понимаешь Не иь туда ид не туда должен падать падать падать падать То есть это будет прямом смысле напишешь так неровные сети в том числе то есть

падать падать падать То есть это будет прямом смысле напишешь так неровные сети в том числе то есть всегда монитори Лос следим чтобы Лос этот падал падал падал угу и и и и и что я хотел сказать Ну если пошёл не в ту сторону Значит надо останавливаться А если в ту то как бы рано или поздно управишься ответил Угу А есть типа что-то что типа отношени Learning Rate и какое-то там типа коэффициент что будет как идеально то что скорее всего ты не попадёшь в ловушку Нет нет нет ловушки там везде с

что будет как идеально то что скорее всего ты не попадёшь в ловушку Нет нет нет ловушки там везде с всех сторон И кроме Le и н там ещё есть иксы и игре и много нюансов которые тоже могут повлиять поэтому обобщить это не получается обобщить это не получается [музыка] потому что иногда Лос измеряется в одной шкале 100 200 300 иногда он измеряется в десятитысячных это влияет и на н поэтому обобщить не получится Но понимаете это вы как бы поймёте 10 раз запустите 20 30 это Это не то что требует

не получится Но понимаете это вы как бы поймёте 10 раз запустите 20 30 это Это не то что требует какой-то сверх это как сказать нагрузки дикой есть определённые стандарты и как бы от задачи к задаче вот сегодня мы там буде 0 0 выставлять на нейронных сетях будете выставлять ещё меньше как-то так Дима просто хотел вот уточнить по поводу й и общем вот этой проблемы То есть получается что может быть ситуация когда при маленьком шаге и допустим если функция там уже какая-то более-менее Пологая то

ситуация когда при маленьком шаге и допустим если функция там уже какая-то более-менее Пологая то значение изменение функции уже получится будет меньше Эпсилон правильно и соответственно остановится хотя там Моть далеко до финал правильно Угу Да да в этом проблема да да да да да так Ну и собственно говоря что я ещё вам что мы ещё с вами не проговорили А есть что мы с вами не проговорили вообще говоря Почему градиентный спуск называется градиентным ни у кого не возник такой вопрос Мы ещё это не

Почему градиентный спуск называется градиентным ни у кого не возник такой вопрос Мы ещё это не произносили слово вот мы его не произносили так фамилия или отчество такое грантович сказать не говорить Оле грантович Да он самый а нет мы на самом деле просто не разобрали эту историю сейчас сейчас поговорим чаще конечно у вас будет не 1Д не 1Д зависимость Да а этих весов будет много их может быть 50 100 2 1 500000 Милн 2 Милн миллиард и сейчас говорю уже даже до триллионов доходит Это значит что

100 2 1 500000 Милн 2 Милн миллиард и сейчас говорю уже даже до триллионов доходит Это значит что пространство будет более сложны я покажу на примере двух потому что я хотя бы это смогу визуализировать и нарисовать но всё это точно также работает и для больших пространств Давайте возьмём какую-нибудь функцию так возьмём функцию Давайте возьмём функцию типа Омега 1 ква п Омега 2 ква думаю думаю пойдёт такая функци на Лос функция зависит от двух переменных Омега 1 ква п Омега 2 ква Чему равна

пойдёт такая функци на Лос функция зависит от двух переменных Омега 1 ква п Омега 2 ква Чему равна производная Как вы думаете у этой [музыка] функции частным производным сумма частных такое вспо Да правильно просто сказать что производная в данном случае равна 21 п 22 будет Неправильно потому это Это как знаете причинно-следственная связь в каком-то смысле Как изменится функция Если изменить вот эту переменную А когда мы изменим Сразу две это будет нечисто Поэтому в данном случае будет

вот эту переменную А когда мы изменим Сразу две это будет нечисто Поэтому в данном случае будет существовать две производных их называют частными производными мы отдельно посмотрим как влияет функция как как как бы Как меняется функция Да относительно переменной Омега 1 и как она меняется относительно переменной Омега 2 так вот если мы берм с вами производную по Омега чему Она равна в этом случае когда мы берём по омега-1 вот омега-2 воспринимаете как константу ничем не отличающуюся от пяти от

когда мы берём по омега-1 вот омега-2 воспринимаете как константу ничем не отличающуюся от пяти от семи от девяти от нуля То есть это просто Константа тогда Чему равна производная оме о 2 Омега 1 да 2 Омега 1 производная по Омега 2 Чему [смех] равна Омега 2 2 Омега 2 сейчас я ещё зарисуй график зарисуй график в данном случае у нас с вами как бы 3D пространство да получается 3D пространство [музыка] смотрите как бы вот вот такой график Омега 1 квара Омега 2 квара - это как Парабола раскрученные

смотрите как бы вот вот такой график Омега 1 квара Омега 2 квара - это как Парабола раскрученные вдоль своей оси э как как ваза получается поняли такая ваза получилась как бутон тюльпана там или розы в общем что-то такое поэтому как бы я вот это зарисуй дело Ну как-то вот так вот Нарисуем как-то вот так она у нас с вами вот эта функция выглядит То есть у нас есть теперь пусть будет переменная омега-1 сюда Омега 1Д Омега 2 сюда и L от Омега 1 Омега 2 будет вот здесь вот всё вот так вот и возьмём

сюда Омега 1Д Омега 2 сюда и L от Омега 1 Омега 2 будет вот здесь вот всё вот так вот и возьмём возьмём стартовую точку какую-нибудь алгоритм тот же самый то есть мы хотим прийти в самую в самый низ этого тюльпана возьмём какую-нибудь стартовую точку Давайте возьмём вот здесь лучше всего видно Поэтому с этой стороны возьмём то есть О2 отрицатель а Омега 1 положительный пусть у меня Стартовая точка Вот я её обозна так Омега 1 Омега 2 нулевое Теперь у меня координата Где я нахожусь в пространстве

Вот я её обозна так Омега 1 Омега 2 нулевое Теперь у меня координата Где я нахожусь в пространстве Она состоит из двух значений понимаете да из двух шарики пошли Прикольно А ну пусть какая-нибудь точка будет раз 2 ри ми1 -2 -3 ми4 где-то Вот где-то вот здесь будет у нас с вами Хотя нет слишком далеко Вот здесь пусть будет на уровне -23 Вот вот здесь точка У нас с вами будет Вот это наш точка Где мы находимся сеча здесь функция у нас с вами Вот такая вот то есть вот у на Да вот такая Омега 1

мы находимся сеча здесь функция у нас с вами Вот такая вот то есть вот у на Да вот такая Омега 1 Омега 2 нулевого точка У меня 3 -2 теперь по поводу обновления весов по поводу обновления весов оно будет происходить по той же самой формуле но теперь у нас с вами не одна производная д так вот эти производные можно собрать в Единый Вектор сказать что вот вот у меня изменение по первой координате вот у меня изменение по второй координате так вот Вектор частных производных у функции называют

вот у меня изменение по второй координате так вот Вектор частных производных у функции называют градиентом этой функции то есть обозначают это ну иногда треугольником вот таким перевёрнутым иногда Градиент Ну я вот пропишу вот так что это Градиент функции L Градиент функции L Ладно запишем так Градиент функции L в точке омега-1 Омега 2 это равно вот такой вот штуке которую мы с вами здесь только что записали [музыка] неудобно то есть Градиент Вы с ним будете сталкиваться с этим словом ещё

что записали [музыка] неудобно то есть Градиент Вы с ним будете сталкиваться с этим словом ещё очень-очень много раз Градиент он показывает скорость изменения функции только он как производная только для многомерного пространства поняли он тот же компас он компас для всех нейронных сетей во время обучения потому что он покажет по в какую сторону нужно менять каждый из весов чтобы становиться умнее плюс ещё покажет насколько сильно поэтому Градиент Градиент Градиент Градиент это та же

умнее плюс ещё покажет насколько сильно поэтому Градиент Градиент Градиент Градиент это та же производная всегда помните Если говорят нулевой Градиент это эквивалентно тому что производная нулевая мы не будем если Градиент большой значит сильно изменение Градиент маленький значит сильно отрицатель изменение Ну вот как-то вот в этой терминологии варится Да а вот есть такое ли понятие зависимость весов друг от друга Ну они все так или иначе связаны просто мы завод сза и в вектор один засунули мы

друг от друга Ну они все так или иначе связаны просто мы завод сза и в вектор один засунули мы мы я предположил то что мы предполагаем то что они не взаимосвязаны их можно друг от друга отделить и вместе Отдельно отсчитывать Ну здесь Да но иногда бывает что вот если бы я сюда Омега 1 поставил бы ещё омега-1 тогда у тебя производная была бы вот такая по омега-2 2 омега-1 Омега 2 и они бы уже соединились понял как бы я бы лучше не мыслил так что прямо отдельно можно Всё равно всё это едино

соединились понял как бы я бы лучше не мыслил так что прямо отдельно можно Всё равно всё это едино связано но мы будем действительно смотреть по отдельно по каждой координате отдельно но Поведение одной кординаты может зависеть от другой но мы смотреть будем [музыка] отдельно так в общем виде формула не поменялась то есть новая точка Теперь напоминаю она у меня состоит из двух координат Это старая точка Где я сейчас нахожусь в горах Да это вот прям в прямом смысле уже 3 пространство То бишь

точка Где я сейчас нахожусь в горах Да это вот прям в прямом смысле уже 3 пространство То бишь умножить на Градиент Градиент функции в точке в точке Омега 1 Омега 2 в какой В какой точке вот исходя из этой формулы вопрос на понимание ит ит Абсолютно верно там где я сейчас нахожусь всё Вуаля всё собрано ну что ж с кем попробуем посчитать новую точку сделать шаг по этой горочке Ну с убай наверное Давай это убай Ээ иты это получается О'кей а три и минус два сколько минус что 01 возьмём или Окей 01

это убай Ээ иты это получается О'кей а три и минус два сколько минус что 01 возьмём или Окей 01 умножить на 2 умноже на 3 получается 6 и ми4 да для всех про говорю ты правда то есть надо вот эту вот эти координаты Омега 1 Омега 2 поставить в градиенты для этого первой координате понадобилась первая второй вторая Это только тут я вот привёл булу уже пример могло бы быть что и та и та понадобилось бы и там и там но здесь произошло так то есть Градиент у нас получился 6 и ми4 да Обратите внимание

бы и там и там но здесь произошло так то есть Градиент у нас получился 6 и ми4 да Обратите внимание логика та же самая работает по первой координате у нас с вами частная производна положительная а это значит что вот эта точка она лежит на возрастании первой координаты действительно там положительное направление вот Представьте Если бы вы ножом разрезали Вы бы увидели что мы лежим на возрастании по этой координате то есть всё работает Просто в многомерном случае по второй координати лежим на

по этой координате то есть всё работает Просто в многомерном случае по второй координати лежим на убывании ми Ну как бы действительном Нава если двигаться вот в эту сторону то мы будем меньше и меньше становиться и Градиент как бы нас на подстраховки сразу же говорит Ребят я знаю куда надо двигаться всё у меня Готово просто ваше дело двинуться Ну и чему Давай до считаем лба чему 3 и -2 ми 06 и -06 и 0 Ну давай минус 06 а окей 06 и ми 04 Да вот так вот и получается 2.4 и это -1.6 абсолютно Верно

и 0 Ну давай минус 06 а окей 06 и ми 04 Да вот так вот и получается 2.4 и это -1.6 абсолютно Верно Давайте зарисуй эту точку 2.4 Это примерно где-то здесь и -1.6 - это где-то примерно здесь то есть собственно говоря нас привела дорога вот сюда то есть мы попали вот сюда вот у нас следующая L1 точно также Давайте посчитаем останавливаться нам или нет кто нам поможет Давайте Настя поможет нам нужно проверить останавливаться или нет си си если что как и си короче будет 0 ам мы уже взяли Да

нужно проверить останавливаться или нет си си если что как и си короче будет 0 ам мы уже взяли Да кто-нибудь по кто-нибудь другой ли Угу Кто кто сможет э та же самая Логика Надо посчитать разницу вот этого И вот этого всё так как Ну давай попробуем давай вот у нас есть функция [музыка] Угу в нулевой точке у нас будет 9 + 4 13 Угу для всех покажу да то есть мы подставляем вот эту точку в нашу функцию получили 13 действительно то есть вот здесь у нас значение Лоса 13 хорошо так перешли в первую

получили 13 действительно то есть вот здесь у нас значение Лоса 13 хорошо так перешли в первую точку там Значение 2.4 и -1.6 угу так 2,4 Это вроде 576 5.76 плюс 256 256 Я уже забыл а 576 п 8 Ну вот так вот столько и будет да 832 Ну всё собственно говоря как мы видим что это точно если с 0 сравнивать Точно ещё не меньше существенно Мы очень хорошо сделали шагнули и мы будем продолжать то ВС тоже самое ВС работает Точно также и вот это поэтому Нава см никому не нужна минимизация то что мы как бы

ВС работает Точно также и вот это поэтому Нава см никому не нужна минимизация то что мы как бы 2D сделали Да от одной переменной всегда два и более миллиард D работало бы по тому же самому принципу точка бы задавалась из миллиарда координат она бы имела бы миллиардный Градиент она бы имела миллиард обновлений Весов и работала примерно всё точно так же как работает здесь вот Ну самое главное что мы двинулись в правильную сторону да то есть вот наш шаг что мы не ушли ни туда ни туда там короче

мы двинулись в правильную сторону да то есть вот наш шаг что мы не ушли ни туда ни туда там короче ушли туда куда нужно в общем всё работает значит прико вот вопросы Хорошо тогда давайте обсудим задание ваше сегодняшней ваше сегодняшнее задание Что Вам сегодня [музыка] предстоит сегодня вам много чего предстоит так Давайте посмотрим Ну что ж будет примерно по тому как потому как мы с вами работали в понедельник то есть будет немножечко такого освежать ручками поработать в тонус войти Ну

работали в понедельник то есть будет немножечко такого освежать ручками поработать в тонус войти Ну разминка назовём это так то есть взять немножко производно они достаточно тривиальные по своей сути тут оче про буквально поть в тали не бо нуре будет первый блок это Градиент спуск для одной переменной действительно будет не просто я не Коди А вам придётся кодить зада задание может быть кому-то покажется сложным вот этот мост выстроить с с бумаги грубо говоря в код Ну у вас получится у вас

покажется сложным вот этот мост выстроить с с бумаги грубо говоря в код Ну у вас получится у вас получится Я думаю в общем тут всё прописано помре точку старта А вы выдали где минимум этой функции для этого нужно будет написать четыре функции подсчёт Лоса подсчёт производной обновление веса шаг и функция которая соединит все эти три функции в работе да Get Min будет говорить что дай-ка мне новую точку новая точка будет просить для этого производную илос и будем проверять потихоньку нужно

новую точку новая точка будет просить для этого производную илос и будем проверять потихоньку нужно обновлять ещ или нет Потом там нарисовать графики очень полезна штука увидеть к чему и как Ну и всё Вот и второе задание - это ди градиентный спуск для функции двух переменных то есть теперь надо будет реализовать именно как бы Градиент Да уже не просто производную а Градиент вот всё тоже самое также четыре функции и Ну тут ещё дополнительное задание но если когда четыре функции напишете там

также четыре функции и Ну тут ещё дополнительное задание но если когда четыре функции напишете там применять буквально пару символов ничего сложного те что здено вот хотело чтобы это было минимум к сожалению не всегда так получается но чтобы это было минимум который вы сегодня сделаете Да вот одну перемену точно надо делать железобетон не замыкай как бы Когда это поймёшь то это на самом деле делать буквально Ну не знаю там немного времени потому что здесь опять самое сложное - это понять Да не

буквально Ну не знаю там немного времени потому что здесь опять самое сложное - это понять Да не сделать а понять и вот когда вы пойм будет хорошо и вс остальное будет ваться очень быстро в общем минима минимальны уровень реализовать градиентный спуск для одной переменной в идеале нужно попробовать градиентный спуск для двух переменных тоже написать когда один сделаете второй на самом деле будет несложно меняться Ну и тут уже дополнительная задача это как менять скорость обучения немножко

несложно меняться Ну и тут уже дополнительная задача это как менять скорость обучения немножко контекста машинного обучением для тех кто собственно говоря успеет всё это сделать может перейти сюда тут некоторые вещи нужно самостоятельно будет ру говоря ве Конте ле то это и дополнительное задание Вот кто дойдёт есче может у меня спросить что почему здесь Ну и последнее - это вообще опять тренировка на Класс вот это вот вот это всё дополнительное то есть адаптивная скорость обучения и реализация

на Класс вот это вот вот это всё дополнительное то есть адаптивная скорость обучения и реализация класса оптимизатора это дополнительно подчерки Да Сержа А насколько низкоуровневое надо писать эти функции вот функция переменная у меня под капотом просто типа на переменная или я сам должен реализовывать вот эту фигню функция переменная не Сосем понял что имеешь вду вот на вот нам нужно написать вон она у нас который берёт производную или я сам должен написать а я понял я понял понял в Напа не

вон она у нас который берёт производную или я сам должен написать а я понял я понял понял в Напа не предусмотрено В общем виде брать производных поэтому тебе надо написать Бут числами но есть у кого иногда возникает это желание сделать в общем виде В общем виде чтобы не только для оме к п 3 работало для этого библиотека называется угу вот там есть возможность брать производную В общем виде я в принципе вообще только в библиотеках такое встречал Если я правильно понял твой вопрос но так да как

вообще только в библиотеках такое встречал Если я правильно понял твой вопрос но так да как бы да я и думаю что нужен общий вид для всего опять То есть я бы здесь написал бы вот так гриф равно Ну производная Омега ква + 3 = 2 Омега 2 Омега всё то вот так бы написал Вот да Ну ладно если в общем виде сделаю это не не проблем круто да я я посоветовал Сначала сделать вот так а потом уже поменять в общем виде то есть сначала Бей запустить убедиться что всё работает убедиться что ты до конца всё

в общем виде то есть сначала Бей запустить убедиться что всё работает убедиться что ты до конца всё понял и с точки зрения кода А дальше уже загуглить си там не сложно и сделать в общем виде если хочешь но я этого сейчас не требую совершенно это всё ваши инициативы как бы пробуйте Мне важно для всех Да чтобы хотя бы просто на нампа всё написали конкретно для этих функций это будет подразумевать то что вы поняли как всё это устроено и поняли как это ра Вот это можно ещё уточнить То есть

то что вы поняли как всё это устроено и поняли как это ра Вот это можно ещё уточнить То есть получается мы не любую Омегу вставляем А мы конкретно вот расписываем как на листочки да то есть Вот именно вот L от Омега вот это вот Омега в Ква п 3 да да да да а то есть пишем в прямом смысле то есть здесь мы напишем что Омега в степени 2 + 3 А всё понятно а я подумала что это как обычно ты функцию общую делаешь и потом вместо Омега подставлять можешь всё что хочешь Ага всё поняла то есть вот так вот

делаешь и потом вместо Омега подставлять можешь всё что хочешь Ага всё поняла то есть вот так вот есть вот Лос в точке два равен четыре Да Лос в точке три равен там 12 а дальше мы будем пользоваться этой функцией тогда когда придёт время А время придёт очень скоро Понятно спасибо да Костя А для реальных сложных весов используется как раз-таки вот этот сипай да библиотека Нет там пай точ используется А понял ну пайтор он как бы это Большой брат всех самый серьёзный такой Ладненько дойдём до

А понял ну пайтор он как бы это Большой брат всех самый серьёзный такой Ладненько дойдём до этого ещ значит будет вашим главным главной библиотекой на фазе 2 са г а на это нам Если говорить про вычислитель истории в принципе одно и тоже только он просто за счёт того что наников пожи вират всё писали в основном неравно сети но всегда как бы надо идти в сторону простоты пай точ много где не нужен поэтому нам пай имеет огромнейшее применение и будет всегда жить и процветать Ну всё тогда получается

нам пай имеет огромнейшее применение и будет всегда жить и процветать Ну всё тогда получается Если Вопросов нет то давайте Удачки вам если что на связи вечером тогда обсудим У кого что и как получилось хорошо спасибо Всё Давайте пока-пока пока-пока

M Так Доброе утро всем Ну что как Привет посмотрели видео понимание некоторое есть да что такое машинное обучение Это хорошо ну нужно на самом деле пока что самая самая базовая Сейчас секунду Так ну что сегодня мы с вами начинаем соприкасаться с машинным обучением план очень простой мы сегодня проговори с вами про задачу регрессии и её особенности далее ну завтра поговорим про задачу классификации её особенности [музыка] вот поговорим с точки зрения внутри то есть с точки зрения того как

её особенности [музыка] вот поговорим с точки зрения внутри то есть с точки зрения того как устроено всё внутри как алгоритмы обучаются и на выходе нужно будет сделать очень простые задачи их на самом деле всего глобально две будет что сегодня что завтра сегодня нужно будет написать свой арим регресси завтра написать свой алгоритм логистической регрессии о которой мы завтра с вами поговорим Итак сегодня краткий экскурс в историю виды задач в машинном обучении примеры результатов Ну вот это всё

сегодня краткий экскурс в историю виды задач в машинном обучении примеры результатов Ну вот это всё в принципе какая-то условная история И вам до конца никто не скажет потому что нету как бы едино правильного но можно объединить как-то всё Примерно вот в таких историях то есть искусственным интеллектом назвать что само обуча емо Да не то чтобы само обучаемые И после этого уже имеет способность какую-то предикатив оценочную там или в зависимости от каких-то задач выделяют машины обучения

какую-то предикатив оценочную там или в зависимости от каких-то задач выделяют машины обучения выделяют машины обучени выделяют глубокое обучение в принципе в принципе можно сказать что мы с Вами Мы с вами будем работать вот здесь то есть вся фаза вся фаза один посвящена вот этой области это так называемое классическое машинное обучение мы не не будем трогать алгоритмы Невы алгоритмы так как на табличных данных пока что всё-таки доминируют пока что всё-таки доминирует табличные данные Ой Пока

табличных данных пока что всё-таки доминируют пока что всё-таки доминирует табличные данные Ой Пока что доминируют классические алгоритмы и их Именно их мы будем проходить вся Фаза 2 у вас будет посвящена разбору нейросетей но Вы на самом деле практически всегда будете находиться здесь Вот но как-то так как-то так то что является в этой области является такими фундаментальными знаниями вероятность того что вы с этим столк на работе или на собеседованиях очень высокая Хотя Всё зависит от того

того что вы с этим столк на работе или на собеседованиях очень высокая Хотя Всё зависит от того конечно Куда вы пойдёте от того Куда вы пойдёте Так что ещё можно сказать смотрите В чём разница программировании машинного обучения предположим что Если бы вы были каким-то Аля фнн разработчиком да Или разработчиком классическом программировании в принципе история описывается вот таким простым блоком вам говорят что вот будут приходить данные эти данные нужно обработать так-то Ну например

блоком вам говорят что вот будут приходить данные эти данные нужно обработать так-то Ну например разработчик вы создаёте на форме поле для регистрации там поле куда нужно вводить име соответственно Вы знаете что вот туда будет приходить всегда и изна если он идт видн корректно то нужно сказать там типа всё ок Вы авторизованы если некорректно то нужно сказать что некорректно Да Поменяйте то-то то-то и в общем собственно говоря есть какие-то ответы на эти действия машинная обучение построено

то-то и в общем собственно говоря есть какие-то ответы на эти действия машинная обучение построено немножко иначе машинно обучение построено что есть входные данные и есть ответы на эти данные или разметка или е это называют таргетом дано с вами В каком-то смысле ещ вот если нарисовать вот так смотрите X f от x и y то есть вот вход вот выход а F - это правило по которому меняют Да функциональное преобразование вот как бы если говорит про frontend вам уже заранее известно это правило этим-то это

вот как бы если говорит про frontend вам уже заранее известно это правило этим-то это и упрощает Суть в машинном обучении говорят что вот вот такой X давал такой Y Да вот такая квартира с такими параметрами стоила столько а вот с такими параметрами стоила столько а вот с такими столько и наша с вами задача восстановить вот эту функцию восстановить эту функцию так чтобы в дальнейшем она имела предиктивной иксов для новых иксов возвращала какие-то оценочные значения Есть ли тут вопрос или всё

иксов для новых иксов возвращала какие-то оценочные значения Есть ли тут вопрос или всё понятно Угу хорошо отлично Итак как я вам сказал что мы сегодня с вами проговори про линейную регрессию но у меня первый к вам вопрос В чём разница задачи регрессии и задачи классификации Ну выходная переменная бинарная или или не бинарная например Ну не совсем ну в правильную сторону смотришь не совсем ну это как одно из он из параметров разницы Ну да да но не совсем правильный ответ ещё варианты Ну про

это как одно из он из параметров разницы Ну да да но не совсем правильный ответ ещё варианты Ну про супервайзером разница регресси классификации Вот мы с ми это МЮ любо соседова для ва сразу закончится автоматически вот сразу если по результату то в линейной там насколько я понимаю там вероятно Линейная не при чём линейно причём регрессия и классификация просто А ну да в регрессии есть видимо на выходе одно значение вероятности а При классификации сколько Гру зна уже ближе ближе ре Ну лас тоже

выходе одно значение вероятности а При классификации сколько Гру зна уже ближе ближе ре Ну лас тоже может быть м поэтому но близко близко всё близко как бы но не совсем точный ответ регрессия как правило предсказывает какую-то непрерывную величину оно может иметь бесконечное число значений например стоимость жилья понимаете да Или не ю Например я работаю в банке мы строим дивную модель пользователь положит нам денег в например в инвестиционный портфель или что-то ещё то есть я же не знаю

положит нам денег в например в инвестиционный портфель или что-то ещё то есть я же не знаю сколько там там может быть 0 1 2Т А может 3 с поно А может быть 100 А может быть 100 с по и так далее То есть это регрессионная метка а метка классификация классы Она имеет как правило конечное конечное число и вот один из случаев самый частый это бинарная классификация когда есть два класса Да нет купил не купил понравилось не понравилось придёт не придёт и так далее Вот Вот ну как бы о классификации мы

купил понравилось не понравилось придёт не придёт и так далее Вот Вот ну как бы о классификации мы будем говорить больше завтра сегодня говорим о регрессии и есть вот бинарная классификация когда два класса есть например мультикласс классификации Да когда мне нужно было предсказать каких-нибудь пять меток например там не знаю предсказать уровень уровень удовлетворённости клиента или что-то ещ он может измеряться не только в удовлетворён удовлетворён но 1 2 3 где там но ничего не нравится

ещ он может измеряться не только в удовлетворён удовлетворён но 1 2 3 где там но ничего не нравится нравится и вот мы предсказываем это для каких-то наших бизнес-задач Ну что немножко понятна разница регресси классификации кста когда ты задал вопрос слово классификация считалось мозгом как кластеризация посвящена сува НГУ а следующая uned Угу Так мы с вами разберём на достаточно тривиально примерке вотк секк Да вот смотрите задача оценить стоимость квартиры по одному признаку например площади

вотк секк Да вот смотрите задача оценить стоимость квартиры по одному признаку например площади ну вполне себе да то есть я как исследователь могу утверждать понятно что Ну мы с вами понимаем что в жизни це на образование квартиры это не только метры квадратные но мне Никто не запрещает построить модель на одном признаке А дальше если я увижу что точность модели не очень Лос функция большая я могу утверждать что данных недостаточно но тем не менее я в каком-то смысле могу построить такую модель

утверждать что данных недостаточно но тем не менее я в каком-то смысле могу построить такую модель правильно То есть как бы причина следственную связь выстроить из одной перемены всё это было бы очень просто Костя бы пришёл бы говорит хочу выставить квартиру Помогите типа оценить Я сказал сколько квадратов просто там говорит такую-то такую-то цифру не знаю 60 квадратов предположим Я уже сразу же на выходе как по своей модели знаю сколько объективно нужно давать А цену вот как здесь происходит э

выходе как по своей модели знаю сколько объективно нужно давать А цену вот как здесь происходит э предсказание Так давайте наверное сейчас мы с вами знаете что сделаем секунду сечас я новый открыл да У меня зависло Уменя тоже завис вот а давайте сейчас сейчас видно экран нормально видно то же самое что раньше Угу Так вот смотрите представляем с вами такую ситуацию что в нашем случае как происходило бы Помните я вам вчера рисовал В прямом смысле блоки помните вот здесь всё начинается та же самая

бы Помните я вам вчера рисовал В прямом смысле блоки помните вот здесь всё начинается та же самая Вещь Вот есть входной X есть входной X есть входной X и этот X у нас с вами приходит приходит куда-то в образоват его на выход в данном случае это и есть Линейная регрессия формула линейной регрессии заключается в том что Y предсказано часто вы увидите что с крышечкой а то что выдаёт алгоритм - это всегда предсказанное всегда предсказанное Y предсказанное - это значение умножить на вес X у Омега 1

предсказанное всегда предсказанное Y предсказанное - это значение умножить на вес X у Омега 1 П Омега 0 Линейная регрессия - это Прямая линия Давайте вспомним с вами Как в школе Прямая линия выглядела нам говорили ребята вот Y ра K у x + b помните такая была история типа вот это Прямая линия свои K поставлять свои B в зависимости от этого у вас будет прямая линия которая себя как-то ведёт а ну что ж мы собственно говоря вернулись к истокам Да и пользуемся той же самой историей только у нас

что ж мы собственно говоря вернулись к истокам Да и пользуемся той же самой историей только у нас будет не к и Б А мы будем называть это весами модели это у нас будет омега-1 и Омега 0 Это только для Это только именно для моего случа для случая вот такой таблички где одна переменная сейчас я [музыка] попробую перенести эту табличку туда что мне не даёт её сделать Ну ладно в общем это только для нашего случая для нашего случая с тий у меня X1 - это метры квадратные и y и y всё Y - это Таргет Y -

случая для нашего случая с тий у меня X1 - это метры квадратные и y и y всё Y - это Таргет Y - это Таргет Ну например квартира 20 м стоило там 6 а в миллионах напишем что это в миллионах избирается 6 млн квартира не знаю 30 МТ стоило уже а 8 млн Да квартира 54 м стоило 12 млн ти 60 МТ стоило 15 мл Не суть важно Ну короче примерно как-то так в данном случае мы строим модель повторю чтобы сюда я подал квадратные метры например 25 МТ и получил какую-то оценку внутри идёт преобразование входного

подал квадратные метры например 25 МТ и получил какую-то оценку внутри идёт преобразование входного икса вот этого X1 который идёт как формула я её ещё сюда запишу X1 у Омега 1 плюс Омега 0 даже давайте наверное в другом порядке запишу Вот так вот в принципе мне ничего не мешает записать в таком порядке получаю Y предсказанный смотрите вот инициализируется ну как как-то случайно инициализировать прямая а далее нам надо будет с вами обновлять эти веса Ну и думать как бы Как подобрать лучше Для

прямая а далее нам надо будет с вами обновлять эти веса Ну и думать как бы Как подобрать лучше Для этого нам нужно с вами функционал который будет отражать ошибку что я имею в виду вот Y предсказанное появится А в идеале каким этот Y предсказан должен быть на ваш взгляд то есть что для нас хорошее предсказано минимальным ло лом или про а нормальный Лос это что вот даже забудьте матема человечески Что значит во время обучения для нас хорошее предсказани минимальная разница между фактическим изам

Что значит во время обучения для нас хорошее предсказани минимальная разница между фактическим изам Абсолютно верно Да то есть вот есть тическая цена квартиры 6 а я сейчас подам эту двадцатом А здесь 6 с по вышло и в общем нам как-то бы оцифровать ту историю насколько реальная отклоняется от предсказанного Да я зарисуй блок схеме это так что сюда подаётся Y реальный и нам с вами надо будет посчитать нам с вами надо будет посчитать Лос функцию вот здесь я назову её L а вот такую Лос функцию Лос

нам с вами надо будет посчитать Лос функцию вот здесь я назову её L а вот такую Лос функцию Лос функцию Её называют mse которою мы сейчас с вами поговорим это самая известная Ну или одна из двух наверное одна из двух самых известных функций потерь или Лос функций есть вообще возможность писать свои кастомные функции на каких-нибудь соревнованиях кто борется за деньги там или за сверх точность они могут написать но в общем виде для задач регрессии из статистических знаний теоретических наших

они могут написать но в общем виде для задач регрессии из статистических знаний теоретических наших используют функцию mse mse - это аббревиатура Minor или среднеквадратическая ошибка Давайте по порядку Min То есть это 1 де N сумма то есть мы в среднем посмотрим насколько мы ошибаемся средне квадратическая ошибка ошибка значит это y - y предсказано Ну у меня будет на самом деле Y и потому что у меня не один элемент а будет много их И помимо квартиры жа бу на и так далее да Мне нужно в среднем

меня не один элемент а будет много их И помимо квартиры жа бу на и так далее да Мне нужно в среднем будет оценивать то есть Y и мину Y крыше и и всё это в квадрате вот эта формула называется Возможно вы её слышали может Марк вам Её считал тоже и именно она у нас с вами будет будет яв оценкой интом того что во время обучения надо Ну делать лучше скажем так с крышечкой и квадра Вот такая функция Вот такая функция конечно мы бы хотели чтобы она была как можно меньше минимизируем Любую функцию в

Вот такая функция конечно мы бы хотели чтобы она была как можно меньше минимизируем Любую функцию в математике минимизировать нужно по какому-то параметру за счёт чего мы с вами здесь что мы можем изменять на ваш взгляд что мы можем изменять чтобы у нас функция была меньше и меньше меньше веса с крышкой Ну ве Да с крышкой Давайте наверно пропишу тогда чтобы все понимали Единственное что что мы можем влиять на веса модели веса модели как следствие модели как следствие меняют и с крышкой поэтому

влиять на веса модели веса модели как следствие модели как следствие меняют и с крышкой поэтому мы с вами запишем вот так что это 1 1 / N А сумма Y ито минус Y ИТ А нет вот здесь Y ИТ с крышечка - это наше предсказание то есть X1 Омега 1 + Омега 0 и всё это в квадрате вот В каком-то смысле у нас mse вот так выглядит неправильно показал вот так вот это всё mse Вот это всем понятно а там X1 или XI ну по факту XI Это я тут подзамче сегодня у вас в задании будет не одна фича у вас будет X1 отдель

ну по факту XI Это я тут подзамче сегодня у вас в задании будет не одна фича у вас будет X1 отдель X2 будет отдельно Ну у меня по халяве не случае Тут всем понятно Если не понятно спрашивайте что мы сейчас последовательно будем выстраивать логику Если вы поймёте то что происходит здесь вы поймёте как любая нейронная сеть обучается единственная разница нейронной сети то что здесь архитектура посложнее вс не просто как бы умножить на два вес Так что это вообще фундаментальная история Хорошо тогда

вс не просто как бы умножить на два вес Так что это вообще фундаментальная история Хорошо тогда мы с вами сформулировали сформулировали идём дальше Ну как я сказа вами есть зада минимизировать эфу то есть мы хотим как можно меньше ошибаться по параметру Омега по параметру Омега А как мы это делаем с помощью чего Ну с помощью чего мы минимизируем функции шаги которые мы делали вчера Ну как называется Да градиентный спуск Абсолютно верно то есть нам здесь нужен градиентный спуск потому сри

Да градиентный спуск Абсолютно верно то есть нам здесь нужен градиентный спуск потому сри Сначала мы случайно инициализирует два веса То есть у меня Омега 0 и Омега 1 вот в таком порядке запишу чтобы с кодом проводить параллель будет удобно нулевой индекс первый индекс Омега 0 Омега 1 Ну давайте как-нибудь инициализирует И давайте сеете сделаем я сечас немногие данные поставлю Чтобы другие немножко данные подставлю чтобы удобнее было считать а потом уже подставим более сложные данные так мм

данные подставлю чтобы удобнее было считать а потом уже подставим более сложные данные так мм пусть будет сейчас так угу вот так вот такая история была вот такие вот такую выборку собрали не су сейчас важно что это да мы сечас фокуси именно на мата аппарате пока что не суть важно что это вот есть иксы вот есть И всё И давайте инициализирует инициализировать [музыка] Да чтобы нас чтобы мы долго не шли долго не шли вот так давайте возьмём точку Ну какую-нибудь не знаю давайте возьмём 1 МИД

не шли долго не шли вот так давайте возьмём точку Ну какую-нибудь не знаю давайте возьмём 1 МИД например вот такую точку ну вполне себе Да вполне себе Вот это наша Стартовая точка смотрите наш алгоритм уже предсказывать вот сейчас попробуйте как бы переварить эту мысль наш алгоритм уже способен предсказывать Если я сейчас единичку сюда на вход подам то как вы думаете Какое предсказание у меня будет ми ми1 согласны то есть потому что у меня сейчас на данный момент вот этот вес оди а вот этот МИД

ми ми1 согласны то есть потому что у меня сейчас на данный момент вот этот вес оди а вот этот МИД То есть я единичку подставляю получаю ми1 ми вот в итоге здесь будет ми бы промахнулись промахнулись но мы уже способны призывать Да также соответственно можем для второго элемента приказать а 05 умножаем на 05 умножаем на что получается ми Это ми и е попали в но дано под контролем у нас на втором элементе выборки идёт Ну и Давайте третий элемент выборки посмотрим подставляем опять же минус

элементе выборки идёт Ну и Давайте третий элемент выборки посмотрим подставляем опять же минус единичку сюда Да веса подставляем соответственно и мы можем уже получить предсказание модели получаем сколько мину О да тоже а не стоп минус се вообще получаем се не то подставляю чтото не проснулся до конца ми Умно получа Ну достаточно большой про достаточно большой вот всем ли понятна мысль которая здесь у меня сейчас изображена то есть мы уже способны предсказывать просто предсказание случайны

здесь у меня сейчас изображена то есть мы уже способны предсказывать просто предсказание случайны зависит от того как инициализирован спуску приводить к такому чтобы здесь потребуется от вас Давайте по порядку как считается наша следующая точка Омега нуво Омега перво И П О В общем виде как формула записывается Омега нулевое Омега 1 нулевое Угу минус лямбда умножить на Градиент Омега минус лямбда Умно на Градиент вот этих же самых нулевых значений Нет только не Омега А Градиент - это у функции

Умно на Градиент вот этих же самых нулевых значений Нет только не Омега А Градиент - это у функции которую ты минимизирует у нас что это L Да Градиент loss функции вот этой Угу производная же функция Градиент Да вот и в точке Абсолютно верно в точке в которой мы сейчас находимся [музыка] Угу я что-то неправильно записал здесь-то у нас не нулевое а ито мы же в общем виде пока что записываем то есть здесь я нахожусь у градиента спросила Что Кого куда и как как надо менять веса чтобы стать меньше

здесь я нахожусь у градиента спросила Что Кого куда и как как надо менять веса чтобы стать меньше он говорит ребят Вот так и так тоже на подстраховки здесь да давайте уже Кстати будем писать не лямда ля вчера писали сегодня дня будем писать всё все посчитали обновились веса самое сложное теперь Ну что у нас нету вот эта у нас штука с вами есть чтобы обновиться Сейчас она у нас есть Да есть инициализировать Learning rade Давайте зададим Learning Create Learning Create пусть у нас с вами будет

Learning rade Давайте зададим Learning Create Learning Create пусть у нас с вами будет 0.1 всё Le Create есть Градиент у нас с вами есть пока нет пока нет Угу Вот в принципе это единственная сложность как бы посчитать Градиент Из скольки координат у нас с вами будет состоять Градиент из двух из двух это две частные производные правильно Ну сейчас будет самая сложная история надо будет напрячься особенно тем кто не до конца понят Что такое производная это нужно проделать один раз просто для

особенно тем кто не до конца понят Что такое производная это нужно проделать один раз просто для лучшего понимания как всё внутри устроено что это не какая-то магия А это Простая история того что мы обсуждали с вчера две производные две частные Ну и Давайте возьмём сначала Давайте производную по Омега смотрите у нас с вами здесь вообще есть как бы усреднение да Но по-хорошему мы с вами должны короче взять Вот производную от вот этой функции 1 сумма минус предсказанное то есть ище надо подписать

взять Вот производную от вот этой функции 1 сумма минус предсказанное то есть ище надо подписать X1 вот так подпишу умножить всё вот это в квадрате вот мы от этого берём производную поехали кажется что это сложно но блин тут как будто цифр не осталось Да но на самом деле это вообще Лайт и вы это поймёте чуть позже но сейчас надо Прячься Итак производная Что происходит с константой когда мы берём производную выносится за Например если мы берём 2x производную это эквивалентно тому что 2 у x

производную выносится за Например если мы берём 2x производную это эквивалентно тому что 2 у x производна поэтому 1 де N сразу же уходит производная суммы Чему равна суме производных сумма тоже выходит вовнутрь и получается что нам нужно взять производную одного объекта выборки В каком-то смысле вот реально В прямом смысле одного объекта выборки Омега 1 плю Омега 0 и всё это в квадрате и мы вот у этого берём производную вот Вот теперь теперь возьмём производную Напоминаю что мы берём с вами

у этого берём производную вот Вот теперь теперь возьмём производную Напоминаю что мы берём с вами производную по Омега 0 А значит всё остальное что здесь есть Y и Омега 1 являются константами ничем не отличающимися от цифры 2 5 7 -2 и так далее ну что ж поехали с кем попробуем Ну что там 2 п [музыка] плю X ИТ Ну X ит1 Ладно умножить на это просто X1 грубо говоря Омега 1 П Омега 0 вот так вот м плюсик только стоит написать это он там сейчас плюс квадрат квадрат здесь внешнее действие у нас какое

только стоит написать это он там сейчас плюс квадрат квадрат здесь внешнее действие у нас какое возведение в квадрат правильно Да производная X к чему равна 2x 2x значит в нашем случае Настя будет чему равно у нас в ро Иса вот эта конструкция Ну на это всё правильно Так и есть 2 на это то есть 2 у y ми давайте я сейчас пока что чтобы мне места хватало Вот это это же и предсказанное я вот здесь сверну Y предсказанный просто покажу что как бы вот это вот всё это вот и есть вот эта штука если что

Y предсказанный просто покажу что как бы вот это вот всё это вот и есть вот эта штука если что 2те проливаем во здесь то остатся ЕС берм ВС верно ну можете раскрыть скобки да то есть это ми1 Омега 1 П Омега как бы вот по хорошему У нас сейчас минус Омега минус описался при внутри Действительно это производная суммы Ну или производная разности равна разности производных производная Y ИТ Чему равна ноль Всё верно Это Константа производная вот это вот Чему равна X1 на Ну нулю а производная минус

ноль Всё верно Это Константа производная вот это вот Чему равна X1 на Ну нулю а производная минус Омега 0 Чему равно -1 -1 всё верно то есть выходит Минус Я его вот сюда подпишу Всё мы с вами самостоятельно взяли мы с вами самостоятельно взяли Градиент Молодцы прекрасно это прекрасно по что это не простая штука блин как здесь не нуно значит нолико ноли вниз идти да Градиент Отрицательный Значит ноли где отрицательно или нет я же не знаю В какой точке нахожусь то что минус стоит это не значит -

где отрицательно или нет я же не знаю В какой точке нахожусь то что минус стоит это не значит - X может быть положительным если X ра -2 правильно Да мы же ещ не считали так хорошо теперь вторую часть с вами сделаем шт Омега 1 в принципе тут практически не будет отличаться Но что же Давайте вот опять проваливается вот сюда то есть у нас также будет 1 / N сумма и мы попадаем с вами вот сюда вот сюда попадаем а раз мы попадаем с вами сюда то надо брать производную Давайте Кто хочет попробовать в

попадаем а раз мы попадаем с вами сюда то надо брать производную Давайте Кто хочет попробовать в первую очередь кто может быть понимает что она тоненького воспринимает Или вообще не воспринимает все всё вновь поняли сразу мне тяжело очень давай Ну я знаю что там сначала идт двойка потому что у на вся конструкция 2 у y - y предсказанное правильно Да вот я конечно стрелочку я вам буду показывать что это вот оно и есть чтобы когда вы лекцию будете пересматривать чтобы вы вот это вот не забывали

что это вот оно и есть чтобы когда вы лекцию будете пересматривать чтобы вы вот это вот не забывали что Y предсказанный это и есть то что как бы умножение На веса да А теперь у нас умножаем на что ещё Теперь мы проваливает вот сюда вот да И теперь у нас Омега 0 как Константа а вот Омега 1 нет что останется Омега 1 по ней мы ведём по ней бем производную Дага вот здесь вот внутри да то есть мы производную этого смотрим вот этого И вот этого что остаётся Омега 1 сейчас так X и Омега 1 мы от него

этого смотрим вот этого И вот этого что остаётся Омега 1 сейчас так X и Омега 1 мы от него берём производную Угу такн А что Омега о остаётся Разве в когда ты берёшь производную 2x она у тебя равна двум ты оставляешь константу Ой ты какой приме точнее равна она иксу неправильный пример привёл То есть у тебя же у тебя Омега в роли икса а X в роли константы тебя наверное это Путает ты берёшь производную не по иксу а по Омеге Антон вроде минус чуть-чуть по марочка вот перед v0 должен быть минус по

не по иксу а по Омеге Антон вроде минус чуть-чуть по марочка вот перед v0 должен быть минус по идее поняла Люба что я имею в виду Да я просто не помню Напомните пожалуйста 2x Чему равна производная производная 2x равна Д остаётся константе тогда будет умножаем на X ИТ Ино зае ми в нашем случае Вот такая история То есть если Вы посмотрите Градиент на самом деле простой здесь он говорит ребят просто посмотрите разницу реального и предсказанного и Это уже вам даст ответ в какую сторону надо идти

посмотрите разницу реального и предсказанного и Это уже вам даст ответ в какую сторону надо идти да здесь Градиент помимо реального и предсказанного дельты Да ещё надо множить на X Вот вот так вот устроено но тем не менее мы с вами собрали в принципе самою сложную туку здесь это Градиент этой функции у на есть чтобы жизнь свой наш с вами Первый искусственный интеллект потому что ну это в принципе можно классифицировать как искусственный интеллект создано всё чтобы его обучить по крайней мере в

можно классифицировать как искусственный интеллект создано всё чтобы его обучить по крайней мере в теории Да Саша я правильно понял что у нас производная по v0 это 1 / N и сумма 2 у y ми Y крыше Не -2 потому что мы выносим ми1 по итогу ещё вот этот минус сюда вынести или что нет нет ну вот то что у нас мину о стоит на на с крышечкой Это что Это стрелочка это стрелочка Да это [музыка] стрелочка Я сейчас здесь напишу уже в конечном виде Градиент Итак Градиент у нас с вами первая координата 1

Я сейчас здесь напишу уже в конечном виде Градиент Итак Градиент у нас с вами первая координата 1 сумма сумма с ми прох на Да здесь промахнулись на столько-то Ну короче вы поняли На каждой точке всё по-разному Итак 1 де сумма потерял МИД Умно на вообще МИД можно вынести я оставлю здесь чтобы было как бы отдельно усреднение типа я МИД пока оставлю здесь -2 у y I ра ой N = 3 да то есть три элемента выборки Ну запишем Вот так и Второй член Он точно такой же 1 / N в среднем только не просто -2 А -2

выборки Ну запишем Вот так и Второй член Он точно такой же 1 / N в среднем только не просто -2 А -2 у на X1 Да X1 Ну или X ит1 а y - y и с крышечкой всё вот это вот весь наш с вами Градиент скобочки бы добавить под знаком Сигма по каким знакам [музыка] си А да Ну блин не знаю Ну можно конечно добавить мне кажется только наоборот более громославка производная для Омега первого не должно ли получиться там последним членом не X сейчас не X ИТ а мину ИТ А вот я же минус вынес сюда вот смотри он

там последним членом не X сейчас не X ИТ а мину ИТ А вот я же минус вынес сюда вот смотри он просто был Ещё раньше Минус откуда-то Я забыл откуда он пришёл а в самом конце когда мы брали от последней конструкции Y ми ше производную что у нами оме ими а больше не откуда мину взяться мы взяли всего от двух членов мы взяли от квадрата и от того что внутри квадрат точно не даёт минуса то есть только то что внутри может дать минус Всё я понял просто сразу вынес минуса Я думал что там он уже был и

то что внутри может дать минус Всё я понял просто сразу вынес минуса Я думал что там он уже был и поэтому нужно его убить ок вот не до Кон понимаю почему диним за заменя он называется Как вы думаете вот вопрос вам на засыпку и он сегодня вам пригодится поэтому я это озвучу Представьте что у меня была бы не одна переменная а две тогда бы у меня формула выглядела как X1 Омега 1 П X2 Омега 2 п Омега 0 у вас вне вообще 15 переменных было Никто с одной переменной не будет строить модели наи это надо

0 у вас вне вообще 15 переменных было Никто с одной переменной не будет строить модели наи это надо потому в иде было сложнее устроено чем причина следственно история от одной переменно и недвижимость не является исключением так вот и тогда бы когда мы бы брали Омега 2 Вот вы можете мне сейчас с коду уже назвать чему была бы равна производная по Омега 2 X2 просто ид Ну сходу да Надо подумать ещё Ну сходу тогда правильно Вот а если поглубже чучу Ну если ВС остальное константы Омега будет всё

Ну сходу тогда правильно Вот а если поглубже чучу Ну если ВС остальное константы Омега будет всё тоже самое будет всё тоже самое просто у вас где-то внутри будет ещё член X2 Омега 2 и когда вы будете брать производную по нему останется не X1 а останется X2 то есть будет -2 у X2 y - y предсказано всё всё остальное зану Ну там 1 де сумма вот так далее Вот именно поэтому я здесь тащу единичку у меня од переменная новый сегодня будет не один столбец Это я полегче задание выбрал у тебя посложнее

од переменная новый сегодня будет не один столбец Это я полегче задание выбрал у тебя посложнее будет Ну вот у меня вопрос тоже по производной угу вот у нас выражение 1 де N сумма Y ИТ минус вот эта формула линии с Весами и мы получается от неё уже по итогу берём производную вот а почему у нас так и остаётся Y с крыше если Y с крышечкой это вот это вот X1 V1 + X2 V2 Вот они остаётся просто вот не зану ется остальное по которому мы не берём производную А вот также остаётся производная X ква ра

зану ется остальное по которому мы не берём производную А вот также остаётся производная X ква ра 2x Если я правильно понял поэтому когда мы берём то есть производная от того что возводится в квадрат это два таких А всё Всё я понял А вот уже во второй части когда вовнутрь проходим там уже пропадает я понял спасибо этот по X2 не не уреня надо надо надо усреднить просто я поленился написать так-то всё правильно типа 1 де N сумма здесь будет так всё у меня нет второй переменной поэтому у меня

всё правильно типа 1 де N сумма здесь будет так всё у меня нет второй переменной поэтому у меня только Градиент из двух координат состоит так так так всё Теперь всё убираем Ну что же у нас с вами как будто бы есть всё чтобы Стать чуточку умнее и обновить веса как будто бы есть всё для этого а значит пора А значит пора Итак А мы сейчас с вами будем считать Омега 0 Омега 1 пер но поступим мы поинтересней Ну есть о0 Омега 1 перво это что у нас будет с вами Диктуйте сначала наша точка в которой мы

Ну есть о0 Омега 1 перво это что у нас будет с вами Диктуйте сначала наша точка в которой мы находимся 1 -2 правильно Угу ми -0.1 У да -0.1 у на Градиент вот Градиент L мы пока с вами ещё не знаем нужно посчитать его для трёх точек смотрите вот предсказание уже есть для этих значений вот мы их с вами посчитали да мы сейчас с вами разделимся мы сейчас с вами разделимся чтобы вы поупа и поняли Как это работает Давайте будет у нас три команды Каждая команда ответственна за одну из точек первое вот

работает Давайте будет у нас три команды Каждая команда ответственна за одну из точек первое вот толубай Саша вам нужно посчитать внутреннюю часть внутреннюю часть первого и второго и написать две координаты в чат То есть не усреднять если успеете хотите уреня Но в чат Напишите именно свою точку и между собой потом за ВТО топ [музыка] с первую точку толубай Саша и Люба вторую точку Костя Настя и Серёжа Кудинов а Бул Дима и Серёжа се нашов третью точку что вам нужно сделать Вам по факту нужно

и Серёжа Кудинов а Бул Дима и Серёжа се нашов третью точку что вам нужно сделать Вам по факту нужно взять свой Y конкретный ну вот на примере Давайте третьей точки свой Y то есть вот он свой и с крышкой то есть своё предсказанное А вот самый жёсткий Градиент должен быть у третьей точке промах самый большой там наказание должно быть самое жёсткое и в принципе всё А ну ещё вам X нужен будет ваш для почёта градиентов второй координаты и так у всех собственно говоря у всех трёх пока Посчитайте Если

почёта градиентов второй координаты и так у всех собственно говоря у всех трёх пока Посчитайте Если есть какие-то вопросы спрашивайте А я немножко в код это сейчас запишу и мы с вами Слегка по кодим Ну так на Лайке Я правильно понял что по идее у нашей команды Градиент ноль потому что мы попали же прямо в точку и нам не нужно никуда двигаться очень хорошую интерпретацию то есть когда Градиент нулевой алгоритм ну точка говорит ребята У меня всё классно мне ничего не нужно менять потому что

нулевой алгоритм ну точка говорит ребята У меня всё классно мне ничего не нужно менять потому что Представьте если бы здесь был Градиент ноль да то есть мы бы не поменяли вес Никак это кстати хороший пример того чтобы осознать Что такое Градиент на самом деле но не тут Градиент ноль В смысле Ну вот у вас Градиент ноль вторая точка без капризов сейчас каждая точка будет капризничать и говорить что она хочет А мы будем как бы в среднем их слушать Понятно так вот ваша точка её всё устраивает уже

она хочет А мы будем как бы в среднем их слушать Понятно так вот ваша точка её всё устраивает уже она говорит ребят веса по мы никуда не двигаемся Или как это представить Ну да да Ну представь если бы это была только одна точка Вот чему бы равнялось бы вот это выражение Ты куда показываешь А блин я вот Представь что это была бы только одна точка ингредиент ноль чему бы равнялось бы обновлённые веса Вот я и говорю что получается что те же самые веса поэтому те те же самые это точка же довольна

Вот я и говорю что получается что те же самые веса поэтому те те же самые это точка же довольна она у неё ошибка ноль Мы с неё Нида не двигаемся и н минимизирует ошибку А вот что не скажешь например про Третью точку Ребята это сечас ощутят к третью точку считают но как бы и вы тоже ощутите Давайте неожиданно неожиданно мы уточнили данные тут оказывается не 05 было а 07 это печатка была там в базе данных нас 07 неожиданно оказалась преза ми 0.4 что ли ми4 Всё верно Ну то есть промахнулись вы ВС

данных нас 07 неожиданно оказалась преза ми 0.4 что ли ми4 Всё верно Ну то есть промахнулись вы ВС но у вас всё равно на точке самый маленький промо но всё-таки пром Ну что ж Давайте тогда А что уже все ВС пишут я ещё даже кодить ну знаходить будем вместе вы дова пока дова пока просто начну А там уже дальше вместе пойдём если кому-то непонятно задание можете спросить [музыка] меня а Так ну что там как у вас дела Все посчитали или нет ещ вижу что много пишут сер Мы разошлись Мы же Дин чисто

там как у вас дела Все посчитали или нет ещ вижу что много пишут сер Мы разошлись Мы же Дин чисто смотрим Ну сам вро вроде Да сечас может я-то не так пере Я посчитал только то что вы квадрат скока как сказал Дада каж де Давай Давайте вместе разбирать что мне понадобится Ну как бы я не претендую сечас что правильный Код да Точнее правиль с точки зрения хороших красивых стандартов нам главное сейчас поня кодди мне предсказать что мне нужно по факту Мне нужны мне нужен мой X и мне нужен мой Омега

поня кодди мне предсказать что мне нужно по факту Мне нужны мне нужен мой X и мне нужен мой Омега правильно по-хорошему я вот так подпишу Y prediction это А вот кстати вопрос ещё очень такой важный очень важный момент вот смотрите у меня по факту сейчас есть X1 Да и он у меня там содержит значение 1 0.7 и ми той миста ло координаты и два веса омега-1 и омега-2 предположим здесь 2 3 и -5 это вам сегодня пригодится на практике и вот у меня есть два каких-то значения веса омега-1 омега-2 вы знаете

пригодится на практике и вот у меня есть два каких-то значения веса омега-1 омега-2 вы знаете как без цикла фр без цикла фр можно получить чтобы я умножил для первого На веса и сложил для второго и для третьего какой-нибудь матри Яно итоговая размерность у нас какая с вами получается 3 на о на о на о и тогда например Давайте второй объект что бы из себя представлял в этой матрице 1 + 2 2 или ты а второй 07 да то есть получается мы бы вот это бы смели вот с этим Да и получили бы как раз

или ты а второй 07 да то есть получается мы бы вот это бы смели вот с этим Да и получили бы как раз предсказание для второго элемента поэтому я могу написать как бы сразу через матричное умножение здесь у себя а получается мне надо X даже Давайте вот X большой буквы поставлю так часто обозначают X собачка Омега Но мне ещё надо добавить константу Вот как это сделать-то Для этого мне надо Ну здесь по-хорошему именно конкретно для нашего случая Омега О получается то есть мы доно X на Омега 1 и

по-хорошему именно конкретно для нашего случая Омега О получается то есть мы доно X на Омега 1 и добавляем Омега 0 вот так давайте простим Можем ли мы предсказать уже предсказать при текущих весах и и входных данных таких получить предсказание не можем матрицы не умножили А ну я во-первых ничего не возвращаю зал но дело всё равно не в этом так так так же разны размерности не А нам не надо транспонировать вот это вот который чтобы был строка или на пай без разницы А так А у меня Омега вообще

вот это вот который чтобы был строка или на пай без разницы А так А у меня Омега вообще почему-то пустой потому что Омега да нет ну внутри функции это Омега ты функцию не вызывал я а нет вызывал дать дал стра 1 Ми 2 а почему он пишет что у него а Омега 1 там Константа лежит Всё я понял я понял понял понял Ну типа по-хорошему надо то что он хочет чтобы мы отдельно это обернули чтобы мы это отдельно обнули это совпало только для этой истории поэтому Ну можно наверно вот так пописать вот точнее

обнули это совпало только для этой истории поэтому Ну можно наверно вот так пописать вот точнее это только здесь так будет вам не придётся так делать Это связано с тем что у меня одна переменная и то на меня ругается а что ему не нравится А понятно блин как один элемент обернуть в нам список есть тройка как её сделать N какой-то тип данных А что он тогда у меня ругается то может на в скобочках и квадратных ещё скобочках понял я посмотрел вроде здесь-то нормально не здесь так не всё равно

и квадратных ещё скобочках понял я посмотрел вроде здесь-то нормально не здесь так не всё равно ругается должно работать правильно и он всё равно мне а надо только вот тогда сделать-то вот так m. вот это Сюда Тоже поставить чтобы посмотреть шейпы почему шейп то неудачный у него если я вот так выведу минус Д А что он не орнул у нас с вами почему-то не обернул Омега 1 МИД видите он доставил минус двойкой А хотя должен был обернуть в NP как это я сделал вот собственно говоря вот здесь ровно

двойкой А хотя должен был обернуть в NP как это я сделал вот собственно говоря вот здесь ровно аналогичная история с константой она обернулась она обернулась А вот это не обернулся почему-то [музыка] Почему давайте я сейчас ста у прощу здесь я матричное умножение уберу чтобы сейчас просто не тратить время или в перерыве Может быть давайте я поставлю пока что здесь просто Умножить Это это работает только в случае если у вас одна переменная только так всё а потому что ну с одним столбцом и просто

только в случае если у вас одна переменная только так всё а потому что ну с одним столбцом и просто X1 Уно на Омега 1 достаточно А вот для двух столбцов уже так бы не получалось Итого собственно говоря Вот они у меня предсказания -1 -0 4 и 3 это ровно вот эти предсказания которые у нас вами есть стартовые правильно вот теперь что нам с вами надо делать нам нужна функция градиента правильно предикт уже есть Так Ну давайте сделаем вот так сделаем deriv Омега 0 здесь у меня будет для него что

уже есть Так Ну давайте сделаем вот так сделаем deriv Омега 0 здесь у меня будет для него что нужно для него нужен X Омега и всё по факту да или нет производная по омега-1 у нас с вами Чему равна производная по Омега 1 равна по о0 точнее Ми 2 на Y ми Y предсказано То есть у нас с вами будет МИД Здо Y поэтому Y на вход надо подать вот реально значение А у нас реально значение вообще я ещё не задал это 1 ми 3 у что получается у нас с вами здесь умножить на точнее на Y ми Y предсказанное А

задал это 1 ми 3 у что получается у нас с вами здесь умножить на точнее на Y ми Y предсказанное А предсказанное мы можем с вами получить через функцию Дик Да я бы лучше Вот так написал здесь Y Радик сюда подаём X и Омега да А вот этот Y записываем сюда всё формулу собрали Верно Давайте попробуем сказать что А В текущей точке в которой мы сейчас находимся в текущий оган и при таких игх чему у нас равны градиенты вот смотрите у у тех у кого была первая точка У них Градиент по Омега должен был

равны градиенты вот смотрите у у тех у кого была первая точка У них Градиент по Омега должен был получиться ми4 получился толубай Саша Люба по-моему Да вот у тех у кого была вторая точка вторая точка У вас должен был получиться ми 08 градин А у бы трея точка должен бы 12 получиться Обратите внимание Насколько больше третья точка 12 причём третья точка хочет чтобы мы пошли в сторону увеличения этого веса согласны а точнее уменьшение наоборот уменьшение Мы лежим на возрастани О го ребят вес надо

веса согласны а точнее уменьшение наоборот уменьшение Мы лежим на возрастани О го ребят вес надо делать меньше чем вот это значение первая точка наоборот чет первая и вторая хотят увеличить вес То есть мне расходится это нормальная история в данных всегда такая вет с ре слышали и просто усредни усреднить можно прямо здесь точками да Всё теперь Омега 0 - это средни Градиент средний 2.4 да Люба Вот первую точку у нас же было Омега и Омега 1 и там же два градиента а я я Елово зде ука од

Люба Вот первую точку у нас же было Омега и Омега 1 и там же два градиента а я я Елово зде ука од производную права теперь производную по Омега 1 сейчас тоже Будем считать что мне нужно в производной по Омега 1 изменить здесь кто подскажет добавить X умножение на X Да добавить умножение Ну в данном случае прямо на X1 У меня всё Давайте проверим всё тоже самое как здесь частная производная по Омега получились Такие значения опять похоже на правду или нет Те у кого бы первая точка ми4 У кого

Омега получились Такие значения опять похоже на правду или нет Те у кого бы первая точка ми4 У кого вторая ми 056 у кого третья -12 нам опять надо всё это дело схлопнуть точка мин тогда средняя средняя почему она меня не усредни А я понял надо вот так у соединить так точка мин вот ми 552 то есть Обратите внимание в разные стороны у нас вет Но ничего страшного Так ну что ж у на есть чтобы обновить веса Давайте Ну давайте проделаем эту операцию хотя бы ну давай 10 раз Для начала я назву эту

веса Давайте Ну давайте проделаем эту операцию хотя бы ну давай 10 раз Для начала я назву эту перемен потому что одна Эра обновления весов называют эпохой вы может слышали от старшей группы они говорили мы обучали там нейросеть на пяти эпохах на де эпохах на Д эпохах одна Эпоха - это одно обновление весов так принято называ самом дерева выстраивала общая картинка Да поэтому можете смело назвать это эпохами 10 эпох Так что у нас ещ с вами нужно у нас с вами нет да давайте пропи пря цель у нас

это эпохами 10 эпох Так что у нас ещ с вами нужно у нас с вами нет да давайте пропи пря цель у нас будет 0 Ну как будто бы всё поехали назовём это Эпоха Давайте о э начинаем обучаться вот здесь нам нужно сделать то что вы делали по факту вчера в цикле в нам нужно посчитать новые значения ога ога и смотрите мы по-хорошему то с вами его отдельно считаем Да потому что а нет А знаете что я забыл сделать я забыл Градиент сделать Градиент это Вектор частных производных правильно имен Градиент нужен

я забыл Градиент сделать Градиент это Вектор частных производных правильно имен Градиент нужен поэтому я всё подаю также и возвращаю Вектор из двух координат то есть NP Вектор из первая координата это вот эта функция что возвращает А вот это то что вторая функция возвращает вот так то есть мне же именно Градиент нужен и Давайте посмотрим как Градиент выглядит вот здесь должен быть 24 - 552 всё корректно Вот это наш Градиент то есть возвращаясь к нам смотрите у нас вот эта точка С вами есть Есть

Вот это наш Градиент то есть возвращаясь к нам смотрите у нас вот эта точка С вами есть Есть И сейчас мы вот здесь с вами получили 2.4 - 5.52 и у нас есть всё чтобы обновить эти веса прямо в самом скелете модели мы всех послушали все точки высказали свои пожелания как они бы хотели обновить веса но мы уреня и в общем собственно говоря делаем сдвиг делаем сдвиг поэтому поэтому поэтому что мне здесь писать с точки зрения кода Давайте ещё все базовые вот эти вещ мину лямбда умножить Ну минус вызов

писать с точки зрения кода Давайте ещё все базовые вот эти вещ мину лямбда умножить Ну минус вызов функции можно написать у на Градиент Градиент нужно подать нам X Омега и y да на самом деле подавать не в таком порядке было ладно име сначала поть так в моём случае X1 подал текущие веса подал Y подал всё новые веса есть Давайте попробуем вообще один раз обновиться обновляются у нас веса хотя бы один раз не обновляются А ещё не создал вот один раз Обновили веса были у нас веса с вами 1 МИД стали

раз не обновляются А ещё не создал вот один раз Обновили веса были у нас веса с вами 1 МИД стали 0764 48 теперь нам на это надо проделать итеративности что дальше делаем V C равно V New да То есть перед следующей итераций то что было новым становится текущим верно Ну и здесь мы можем вывести всякие плюшки там или сохранить результаты Если это нам надо Ну давайте просто будем выводить а прин напишем а текущие веса А мы прошед эпохой перед эпохой перед эпохой и сюда подаём переменную Эпоха Да

а текущие веса А мы прошед эпохой перед эпохой перед эпохой и сюда подаём переменную Эпоха Да текущие веса текущие веса модели текущие веса модели какие у нас получаются Омега ка всё вот это будем выводить А дальше обновлять сейчас проверим вот что-то получилось ещё можно сделать знаете как можно сделать м чтобы разделял какая-нибудь была множить Ага То есть смотрите вот перед эпохой один текущие веса модели были 1 -2 и вот мы поехали обновлять обновлять обновлять я сразу скажу что я подбирал

веса модели были 1 -2 и вот мы поехали обновлять обновлять обновлять я сразу скажу что я подбирал по-моему чтобы были идеальный набор весов естественно я сам подобрал что идеальная точка есть по-моему ЕС мне память не изменяет -21 то есть наоборот -21 вот проверим если Омега 0 Ми 2 а X1 ра едини Нет нет нет что я подбирал я забыл может быть 1 Ми 2 а или 2 - 1 2 - 1 Во вот такие веса 2 - 1 вот тепер проверьте действительно если X1 у на дво и вычи Омега 0 только мне нужно их в другом порядке

тепер проверьте действительно если X1 у на дво и вычи Омега 0 только мне нужно их в другом порядке задать вот так -12 -12 точка Теперь X1 у Омега 1 над это 2 ми е - это едини да Но эту точку Так как мы её поменяли немножечко она теперь не совсем совпадает А совпадала раньше при 05 полностью Ну и третью точку посчитаем -1 миста надо стремиться к этой точке надо стремиться как бы идём мы в эту сторону с вами или нет в сторону -12 но как будто бы идём правильно смотрите отрицательный вес пошёл в

с вами или нет в сторону -12 но как будто бы идём правильно смотрите отрицательный вес пошёл в положительную сторону положительный вес пошёл в отрицательную сторону и вроде как всё в порядке но мы не дошли ещё просто 10 итераций мало Давайте возьмём 30 итераций 30 эрай куда-то всё двигается куда-то всё двигается да Так я можно чуть выше код этот смотри там же первая точка попала вот мы выбрали случайную случайные веса v0 и V1 Ну и омега-1 и первой точкой мы попали поэтому она нам сказала никуда

случайные веса v0 и V1 Ну и омега-1 и первой точкой мы попали поэтому она нам сказала никуда не двигаться но мы изменились в 076 и чего-то там ещё потому что мы смотрим сразу по трём точкам да Угу Правильно Да да да спасибо Сейчас мы ещё график зарисуй чуть-чуть после перерыва и увидите как это происходит достаточно красиво так Матрица приумножаем X тот Я уже из контекста выпал если это ещё актуально Саша можешь озвучить я чат просто открыл Ну я спрашивал про то что повыш чуть код Ну вот здесь

Саша можешь озвучить я чат просто открыл Ну я спрашивал про то что повыш чуть код Ну вот здесь Да да да Мы же должны по идее подать Ну вот у нас X1 это Матрица строка сейчас вот и чтобы сделать 3 о Надо же транспонировать по идее X1 Или я не прав а не 1т было чтобы Ну именно в данном случае пра точки зрения алгебры но помоему в коде Он про игнорирует этот момент то есть именно как бы ну разработчики на сделали что пофиг 1 он построится под ситуацию если можно умножить сам трансни в голове у

на сделали что пофиг 1 он построится под ситуацию если можно умножить сам трансни в голове у себя а то есть ему неважно строка пом Я точно не помню по-моему так поему так Ну проверь просто то есть для многомерных это конечно важно и Матрица не Умно вот 30 эпох Давайте запустим не знаю 50 эпох куда мы с вами приходим Ну видите немножко что-то первая координата не идёт в ми1 но я думаю это на совести второй точки которая стала вместо 05 07 по что если я поставлю 05 сюда Давайте вот не сюда а вот

второй точки которая стала вместо 05 07 по что если я поставлю 05 сюда Давайте вот не сюда а вот сюда подставлю 05 как было изначально то как бы видите мы топаем ровно в точку да то есть всё хорошо Ну подгон чистейший конечно с моей стороны но принцип как бы самое главное что обучение идёт и обучение идёт прекрасно и мы идём в нужную сторону Мы можем с вами взять вообще другую точку старта Давайте попробуем взять точку Ну например Давайте теперь вот эта координата пусть будет -4 А вот эта Сем и

попробуем взять точку Ну например Давайте теперь вот эта координата пусть будет -4 А вот эта Сем и вот он собственно говоря идёт идёт идёт и всё равно идёт к этой точке идёт к этой точке А это напоминает уже полноценная модель машинного обучения просто не обёрнутый красиво вот так вот да Ну мы можем с вами смотрите вот 20 эпох мне не хватает Да ну тут Ладно всё за секунды считается не хватает можно где-то газок поддать да нй повыше ставить мы соответственно выше будем шагать Но это видите

можно где-то газок поддать да нй повыше ставить мы соответственно выше будем шагать Но это видите чарова тем что я похоже перепрыгнул точку а ну у меня 0,7 стоит ладно ну 0,5 поставим вот с таким с таким ретом мне вообще хватает 20 эпок чтобы прийти к своей точке практически но всё остальное это уже игрушка игрушка вот он градиентный спуск в контексте машинного обучения Классно Мне кажется Классно Это очень круто Давай то сделаем перерыв сейчас небольшой А сечас 36 минут 46 с вами продолжим ну

Это очень круто Давай то сделаем перерыв сейчас небольшой А сечас 36 минут 46 с вами продолжим ну там буквально самом деле нам минут 10-15 осталось посмотрим с точки зрения графика и посмотрим и поговорим сегодняшнее задание сегодняшнее ваше задание а может если 15 минут осталось то Может не стоит стоит Думаю нет Думаю стоит Думаю нет лучше кур Да лучше Тогда тогда курим да давайте 46 продолжаем Так ну что давайте возвращаться так я здесь в принципе ка добавил роче добавил кодовый участок ой

Так ну что давайте возвращаться так я здесь в принципе ка добавил роче добавил кодовый участок ой кодовый добавил просто всё тоже самое что у нас было просто добавил ещё отрисовку графика чтобы посмотреть как в моменте всё это у нас происходило давайте сделаем паузу побольше пусть будет пото секунды так то есть смотрите вот вот Стартовая инициализация у нас была видите сильный промах тут вот изза того что на второй точке мы сразу попали тут е третья точка ой втора Вот они 1 2Т вот три точки

того что на второй точке мы сразу попали тут е третья точка ой втора Вот они 1 2Т вот три точки выборки у меня были и модель пытается собственно говоря сделать высад так чтобы предсказательная история Да максимально аппроксимировать точнее Вот наши веса в принципе как-то так как-то так Ну получается что мы приходим причём соответственно точки могут быть необязательно ровные Да вот у меня здесь 05 была Давайте поставим 07 как было паузу Чуть поменьше Вот они собственно говоря он пытается

05 была Давайте поставим 07 как было паузу Чуть поменьше Вот они собственно говоря он пытается подобрать оптимальным образом Ну вот такое положение прямое он видит как ну очевидно что прямой линии я не смогу соединить все эти три точки то есть Лоса нулевого я достичь не смогу все это понимают нулевого именно Лоса да то есть вс-таки некая Дельта есть Ну вот после д эпох вот так вот он посчитал что веса надо поставить Напоминаю что он минимизирует у нас с вами он минимизирует вот эти расстояния

веса надо поставить Напоминаю что он минимизирует у нас с вами он минимизирует вот эти расстояния изначально Они были очень большие но вот эти вот расстояния он минимизируют квадрат этих расстояний это наша Лос функция пытаясь подобрать вот эти параметры прямой То бишь веса таким образом тоже самое делают и нейронные сети просто этого никогда уже не нарисуешь потому что пространство будут очень большие Да вот и нейроны сети или какие-нибудь нелинейные алгоритмы способны были бы построить что-то

Да вот и нейроны сети или какие-нибудь нелинейные алгоритмы способны были бы построить что-то такое для них это бы не служило бы никакой проблемой может быть они бы лучше были но здесь конечно очевидно Линейная зависимость шум в данных всегда будет и небольшие отклонения они никаких проблем нам не доставляют мы вообще можем с вами сгенерировать немножко по-другому X Y давайте сгенерирует как вот например пусть у меня X1 ра то а не давайте сгенерирует 100 точек а Y действительно имеет линейную

например пусть у меня X1 ра то а не давайте сгенерирует 100 точек а Y действительно имеет линейную зависимость То есть это пусть будет д з X1 плюс всегда как я говорю плюс шума наложу слегка шума NP Random тоно у меня раз 100 точек 100 точек да ра 100 Сай равно n здесь просто N поставим и шум в основном его нету но пусть он будет небольшой там знаю 0.5 поставим дипер точнее стандартное отклонение ра точку надо где точку надо 05 там запятая вместо точки стоит то есть вот всё равно обучение идёт

ра точку надо где точку надо 05 там запятая вместо точки стоит то есть вот всё равно обучение идёт это есть искусственный интеллект нами с вами созданный обучение идт Конечно есть множество нюансов контекст и так далее но вот само сердце обучения вот собственно говоря после д эпох такая история мы ещё можем с вами добавить вообще говоря Лос Да который мы минимизируем вы его тоже по факту надо мониторить всегда да то есть когда вы будете обучать алгоритмы вы будете смотреть наемся дава сжи

мониторить всегда да то есть когда вы будете обучать алгоритмы вы будете смотреть наемся дава сжи Давайте вместе с вами реализуем функцию абсолютно значение разни Ну у нас ло с вами Вот она формула вот ну или вот сюда y - y предсказано Поэтому я предлагаю сделать как то есть мы берём Y ми Y prediction Для этого мне надо yic для это текущий Омега Ну X всегда один текущий Омега вот Y прит так как это нампа история то всё нормально сделается нуно и нам надо с вами собственно говоря возвести это в

нампа история то всё нормально сделается нуно и нам надо с вами собственно говоря возвести это в квадрат правильно возвести в квадрат потому что у меня в формуле стоит квадрат то есть вот я y - y в квадра и ещё надо усреднить пишем точками точками всё и мы можем с вами выводить ещё знаете что сюда Эпоха текущие веса и пропишет Лос текущий текущая Ну или текущая Ну текущий Лос правильно текущая ошибка не совсем так текущий Лос и сюда подадим вызов функции Лоса вы функцию Лоса е вообще можно

ошибка не совсем так текущий Лос и сюда подадим вызов функции Лоса вы функцию Лоса е вообще можно отдельно посчитать здесь назовём current loss Вы же тоже вчера помните фиксировали Какой у вас oss был да то есть минимальное значение То есть это будет oss от моих X1 что там ещё по аргументам Омега и y вот так так так Ну что же а Рена не сделал Точнее нере не сделал канс надо написать в текущий Лос Всё что-то я ещё хотел сделать А ну я хотел Давайте ещё А ну ладно пусть так будет хоя сюда добавим

Всё что-то я ещё хотел сделать А ну я хотел Давайте ещё А ну ладно пусть так будет хоя сюда добавим ещё oss равен loss вот так вот ну что же сейчас сек ещё Давайте округли немножко чтобы Громо не было хотя бы до двух знаков после запятой Ну или до трёх всё вот он наш Лос с вами идёт видите он уменьшается мы всё меньше ошибаемся мы становимся всё умнее и умнее в контексте нашей задачи с которой мы столкнулись а идеального нуля здесь не получится Я думаю все понимаете да то есть прямой линий

мы столкнулись а идеального нуля здесь не получится Я думаю все понимаете да то есть прямой линий пройтись по этим точкам нельзя но и как бы Нафиг это и надо на самом деле Лос и так очень маленький это очень маленький Лос МС Так что кайф кайф Ну вот в принципе ну я то что это красивее чем битва с рихо в е маке третьем на соба это красивее это красивее это красивее чем бита с Энриком геральтом Ну значит всё серьёзно здесь Да Серж а у меня такой вопрос Мы будем это потом изучать или нет Почему

значит всё серьёзно здесь Да Серж а у меня такой вопрос Мы будем это потом изучать или нет Почему именно выбираем ти не абсолютная ошиб в ЧМ принципиальная разни можно в принципе тоже но принято по двум вещам во-первых имеет вот такой вид график модуля когда производная встречается а мы же бурум постоянно Градиент нашей функции правильно Градиент Лоса То бишь берём производную когда есть вот короче производная не любит вот такие вот зубчики короче переводе сут у него производна везде существует

производная не любит вот такие вот зубчики короче переводе сут у него производна везде существует это первая причина чтобы просто себя обезопасить от неадекватных результатов понятно Да вот вторая История - это тупо статистическая история то есть мсе выведена Ну если простыми словами говорить очень простыми словами то вот это тоже случайные величины как вот в статистике есть те вероятно они случайны нам нужно подобрать и найти их матожидания так вот чтобы их наилучшим образом приблизить с

случайны нам нужно подобрать и найти их матожидания так вот чтобы их наилучшим образом приблизить с именно минимизация вот этой функции Дат наиболее точ Омега там есть большое Полотно вывода как это выводится Ну короче это тупо статистически статистически доказано что эти Омега будут наилучшими на тривиальной зада разницы не будет на более сложных Разница есть и считается что причём как бы говорю можно писать кастомные лосы То бишь свод одно однозначным победителем в частоте применяемости

можно писать кастомные лосы То бишь свод одно однозначным победителем в частоте применяемости конечно является и у вас должна будет проводиться в параллель в голове что когда речь идт это вот минимизация минимизация нашей функции я Чита наказы на следующий день так ну собственно говоря вернёмся к слайдам Да тут просто всё коротко записано то есть вот оно наше уравнение X1 Омега 1 П Омега 0 В общем виде формула бы выглядела вот так кстати вопрос вам на засыпку если в 2D это Прямая линия в 3D что

виде формула бы выглядела вот так кстати вопрос вам на засыпку если в 2D это Прямая линия в 3D что это будет Да плоскость да то есть не Прямая линия уже а плоскость да А в случае мерного пространства это называют мерная гиперпк то есть мы её визуализировать никак не можем Но мы знаем что она подчиняется линейному закону линейному вот ну тут собственно говоря минимизация ошибки ровно то что мы с вами проделывали Да а рисунок собственно говоря мы его с вами даже получили такой же примерно вот ну

проделывали Да а рисунок собственно говоря мы его с вами даже получили такой же примерно вот ну регуляризации модели оставим на завтра это небольшая добавочным регуляризации моделей на завтра по поводу сегодняшних заданий что вас сегодня ждёт что вас сегодня ждёт так Сегодня четверг Да у нас четверг Вам нужно будет сделать реализовать свой класс линейной регрессии полноценный класс который можно обернуть и люди могли им пользоваться закинуть вам файл C вишни например А вы дали бы ну вернули бы

обернуть и люди могли им пользоваться закинуть вам файл C вишни например А вы дали бы ну вернули бы модель которая способна предсказывать здесь в принципе основные вещи прописаны единственно смотрите вот здесь вот по поводу регуляризация вот вире вот эти чтобы их сделать нужно в прямом смысле слова изменить три-четыре символа в коде да то есть это как бы основную информационную нагрузку это вообще не несёт Так что мы это с вами Обсудим завтра по заданиям Это только десятый пункт В этих ну

вообще не несёт Так что мы это с вами Обсудим завтра по заданиям Это только десятый пункт В этих ну короче последний десятый одиннадцатый там девятый не помню что нужно сделать у вас будет две выборки у вас будет две выборки в котором будут две фичи фича фича Таргет все уже различают терминологию да В чём разница фичи и таргета все понимают лыба димам да то есть фича это у нас с вами вот эти иксы а Y это та точнее это это на фих мы обучаем тагет предсказываем та хорошо нам удаётся предсказывать

а Y это та точнее это это на фих мы обучаем тагет предсказываем та хорошо нам удаётся предсказывать ч Тут даже не предсказывать скорее оценивать Да оценивать объекты недвижимости У нас есть М2 У нас есть distance Кстати когда вы сделаете сегодня свою модель класс Вы можете взять свой новский датасет И прогнать через него через эту модель если сделать в общем виде далее Всё по заданиям обязательно нужна нормировка вот смотрите есть такое понятие взрывающийся Градиент я не просто так беру

нужна нормировка вот смотрите есть такое понятие взрывающийся Градиент я не просто так беру маленькие значения по ИС Обратите внимание Я везде генерирования икса потому что есть такая проблема есть такая проблема сейчас у меня возможно зави зависнет компьютер а так всё работает Представьте Если бы я взял бы какие-то большие значения по иксу например не знаю давайте возьмём 3 3 и7 вот так вот смотрите видите взрывается Градиент пошли большие координаты я торможу пока у меня не зависло всё

смотрите видите взрывается Градиент пошли большие координаты я торможу пока у меня не зависло всё полетел это называется проблема взрывающей Градиент есть взрывающийся Градиент это происходит из-за того что вот здесь X1 тоже есть в формуле если он у вас ор большой то модель Ну вот так математика устроена начинает вести всё некорректно поэтому нормировка данных нужна ещё и в этом контексте обязательно Помимо того чтобы переменные между собой выровнять нам ещё с вами нужно чтобы нам с вами ещ

Помимо того чтобы переменные между собой выровнять нам ещё с вами нужно чтобы нам с вами ещ нужно чтобы н неболь то есть когда я здесь делал Обратите внимание у меня X вот от мину до о чтобы на всякий случай не взорвалось понятно что в реальности данные измеряются в миллионах миллиардах в тысячах и так далее но для этого у нас есть на подстраховки стандарт СР и его Бригада вся Там и так далее которые нам в этом помогут то есть не забудьте пожалуйста предварительно ОТР данные которые у ва ВС

которые нам в этом помогут то есть не забудьте пожалуйста предварительно ОТР данные которые у ва ВС устроено Ну и идут задания то есть создать класс и его конструктор класса Ну что нам нужно lear inputs и то inps как бы можно не указывать здесь если считаете что тут можно спроектировать там двадцатью разными способами поэтому не держите у себя в голове что вот есть едино правильный смело отступайте немножко влево вправо если считаете нужным по-другому оформить класс ВС равно в конце будет

немножко влево вправо если считаете нужным по-другому оформить класс ВС равно в конце будет задание которое будет индикатором того правильно вас получилось или нет Понятно да а N inputs - Это я так понимаю количество операций нет N inputs - Это количество входов X1 X2 X3 X4 почему это важно если у вас один вход то сколько мне нужно весов один Ну вообще с Омега 0 со свободным членом Ну как бы для и для X1 нужен омега-1 а если у меня четыре то мне нужен уже омега-1 Омега 2 омега-3 Омега 4 понятно

для X1 нужен омега-1 а если у меня четыре то мне нужен уже омега-1 Омега 2 омега-3 Омега 4 понятно То есть весов становится больше И поэтому это зависит от от количества входных данных вот собственно говоря здесь прописали всю эту историю вот я это называл Cent как бы в библиотеке отдельно называются это о1 О2 ога а Омега 0 свободный член отдельно записывают в перемен ирп его записывают отдельно Потому что его Градиент немножко отличается от остальных И вот так вот зание Градиент спуск Здесь

Потому что его Градиент немножко отличается от остальных И вот так вот зание Градиент спуск Здесь нужно написать функцию которая будет реализовывать обучение модели вот ну тут как бы ди да чтобы предсказывать Ну и седьмое седьмое - это сравнить свой результат с линейной регрессией с линейной регрессия в элёр вот понятно что не вы первые пишете линейную регрессию ищем В смысле я имею в виду не так вы не будете использовать именно свой класс для этой модели да Или когда Марк делал условно Вам он

вы не будете использовать именно свой класс для этой модели да Или когда Марк делал условно Вам он же запускал линейную регрессию тоже он очевидно Не свой класс какой-то брал А из библиотеки ска наша же задача просто сегрегированный алгебра потому что будет матричное умножение здесь нужна матанализ потому что здесь градиентный спуск здесь машинно обучение фича Таргет т и так далее здесь нужны классы как программирование То есть это задание агрегирующие [музыка] да то есть это просто оценка

классы как программирование То есть это задание агрегирующие [музыка] да то есть это просто оценка качества В каком-то смысле это Лос не совсем так но можно можно как бы так рассуждать вот десятое задание нарисовать 3D график что у вас получилось у вас Линейная регрессия м как Линейная регрессия строит Ну вот 10 со звёздочкой это как раз-таки регуляризация здесь звёздочка мы пока опускаем кто всё сделает успеет может почитать про регуляризации там не так всё сложно на самом деле регуляризация

сделает успеет может почитать про регуляризации там не так всё сложно на самом деле регуляризация линейных модель вот такие вот задания на сегодня я вам скину файл который у нас был с вами вот этот да А могу скинуть вот этот PDF наши рисунки то что мы с вами рисовали и что ещё ещё вам скину видео короче пару ресурсов особенно видео которое вам поможет немножко сгладить кодовое проблемы вы конечно столкнётся помочь в этом да ко я знаешь что расстроился говорим про льные ме и простои и потом

столкнётся помочь в этом да ко я знаешь что расстроился говорим про льные ме и простои и потом нормировка все их опять убивает и мы уходим К безымянным признакам то есть на выходе что модель не сможет предсказать цену по входным данным она что сделает Нет это просто это будет это ну в жизни тоже так устроено называется пайла моделе это у тебя будет ты не будешь видеть глазами то есть это выглядит так что это просто этап прессинга я также подам 50 м да вы сегодня можете Проверить у вас метод

так что это просто этап прессинга я также подам 50 м да вы сегодня можете Проверить у вас метод есть когда ты обу модель ты можешь подать не знаю свою квартиру предположим и посмотреть сколько она стоит просто эта нормировка будет уже следующей неделе мы будем собирать она будет не видна нам пользователь Как вводил так и ведёт свою квартиру и получит результат также нейросети которые например на картинках предсказывают кошка или собака для нейросети важно чтобы размер картинки был один и тот же

предсказывают кошка или собака для нейросети важно чтобы размер картинки был один и тот же Ну тоже не будешь говорить пользователю что Пришлите картинку ровно 200800 пикселе Нет он пошт любую а режешь так То есть этон он необходим для корректной работы и вс будет работать в порядке вещей нормально нормировка нужна только для обучения и для интерпретации результатов а как бы вход и выход будет ровно так как вот мы привыкли видеть Окей ещё в принципе В каком-то смысле чтобы осознать как всё это

так как вот мы привыкли видеть Окей ещё в принципе В каком-то смысле чтобы осознать как всё это происходит [музыка] потому что завтра Логистическая регрессия завтра Появится новая нагрузка с точки зрения машинного обучения и ничего больше то есть классы правила линейной алгебры мата анализа градиентного спуска статистики останутся всеми теми же самыми И вот именно только ML сторону обсудим Поэтому вот чтобы у вас по-настоящему осознать и переварить это будет несколько дней прость выходной там

вот чтобы у вас по-настоящему осознать и переварить это будет несколько дней прость выходной там можете выделить Ну в принципе вроде всё сказал а ну тогда давайте поступаем ровно таким же образом с сегодняшнего дня можно записываться на ревью сегодня мне надо об этом написать завтра я создам Файлик А сегодня мне об этом надо написать Да как бы пока потому что вам ещё нужно немножко переварить но тем особенно Кто идёт вперёд и кто уже понял что к чему происходит какие-то Заки по коду может быть

тем особенно Кто идёт вперёд и кто уже понял что к чему происходит какие-то Заки по коду может быть да Или почему-то ещ мне напишите мы с вами договоримся и обсудим всё Давайте тогда Хорошего дня и успехов на задания на связи пока-пока

так экран видно Да мой запись у меня просто индика вот собственно говоря здесь понимаем что надо умножать ещ на X1 всё на X1 опять перевариваем размерность вот это вот какую размерность имеет вот эта величина 162 на значения 160 Как сказать квадратные метры для 162 квартир правильно их нужно будет умножить их нужно будет умножить на этот эррор если умножить в нампа 162 массив на 162 Как вы думаете Сколько будет не матричном а просто умножить То есть если бы я в нампа сделал бы 1 Умно на 24 В

Сколько будет не матричном а просто умножить То есть если бы я в нампа сделал бы 1 Умно на 24 В таких случаях себя проверяйте я сечас проговаривает такие шаблон для себя рисуете проверяете Как это работает вот 12 у 24 Что даст У меня здесь ска фу такие шаблон рисуете прове Как работа на бумаге или буквально вот такие тестовые микроб так всегда делаю когда сталкиваюсь с конфликтами разме робли жае Сени имеет размерность Какую можно случайными числами это всё за этот случайные числа записать у

Сени имеет размерность Какую можно случайными числами это всё за этот случайные числа записать у меня Сай равно 162 вот если быть точным вот так вот да ну можно просто 162 прописать это одно и то же И там это умножается у меня на что это у меня умножается на эррор который тоже 162 NP то вот я вам серьёзно говорю я всегда так делаю и это хорошая практика потому Когда вы запутались в размерностей когда просто летят эти тензоры матрицы перемножаются вечно какие-то конфликты размерностей этим не

когда просто летят эти тензоры матрицы перемножаются вечно какие-то конфликты размерностей этим не нравится этим не нравится этим не нравится приходится вот выискивать ошибку вот в итоге В итоге собственно говоря вот X1 Ир ну может так нельзя задавать Я не знаю давайте вот так вот просто пропишу А я скобку потерял поже А всё этоже вообще другая ошибка Ну пусть случайное число от ну до 10 от ну до 10 он просто требует говорит целочисленное значение На каком тебя интервале Ты сгенерировать всё

до 10 он просто требует говорит целочисленное значение На каком тебя интервале Ты сгенерировать всё вот как бы для себя вывели X1 для себя вывели эррор и проверяете А что будет X1 ум на рор X1 у на рор вот я вижу что 8 первое умножила на 8 получилось 64 9 у на 8 72 Ну то есть как бы получается поэлементно так всё проверил Так вы поймёте как это матричное умножение устроено и это нам уже с вами даёт в данном случае подспорье Теперь мы можем ответить какой размерности будет омега-1 Град 16211 Да

в данном случае подспорье Теперь мы можем ответить какой размерности будет омега-1 Град 16211 Да что эквивалентно 162 частным производным для 162 квартир в тренировочной выборке тоже самое проделываем с Омега 2 единственное отличие что тут будет не X1 А2 поэтому бы ну у меня просто индексация понят 0 А тут как бы 12 в на бумаге А 01 коде всё далее Я просто это объединил в один Градиент мы на лекции это делали На самом деле я просто функцию оборачивали Градиент собран всё готово чтобы обновить

это делали На самом деле я просто функцию оборачивали Градиент собран всё готово чтобы обновить веса То есть тоф это текущие веса мои Омега это равной бы неч тее средний Градиент здесь ещё надо понять вот этот xis равно 0 вот здесь у нас размерность 162 на 2 правильно мне надо вдоль правильной оси усреднить Просто если у нас с вами 162 на 2 162 на 2 то вот здесь бла-бла-бла 1 162 1 2 если вы прописывается точка мин он усреднить всё А мне надо схлопнуть по строчкам то есть вот так вот схлопнуть

точка мин он усреднить всё А мне надо схлопнуть по строчкам то есть вот так вот схлопнуть для этого есть там X = 0 = ну я не помню точно Ну наверно ра вот и всё схлопнется в итоге у нас вот это ка раз что ты этот поскольку ты его не помнишь ты его как-то щелкаешь и на что-то как ты понимаешь что ты правильно выбрал е я ошибся Значит я не прав так вот огра Томи X ра 0 какую размерность даст мне 162 на2 это оград просто 162 на2 1 на 2 ну ти два значения градиента Абсолютно верно всё до умножение

на2 это оград просто 162 на2 1 на 2 ну ти два значения градиента Абсолютно верно всё до умножение на константу тоже даёт 2 вот это наш это и есть на Дета Омега сдвиг весов А это исходный Омега и всё мы получаем новые ве и запис туда же Сержа Давай твой вопрос Блин я уже забыл ча А блин я в коде не могу найти возведение ошибки в квадрат Вот это на кам у меня здесь Лоса нет нет ну может быть у меня СР прописано где-то А ну я другую метрику считал как бы а не2 мы на следующей неделе будем

у меня СР прописано где-то А ну я другую метрику считал как бы а не2 мы на следующей неделе будем обсуждать Да в самом градиенте не нужно Обратите внимание реально сам Лос для вычисления обновления весов не нужен То есть сама функция не нужна нужна только её производная или Aka Градиент вот Костя ну Прокомментируй пожалуйста двумя словами всё-таки Общее решение потому что я пытаюсь общее сделать ми я пони работает но что делает ми именно здесь ну сейчас ято вот э мысль закончу и да да так так

ми я пони работает но что делает ми именно здесь ну сейчас ято вот э мысль закончу и да да так так так так вот собственно говоря тоже с интерсек даже не надо Эксис прописывать потому что вот это имеет размер 162 мне надо просто усреднить всё веса есть ну как бы давайте запустим вот матричный конфликт Вот в этой строке он не может заметь то что имеет размерность 2 и то что имеет размерность 162 значит Насть прямо по твоему заказу скорее всего равно о ура сработало так Вот так ты делаешь всё

значит Насть прямо по твоему заказу скорее всего равно о ура сработало так Вот так ты делаешь всё время ошибка по Нет ну там есть кое-где где я хорошо акси не путаю А вот есть там два вида грубо говоря про тебя спрашиваю практику практический подход по крайней мере собственно говоря всё Мы запустили фид у нас всё обучила И вот веса получились А здесь я ещё так аккуратненько оформил Виса ещё чем кайфовая штука можно прямо в прямом смысле говорить вклад признака то есть Обратите внимание метры

кайфовая штука можно прямо в прямом смысле говорить вклад признака то есть Обратите внимание метры квадратные имеют положительный вес А это значит Чем больше квадратных метров тем у нас с вами недвижимость будет стоить дороже а второй параметр distance - Это удалённость от центра он имеет отрицательный вес Это значит что чем больше расстояние тем цена ниже Но если по абсолютус по абсолютус эти два веса Линейная регрессия считает что квадратные метры более значительны более значительная история

веса Линейная регрессия считает что квадратные метры более значительны более значительная история Хотя тащат они в разные стороны тащат они в разный стороны вот ну и здесь СР это точность мы ещ не проходили метрику R2 Ну короче это грубо говоря единица это вы на 100% всё всё предсказали Ну вот у меня 70% здесь ну как бы а что же ждать как цену предсказать только на 100% по двум параметрам это очень сложно луба сейчас а вопрос насчёт формы и норма одно и тоже Ну это разное распределение

это очень сложно луба сейчас а вопрос насчёт формы и норма одно и тоже Ну это разное распределение вспоминай статистику нор это купол юниформ - это равномерно как кубик бросать а там просто типа задание было може вообще тока старта точка старта мы всё равно придём в нужную точку сделать равномерным А если задать юниформ -11 и например Сай N N вот этих вот входных данных я так униформ юниформ - это и есть равномерное распределение просто нужно указать равномерное распределение Значит все числа

и есть равномерное распределение просто нужно указать равномерное распределение Значит все числа равновероятно выпадут вот у вас от минус одного до одного можно поставить от 10 до 20 кубик от одного до шести только юниформ непрерывная шкала а есть ещё не просто равномерная а равномерная дискретная как у кубика называется R in входе Так что это ерунда в нейронных сетях в основном через Норма всё генерируется девочка по-моему в коде в примере она вообще нулями веса задавала кто код видел который

девочка по-моему в коде в примере она вообще нулями веса задавала кто код видел который я скинул она стартовую точку брала нули веса типа с нуля начинал можно дату рождения свою ввести попробовать оттуда начать всё равно должны прийти правильную точку Давай да ещё один вопрос возник вот нас то что нам вводит коэффициент это получается лучший коэффициент для Омега 1 который нашёл код правильно а во втором типа это лучший коэффициент для Омеги 2 типа такого да типа вес признака так и называют вес

втором типа это лучший коэффициент для Омеги 2 типа такого да типа вес признака так и называют вес В прямом смысле интеп выводи самый лучший вес для начального мым даже ру наша модель уже готова для предсказания вот возьмём какой-нибудь Давайте тем назовём квартира которая квартира пусть будет иметь не знаю 60 МТ и ну какую-нибудь удалённость от центра Я не знаю там в чём она в километрах измеряется Ну пусть 12 км единственное Не забывайте нормировать данные модель училась на нормированных

Ну пусть 12 км единственное Не забывайте нормировать данные модель училась на нормированных данных Поэтому мне надо трансформировать вот этот Ну это классика вот реше ми11 я понял что он хочет он скорее всего хочет он ждёт как бы массив объектов и когда я вот без этих скобок он воспринимал что один объект 60 второй 12 вот так скорее всего сработает Да нормировка у всех видно у меня чтото не видно А у меня тоже завис завис давис создаём 60 м 12 12 км расстояния обязательно нормировать я сразу же

А у меня тоже завис завис давис создаём 60 м 12 12 км расстояния обязательно нормировать я сразу же сюда [музыка] нормировка разд всё вот и теперь просто мы можем у нас же есть функция predict для Дита мне ну только X только квадратные Мет и расстояние А здесь про история для Дита значения умножаются На веса и получается испт прибавляется Всё делаем точка предикт и прописываем сюда тест sle Вот такая квартира должна стоить 70.000 70.000 всё модель способна предсказывать только важно нормировать

квартира должна стоить 70.000 70.000 всё модель способна предсказывать только важно нормировать данные очень важно нормировать данные без нормировки как бы представляете 6 у на вот эти 57 это уже где-то в космосе 3 млн да потом ещё 12 Умно на эту историю плюс 80.000 но это не объективная цифра если модель училась на нормированных данных то все данные которые приходят ей на вход тоже должны быть ОТР Поэтому вот эту квартиру я ОТР и получил её стоимость Можно попробовать А если квартирка поменьше

Поэтому вот эту квартиру я ОТР и получил её стоимость Можно попробовать А если квартирка поменьше оп всё 17.000 сразу же вниз А если она поближе к центру оп подороже стало любой вопрос У тебя был да скажи пожалуйста вот нам выдал другие немножечко отличающиеся коэффициенты нам к каким стремиться и почему у тебя А ну и там коэффициенты в принципе точнее У тебя е п 4 То есть у тебя в Ну я имею в виду что раз коэффициентов большая что у меня нормированные ты скорее всего не нормировать или или

виду что раз коэффициентов большая что у меня нормированные ты скорее всего не нормировать или или знаете если вот ещё Таргет нормировать вот здесь тогда будет иначе Таргет уже будет не измеряться не вот в таких суммах а тоже в маленьких и веса будут маленькие Я думаю что у тея прина в это и то и друго не будет яши сбирается в 1000 руб лучше так и оставлять 1000 руб коэффициенты точнее твои или слёрм мои слр думаешь отличаются давай проверим нет вроде такие же 57 459 57 459 Всё совпадает не так

мои слр думаешь отличаются давай проверим нет вроде такие же 57 459 57 459 Всё совпадает не так [музыка] Спасибо а быстрый вопрос а есть какая-то вот принципиальная разница норми Таргет потом обратно его жую в обратную сторону и бессмысленный процесс Ну в принципе так и делаю только с другими нормировка иногда это нужно иногда предсказывают логарифм чего-то а потом обратно откатывать исходные данные это очень зависит от контекста понял Я просто думал Тит меньше числа меньше вычисления потом я

это очень зависит от контекста понял Я просто думал Тит меньше числа меньше вычисления потом я обратно и превращу это бесс мы с тобой на нулевой фазе ривали цены а потом обратно экспоненты их возвращали чтобы нормально было да Так делают так делают Но этому есть другое объяснение это понижение дисперсии но в целом так делаю Да так ну что ж в общем вот это сокращённое решение Теперь его комментирую это всё Ну я считаю что это всё перева пере переваривается Да вот эти две строчки они а именно

это всё Ну я считаю что это всё перева пере переваривается Да вот эти две строчки они а именно вторая строчка конечно как бы посложнее может показаться Хотя в чём плюс когда всего одна строчка значит информации конечно всегда прячется за одной строчкой может много прятаться информации но всё-таки она конечна и вроде не так много должно быть запускаем А вот почему у меня падало теперь в обратную сторону для этого решение ра но а для того ра 1 что здесь сделано что здесь сделано э Ну с Омега 0

сторону для этого решение ра но а для того ра 1 что здесь сделано что здесь сделано э Ну с Омега 0 всё тоже самое по факту вообще ничего не поменялось Да а с вот эти Омега 1 омега-2 прикол в том что А если будет п переменных а если 10 а если 20 А если 30 как-то через форже не будем прописывать вот вручную так всё не запишем как-то бы хотелось это объединить в общем виде и такая возможность есть то есть это подчиняется общему правилу Если Вы заметили то производ по оме [музыка] на что там уми с

есть это подчиняется общему правилу Если Вы заметили то производ по оме [музыка] на что там уми с крышечкой аш Омега 2 Рав -2 у X2 у y ми Y крышечкой вот так вот так вот это ВС бы можно объединить в один паттен есть в каком-то смысле сри ме это матри X она сама в себе хранит на самом деле 162 значения 162 значение правильно И вот столбец X1 X2 то есть Вот здесь лежит X1 А вот здесь лежит X2 верно чтобы мне посчитать другое сразу у меня ещё где-то есть эррор рор который имеет тоже как бы он на

чтобы мне посчитать другое сразу у меня ещё где-то есть эррор рор который имеет тоже как бы он на самом деле имеет Как сделать Я бы хотел в общем виде умножить так чтобы у меня почиталось по Омега 1 То есть у меня Столбцы были в одном случае X1 Умно на рор в данном случае тут X2 Умно на рор короче вы поняли и так далее если бы было больше переменных значит больше то есть как-то объединить это умножение то есть вот это получается вот это умножить на Вот это получается Вот это да А вот это Умно

то есть вот это получается вот это умножить на Вот это получается Вот это да А вот это Умно на Вот это и вот эту ве надо как-то счи это не матричное умножение Это обычное умножение и вот в таких случаях тоже собираете конструкции Вот давайте так и сделаем вот у меня есть Матрица например X Да я сгенерируйте [музыка] точно так же только 162 на он у меня вот такой всё А вот в этом-то и проблема всё вот смотрите если я умножаю сейчас выведем на экран сек X вот X у меня А вот так как бы сделать-то

вот смотрите если я умножаю сейчас выведем на экран сек X вот X у меня А вот так как бы сделать-то лучше ладном запишем чтобы понятнее было чтобы читаем лучше было Data Frame Data равно ра X равно равно X1 X2 во записалось Отлично я назву это тест и сюда ещё добавлю колонку R рор равно рор вот всё вот смотрите то есть что мне нужно сделать по-хорошему по-хорошему мне нужно получить результат мне надо чтобы 3 умножила на о и 8 умножила на О это были два разных колонки потому что это будет два

надо чтобы 3 умножила на о и 8 умножила на О это были два разных колонки потому что это будет два отдельных градиента и собственно говоря если в лоб сделать вот я отдельно это сделаю X у но тут происходит то что вот у нас здесь отображено смотрите как будто бы получилось вот 2х 2 это 4 3х 2 - это 6 и вот для Всех элементов это правильно считается теперь вот этот столбец первый это что такое кто-нибудь ещё сможет не то чтобы просто числа воспринять А с интерпретировать Ну половина ошибка px2 px1

ещё сможет не то чтобы просто числа воспринять А с интерпретировать Ну половина ошибка px2 px1 Вторая ошибка P2 разница ошибка и это на самом деле это на самом деле Градиент то есть мы собрали вот эту штуку вот эту штуку Вот она вот здесь вот а вот эту собрали вот здесь вот до этого мы с вами сделали по отдельности это отдельно Омега о Град прописали и Омега 2 Град А здесь я сделал в одну строчку Объедини вот двоечка там же минус двойка не вроде X1 нажал на То есть получается что мину дво в

Объедини вот двоечка там же минус двойка не вроде X1 нажал на То есть получается что мину дво в начале она здесь я ми не МИД я не умножил ещё МИД поставить надо ты права как бы ну МИД на константу Умножить Это сейчас не самое главное типа нагрузка то есть по факту вот эту часть Да ещё ты права надо ещё на минус д множить то есть в идеале полностью правильно я бы конечно должен был сделать вот так мину д звёздочка Вот теперь я собрал Прямо две частные производные полноценные так вот проблема

так мину д звёздочка Вот теперь я собрал Прямо две частные производные полноценные так вот проблема заключается в том что вот у меня так записан Но на самом деле если бы Яго вот а просто сказал бы 162 точки как у меня и хранится то рор Обратите внимание имеет не вот такую конструкцию как здесь а он имеет в линию вытянутую то есть компьютер воспринимает это всё как один элемент выборки А мне на самом деле надо по сказать что это 162 отдельных элемента выборки и вот как раз таки метод res он

самом деле надо по сказать что это 162 отдельных элемента выборки и вот как раз таки метод res он имеет вид он может ва трансформировать вот эти 162 значения по-разному 162 2 сколько Я бы мог прописать ему 81 на 2 Вот бы он сделал или 2 на 81 что на что 162 Дели 162 Дели кстати говоря на 9 и есть ленивый способ Я говорю что вот здесь де а вот эту сам Посчитай заглушку ставлю ми1 он знает что если 162 де 9 то он мне развернёт и всё А нам с вами на это нужно как раз таки для того чтобы просто

162 де 9 то он мне развернёт и всё А нам с вами на это нужно как раз таки для того чтобы просто тупо нормально умножить так как нам нужно вот именно эту мысль надо переварить переварить и тогда всё будет хорошо то есть как бы вот именно здесь точка реше Теперь будем переваривать вече Сегодня отдыхайте Завтра у вас целый день есть завтра ва с утра [музыка] недолго работает было бы не два столбца а 10 столбцов то у меня бы всё прекрасно работало вот ваш цицианов ский датасет Вот в такой вид

а 10 столбцов то у меня бы всё прекрасно работало вот ваш цицианов ский датасет Вот в такой вид спокойно залетит если все данные закодированы вот в этот бы он не залетел потому что только три столбца а в этот залетит никаких проблем не будет то есть вы можете Вот вот этот класс взять поднять свои обработанные данные которые вы там марку отправляли Да и в прямом смысле зафи на них и посмотреть что получилось Серёжа Давайте по порядку Чернышов смотри нам вот это вот всё нужно было сделать чтобы

получилось Серёжа Давайте по порядку Чернышов смотри нам вот это вот всё нужно было сделать чтобы просто иметь понимание Как это работает внутри Потому что есть слр Готово Уже всё это дело как часто вообще на практике приходится вот писать собственный класс со своими вот этими метриками всё это рассчитывать это вообще Санти делают именно Да я так понимаю Ну если с нейронка будешь возиться будешь побольше классов писать Да вот если [музыка] делат вот Ну тоже делают скажем так я не могу тебе

побольше классов писать Да вот если [музыка] делат вот Ну тоже делают скажем так я не могу тебе однозначно ответить Ну кто-то из Sci делает кто-то не делает но я хочу сказать чтобы вы не переживали это не Страшная штука это просто надо немножко набить руку немножко набить руку конечно за один день стресова но как бы в целом это нормальная история Если вы кстати вот это разберёте вот вот этот день я считаю одной из лучших вообще практических упражнений именно по базе вот этот и завтрашний день

я считаю одной из лучших вообще практических упражнений именно по базе вот этот и завтрашний день потому что здесь приходится понимать и алгебру и код и и статистику Ещё немного чуть дальше мы разберём если это всё варится у вас просто ну как бы Горизонт расширится немножечко Если вы думаете что нейросети учатся по-другому совершенно не так то есть они учатся точно так же просто этих весов будет не два а тысячи поэтому как бы мой совет не бояться этого и действительно вам это не Придётся делать

два а тысячи поэтому как бы мой совет не бояться этого и действительно вам это не Придётся делать массово но периодически может возникнуть вот тут самое главное подружиться с размер поэтому проте для себя какой размерности то какой размерности это и вот по шагам всё это проговорите и всё будет обязательно хорошо поэтому Отвечая на твой вопрос Я тебе даже вероятность не могу сказать с какой вероятностью ты столкнётся с этим с какой ты не столкнётся есть кто Дато сайентист пишут классы есть кто

ты столкнётся с этим с какой ты не столкнётся есть кто Дато сайентист пишут классы есть кто не пишет То есть всё от задач зависит да правильно понимаю То что Вот все наши операции с шейм ошибки и полностью идентичный вариант если мы транспонирующие потому что кот тяж ты имеешь в виду YouTube сылка на девочка с писала то что Сержа сказал но это полный эквивалент одно и тоже вот во-первых Спасибо что сидишь с нами что это разобрал вс не знаю потушил ли луба мне точно стало легче Вот А вопрос по

что сидишь с нами что это разобрал вс не знаю потушил ли луба мне точно стало легче Вот А вопрос по существу прозвучало Что лежит в виде ты задал его в виде 1 на 162 то есть по факту ты его растянул по горизонтали поэтому тут ты его переворачиваешь чтобы корректно умножить на X Да но в V ноград он остаётся лежать горизонтальном Да а что мне там у меня же там просто точка мин надо будет усреднить и всё вот здесь Ага поэтому всё и поэтому вопросики были сэксом потому что да Потому что здесь Ноль

и всё вот здесь Ага поэтому всё и поэтому вопросики были сэксом потому что да Потому что здесь Ноль по Всё кайфули спасибо большое Настя Я просто хотела уточнить про ты говоришь Про проверку размерности ты показал как ты ре просто рисуешь да как сказать просто проверочный вопрос что ты ещё делаешь чтобы в коде как чтобы э размерность почекати или вот это и есть в всё что ты делаешь по жизни в плане проверки размерности шейпы смотришь и короче надо контролить размерность контролить размерность

проверки размерности шейпы смотришь и короче надо контролить размерность контролить размерность это вообще хороший навык Если вы собирайте своей архитектуры Особенно потому что всё это тупо сплошное перемножение матриц Ну в принципе в принципе да всё что я делал больше особо ничего не Дума что то что нам показал это всё просто я не хочу не как сказать не думать а просто скопировать протону дорожку типа нарисовать два ре и перемножить посмотреть что сказал пе да да да да нормальная сторона

типа нарисовать два ре и перемножить посмотреть что сказал пе да да да да нормальная сторона хорошо Ну вот собственно говоря всё решение как на ладони когда это всё переварит произойдёт Ага и вы поймёте что это две строчки кода за кото скрывается очень много боли но тем не [музыка] мене Ну ладно шесть не две Ну тут шесть Ладно Ой спасибо большое Кстати классно что рассказала Классно что записали жду в плейлисте буду переслушиваю это бывает 20 раз 20 раз понял не понял и и потом не понял В итоге

в плейлисте буду переслушиваю это бывает 20 раз 20 раз понял не понял и и потом не понял В итоге такое бывает вот по поводу R2 Ну вот смотрите Вы весь файл досмотрите то есть что здесь я ещё делал тут считалось скор Метрика это Метрика R2 я не буду рассказывать хлеб среды следующего дня пока что воспринимаете просто это как точность вот здесь собственно говоря Ну что что от моделе нужно её собрать и обучить выше сдела проверить точность Нате вы хуже связано те что може Вы или е РД факторов об

и обучить выше сдела проверить точность Нате вы хуже связано те что може Вы или е РД факторов об этом тоже поговорим далее собственно говоря это просто график здесь можно посмотреть метрики Я посчитал разные вот мае на 23000 мы на тренировочной 36000 в тестово отклоняется что достаточно много для задачи с недвижимостью которая в принципе неплохо решается с помощью Sci так далее здесь это в процентах насколько мы ОТК 30% на тестовой на Рено 40 Нате Ну и здесь вот собственно говоря inference

насколько мы ОТК 30% на тестовой на Рено 40 Нате Ну и здесь вот собственно говоря inference модели Да это когда они уже работают на предсказание то есть мы учимся не ради того чтобы учиться да то есть от модели нужна оценка в дальнейшем какие-нибудь продакшн пайплайн Вот и собственно говоря всё вот ну тут две квартиры у меня загружены на примере этих квартир собственно говоря сделана оценка сколько они должны стоить с они должны стоить это я не знаю что такое тоже попало нар сюда случайно с

они должны стоить с они должны стоить это я не знаю что такое тоже попало нар сюда случайно с прошлой групп же что-то делали можно убрать как-то Так как-то так я стараюсь вам смягчить как можно больше относить Как сказать материал реально сложный вот мне существенно больше времени потребовалось сво время чтобы это понимать коне бы сам это делал Но это но большое количество информации кто-то За день кто-то За два кто-то за три пойм так ну ладно что тогда всё видео Я залью в ваш плейлист на

За день кто-то За два кто-то за три пойм так ну ладно что тогда всё видео Я залью в ваш плейлист на ютубера Но сегодня не советую прям этот убиваться Ну кто Завра это в принципе совету выбиваться кто чувствует силы Может чуть-чуть на Чили посидеть А так лучше отдохните Завтра у вас будет достаточно времени завтра мы будем логистическую регрессию писать и там отличий практически нет как я вам сказал там будет нагрузка в основном только с точки зрения машинного обучения ного всё остальное будет

там будет нагрузка в основном только с точки зрения машинного обучения ного всё остальное будет то же самое Вот и у вас как бы Целый день в распоряжении на всё это всё Давайте тогда Хорошего вечера и до завтра пока-пока спасибо большое спасибо большое Пока Y

Доброе утро всем Ещё раз привет Так кого у нас нет Любы нет Вот ещё одного у нас нет кого у нас нет кого Серёжа а [музыка] Угу сейчас подождём секунд 30 И начнём что как настрой Нормалёк хочется верить что сегодня будет лучше чем вчера А знаешь что вчера какой-то прикол был Может кто сталкивался не знаю м Когда уже написал весь класс стал его запускать А мне цифры по весам и по и по этому Господи забыл что было третье Весы и y предсказанные Угу улетали в бесконечность это Градиент Да и я я

забыл что было третье Весы и y предсказанные Угу улетали в бесконечность это Градиент Да и я я подумал что это связано с тем как я задал через юниформ свои начальные веса стал экспериментировать вот так вот два кода поставил твой и свой потихоньку тягают У тебя к себе заново всё запускаю естественно бесконечность когда я пришёл к тому что код идентичен плюс-минус у меня бесконечность теб работает Я думаю не знаю что остаётся Я просто забираю твою нормировка которая просто названо по-другому Но

Я думаю не знаю что остаётся Я просто забираю твою нормировка которая просто названо по-другому Но работает так же как я Вставляю к себе обновляю оно работает я удаляю нафиг твою нормировка ю снова оставлю свою и теперь снова всё работает и короче я такие темы вообще не люблю когда ты не можешь вычислить ошибку потому что её нет о просто вылетает бесконечность так и не понял в чём была причина то есть никаких разниц не было Ну как бы именно с такими не сталкивался но я всегда в таких случаях

то есть никаких разниц не было Ну как бы именно с такими не сталкивался но я всегда в таких случаях замечал очень большой паттерн Я начинаю э грешить на систему А потом понимаю что всё-таки дело Во мне то есть где-то я всё-таки заложил Ну скорее всего так так и было да Ну там я уже вплоть до Сим прямо так ушёл по срочно Ну ладно Ну можно на свежую голову иначе взглянешь иначе взглянешь Так ну что ну что сегодня мы просто с вами порисуем немножко и всё сегодня мы разберём вторую задачу и второй

ну что сегодня мы просто с вами порисуем немножко и всё сегодня мы разберём вторую задачу и второй вид задач и посмотрим что мы посмотрим как ну на примере одного из алгоритмов как она устроена а именно задача Ну на самом деле Ладно коментари увидел есть минус пока не буду усложнять но есть минусы начинать с нулевых весов это может быть пробле в некотором контексте поэтому нейронные сети все генерируют случайные веса не нули не нули вот так возвращаясь Мы вчера с вами разбирали задачу регрессии

случайные веса не нули не нули вот так возвращаясь Мы вчера с вами разбирали задачу регрессии да как я говорил сегодня нагрузка будет только со стороны всё остальное будет тоже самое реня Дмитрий например напомнит В чём разница регрессии и классификации ээ Ну в классификации Это обычно то есть мы получаем Несколько категориальных признаков на выходе Угу а в регрессии мы мы получаем какой-то одно предсказание которое не Ну в смысле Просто мы получаем какой-то один ответ ну в классификации тоже

предсказание которое не Ну в смысле Просто мы получаем какой-то один ответ ну в классификации тоже один ответ А ну цифровой Ну какая-то непрерывная величина обычна в регрессии или в классификации в регрессии можешь привести пример задачи одну и другую Ну регрессия нуже цена квартиры отлично классификация Ну не знаю любая классификация кошка собака шка или собака хорошо на картинках кошка или собака Отлично Да так у кого-то вопрос был кто-то руку поднимал или мне нагрелось Показалось Показалось

Отлично Да так у кого-то вопрос был кто-то руку поднимал или мне нагрелось Показалось Показалось не было Просто не видел кто так да да Да собственно говоря классификация это дискретное конечное число регрессия какой-то бесконечный диапазон нех значений [музыка] вот с Что зна я чаще с классификацией сталкивался вот и мне вообще она больше импонирует как зада но в принципе это такие равнозначные история просто зависит от особенности данных Да с которыми Мы работаем Итак Вчера мы с вами Вчера мы с

просто зависит от особенности данных Да с которыми Мы работаем Итак Вчера мы с вами Вчера мы с вами С чего мы начнём А мы начнём с вами с рисунка мы с вами начнём с рисунка мы с вами начнём с [музыка] рисунка Давайте такой вопрос СМИ который будет только два признака ну их может быть больше но мы будем приказывать по двум чтобы что-то такое что проецировать на наш мир купит или нет шоколадку в магазине а хорошо купит или не купит шоколадку в магазине какими какие у нас признаки на это могут

магазине а хорошо купит или не купит шоколадку в магазине какими какие у нас признаки на это могут быть которые мы можем собрать Ну видишь купиш шоколадку или нет в принципе возраст покупателя наличие детей у покупателя Э вес покупателя диабет диабет у покупателя Да диабет я понял Ну давайте выберем два признака Какие вы считаете самые весомые диабет и наличие детей наверно наличие Кари во рту ладно А цена шоколадки например цена шоколадки Ну да тоже может быть наличие Каса сложновато будет

ладно А цена шоколадки например цена шоколадки Ну да тоже может быть наличие Каса сложновато будет собрать эти данные Да собственно говоря то есть на эту фичу ориентироваться будет тяжело да прежде чем принять рение покуп Покажите свои к уже можно огромный составить Ну хорошо давайте типа мы как бы где-то там рекламируем шоколадку Да это может быть онлайн может быть оффлайн просто в оффлайне Я не совсем вижу смысл этой модели в онлайне Я её вижу Ну хорошо будет Пусть здесь количество детей у

не совсем вижу смысл этой модели в онлайне Я её вижу Ну хорошо будет Пусть здесь количество детей у нас с вами количество детей а и и и и что ещё вторая фича Давайте Выбирайте какой-нибудь Ну лишний вес лишний вес ну пусть будет лишний вес тут надо ещё доказывать корреляцию но наверное она есть лишний вес хорошо две два таких признака у нас с вами Ну не лишний вес мы просто скажем вес наверное Давайте вот так вот опять же это как бы мне как сказать проверка исследователей это нормальная история

вот так вот опять же это как бы мне как сказать проверка исследователей это нормальная история когда берётся какая-то фича которая непонятно влияет она или не влияет вот ну у нас пусть она будет влияет да И в чём Так что мы будем делать смотрите у нас будет с вами Д класса Ну давайте будем считать что тогда вес и количество детей будет индикатором в положительную сторону положительную сторону Но это будет конечно не всегда так У меня например большой вес но я вообще не ем шоколад мне он не

Но это будет конечно не всегда так У меня например большой вес но я вообще не ем шоколад мне он не нравится честно говоря поэтому выборку сделаем немножко разнос так обозначим крестиками ликами потому что это у нас теперь бинарная классификация купит шоколадку или не купит Да Бинар классификация вот два значения Ну всё я поехал расставлять крестики А ну или Давайте не крестики пусть у меня галочки будут типа купил какие-нибудь галочки каждая галочка - это элемент выборки Ну тут конечно

галочки будут типа купил какие-нибудь галочки каждая галочка - это элемент выборки Ну тут конечно по-хорошему вот эта шкала дискретная Но мы с вами Будем считать что галочки вот как-то так могут существовать потом потом соответственно те кто Ну те кто пусть у нас не купил крестики Ну что-то вот такое получается так 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 Ну короче ещё чуть-чуть крестиков добавлю как-то вот так вот получилось у нас с вами такое пространство здесь примерно 20 элементов выборки

как-то вот так вот получилось у нас с вами такое пространство здесь примерно 20 элементов выборки конечно это мало понятно но тем не менее есть какая-то попытка понять что вот если случа человек вот это надо понимать что мы всегда пытаемся просто увеличить вероятность если бы к нам зал Случайный человек мы бы не собирали никакие данные то при выборке с 40 человек где 20 купило ой из 20 человек где 10 купила а 10 там не купило предположим вероятность 50 на 50 правильно но мы с вами собрали

где 10 купила а 10 там не купило предположим вероятность 50 на 50 правильно но мы с вами собрали данные кое-какие которые вроде как должны изменить вероятность в ту или иную сторону в ту или иную сторону в СМИ пр это и есть Логистическая регрессия Логистическая регрессия она как Линейная регрессия и Да А так сек сейчас кое-что открою Короче ладно там в презентации у меня это написано Логистическая регрессия является запомните этот момент Логистическая регрессия является единственным алгоритмом

регрессия является запомните этот момент Логистическая регрессия является единственным алгоритмом исключения в плане названия всё что мы будем с вами проходить дальше catboost regressor catboost classifier xgboost рессор xgboost classifier knn регрессор knn classifier decision 3 регрессор deif S regress сфа все называются один как бы просто в зависимости от задач которые решают и только в линейном мире исключения там Линейная регрессия и Логистическая регрессия почему так назвали Ну так назвали

мире исключения там Линейная регрессия и Логистическая регрессия почему так назвали Ну так назвали как бы это закрепилось то есть Логистическая регрессия решает задачу классификации запомнили всё причём она решает это линейным образом Давай бу Я записывал то что говорил не дописал го Что регресси убирает признаки или что он делает Нет Логистическая регрессия решает задачу классификации она разделяет Вот она будет сейчас разделять нам галочки от крестиков ЧМ отличие от бустеров и прочих у них у

Вот она будет сейчас разделять нам галочки от крестиков ЧМ отличие от бустеров и прочих у них у всех название исходя из задачи которые они решают если ты столкнулся на работе с задачей регрессии ты возьмёшь ресор если ты лкш с ты возьмёшь это его дети получается да ребёнок логи логической регрессии Нет нет это просто другие алгоритмы просто другие а мы их будем проходить на следующей неделе алгоритмов машинного обучения очень много которые могут оценивать в том числе нейронные сети вы сегодня

машинного обучения очень много которые могут оценивать в том числе нейронные сети вы сегодня увидите как Логистическая регрессия на проектах у старши у группы которая ещё не выпустилась которой на неделе текста Как Логистическая регрессия борется Ну сравнивается по точности с Нейро сетевыми технологиями нейросети тоже могут решать прекрасно задачу классификации я вам это рисовал на примере кошек собак когда кошка проходила се мы на выходе давали на кошка там или собака правильно помните такое

собак когда кошка проходила се мы на выходе давали на кошка там или собака правильно помните такое вот собственно говоря как бы это просто параллельные истории Линейная Логистическая регрессия - это линейные алгоритмы всё что мы будем проходить на следующей неделе - это нелинейные алгоритмы и их очень много вот в том числе cbis 3is 3 понял то есть прос мы находим прямую которая поделит там на класс логистической регресси только тут кая Нерона мог бы Вот так например если вы собрали достаточно

логистической регресси только тут кая Нерона мог бы Вот так например если вы собрали достаточно данных она бы могла бы отрисовать какую-нибудь вот такую разделяющую поверхность понял И тогда здесь бы там было бы одно предсказание а Логистическая регрессия она очень тривиально при своей сути она может разделить только прямой линией в случае 2D плоскостью в случае 3D и мерной гипер плоскостью в случае мерного пространства но всё поне закону вот ну я примерно на глаз разделю да то есть идеально у

мерного пространства но всё поне закону вот ну я примерно на глаз разделю да то есть идеально у нас не получится без ошибок то есть сделать ло нулевым у нас не выйдет Ну наверное какое-то что-то вот типа такого могло быть какой-то Вот такой разделяющий разделяющая прямая могла выглядеть примерно таким образом вот сейчас мы будем с вами говорить о том как она получается что является лосо во время обучения Ну и собственно говоря Вы сами реализуете класс логистической регрессии Я считаю что

время обучения Ну и собственно говоря Вы сами реализуете класс логистической регрессии Я считаю что Логистическая регрессия самый популярный алгоритм вообще среди всех существующих он очень лёгкий очень Девы нети Попробуй е е дублей она требует ГПУ она требует СПУ она требует памяти она требует ресурсов ей нужен временный иренс а Логистическая регрессия говорит Ребят мне ничего этого не нужно мне вообще вообще ничего не нужно практически она очень быстрая Да она очень простая но как бы мы

мне вообще вообще ничего не нужно практически она очень быстрая Да она очень простая но как бы мы всегда на самом деле стремимся к простоте а не к сложности и в задаче где простота уместна лучше всегда выберут логистическую регрессию вот да Саша вопрос А вот обычная регрессия Линейная она тоже строит только прямую линию Да конечно Просто вот видео которое ты скидывал автор добавил полиномиальные признаки к основным и Линейная регрессия приняла форму вот там параболы гипербол В общем разных пом

признаки к основным и Линейная регрессия приняла форму вот там параболы гипербол В общем разных пом авто знат немного ошибся в формулировке то есть линей регресси остатся линейной ВС рано я понял а признаков Ты може генерить много разных може возводить в квадрат брать Лори синусы складывать это называется рин мы об этом е тоже с вами поговорим на следующей неделе вот это как бы не относится к этому Линейная модель ВС рано останется линейной если ты е выберешь Как как модель как раз Степе

к этому Линейная модель ВС рано останется линейной если ты е выберешь Как как модель как раз Степе полинома можно рулить любым количеством изгибов грессии Я тоже читал везде это было это раз переобучение е слишком Боно предсказание строится вот так X2 у оме 2 п ббб п оме вы отчасти правы но Линейная регрессия она линейна по вот этим параметрам по весам вот у нересте возникнет там перемножение весов возде к и Дале вот зде это Нико возни воз водите в квадрат и так далее Это как константы

весов возде к и Дале вот зде это Нико возни воз водите в квадрат и так далее Это как константы понимаете воспринимается вот поэтому Линейная регрессия она нелинейная может быть по вашим Чам но она всегда линейна по своим весам да то есть Если рассуждать что у нас с вами функция y это Омега то она она линейна вот что имеется в виду вот всё понял то бишь Линейная регрессия по фича степенях может быть не линий Но это Линейная регрессия всё равно чуть Ну лучше бы я не грузилось в ту сторону лучше

не линий Но это Линейная регрессия всё равно чуть Ну лучше бы я не грузилось в ту сторону лучше воспринимать что Линейная модель она всё равно всегда Линейная и держите в голове рисунок прямой линии для 2D и плоскости для 3D вот а потом это для себя распутай сейчас просто времени много не будем на это тратить но я советую держать именно и не воспринимать что Линейная регрессия может стать каким-то полиномом когда она стала полиномом это полиномы а Линейная регрессия всё-таки линейно регресси

полиномом когда она стала полиномом это полиномы а Линейная регрессия всё-таки линейно регресси Хорошо Угу так ну в общем вот собственно говоря мы построили с вами какую-то напрямую Да ошибки есть но ничего страшного Теперь давайте начнём с того как строится иренс модели запомните в модели очень важно когда вы её будете там в Продакшен водить или куда-то ещё важен этап обучения модели важен этап валидации модели и важен этап Ирен модели Ирен - это когда модель работает на предсказание когда она

модели и важен этап Ирен модели Ирен - это когда модель работает на предсказание когда она у вас уже обучен Да вот ну пришёл к нам человек вот пришёл человек давайте у него очень-очень много детей но сам он по себе очень худой и собственно говоря вот я поставлю Вот знак вопрос этот человек как бы ну понятно в нашей модели он купил бы или не купил бы наша мондель бы что предсказала вот пил бы купил бы он между между не не между почему вот эта прямая делит на два Лагер эта прямая делит на два

бы он между между не не между почему вот эта прямая делит на два Лагер эта прямая делит на два лагеря Вот это лагерь единичен Да вот это всё это нолики поэтому он бы купил бы у нас Но это мы с вами видим глаза теперь Давайте попробуем а как это происходит с точки зрения кода в нашем случае в нашем случае конкретно нам на вход приходит Вектор из двух координат это знание об объекте Да количество детей его вес далее это всё у нас с вами идёт в Вот в такой блок и на самом деле Прямая линия Прямая

его вес далее это всё у нас с вами идёт в Вот в такой блок и на самом деле Прямая линия Прямая линия давайте я назову Вот это X1 А вот это X2 вот вот эта наша Прямая линия она всё равно подчиняется это просто правило правило школы правило школы сейчас двину сюда куда-нибудь вот это уравнение подчиняется такому закону как X1 Омега 1 плю X2 Омега 2 плю Омега 0 вот вот это вот вообще по факту это равно нулю то есть точки которые лежат прямо на прямой они подчиняются этому закону прил вот этот

равно нулю то есть точки которые лежат прямо на прямой они подчиняются этому закону прил вот этот обект значит да на вход мы его с вами подставим Вот в это уравнение и я пока что это назову буков кой например Z то есть X1 у Омега 1 + X2 X Омега 2 плюс да плюс Омега 0 Теперь у меня такой вопрос Как вы думаете если подставить Вот какой-нибудь вот этот объект вот в эту формулу и какой-нибудь объект отсюда вот в э формулу что их будет отличать Вот именно в левую часть не равно нулю не равно нулю

отсюда вот в э формулу что их будет отличать Вот именно в левую часть не равно нулю не равно нулю однозначно но есть ещё кое-что вот в школе в школе нас с вами учили разным там графикам да разным прямым и вот есть если вот у меня XY Да помните вот как бы обычная декартовая или как она называлась система координат вот Прямая линия которая идт биссектрисе она на самом деле имеет вид либо Y ра X если Y выражать но у нас в нашем случае чтобы провести параллель на самом деле это y - x = 0 вот наша

Y выражать но у нас в нашем случае чтобы провести параллель на самом деле это y - x = 0 вот наша Прямая линия здесь согласны Возьмите вот любую точку на этой кривой линии и вы увидите что равенство выполнится Как вы думаете что произойдёт с Любой точкой отсюда и с Любой точкой отсюда типа значение будет вверху положительное внизу отрицательно Абсолютно верно то есть Возьмите любую точку Давайте вот эту точку возьмём Это примерно единичка и примерно тройка да соответственно А 3 - 1 будет больше

эту точку возьмём Это примерно единичка и примерно тройка да соответственно А 3 - 1 будет больше нуля то есть вот эта вся область она положительная и Возьмите любую точку снизу что будет её определять любая точка которая здесь возьмём да даже вот эта точка Она имеет координаты 2 и предположим 6 2 - 6 будет меньше нуля то есть знак минус уловили мысль это и есть то что будет являться в первую очередь нашей зацеп Нам же с вами как бы вот если я просто сюда подставлю подставлю вот эти свои X1 X2 я

нашей зацеп Нам же с вами как бы вот если я просто сюда подставлю подставлю вот эти свои X1 X2 я получу какое-то число + 20 + 30 + 50 + 2 с этой стороны где-то -7 -4 -12 -13 самого 1213 мне ни о чём не говорит мне нужно просто ответить купит шоколадку или не купит шоколадку то есть мне нужно какое-то бинарное состояние именно знак выступает тем самым бинарным состоянием то есть в каком-то смысле если бы мы просто бы сказали что если больше нуля то купит Если меньше нуля то не купит то мы уже

если бы мы просто бы сказали что если больше нуля то купит Если меньше нуля то не купит то мы уже добились этой бинарной Понятно но на самом деле делается немножечко сложнее вот здесь дошло время то что мы с вами обсуждали в среду есть такая функция которая называется сигмоида помните было у нас небольшое обсуждение сигмоида имеет следующий вид вот такой вот она лежит в диапазоне от нуля до одного и Давайте даже назову Z Z и сиг Z она лежит в диапазоне от нуля до одного от нуля до оно и в чём

и Давайте даже назову Z Z и сиг Z она лежит в диапазоне от нуля до одного от нуля до оно и в чём особенность в чём особенность во-первых Как выглядит формула си Z Рав 1 / 1 П e в степени ми Z Вот это функциональное преобразование если Z прит положитель вот из этой области из этой области прит Вот это элементо соответственно после сигмоида после сигмоида мы с вами попам вот сюда в диапазон 05 до оного правильно если из отрицательной области то мы попадём наоборот от нуля до 05 это очень удобно

оного правильно если из отрицательной области то мы попадём наоборот от нуля до 05 это очень удобно интерпретировать Как вероятность покупки любой классификатор любой классификатор вообще любой который мы с вами изучим прежде чем Вам ответить купил не купил Он нам даёт ещё прекрасную туку он Дат вероятность или это очень хорошее подспорье один на тоненького купит а другой уверенно купит да и у нас появляется какая-то некая возможность или попытка Да оцифровать эту историю потому что вот этот

нас появляется какая-то некая возможность или попытка Да оцифровать эту историю потому что вот этот человек который вот здесь вверху он очень далеко от прямой и у него будет очень большое значение где-то плюс 100 плюс 000 плюс миллион там не знаю условно То есть он куда-то прям сильно-сильно сюда упадёт на ось и после сиг после сигмоида он трансформируется в единицу практически то есть мы можем утверждать что на этом клиенте будет Очень вероятно совершена покупка и в другую сторону приходит вот

что на этом клиенте будет Очень вероятно совершена покупка и в другую сторону приходит вот этот человек какой-нибудь да который около около нашей линии у него Да есть дети Да как бы у него Ну такой плотненький паренёк но как бы на тоненького купит не купит получается что то то значение Вот то значение Z которое лежит близко к прямой линии оно близко к нулю но С положительной стороны если кто-то вообще на прямую линию ляжет то у него будет ровно равен нулю это будет эквивалентно вероятности 05

вообще на прямую линию ляжет то у него будет ровно равен нулю это будет эквивалентно вероятности 05 нашему незнанию мы всегда стремимся убежать от вероятности 05 потому что вероятность 05 для нас Как подкинуть монету это полное незнание и полная случайность происходящего встаёт сигмоида то есть сюда идт Z А сюда идт наша Сигма z равно 1 де 1 п е в степени ми вот так вот нарисую всё ли Понятно ребят в этой мысли если непонятно Не стесняйтесь спрашивайте что знак уже говорит что более вероятно

в этой мысли если непонятно Не стесняйтесь спрашивайте что знак уже говорит что более вероятно купит или менее вероятно купит да В данном случае как бы выше правее вверх вправо или низ слева Так мы ещё и можем оценить насколько далеко он лежит от прямой соответственно конвертировать вот в удобную нам шкалу через сигмой А чтобы получить это как бы Аля вероятность вот понятно да что происходит Дальше что происходит Дальше так сейчас се попробуем ту дело сдвинуть сюда и что происходит Дальше в

что происходит Дальше так сейчас се попробуем ту дело сдвинуть сюда и что происходит Дальше в этот момент то что выплёвывает сигмоида называют вероятность А у нас с вами где-то здесь где-то здесь будет реальное значение игрека и нам опять с вами нужен oss нам опять с вами нужен oss что делать Так я наверное сотру пока что МС думаете подойдёт здесь как оценка ошибки Да можно теоретически Нет вообще mse бы считало бы вот эту разницу А вот эта разница на самом деле на нам в контексте как бы решить

mse бы считало бы вот эту разницу А вот эта разница на самом деле на нам в контексте как бы решить один или нолик вообще не отвечает на вопрос правильно вообще совершенно отвечает она даже не смотрит какой-то объект Она смотрит какое-то расстояние с и если неправильно предсказание так можно вообще ничего не покажет слово совсем не применим к задачам классификации Дима не пока предсказан это будет либо о либо но правильное нет преза у на будет вероятность от Ну до орот Ну нет Ну на самом деле

либо о либо но правильное нет преза у на будет вероятность от Ну до орот Ну нет Ну на самом деле Конечно отдалённо можно согласиться что mse что-то показывает Да Типа если был реальный класс единиц я приказал 092 Ну значит как бы это близко Да разница от между 0,92 и о Ну давайте вот небольшую небольшую здесь выборку запишем у нас датафрейм то есть будет наша вероятность предсказания и наш будет Y реальный только наоборот сделаю вот ваш датафрейм абсолютно реальный датафрейм А и то что вы

Y реальный только наоборот сделаю вот ваш датафрейм абсолютно реальный датафрейм А и то что вы предсказали есть какое-то количество объектов Да выборки 1 2 вот и и и Что неважно Какие X1 X2 Вот например этот объект был единичка это человек купил шоколадку А мы предсказали 0,92 Да можно утверждать что отклонение очень маленькое Но тогда во время обучения во время [музыка] обучения во время обучения Бут некоторые пробле что при Дине от в квадрат будет на самом [музыка] деле не уменьшаться не

Бут некоторые пробле что при Дине от в квадрат будет на самом [музыка] деле не уменьшаться не увеличиваться А уменьшаться это будет давать необъективно историю вот Есть другой способ есть другой способ Как оцифровать то есть в каком-то смысле Давайте просто абстрагируйся от математики что для нас было бы хорошей хорошей классификацией когда все А когда все галочки по одну сторону а все крестики по другую сторону правильно Ну согласитесь пойдём От простого к сложному это очень логичная мысль

по другую сторону правильно Ну согласитесь пойдём От простого к сложному это очень логичная мысль вообще я считаю всегда надо так просто логически мыслить это очень это очень помогает вот далее Что что здесь ещё скажешь далее такой момент галочки крестики нам надо как-то оцифровать эту идею нам надоть там где моде предсказывает едини чтобы ру А если ло Ну если единичка реально была то классно и такая функция есть эта функция сверх популярная и она называется bce L или binary Cross бинарная

и такая функция есть эта функция сверх популярная и она называется bce L или binary Cross бинарная энтропия по-другому её ещё называют L L Ну и запишем её формулу а далее посмотрим далее посмотрим что она из себя представляет сразу скажу что именно эту функцию сегодня будете минимизировать то есть мже будет е градин [смех] bce я ещ пропишу что её называют L и вы просто будете это встречать в документация разных и так далее ну и то и другое можете встретить Вот Ну вообще это и есть ло функция

разных и так далее ну и то и другое можете встретить Вот Ну вообще это и есть ло функция наша да то есть вот эта вот функция Как она считается Я сначала запишу фор а потом мы с вами перем что фор красно отражает чего нужно добиваться при обучении в классификации сначала Запишем на одном объекте это будет выглядеть следующем образом Хотя нет сразу же то есть Сколько в среднем далее Как там она выглядит не помню я сам так у меня заклинило а вспомнил Y Умно на логарифм то есть реальное значение

не помню я сам так у меня заклинило а вспомнил Y Умно на логарифм то есть реальное значение Уно предсказанного П 1 ми Y Умно налога 1 мину P предсказанное Если кажется что это сложная функция то она на самом деле сложная А сейчас мы разберём с вами Это она на самом деле даже легче чем то что было вчера её Градиент проще выглядит чем то что было вчера Хотя Казалось бы вот именно там тоже очень такой Градиент несложный именно конструкция и ещё нужен знак минус вот эта формула она статистически

Градиент несложный именно конструкция и ещё нужен знак минус вот эта формула она статистически выведена Это не просто на шару придумали она выведена статистически из распределения берну биномиального и является наилучшим приближением и наилучшей оценкой ваших параметров вот этих весов Я имею в виду а Давайте попробуем с вами понять что эта формула на самом деле Хорошо хорошо оценивает происходящее и мы с вами в эту табличку ещё до заполним Лос то есть Лос - это наш Штраф Да во время обучения

и мы с вами в эту табличку ещё до заполним Лос то есть Лос - это наш Штраф Да во время обучения как модель нам как как эта функция будет бить бить по рукам за те или иные ответы Давайте начнём с первого вот единичка человек однозначно человек в реальности купил шоколад модель оценила что вероятность того что он купит она 0,99 099 вот 099 Давайте посчитаем с вами Чему равен на этом объекте напоминаю в этом случае усреднять смотреть на одном объекте Давайте вместе считаем То есть я вместо

напоминаю в этом случае усреднять смотреть на одном объекте Давайте вместе считаем То есть я вместо реальных значений подставляю сюда единичку сюда подставляю вероятность сюда подставляю единичку сюда подставляю вероятность что у нас получится Давайте пойдём по порядку во-первых из из-за вот этого Второй член ушёл в ноль согласны сразу же он зану а первый член первый член тут получается единичка умножить на логарифм 099 Ну или можно сказать логарифмом чего-то стремящегося к единице тогда у меня

на логарифм 099 Ну или можно сказать логарифмом чего-то стремящегося к единице тогда у меня такого вопрос к вам встаёт Почему рари Абсолютно верно но то есть Лос говорит ребят потрясающий ответ Ваши 099 Мне очень нравится Продолжайте в том же духе вы не получаете Ниго штрафа за этото буде срет имини поняли логику то есть на это на этом объекте всё кайфово всё идеально тут Градиент будет нулевой этот Градиент ничего не будет эта точка не будет капризничать потому что здесь ло но Всё прекрасно

этот Градиент ничего не будет эта точка не будет капризничать потому что здесь ло но Всё прекрасно всё супер всё отлично то есть это как бы обратная операция от е да вот от да то есть в Какую степень нужно возвести число е чтобы получить единицу такой степени является но Да Сержа тут я понял У меня вопроси Почему мы так грубо с обошлись мы по идее могли бы тоже самое возвели бы мы 0 квадра получили Томы так принципиально её выкидываем Ну могли бы могли бы она на самом деле тоже прини но она ИТ

Томы так принципиально её выкидываем Ну могли бы могли бы она на самом деле тоже прини но она ИТ хуже имен она не применима она конечно применима В каком-то смысле но она является не точным и не лучшим приближением Вот вот эти все формулы что mse что L они выведены из статистики исходя из распределения таргета Вот и вот эта формула считается наилучшим статистическим приближением это будет вообще ваша Ну короче вы с ней особенно на фазе 2 будете много сталкиваться там часто задачи классификации

ваша Ну короче вы с ней особенно на фазе 2 будете много сталкиваться там часто задачи классификации встречаются там е закрепите эту мысль у себя в голове что сверх популярная зача вот сегодня у ребят будет зада классификация текста и вы услышите знакомые вам слова как они классифицировали с помощью логистической грессии как предо обрабатывать текст мы пока ещё с вами не знаем но это не суть но на выходе в пайла стоит ре который будет классифицировать не знаю что положительный отзыв

суть но на выходе в пайла стоит ре который будет классифицировать не знаю что положительный отзыв отрицательный отзыв вспомните это когда мы будем сегодня смотреть с вами проекты то есть та же самая Логистическая регрессия даже с текстом работает и всё окей и когда ребята обучали тоже самое [музыка] Мизи те Дава пори промах Я бросаюсь в крайности Но это как бы не меняет сути среднее будет что-то среднее если вот между 0 01 09 но я буду бросаться в крайность Итак мы соответственно человек купил

среднее если вот между 0 01 09 но я буду бросаться в крайность Итак мы соответственно человек купил шоколадку А у нас модель обучила Так что она считает что такой человек вообще не должен купить шоколадку Давайте опять же с вами оценим опять с вами оценим и получим что мы с вами здесь получим но опять же изза вот этой единички изза того что в реальности он не купил вот этот Второй член зану То есть он удт в ноль Понятно Остаётся только первый подставляем сюда единичку сюда 0 что у нас с вами

есть он удт в ноль Понятно Остаётся только первый подставляем сюда единичку сюда 0 что у нас с вами получилось ми 4,65 большое большое ну по факту да то есть Давайте Чему равен Ну вот ровно но никак не получить вот когда я вот это сюда подставил Да ну ровно никак не получить но како какой степень чтобы стремиться к нулю мисне Да минус бесконечность потому что е в степени минус бесконечность это как 1 де в степене Ире Ну но тут нам это как бы не суть Итого смотрите получается что у нас минус

как 1 де в степене Ире Ну но тут нам это как бы не суть Итого смотрите получается что у нас минус бесконечность минус бесконечность А вот И для этого И для этого стоит здесь вот этот минус в формуле чтобы минус сделать плюсом Итого плюс бесконечность Теперь давайте про интерпретируем что произошло у нас на этом объекте на этом объекте мы сильно промахнулись и Лос нам сразу говорит ребят дела плохи большой штраф вам а мы хотим мало штрафа Поэтому будем его минимизировать ну то есть сам Лос как

большой штраф вам а мы хотим мало штрафа Поэтому будем его минимизировать ну то есть сам Лос как бы его цифровка Да вот в прямом смысле это ответчик Он говорит что вот здесь вот здесь всё очень плохо Понятно моя мысль отлично Тогда подожди Как мы минус поставили мы когда первый считали тоже минус был Да минус но был мину но п тепер Давайте попробуем а что ЕС человек не купил но Давайте нанм опять с хорошего мы попали То есть он не купил у нас вероятность его покупки 00 то есть вероятность

опять с хорошего мы попали То есть он не купил у нас вероятность его покупки 00 то есть вероятность стремится к нулю это хорошее попадание правильно то есть практически у нуля режим Давайте поставлять теперь переключатель ушёл в другую сторону теперь будет зану первый член а существовать второй это вот в прямом смысле как переключатель на этом как поняли перево изло вот в прямом смысле также вот у нас будет два состояния мы его просто переключаем вот Давайте подставлять То есть первый член у

у нас будет два состояния мы его просто переключаем вот Давайте подставлять То есть первый член у нас опять зану Да а во второй член подставляем получаем с вами такую же историю что у нас остаётся н 099 правильно то есть н оно мы его с вами уже считали н о чему будет [музыка] ран нулю и опять же Лос говорит то есть вот эта Лос функция Да наша когда вот здесь проверка идёт на этапе когда мы какое-то предсказание дали говорит ребят лайк подписка всё классно ложать в том же духе вот здесь наоборот

предсказание дали говорит ребят лайк подписка всё классно ложать в том же духе вот здесь наоборот не очень Вот здесь классно Ну и разберём четвёртый случай м когда был ноль и мы сильно промахнулись опять же Останется только Второй член тут всё тоже самое логарифм нуля плюс бесконечность Да вопрос я правильно понимаю что невозможна нулевая ошибка даже если правильно классифицировали он будет говорить чувак можно лучше можно ещ дальше и будет какую-то ошибку давать нус 0 нано говорит что это ти

чувак можно лучше можно ещ дальше и будет какую-то ошибку давать нус 0 нано говорит что это ти ошибка Ты прав пра тах малени в порядке А ещё и будут у нас метрики мы их не проходили на следующей неделе будем проходить ты по Метрика и по падению Лоса будешь видеть А кое-что так сейчас погодите Я может быть вам кое-что покажу У меня как раз открыто Если у меня будет открыто М А блин у меня на сервере лежит на сервере лежится чтобы прямо далеко не ходить кае ещё покажу вам пока Может какие-то

лежит на сервере лежится чтобы прямо далеко не ходить кае ещё покажу вам пока Может какие-то вопросы мне зададите что-то у меня тут висит Всё не хочет ничего делать в компьютере Кай компьютер а какой у тебя компьютер у меня ма скал не висит компьютер у меня висит сервер сервер То есть это ма Я вообще просто лайк объективно Я сколько лет на нём И всё Я очень рад этому факту Нако компью кото подводит и не нот лишнего Гера И вообще такой User Friendly Как бы мне нравится Windows Windows вообще за

и не нот лишнего Гера И вообще такой User Friendly Как бы мне нравится Windows Windows вообще за нём уже лет наверное 10 не сидел так я не игровой чел Поэтому с Виндой вообще не сталкиваюсь никак только вот Linux периодически на серверах А собственно говоря на этом [музыка] на на Маке мас показать получится А можно вопрос на уточни угу вот шёл да давай вопрос да давай вопрос после я покажу значит Вот смысл этой БЦ в том что она Ну как тако умножитель условно говоря работает она усиливает Да

Вот смысл этой БЦ в том что она Ну как тако умножитель условно говоря работает она усиливает Да разницу между предсказанный и реальном просто крайние значение вероятности 0,99 там 01 Да если не это сказа вот на одной точке настроить ве что попробуй угоди миллионом объектов то есть настроить так свои параметры чтобы в миллионе была точная вероятность это не всегда Возможно если я не знаю истинно причины почему человек купил шоколадку и если тут количество детей вес не причём ты не сможешь

причины почему человек купил шоколадку и если тут количество детей вес не причём ты не сможешь добиться того чтобы у тебя вероятности были везде такие какие тебе нужны в этото иния здесь изображены работа с текстом здесь нужно классифицировать та же самая задача классификация текста Вот это примерно выглядит всегда таким образом то есть левый график - это график Лоса видите он падает Ну правый график - это Метрика мы с ней мы о ней с вами поговорим даже вот здесь покажу вам больше Метрика ACC -

- это Метрика мы с ней мы о ней с вами поговорим даже вот здесь покажу вам больше Метрика ACC - это точность модели как бы видите она точность это серже к твоему вопросу Да никогда не придёт к Ну вот Сва слева фино справа моде 90% достаточно высокая вот эпохи нам с вами знакомы количество обновления весов вот мы становились всё время умнее умнее умней здесь Рейно валидация выборка Это примерно так может выглядеть вот слева как раз таки график бинарной энтропии именно процесса обучение что он

так может выглядеть вот слева как раз таки график бинарной энтропии именно процесса обучение что он падает падает падает падает и всё это прекрасно как-то так то есть мы становимся всё умнее всё умнее всё умнее всё умней вот Ну чтож Давайте возвращаться в принципе так-то основные вещи Я сказал мы с вами проговорили Как устроен иренс модели Да вот вот здесь где-то я я просто это назову пайплайн Вот это всё вот это всё называется вот это называется Log ре Логистическая регрессия можешь ещё раз

Вот это всё вот это всё называется вот это называется Log ре Логистическая регрессия можешь ещё раз повторить что такое inference inference это вывод модели то есть её когда она предсказывает всё видите как бы как Что Где Когда Что в чёрном ящике А в чёрном ящике Логистическая регрессия в данном случае и она уже хорошо если обучена она работает она способна по исам предсказывать собственно говоря и вероятности далее тут конечно по-хорошему на практике Вы ещё это будете округлять да то есть

и вероятности далее тут конечно по-хорошему на практике Вы ещё это будете округлять да то есть зачем мне вероят ну вероятность Как бы мне нужна но наме ЕС давать литу Креди иваси решение либо но либо о Итого как бы формируется что-то такое здесь может быть вместо L какая-то нейронная сеть или какой-то другой алгоритм но внешние стороны не меняется Всё равно все минимизируют Лос функцию понятно все минимизируют Лос функцию Просто у нас ре он ограничен тем что он не может рисовать здесь какие-то

минимизируют Лос функцию Просто у нас ре он ограничен тем что он не может рисовать здесь какие-то сложные разделяющие кривулин быстро обучается ещё и очень интерпретирует если этого хватает для точности Почему бы и нет Как говорится вообще на самом деле время более на самом деле часто ресурс важнее чем точность точность как бы если данные собрали о точность будет нормальная плюс-минус от всех алгоритмов А вот Гера со временем иногда хватает Ну что ж собственно говоря Вот ваша Лос функция Нам её

А вот Гера со временем иногда хватает Ну что ж собственно говоря Вот ваша Лос функция Нам её нужно с вами минимизировать какие здесь ребят вопрос есть е раз Вот так он проходит предсказание во время обучения минимизируется вот эта Лос э Лос - это бинарная Крос энтропия у нас с вами у нас с вами М что у нас с вами у нас с вами вот так выглядит примерно графическая история графическая история нуно Я вроде как бы все нюансы Здесь вам перекрыл скажем так а как обзывается Z у него есть имя А ну в

Я вроде как бы все нюансы Здесь вам перекрыл скажем так а как обзывается Z у него есть имя А ну в принципе есть называется гиты гиты Ну да лагита называют линейную комбинацию данные умножить на веса или скалярное произведение ещё можно назвать короче иногда вот эту штуку называют лотами не стирай Ну ё-моё ну я нулик убрал А спасибо там там W Да этоже да спасибо [музыка] Угу Так ну что ж теперь теперь теперь теперь А теперь гиты плюс сигмой равно рек Нет лагита - это Лин рек а Линк плюс сигмой

теперь теперь А теперь гиты плюс сигмой равно рек Нет лагита - это Лин рек а Линк плюс сигмой Да это грек уравнение немножко неправильно составил Я слово слово перепутал в конце всё так сейчас я создам новую сек сек сеек Единственное что мы сейчас с вами сделаем попробуем вместе взять Градиент потому что вам по факту сегодня по факту что нужно будет сделать что нужно будет сделать это это взять Градиент и всё нагрузки прям такой сильной не будет вместе посчитаем Всё мы посчитаем для весов

Градиент и всё нагрузки прям такой сильной не будет вместе посчитаем Всё мы посчитаем для весов производный или в общем случае тоже можем разобрать или это останется на наше домашнее задание [музыка] а так ещё раз извини пожалуйста от помы составлять из частных производных весов весов или разберём В общем случае весов ССО я понял понял Так ну что ж Давайте возьмём производную возьмём во-первых где вот эту функцию Мне надо минимизировать вот эту функцию Мне надо минимизировать по Омега А где

где вот эту функцию Мне надо минимизировать вот эту функцию Мне надо минимизировать по Омега А где здесь Омега Я не вижу кто-нибудь видит Омега Я нет Как Лукашенко с ковидом вы видите ковид я не вижу А почему минуса нету Вот это правильно потерял по дороге где здесь Омега крышкой Да действительно там внутри скрывается Да потому что как у нас ещё раз с вами строится п с крышечкой Давайте запишем эту формулу формулу с крышечкой А вообще мы тогда соберём с вами весь Лос Мы весь с вами Лос соберём

формулу формулу с крышечкой А вообще мы тогда соберём с вами весь Лос Мы весь с вами Лос соберём пота нам э поди мин пропишите на одном элементе выборки формула у нас с вами выглядит минус Y у логарифм предсказанного P А вот это P предсказанное у нас с вами Это сигмоида от вот этих Гито то есть X1 Омега 1 + X2 Омега 2 п Омега 0 вот так вот помните как мы на матанализе вложенной производно то есть вот у Нани появляются до умножение на вес точнее до умножение на X сигмоида лорим Y Вот она

то есть вот у Нани появляются до умножение на вес точнее до умножение на X сигмоида лорим Y Вот она вложенная структура пошла Так ну собственно говоря первую часть мы с вами сделали да то есть вот э крышечка это вот собственно говоря и есть вот эта сигмоида потому что Вот как получается P с крышечка Вот это выход сигмоида всё очень просто плюс 1 ми Y умножить налогам Ну 1 мину сиг от этой штуки от X1 Омега 1 П X2 Омега 2 п Омега 0 как вам такое всё в принципе всё записано вот это и есть ваша

от X1 Омега 1 П X2 Омега 2 п Омега 0 как вам такое всё в принципе всё записано вот это и есть ваша Лос функция я подпишу ещё вот здесь всё-таки уточню что вот это это P с крышечкой наша вероятность предсказания Вчера мы назвали это Y прет Но сегодня P как бы вероятность Иногда вы можете увидеть что это Y с крышечкой Ну это одно и тоже P типа пробили удобне как вероят Да вот Ну что значит пора брать брать Градиент Давайте возьмём по Давайте возьмём по Омега 1 Кто хочет попробовать Если вам

брать брать Градиент Давайте возьмём по Давайте возьмём по Омега 1 Кто хочет попробовать Если вам кажется что это сложно это не очень сложно Поэтому я буду подсказывать я могу попробовать перво ЕС кто Давай давай во-первых сейчас поговорим с а только знаете что надо сделать минус вот так вот то есть минус у меня ко всему вот этому выражению применяется мы с вами сделаем производная суммы равна сумме производных поэтому Серёжа мы с тобой вот эту штуку сделаем а с кем-нибудь сделаем другим вторую

производных поэтому Серёжа мы с тобой вот эту штуку сделаем а с кем-нибудь сделаем другим вторую штуку Давай поехали первый член минус так и остаётся а производная первой части у нас Чему равна Так ну Y - это Константа она по идее просто вперёд идёт Н это а ну мы делим единиц делённая на вот эту сигмой нашу всю полностью я я вот так буду писать производная логарифма 1 / X То есть у нас следующий блок следующий блок - это действительно взятие производной ой взятие логарифма Да взятие логарифм

блок следующий блок - это действительно взятие производной ой взятие логарифма Да взятие логарифм Давай тогда что будет 1 дел на сигмой да а сигмоида - это и есть P с крышечкой давайте я прямо сюда и буду писать P с крышечкой вот это вот удобно же Вроде да вот и дальше у нас производная внутренности сигд там Остаётся только X1 забыл сигд - это тоже функция А точно точно Я про сиг забыл производна мы с вами проговаривая в среду можете поднять Это она вот так выглядит через саму же себя

мы с вами проговаривая в среду можете поднять Это она вот так выглядит через саму же себя выражается Ну значит умножаем ещ сигмой ени предсказание Поэтому я здесь буду складывать прямо вовнутрь вот так они удачно убивают к 1 ми и вс это уже умножается на производную внутри сигмоида что рано Абсолютно верно то есть проваливаюсь во внутрь производная сумма равна сумме производных всё это константы уходят Остаётся только до множе на X вот Давайте со второй частью Кто хочет вторую часть попробовать

Остаётся только до множе на X вот Давайте со второй частью Кто хочет вторую часть попробовать Не стесняйтесь как бы наоборот лучше даже тот кто не до конца понимает моя цель чтобы Вы меня поняли просто Кто хочет попробовать Ну можно я Давай давай так Ну также мы вытаскиваем о минус и Константа Абсолютно верно Так потом у нас опять идт логарифм только у нас получается теперь не не Внизу не пи а 1 ми пи 1 де 1 ми пи Всё верно 1 1 ми предсказано так Ага на остаётся разница производная разницы

а 1 ми пи 1 де 1 ми пи Всё верно 1 1 ми предсказано так Ага на остаётся разница производная разницы первая Константа мы е забываем как страшный сон А у нас остаётся получается минус ми1 ПП производную сиг забыл то есть ты вя константу взял этого тоже функция Не забывайте ми с крышечкой Уно 1 ми Абсолютно верно то есть с крышечка Умно на 1 ми с крыше минус этот не забываем не теряем его Поэтому вот так укажу что это с минусом это И вот ну и виновник нашего торжества последний да1 всё и смотрится

так укажу что это с минусом это И вот ну и виновник нашего торжества последний да1 всё и смотрится собственно говоря это дело до преобразуем получаем минус у нас внешний остаётся У первой части что остаётся y x X1 X 1 - P С крышечкой А У второй части А что остаётся 1 - Y у X1 умножить на минус P с крышечкой Давайте вот этот минус вот этот минус мы сейчас с вами засунем вот сюда вот сюда минус с крышечкой вот так вот ой 1 мину с крыше Да а нет с крышечкой ВС прави останется просто раскрыть

с крышечкой вот так вот ой 1 мину с крыше Да а нет с крышечкой ВС прави останется просто раскрыть скобки тут на этом вы думаете сокращения закончились вы ошибаетесь они закончились Давайте минус опять внешние скобки здесь раскроем то есть Y X1 я раскрываю вот эти ски крышечкой вот так потом минус получается Да теперь раскроем здесь Скобки что у нас здесь получается X1 P с крышечкой верно плюс плюс y1 с крышечкой и вот у нас сократился Второй член и осталась вообще ерунда если за скобки А минус

y1 с крышечкой и вот у нас сократился Второй член и осталась вообще ерунда если за скобки А минус засуну вовнутрь то получаю X1 X1 вот этот минус с этим минусом сократятся условно остаётся P с крышечкой мину Y всё вот и весь Градиент сложной функции то есть на самом деле чтобы оценить как себя ведёт эта функция нужно просто x домново предсказанного минус реально как как вчера только без двойки ты уже вынес Да из я только мог где-то со знаками ложать Я помню что это так но я не помню типа

ты уже вынес Да из я только мог где-то со знаками ложать Я помню что это так но я не помню типа реально минус предсказано или предсказано минус реально но я вам скину там ещё дополнительные источники Посмотрите я где-то мог здесь мы где-то смогли с вами вместе здесь минус за втыкать я вот этот момент не помню точно говоря всё а это значит что вам во вчерашнем дне чуть ли не просто в формуле где была двойка нужно убрать двойку и всё будет работать понятно Градиент когда вы будете считать и опять

двойка нужно убрать двойку и всё будет работать понятно Градиент когда вы будете считать и опять же видите Если бы у нас были бы элементы выборки X1 X2 как нашей задачи теперь А y предсказанный y Лос и ещё и Градиент Лоса Градиент Лоса все индикаторы обучения Да если реальное значение единичка и вы очень близки Лос нулевой и Обратите внимание Градиент тоже будет нулевой Да потому что вы предсказали 0,99 а реальное значение о всё алгоритм говорит что нулевой Градиент Это значит что эта точка

0,99 а реальное значение о всё алгоритм говорит что нулевой Градиент Это значит что эта точка Этот объект выборки не требует обновления весов модели он не капризничает у него всё прекрасно А те на ком будет жёсткий промах Ну например не знаю давайте единичка А мы прили 033 можно посчитать Лос Ну какой-нибудь условно Градиент будет там условно это то говорит нет ребят Так не пот мне промах надо менять веса Вот они соответственно 1000 точек так себя ведут и мы как бы всех выслушиваю и в итоге В

веса Вот они соответственно 1000 точек так себя ведут и мы как бы всех выслушиваю и в итоге В итоге получаем Вот эту вот вот эту вот линию получаем Вот эту вот получаем Вот эту вот линию Вот эту вот то есть она тоже как помните Вчера у меня график был который топал через точки график визуализацию помните вот тут тоже мы могли инициализировать так а потом похо похо топа и приходим куда-то куда-то приходим обязательно то есть линия градиента градиента Лоса не понял ещ раз вот э линия которая идёт

обязательно то есть линия градиента градиента Лоса не понял ещ раз вот э линия которая идёт порезал линия эту линию образует вот эту формулу Градиент - это компас это наш компас для того чтобы правильным образом выставить основа на конечных весах атно верно а начальная линия она могла бы быть с другими весами Но именно за счёт градиента мы от начального приходим к конечному мы становимся умнее мы становимся точнее и всё становится хорошо Да Костя То есть у нас в общем случае опять будет

мы становимся точнее и всё становится хорошо Да Костя То есть у нас в общем случае опять будет получатся жение матриц весов на просто на слайд с градиентом почита да да на что А на опять на матрицу которая будет там много на один я только не понял Ты про что говоришь про Вот вот когда вот про формулу про формулу градиента Когда мы будем задавать как для общего случая будет матричное перемножение всех весов нет обычно X1 Ты про Градиент говоришь или про что я не понял про Градиент про Градиент

всех весов нет обычно X1 Ты про Градиент говоришь или про что я не понял про Градиент про Градиент только в общем случае когда будет много весов ивто нету там Матрица признаков наоборот иксов Угу умножается на твоё предсказанное минус реальное всё Вчера у вас бы формула -2 у на X а наоборот предсказанное минус реальное по-моему вот так Ну практически не отличается практически не отличается то есть буквально два символа поменять Угу сейчас сек я тогда ещё открою код и дам небольшие комментарии

буквально два символа поменять Угу сейчас сек я тогда ещё открою код и дам небольшие комментарии вот смотрите вчера была Линейная регрессия вчера была Линейная регрессия Да что у нас поменяется с вами по-хорошему во-первых предсказание у нас будет Вот точно так же Вот это да потому что это есть X1 Омега 1 П X2 Омега 2 А что ещё Что ещё сюда Нужно для предсказания у нас правильно в случае классификации вероятность какую-то как вероятность что у на пала дальше идёт куда вот это значение идёт

вероятность какую-то как вероятность что у на пала дальше идёт куда вот это значение идёт дальше то есть вы вообще можете как бы по-хорошему ну тут как вы Оформите дело ваше Ну можно написать просто типа Симо да Сюда прописать эту функцию которая принимает знание наме и возе точка что о возвращает о 1 де 1 п е в степени мину Z вот всё А здесь просто мы как бы говорим Self точка сигмой у себя же достаём метод и всё всё что нужно поменять на самом-то деле это первое изменение это первое изменение

метод и всё всё что нужно поменять на самом-то деле это первое изменение это первое изменение так беру второе изменение второе изменение это то что вот здесь чуть-чуть поменяется здесь чуть-чуть поменяется Вот это минус д упадёт и возможно как бы со знаками что-то наоборот станет эро вы поменяете местами эти два Короче я вам сейчас ещ скину течку на всякий случай по что вдруг я завалил где-то с минусом но пока что вот как бы вот так нужно записать всё больше вообще просто поменять вот эти две

минусом но пока что вот как бы вот так нужно записать всё больше вообще просто поменять вот эти две вещ мо заработает И будет зада образом так ещё какие вопросы а если я Зами нусуев что будет Зами нусуев или завалишь с минусами наоборот Ну нет ответа Ах Чёрт учитель называется Ну да да ко вчера ещё было немножко сложно там начиная со скор Когда нужно было проверить ошибку просто вот в общем наверно теоретически понимании какие-то были вопросы Там какой вопрос Там мы использовали что мы

наверно теоретически понимании какие-то были вопросы Там какой вопрос Там мы использовали что мы использовали могли Любу трику отличие Лоса от метрики знаете какое в принципе и то и то оценка качества Лос всегда нужен во время обучения а Метрика нужна чтобы посчитать после обучения здесь Конечно я её считал Но она как бы после эпохи считается Лос минимизируется поэтому скор скор ты можешь любую метрику оценить Как ты считаешь вот вот на твой взгляд вот смотри вот есть люди реальное значение

метрику оценить Как ты считаешь вот вот на твой взгляд вот смотри вот есть люди реальное значение купил не купил шоколад и мы что-то на предсказывали вот как бы ты Оценил качество этой модели сколько с сколько предсказанных значений совпало с реальными это очень логично да и это самая известная Метрика Которая так и называется accuracy Score которая у меня здесь изображена Вот то же самое в линейной в этих в регрессия то что было вчера есть ряд известных метрик это minan Absolute Error Да

линейной в этих в регрессия то что было вчера есть ряд известных метрик это minan Absolute Error Да модуль отклонения реального от предсказанного mse квадрат отклонения от предсказанного а R2 СР пока не буду вас грузить внутри просто воспринимаю что чем ближе она единица - это максимум чем ближе к единице тем лучше вот какую-нибудь метрику можешь выбрать для качества сегодня действительно метрики будут другие вот вам сегодня понадобится просто вчера получилось Там что получилось какие-то

будут другие вот вам сегодня понадобится просто вчера получилось Там что получилось какие-то большие значения и видимо было сложно интерпретировать их но не у тебя полу плохо интерпретируется Да нужен больше для обучения его как метрику редко используют его как интерпретируем Да очень сложно коллеги Из соседнего отдела будет объяснить что у нас mse получилось 19 млн и это на самом деле неплохо ещё в этом контексте А вот когда уже всем понятно да что в среднем отклоняются на СТО квадрат очень не

в этом контексте А вот когда уже всем понятно да что в среднем отклоняются на СТО квадрат очень не интерпретируя штука Но для обучения он лучше потому что он дифференцирован везде Да Саша а у нас модель получается должна Преди выдавать получается цифру да либо о либо но кла Вот и см м вероятность принадлежности то есть числа должна выводить на самом деле смотрите возм есть покажу хороший момент подняли у всех алгоритмов есть у всех алгоритмов классификаторов поменяли документацию [музыка]

подняли у всех алгоритмов есть у всех алгоритмов классификаторов поменяли документацию [музыка] Выведи он вам даст уже округлённое значение округляет по умолчанию он относительно ВС что выше 0 к едини всё что ниже Ну то есть если вы получаете от нуля до О если вы хотите в вероятностях получить ещё вероятно без без округления то вы можете вести и получите весть это у всех классификаторов так работает потому что все понятное дело Он вернёт только вероятность или вероятность И решение нет решение

потому что все понятное дело Он вернёт только вероятность или вероятность И решение нет решение на тебе будет Угу ведь мы же иногда двигаем Иногда мне нужно мне надо это те же самые Альфа и Бета ошибки первого второго рода вероятность совершить меня иногда не удовлетворяет там вероятность даже 20% совершить ошибку я могу поставить границу различия там 095 То есть я единицу что меня купит шоколадку Но если только точно купит шоколадку Тогда я буду ему Дато продолжени Эс так ну ладно ко те ещ

Но если только точно купит шоколадку Тогда я буду ему Дато продолжени Эс так ну ладно ко те ещ вопрос Да ну корот коротко да вопросик почему мы вчера ушли от и например ограничились только количеством эпох которые мы каким-то образом решили воспринимать Ну просто есть такая оочень много времени занимать часто это стат через фор видит что если ты не дошёл запускают ещ Если ты не дошёл запускают ещ Вот Но при этом есть как бы эси то есть это тоже выставляется по-моему той же самой логистической

Вот Но при этом есть как бы эси то есть это тоже выставляется по-моему той же самой логистической регрессии должен быть этот параметр если мне память не изменяет Ну не максимальное количество рации это и есть количество эпох Да по факту здесь Е есть раше бы Может у есть это есть то есть видишь когда останавливать он стоит по [музыка] умолчанию это ва В прямом смысле то есть его выставить можно в принципе но часто пишу через просто [музыка] с быстрый вопрос Мы вчера забили на регули быстренько

принципе но часто пишу через просто [музыка] с быстрый вопрос Мы вчера забили на регули быстренько сейчас дам комментарий про регуляризации м там в принципе этот там не так сложно мы сейчас за 5 минут справимся так так так что у нас вчера было так по поводу вчерашнего Да вот линейный регрессия Блин вот это у меня из VPN картинка съехала но как бы она у вас отобразится в репозитории вот там собственно говоря просто м на тему Что Логистическая регрессия решает задачу классификации надо не путать

говоря просто м на тему Что Логистическая регрессия решает задачу классификации надо не путать Единственное исключение знаете как в школе оловянный деревянный стеклянный Да по-моему вот примерно та же рубрика то есть единственная кто называется не своим этим это просто надо запомнить и всё и не пытаться это объяснить Так так так так ну Логистическая регрессия пайплайн построение сначала гиты Да сначала Линейная комбинация перемножения далее это уходит всё в сигмой получается отрезок от нуля до

Линейная комбинация перемножения далее это уходит всё в сигмой получается отрезок от нуля до одного Мы это интерпретируем как прижать классу о и округляем в нужную нам сторону всё что мы с вами обсудили здесь наверно здесь график сигмоида здесь график сигмоида у меня короче ну я вам все фки прикреплю ничего в принципе нового здесь нет то что съехало так и А мы про регуляризации хотели проговорить про регуляризации регуляризация что она из себя представляет смотрите она есть Кстати как в

про регуляризации регуляризация что она из себя представляет смотрите она есть Кстати как в логистической регрессии так и в линейной регрессии регуляризация стари его спрашивают на собеса про регуляризация то странная математика я как бы как не понимал её до конца так и не понимаю Вот но как бы инструмент сам по себе популярный он как бы эмпирически себя неплохо показывает в чём его суть смотрите вот мы с вами как бы вспоминаете вчерашнюю задачу вчера вчера Вчера мы с вами минимизировать вот

вот мы с вами как бы вспоминаете вчерашнюю задачу вчера вчера Вчера мы с вами минимизировать вот эту штуку мы с вами минимизировать Вот эту вот штуку правильно это МС называется напомню ми так вот есть три вида регуляризации они нужны запомните первое если вас спросят про регуляризация говорите Что это способ борьбы с переобучения переобучение когда мы заточили на Рейно данные и не выкупаем тестовые данные а более подробное переобучение мы будем говорить на следующей неделе как бы переобучение

данные а более подробное переобучение мы будем говорить на следующей неделе как бы переобучение можно самом деле объяснить в двух словах действительно когда вас на данных точности очень-очень высокие а на тестовых очень-очень плохие модель заточила под то что видела и вообще не понимает что делать с тем что не видела она не выделила общие паттерны а она начала реагировать на шумы в тренировочных данных и вот регуляризация нужна первая вещь бороться с переобучения второе чтобы не уходили в

данных и вот регуляризация нужна первая вещь бороться с переобучения второе чтобы не уходили в космос не уходили в космос веса как это добиваются с помощью математики добавлением вот такого члена этот член вот эта штука это сумма модулей просто можете сильно прямо не грузиться сумма сумма сумма модулей сумма модулей Да вот это вот у меня непосредственно м вес сейчас я о нём тоже подробнее Проговорил и теперь когда Лос функцию мы её пытаемся минимизировать я для себя это воспринимаю в голове Как

и теперь когда Лос функцию мы её пытаемся минимизировать я для себя это воспринимаю в голове Как Весы знаете то есть лоу приходится взвешивать Конечно бы очень хотелось это минимизировать Но если начинает расти вот стано большими приходится тормозить и приходится вот этот компромисс ловить это называется регуляризация или ласа если мы даже с вами откроем документацию откроем документацию не переживайте Сейчас сильно можете это не запоминать об этом будет следующая неделю вот если открою

переживайте Сейчас сильно можете это не запоминать об этом будет следующая неделю вот если открою линейную регрессию вчерашнюю тему Да Обратите внимание что вот они даже в документации пишут ребят Посмотрите также это рере регуляризация Да вот далее есть L2 регуляризация L2 регуляризация тоже самое только добавляется квадрат квадрат весов это называется Рид регуляризация она самая популярная Из всех трёх квадраты опять там дифференциал как бы ну кайф всё без проблем всё производная себя

Из всех трёх квадраты опять там дифференциал как бы ну кайф всё без проблем всё производная себя нормально чувствует О даже первый записано потому что она самый популярный регуляризация и и и есть регуляризация которая называется elnet которая агрегирующие [музыка] Омега 2 веса наши вот у нас есть пространство весов мы пытаемся Вот вы вчера как раз по-моему два веса настраивали Да ну два-три веса вот здесь два мы пытаемся найти идеальную точку весов где Лос минимальный Лоса здесь на рисунке нет

вот здесь два мы пытаемся найти идеальную точку весов где Лос минимальный Лоса здесь на рисунке нет здесь есть только веса и представь что эта точка где-то была Вот здесь Да это наилучшая с точки зрения математики Но не всегда лучшая с точки зрения реальности и жизни потому что это может быть переобучение модели Ну типа прикиньте модель ей же кайф менять Лос правильно она хочет а если у вас заумные новые данные она будет пытаться в эти шумы проникнуть И забьёт фиг вообще тестовую выборку это

новые данные она будет пытаться в эти шумы проникнуть И забьёт фиг вообще тестовую выборку это как бы плохо для жизни Хорошо для математики Но плохо для жизни так вот регуляризация это эквивалентно как тюрме некоторой ограничению так как регуляризация связана с модулями а модули имеют вот такую структуру это тюрьма в виде Ромби хотела сюда но ей из-за второго члена нужно угодить и быть внутри и это бы вылилось в то что вот точка легла у нас с вами Сюда Тоже самое для L2 регуляризации Да

и это бы вылилось в то что вот точка легла у нас с вами Сюда Тоже самое для L2 регуляризации Да квадратная сумма квадратов из математики известно это уравнение окружности поэтому Получается примерно такая история Ну и L1 L2 - это понятно да ромбик плюс кружочек равно вот эта вот штучка в то есть регуляризация держите картинку вот эту в голове а если вас будут спрашивать всегда первое что Вы должны сказать что регуляризация - это борьба с переобучения и сильно можете пря себя сильно не грузить

сказать что регуляризация - это борьба с переобучения и сильно можете пря себя сильно не грузить если столк с этим больше Ну значит будете чуть поглубже Прочитайте пару статей наб да Люба вот я когда изучала эту те самостоятельно вот даже вы параметрам и определяет степень разреженность А сложно Сложно очень сложно лю проще Вот смотри прибью тебя вот этот Альфа коэффициент это есть коэффициент регуляризации то что ты сказала он влияет на размер вот этой тюрьмы на вот размер если ты поставишь

регуляризации то что ты сказала он влияет на размер вот этой тюрьмы на вот размер если ты поставишь большой Альфа ты говоришь что регуляризация сильная ограничение большое ромбик Станет таким ели А стре к ну бесконечный ромб и никакого ограничения нет бесконечное поле поняла Вот лучше такой вот через такую историю мысли а вот это разреженность и сжатия параметров это про что вообще если ты это скажешь ты скорее напугаешь се беседую лучше наоборот Скажи ему просто что это борьба с переобучения и

ты скорее напугаешь се беседую лучше наоборот Скажи ему просто что это борьба с переобучения и нужно настроить веса вот ой нужно настроить коэффициент регуляризации и получить адекватные веса это уже просто очень математично регуляризация объясняется а вообще надо стараться как бы где можно избегать математики Ну стараться как можно меньше в неё в глубину погружаться Так что то что я сказал будет гораздо лучше если ты так запомнишь регуляризации хорошо спасибо Угу Серёжа а я правильно понял

гораздо лучше если ты так запомнишь регуляризации хорошо спасибо Угу Серёжа а я правильно понял прост словами то что лизация - это добавление в лоз функцию ещё одной штуки которая ругает за сложность модели да да понял Оке Типа того Типа того и как бы вот смотрите если у линейной регрессии это лежит отдельно Линейная регрессия это лежит отдельно А у логистической регрессии Я не знаю почему так сделал Ну решил он так сделать они это включили как гипер промет причём по умолчанию логистической

сделал Ну решил он так сделать они это включили как гипер промет причём по умолчанию логистической регрессии включена регуляризация L2 которая самая популярная Вы можете либо выключить либо тоь + l22 L1 включить сегодня когда у вас Бут чуть-чуть не сходиться веса помните что это из-за регуляризации пенальти равно Нан выставить и всё сойдётся А ещё можно сказать что из практики не все регуляризации Не все модели дружат со всеми регуляризация Ну да да можно сказать но регуляризация в принципе Она

Не все модели дружат со всеми регуляризация Ну да да можно сказать но регуляризация в принципе Она есть у многих инструмента Она есть у тех кто минимизирует Лос То есть у нейронных сетей все нейронные сети имеют регуляризации на следующей неделе мы будем проходить градиентный бустинг само слово Градиент подразумевает что мы будем минимизировать функцию там тоже есть регуляризация поэтому как бы если если вы хотите изменить Код Да и реализовать не например не линейную регрессию ала это п1 так

если если вы хотите изменить Код Да и реализовать не например не линейную регрессию ала это п1 так как там добавляется тупо сумма модулей вам нужно вть производную этого члена помет вам подсказывать чему Вот тоже самое с квадратом то есть меняется буквально вам во вчерашнем коде надо добавить два символов Градиент и всё всё будет работать точно так же Вот такая вот регуляризация ещё немножко регуляризации мы поговорим с вами на следующей неделе Так что я бы сейчас на вашем месте даже сильно на

мы поговорим с вами на следующей неделе Так что я бы сейчас на вашем месте даже сильно на ней не фокусироваться немножко восприняли проговорили лучше фокусироваться на том как происходит обучение моделей ци Лос функции классы най всё вот это свою энергию туда пока что направьте так и последнее Давайте проговори сегодня по поводу ваших заданий по поводу ваших заданий по поводу ваших заданий что вас сегодня ждёт у вас будет датасет с абсолютно реальными данными где у нас есть две фичи опять фичей

сегодня ждёт у вас будет датасет с абсолютно реальными данными где у нас есть две фичи опять фичей так мало только по одной причине чтобы вы в конце могли визуализировать результат Да у нас есть с вами две фичи есть две фичи рейтинг по кредитной карте у человека и уровень дохода клиента человек прил кредитом навин Реди не произошло ли дефолта по кредиту вернул ли он в срок то есть всё О'кей было с ним грубо говоря единичка проблемный чувак ноль не проблемный и собственно говоря есть выборка

с ним грубо говоря единичка проблемный чувак ноль не проблемный и собственно говоря есть выборка есть выборка и тут всё Опять вам по шагам всё расписано расписано тоже как вчера самое главное что на выходе этова жду - это класс логистической греси Всё тогда времени не буду занимать у вас сегодня день очень сжатый Потому что если мы пойдём с вами смотреть А я бы советовал вс-таки посмотреть 4 часа проекта старшей группы как бы средней группы скажем так сейчас на данный момент средне группы вот а

проекта старшей группы как бы средней группы скажем так сейчас на данный момент средне группы вот а в 5 часов вообще выпускные проекты сегодня одна из групп заканчивает обучение Поэтому нам с вами поро надо созвониться уже орано В4 [музыка] поэтому дел много времени мало так что работаем трудимся пров напоминаю но мнем многие написали и в личку кто я как бы тогда график Составлю Исходя из этого просто мне сейчас или давайте договоримся так сейчас время 11 до 12 мне напишите про ревью хорошо И

просто мне сейчас или давайте договоримся так сейчас время 11 до 12 мне напишите про ревью хорошо И самое главное не было вот этого размытой истории А мы с вами чётко по существу проговорили эти вопросы кстати могут быть связаны не только с учёбой Если вы просто переживаете от темпа или от чего-то ещё от того что что-то не понимаете всё вопросы ко мне какие-нибудь на сколько проектов вче и в пять да Люба У меня первый вопрос у нас на следующей в конце следующей недели будет проект Да личный

да Люба У меня первый вопрос у нас на следующей в конце следующей недели будет проект Да личный личный нет нет команды коман проект в пятницу да Ну вот по факту вот то что вы сейчас делаете можно назвать проектами эти проекты у вас просто Личного характера чтобы вы поняли базу в себе чуть-чуть повалили иногда это надо Дальше подут командные проекты всегда Следующий вопрос Вот смотри если у меня вчера не получилось Ну у меня работает но цифры дурацкие можно я возьму твою Вчерашнюю работу и сего

не получилось Ну у меня работает но цифры дурацкие можно я возьму твою Вчерашнюю работу и сего Да пожалуйста Если вдруг ну а потом что тоже сравнить с коробочной версией да да да да всё тоже тут всё прописано в этом файле всё прописано хорошо А примерно во сколько будет ревью вообще в какие часы пото что день такой плотный Сегодня я сам ещё не знаю зависит от того сколько вас [музыка] будет Поэтому про мне главно Дайте знать я сес СМИ Ну с кем-то Я начну уже сейчас буквально через там 10 минут

про мне главно Дайте знать я сес СМИ Ну с кем-то Я начну уже сейчас буквально через там 10 минут на перекур условно взять и надо уже начинать будет Вот ну ты мне вчера писала поэтому Люба Готовься с тобой мы рано начнём А слушай а у меня с 12 до час сейчас Я прямо это же 11 А да Хорошо всё ладно давайте так Главное главное просто Дайте я себе знать в слаке чтобы я понимал хорошо вот Ну всё тогда давайте хорошего продуктивного дня вам и на связи пока-пока

H смотрите как научился сейчас оп оп а нет нет не научился отмена м так Ладно на следующем созвоне пон тануть Пока не получается Так Доброе утро всем Кого видел кого не видел как настроение кайфово чно Так сейчас я открою секунду ше всё Сегодня нас ждёт длинная лекция самая длинная лекция вообще всего не всего обучение СС фаза один Так что будем много чего узнавать так видимо отлично Ну что ж мы переходим с вами к третьей неделе обучения эта неделя будет посвящена машинном обучению знакомство с

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

это делается в коде вот ну что ж Поехали сегодня разберём Да основные алгоритмы также посмотрим вот как Как можно ответить на вопрос как Какой признак самый важный визуализирую построенные алгоритмы Вот мы с вами в принципе посмотрим три семейство моделей Да и как бы да на этом всё всё что мы сегодня будем с вами разбирать это нелинейный алгоритм нелинейного характера вот если смотрите даже вот вот у нас такая ситуация предположим Да это задача классификации задача классификации И вот я нарисую

у нас такая ситуация предположим Да это задача классификации задача классификации И вот я нарисую на всякий случай пространство чтобы вы проводили параллель с тем кто кто на прошлой неделе чтобы вы проводили параллель с тем когда вы на прошлой неделе делали логистическую регрессию то есть вот пространство есть квадратики и треугольники Да ну как бы Логистическая регрессия разделила бы квадратики от треугольников Ну может как-то Вот так бы да наверное то есть да одна ошибка есть но в целом

от треугольников Ну может как-то Вот так бы да наверное то есть да одна ошибка есть но в целом Понятно невозможно разделить идеально и идеально ли это было бы Вопрос вот метод к ближайший соседей совсем по-другому прихо а совсем по-другому подходит к предсказанию объекта смотрите вот возьмём вот этот кружочек это пришёл Новый объект или иренс ему нужно предсказать Кто он то есть он треугольник или квадратни метод ка ближай соседи работает достаточно по простой логике он берёт к ближайших

или квадратни метод ка ближай соседи работает достаточно по простой логике он берёт к ближайших соседей Ну давайте мы с вами предположим Поставим к ра 3 когда я ставлю к равно 3 мы находим с вами три ближайших соседа Вот они Ну и принцип здесь очень простой Кто как ну у нас Два треугольника один кружочек значит Кому мы отнесём треугольник Да ВС достаточно Просто если бы мы поставили с вами ра 5 рап то мы бы увидели что среди пяти ближайших соседей уже три квадратика и Два треугольника Да если

рап то мы бы увидели что среди пяти ближайших соседей уже три квадратика и Два треугольника Да если бы мы как просто бы соответственно ничего другого ещё не настраивали о чём мы поговорим дальше то мы бы предсказали что это квадратик этот метод ещ раз называется ну как бы на английском да или к ближайших соседей лежит он в библиотеке esalen у нас всё будет с вами лежать в библиотеке esor практически сегодня вот K neighbors classifier есть также knb regressor вот всё по классике здесь методы А

сегодня вот K neighbors classifier есть также knb regressor вот всё по классике здесь методы А здесь параметры вот то что здесь указывается это называется гиперпараметры алгоритмы они сдаются до обучения модели То есть вы когда создаёте экземпляр то надо указать количество соседей до этого Вот потому что как бы мы с данными ещ не знакомы но уже настраиваем свой скелет под эти данные вот как-то так то есть я работаю с такими данными где может быть Мне выгодно было бы поставить к Рав 3 а кость

так то есть я работаю с такими данными где может быть Мне выгодно было бы поставить к Рав 3 а кость работа с такими данными где ему к ра 10 надо поставить да Вот в общем это настраиваем до доком с Дан и конно Под каждый остаётся кнн запомните это пожалуйста этот термин я буду произнести ещё не раз гиперпараметры алгоритмы гиперпараметры - это параметры задающие се до обучения задающие прямо внутри А как бы само самой модели грубо говоря вот что ещё важного из гипер параметров есть у кнн ну

А как бы само самой модели грубо говоря вот что ещё важного из гипер параметров есть у кнн ну вообще говоря второй важный параметр Ну согласитесь как-то не типа треугольника да меньше Но они в целом-то гораздо ближе может быть вот как бы смотрите если я просто вот K равно 5 указал Да к равно 5 указал то у меня вероятность быть квадратиков квадратиков она 3/5 а вероятность быть треугольником Она 2/5 правильно 3/5 и 2/5 но это если в случае я всем даю одинаковый вес по одной Пятый А почему я даю

правильно 3/5 и 2/5 но это если в случае я всем даю одинаковый вес по одной Пятый А почему я даю одинаковый вес А может я хочу дать треугольникам больше вес и собственно говоря есть такая штука есть такой Гипер параметр он второй по умолчанию он стоит юниформ либо равномерный между всеми членами между всеми соседями но вы можете указать дистанс Если вы указываете если мне память Да вот Вес вес он даёт собственно говоря исходя обратно их расстояни есть у этого тоже У этого о то этот вес получит

даёт собственно говоря исходя обратно их расстояни есть у этого тоже У этого о то этот вес получит 1 этот вес получит 1/2 этот 1/3 ну и так далее Короче кто дальше тот получает меньший вес Всё достаточно просто вот тут часто ещё в эрне вы увидите это значит что вы можете вообще туда свою функцию подать целиком если Например ко не согласен с тем как надо Ну по-своему хочет задать как-то вес объекта именно вот в этом случае я ни разу такого не делал но в других случаях периодически писал То есть

именно вот в этом случае я ни разу такого не делал но в других случаях периодически писал То есть это нормальная практика в эрне хорошая штука вот что ещё важного есть по гиперпараметры укн Да в принципе сильно важного больше ничего нет то есть вот эти два гиперпараметры достаточно важны могут повлиять на точность ещё важно наверное знаете что там ещё важно а ну да важно какое вот а как считать расстояние между объектами помните Вот давайте вот этот вот возьмём Ну и как координаты высчитать Так

между объектами помните Вот давайте вот этот вот возьмём Ну и как координаты высчитать Так ну вычи что клино чтото такое расстояние Абсолютно верно евклидово расстояние по умолчанию стоит евклидово растояние евклидово через прямоугольный кат кат и гипотенуза Ну как бы в 3 простран ой в мерном пространстве это просто сумма квадрато всех сторон Вот это и будет квадратом расстояни Да есть и в кли мира есть ещё по-другому называют расстояние Манхеттен по аналогии типа с такси в Манхеттене тно есть

есть ещё по-другому называют расстояние Манхеттен по аналогии типа с такси в Манхеттене тно есть есть как этот идт как знаете как шито и когда нужно посчитать таксисту как с одной точки доехать в другую именно в километрах Мы же не как не через дома посчитаем Да а посчитаем по улицам и тут В каком-то смысле тоже вот если по дорогам Как сюда попасть то вот сюда и вот сюда то есть сумма вот этих двух Строн это называет манхв ское расстояние вот и это тоже гиперт поб об что вот расстояние Что

двух Строн это называет манхв ское расстояние вот и это тоже гиперт поб об что вот расстояние Что значит ближайшее вот если P ра 1 то это махновского расстояние если P равно двум то это евклидово расстояние Если вы можете P брать другого размера какого-то для этого у вас есть гипер параметр Но обычно никто не ставит никто не ставит выше выше чем этот чем первая и вторая норма вот либо по умолчанию Я не сказал что это сильно влияет только если на ма полу у нас все разные или не Погоди это один

Я не сказал что это сильно влияет только если на ма полу у нас все разные или не Погоди это один из его [музыка] значений либо п либо се можешь поставить либо униформ либо понял Это его значение всё понял как он рассчитывает важность это То есть юниформ - это значит все бы вот эти пять Да которые прик равном п имели бы одинаковый вклад А если то треугольники могли бы перетянуть на себя и тогда мы бы предсказали Несмотря на то что треугольника д а квадрата 3 мы бы предсказали треугольником

мы бы предсказали Несмотря на то что треугольника д а квадрата 3 мы бы предсказали треугольником потому что они имеют больший вес понял изал то что мы можем сами написать свой собственный да да то есть где вы видите ко это значит ну читайте тут то что внутри Да ну то есть собственно говоря это функция которая короче тобою написано грубо говоря да спасибо СН понял Угу Так ещё какие-то вопросы ребят Хорошо хорошо Вот ну смотрите Я на всех гипер параметрах останавливаться никогда не буду если хоте

Хорошо хорошо Вот ну смотрите Я на всех гипер параметрах останавливаться никогда не буду если хоте меня читайте обязательно смотрите например вот это алгоритм поиска ближайшего соседа он конечно влияет на производительность и на скорость больше чем на точность Да вот но тут как бы достаточно неплохой алгоритм по умолчанию стоит лучше не трогать читайте что это такое если вам интересно Метрика читайте что это ну что если вам это Интере алгори ключевых Вот хорошо смотрите если в случае

читайте что это ну что если вам это Интере алгори ключевых Вот хорошо смотрите если в случае классификации Понятно А в случае регрессии думаете как то есть в случае классификации я нашёл трёх ближайших соседей предположим два единичка 1 0 предсказал как единичка А в случае с регрессией Как происходит вот метод к ближайший соседи как даёт предсказание Бер точка она является миной и вокруг него то есть точка гравитационная и то что распределение и все Кто попадает они попадают бли лучше

него то есть точка гравитационная и то что распределение и все Кто попадает они попадают бли лучше предположение не знаю Ну нет ты правильно сказал Не ну я найду в пространстве ближа сосе как я буду предсказывать имен кто ближе к мину у того больше или просто дистрибьюция номе У кого больше смотри Давайте подго сделаю я вот нарисую график потому что ну в регрессии я могу сделать только один D график чтобы потому что Таргет занимает одну ось в отличие от классификации вот Давайте по квадратным

чтобы потому что Таргет занимает одну ось в отличие от классификации вот Давайте по квадратным метрам нужно предсказать стоимость Да и у меня были какие-то точки выборки Ну вот это всё как бы какая-то выборка существовала Ну и короче как-то Вот такая вот история предположим предположим и у меня приходит точка Точнее не приходит точка У меня приходит Ну объект выборки нужно оценить квартиру которая условно имеет 23 вам вот она 23 квам Как дать [музыка] предсказание Ред та по соседям будем а по

условно имеет 23 вам вот она 23 квам Как дать [музыка] предсказание Ред та по соседям будем а по соседям В каком плане Ну соседи по иксу как Да именно по иксу то есть вот у меня 23 оказывается что вот эта квартира вот эта квартира вот эта квартира и вот эта Пусть четыре соседа вот эти четыре квартиры были ближайшими ко мне в плане метража но они похожи на меня понятно то есть они максимально похожи будет странно меня сравнивать с квартирой там не знаю 80 МТ я беру четыре вот эти цены чере вот

будет странно меня сравнивать с квартирой там не знаю 80 МТ я беру четыре вот эти цены чере вот эти цены и усредни ближайшие соседи Вот они чере Точки которые оказались ближайшими Да вот они четыре точки которые оказались ближайшими у них я взял их стоимость и усредни всё получил предсказание такого прикола как с логистической ф также Ну вот даже не буду через Google открывать вот слева да в навигации всё тоже самое абсолютно всё тоже самое просто Единственное что да как бы он на вход от вас

всё тоже самое абсолютно всё тоже самое просто Единственное что да как бы он на вход от вас ждёт какую-то непрерывную величину а не дискретно нис конечным числом да Костя вопрос на понимание короче на вспомнить кону регресси ные то есть по одно знани знание на этой прямой будет для пред так да А всё Значит правильно запомнил не сре здесь провела бы и любое твоё предсказание в том числе короче вы поняли даже квартира 23 м это предсказание было бы то что лежит на прямой линии вот здесь более

вы поняли даже квартира 23 м это предсказание было бы то что лежит на прямой линии вот здесь более сложная история как всё это строится как всё это строится но я вам там покажу как можно это посмотреть здесь уже какая-то нелинейная будет история но она плюс-минус будет похожа конечно но она нелинейная будет то есть метод нелинейный А как раз хотела спросить поскольку слово регрессия используется получается что мы это включаем в работу регрессию ты можешь применить как бы мы сначала разберём л

получается что мы это включаем в работу регрессию ты можешь применить как бы мы сначала разберём л вы попробуете все модели потом я скажу плюсы линейную регрессию когда включать с нарот сказать когда конкретно Ну то есть если есть нелинейная зависимость данных можешь попробовать использовать То есть у главный плюс в том что он нелинейно уже частично уходит в про истори но это не самый современный алгоритм Да Который прям там вообще Рит чудеса а Линейная модель в прошлое не уйдёт того что она

алгоритм Да Который прям там вообще Рит чудеса а Линейная модель в прошлое не уйдёт того что она линейна пото что все стремятся к простоте все стремятся к простоте Так ну что А мы с вами идём дальше мы с ми им Да вот это [музыка] завари встречается чаще регрессии берём ка седи и вычисляем среднее можно средне врен значение нового объекта как-то так как-то Так ну что ж у метода к ближайших есть соседей есть некоторая проблема в том что вообще как бы ну алар да Или выброс он всё равно отнесётся к

есть некоторая проблема в том что вообще как бы ну алар да Или выброс он всё равно отнесётся к какому-то классу хотя в принципе ну как бы он вообще другой природы Ну короче когда ваши ближайшие вы находитесь в Москве ваши ближайшие во Владивостоке примерно так то есть очень далеко но вы ВС равно как-то будете классифицироваться исходя из них хотя ничего общего вы как физические объекты выборки там ну в жизни да можете не иметь совершенно Вот для этого есть аналог метод или радиус neigh около

там ну в жизни да можете не иметь совершенно Вот для этого есть аналог метод или радиус neigh около тебя мо быть далеко а Включить радар определенного размера и Уж сколько будет соседей столько будет тут Единственное что вы задаёте это вот это расстояние Это насколько у вас радар работает а дальше всё тоже самое в радар попадает какое-то количество соседей да В данном случае у меня сем соседей Но кто мы здесь будем красный или зелёный будем боль вот этот бое может тяне всех как ахиле стоит

Но кто мы здесь будем красный или зелёный будем боль вот этот бое может тяне всех как ахиле стоит против них но я думаю что вс-таки не получится у точно также кстати даже по-моему вр в у них часто есть блок и Вот видите здесь в том числе радиус Ne можно ОТК так да вы сказали то что есть два параметра гиперпараметры которые достаются до обучения моделей а второй это какой вид который после обучения типа веса например мы устанавливаем до обучения пос не погоди не в смысле который есть у это вот

типа веса например мы устанавливаем до обучения пос не погоди не в смысле который есть у это вот Виса линейный модель который вы настраивали короче это когда модель обучила Она что-то запоминает и знает о данных понял параметры часто можно вытащить Ну например у линейной Логистическая агрессия - это веса веса же настроились у вас правильно после обучения Дада То есть тут наложили два понятия вот веса которые вме это не тоже самое что и веса веса веса соседи - это просто гиперпараметры А вот

веса которые вме это не тоже самое что и веса веса веса соседи - это просто гиперпараметры А вот веса как бы вклада каждого признака то что было на прошлой неделе это вот как бы параметры которые получены после обучения Угу Так Саша да у нас У меня вопрос про Ну то что радиус же который мы выставляем это тоже гипер параметр вот При таком и найдётся же такой Гипер параметр выстав при котором мы не найдём ближайших соседей в этом радиусе даме выбросом Вот и в этом случае у нас просто алгоритм

не найдём ближайших соседей в этом радиусе даме выбросом Вот и в этом случае у нас просто алгоритм будет увеличивать радиус пока не найдёт первого соседа или нет Я тебе говорю просто тебе вернёт мис У них даже есть гипер параметр чем чем обозначать то что он считает выбросами Да кстати прикольная тема но тоже слабенький алгоритм объективный просто сейчас пол в э история развивается но в свои времена вообще кайфовая тема понял спасибо Так гиперпараметры мы проговорили основные я вам Давайте

времена вообще кайфовая тема понял спасибо Так гиперпараметры мы проговорили основные я вам Давайте двигаться дальше следующий алгоритм я его проговорил метод опорных векторов его кстати использовал я Давненько его не видел там на проек Далее артеми в прошлой группе на прошлой неделе Когда у них был проект я е написал что Старая школа Ува кторов это вот собственно говоря этот алгоритм во-первых смотрите как он работает вот у нас есть задача классификации Да у нас опять с вами два класса метод

смотрите как он работает вот у нас есть задача классификации Да у нас опять с вами два класса метод опорных кторов в случае 2D по факту объективно работает так же как Логистическая регрессия То есть он линейным образом пытается разделить а два класса Да у него хоть и выглядит это как на самом деле типа не разделяющая прямая разделяющая плоскость и вот как бы нуно это по факту две прямые которые максимально пытаются отжать два класса то есть один класс к первому или опорному вектору одного

максимально пытаются отжать два класса то есть один класс к первому или опорному вектору одного класса а вторая прямая к другого класса но поверьте на выходе всё тоже самое как Логистическая регрессия то есть метод опорных векторов в случае линейного случая метод опорного короче вы поняли в линейном варианте использовать не надо Просто использу логистическую регрессию он как бы более красивше выглядит выглядит более красивше когда если применить нелинейность в методе опорных векторов и как это

выглядит более красивше когда если применить нелинейность в методе опорных векторов и как это выглядит смотрите вот у нас есть исходное пространство в данном случае объекты линейно неразделимы правильно то есть Логистическая регрессия Как вы хоть как поте у вас не будет Лос нулевой но не может она просто разделить Логистическая регрессия Да здесь красно зелёно вот как в таком случае вами создадим третью ось Ну в данном случае третью Но вообще Её называют N п пер ось И вот это N п первая ось это

третью ось Ну в данном случае третью Но вообще Её называют N п пер ось И вот это N п первая ось это будет функция какая-то от остальных осей Ну пусть Вот это у меня будет X1 вот туда уходит X2 и вот это какая-то функция от X1 и X2 А дальше Вот эта функция с помою градиентного спуска подбирается так чтобы один класс а другой оставить внизу понятно в данном случае с помощью параболоида это уравнение это полином второй степени то есть с помощью полинома второй степени полином второй степени

это полином второй степени то есть с помощью полинома второй степени полином второй степени способен отрисовывать параболоид вы все видели в школе Y ра X к это Парабола Да вот то есть с помощью полинома второй степени можно вот вот настроив по градиентного спуску параметры вот так вот вытянуть Если вы укажете параболой полиномы больших степеней он сможет отрисовывать горы то есть максимально сложно поверхности Ну короче вот такой вот метод вот такой вот метод опорных кторов красивый на самом

поверхности Ну короче вот такой вот метод вот такой вот метод опорных кторов красивый на самом деле метод красивый но он очень требовательный ему нужно очень много очень много данных и очень много ресурсов чтобы красиво обучиться поэтому за его капризы его уже наверное потихоньку отправляют в отставку в мере Science то есть достаточно непопулярный алгоритм но запустить можно его попробовать посмотреть что к чему будет интересно Вот его найти Можно также в библиотеке Например я решаю задачу

что к чему будет интересно Вот его найти Можно также в библиотеке Например я решаю задачу регрессии Вот его открываем Вот сам подмодуль называется Маши и потом как вот по умолчанию видите стоит ядро сигмой ядро поставить Ну я чаще всего поле ставил можете про каждый из них почитать Поподробнее я не сам про все знаю ядра Я оставил полиномиальный и указывал степень полинома то есть вот если я укажу полиномиальный степень 2 то будет какая-то Парабола нарисовано поминальная степень 3 более сложная

полиномиальный степень 2 то будет какая-то Парабола нарисовано поминальная степень 3 более сложная поверхность здесь уже всякие коэффициенты идут ну какой-то вклад Видимо да объяснено что к чему Вот он параметры градиентного спуска пошли то есть это остановка Да это параметр регуляризации Прямо туда можно включить регуляризации ещ 2 и о регуляризация вот Ну и всякие всякие другие приколюшки другие приколюшки вопросики м Останавливаться не будем просто надо Поня что поть его запустить да бы

приколюшки вопросики м Останавливаться не будем просто надо Поня что поть его запустить да бы получается ты меньше всего времени уделил оригинальному нейрону Нетворк потому что он самый Нелюбимый или Сам простой какому методу не радиальный радиус NN Ну потому что он о том же О чём кнн поэтому там говорить много не приходится про него всё то же самое только вместо количества радиус всё то есть это просто модификация Да просто модификация Да СРО Можно ли сказать что вот типа мето опор ров он

это просто модификация Да просто модификация Да СРО Можно ли сказать что вот типа мето опор ров он создаёт новый Базис цель которого типа разделить наши штуки ну не это не называют Но это прямо так и создают типа новую ось новую ось создают который пытается разделить причём линейно класс пытается разделить то есть в конце пайла будет просто стоять а больше какой-то константы или меньше у каждого Ирен чтобы просто отделить зна красную область от зной Всё короче какая-то делать какую-то

каждого Ирен чтобы просто отделить зна красную область от зной Всё короче какая-то делать какую-то синтетическую штуку которая делит наши точки Ну вот например ты ему говоришь что полином указываешь в степени 2 полином в степени 2 имеет конструкцию Омега 1 X1 плю Пусть Омега 2 X1 к п Омега 3 X2 плю Омега 3 X2 к Ну по хорошем ещё свободный член плю Омега 0 Вот это параболой второй степени и вот он Настрои вот эти финты по Градиент спуску веса точнее Вот так же да Он может прийти Вот к такой

он Настрои вот эти финты по Градиент спуску веса точнее Вот так же да Он может прийти Вот к такой поверхности а у него там ошибка сделана так чтобы одно отличить от другого Ну в общем всё то что вы делали На прошлой неделе понял Оке Да если ты вдруг выберешь более сложную поверхность То есть ты вот укажешь ему предположим полином и степени вот по умолчанию три стоит Да а ты укажешь не знаю 10 тогда он способен будет отрисовывать что-то сложное но он будет долго обучаться тяжёлый Градиент и так

он способен будет отрисовывать что-то сложное но он будет долго обучаться тяжёлый Градиент и так далее он там склонен к [музыка] [музыка] переобучения мощный следующий алгоритм Достаточно мощный это это это [музыка] это дерево решений он По отдельности не очень мощный но всё самое Передовое то что работает оно в принципе так или иначе работает на дереве решений сейчас я открою для рисуночки нам с вами нам с вами что-нибудь чтобы мы порисовать [музыка] всё так ну что ж Давайте начнём смотрите

с вами нам с вами что-нибудь чтобы мы порисовать [музыка] всё так ну что ж Давайте начнём смотрите пусть у нас с вами есть какая-то какая-то задача какая-то задача вот а мы с Вами Мы с вами в прошлый раз какую задачу решали не помните по классификации на прошлой неделе какие у нас что шоколадка и вес вес Купить шоколад количество шоколад да вот можно как бы на этой же задачки порассуждать можно на это же но Давайте лучше что-нибудь другое чтобы два признака были оба непрерывный Желательно можно

это же но Давайте лучше что-нибудь другое чтобы два признака были оба непрерывный Желательно можно тогда конечно признак количества детей количество детей заменить на какой-нибудь возраст поставить возраст Ну хорошо Да давайте давайте так всё пусть у меня будет Пусть Вот это у на будет с вами возра а здесь у нас будет Вес человека Вот ну вес и возраст на самом деле коррелируют Вот это пример не очень хороших вещей Да потому что когда мне 10 лет Ну для детей коррелируют по крайней мере когда мне

хороших вещей Да потому что когда мне 10 лет Ну для детей коррелируют по крайней мере когда мне 10 лет я просто Априори буду меньше весить потому что я ещё маленький поэтому можно что-нибудь другое придумать Давайте другое Ну да Давайте ещё какой-нибудь вариант Давайте доход доход Ну хорошо вот да возраст ой вес и доход Да сделаем вот так всё пофантазировать немного признак веса и дохода Я здесь вообще случайно расставлю то есть не обращая на вот эти два признака ладно плюс-минус как бы так

вообще случайно расставлю то есть не обращая на вот эти два признака ладно плюс-минус как бы так поехали случайно расставляем выборку так раз 4 Ну ещё девятый красик поставим и Давайте ещё возьмём нолики возьмём нолики вот смотрите такая получилась история вот получилась такая история всё это готовое пространство сейчас мы с вами Ну как бы как бы Логистическая регрессия поступала она бы конечно Ну в принципе у логистической регрессии тоже есть неплохой Сплит Да вот такой вот Ну конечно Тут по

Ну в принципе у логистической регрессии тоже есть неплохой Сплит Да вот такой вот Ну конечно Тут по две ошибки с каждой сторон то есть ACC У нас четыре мы потеряли объекта но в целом как бы что-то что-то получилось что-то нет теперь посмотрим как подходит к этому decision 3 или Да например из того что мы проходили Но если где-то здесь то какие там ближайшие сди вот эти предположим тогда бы он эту часть относил бы к нолику область А мы с вами будем строить дерево так сек сек сеек сеек мы с вами

часть относил бы к нолику область А мы с вами будем строить дерево так сек сек сеек сеек мы с вами будем строить дерево неудобно здесь программе отлично смотрите помните Когда у нас был первый день с вами на фазе один вообще самый наш с вами первый день знакомства мы обсуждали с вами условные вероятности форму улыбается и рисовали деревья помните там там весь скелет по факту у нас с вами был дан а на практике то кто за вас как бы эти вероятности получит мы собираем дан В каком-то смысле то что

а на практике то кто за вас как бы эти вероятности получит мы собираем дан В каком-то смысле то что мы сейчас Разбираем это и есть эмпирическое построение тех идей дерева там дальше уже можно крутить с этим деревом как угодно Ну просто чтобы вы не провели немножко такую параллель да то есть вероятностное дерево будет какое-то вот А так так так так и что я буду указывать в каждом а узле дерева Итак узел дерева - Это как вершинка Вот он у меня Стартовая вершинка во-первых Я здесь укажу

дерева Итак узел дерева - Это как вершинка Вот он у меня Стартовая вершинка во-первых Я здесь укажу обязательно состав вы поймёте для чего это нужно дальше у меня здесь в этом объекте находится 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 10 крестиков и 10 ноликов крестиков 10 ноликов тоже 10 а это значит что Представьте Если бы я данные не собирал бы о них а просто у меня есть 20 людей выбрать то когда ко мне приходит следующий человек С какой вероятностью он у меня купит 05 правильно То есть как

ко мне приходит следующий человек С какой вероятностью он у меня купит 05 правильно То есть как бы 50 на 50 но мы сейчас соберём данные и попробуем понять что Ну на этом объекте более вероятно может быть покупка или менее вероятно если как бы действительно признаки дают какую-то какое-то логическое объяснение причино следственной истории покупки шоколадки даевом ни пендикуляр одно из осей То бишь вдоль или попер там как угодно это называ и моя задача хорошо отделить крестики от ноликов но у

вдоль или попер там как угодно это называ и моя задача хорошо отделить крестики от ноликов но у меня сразу же вот неплохой Сплит ложится вот такой вот в голове вот так вот да в принципе неплохо же получилось достаточно хорошо вот и ну назовём эту константу как А1 какая-то Константа А1 толь дава наверное знаете сейчас цветом как-нибудь тоже выделим то есть вот он мой первый Сплит вот он мой первый Сплит и вот это мы назовём А1 и у меня встаёт вопрос У меня встаёт вопрос М У меня встаёт вопрос а

Сплит и вот это мы назовём А1 и у меня встаёт вопрос У меня встаёт вопрос М У меня встаёт вопрос а X Ну то есть Вес человека Да Вес человека больше или меньше какого-то значения я это напишу как X2 больше чем А1 но вы поймите что как бы в реальности это будет какое-то пороговое значение веса типа например 70 кг человек весит Да и Мы спрашиваем а человек больше весит семидесяти или меньше И вот теперь соответственно начинает дерево бинарное дерево всегда бинарное появляется мы соответственно

теперь соответственно начинает дерево бинарное дерево всегда бинарное появляется мы соответственно начинаем расходиться мы начинаем расходиться по разным сторонам то есть сюда и сюда и сейчас мне нужна будет Ваша помощь нарисовать нарисовать состав нарисовать состав Так мы сделаем так так давайте сначала поговорим о левом уз Будем считать что Будет уходить у меня условие True а вправо fse вот так вот тогда скажите мне пожалуйста что будет у нас в левом составе даже Давайте не все вместе Давайте

вот тогда скажите мне пожалуйста что будет у нас в левом составе даже Давайте не все вместе Давайте конкретно Дмитрий что у нас будет в левом сколько Какой состав будет в [смех] левом А ну это будет два кружочка Угу 2 3 4 5 6 крестиков да то есть два кружочка Вот они раз два и семь крестиков всем ли понятно что здесь появилось то есть Теперь смотрите уже можно рассуждать задав просто один вопрос Ладно сейчас сначала правый ли сделаем а потом будет понять А теперь правую часть в правом тогда

Ладно сейчас сначала правый ли сделаем а потом будет понять А теперь правую часть в правом тогда какой у нас будет состав Давайте с любый так справа 2 3 4 5 6 7 8 8 нолик Иво Да всё нолик Иво Хорошо договорились действительно так действительно так и теперь понимаете то есть спросив просто один вопрос спросив один вопрос а больше вес какой-то константы или меньше мы уже получаем более однозначную стору чем здесь согласитесь всё становится понятно тут как бы я как-то не случайно сгенерировал

стору чем здесь согласитесь всё становится понятно тут как бы я как-то не случайно сгенерировал данные точно потому что сразу же первый Сплит достаточно неплохо отделяет одного от другого далее Ну давайте провалився теперь например сюда то есть Вт это вот Верхняя наша часть ну что-то здесь можно сделать Ну наверное можно можно вот так подписать Хотя это очень сомнительная история отделять один элемент Но дальше проговори с вами об этом То есть как бы вот так вот получается как бы я вот здесь

элемент Но дальше проговори с вами об этом То есть как бы вот так вот получается как бы я вот здесь подпишу Ладно сверху пусть так будет это Константа А2 тогда это было бы эквивалентно тому что я бы спросил а X2 ой X1 да то есть это по X1 все понимают что по X1 Теперь мы то есть X1 больше чем некоторая Константа А2 или нет так случайно совпало получается что вес большой но просто не хватило денег этому объекту да получается в такой истории Вот то есть как бы ну по нашей Да по нашей истории

этому объекту да получается в такой истории Вот то есть как бы ну по нашей Да по нашей истории собственно говоря если от всего этого абстрагироваться это наилучшее сптоваров вправа что будет Слева давайте давайте давайте солий а я понимаю лево - это там где крести ой право для меня там где крестики потому что получается больше ну нет труд самое главное где Действительно это условие выполнило а то есть где выполнило есть то есть это получается 1 2 3 4 5 6 7 семь крестиков Угу один нолик Да и

то есть где выполнило есть то есть это получается 1 2 3 4 5 6 7 семь крестиков Угу один нолик Да и один нолик верно Так здесь у нас с тобой Получается что так не с тобой в смысле Давайте с Настей x0 и Господи ноли Всё верно Вот в общем зарисовать Теперь давайте ещё нижнюю часть нижнюю часть с вами обсудим ну здесь Типа что-то такого напрашивается да чтото такого напрашивается вот Итого это у нас был бы признак А3 Ну Константа А3 Ну мы бы опять [музыка] зарисовал бы А1 То бишь доход больше чем

был бы признак А3 Ну Константа А3 Ну мы бы опять [музыка] зарисовал бы А1 То бишь доход больше чем какое-то пороговое значение А3 или меньше иде [музыка] с вами влево уйдёт какой там будет состав Давайте Серёжа чернишов получается один к и один крестик и сколько там восем сем семь ноликов да и семь ноликов Отлично так и тогда справа что будет Александр справа будет два крестика и один нолик справа будет два крестика и один нолик всё Вот так мы сделали Но на этом Вы должны понимать во-первых Оно

будет два крестика и один нолик всё Вот так мы сделали Но на этом Вы должны понимать во-первых Оно не обязательно должно быть симметричным может быть одна сторона глубже чем другая Да я пока что наверно на этом остановлюсь на этом остановлюсь хотя в принципе продолжать можно но как будто бы здесь Нормально остановиться это надо делать с помощью гипер параметров Но на самом деле я бы мог бы так нас литова что в итоге вот эту область бы нашёл Нолика и его бы выделил То есть как бы рово решение

нас литова что в итоге вот эту область бы нашёл Нолика и его бы выделил То есть как бы рово решение способно довести на тренировочной выборке точность до 100% даже с любым шумом в данных вообще с любым шумом в данных Но это мы поговорим это называется переобучение это плохо это плохо Вот предположим Мы на этом как бы с вами застыли как-то так получается так получается чере у нас с вами области че у нас с вами области здесь мы с вами по факту имеем Вектор вероятности 78 1/8 То есть если выбили

у нас с вами области здесь мы с вами по факту имеем Вектор вероятности 78 1/8 То есть если выбили Напишите вам вернутся две координаты 78 1/8 Ну там как по каждому обет воас прило ве действительно больше чем А1 и у него доход действительно больше чем А2 вот с такими параметрами человек вероятность его покупки 1/8 или не покупки наоборот Ну короче там в зависимости от того что у меня кре что у меня Лик вот здесь у нас с вами будет как бы по факту ноль к одно но строить 100% были на 100% уверены

Лик вот здесь у нас с вами будет как бы по факту ноль к одно но строить 100% были на 100% уверены если бы всего лишь с этим столкнулись единожды и подумали что полностью понимает как это работает ну в исключительных случаях Это наверно Может быть но в целом как бы одно наблюдение выборки в статистике Маловато поэтому опасно вот такие сплиты добиваться на самом деле потому что придёт Новый объект выборки который пройдёт сюда то есть будет из вот этой области и по нему предсказание будет

объект выборки который пройдёт сюда то есть будет из вот этой области и по нему предсказание будет строиться на ОС на основании одного знания на основании одного знания здесь соответственно у нас с вами в обратную сторону Здесь доминирующий то есть здесь крестик по факту здесь крестик здесь нолик здесь нолик вероятность наоборот да стала 1/8 78 и вот здесь у нас с вами тоже крестик 2/3 к 1/3 вот прямой ход дерева Вот так оно строится оно строится с деревом лучше повозиться лучше понять как оно

прямой ход дерева Вот так оно строится оно строится с деревом лучше повозиться лучше понять как оно работает потому что это вам ещё будет полезно дерево решение Очень полезная структура Да если типа вот этих чей куча будет Он как типа в пространстве будет резать Да тоже самое то режет понял всегда по так и то есть нам вообще не следует добиваться прям идеального вот этого деление типа где только одно остаётся да да да да это называется переобучение о нём Мы ещё поговорим с вами сегодня практике

остаётся да да да да это называется переобучение о нём Мы ещё поговорим с вами сегодня практике посмотрим посмотрим на практике А что я бы ещё здесь хотел добавить ну во-первых Давайте откроем документацию срна Да она называется scor decision 3 или дерево решений [музыка] Вот теперь собственно говоря вот документация вот есть какие-то гиперпараметры мы поговорим с вами об основных тически могут спросить вас Ну в целом Это неплохо понимать а как дерево выбирает оптимальный Сплит Вот мы с вами по

вас Ну в целом Это неплохо понимать а как дерево выбирает оптимальный Сплит Вот мы с вами по факту как выбирали оптимальный Сплит за счёт гла То есть я глазами визуально видел плюс-минус Окей но мне надо объяснить компьютеру у которого не будет рисунков и как вот компьютер объяснить что вот этот Сплит например самый-самый лучший вот как вы думаете или что для нас являлось бы наилучшим сплитом постарайтесь фразу с русского языка пишну фразу переложить в математическую формулу что для нас было бы

фразу с русского языка пишну фразу переложить в математическую формулу что для нас было бы лучшим скриптом бу давай вопрос нет те Ну предположение грубое такое безжалостное идём берём ось на не ставим прямую линию и делим Каждый элемент и считаем где слева справа Сколько выходит в данном случае и находим там где самая большая разница количество Ну очень близко к правде очень близко к правде Ну в принципе да то есть то что Бул говорит только там алгоритм Чуть более умный не простоту ту перебор

принципе да то есть то что Бул говорит только там алгоритм Чуть более умный не простоту ту перебор логики Вот Но ты прав на самом деле то есть по каждому из признаков это смотрятся разные отсечки и вот Единственное надо оцифровать мысль того чего мы пытаемся добиться мы пытаемся по факту добиться с Вами чтобы крестики максимально отделились от ноликов правильно согласны Это кстати можно считать с помощью бинарной Крос энтропии Но вообще популярней считают либо Джени либо энтропию либо Джени

с помощью бинарной Крос энтропии Но вообще популярней считают либо Джени либо энтропию либо Джени либо энтропия мы с вами посчитаем Джени Я сначала запишу формулу Я сначала запишу формулу 1 минус сумма равно едини DN P ква А теперь покажу формула может быть страшная но на самом деле она вообще Изи и очень понятна Пусть Вот это у меня будет первый узел в этом узле в этом узле по факту максимальная неопределённость согласны 50 на 50 вот энтропия даже энтропи это по факту из физики по-моему пришло

неопределённость согласны 50 на 50 вот энтропия даже энтропи это по факту из физики по-моему пришло определение но я первый раз по кране мере в жизни с физикой физике с этим сталкивался Да это и в информатике это есть пи - это мера беспорядочно системы мера беспорядочно это мера неопределённости В каком-то смысле и есть но по-другому ещё есть индекс просто отличается форму давайте я посчитаю G1 1 это будет единичка мину едини минут смотрите вот это сумма вероятностей это вероятность быть одному

это будет единичка мину едини минут смотрите вот это сумма вероятностей это вероятность быть одному классу вероятность другому вероятность быть крестиком здесь какая у меня 0,5 да 1/2 то есть 1/2 вот так вот укажу в квадрате плюс вероятность быть ноликом тоже 1/2 в квадра Вот если бы возведения в квадрат не было то мы бы всегда в этой формуле получали бы Ноль вот у нас есть возведение в квадрат так здесь 1/4 1/4 то бишь 2/4 1 - 2/4 это ни равен 05 подпишу его сюда Ни этого узла равен 0 то 5

так здесь 1/4 1/4 то бишь 2/4 1 - 2/4 это ни равен 05 подпишу его сюда Ни этого узла равен 0 то 5 теперь попрошу вас самостоятельно посчитать вот для вот этого по вот этой же формуле и Ответ Лучше наверное в виде обыкновенной дроби Ну хотя можете в принципе в виде десятичной скидывать в чат так что-то тут мне не разошлись 288 пер 1063 037 Это я не совсем могу сопоставить Ну наверное около 288 Да у всех сейчас я пере проверю Ну давайте тогда вместе сейчас с вами посчитаем Джени второго то есть

у всех сейчас я пере проверю Ну давайте тогда вместе сейчас с вами посчитаем Джени второго то есть единичка минус поехали по порядку вероятность быть крестиком там у нас с вами Чему равна 7 де 7 де 7/9 к вероятность быть ноликом у нас с вами 2/9 Да 29к вот вот такая вот штука вот такая штука ну и досчитаю тут 79 это сколько это 49 498 первы плюс ещё 48с первых то есть 538 первых и остаётся 28 вос первы вот 288 первых Ну наверное я так предполагаю с в десятичную дробь перевести это будет около

первы вот 288 первых Ну наверное я так предполагаю с в десятичную дробь перевести это будет около Вот этих 0,37 я терял там 0,3 07 да 034 0,34 получилось Да здесь вот тогда мы калькулятор стой ну 0 035 там 0345 короче так я запишу вот Джини этого узла 0345 Как вы можете заметить тренд чем чище узел тем на самом деле Джени падает потому что это можно как-то воспринимать мера неопределённости а мера неопределённости начинает падать Да и Давайте ещё посчитаем третью крайность вообще вот этого узла

неопределённости начинает падать Да и Давайте ещё посчитаем третью крайность вообще вот этого узла чему У нас здесь Рани прямо вместе с вами ни 3 То есть это единичка минус единичка минус но там будет быть крестиком навами быть ноликом действительно 1 ква и равно но то есть мера неопределённости равна нулю её считается его это не волнует не зависит от элемента но сам факт Я хочу чтобы вы просто посмотрели что вот он появился индикатор уже численный Да всё на самом деле все эти алгоритмы в том

посмотрели что вот он появился индикатор уже численный Да всё на самом деле все эти алгоритмы в том числе строились по тому чтобы мысли приложить в число вот как бы появилось число оцифровано оно вроде как отражает суть происходящего и вот вот так вот существует индекс Это первый гипер параметр который вы увидите это коне при классификаторе я вам пока на примере классификации в грессии немножко иначе то есть G энтропия logloss logloss - это бинарная Крос энтропия то что вы минимизировать эту

иначе то есть G энтропия logloss logloss - это бинарная Крос энтропия то что вы минимизировать эту функцию на прошлой неделе вот на прошлой неделе далее Далее что ещё вам могу сказать Ну собственно говоря у нас ни по умолчанию стоит всё энтропия там немножко отличается формула бинарная Крос энтропия понятно То бишь тоже отличается формула ну здесь мы получили такой результат но это ещё не всё это ещё не Сплит Да Костя Да ну я как раз к своему продолжению что вот мы получили числа как мы

всё это ещё не Сплит Да Костя Да ну я как раз к своему продолжению что вот мы получили числа как мы вернёмся к тому как компьютер будет спдовая собственно говоря он находится здесь Да дальше как правильно вот уже Бул говорил начинаются тупо Ну поиски какого-то оптимального сплита в каждом но вы понимаете что при сплите мы распада на два а не на один правильно а значит у меня будет два дни не только левый как мы посчитали с вами то есть ещё будет какой-то Вот этот ни Ну давайте вместе его

только левый как мы посчитали с вами то есть ещё будет какой-то Вот этот ни Ну давайте вместе его посчитаем быстренько Пусть это будет четвёртый называться ладно ни 4 у меня будет единичка минус вероятность быть крестиком сколько 3/11 Да 3/11 квадрат плюс вероятность быть ноликом 881 и та получается п 64 - это у нас 73 73 27 + 21 49 121 49 121 выходит 49 / 121 0,4 тут примерно Жени 0,4 в этом узле похуже кстати в правом да то есть 3 к8 считается более неопределённость чем 7 К2 Ну ту так и есть

похуже кстати в правом да то есть 3 к8 считается более неопределённость чем 7 К2 Ну ту так и есть Так вот А как тогда в таком случае быть То есть я всегда [музыка] сумма средня Но средня это просто разделите количество да то есть будем стремиться к с вами к средне хорошему средне минимальному дни но на самом деле считается даже не совсем так считается не просто средний дни А знаете какой считается считается средневзвешенный потому что прикиньте я бы взял бы вот такой сли вот такой вот с У меня

считается средневзвешенный потому что прикиньте я бы взял бы вот такой сли вот такой вот с У меня бы справа бы уже дни был ноль правильно То есть я в одном из двух составляющих добился бы ни но но это как-то несправедливо правильно то есть по факту ничего этот Сплит не делает тогда как бы ну если ноль Ну тогда получаю вес один из там двадцати элементов 1/2 раз ты на на на одном элементе из двадцати добился g0 такой ты вес и получишь понятно То есть вот собственно говоря и образуется что

двадцати добился g0 такой ты вес и получишь понятно То есть вот собственно говоря и образуется что оптимальный Сплит оптимальный Сплит это как бы Вот такая формула что у нас здесь будет если сюда у меня здесь в данном случае 20 элементов 20 то у меня здесь де здесь 11 Априори как бы правый Джини имеет больше вес чем левый а он будет иметь вес 112 То есть он хоть хуже 0,4 но он вес на самом деле имеет при этом больший Жени 4 вот а здесь здесь здесь у нас с вами 92 умножить на ни 2 всё вот эту

имеет при этом больший Жени 4 вот а здесь здесь здесь у нас с вами 92 умножить на ни 2 всё вот эту вещь мы с вами вот эту вещь мы пытаемся минимизировать то есть чем меньше тем лучше да Тоба можно ещё раз повторить что Джени отображает что ни отображает Вот ну давай попробуй сам ответить на свой вопрос вот здесь Блин почему меня так се вот здесь вот здесь сверху ни 05 вот здесь ни 0345 вот здесь Но есть ли у тебя ответ на этот вопрос на твой типа вероятность получить это ну даже не рассуждай на

есть ли у тебя ответ на этот вопрос на твой типа вероятность получить это ну даже не рассуждай на уровне вероятности на уровне логики рассуждай чем вот этот узел хуже чем вот Нижний Ну то что у тебя типа 0,5 ты и то и то можешь получить А с нулём типа только одно получаешь Ну мы чем мы мы что пытаемся сделать мы пытаемся крестики от ноликов отделить согласен угу ну здесь у тебя хорошо отделено вот здесь нет нет а здесь получше Уже стало а О'кей понят Угу угу Жени - это индикатор для компьютера

здесь нет нет а здесь получше Уже стало а О'кей понят Угу угу Жени - это индикатор для компьютера Ну и для человека тоже насколько хорошо происходит разделение Ну короче оцифровка Вот я говорю Джени блин конкурент Джени - это энтропия энтропия - это мера беспорядочно в системе даже так называется то есть она оцифровывать насколько у нас бардак вот здесь типа Аля под порядок снизу вот в этом в Джини 3 потому что всё однозначно нулики да А вот сверху полная неоднозначность поэтому высоки Да Ко и

3 потому что всё однозначно нулики да А вот сверху полная неоднозначность поэтому высоки Да Ко и что получается то есть под капотом алгоритм Каждый раз при каждом разбиении сравнивает все вариант множество вариантов сплита чтобы найти среднее взвешенное которое будет минимальным из в нашем случае оптимальным сплитом тут всё не на двигал в нашем случае оптимальным сплитом получается вот вот это стало да то есть лучше всего Дели то есть лучше всего было спросить что Ну давайте Пусть X2 вот этот

да то есть лучше всего Дели то есть лучше всего было спросить что Ну давайте Пусть X2 вот этот мой вес Да вот этот вес пусть здесь реально там А1 оказалось 70 кг цифры абсолютно на угад подобраны То есть плюс-минус как бы в итоге типа как бы 70 кг больше меньше да отфильтровать человека либо в верхнюю сторону либо в нижнюю вот весу именно значение 70 г может оказаться самым самым удачным понял спасибо Просто звучит как как тяжелый алгоритм для больших выборок То есть ему каждый раз на каждой

спасибо Просто звучит как как тяжелый алгоритм для больших выборок То есть ему каждый раз на каждой нужно много сделать вычислений чтобы у вас алгоритмы есть вы там обсуждали сложность алгоритма да это не такая большая сложность но в целом ты прав дерево решение не самый быстрый алгоритм на больших вых он самый крутой в других [музыка] параметрах если был просто плохо но математики придумали Как сделать эффективно хоте бы спросить почему [музыка] лекцию по алгоритмам открывать Так давайте

Как сделать эффективно хоте бы спросить почему [музыка] лекцию по алгоритмам открывать Так давайте дальше бу получается мы не хотим Джини Рав 50% и ноль остальное между Нас устраивает Да нет ноль не то что мы не хотим Я бы нар ноль не хотел на одном элементе Если бы у меня было здесь 100 нулей Но это же хорошо я однозначно знаю всё равнозначно А если в будущем появится какой-нибудь будуще на 100 не скажет пока это будущее не нало мыли пытаемся более рационально подходить увеличивать вероятность

скажет пока это будущее не нало мыли пытаемся более рационально подходить увеличивать вероятность Победы конечно Может наступить крестик Но если у меня было раньше 100 ноликов и но крестиков но логичнее нолик выбрать правильно хотя ошибиться нам осно Именно поэтому есть соответственно как бы я не могу сказать что плохой если все эти се Без шоколадки ушли то скорее всего это тоже Без шоколадки ут такой 05 это лучше хуже чем это вообще самый худший вариант самый худший А5 это Как подкинуть

ут такой 05 это лучше хуже чем это вообще самый худший вариант самый худший А5 это Как подкинуть монетку человек я ничего не знаю о НМ да бы для нас анализ данных - это как раз таки поиска и выстраивания причины следственных связей А как по факту ничего нестли монетка поэтому не очень хороо очень хорошо Спасибо хорошо Это самый самый плохой Джени вообще да Серёже а а наш алгоритм он Джени высчитывает по всем фича и сравнивает или он сначала выбирает фичу типа производ рушить по пока он все не

по всем фича и сравнивает или он сначала выбирает фичу типа производ рушить по пока он все не пройдёт он не поставит Сплит потому что он может там ему третий на третьей фиче понравился Сплит а там на самом деле на десятой ещё круче Да поэтому он всё равно вот Ну ещё есть такая история короче называется Information Gain или информационный выигрыш все вот эти истории вот смотрите вот здесь как бы по факту по факту А по факту вот это вот вот вот такой кайфовый Сплит - это заслуга вот этого

бы по факту по факту А по факту вот это вот вот вот такой кайфовый Сплит - это заслуга вот этого признака согласны ну то есть в каком-то смысле этот эту информацию объясняет признак мы мы сейчас попытаемся вычислить кто Сколько информации объяснил То бишь чтобы оценить важность признака называется эта Метрика Information Gain или информационный выигрыш в принципе вам Её глубоко как бы знать вообще не надо я это воспринимаю как очень сначала формулу запишу это G Ну в нашем случае с вами

вообще не надо я это воспринимаю как очень сначала формулу запишу это G Ну в нашем случае с вами родительского класса он у меня единичка минус как раз-таки вот эта формула которая у меня уже есть 9/2 Ну там вообще не обязательно 92 А я укажу так N2 / n g вот этого левого у меня G 2 называется и плюс n4 Раз уж мы четвёртым назвали Да этот n4 де N ни 4 4 Вот такая формула то есть смотрите вот это ни исходный А вот это сред средний который стал и То есть в принципе вот эта Дельта что в каком-то

ни исходный А вот это сред средний который стал и То есть в принципе вот эта Дельта что в каком-то смысле показывает то есть смотрите вот это мести которая была вот это мера неопределённости в среднем которая стала Ну сколько мы выиграли выиграли в прямом смысле то есть если не грузиться в эти форму в них не надо грузиться простыми словами сколько мы выиграли и предположим как бы после вот этого сплита обязательно Information обязательно подвязываться к вот этому СПТУ тогда дерево решений и все

обязательно Information обязательно подвязываться к вот этому СПТУ тогда дерево решений и все алгоритмы которые построены дере решений они Перед каждым обучением открывают как бы копилочку каждому признаку Да И вот получился 02 это значит вот эти 02 Это чисто Красава вот признаки X2 правильно значит получает конфетку вот эти 02 сюда далее идём здесь всё А это кстати уже вес признака X1 всё конфетку X1 получил Здесь тоже X1 конфетку получил X1 тоже не знаю 05 предположим В итоге дальше все эти

X1 получил Здесь тоже X1 конфетку получил X1 тоже не знаю 05 предположим В итоге дальше все эти конфетки складываются и мы можем понять По конфетка Какой признак нам был более важен тем самым это ну для любой компании они бы хотели ответить да не знаю почему-то У нас здесь покупают не покупают Что влияет на покупку или не покупку собст говоря после обучения дерево решения можно будет посмотреть то что по крайней ме дерево решени считал вот Логистическая регрессия и Линейная регрессия можно было

что по крайней ме дерево решени считал вот Логистическая регрессия и Линейная регрессия можно было по весам посмотреть правильно там так математика устроена Что можно сам вес посмотреть в дереве решений как бы такой явной формулы нет поэтому тут вот так вот делается Ну собственно говоря всё всё мы с вами сделали закрасить областью но видимо у меня по подписочку вся эта история м ну давайте чуть-чуть То есть у нас с вами получается крестики вот здесь доминируют вот здесь вот эта область

чуть-чуть То есть у нас с вами получается крестики вот здесь доминируют вот здесь вот эта область крестиков Да вот эта вся область для крестиков и вот эта вся область для крестиков А вот это вот у меня Вот это у меня вся область для ноликов да то есть вот э вся область и вот э вся область для ноликов только единственное единственное почему-то я написал Три крестика на выходе один нолик А сейчас смотрю по рисункам где-то я ошибся как будто бы а Ну всё я понял где собственно во втором [музыка]

смотрю по рисункам где-то я ошибся как будто бы а Ну всё я понял где собственно во втором [музыка] ноли здесь у нас нолик Ну вот собственно говоря мы с вами построили дерево реше Теперь если приходит Новый Человек мы уже можем оценить все метрики насколько мы будем точны насколько у нас риск промахнуться Но самое главное мы сделали это рационально исходя из данных Да конечно мы не застрахованы от ошибки мы не можем залезть в голову этому человеку и понять на мы уже не 50 на 50 это угадаем вот

ошибки мы не можем залезть в голову этому человеку и понять на мы уже не 50 на 50 это угадаем вот стя ну давай Бул ты был первый Ну да спасибо У меня вопрос такой получается Всё равно даже Мы изучаем линейные алгоритмы но всё равно используем ээ перпендикулярное линейное разделение Нет ну итоговая - это плоскость разделения ты думаешь линейно итоговая плоскость разделения на минуточку у тебя получилась Вот такая Нет не согласен Не ну ты смотришь одну из итераций любую кривую линию вот такую я

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

зависимость она кста ре нелинейная если счита Что но покупает то у меня не покупают люди с небольшим весом и с большим доходом и получается не покупают ещё или покупают Ну да не покупают люди Ну как я так условно Да назвал и люди с получается с большим весом но меньшим доходом и очень хорошо покупают люди которые имеют большой доход и большой вес Вот и соответственно маленький доход маленький вес вот как бы большое маленькие понятие растяжимое да В данном случае вот именно на данны кото мы

вес вот как бы большое маленькие понятие растяжимое да В данном случае вот именно на данны кото мы говорили вот примерно такая разделяющая разделяющая область получилось а если на попа бы неправильна скажем вот вот с левой верхни квадра были и сле а справа то есть такое разделение было в выборке Ну получилось бы Значит у тебя вот как-то вот так разделение если я тебя правильно понял вотка не ты виновата выборка Ну конечно всё хорошо [музыка] спасибо Вот давай Кость у меня такой практичный

ты виновата выборка Ну конечно всё хорошо [музыка] спасибо Вот давай Кость у меня такой практичный вопрос издалека вот смотри мы решаем здесь в принципе бизнесов задачу про предсказание купит не купит для своего магазина кладок и мы сначала получаем на вход большие данные как это было в циане есть много разных признаков мы Допустим их там предо обрабатываем какой-нибудь строим хит мапк смотрим Какие признаки в принципе у нас хоро влияют на а на что Ну допустим Ладно там есть какая-то история с

признаки в принципе у нас хоро влияют на а на что Ну допустим Ладно там есть какая-то история с тем что тагет они влияют на Таргет мы оставили там нужные нам признаки и дальше идём в дерево решение в этом и уже из них мы вытащили вероятности понимаем какие объекты лучше купят Какие менее хорошо купят и видим вот эту характеристику ели такое что практи на основе не можем сделать вывод е они сильно отличаются то понимаем что выбрали плохой признак для предсказания меняем его и делаем снова Ну не

отличаются то понимаем что выбрали плохой признак для предсказания меняем его и делаем снова Ну не совсем просто може это вообще неуместно типа это так кто не делает может быть такое как Не ну я понял что ты имеешь в виду в принципе это делают это перебор признаков называтся УП Ну то есть вопрос был скоре про то вот это влияет ли на действительно выбор Если они сильно разнятся говорит ли это там есть ли это индикатор что мы ошиблись в выре признака и стоит его не учитывать для предсказания он

есть ли это индикатор что мы ошиблись в выре признака и стоит его не учитывать для предсказания он вообще как бы для Т под другим соусом [музыка] дословно если перевести важность признаков и ты просто будешь видеть вот это признак важен Ван Вот это неважно всё у тебя будет общая картина не по каждому элементу выборки отдельно А общая и ты из этого можешь рассуждать А вот эти два признака были не важны А вот это важно ва важно то что неважно можешь убрать и вот ну либо я не Сосем понял твой

не важны А вот это важно ва важно то что неважно можешь убрать и вот ну либо я не Сосем понял твой вопрос ответил пер по поводу параметров что здесь есть гипер памет критерий не сказать что пря сильно важ параметр Но может повлиять далее сплитерс Рандом Вот это начинается Вот сплите лучше не трогать этот параметр он это собственно говоря стратегия поиска лучшего сплита да то есть чтобы наилучшим образом СП сверх важный параметр Масина гнат дерево получилось глубиной д считается Вот это потому

образом СП сверх важный параметр Масина гнат дерево получилось глубиной д считается Вот это потому что первая глубина вот так вот то есть по количеству сплитов надо вот дерево глубиной один ещё иногда называют пенёк то есть вот это пенёк Да а у меня дерево глубины два Вот так и просто как бы если вы видите по умолчанию стоит дерево типа не указано а это значит что он будет фить до тало пока не у либо вго гиме либо не сделает так что уже всё везде ни равен нулю а это будет эквивалентно что он

у либо вго гиме либо не сделает так что уже всё везде ни равен нулю а это будет эквивалентно что он буквально вырежем нолики крестики То есть как бы вот через сплиты это можно сделать представьте вот два таких сплита рано или поздно придёт два таких сплита рано или поздно придёт и он скажет вот здесь нолики Вот именно здесь вот именно с таким ростом и весом оказался нолик на одном элементе выборки Но мы с вами понимаем что это скорее шум и выброс из распределения правда понимаете о чём я говорю

Но мы с вами понимаем что это скорее шум и выброс из распределения правда понимаете о чём я говорю Да и нам надо сказать что давайте лучше скажем что вот это всё целиком область крестиков Да есть риск ошибиться чем мы здесь выделим какую-то область этот аппендикс Да а потом сюда реально крестики попадут А мы их всех будем Нолика называть это называется офин или переобучение когда мы подстраивается под тренировочную выборку реагируя на её шумы и на её выбросы Это можно увидеть когда у вас очень

под тренировочную выборку реагируя на её шумы и на её выбросы Это можно увидеть когда у вас очень высокие тренировочные данные и очень слабый Ну точность метри точность метрик падать начинает вот как-то так что то есть глубина дерева глубина дерева помогает бороться с этим переобучения Если вы поставите глубокое дерево и негде убираться ни во что больше он вам начнёт приучение устраивать Так что с этим параметром его Подбирайте смотрите Ну етт поэто минима количество Эмен при вот эта вся

что с этим параметром его Подбирайте смотрите Ну етт поэто минима количество Эмен при вот эта вся процедура называется сплитом да Опять же дословный перевод Да просто разделять разделяем и всё вот вот эта сущность называется узел составляющая А вот это это называется лист дерева где дерево заканчивается Ну как в прямом смысле дерево разрастается Да листочек как конечная его часть поэтому есть ещё mean samples Lea то есть me samples Le - это минимальное количество элементов в листе по которым

mean samples Lea то есть me samples Le - это минимальное количество элементов в листе по которым потом будет приниматься решение по умолчанию она стоит один один это на самом деле просто чтобы не упало никогда вот Ну вот как бы если вы поставили Min sample СФ равно 2 вот такого сценария бы не произошло Понятно его бы не произошло Min sample Split опять же страховка от Вот таких случаев когда мы один элемент обрубают поиграться оптимального Никто вам не скажет Никто не знает Всё зависит от

мы один элемент обрубают поиграться оптимального Никто вам не скажет Никто не знает Всё зависит от задачи Вот ну и можете почитать Тут ещё остальные параметры Но на самом деле мы про них поговорим частично м частично завтра Завтра вот ещё вот этот параметр важный й он нужен Когда у вас дисбаланс классов вот старшая группа Когда вам показывал проекты по тексту они делали классификацию текст они все произносили что у них дисбаланс классов 95 про классов там положительных п отрицательны а нам надо

произносили что у них дисбаланс классов 95 про классов там положительных п отрицательны а нам надо отрицательны Находить и положитель просто за количеством Это плохо чтобы они не задавили количеством чтобы они не задавили количеством нам надо можно выставить вот этот параметр просто его поставить или указать ровно как всё здесь указано с висока и это может типа лучше помочь работать но мы пока с этим сталкиваться не будем так что сильно не грузите [музыка] то есть его будет останавливать Ну как

сталкиваться не будем так что сильно не грузите [музыка] то есть его будет останавливать Ну как правило в эти д ещ есть может упереться Вот в общем как-то так ну и самое главное он может упереться в ма То есть если если Бул сказал что дерево нельзя делать глубже чем д компьютер не сделает глубже чем д как бы плох результат не оказался и хоро тем самым мы ограничиваем слр очень хорошие внизу всякие экземпл Так что обязательно иногда можете спуститься посмотреть как они здесь что-то зарисовать

экземпл Так что обязательно иногда можете спуститься посмотреть как они здесь что-то зарисовать например как здесь вот дерево визуализировать очень хорошая штука да как это может выглядеть то есть вот Сплит вот Жени сколько элементов было в каких пропорциях ну здесь три класса элементов вот или не знаю хотите посмотреть разделяющий поверхности decision 3 вот decision 3 knn svm завтра будем проходить смотре как три класса вот разделяющая область Да рисуется везде код прикладывается можете всегда

смотре как три класса вот разделяющая область Да рисуется везде код прикладывается можете всегда как бы охотно смотреть вот как-то так здесь надо бус тоже завтра будем обсуждать алгоритм так так так так Ну что в принципе наверное я всё вам сказал Если Вопросов нет нам надо уходить на перерыв нас впереди ждт вторая большая есть Ну что давайте да сейчас 42 минуты 52 продолжаем перерыв

Так ну что Ребят давайте возвращаться так мало людей вижу Не тут просто кушаю Костя буту галочку ставим хорошо Поехали Так мы переходим с вами непосредственно к коду Сеня Тай доста боль м дальше пойм все 5 дней поехали по импорту библиотек что нам понадобится это библиотека которая позволяет оценить Короче просто выводить про бар да На сколько процентов выполнены работы Если е не запустить могут быть ошибки у меня будут этапы трансформации данных Я говорю что выводить надо в виде Панса умолча

быть ошибки у меня будут этапы трансформации данных Я говорю что выводить надо в виде Панса умолча там в выводится вот ено теряются ключи доступа к столбцам мне нужно их сохранять далее Это вещи связаны с построением палай мы будем строить с вами паму воде в для понижения размерности которы сю исполь и так далее это нужно нам Не сегодня а завтра будет Вот это дефай об на 2 дня на сегодняшний на завтрашний далее тут тоже нужны Бут кое вспомогательные штуки типа разделение на тре валидацию

на завтрашний далее тут тоже нужны Бут кое вспомогательные штуки типа разделение на тре валидацию выборку какие-то сегодня уже проговорили типа kn радиус Логистическая регрессия да decision 3 это всё так называемые базовые модели завтра будут ансамблевые модели это ROM for это всё завтрашний день вот ну и для почта метрик у меня будет пример задачи классификации поэтому я беру accur Score Как вы делали с логистической регрессией вот для подбора параметров будет АТ это тоже тема завтрашнего дня

делали с логистической регрессией вот для подбора параметров будет АТ это тоже тема завтрашнего дня Так мы с вами посмотрим на датасете кто-нибудь был вообще на Титанике у нас убрус при курс с титаником никого я Ага Ну вот то есть кто-то даже уже слышал про этот датасет В общем В чём суть этого датасета это учебный датасет учебный и здесь собраны собрана информация по пассажирам которые были на борту На том злополучной борту Титаник Да в апреле какого года по-моему 192 года по каждому пассажиру

На том злополучной борту Титаник Да в апреле какого года по-моему 192 года по каждому пассажиру СОБРа информация каким классом он ехал чем класс выше То тем хуже есть первый класс те кто да более обеспеченный второй и третий далее собственно имя пассажира Да Далее его пол его возраст Да собственно говоря братья сёстры родители дети билет в каком-то виде Да ну то есть это уже как бы аналитиком Надо разбираться к чему стоимость билета е у кого-то есть кабина Да где кабина определяла

Надо разбираться к чему стоимость билета е у кого-то есть кабина Да где кабина определяла территориальное положение на Титанике это могло оказаться важным но могло Да собственно говоря исходя из катастрофы и порт на котором пассажир присоединился к данному рейсу Ну и самый главный столбец который будет являться таргетом это сбе Sur выжил он или нет мы должны по этим данным предсказать выжил или нет эта задача не имеет практического смысла Да потому что как бы вы понимаете Титаник рухнул и

или нет эта задача не имеет практического смысла Да потому что как бы вы понимаете Титаник рухнул и рухнул Да произошло крушение что такого больше не повторится просто скорее вычленить факторы Да ну и посмотреть насколько хорошо мы по этим факторам можем предсказать выживет пассажир или нет Да что если бы условно мы бы это бы могли знать дефакто крушение так поехали подготовка данных ну то есть собственно говоря я здесь вывел можно по-другому через чтото ямм пори подо обработке будет конечно ещ

говоря я здесь вывел можно по-другому через чтото ямм пори подо обработке будет конечно ещ можно делать там фи Инжиниринг и прочее но я пока остановлюсь на заполнение нанов удаление ненужных столбцов кодировки и нормировки данных данные У меня есть в столбце есть ЛП есть л кабин причём очень много да очень много данных и вот пор в принципе вот так дела сть Ну короче разделяю на категориальные фичи и числовые то есть мы говорим здесь исключить исключить Ну как бы об Да категориальные признаки

и числовые то есть мы говорим здесь исключить исключить Ну как бы об Да категориальные признаки Там строковые и так далее они будут храниться в будут храниться наоборот включённые как признаки вот у меня здесь как бы короче Титаник Титаник это было когда-то соревнование нал и оно есть по сей день соревнование заключалось в том что у нас с вами есть трейя выборка здесь есть лбе 891 пассажир всего их было по-моему с чем-то именно пассажиров без рабочего без штата Да который обслуживали по каким

их было по-моему с чем-то именно пассажиров без рабочего без штата Да который обслуживали по каким классом Сколько лет кто там у него из родственников был на бриту и так далее но уже нету нету вам его нужно предсказать предсказать и отправить на гл там у них есть специальный лидерборд Где вы можете откалиброваться мы с вами Прежде чем отправить поступим следующим образом вот разметка данных Таргет часто называют разметкой разметка данных У меня есть только для этого Поэтому мы с вами вот эту

часто называют разметкой разметка данных У меня есть только для этого Поэтому мы с вами вот эту часть разделим на тренировочную и валидацию выборку чтобы на тренировочной обучиться А на валидацию посмотреть на данных которые модель не видела насколько хорошо мы сработали с вами вот в итоге В итоге В итоге В итоге как это делаю есть во слр такой метод Train Test Split тест Split Он позволяет нам разделить сюда Нужно подать иксы сюда Нужно подать Ире во-первых X Y Что я сделал X - это у меня всё

сюда Нужно подать иксы сюда Нужно подать Ире во-первых X Y Что я сделал X - это у меня всё кроме столбца survived а Y - это как раз таки наоборот столбец survived далее Я подаю эте XY говорю что размер выборки вот им давно уже влр Надо переименовать тест Потому что это не тест авалит на самом деле Сплит Ну так названо ЧМ хотя мы как бы будем вычленять сущность именно валидацию вы далее указываем пропорцию Я говорю 8 Я указываю что нужно разбить пропорционально столбцу Y то есть вот у меня

пропорцию Я говорю 8 Я указываю что нужно разбить пропорционально столбцу Y то есть вот у меня выборке в реновой выборке Да вот если мы с вами выведем Вот укажем то мы увидим что 61 пажи вот хочу чтобы когда я разделил чтобы у меня сохранилось в такой же пропорции примерно и в реновой и Валида просто согласитесь когда у меня есть выборки Кто купил кто не купил если я буду обучаться на всех кто не купил а потом буду предсказывать купил Будет плохо да выборки должны быть репрезентативные и как

не купил а потом буду предсказывать купил Будет плохо да выборки должны быть репрезентативные и как раз таки вот ST в этом помогает ещё очень важный параметр romate он вообще везде будет так или иначе всплывать это фиксация случайности так или иначе мы с вами зависим от того как мы сплита нулись и при прочих равных может быть Сплит у Насти и у сержи у них одна одинаковая модель одинаковый ВС одинаково Но они спли по-разному у одного точность 80 у друго 70 один довольный другой расстроенный хотя

Но они спли по-разному у одного точность 80 у друго 70 один довольный другой расстроенный хотя на самом деле просто так с вырой Ну так не повезло Можно даже взглянуть Давайте выведем па из 81 пассажира в Новую выборку попали попали следующие 712 пассажиров случайным образом выбраны Но если я буду запускать заново Обратите внимание они остаются теми же самыми стоит мне только убрать этот я его убираю всё они теперь постоянно случайны лучше фиксировать случайности чтобы роть можно больше гите

убираю всё они теперь постоянно случайны лучше фиксировать случайности чтобы роть можно больше гите какши обм при что ша идея взлетела Чтобы вс вокруг было заморожено изменилось только то что вы привнесли правильно Поэтому исходя из таких историй выгодна штука Всё я зафиксировал Случайность 42 здесь число не значит ничего это отсылка программистов к фильму автостопам по галактикам Да где 42 - это число Вселенной которое объясняет весь смысл нашего бытия Ну типа сво Дания хотите любое число

это число Вселенной которое объясняет весь смысл нашего бытия Ну типа сво Дания хотите любое число которое вам придёт в голову оно никакого смысла не будет главное чтобы оно было зафиксировано и заморожено ну и с этим числом вам удобно будет с этим генератором случайного числа вы можете код передать другому человеку и у него точно также сгенерирует и разделится как-то так ну что ж теперь по разделению соответственно вот этот Т возвращает четыре сущности фичи Рейно выб чи валион Тае Рейно выб

соответственно вот этот Т возвращает четыре сущности фичи Рейно выб чи валион Тае Рейно выб тагет валион все Обратите внимание 712 объектов и 11 столбцов и вот 712 таргета для тре выборки для Валида выборки тоже можно вывести ива Вот они 179 пассажиров они не будут участвовать во время обучения на них мы будем проверять точность 179 пассажиров 11 фичей по ним и собственно говоря 179 разметки вот так понятно им дая помогает нам помогает нам автоматизировать потоковое потоковое преобразование

так понятно им дая помогает нам помогает нам автоматизировать потоковое потоковое преобразование данных то есть иногда нам нужно не одну цепочку преобразования сделать тче Да и удобно всё это оборачивать в пайла именно паланы внедрять там в продакшены и куда-то ещё то есть так или иначе пала есть мы с Вами рассмотрим две сущности две сущности которые есть их на самом деле больше но я вот так взвеси всё могу сказать что вот если вы понимаете как работат Эд то вы будете неплохо собирать к палай

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

вы хотите нормировать нормировать данные сюда встанет скейлер понятно и всё вот далее Далее далее а здесь здесь здесь это когда у вас есть какие-то два столбца и вы хотите например применить к ним какой-нибудь Индер или что-то ещ Ну как бы к одному столбцу одно к другому другое Поэтому я воспринимаю это как параллельную обработку А это как последовательную и та и та нужна и в принципе итоговый план является как правило совокупность этих двух вещей как и у нас в примере будет ниже Вот они все у

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

с вами начнём преобразовывать первым делом друго построить и это ВС бы От случая к случаю меняется но я часто всегда заполнял наны потом кодирова Мирова данные поэтому у меня первым этапом будет имю на этапе имю я сразу же удалю ненужные фичи какие фичи мне не нужны Но вот это как вы видите это просто совпадает индексация с тем что есть здесь то есть абсолютно не информативный короче мусор Да тупо оказался здесь случай нафиг он нужен его уда Я е уда сю и зовут Меня Аша или Василий не должно

тупо оказался здесь случай нафиг он нужен его уда Я е уда сю и зовут Меня Аша или Василий не должно сильно повлиять выживу я или нет хотя в принципе здесь находят сущности У каждого есть префикс Мистер миссис Мисс и так далее Вот в этой парадигме можно рассуждать что в принципе влияние может быть Ну я как исследователь удаляю если бы вы столкнулись С этим дасе вы бы могли по-другому сделать фи инжениринг я удаляю эту фич полностью считаю что для меня здесь ничего полезного нет далее удаляю Кет

я удаляю эту фич полностью считаю что для меня здесь ничего полезного нет далее удаляю Кет по причине того что может быть тоже здесь сущность какая-то есть но удаляю просто-напросто Блин ну слишком много а нет тикет немного здесь нанов Ну значит просто удаляю потому что что за какие-то числа вообще не пойми что к чему Вот и удаляю кабину потому что там до фиги еще нанов то есть на 800 элементов выборки 650 нанов решил удалить но опять же я здесь то что вам показываю Я не претендую на золотое

выборки 650 нанов решил удалить но опять же я здесь то что вам показываю Я не претендую на золотое решение на самое лучшее мне надо чтобы вы поняли как строится пайплайн и идея мысли да всё вот эти столпцы соответственно я их называю в переменную Drop features то есть фичи которые буду удалять теперь самое интересное начинаем собирать пьютер формер состоит вы также всегда можете открыть документацию Да transform и читать что здесь происходит Вот то здесь трансформер Здесь всё описано Для чего

Да transform и читать что здесь происходит Вот то здесь трансформер Здесь всё описано Для чего что как надо можно взглянуть Transformers в Transformers сюда Нужно подавать лист из плов каждый тпл - это отдельная сущность подразумевает из себя три три индикатора первый - это имя которое вы хотите дать Давайте вот на центральном покажу имя второе какую вы функцию хотите применить И третье К какому столбцу Понятно имя нужно чтобы потом обращаться как к ключу Вот вы структуру данных в питоне дик

столбцу Понятно имя нужно чтобы потом обращаться как к ключу Вот вы структуру данных в питоне дик знаете ведь к - это Ke value ключ значения вот по ключу я могу достать всё что угодно вот в пайплайн В каком-то смысле это тоже будет вашим ключом вы сюда Можете написать имя бабушки мамы кого угодно да то есть это в принципе как бы для кода никакой информации не несёт он всё равно запустится Но конечно она называть так чтобы это отражало сущность и вам было удобно вытягивать вот Drop features Ну у

она называть так чтобы это отражало сущность и вам было удобно вытягивать вот Drop features Ну у них есть по умолчанию Drop это значит удаление Вот это значит удаление просто говорю что вот фичи вот эти их надо просто дропнуть вс далее создаю компютер Ну смотрите что у меня здесь где у меня на есть у целочисленных значений У меня они есть в правильно Ну я заполню достаточно тривиальные идеи ище удалил вопервых это категориальный признак Вот можете взг воз пассажиро средней медианой для этого

удалил вопервых это категориальный признак Вот можете взг воз пассажиро средней медианой для этого есть как бы Готовое решение можно через прописывать и так далее но в построении Панов есть имю И вообще мров много разных есть сю я вам про все не буду рассказывать считайте Знакомьтесь и по мере поступления задач как бы можно будет пробовать разные вообще вот то есть помимо Simple IMP который Я заполняю есть разные вот IMP там есть например ещё популярный kn пьютер заполнения исходя ближайших

заполняю есть разные вот IMP там есть например ещё популярный kn пьютер заполнения исходя ближайших соседей Ну короче Знакомьтесь если что там спрашивайте меня вот я в данном случае выбираю Simple IMP Simple - это заполнение чем-то простым типа А это заполнение мо Медиа средним знаете что-то вот такое Я заполняю медианы и говорю что столбец Далее по порту там всего два Нана но я решаю заполнять frequ То есть как это называется в статистике самое часто встречающееся значение то есть заполняю

frequ То есть как это называется в статистике самое часто встречающееся значение то есть заполняю модой грубо говоря всё вот эти два параметра не игнорируйте то есть когда вы будете кодить первый он говорит о том что мне название фичей надо сохранять а нет Точнее не так сейчас запустим посмотрим Я сам не помню вот вот собственно говоря мой имю построился Обратите внимание красивое отображение влр он говорит что ребят Вот к вот этим фича применяется дроп удаление вот этим фича применяется Simple

он говорит что ребят Вот к вот этим фича применяется дроп удаление вот этим фича применяется Simple имю к этим фича вот пьютер с такой стратегией ну и Reminder это сейчас я объясню что это такое вот после того как я от на Мирова Обратите внимание нейма нет н ID нет кабины Нет тикета нет А ну и скорее всего заполнили пропуска вот если я вот здесь по умолчанию он стоит То есть если Давайте запустим видите образуются вот эти префиксы если они нужны то Окей ну мне они не нравятся где-то они нужны

видите образуются вот эти префиксы если они нужны то Окей ну мне они не нравятся где-то они нужны Для построения чего-то сложного мы Выключаем эту историю нам ня устроено просто да Всё я убираю вот этот признак Это для тех колонок которые нигде не приняли участие например Класс вот класс Я где-нибудь применил здесь хоть один из Трансформеров к клас примется Нет давайте я закомментировать не изменяет Да дроп - это значит Те кто не те кому не обратились Трансформеры их удалить но нам их удалять

Да дроп - это значит Те кто не те кому не обратились Трансформеры их удалить но нам их удалять не надо то есть вот Давайте посмотрим что с классом будет класс потом пол пассажира тоже ничего не применялось всё их нет вообще то есть все Столбцы которые не были применены они удалены Поэтому если вы включаете эту историю то они как бы по пайплайн просто прокатывают Понятно их не надо преобразовывать они в том виде в котором были они катятся дальше ВС иго кайфовая штучка собралась у на с вами вот

они в том виде в котором были они катятся дальше ВС иго кайфовая штучка собралась у на с вами вот экзем класса который чере те же самые сущности реб как мы на делали и так далее трансформ на этапе фита я знакомлюсь с новыми данными на этапе трансформа я их трансформируют Вот они были реновы данные я познакомился понял что с каждым из них делать и сразу трансформировал и Да мы как бы у нас там есть а самое главное это и ир больше нанов нет то есть мы действительно заполнили Вот так это в

там есть а самое главное это и ир больше нанов нет то есть мы действительно заполнили Вот так это в принципе теперь смотри что делать с Валида выборкой валион выборку мы просто трансформируем то есть имю уже обучен правильно Представьте что это новые данные которые вам пришли бы на сайт где у васде что-то предсказывает мы уже просто дам фом и всё Вуаля получилась Вот такая вот история что мы их тоже преобразовали если сейчас здесь вывести из то нанов Ну видно уже что удалились Столбцы остальные

преобразовали если сейчас здесь вывести из то нанов Ну видно уже что удалились Столбцы остальные значит всё остальное тоже Да нанов нет всё прекрасно работает то есть теперь у нас с вами есть мьюр который заполняет пропуска здесь у меня показано ошибочно использование это совсем недавно группу одну-две Я просто не убираю этот код но совсем недавно в элёр это пофиксили раньше это фикс не был сейчас он бьёт ошибку ошибка заключается в чём я вам говорил что эрн он ой трансформер Он про

был сейчас он бьёт ошибку ошибка заключается в чём я вам говорил что эрн он ой трансформер Он про параллельное применени Но к разным столбцам к разным То есть когда вам нужно к разным столбцам что-то применить Если вы хотите к одному и тому же столбцу применить два действи Вам нужен первый случай То есть если мне к столбцу хочется Ой или к столбцу Давайте вот столбцу например столбцу опять же Пол Мне хочется и залить его и закодировать то это надо делать не через ка трансфор Это плохо

же Пол Мне хочется и залить его и закодировать то это надо делать не через ка трансфор Это плохо закончится раньше это Никакой ошибки не давало просто выдавали кривые результаты но они наконец это поправили и собственно говоря это и прописано здесь Да что столбцу H Ну если всё подытожить что здесь написано применено несколько трансформаций поэтому о таком забудьте каждому сло одна трансформация вот ну такой небольшой небольшой ГС Да Кость А в параллельную можно засунуть пайплайн если всё-таки

вот ну такой небольшой небольшой ГС Да Кость А в параллельную можно засунуть пайплайн если всё-таки нужно сделать несколько в одном стол но чаще наоборот в пайплайн засовывают в последовательно засовывают параллельно понял Но дальше это ты как художник это реально такое творчество собрать В каком-то смысле как знаешь как вот Строитель строит дом Вот ты примерно также будешь строить Но то что ты сказал Да вполне себе возможно так дальше что мы идм кодируем и нормируемые на один этап можно это

сказал Да вполне себе возможно так дальше что мы идм кодируем и нормируемые на один этап можно это сделать отдельными этапами про энкодеры вы немножко знаете уже немножко знаете а кстати Маленький вопрос там когда в первой ячейке если запустить первую ячейку то вот там перечислено ше видов энкодеров и почему-то все срабатывают после кодер выдаёт ошибку то есть вроде как я так понимаю инсталлировать кодером в СР не есть проблемы можете ещё знаете какая есть библиотека её надо устанавливать

кодером в СР не есть проблемы можете ещё знаете какая есть библиотека её надо устанавливать дополнительно по-моему вот из этой библиотеки брать Таргет кодер Угу рошо такая проблема действительно есть то есть Тандер влр что-то тупит иногда вот так так так Ну что ж возвращаемся сюда смотрите сначала поговорим о кодировке данных вот есть в принципе три главных энкодера этор который кодирует порядкова в коде он либо о либо Ну лучше использовать рядко Это что значит это значит что mail я закодируют

в коде он либо о либо Ну лучше использовать рядко Это что значит это значит что mail я закодируют Ну кстати задиру наоборот как Но по что по алфавиту будет выше вот Ну то есть красный белый зелёный синий 0 2 3 4 там и так далее То есть порядковая кодировка Понятно Она имеет плюс она очень простая но она имеет минус в том что она создаёт порядок если я Красноя белое зелёное закодируют вдруг белая ой Красная стало хуже чем белоя и Зелёная а для компьютера это будет именно так понятно То есть

ой Красная стало хуже чем белоя и Зелёная а для компьютера это будет именно так понятно То есть лучше кодировать перемен которые дест имет поряд закодирован я не скажу что мужчины и женщины имеют порядковой но просто это всего два значения и для двух значений как бы нет такой проблемы потому что плюс можно легко сделать минусом и короче проще всего закодировать реально как 01 и всё А вот для трёх уже имеет для трёх имеет там бы если бы было бы три пола я бы уже так не кодировался са знаем

трёх уже имеет для трёх имеет там бы если бы было бы три пола я бы уже так не кодировался са знаем идеально Ну для всех проговорил он кодируется Например у вас есть а да мы сейчас посмотрим он кодирует значение вектором он кодирует значение вектором это удобно Для того чтобы избежать операции сравнения между объектами чтобы не было что один объект лучше чем другой вот и это использовали всё хорошо отлично Я просто так быстренько проговорил чтобы все были немножко в контексте вот ну и Стандарт

отлично Я просто так быстренько проговорил чтобы все были немножко в контексте вот ну и Стандарт скейлер Да я числовые признаки отмирания собрался энкодер он пока кстати он после обучения меняет цвет Обратите внимание когда он обучен он становится другого цвета здесь вот пока он у меня не обученный вот природа такая природа и в него я подам Ну это что-то мы смотрели другой группо видимо в него Я подаю в него Я подаю подаю сюда данные которые уже я прогнал через через итер Да у меня был назван

подаю в него Я подаю подаю сюда данные которые уже я прогнал через через итер Да у меня был назван для кого не нужно то есть обучиться и так обучится и так но например для кого нужен Y Ну вообще для модели машинно обучение нужен Y tget Правильно а ещё если вы вдруг поставите Target encer татко ни для кого наверно не секрет из название targeter будет использовать тагет поэтому можно подать там внутри сам знает как всё это делать Просто знаете что вы сюда поёте либо X либо XY Вот в эти части

внутри сам знает как всё это делать Просто знаете что вы сюда поёте либо X либо XY Вот в эти части пайла Ну давайте уберём Y я его нигде не использую поэтому так пусть будет Вот что у нас произошло Давайте по порядку во-первых All mail female стали как единички и нули Да потому что это ordinal encoder One H enc как я вам сказал кодируют порты вектором Так давайте я вот выведу вот этот Fi Data чтобы было с чем сравнить вот F - это то что поступало и то что вышло на этот этап Итак вот мы ди стал

было с чем сравнить вот F - это то что поступало и то что вышло на этот этап Итак вот мы ди стал как но кодирует он исходя из алфавита да первый символ в алфавите раньше чем поэтому как бы стало нум Вы можете задать свой порядок это не проблема погружаетесь мето читайте документацию вот далее порт пор пор порт имеет как бы три разны пор кодировка то есть теперь как бы вот этот порт как бы порт S он имеет единичку на третьем месте два нуля на Первом двух то есть итоговый Вектор 01 Ну например

S он имеет единичку на третьем месте два нуля на Первом двух то есть итоговый Вектор 01 Ну например возьмём Вектор Q 359 объект он имеет у нас с вами кодировку 0 1 0 и есть Вектор ой пор C он имеет кодировку 1 Тем самым я вот возьму вот эти два порта я их между собой не могу сравнить сказать какой больше какой меньше в этом плюс а кодирование ходе но большой его минус он начинает раздувать датасет это ладно всего Здесь три категории Представьте 20 категорий это 20 столбцов это начинает

датасет это ладно всего Здесь три категории Представьте 20 категорий это 20 столбцов это начинает раздавать датасеты создавать проклятия размерностей и прочие проблемы которые как бы не всегда хороши поэтому ходе его надо по возможности стараться избегать где это возможно Ну либо применять его там где колонки имеют мало уникальных значений вот далее к столбцам H и FR мы с вами применили что мы с Вами применили Мы применили стандарт с вот стандарт скей применил Ну понятно всё они приведены

мы с Вами применили Мы применили стандарт с вот стандарт скей применил Ну понятно всё они приведены основную школу эти три столбца до сих пор пока не тронуты Да Сержа два вопроса Первый я в какой-то из книжек читал про говорили то что когда ты используешь все столпцы получается линеар один можно выкинуть потому что поло е веде нули значит оно это имеет какой-то смысл или да да но это имеет особенно имеет для для того когда ты линейную модель применяет мультикар это вообще Линейная зависимость

имеет для для того когда ты линейную модель применяет мультикар это вообще Линейная зависимость будет плохо по-моему Ну ты прав Да потому что два столбца однозначно определяют третий то есть третий можно было бы выкинуть Вот Но если ты оставишь ничего страшного не будет ничего страшного не будет Поня е один вопро сча делить на валидацию и а потом делать преобразование и Мо сла ВС преобразовать а потом поделить так меньше действий мо мо Ты прав я это больше здесь делаю парадигме того чтобы

а потом поделить так меньше действий мо мо Ты прав я это больше здесь делаю парадигме того чтобы показать всем что есть потом дальше он работает как трансформатор то есть его обучать больше не надо вот ну есть одна такая история когда ты делае нам а потом делае этова дан ком-то плане валидацию выборку Которую потом во время обучения не должен использовать ты её частично использовал для при процессинга То есть он видел среднее этих выборок стандартное отклонение там да например стандарт скер или

То есть он видел среднее этих выборок стандартное отклонение там да например стандарт скер или категории как бы вот вот это вот это в принципе не катастрофи Но в каком-то смысле это утечка данных потому что потом на обучении будет использоваться то как бы На чём валидировать мы хотим вообще в идеале это полностью избежать Да чтобы модели данные которые на которых мы её будем проверять она их вообще не видела вообще не видел так Ну можешь подавать любо всегда тогда пока XY потом дальше те по

не видела вообще не видел так Ну можешь подавать любо всегда тогда пока XY потом дальше те по понятнее будет для чего нуже просто кому-то нужен и кому-то нет вот здесь все кто есть им нафиг не нужен но стоит мне только поставить вот он поменялся всё падает ошибка он говорит что я ждал у тебя Y потому что Таргет инкоде нужен Y Понятно Люба в первую очередь тебе показываю вот если мы ему здесь подаём Y всё он без капризов Ну нет с капризами Ну это уже капризы какого-то какого-то другого формата

Y всё он без капризов Ну нет с капризами Ну это уже капризы какого-то какого-то другого формата какого-то формата Я у меня точно сюда иг подавать у меня Какого размера то имеет и у меня это всё мне надо что подавать мне надо мне подавать Y правильно у меня там размет ой Y говорил всё пожалуйста всё сработало всё сработало и теперь с вами закодирован мне без игри никуда всё соответственно па не будет работать возвращаю Я в исходный вариант а Орде кодру если даже сюда Подойдите Ему просто

не будет работать возвращаю Я в исходный вариант а Орде кодру если даже сюда Подойдите Ему просто фиолетовый он его не использует и всё так что можете вообще всегда с ним подавать не прогадаете вместе с игрим Да Кость я чуть-чуть забыл Таргет энкодер он по-моему берёт все значения таргета там один или ноль и для всех значений соответствующих ему возвращает среднее путу он мужской пол закодируют вероятностью гибели для этого Он возьмёт всех мужчин посмотрит кто погибал если там 70% пере бала

вероятностью гибели для этого Он возьмёт всех мужчин посмотрит кто погибал если там 70% пере бала точнее наоборот вероятностью выжить потому что единичка класс выжить то есть мужчины закодируют Ну в принципе катим можно кстати посмотреть та а вот видите мужчина закодировался 018 Это значит что в обучающей выборке выжил 18% мужчин а женщин 74 Поэтому будет такая вот это я сейчас проговорил прежде чем меня спрашивать после обязательно этот момент Посмотрите в лекции договорились чтобы я одно и

чем меня спрашивать после обязательно этот момент Посмотрите в лекции договорились чтобы я одно и тоже дважды не повторял то есть вот работа Я просто уже предвестник вопросов которые будут в будущем Посмотрите вот здесь плюс у меня будут небольшие ссылочки та на самом деле работает достаточно Вот мы с ми проговорили Как работает тся во закончился Слушай ну я понимаю что относительно помню как работают кодировки все в целом но было бы клёво услышать ещё раз короткую рекомендацию Какие когда

работают кодировки все в целом но было бы клёво услышать ещё раз короткую рекомендацию Какие когда использовать Но если сейчас нас это сильно Отвлечь потом в конце где-нибудь лучше потом когда Настя Да просто можно посмотреть код который либо Ну который вместе с колом трансформером либо прямо вот этот либо предыдущий Я просто синтакс сри что потому что такое ощущение я не понимаю Вот красненькая Versus Ну например ordinal encl Ладно возьмём вторую строчку One H ining и потом следом One H

Versus Ну например ordinal encl Ладно возьмём вторую строчку One H ining и потом следом One H encoder Ну нет вторая строчка котора же внутри коло Трансформера Да нет Вот вот ещё раз повторюсь я в начале это говорил вот это вот эта часть состоит из трёх вещей это ключ по которому вы сможете вытащить этот энкодер это то кто отвечает за трансформацию А это его данные которые нужно трансформировать Что такое ключ Ну в дикте ключ значение по ключу мы достаём что-то короче что из этого что из этого

Что такое ключ Ну в дикте ключ значение по ключу мы достаём что-то короче что из этого что из этого как бы ну синтакс который нужно искать А что из этого мы сами просто пишем как наши Я не знаю слова не понял вопроса Ну короче что из этого мы вбиваем копы что из этого запомни что стоит из трёх частей вот сюда можешь написать всё что угодно Представь что ты имя ребёнка даёшь то есть всё что хоче всё что хочешь Вот здесь H encoder Да здесь тип подать Класс Класс того кто будет отвечать за эту

всё что хочешь Вот здесь H encoder Да здесь тип подать Класс Класс того кто будет отвечать за эту трансформацию Угу А сюда ты подаёшь название повторюсь не сами данные А название столбцов которые нужно вот ял вот эти и они все работают одинаково то есть что выше что ниже Я всегда вот всё сделал по этой здесь соотвественно и слин в одной потому что типа я к разным столбцам применил А ты пояснял выше или [музыка] нет так идём дальше идём дальше да Люба ну у меня вообще такой примитивный вопрос а

или [музыка] нет так идём дальше идём дальше да Люба ну у меня вообще такой примитивный вопрос а прям надо распараллелить то есть обычно данные долго не заснуть ВКО палий мы распараллеливание потому что потом будут у нас модели которы Те просто неудобно будет хранить это всё последователь если у меня здесь будет сделано 100 преобразований которые на самом деле в три этажа складываются Я лучше в три их сложу чем стоэ таж дом построил правильно Ну логично Ну просто для скорости да про для красоты

их сложу чем стоэ таж дом построил правильно Ну логично Ну просто для скорости да про для красоты каждый этаж ты можеш дест даже вот этот код Попробуй пере потра весь день чтобы его собрать что говори труднее и не удобнее берм столбец пол сначала закодировать потом залить это уже два этажа потом берём класс его нуже то Тото а потом ещ Тото а потом е Тото инженеринг и вот четырёх этаже стоит уверенная Да так так и самое приятное то что я с вами всё это разбирал по куску но Наша задача на выходе

Да так так и самое приятное то что я с вами всё это разбирал по куску но Наша задача на выходе с вами собрать единый пайплайн вот Представляете как не знаю как кусочек какой-то как комочек который вы можете просто отдать своему другу отправить через интернет или что-то ещё он у себя это запустит в нужной среде И всё развернётся да то есть мы стремимся к вот этой капсула капсуляция капсуляция короче вот всё по кускам собирали теперь начинаем собирать я это назву здесь тол препроцессор и очень

вот всё по кускам собирали теперь начинаем собирать я это назву здесь тол препроцессор и очень просто объединяя его в пайплайн пайплайн напоминаю последовательно то есть сначала заполняем наны потом заполняем слинг это вот то что по-моему Кость ты спрашивал или то-то что в параллельном последовательно засунуть А вот у меня в последовательном параллельно наоборот и выглядит это следующим образом вот он уже такой приятней достаточно Да с виду то есть вот у нас весь пайплайн здесь его код и

вот он уже такой приятней достаточно Да с виду то есть вот у нас весь пайплайн здесь его код и составляющая сверху вниз идём то есть сначала ИМП здесь каким столбцам Что Кто как применяется потом скейлер Кто кому что Куда идёт Всё можете Открыть посмотреть здесь выход Давайте проверим беру абсолютно сырые данные абсолютно сырые данные беру вот этот свой при процессор вот этот и обучают Ну приехали что-то ему не нравится а у меня же тако стоит теперь мне надо подавать сюда и обучаем на новых

что-то ему не нравится а у меня же тако стоит теперь мне надо подавать сюда и обучаем на новых данных Вуаля то есть напоминаю я подал сюда вот это вот всё с Нанами с не закодированным значениями с лишними столбцами и просто одна строчка и что за приятные красивые данные Выходят да то есть само ощущение на самом деле Красиво и приятно всё данные готовы всё классно всё отлично они уже в принципе вот э данные готовы для обучения очень спорный вопрос надо кодировать эти данные или нет Ой

вот э данные готовы для обучения очень спорный вопрос надо кодировать эти данные или нет Ой нормировать вот эти вот всякие то что после кодировки Ну я обычно этого не делаю получается так получается так 2 дня да одной строкой точне собрали формер Всё эти данные готовы для обучения но по факту мы с вами как бы не трансформацией занимаемся а машинным обучением поэтому мы сейчас будем цеплять модели к этому пайплайн и Вуаля проверим что он обучился вот приходят новые данные он их вообще не видел

к этому пайплайн и Вуаля проверим что он обучился вот приходят новые данные он их вообще не видел эти данные валидацию понимаете да то есть он обучался на Трей и мы ему подаём просто X валит говорим трансформируйте кодировку скен и пришли к нам в таком виде который мы построили Ну что ж Пора значит раз данные подготовили пора как бы цеплять модели всё очень просто смотрите дальше в пайла я просто беру свой препроцессор весь воспринимать его как отдельный кусок Да просто как как не знаю

я просто беру свой препроцессор весь воспринимать его как отдельный кусок Да просто как как не знаю производство вы на производстве что-то строите вот я беру процессом у даже надо думать что там в этом процессоре Всё я про погружая Да я не проговорил в пайплайн сущность следующего характера тут тоже плы но вы просто указываете имя и указываете сам преобразователь через пай проходят все данные Поэтому ему Столбцы не нужно указывать Ну и модель модель цепляю логистическую регрессию предположим

ему Столбцы не нужно указывать Ну и модель модель цепляю логистическую регрессию предположим всё Вот мой пайплайн вообще Итого получилось то есть всё что у нас с вами было и ещё Логистическая регрессия мы с вами обучаем вот он обучился теперь смотрите вот как бы препроцессор имел парадигму ТФ То есть он Фил и трансформировал модель пай вместе с моделью его конечный этап это не трансформация а предсказание потому что там стоит модель машинного обучения тогда надо указывать Fit PR Ну как бы и

предсказание потому что там стоит модель машинного обучения тогда надо указывать Fit PR Ну как бы и получается и всё у меня Обратите внимание Вот я просто уже считаю метрику вот обучен Да вы его можете назвать там как-то по-своему у меня пайплайн обучен я делаю точка предикт подаю сюда сырые данные абсолютно сырые данные Давайте вот эту строчку возьмём [музыка] отдельно Вот вот сюда Я подаю данные вот вообще в точно также могу указать приди Проба по каждому пассажиру я посмотрю то есть на 90%

вот вообще в точно также могу указать приди Проба по каждому пассажиру я посмотрю то есть на 90% первый пассажир погибает на 10 выживает второй на 76 погибает на 23 выживает Ну и так далее То есть у вас здесь так как Логистическая регрессия на выходе будут доступны все методы логистической регрессии Понятно Вот ну и буквально то есть красиво да сырые данные в один клик получают предсказание Ну ниже у меня уже просто считаются метрики точности чтобы посмотреть и там под такой Сплит который у

ниже у меня уже просто считаются метрики точности чтобы посмотреть и там под такой Сплит который у меня сейчас получился точность на на реновы данных 80% а это значит что мы примерно на 80% угадываем выжил пассажир или погиб А валидация ну тоже около 80% всё здесь я е вытащ коэффициенты Вот вот кста клю опять удобная история чтом Надо посмотреть в моде нормальная история я чу как бы здесь много классов лежит внутри мне посмотреть модели мы с вами знаем в палай Мы строили что у нас ключ ключ где

лежит внутри мне посмотреть модели мы с вами знаем в палай Мы строили что у нас ключ ключ где там я собирал его Вот ключ модул я могу вытащить по мо если я беру Я вытаскиваю логистическую Реда получали По градиентного спуску в пятницу Понятно Вот ну я это всё сделал чтобы посмотреть важность признаков всё здесь собственно говоря взял фичи коэффициенты создал датафрейм и отсортирован Итак самый важный признак получился пол пол то есть мужчина или женщина причём вес положительный А у нас женщина

признак получился пол пол то есть мужчина или женщина причём вес положительный А у нас женщина закодирована единички да это значит Чем по математическому чем больше ты женщина тем больше у тебя выжить шанс у на жена закодирована вероятностью выжить 074 а стоп дадада Мы же не 0 да ну короче чем у тебя больше кодировка в этом столбце тем больше шанс выжить а у нас там только две кодировки 0 у муж ты получаешь здесь 0,74 у 468 это тебя тянет в сторону единички в сторону вверх если ты мужчина К

ты получаешь здесь 0,74 у 468 это тебя тянет в сторону единички в сторону вверх если ты мужчина К сожалению похуже ситуация то есть вот возраст возраст имеет отрицательный вес а это значит что чем ты старше тем вероятность что ты выживешь она понижается Ну понятно что детей Да вот у меня же дети тоже в этом стоп включены детей в первую очере спасали это в принципе влияло в том влияет в том числе Да на вот этот результат Ну дальше класс там и остальные веса можете посмотреть Да Бул А я шёл по

Да на вот этот результат Ну дальше класс там и остальные веса можете посмотреть Да Бул А я шёл по зап за тобой по следам и у меня вышло то что секс вообще минус 2,55 Ну значит ты другую кодировку использовал Скорее всего Скорее всего у тебя вот где у меня кодировка стоит Ну давай вот в этом пайплайн короче прямо Вот здесь посмотрим блин потерялся где мы были то с вами вот здесь вот вот здесь Посмотри у тебя точно тако стоит а не не о вот о закодировал Просто по-другому у тебя там женщина

Посмотри у тебя точно тако стоит а не не о вот о закодировал Просто по-другому у тебя там женщина кодируются меньше чем мужчина женщина ноль а мужчина один а у меня женщина больше кодируется Чем мужчина сексистская кодировка Ну понятно да Люба Ну вот у меня тоже вопрос как у Була в принципе смотри вот допустим он закодировал по-другому там может знак поменяться Но почему у нас чере грубо говоря у болад вот этого не понимаю ВС равно важность нет Ну блин вы должны понимать что тут нет чётко

у болад вот этого не понимаю ВС равно важность нет Ну блин вы должны понимать что тут нет чётко математического правильного ответа это всё я сейчас поменяю две цифры у тебя будут вообще другие веса поэтому важно даже знаешь как смотреть надо сравнивать ве относительно друг друга Була мот и другие ве прость понима он он закодировал по-другому Ну к сожалению это просто два разных математических подхода и их сравнить Ну не получится понимаешь там закодировано 01 А здесь 018 074 компьютер вообще

и их сравнить Ну не получится понимаешь там закодировано 01 А здесь 018 074 компьютер вообще пофигу просто А мы по-разному закодировали поэтому нельзя сказать что у Була это меньшее влияние чем у тебя когда ты сравниваешь вот эти два метода это работает примерно следующим образом вы собирать тот пап который Вас удовлетворяет по точности и вот эти веса которые как бы формируются или важность признака вы им а с а сравнивать 1 апер с о Вольтом это дело такое очень неблагодарное понятно да точность

вы им а с а сравнивать 1 апер с о Вольтом это дело такое очень неблагодарное понятно да точность такая же У тебя вышла 8 79 такой же выш отлично Серёжа У меня быстрый такой вопрос Мы по Су дела поделили данные на три части у нас теперь три выборки А почему не могли просто взять и тестовую кото у нас для вот где 400 человек Зачем на тесто же на тестово же нет разметки на тестовой же нет разметки А как себя Проверить всё точно вопросов нетбай а это это типа Вообще маленький Да пайплайн ну не

А как себя Проверить всё точно вопросов нетбай а это это типа Вообще маленький Да пайплайн ну не очень ну вос ты переживаешь Что что там будешь строить новый Титаник грубо говоря па да инженерно решение то да в плане Короче мы всё взяли Это должно не пугать а вызывать тебя в почему это тебя пугает вызывает вор просто вопрос короче типа то что мы все Степы которые до этого делали типа там проекте Да например типа вручную мы типа всё это засунули в одно и просто использу одну штучку графики ты

Да например типа вручную мы типа всё это засунули в одно и просто использу одну штучку графики ты всё равно будешь рисовать на стороне отбор признаков ты всё равно будешь рисовать нане это просто краси понял чтобы не в мусорном виде Да ну не то что в мусорном грубо сказано но не в разбросанно виде А всё в Едином было собрано там ещё важная часть работы дня бы был же парсинг когда мы сптоваров рассказал Не торопитесь ещё кое-что будет что будет то есть ты ничего лишнего не делал если ты

рассказал Не торопитесь ещё кое-что будет что будет то есть ты ничего лишнего не делал если ты переживаешь в этом плане я просто не могу понять твои переживание если частно я вижу что ты переживаешь но не могу понять почему что я тебе могу сказать Так что если как бы ничего лишнего Ты абсолютно не делал графики Как надо рисовать за пределами па так и надо там делать какие-то дополнительные функции как надо так и надо а этом наоборот понял то есть Так что пользуйся наоборот и всё будет по

функции как надо так и надо а этом наоборот понял то есть Так что пользуйся наоборот и всё будет по красоте вот так Т Люба вопрос отпал Да не я хотела сказать что я придумала как на гле победить Можно же под каждую строчку решение написать можно просто в парсинг парсинг запустить с интернета там известно Кто выжил кто погиб я так так дела бы точно 9% но я не понимаю там потому что проблема в том что короче там косяк языков я писал скрипт с одного языка на другой переводить грубо говоря вот в

что короче там косяк языков я писал скрипт с одного языка на другой переводить грубо говоря вот в итоге я не нашёл пассажира на котором съезжают там на двух пассажирах Я ошибался Наверно это это это как бы уже не анализ данных это уже понятно просто такая игра как бы ну если бы за Титаник давали бы миллион долларов за победу то тогда как бы уже можно было бы так поиграть а тут просто говорят ты молодец и всё это больше чисто конечно по тренить идее по тренить идеи вот так давайте идём дальше

молодец и всё это больше чисто конечно по тренить идее по тренить идеи вот так давайте идём дальше что у нас здесь с вами Ну здесь я просто формулу написал на самом деле Кстати я неправильно её написал я только потом понял знаете почему пото что ещё как бы в случае с логистической агрессий это ещё в сигмой ДУ надо всё обернуть но тем не менее типа веса вот вес у пола вес Ур вот эти вещи я пишу чтобы у вас прослеживалась логика математики и кода в каком-то смысле да То есть вы понимали что вот

у вас прослеживалась логика математики и кода в каком-то смысле да То есть вы понимали что вот инструментарий есть И что ваше предсказание - это не какая-то магическая коробка внутри А вот оно вот просто перемножение весов назначени в случае логистической регрессии конечно итоговый результат Да особенными важными признаками остался пол пассажира иго воз беру и и цепляю сюда как модель Я указал параметры случайны не претендую на какую-то сверхточный соседям то есть иначе говоря выживу я не

параметры случайны не претендую на какую-то сверхточный соседям то есть иначе говоря выживу я не выживу он находит выборки пять максимально похожих на меня людей по возрасту по полу по классу по наличию родственников и так далее похожи выживали они или нет и даст предсказание для меня выживу выжил бы я с такими данными на Титанике или погиб Вот в общем собрался пайплайн У нас тоже самое обучаем Да тоже самое смотрим точность Ну вот это вот кстати ребята вот это переобучение пошло небольшое

Да тоже самое смотрим точность Ну вот это вот кстати ребята вот это переобучение пошло небольшое видите Рейно выборка начинает доминировать на тестовой над Валида точнее здесь никакого смещения в Титанике нет то есть выборки действительно репрезентативный относительно друг друга а это значит что идеальный случай это Примерно вот такой где он Вот здесь вс хорошо а это всё-таки пошло переобучение чтобы с ним бороться мы об этом ещё Завтра поговорим Но вообще надо поиграться с параметрами немного

с ним бороться мы об этом ещё Завтра поговорим Но вообще надо поиграться с параметрами немного поиграться с параметрами и найти что-то более более оптимальное для себя далее запущу decision 3 считали можно поставить указал ра Обучаю запускаю получаю какую-то вот такую точность Да ну как бы алгоритмы плюс-минус все одинаковые вы пока как бы для себя в голове сильно не ранжируйте по что данные очень простые да И тут статистически отклониться двум методом на Ося с что хуже с больших выборках они

простые да И тут статистически отклониться двум методом на Ося с что хуже с больших выборках они начинают расходиться более своим значением тут выборка Небольшая но если большая Я бы вам просто не успевал это всё показать поэтому мы на небольших выборках делаем decision 3 вообще посильнее алгоритм тут может показаться что как бы это не так Логистическая регрессия лучше Но именно по точности как бы decision 3 поточнее А даже не сам decision 3 а то что будем разбирать завтра построено на Дерех

бы decision 3 поточнее А даже не сам decision 3 а то что будем разбирать завтра построено на Дерех решений но пока имеем что имеем А давайте поставим глубину дерева 15 равно один а такое бывает это конфликт ги гипер параметров он говорит что надо от двух поставить Вот видите Вот это переобучение правда парадоксально что как бы при этом и валидация всё равно поднялась но интерпретация признаков будет не самая идеальная то есть почти 100% уже довёл точность глубиной 15 А если вообще поставить на

не самая идеальная то есть почти 100% уже довёл точность глубиной 15 А если вообще поставить на Давайте попробуем 98 в какой-то другой гипер параметр упёрся но не не не оперирую вот этой точностью никогда то есть не стремитесь это данные на которых Я учился а как бы математика так устроена Что если вы случайное количество точек кинете в пространстве существует математический инструмент который восстановит функцию которая со стопроцентной точностью проведёт через нех все точки для любых точек

восстановит функцию которая со стопроцентной точностью проведёт через нех все точки для любых точек Понятно поэтому как бы это не имеет никакого смысла надо стараться как раз-таки за валидацию выборо который Ну модель она как бы их просто предиктивной бусте ли порог идеального Трей а 7 8% 85 79 это всё зависит от задачи како мне поставили Я сколько должен выполнить Ну там скорее не так Ну говорят что Давайте попробуем до 80 довести до 90 а если пере то скажет нехорошо это если переш верхнюю

что Давайте попробуем до 80 довести до 90 а если пере то скажет нехорошо это если переш верхнюю сторону ЕС вме порог я сделал 95 а не это тебе никто не будет говорить всех будет интересовать вот эта выборка А конечно буду ти говорить что вот это всё ну нет там это больше как бы на вас останется а в целом для компании ко при о не виде реально мире всё понял И вот её надо как бы стремиться делать как можно выше но там много нюансов но пока можно запомнить Да стараться делать её Как можно выше но

можно выше но там много нюансов но пока можно запомнить Да стараться делать её Как можно выше но но не больше чем троим Ну может такое получиться но не сильно не сильно вообще в идеале чтобы они были сопоставимы уре решений как я вам говорил есть Да кстати это вот это когда конфетки раздали признакам Понятно признакам раздали конфетки и видно что больше всего конфеток получил пол пото что он лучше всего разделял нолики от ени погибших от выживших вот возраст на а на втором месте класс на

лучше всего разделял нолики от ени погибших от выживших вот возраст на а на втором месте класс на третьем возраст Ну в принципе топ тот же самый Да топ тот же самый даже [музыка] можно Р val Да вот только надо указать чтобы он по убыванию вот топ наш получился что у логистической регрессии что у decision 3 топ признаков один и тот же да Сержа Антон А ты говорил вот про дерево решения когда мы обсуждали дни - это получается ме неопределённости данных а мера беспорядочно одно и тоже это

мы обсуждали дни - это получается ме неопределённости данных а мера беспорядочно одно и тоже это характеристика меры беспорядочно данных То есть это оцифрованная То есть как мы можем их интерпретировать В общем Ну вот то что я вам рисовал сегодня Если ближе к 05 Это плохо ближе к нулю это лучше а в случае с энтропией энтропия по-моему измеряется в шкале от нуля п до одного тоже самое единичка - это максимальная фигня 0,5 - это нормально понял Спасибо Да у меня Я использовал Ну то есть ничего не

максимальная фигня 0,5 - это нормально понял Спасибо Да у меня Я использовал Ну то есть ничего не менял в котором лежал файл У меня вышло секс 57% а пи класс 26% Ну у тебя другой Сплит данных Бывает такое Это не это маленькая разница а не это не существенная разница Да не суще спасибо Так ну и последнее что я наверное вам проговорил на сегодня сегодня про говорю Последнее А что если вдруг вы хотите проявить Ну вот там мы обсуждали Ну какой-то вы там распалить вот элементарно вот у меня есть

проявить Ну вот там мы обсуждали Ну какой-то вы там распалить вот элементарно вот у меня есть столбец Я может быть хотел бы префикс отсюда вытаскивать очевидно в элёр не будет готово в решение правильно Эска предоставляет гораздо более крутую штуку он горит Ребят вы можете вставлять туда любые сво трансформаторы какие хотите просто Создайте его Напишите кодом и Вставьте в пайплайн круто круто звучит очень хорошо вот так давайте погрузимся это для чего полезно Это для фичи инжиниринга полезно

очень хорошо вот так давайте погрузимся это для чего полезно Это для фичи инжиниринга полезно для всего например например например что я хочу сделать Давайте посмотрим что я хочу здесь сделать я не помню что А вот смотрите если взять средний возраст пола даже Давайте не средний возьмём Медиа вот так то видите первый класс который более Ну более богаты скажем так да в среднем 37 37 медиан значение возраст 37 лет во втором классе 29 в третьем в рабочем классе 24 понятно что есть какая-то

значение возраст 37 лет во втором классе 29 в третьем в рабочем классе 24 понятно что есть какая-то возрастная история Да вот молодёжь просто в силу возраста ещё пока Ну большей части в третьем классе находится Ну так далее А я заполнял когда наны вй я заполнял медианой общей А сейчас хочу заполнить пропуск возрасте исходя из того какого класса пассажир То есть если пассажир первого класса то я ему заполнил бы 37 Да если он второго класса 29 А третьего 24 как это пишется смотрите во-первых вам

заполнил бы 37 Да если он второго класса 29 А третьего 24 как это пишется смотрите во-первых вам нужно подключить э библиотеки можете не грузиться Для чего недо вате свой класс можно это функционально описывать но я советую классами это делать класс дож простой вам нужно по факту всего сделать два метода и А с помощью вот этих методов с помою этих двух лассо он их найдёт Вот например смотрите Я хочу заполнять исходя из своего правила Я говорю что во врем во врем возна возраст медианный у

Я хочу заполнять исходя из своего правила Я говорю что во врем во врем возна возраст медианный у первого у второго и у третьего класса Да поэтому я и описываю и сохраняю их ВТО params самое главное - это трансформ когда мне подают данные на трансформацию Я говорю во-первых это делается копи просто это Сделайте так и пока что Да чтобы вас не перегрузить Но на самом деле именно как бы информационная строчка с информационной нагрузкой это вот она То есть как вы делали на фазе Но получается

строчка с информационной нагрузкой это вот она То есть как вы делали на фазе Но получается пропуска F na и говорю то что заполнено здесь всё как бы в сам код в дебре я не буду лезть просто поймите сущностями Да есть класс есть Фит есть трансформ во время фита вы знакомитесь с данными знакомитесь с данными во время трансформа вы их трансформирует может показаться сложно но на самом деле безумно просто это всё И ещё я решил сделать такую историю то есть есть два столбца и parents children все как

это всё И ещё я решил сделать такую историю то есть есть два столбца и parents children все как бы не поде хранить а просто назвать это типа всей семьёй Да грубо говоря для этого что я делаю Смотрите мне вообще ничего не нужно мне даже не нужно обучаться просто не нужно мне нужно тупо трансформироваться Ну и просто говорю что вот новый столбец это вот этот столбец из данных которые мне подали да и теперь Давайте сорм с вами полностью ещё раз то есть здесь я назначил все константы все константы

и теперь Давайте сорм с вами полностью ещё раз то есть здесь я назначил все константы все константы Кто куда что как и собирают полный полный па вместе и па поехали вот же То есть это я просто создал новую фичу сделал фи иннинг Да грубо говоря и цепляю модель в конце вот а сдер ой точнее пьютер Вот он мой пьютер Обратите внимание СР нигде нету я просто вставил сюда свой пьютер Ну что ж попробуем запустить можно взглянуть как он выглядит вот как бы наши наши с вами ручные труды это вот этот блок

можно взглянуть как он выглядит вот как бы наши наши с вами ручные труды это вот этот блок и вот этот блок да то есть это то что нер взяли мы сами написали всё что угодно можете сюда вставлять так ещё раз здесь я Ну видимо всё просто [музыка] проделывают результаты не знаю из-за этого или из-за того что я НМ State не выставил здесь как бы тут на самом деле это пока сильно неважно важно понять именно инженерную составляющую да инженерную составляющую происходящую и всё у вас пай готов

понять именно инженерную составляющую да инженерную составляющую происходящую и всё у вас пай готов преобразовывать то есть Вот сейчас кстати смотрите Ладно тут есть разметка у нас была и так далее я могу взять тестовые данные вот тестовые данные это которые нужно отправлять на предсказание для Титаника для них вообще нету Даже метрику не смогу посчитать Давайте попробуем в наш пай подставить mipel это вот нам дали пор сказано а новое количество пассажиров да которые нужно на оценку всё все то

это вот нам дали пор сказано а новое количество пассажиров да которые нужно на оценку всё все то есть вся вот эта выборка получила предсказание как бы ну мы мы можем с вами поиграть в игру Давайте Например я возьму тест точ ilog 413 Как вы думаете вот этот пассажир Давайте вот так вот возьму вот этот А я Не давайте не тест возьмём А мы с вами возьмём из выборки X Валид вот так вот помню пассажира под номером два вот как вы думаете этот пассажир выживет или погибнет А ну он с Нанами давайте без

под номером два вот как вы думаете этот пассажир выживет или погибнет А ну он с Нанами давайте без нану Вот например вот этот пассажир что думаете про ним выживет или погибнет выживет Ну скорее всего девочка ребёнок Да кла это и женщина да Давайте посмотрим что считает наша модель по этому пассажиру то есть как модель работает на Ирен я могу просто взять спокойно predict да Дик и подать сюда вот прямо в таком виде вот с такими этими всеми историями сюда пассажира ой pel всё вот получил мы

вот прямо в таком виде вот с такими этими всеми историями сюда пассажира ой pel всё вот получил мы модель тоже считает что он выживет более того можно посмотреть в вероятностях она достаточно уверена что пассажир выживет И кстати мы с вами можем посмотреть в жизнь Что с этим пассажиром произошло Так это получается АК это вот этот пассажир погиб оказалось А нет вот обманываю вот выжил 237 выжил выжила девочка да Сержа у меня такой вопрос меня сес мозг отказы когда мы используем вот сейчас у нас

девочка да Сержа у меня такой вопрос меня сес мозг отказы когда мы используем вот сейчас у нас правда в нашем пайплайн мы поменяли нал опять если бы мы использовали Target Дин Как он может примени к тестовой выборке если там нет таргета Вот здесь оже а он же Таргет энкодер Ты же его обучил на тренировочных данных и во время фита он запомнил что женщина кодирует так мужчина так и в принципе он же не обучается больше всё всё он Ну То бишь он А ну он всё он Фит не делает всё понял там обучающая

не обучается больше всё всё он Ну То бишь он А ну он всё он Фит не делает всё понял там обучающая урока для того нужна чтобы запомнить все как бы весь контекст понял который происходит А дальше уже вот даже видите поупа с вами на ин полноценно вы всё это ВМ можете обернуть Ну прой модели мы поговорим завтра модели Вот вот например вот этот парва вгм ним произойдёт класс тянет в принципе как будто бы в сторону гибели Но это девушка в сторону выживания Других данных нету непонятно да на самом

бы в сторону гибели Но это девушка в сторону выживания Других данных нету непонятно да на самом деле борьба вот этих двух чей идёт кто кого перетянет но учитывая что Пол более важный скорее всего модель скажет что выживет да Видите выжи Но на самом пасажир оч тоненько выжи Да но видно что модель как бы не до конца [музыка] Уверена это ещё связано с тем что Да у нас видите данных как бы не все есть всё равно как бы заполнение нанов это не стопроцентная фактическая информация мы можем неправильно

всё равно как бы заполнение нанов это не стопроцентная фактическая информация мы можем неправильно заполнить Ну произошла ошибка произошла тако бывает не знаю валидация это сегодня или нет задание вообще оно у нас есть Ну чувствуется что мы с вами сегодня много много всего переварил давайте я проговори Крос валидацию если кто-то её сильно не воспримет сегодня не переживать у вас будет время как я вам сказал есть такая большая проблема И давайте я её подчеркну ещё раз вот смотрите вот в чём она

вам сказал есть такая большая проблема И давайте я её подчеркну ещё раз вот смотрите вот в чём она заключается вот здесь я делю у меня НМ State не включён видите запускаем точность 8 смотрите вот к точности вот сюда смотрите 8181 запускаем ещё раз 8183 вот кстати Бул редкий случай Да валидация оказался точнее чем тре такое тоже может быть 81 82 82 82 Ну короче я вас веду 828 я вам веду к очень простой мысли я ничего не меняю в палай ничего не меняю там Конечно надо фиксировать Случайность у

простой мысли я ничего не меняю в палай ничего не меняю там Конечно надо фиксировать Случайность у модели по-хорошему у decision 3 А она у меня зафиксирована тут никакой случайности нету никого нет ни нет то есть единственное что действительно случайно провоцирует изменени это тупо то что у нас постоянный Сплит ой Сплит разный точнее постоянно разный Сплит вот так хотел сказать получается что вы можете при одном и том же палай обсудить друг с другом с бум у Насти точность будет 75 бу наме 80

можете при одном и том же палай обсудить друг с другом с бум у Насти точность будет 75 бу наме 80 или 70 и это будет вести к тому что вы будете считать что вы по-разному да построили модель Но это на самом деле так так вот со сплитом случилось поэтому как бы как это избежать для этого есть закон больших чисел и Центральная предельная теорема это ведь всё тут о том же самом пока у нас маленькая выборка большая дисперсия accuracy случайная величина Она имеет свою дисперсию в том числе и как-то бы

большая дисперсия accuracy случайная величина Она имеет свою дисперсию в том числе и как-то бы нам какой-то доверительный интервал для этого эси построить да или какую-то более объективную цифру два способа есть есть Крос валидация есть бутстрап но мы посмотрим Крос валидацию Крос валидация говорит что Ребята а давайте сделаем следующим образом мы с вами Вот это вот разделение Да мы как бы точнее надо вот так вот указывать вот так вот указывать то вот датасет у нас с вами мы с вами делим на

надо вот так вот указывать вот так вот указывать то вот датасет у нас с вами мы с вами делим на трейн тест А давайте это сделаем не один раз а сделаем пять раз и постоянно разные тем самым тем самым От чего мы страхуем от того что нас сильно Отклонить в одну сторону или в другую то есть я вот смотрите это называется фолды то есть я делю на пять фол дов на пять фол дов данные и в одном случае то есть вот у вас есть 891 пассажир я его разделил на пять групп понятно И я буду обучаться пять раз

есть вот у вас есть 891 пассажир я его разделил на пять групп понятно И я буду обучаться пять раз четыре фол я буду использовать для обучения и один фолд для валидации и всё время этот лидирующий фол будет разный но например например вот смотрите мы с вами вот нас с вами Давайте Ладно для кратности пять Без меня вот вас здесь 10 человек да 10 человек вот два Серёжи могли быть первым фулдом да Настя Бул вторым фудом Ну как объекты выборки да Люба толубай третьим Дима ко четвёртым Оля Саша пятым

Бул вторым фудом Ну как объекты выборки да Люба толубай третьим Дима ко четвёртым Оля Саша пятым тогда я бы в первом случае Серж взял бы на валидацию обучался бы на всех остальных ребятах вался потом повторил бы процедуру Только бы я бы взял бы Настю и булу на валидации а всех остальных ребят все остальные элементы выборки Я бы брал бы на трейн и так далее тем самым я получается сколько раз бы обучался пять раз абсолютно получил бы пять перформанс То бишь пять валидацию вот этих вот пять

бы обучался пять раз абсолютно получил бы пять перформанс То бишь пять валидацию вот этих вот пять валидацию и просто бы их усредни так устроен закон больших чисел что мы получим Более точную историю так устроена статистика да устроена статистика всё собственно говоря как это выглядит вр есть куда вы можете указать правило сплитом нужно разбить на пять частей Давай хороша равно перемешать данные и ROM State 666 чтобы зафиксировать Случайность опять же иногда перемешивать нужно потому что иногда

ROM State 666 чтобы зафиксировать Случайность опять же иногда перемешивать нужно потому что иногда данные бывают аранжировать никакого смысла поэтому а где-то наоборот нельзя мешать Если это какой-нибудь временной ряд понятно тут как бы на контролить эти моментики да Ага вот просто в начале мы говорили что нельзя чтобы видели наши тестовые значения А здесь получается правильно пони че будет постоянно мешаться с треми значениями правильно Да нет но модель всё время заново обучается То есть она

мешаться с треми значениями правильно Да нет но модель всё время заново обучается То есть она предыдущих результатов не знает то есть это пять параллельных вселенных Представила А да то есть это как бы это бы всё равно чтобы Например я делала свою работу Там Бул делал свою работу Костя свою работу и мы друг другу не показывали Ага я поняла а потом типа результаты усреднять давай вопрос Да ты спросил сколько раз мы обучаемся ответили пять А почему не 20 Мы же каждый раз обучаем трейн А на тест

сколько раз мы обучаемся ответили пять А почему не 20 Мы же каждый раз обучаем трейн А на тест водием Ну да Ну тут ТН имеется в виду что как бы вот это всё ТН Ну это это четыре разных куска наше объединяются они образуют одну тренировочную выбо понял то есть грубо говоря в моём случае примеры с вами у меня всегда Эмен выборки на обучение и на валидация на обучение всё время разные два на валидации Тем самым я как раз пытаюсь нивелировать вот эту проблему неудачного или наоборот сверх Удачного

Тем самым я как раз пытаюсь нивелировать вот эту проблему неудачного или наоборот сверх Удачного ложно разделение те Сплит вот поэтому самих процессов обучения это их ровно пять Вот он раз вот он два вот он три вот он Ну понятно Вот он п а здесь просто усреднять результат пять пять обучений пять эси один средний Ну сейчас Увидим что получится голубая вопрос отпал да Угу давай вроде бы отпал но всё равно появился но этот вот разделение можно идейно делать Больше чем пять сколько хотим да По идее

равно появился но этот вот разделение можно идейно делать Больше чем пять сколько хотим да По идее Да да да то есть я могу здесь подать Ну обычно как бы ты рассуждаешь если тебе нужно 20% ты ставишь 5п кто кому 25% можно поставить че можно поставить пять Главное чтобы валидация выборка не была слишком маленькая понимаешь просто если валидировать на одном элементе Ну так себе история согласен Угу Понял Вот и собственно говоря сам запуск рос валидации есть в библиотеке СР в библиотеке Cross вы

Понял Вот и собственно говоря сам запуск рос валидации есть в библиотеке СР в библиотеке Cross вы сюда пода свой пайплайн причём целиковый и Обратите внимание Я не делил на трейли Я даю XY он сам будет разбивать Ну и указываю прави По какому правилу вот это вот разделять ВС просто сюда этот экземпляр класса подаю и всё он считает вот Обратите внимание Ну тут видите всё-таки есть какой-то разброс Да 79 и8 83 то есть 4% не так мало АС полу теоретически да Видите где-то было 76 а где-то 84 10

Да 79 и8 83 то есть 4% не так мало АС полу теоретически да Видите где-то было 76 а где-то 84 10 сплитов Теперь у меня элемента выборки на валидации ещё меньше маленькая выборка большие дисперсии пошёл разброс кто-то сидит у него точно 76 на дизморали кто-то кайфует 85 Что за пушку Он создал по факту Хотя одно и тоже полностью происходит но 10% точно да са Да вот вопрос про выбор количества фол дов Угу где-то читал статью на каком-то ресурсе что можно выбирать количество фол дов равное элементам

Угу где-то читал статью на каком-то ресурсе что можно выбирать количество фол дов равное элементам выборки Ну давай попробуем я так не делал честно тебе скажу давайте просто средние сравним десятью и со всеми Ну это будет не совсем объективно сравнивать мне просто интересно не Погоди это же называется по-другому а ну я понял чем это закончится у нас всё время если мы делаем количество фов сколько элементо выборки у нас всё время один элемент выборки на валидации и у нас на каждом на каждом фол

элементо выборки у нас всё время один элемент выборки на валидации и у нас на каждом на каждом фол Ну точнее на каждом запуске будет точность либо один либо ноль понятно И в итоге мы получим с Вами просто уре Ну условно Фит на всех данных Да но обучение видите Какое долгое вот в чём проблема кстати ещё надо этот момент подчеркнуть теперь мне приходится обучать 900 раз модель если одно обучение 2 часа Вот полжизни закладывать на на эту идею Я как раз вчера прочла что это типа называется One Out

часа Вот полжизни закладывать на на эту идею Я как раз вчера прочла что это типа называется One Out Cross validation то есть есть а то что по сл сущест Но я это никогда не использую и типа пишут что когда дата большой то использую А когда он маленький то использовали типа такой получается так получается так Ну 82 точность нормальная Так а мы с вами смотрели на пяти фалда получили точность Ну конечно вот эта точность менее объективная на самом деле чуть-чуть нас побросали ведь в жизни-то время

вот эта точность менее объективная на самом деле чуть-чуть нас побросали ведь в жизни-то время самый ценный ресурс правильно А не 7 я так считаю поэтому то что сработало быстро это хорошо на самом деле в практических историях многие Ну очень много что упирается не только в точность но ещё и в скорость скорость поэтому как бы нейроны сети это не ещё долго не будет какой-то панацее потому что Попробуйте развернуть большие модели они столько ресурсов требуют чтобы мне просто предсказать не знаю

развернуть большие модели они столько ресурсов требуют чтобы мне просто предсказать не знаю купит у меня шоколадку человек или не купит шоколадку Для этого мне как бы разворачивать ЛМ брать 10 человек покупать железо чтобы предсказывать на 2% точнее и на 10 шоколадок в месяц больше продавать Возможно не стоит Да игра свеч поэтому и линейной регрессии там Хватит так что вот такая вот мысль очень простая Но где-то конечно нужны будут большие языковые модели Ну может быть самый важный хороший день

Но где-то конечно нужны будут большие языковые модели Ну может быть самый важный хороший день просто хороший день большой тут ВС важно лю ВС важно проговори коротко и оставим я могу проговорить Если хотите Попробуйте там с помощью идея заключается в чём идея заключается в том что Вот выборку валидации которую ты получил условно Да ты её бусте помните мы буп делали В прямом смысле как вот мы проходили когда проверяли гипотезы считаешь статистику У тебя где-то она будет 75 где-то 85 и вот прыгать

когда проверяли гипотезы считаешь статистику У тебя где-то она будет 75 где-то 85 и вот прыгать и ты строишь 95% доверительный интервал и ты можешь получить доверительный интервал Где находится типа реальная оценка а твоего алгоритма Вот но сразу скажу на больших выборках этим Почти никто не занимается потому что дисперсии становятся маленькие и всё А вот кто занимается малыми выборками небольшими вот там по-хорошему это надо сделать потому что там разброс больно большой а если у вас выборка

вот там по-хорошему это надо сделать потому что там разброс больно большой а если у вас выборка десяти Миллионная там что за эти соты это бодаться бустра бутстрап тоже вообще долго это же надо выборки размножать это же всё ну обучать тут ладно не надо но размножать выборки тоже время Вот такая вот такие пироги в принципе на сегодня всё атю мы будем разбирать с вами завтра Ну Продолжать этот файл короче Продолжать этот файл Если какие-то есть вопросы задавайте я пока задание открою ваше

файл короче Продолжать этот файл Если какие-то есть вопросы задавайте я пока задание открою ваше сегодняшнее так задание у вас будет следующим у вас будет датасет пациентов медицинских пациентов собранная выборка история В чём мы хотим как бы нормально диагностировать диагностировать есть у человека проблема серм или нет Да чтобы врач просто собрал эти симптомы или пациент заполнил карточку мы уже бы имели какую-то предиктивная практика вообще знаете с чем ты работаешь это будет вашими фичами и

бы имели какую-то предиктивная практика вообще знаете с чем ты работаешь это будет вашими фичами и задача классификации у нас будет неделя классификация пона проект регрессионный будет у вас будет задача классификации соответственно есть проблемы или их нет здесь я рекомен ите не закапывай это часто заканчивается очень плохо когда кажется что я придумал Ну просто фантастическую идею сейчас это сюда это туда здесь заполняют так так так точность хуже чем классический жанр поэтому практика лучше

это туда здесь заполняют так так так точность хуже чем классический жанр поэтому практика лучше другая вы сначала Заполните базово постройте самый простой пайплайн если заполнение пропусков Заполните средними модами меми максимальными минимальными как считаете про идеями там без увлечения дикого скейлеры энкодеры самая простая Верхне уровневая экспертиза заполнили самые простые модели всё у вас есть холодный старт вы его решили А дальше уже пайплайн собран и вы уже как художник можете

у вас есть холодный старт вы его решили А дальше уже пайплайн собран и вы уже как художник можете поправлять думать улучшать рисовать какие-то графики дополнительные или что-то ещё но у вас уже как бы есть каркас который вы будете поправлять поэтому я бы советовал делать так вот э ну как бы ИМП да потом энкодинг скейлинг всё в общем вот это вот здесь прописано докумен ссылки на документации я все скинул вот здесь вот советую использовать Ну попробовать использовать мы завтра поговорим про

я все скинул вот здесь вот советую использовать Ну попробовать использовать мы завтра поговорим про модель куда он вшит но он как бы Спасибо Яндекс сделан Отдельно ещё это как Таргет энкодер только умный вот советую почитать тоже посмотреть в общем скеле мы с вами провали их на неделе прошлой тоже ЕС вни освежите Ну и модели которые вам нужно запустить Вам нужно будет запустить логистическую модель логистику логистическую регрессию Да логистическую регрессию с регуляризация l12 Далее вам нужно

логистику логистическую регрессию Да логистическую регрессию с регуляризация l12 Далее вам нужно запустить и запустить decision 3 метод Метод опорных векторов здесь я ещё не указал метод опорных векторов тоже можете запу запу ВТО есть один Сплит Вы получили какой-то результат а потом в идеале Конечно я бы хотел получить результа после результат у вас после Крос валидации Вот такая табличка в которой мы посмотрим у кого Что получилось Какой итоговой точность Да после не просто валидации скор а

мы посмотрим у кого Что получилось Какой итоговой точность Да после не просто валидации скор а Крос валидация из моделей как-то Так вопросы круто есть вопросы а мы можем в кросс валидацию засунуть потом все модели сразу Или это нужно делать на уровне каждой модели отдельно отдельно каждый Ну ты можешь через цикл фо прописать тут всего Там пять итераций будет ну н да Угу как бы именно из калёнов ского готового Нет ты просто сам через р сделаешь то есть просто модели перечислил классы пони трие

ского готового Нет ты просто сам через р сделаешь то есть просто модели перечислил классы пони трие цепляешь пайплайн пайплайн Закидываешь Крос валидацию Всё тогда так или погодите что я ещё хотел я ещё хотел кое-что вам сказать сейчас я открою UB так так так третья неделя у нас пошла с вами Вот здесь здесь слайды лекции Понятно примера кода - это то что мы с вами Разбираем здесь ваше задание и вот ещ есть визуализация работы моделе она на зада регрессия здесь приведена хочет взглянуть как

и вот ещ есть визуализация работы моделе она на зада регрессия здесь приведена хочет взглянуть как получается это вот датасет который у вас был когда вы писали класс линейной регрессии помните четвер прошлой недели Посмотрите здесь что к чему здесь я так немножко описал происходящее тут конечно я правда регрессию свёл к задаче классификации просто оценивал и данных мало оценивал просто больше 50 сся квартира стоит или меньше Но сам факт к чему я веду Здесь вы можете взглянуть как разные моделит

квартира стоит или меньше Но сам факт к чему я веду Здесь вы можете взглянуть как разные моделит разделяющей поверхности например вот как у кна появляется Да вот как радиус neigh вот как Логистическая регрессия строит разделяющую поверхность и какие точности соответственно у них выходят вот как метод опорных векторов в линейном случае в нелинейном случае вот как дерево Решение вот знакомый нам почерк Да рубить Вот это сегодня то что мы с вами на лекции чертили общем если вот хотите взглянуть к

Да рубить Вот это сегодня то что мы с вами на лекции чертили общем если вот хотите взглянуть к чему може об муфа есть ансамбли Ну ансамбли - Это вопрос завтрашнего дня завтрашнего дня Так что вот ещё в распоряжении у вас имеется такой файл вопросы ко мне ещё тогда всё Давайте продуктивного дня сегодня лекция плотненько так что отдохнуть Не забудьте но и не переусердствовать не надо делать всё Давайте на связи Давайте хорошего дня спасибо Анн

Серёг Ну что ты вчера победил 088 я сделал перебор случайного параметра и добился 09 на кросс валидации но у меня комп считал это минут 40 наверно кото формально выполнил кстати пока Антон подходит э Я так понимаю его сейчас Сейчас вижу Не вижу Не вижу ещё я тут а ту пришёл Короче у меня сегодня встреча с выпускницей ДС в Белграде буду её спрашивать по поводу интервью она мне уже прислала материалов по поводу Ну выгрыз из реальных интервью вопросов понятно что их много в Интернете Но мне кажется

по поводу Ну выгрыз из реальных интервью вопросов понятно что их много в Интернете Но мне кажется ценность здесь в том что это из реальных интервью её и её знакомых вот поэтому если что могу потом рассказать вообще возникла идея что мог интервью Ну все же наверное знают сущность мог интервью Ну в смысле друг друга гонять по интервью вопросам вот один гоняет другой гоняется и мучается и так оперативно и по идее можно ближе к концу друг друга гонять вот Серёга спасибо что реагируешь Потому что

и по идее можно ближе к концу друг друга гонять вот Серёга спасибо что реагируешь Потому что когда говоришь нет но реакции ты чувствуешь себя полно не буду говорить к Спасибо блин как как это вышло сейчас сечас поте какая-то анимация стоит наверное Блин я так не повторю У меня первый раз так получилось классно получилось Настя загоняй её там до потери пульса Да не это мы друг друга будем гонять до потери пульса но да переслала дофига Советов она даже сказала что про финальный проект её никто ни

потери пульса но да переслала дофига Советов она даже сказала что про финальный проект её никто ни разу не спрашивал Вот такая есть интересная информация Ну типа ни разу про него не рассказывала на интервью вот а зато аа по теории просто и больше вопросов и Я почитала их они такие типа часть мы знаем часть не очень знаем Ну или нужно как бы под другим углом посмотреть то что мы проходили Так Доброе утро всем Кого видел кого не видел Ну что будем начинать А вы проснулись уже Сенсей я не замети

утро всем Кого видел кого не видел Ну что будем начинать А вы проснулись уже Сенсей я не замети что проснулись Да в душ сходил взбодрись Всё нормально спасибо Так а ну что у нас сегодня с вами на повестке ансамбли Нея моделей вот вчера то что мы с вами проходили называется базовыми моделями сегодня собственно говоря ансамбли всё очень просто То есть сегодня мы посмотрим как разным способом можно агрегировать работу нескольких моделей одна голова хорошо а две лучше ещё много разных классных

агрегировать работу нескольких моделей одна голова хорошо а две лучше ещё много разных классных девизов подойдёт по сегодняшний день Вот так Сегодня ответим на вопрос как можно соединить несколько моделей разберём наиболее популярные варианты установим запустим самый мощный библиотеки для работы с ансамблем Итак первый способ самый простой мы посмотрим с вами четыре способа как можно соединить работу нескольких моделей первый способ самый простой и называется в ЧМ его идея в м его идея идея

работу нескольких моделей первый способ самый простой и называется в ЧМ его идея в м его идея идея вонга заключается в следующем смотрите предположим вот есть Новый объект который который идёт на предсказание Да Модели там уже предположим обуче у нас с вами могут быть четыре модели вот здесь у меня классификация задач Ну значит классификация Логистическая регрессия какая-нибудь [музыка] 3 Вот они все четыре дают какое-то предсказание вот в данном случае три модели отнесли объект к одному классу

все четыре дают какое-то предсказание вот в данном случае три модели отнесли объект к одному классу одна модель отнесла объект к другому классу собственно говоря всё это дело как бы скажем так ну в принципе кого больше тому классу общий предикт будет вот на самом деле это всё на уровне усреднения приходит Да но нам привычнее видеть не 1 2 А Давайте пусть будет 0 10 вот если вот такие классы то усредни 0 мы получаем с вами что 0,25 Вот то есть у меня вот здесь на выходе будет 025 Дик пробили

усредни 0 мы получаем с вами что 0,25 Вот то есть у меня вот здесь на выходе будет 025 Дик пробили Когда вы пропишите будет 0,25 А дальше эти 0,25 уже округлять в нужную сторону там в сторону нуля всё ну самая тривиальная идея Да это просто как бы получить предсказание нескольких моделей их усреднить вот есть какие-то вопросы здесь думаю всё предельно ясно [музыка] Давай давай давай вопрос вопрос не у меня нет вопроса оговорился извини извини ну рги казахи да одной крови это понятно смотрю на

не у меня нет вопроса оговорился извини извини ну рги казахи да одной крови это понятно смотрю на одного а говорю Анри прося е Вот Учите смотрите готе кастомизировать весы каждого голоса то есть вот он важнее он начто моя следующая мысль Хороший вопрос В данном случае мы работаем на уровне округление то есть мы уже любой Вот это же тоже классификатор Да каждый классификатор даёт непосредственно предсказание а знат он тоже имеет вероятност предсказание и вотт в данном случае а может быть

предсказание а знат он тоже имеет вероятност предсказание и вотт в данном случае а может быть смотрите может быть Вот у этого этот Давайте на уровне вероятности возм 051 не знаю 052 здесь 099 И здесь тоже 051 А почему написать 049 точнее Вот так 049 9 Здоров собственно говоря взять вот эти три вот эти взять вот эти три и если их округлить они все дают ноль и тогда ноль перетянет Да но вот На таком уровне на уровне вероятностном если вы вот 049 049 049 099 возьмёте то вот этот один объект

таком уровне на уровне вероятностном если вы вот 049 049 049 099 возьмёте то вот этот один объект перетянет на себя Потому что он очень уверенно считает единицу собственно говоря то что вот Бул сказал Да это Hard voting и Soft Вонг а называется Да Hard voting - это когда мы уже округлённое из базовых моделей а Soft voting или мягкое голосование когда мы принимаем именно вероятность это гипер параметр алгоритма вы его можете выставлять и всё будет просто так собственно говоря Он точно также есть

алгоритма вы его можете выставлять и всё будет просто так собственно говоря Он точно также есть в библиотеке Как так и ничего нового просто здесь эсти мато поёте сюда прям Ну тут всё написано мы с вами ещё посмотрим в коде как это подаётся Да сюда просто по список моделей которые будут как бы базовыми моделями да потом собственно кото проговорили и ещё кстати возможно в другом у вот сечас я считал среднее по чем А могу считать средневзвешенное да сказать что вот как бы логистической грессии

среднее по чем А могу считать средневзвешенное да сказать что вот как бы логистической грессии доверия больше Ну тогда бы было бы собственно говоря е вес 05 а оставшийся 05 Я бы разделил бы на троих то есть этому дал вес 02 этому ещ 20% этому 10% то есть быть Вот так это хороший вопрос тоже гиме мы Се сегодня с вами будем сталкиваться вам в принципе в него лезть не нужно но хорошая такая мысль вот смотрите этот алгоритм у нас с вами целиком обучение он работает последовательно или параллельно

смотрите этот алгоритм у нас с вами целиком обучение он работает последовательно или параллельно Как вы думаете параллельно параллельно параллельно картинки параллельные во всяком случае А ну говорю ну на картинке параллельно Да Ну То есть в принципе чтобы Логистическая регрессия обучиться давать предсказания е неважно что происходит у decision 3 правильно в обучении чего-то большого параллельность это всегда хорошо потому что ну как бы понимаете да если мы я два дела параллельно сделаю или

это всегда хорошо потому что ну как бы понимаете да если мы я два дела параллельно сделаю или одно последовательно второе последовательно в плане скорости я буду как бы в первом случае быстрее вот этот параметр можно часто увидеть в слр это как раз таки гипер параметр который уже Коннект ваш ш код с железом грубо говоря и насколько говорит распалить можно есть можеть ско потоков пот Всё зависит от процессора который у вас есть А лучше вообще не трогайте он сам возьмёт столько сколько у него

от процессора который у вас есть А лучше вообще не трогайте он сам возьмёт столько сколько у него есть Ну просто как бы такой индикатор Где вы видите N Job скорее всего работа алгоритма идёт параллельно Если вдруг забыли Вот ещё параметр verb если вам нужно выводить в чат Ну не в чат в консоль Да Точнее ну в принто зону вот эту выводить то что происходит там можете как бы по умолчанию она выключено чтобы не спамить вас Ну если хотите посмотреть что происходит можете поставить Л всё равно Т вот

чтобы не спамить вас Ну если хотите посмотреть что происходит можете поставить Л всё равно Т вот в принципе как-то так Антон можно уточнить вопросик вот значит мы вот вот эта вот штука которую сейчас мы Разбираем vo classifier Что она делает она решает Какую модель лучше использовать Да потому что допустим в наших заданиях написано у меня всегда Вот был вопрос Используйте линейную регрессию То есть это вы как бы знаете что но я получила например значени и я не знаю какую модель мне лучше по ним

это вы как бы знаете что но я получила например значени и я не знаю какую модель мне лучше по ним использовать Я же их как бы ну не знаю линейно там регрессия Или например конн и я так понимаю сейчас что Вот именно вот это голосование помогает определить каким путём идти правильно Нет нет нет голосование просто позволяет агрегировать работу то что ты ранее говоришь Используйте такую модель используете такую модель Ну как бы мы с вами будем проговаривать у каждой модели есть свои плюсы и минусы

такую модель Ну как бы мы с вами будем проговаривать у каждой модели есть свои плюсы и минусы То есть тут нет как бы едино правильного Да какую модель использовать одни быстрые но не точные другие точнее одни быстрые Но неточные другие медленные но точные есть ещ третья плоскость по которой можно измерять вот когда мы всеми моделями обм Я немножко на это время посвящу здесь здесь типа не в контексте как все модели перепробовать В каком-то смысле это так но скорее мы нацелены на то что просто

как все модели перепробовать В каком-то смысле это так но скорее мы нацелены на то что просто увеличить точность за счёт того что одна голова хорошо много лучше а мы подключаем Да несколько [музыка] получа сами это собрать есть такой метод Union там то есть вотт Да есть ещё Union который позволяет как бы объединить четыре поставить рядом то есть Class пря увидите в коде сегодня это в принципе знакомы вам пайла просто четыре модели параллельно на обучение и всё потом средни так Ну вот тут ладно

вам пайла просто четыре модели параллельно на обучение и всё потом средни так Ну вот тут ладно картинка у меня с классификацией А если бы была регрессия что делать задача регрессии четыре объекта дали предсказание что с ними делать а у средня Да тоже самое четыре объекта один говорит что надо квартиру продавать за 20 руб один за 25 один за 30 один за 35 мы всё это дело [музыка] усреднять с вами бегин называется но для этого нам надо с вами вспомнить что такое bootstrap помните что такое

вами бегин называется но для этого нам надо с вами вспомнить что такое bootstrap помните что такое бутстрап как он работает рь выборку перемешивает среднюю перемешки среднюю и так до потери пульса чтобы прийти к теории Как называется боль сре чисел называ ре Даши Ну что если я у меня есть болье количество выборок больше минимум их сред и там уже мы можем делать решение то есть Можем Ну это в принципе не обязательно же со средними связано то есть я могу и другое считать то есть сама идея

в принципе не обязательно же со средними связано то есть я могу и другое считать то есть сама идея заключается не в том что как ты говоришь достаём среднее мы достаём элементы и считаем по ним что-то понял Угу то есть вот смотрите вот у меня есть выборка это ваш датасет и мы как бы идея бутстрап ещё раз да напомню вам со статистики идея бустра заключается в том что это Аля маленький прототип генеральной совокупности но мы так считаем и мы будем отсюда вытаскивать выборки выборки Какого размера

совокупности но мы так считаем и мы будем отсюда вытаскивать выборки выборки Какого размера такого же как и такого же Абсолютно верно такого же Сай N тогда у меня такой вопрос т а как я могу достать б выборок если у меня повторы Да это выборки с повторением это никогда не забывайте это всегда выборки с повторений тем самым наша идея-то в ЧМ наша идея как бы амбровая вот зде бы просто взять много разных моделей на одни и те же данные А здесь другая история мы возьмём одну и ту же модель и мы

разных моделей на одни и те же данные А здесь другая история мы возьмём одну и ту же модель и мы скажем тебе Слушай А давай мы тебе Будем подавать не все данные А всё время немножко разные и ты как бы под разным углом заточи смотреть на разные детали понятно То есть как бы в принципе в принципе модель как бы как как класс модели одна но экземпляры класса разные например как базовую модель выбрана будет Логистическая регрессия Логистическая регрессия обучится здесь другой ла Логистическая

будет Логистическая регрессия Логистическая регрессия обучится здесь другой ла Логистическая регрессия имеется в виду как экземпляры класса вот мы с вами все класс человек но мы все разные экземпляры класса Да И вот Логистическая регрессия - это класс но экземпляры класса разные то есть одного класса но как бы разные экземпляры каждый учится запоминать какие-то Свои приколы в данных Да потому что на самом деле данные у них немножко разные получать какую-то оценку Ну например ACC или в случае с

на самом деле данные у них немножко разные получать какую-то оценку Ну например ACC или в случае с дитом прави сказать просто наме либо единичку либо нолик Да так классификация А дальше по мнению большинства уже проголосовали Вот примерно так устроен пайплайн Вот сама сама процедура сама процедура называется не bootstrap bootstrap как бы используется внутри А вообще метод ансамбли называется бегин это ничего общего с сумкой Не имеет это bootstrap Арен аббревиатура и в принципе Давайте ещё раз

это ничего общего с сумкой Не имеет это bootstrap Арен аббревиатура и в принципе Давайте ещё раз небольшую историю зарисуй в котором не знаю предположим Четыре элемента выборки Четыре элемента выборки и есть какие-то признаки X1 X2 X3 X4 Ну вот так вот и есть какой-то Y тогда наш пайплайн заключается в том что сюда сюда могли уйти элементы выборки например 2 2 4 2 2 сюда могли уйти элементы выборки Давайте 1 3 3 3 сюда могли уйти элементы выборки не знаю 1 4 2 4 Ну и так далее В итоге каждом

Давайте 1 3 3 3 сюда могли уйти элементы выборки не знаю 1 4 2 4 Ну и так далее В итоге каждом обучаясь какая-то базовая модель вы её выбираете сами но чаще всего это decision 3 Поэтому я здесь его и подпишу decision 3 он обучается на каждый ИТ какой-то результат здесь собственно говоря тоже 3 мы получаем что вот здесь как бы и приходит Новый объект приходит Новый объект на предсказание Да поэтому когда Новый объект пришёл на предсказание уже у этого спросили он говорит слушайте Я считаю что

когда Новый объект пришёл на предсказание уже у этого спросили он говорит слушайте Я считаю что это первый класс у этого спросили Я тоже рея считаю что это первый клас говон [музыка] ему как бы акцент на нулевое это тоже предположим считает нулевое Ну или Давайте первое всё по мнению большинства будет отнесено к первому классу будет отнесено к первому классу и логика ещё раз в чём смотрите нежели нам запускать decision 3 на один датасет мы попробуем размножить этот датасет вот так вот

нежели нам запускать decision 3 на один датасет мы попробуем размножить этот датасет вот так вот синтетически буквально из воздуха Да но при этом обучить не один раз а 100 200 вы сами это гипер параметр вы сами можете выбрать сколько вам нужно этих Ну и собственно говоря как бы эмпирический путь доказал что это очень хорошая идея Она появилась в конце X века и она себя проявила очень хорошо помогла бороться с переобучения Потому что одно дерево Тупенькая переобуться но в целом ансамбль уже не

бороться с переобучения Потому что одно дерево Тупенькая переобуться но в целом ансамбль уже не такой вроде тупенький и собственно говоря точность просто стала лучше потому что кто-то смотрит на де кто-то смотрит нагие де старше по Третьему элементу Да и по тому кто кто близок к этому она вот вот эти нюансы знает другие не знают но так устроено как бы вообще просто вероятность в жизни что вот если мы случайно так распределим если одно дерево о чём-то не знает вероятность того что 99 остальные

мы случайно так распределим если одно дерево о чём-то не знает вероятность того что 99 остальные знают будет большая Ну или большинство будет знать а мы же голосуем то в ито по большинству Вот это хороший как бы жизненный Прим влом пя человек Если двое не знают что-то трое могут знать тогда мы как бы мы на плаву получается Если большинство знает Мы правильно предсказали а то что кто-то промахнулся ну завтра они попадут это нормальная история вот как-то так даб А мы можем поиграться с моделями

ну завтра они попадут это нормальная история вот как-то так даб А мы можем поиграться с моделями там там L там knn да Сейчас я покажу это а всё собственно говоря да Давайте посмотрим называется Давайте кем С вами в этот квали случа с регрессом та же самая история То есть все предсказания просто будут уединяться вот сюда вы податей видите по умолчанию по умолчанию стоит decision 3 регрессор по умолчанию но вы можете подать сво ты его пода Да сечас секунду вот это сколько Вот таких вот выборок

но вы можете подать сво ты его пода Да сечас секунду вот это сколько Вот таких вот выборок делать сколько таких выборок делать потому что одна это один Эр одна обученная модель далее пошли эти сечас е кстати один важный акцент скажу потом короче с этой идее продвинулись до е и по столбц потому что мы хотим типа сделать максимально непохожие датасеты друг на друга и предположим сюда выпали не знаю уникальные фичи X12 вот этому дереву x13 вот этому x34 и как вы понимаете каждое дерево учится

знаю уникальные фичи X12 вот этому дереву x13 вот этому x34 и как вы понимаете каждое дерево учится максимально на непохожих данных ну насколько мы можем из этого выжить тем самым имеет максимально своё мнение и свои нюансы Это потре ко ви подаются но вы можете выбирать этот параметр вот это вот это собственно говоря по Чам Да тоже но его меняют правило вот Вот такая история мо вопрос был другой я хотел А могу ли я вот Первую выборку вторую [музыка] это называется уже чем-то другим дела Я не

я хотел А могу ли я вот Первую выборку вторую [музыка] это называется уже чем-то другим дела Я не видел таких решений сама идея гинга сама идея гинга заключается в том чтобы сама идея гинга заключается в том чтобы глаза бы вот плюс какой Как вы думаете параллельный этот метод или последовательный паль Да Абсолютно верно параллельный это на самом деле очень важно то есть это считает это когда мы с вами будем запускать на выборке 1000 элементов вы не будете замечать разницы Но если бы это было

с вами будем запускать на выборке 1000 элементов вы не будете замечать разницы Но если бы это было запущено на двух миллионной выборке вы бы огого как ощутили разницу уже параллельно как доминировала бы на последовательном а точность иногда разница Ну вообще типа копьё полно так вот Вот этот бегин как бы всё интересно всё классно но особенно закрепился Так как показывал просто наилучшую точность как и всё построен на деревьях решений бегин когда экземпляром класса когда экземпляром класса М

как и всё построен на деревьях решений бегин когда экземпляром класса когда экземпляром класса М базовой модели являлся decis 3 regressor и собственно говоря этот алгоритм даже вынесли отдельно и он получил название которое достаточно громкое в анализе данных Random Forest classifier типа Случайный лес Случайный он случайно он потому что там бустра выборки Да лес он потому что там на каждой это выбо обучается дерево решений Вот так и появился for достаточно популярный Ну и в целом неплохой

выбо обучается дерево решений Вот так и появился for достаточно популярный Ну и в целом неплохой алгоритм даже сейчас как бы немножко уступает некоторым который там мы дальше с вами проговори но он параллельный это его большой плюс да типа 100 деревьев критерий Вот это всё пошло настройки одного дерева одной базовой модели Да которая будет работать с каждой выборо это мы всё вчера с вами проговаривать А вот это уже пошла настройка Вот это пошла настройка у нас с вами Ma Ma fees это настройка

А вот это уже пошла настройка Вот это пошла настройка у нас с вами Ma Ma fees это настройка пошла типа сколько фичей взять в каждую бустра выборку по умолчанию корень квадратный стоит это уже пошла настройка самого ансамбля Да самого ансамбля вот тоже бутстрап Ну короче считыватели что здесь есть Да Кость я что-то кажется прозевал на секунду Random Forest - это частный случай с деревьями решений гинга да м Forest частный случай гинга но он просто вынесен в отдельный класс Потому что тут удобно

гинга да м Forest частный случай гинга но он просто вынесен в отдельный класс Потому что тут удобно код под него сделали бегин А Random Forest ещё конкретно под себя типа видишь все параметры самого дерева настройки включены глубина критерии и так далее просто Бен как бы ну факту отождествляют многие сфм потому что ВС остальное внг почти не используется как-то так то есть сама идея сама идеям называется а главный представите Да по поводу когда-то обсуждали но просто чтобы уже фна зафиксировать

а главный представите Да по поводу когда-то обсуждали но просто чтобы уже фна зафиксировать не результа или какой-то другой те Вы мне уже должны отвечать когда мы регрессор используем Ну ты сама сказала регрессор задача регресси когда задача классификации В смысле на более простом уровне типа когда результа вопрос надо знать разницу регрессии классификации кивать помните ЕС вы надо Говори Ласи бы э классификация классов несколько значений рети таргета Ресо непрерыв те не нравится что ли

Ласи бы э классификация классов несколько значений рети таргета Ресо непрерыв те не нравится что ли нормально слово линейность както [музыка] предсказ что непрерывную шкалу там бесконечное число значений может быть на предсказани классификация - это дискретно конечное число точек два кла классификация может быть 3 4 5 классов вот кошка собака у меня не может получиться полторы кошки или 075 собаки Вот я говорю либо кошка либо собака Да А когда предсказываем не знаю предсказываем время доставки

Вот я говорю либо кошка либо собака Да А когда предсказываем не знаю предсказываем время доставки курьера в минутах Ну там даже не минутах если е более детально Ути в секундах то я понимаю риан бесконечное ло это задача регресси Короче я просто свела что это единственная разница единстве самая важная раз То есть вам сегодня Фае понадобится Вы цибо должно отскакивает вопро продолжать не будут Ну могут сделать Для галочки вид но уже сомнения будут к вам очень серьёзные Так что это вот на Собес

могут сделать Для галочки вид но уже сомнения будут к вам очень серьёзные Так что это вот на Собес будут отва Лаки собеседуем в ваших знаниях Да так Ух ты что-то не добавили этого не видел с недавно Обновили пому верси вы вот сам первый раз вижу какие-то функции строить прикол прикол а это сегодня одли Пока ты спал Нет ну я же знаю так в общем понгу вопросов не осталось Да разобрались с вами Отлично Так ну тут вот да случайная Случайный лес все дела Это проговорили только что следующая

Отлично Так ну тут вот да случайная Случайный лес все дела Это проговорили только что следующая следующая модель - это у нас стекинг стекинг стекинг стекинг Что скажешь про стекинг третье принцип ацилирования давайте для стейкинга Блин я для стейкинга мне надо порисовать так-то сейчас я дате Ещё сделаю сек открою новый лист так получается агрегация моделей комбо из моделей это про что конкретно про стекинг это комбо из моделей стекинг - это ещё один одна из разновидности того как можно

про стекинг это комбо из моделей стекинг - это ещё один одна из разновидности того как можно соединить работу нескольких моделей Да всё правильно то есть мы сегодня наша главная тема - это ансамблевые модели то есть которые соединяют работу базовых моделей которые мы разбирали вче вот так стекинг стекинг стекинг смотрите Давайте немножко Как сказать аллегория порассуждаем и поймём Что к чему здесь приходит вот у нас будет датасет с вами нам дали датасет мы с вами будем команда аналитиков я

здесь приходит вот у нас будет датасет с вами нам дали датасет мы с вами будем команда аналитиков я предположим буду её руководителем вы будете в штате нам с вами дали какое-то задание поставили нужно что-то сделать у меня пусть будет в распоряжении 100 элемента выборки 100 элемента выборки какие-то признаки неважно Какие совершенно Ну есть Таргет есть Таргет Y Ну давайте для простоты классификацию возьму вот этот обк единичка вот этот нолик там вот этот тоже едино нолик Ну короче вот какой-то

возьму вот этот обк единичка вот этот нолик там вот этот тоже едино нолик Ну короче вот какой-то датасет у нас есть смотрите собственно говоря Ну задачу ставить через через меня я предположим начинаю рассуждать как бы мне работу вашу агрегировать интересным образом вы все шарите за но у вас у всех В каком-то смысле у вас у всех В каком-то смысле свой подход свой подход к данным и как как можно по факту арет и приводит е в мысль вот заключается на в следующем смотрите мы с вами разделим не на

по факту арет и приводит е в мысль вот заключается на в следующем смотрите мы с вами разделим не на две выборки как мы делили мы разделим на три выборки мы разделим с вами на выборку о Пусть это будет вплоть до шего элемента Вот это всё я назову как 1 да пря здесь пошу далее я И теперь у меня будет кусочек пер поми и по Вчера мы делили на две выборки здесь стекинг единственно исключение у него будет два две итерации обучения две итерации обучения и также одна валидация так вот в чём логика

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

разная модель поняли да то есть ассоциацию какие-то там Логистическая регрессия и что-то е это сами указываете Ну например также Давайте возм буду так пить обучила и например decision 3 Вот они обучили и потом я прошу собственно говоря Вот это предсказать вот эту выборку предсказать для 2 я вам и не даю всем вот этим моделям Да я гою ребят Вот есть данные для них нужно приме Следующая история 2 интересная выборка 2 это моя выборка обучения за этот этап обучения я должен научиться прислушиваться

выборка 2 это моя выборка обучения за этот этап обучения я должен научиться прислушиваться к вам кто хорош в этом месте кто хорош в этом месте с такими данными Одни говорят одно другие другое Какое окончательное решение принять Ну В каком смысле прям реально вот есть руководитель есть команда дадите комато Вот вот здесь будет обучаться Сейчас вы увидите метамодель так называемая метамодель или итоговая модель как бы или Аля руководитель вот этой системы так вот Мета модели ей вообще даже вот

итоговая модель как бы или Аля руководитель вот этой системы так вот Мета модели ей вообще даже вот эти признаки не нужно знать погружаться в этот нюанс ей нужен только вот результат ваших предсказаний и это выглядеть Всё может примерно следующим образом в итоге получается что вот здесь предсказание вот здесь предсказание и вот зде предсказание decision 3 и вот здесь реальный Y напоминаю это всё происходит на объектах выборки с шестьдесят первого по восьмидесятый вы дали предсказание Ну

всё происходит на объектах выборки с шестьдесят первого по восьмидесятый вы дали предсказание Ну например на шестьдесят первом объекте предсказание я беру на уровне вероятностей г говорит что ребят похоже класс О похоже класс о здесь действительно был класс о н говорит Нет я считаю класс 0 3 тоже почему-то считает что это класс 0 045 бы первая права вторая не права вторая третья модели не правы вот далее собственно говоря на втором элементе Да на шестьдесят втором тоже могло быть какое-то здесь

далее собственно говоря на втором элементе Да на шестьдесят втором тоже могло быть какое-то здесь например 0,55 Здесь 0,82 Здесь 0,91 в итоге единичка Ну и так далее и так далее и так далее 0 объект тоже какой-нибудь там не знаю 017 051 034 оказалось нулевым вот выборка выборка сформирована То есть как бы теперь вот эта выборка на ней фити метамодель то есть вот здесь как бы вот эта метамодель Давайте ещё раз подпишу Вот здесь метамодель метамодель она как бы получает Фит на Вот это история в

ещё раз подпишу Вот здесь метамодель метамодель она как бы получает Фит на Вот это история в роли Мета модели Вы можете взять что угодно логистическую регрессию Random Forest или что-то ещё но она учится на Других данных она как бы по факту берёт те же самые элементы выборки но она берёт незнания об элементах выборки Ну например в случае с вашим датасеты сердцем я не беру медицинские показатели я беру ваши предсказания об этом объекте Да например Костина модель считает так-то Настина считает

я беру ваши предсказания об этом объекте Да например Костина модель считает так-то Настина считает так-то серёжина так-то у Була так-то у Оли так-то я всё это выстроил Это вы стали моими фичами а на самом деле было так и когда у меня появляется это луре вот так работает кин рере есть его секунду его см образом приходит его его приходит объект на вход сначала его встречают базовые модели какие-то типа все отдают предсказание это предсказание идёт в метамодель да то есть если вот это вот как бы

типа все отдают предсказание это предсказание идёт в метамодель да то есть если вот это вот как бы первая модель это вторая это вот эта третья модель то они В каком-то смысле возвращают три вероятности P1 P2 P3 здесь их ждёт уже какая-то метамодель Да тут т Base здесь Мета Мета или главная модель Ну предположим она у нас с вами была Random Forest почему бы нет напишу так так Соу просто Forest И всё И выпл итоговую вероятно всё на выходе получился у нас X мы на вход получаем вероятность Вот

И всё И выпл итоговую вероятно всё на выходе получился у нас X мы на вход получаем вероятность Вот прогоняем все вот эти элементы выборки через этот пап и считаем нашу точность метрики получаем Вот такой результат Всё Давайте по вопросам [музыка] порядку каж итом строит свою функцию Ну свою формулу и на ней на ней решает Ну кто кто кто кто важнее кто не важнее Люба написал то что она весы даёт Ну она как бы весы Всё зависит от того какую вы модель используете вот Random Forest деревянная модель

она как бы весы Всё зависит от того какую вы модель используете вот Random Forest деревянная модель у неё есть фи impot который мы вчера выводили F impot Да если грек кажется самый важной Ну значит значит как бы самое важное А я могу свою мето модели создать конечно ну выставляешь меня выставляю можешь написать че пят у писал свой искусственный интеллект написать всё что угодно и вставить в па причём как бы очень дружит с внешними вставками те там нужно просто твой класс унаследовать будет от

как бы очень дружит с внешними вставками те там нужно просто твой класс унаследовать будет от двух которые как бы базовые и ты можешь воткнуть всё что угодно Я на пер мопи любовь сть любо Всё я думал будет какой-нибудь что-нибудь такое любов зафиксировали Ну тжм любов фа Да значит ближайшие релизы круто круто Костя то есть мы учимся на Трей 1 трейн 2 потом опять же через трансформатор мы делаем Ну типа пайплайн из этих двух моделей подряд и уже часть данных Т мы гоним в эту модель Ну вот это

Ну типа пайплайн из этих двух моделей подряд и уже часть данных Т мы гоним в эту модель Ну вот это как бы останется немного Вот это всё называется Кин то есть Воспринимает как единую модель Угу то есть в каком-то смысле ничего не поменялось есть вход модели есть выход правильно И этот выход Я могу как на тренировочных данных так и на Валида оценить вот как-то так поэтому всё в принципе тоже самое просто вот эти настройки Да надо будет выставить Они обязательны что являются базовый моделям что

просто вот эти настройки Да надо будет выставить Они обязательны что являются базовый моделям что Мета моделью Ну вообще выглядит очень наверное это очень затратная процедура да Ну да да Сейчас я тоже это когда на все вопросы ваши отвечу поговорю я что-то не до конца понимаю вот типа когда мы уже обучили на первой тро второй Мы не видим же игрики Да мы просто получаем типа результат мы это кто ты имеешь вот в моей аллегории то что я говорил или ты как человек который как бы создаёт этот

кто ты имеешь вот в моей аллегории то что я говорил или ты как человек который как бы создаёт этот алгоритм А у нас разметка здесь есть Почему я его не вижу Вот вот вот эта разметка 1 Вот она у меня перенесена видишь сюда То есть у меня для этих элементов разметка есть Окей понял а потом типа ну вот они в столбцах и потом типа в метамодель заходит а что там внутри происходит типа он сравнивает с игрем проходит вде тоже обучается тоже фити вотт у меня жесе готов для обучения предположим

с игрем проходит вде тоже обучается тоже фити вотт у меня жесе готов для обучения предположим соответственно го вот это это там толубай вот это Костя вот Это Настя да у вас есть предсказания у каждого Ну вы как модели то меня эта модель бы обучалось слушать вас на конкретных элементах то есть кто где ошибается короче понимает природу зависимости всё и в конце он что выбирает Ну я откуда знаю то что он обучил на чём он обучился и какое решение принял надо обучить его сначала Ну как я я не знаю

что он обучил на чём он обучился и какое решение принял надо обучить его сначала Ну как я я не знаю что тебе ответить на этот вопрос Честно не знаю что он выбирает что что как бы на чём обучился что научился предсказывать то и выбирает моя модель будет выбирать Любовь тут сложность просто в том что во втором этапе вместо данных подаются вероятности типа может быть это плохо ложится Ну воспринимаете это как данные всё я говорю я проводил для себя алегория нам не помогал вот в прямом смысле есть

это как данные всё я говорю я проводил для себя алегория нам не помогал вот в прямом смысле есть команда которая какая-то работает у них какой-то не знаю брейншторм или что е им нужно принимать решение какое-то какое-то решение которое нужно отдавать далее вот есть 10 человек в команде у каждого своё мнение вот они его высказали по поводу происходящего а решение-то принимать надо правильно как бы мы здесь как бы не демократию устраиваем получается А что всё-таки есть Лидер Да который как-то

бы мы здесь как бы не демократию устраиваем получается А что всё-таки есть Лидер Да который как-то научился их США раз он понял кто кто часто был прав кто часто был не прав кто где прав Ну и в итоге как бы он получается аккумулирует работу модели именно А вот причём как бы Обратите внимание меня эта модель с данными вообще вот с фичами она не знакома ей это нафиг не надо это эквивалентно было руководителю дали задачу он её скинул на команду даже не читая её получил экспертное мнение от дети

руководителю дали задачу он её скинул на команду даже не читая её получил экспертное мнение от дети человек команды и вернул результат типа делаем не делаем предположим да всё как так да Серёжа а я в чатик написал насколько правильно такое суждение что это тот же самый тинг только не средняя решает а модель решает типа Что что В итоге да да ты прав Они очень похожи Да только Как бы единственное что у стейкинга ещё из-за этого нужно выделять кусок на конкретное отдельное обучение А так в

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

поэтому Действительно это очень похоже на стекинг потому что здесь опять же как бы идёт на уровне модели возня в отличие от гинга В итоге тоже усреднять Или он просто выбирает там для каждого кейса конкретную модель какая-то модель То есть если ты там никакого усреднения нет по факту угу Там в прямом смысле будут спрашивать А предсказание вот этой модели больше чем 0,5 или меньше Вот это меньше чем 0,3 или меньше помнишь как дерево решение мы вчера строили больше меньше вот так если ты возьмёшь

0,3 или меньше помнишь как дерево решение мы вчера строили больше меньше вот так если ты возьмёшь как базовую модель логистическую регрессию например то она предположим после обучения дала Вот этому вес 07 Вот это ве 0 вот этому 0 Теперь понятно что она слушает вот этого больше всего своего сына братишку тоже логистическую понял потому что но чувствуется коррупция лёгкая есть здесь вот как-то так Ну в этом плане Вполне себе нормально что на двух этажах Настя а до этого говорили что Random

так Ну в этом плане Вполне себе нормально что на двух этажах Настя а до этого говорили что Random Forest - это подтип гинга Да а сейчас он тут на картинке со стекинг из-за этого мозг как бы захотел Ну ну всё - это как бы отдельная модель сейчас я понял я понял твою мысль короче такое нормально что внутри ансамбля другая ансамбле модель понятно То есть как бы да можно сейчас давай сотрём пока Если это путает вот здесь стоит логистической регрессия снизу скорее за эти за 15 минут я поняла что уже

это путает вот здесь стоит логистической регрессия снизу скорее за эти за 15 минут я поняла что уже Что такое Вонг ещё понятно что такое НГ уже забылось можно прям Ну я ну надо лекцию значит будет пересматривать на это нормальная история Что за секунду не запомнилась здесь все рисуночки всё у нас есть вкратце разделяем на выборок каждые выборки максимально не похожи друг на друга в каждый запускаем decision 3 он обучается даёт предсказание не запомнилось ничего страшного как бы инф много потом

decision 3 он обучается даёт предсказание не запомнилось ничего страшного как бы инф много потом посмотрите я приговариваю всё необходимое запись остаётся с вами Да Серга Классно написал веса это веса же да по сути 07 02 0 дадада Окей и типа он там в 70% случаев будет слушать эту двадцати типа эту и так далее ну это очень условно это средневзвешенное считаете сем как бы его 100% доверия расползается вот так понял по факту Это значит что если вот этот скажет класс о то уже итоговая вероятность

вот так понял по факту Это значит что если вот этот скажет класс о то уже итоговая вероятность 0,7 он уже перетянет на себя одеяло это как знаешь как пакет контрольный пакет акций 51% вот у этого контрольный пакет акций имеется и как бы если вот это сказал что класс о значит это будет класс ове в жизни работат я не знаю типа вот вот эта шту Блин метамодель коро можно выставить чтобы он выбирал из Да да да то есть ты можешь всё это настраивать делать да скаже Антон смотри а вот на TR 1 у нас

из Да да да то есть ты можешь всё это настраивать делать да скаже Антон смотри а вот на TR 1 у нас Base Models а там мы что используем тоже те же самое kn вот эти вот эти три модели Угу то есть то же самое просто написано Всё я понял так вот объединить что это цельно Угу угу н вас выл фурор по вопросам Да явно явно Хотя самый самый неиспользуемый на самом деле из этих четы которые мы обсудим Так ну что давайте по Кингу немножко подытожим ну здесь в принципе тоже записано тоже самое что мы с

ну что давайте по Кингу немножко подытожим ну здесь в принципе тоже записано тоже самое что мы с Мири в ему нужно много данных потому что два процесса обучения да то есть нужно и Мета модели нормально выкупить закономерность нужно выкупить закономерность и тре рейном данным ой базовым моделям на Трей О В итоге есть два обучения два обучения Вот это соответственно несёт себе проблему в том что нам нужно много-много мощностей это тяжело это не всегда есть Да нужно много времени всё это обучение

нужно много-много мощностей это тяжело это не всегда есть Да нужно много времени всё это обучение но типа Зато оригинально Да красиво Вот ну как бы стекинг раньше он хотя бы знаете чем брал он был самый точный он был самый точный Но сейчас есть те кто его подвинул и как бы в принципе в оста плюс-минус как бы в остальном тоже также Работают но стекинг по крайней мере наверное Из всех трёх которые мы проговорили на больших данных как бы стекинг потенциально выше всех покажет точность из вот трёх

мы проговорили на больших данных как бы стекинг потенциально выше всех покажет точность из вот трёх моделей которые мы с вами разобрали Я очень редко слышу чтобы где-то сейчас стекинг использовался но периодически есть там у нас вот в Магните работал выпускник а выпускница девочка но это правда история уже наверное полутора летней давности где-то Вот она говорила что они на стейкинге там сидят на стейкинге сидят сидели тогда стекинг - это знаете это решение тыловых задач которые максимально к

стейкинге сидят сидели тогда стекинг - это знаете это решение тыловых задач которые максимально к Продакшен не имеют никакого отношения потому что здесь долгий дол сказание долго расчехлять всё Долго но когда никуда не спешим есть время есть много данных и просто нужен тупо результат Когда время и предположим интерпретируемый уходит на второй план Нам нужен просто выбить максимальный максимальный скор тогда стен говорит ребят Приветствую я здесь я готов помогать Вот примерно так нуно я не пром

скор тогда стен говорит ребят Приветствую я здесь я готов помогать Вот примерно так нуно я не пром голаны говорю я про девушку говорю до амгалан ещё у ам голана Спроси на чём он работает значит сейчас в Магните Вот как-то так он сейчас не то чтобы не самый лучший он сейчас я говорю самый Ну худшее понятие растяжимые он просто самый менее используемый потому что он Тяжеловес а нужны легковес как-то так как-то так Вот вот такой вот стекинг ну что ж у нас остаётся Биг Boss сегодняшняя программа

так как-то так Вот вот такой вот стекинг ну что ж у нас остаётся Биг Boss сегодняшняя программа бустинг Ну что наверное перерыв сделаем перед бустинга Да всё 11 минут в 21 тогда продолжаем и Так ну что давайте возвращаться Приятного аппетита Серёжа Спасибо так Ладненько даже не поделится с на понятно Давайте давайте продолжать у нас с вами остался один алгоритм у нас с вами остался точнее одна идея ансамбли Но объективно Это причём это объективно Это доминирующая идея ансамбли на данный момент

ансамбли Но объективно Это причём это объективно Это доминирующая идея ансамбли на данный момент и вообще ну как бы называется бустинг если вас будут спрашивать сши про либо прон что он сам по себе простой взяли моде урени мало кому нужен сейчас прям так да массово а бун ин они два конкурента друг другу Но бун конечно выигрывает эту битву это связано с большим ростом мощностей Вот Но тем не менее как ВС равно есть ситуации когда поэтому особенно те кто пойдёт в классический Да а тах так и

менее как ВС равно есть ситуации когда поэтому особенно те кто пойдёт в классический Да а тах так и связано с классическим М Вот текст к этому всё равно приходит Ну только вот компьютер немного в отдельном лагере живёт Да если вы компьютер занимаетесь может быть бун особо сильно не ну Итак В чём идея бустинга бустинг - это да Я кстати вас не спросил стекинг параллельный или последовательный алгоритм на ваш взгляд поде работат он как бы полу параллельный полу последовательный правильно Ну то

на ваш взгляд поде работат он как бы полу параллельный полу последовательный правильно Ну то есть этап последовательности тоже присутствует потому что метамодель не может обучиться пока не обучили базовой модели Поэтому если тинг параллельный бенг параллельный стекинг полу параллельный полус то бусти он полностью последовательный алгоритм это его минус автоматически становится да Потому это врем гово иде ВМ последовательно каждый следующий алгоритм исправляет суммарно ошибку предыдущих решение

гово иде ВМ последовательно каждый следующий алгоритм исправляет суммарно ошибку предыдущих решение принимаем взвешенным голосованием давайте тоже немножечко посу сейчас открою нано также [музыка] отдельно как бы чуть более дополнительно рисунки У меня есть в лекции Но мы с вами чуть глубже Чуть более глубокой история в этом ничего страшного нет он действительно не самый тривиальный не самый тривиальный поэтому Возможно вы к этому ещё вернётесь когда будете готовиться к собеса немножечко

тривиальный поэтому Возможно вы к этому ещё вернётесь когда будете готовиться к собеса немножечко освежить да чуть поглубже как бы запустить это нам не помешает больше-то это нужно будет Вот именно для теоретических столкновений чаще всего с обес вот что у нас есть у нас с вами есть датасет у нас с вами есть датасет котором предположим там 1Д блаблабла элементо выборки и сколько-то фичей ну 10 чей Не суть важно сколько есть и есть Давайте возьмём регрессию для примера тут не знаю 10 тут 8 тут

Не суть важно сколько есть и есть Давайте возьмём регрессию для примера тут не знаю 10 тут 8 тут ми4 тут 3 тут 15 наша идея заключается в следующем вообще по-хорошему правильный бустинг всегда учится на ошибки То есть у нас с вами у нас с вами я наверное сразу напишу как бы с ошибкой Какой Вот Представьте вы бы не занимались анализом данных представили чем бы вы предсказали бы каждое значение чтобы ну пытаться минимизировать промах что ли погрешно ВЛ отнял плюс ошибка сре среды больше ничего

ну пытаться минимизировать промах что ли погрешно ВЛ отнял плюс ошибка сре среды больше ничего нет ошибка пока просто предсказывают то есть по каждому значению надоть предсказание это как знаете в классе предсказывали самы частотным классом и тогда бы увеличивали вероятность Победы Да здесь средним предсказал предположим средним сре предсказал первое дерево далее Далее и вот тут вот как бы логика бунга Ну и почему-то здесь 10 а почему-то здесь во А здесь почему в другую сторону ушло и здесь в

бунга Ну и почему-то здесь 10 а почему-то здесь во А здесь почему в другую сторону ушло и здесь в другую сторону как бы причинно-следственная связь и мы подразумеваем что данные должны это объяснять так вот у нас с вами будет первая ошибка рор О я е назову пока Е1 ошибка может считаться по-разному совершенно по-разному например она может считаться как как как как что-то ещ Ну то есть ошибка понятие растяжимое Да ошибку надо оцифровать Но мы с вами возьмём возьмём например Это у нас с вами ми

растяжимое Да ошибку надо оцифровать Но мы с вами возьмём возьмём например Это у нас с вами ми предсказанное вот так подпишу и всё это в квадрате напоминаю Вот такая вот у меня усреднения здесь никакого нет вот так вот всеми нами с вами знако знакома квадратическая ошибка Вот то есть итогово получается что у меня было бы здесь 10 - 7К 3 это возводим 9 да 8 - 7 Квад 8 ми 7 1 квара это 1 остаётся здесь какое-то Дава поме сю большие это 3 3к оп токо в обратную сторону 3 ми 7 Здесь 16 здесь 64 вот

какое-то Дава поме сю большие это 3 3к оп токо в обратную сторону 3 ми 7 Здесь 16 здесь 64 вот получилась какая-то ошибка так вот здесь и начинают подъезжать ансамбль как правило бу в роли бунга тоже бусин - Это идея концепция соединения работы моделей понимаете да то есть там может быть разная базовая модель но сразу сво когда вас спросят на собе день говорят Ну примени бустинг все прекрасно понимают что будет подразумеваться бустинг в виде где базовая модель decision 3 так вот всё модель оди

что будет подразумеваться бустинг в виде где базовая модель decision 3 так вот всё модель оди она учится предсказывать Вот это соответственно у нас с вами появится появится какое-то предсказание этой ошибки согласны например Здесь здесь Ура попали здесь сожалению промахнулись Здесь чуть-чуть тоже промахнулись здесь Ну промахнулись как-то вот так получили предположим Тогда тогда я опять могу посчитать разницу Е2 Да 9 - 8к 1 здесь Но здесь 2 к 4 здесь о здесь О В итоге вот это вот это модель 2 ой

разницу Е2 Да 9 - 8к 1 здесь Но здесь 2 к 4 здесь о здесь О В итоге вот это вот это модель 2 ой точнее вот на вот этом будет учиться модель появится предсказание второй ошибки и потихоньку потихоньку мы пытаемся сделать так чтобы от ошибки ничего не осталось девиз бустинга очень простой каждое новае дерево или каждый новый алгоритм исправляет суммарную ошибку предыдущих это Представьте как вот есть грязная грязная дорога Да сначала пройдёт там не знаю комбайн уберёт всё верхнеуровнево да он

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

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

предыдущие Ну то есть не суммарно Как сказать исправляет ошибку суммарно работы предыдущих вот я вам с уборкой территории показал Да пример есть как-то так не то что пятый за четвёртым четвёртый заре Да вот такая вот идея давайте к вопросам бу А вопрос был так мы здесь модель Т делаем да мы им кормим Эти ошибки Т Е1 E2 е поставлю фразу Да чтобы все Сейчас уложили хороший подчеркнул Серёжа писал в чате проводите для себя параллель действительно тинг у нас с вами разные модели одна выборка Да там

чате проводите для себя параллель действительно тинг у нас с вами разные модели одна выборка Да там короче у каждого есть какой-то свой креда у бустинга креда в том что мы как бы у нас Дай сами данные как раз таки не меняются они всегда детерминированы в этот раз у нас меняется Таргет как бы странно не было Да у нас всё время разный Таргет мы всё время учимся предсказывать ошибку в каком-то смысле реально типа вот средняя но почему-то здесь отклонились так отклонились так так так с помощью

реально типа вот средняя но почему-то здесь отклонились так отклонились так так так с помощью данных пытаемся это объяснить и вот за шагом за шагом за шагом идём второй вопрос мо с что по данные данные сверху модель о N модель 2 N модель 3 они друг на друга накладываются и вот так высасывают изнутри Ну очень интересно и на сказание но наверное можно так сказать да спасибо большое угу так Костя каждый каждую итерацию алгоритма в ROM Forest мы подаём одну и ту же выборку это я усвоил но вместо

каждый каждую итерацию алгоритма в ROM Forest мы подаём одну и ту же выборку это я усвоил но вместо таргета сказал да for - это бегин там разные выборки на обучение буп выбо там как бы нету как такового слова итерация всё параллельно учится просто не я про сейчас говорю про это про бустинг это бустинг Да ты просто сказал ROM Forest ROM Forest Да потому что сказал что модель используется R for базово нет базово decision 3 используется ой фу всё Да я просто просто перепутал с да decision 3 мы

базово нет базово decision 3 используется ой фу всё Да я просто просто перепутал с да decision 3 мы подаём одну и ту же выборку вопросу снова но в качестве таргета каждый раз берём ошибку да да Абсолютно верно это сама идея [музыка] буси Мне тоже нравится этот в конце вот если мы берём каждый раз ошибку и в конце мы должны прийти к единицам и нулям в [музыка] столбике бы Да полностью к нулям Ну ты хочешь ошибаться Я не хочу вот ошибаться всё равно придётся конечно как бы в любом случае вот а

ты хочешь ошибаться Я не хочу вот ошибаться всё равно придётся конечно как бы в любом случае вот а пря мы придём к чистым нулям без вообще не ну чистые нули это переобучение называется в целом в целом бустинг он настолько жёсткий что он идёт я вам сейчас покажу я м сес покажу прико бу ему вобще без разни вы просто возм данные которые параллельных вселенных живут никак друг на друга не влияют Стин скажет я нашёл закономерность 100% всё точно 100% Но это переобучение называется если ты достигнешь

скажет я нашёл закономерность 100% всё точно 100% Но это переобучение называется если ты достигнешь на [музыка] валидация к этому Да мы стремимся не ошибаться то есть мы поэтому и пытаемся как бы видишь предсказывать ошибку чтобы всё меньше и меньше ошибаться понял поня а получается сказать то что здесь здесь работает такая Коди то что Е1 больше Е2 больше Е3 То есть каждый последующий е должен быть меньше предыдущего Да да да так и будет это так и будет 100% так и будет есть крышечкой Люба на

меньше предыдущего Да да да так и будет это так и будет 100% так и будет есть крышечкой Люба на твой вопрос отвечаю это предсказание то есть модель о за за Она же предсказала дикт потом на вот этой Дельте да то что было то что стало ну как бы то что не доработал модель о сюда выезжает на помощь модель 2 также Fit pred та же самая история Ну и вот третья четвёртая Пятая и все вот они по пойдут итеративный объясняешь что вот е крышечка берётся что модель зафи А что там вообще я не понимаю я с

итеративный объясняешь что вот е крышечка берётся что модель зафи А что там вообще я не понимаю я с крышечкой ВС равно то Сформулируй вопрос Ну модель обучила она может предсказывать если я обучался предсказывать ошибку значит я могу предсказать эту ошибку правильно а она обучалась подожди обучалась речками Вот она фити на этой ошибке и предсказывает эту же ошибку Е1 реально е с крыше модель то есть не предсказывает тагет она предсказывает ошибку Ну конечно мы это же проговорили она

модель то есть не предсказывает тагет она предсказывает ошибку Ну конечно мы это же проговорили она предсказывает ошибку это Реда бустинга вот здесь справа крышечкой тоже что крышечка с предсказанием кая буква е б всё что угодно с крышечка - это эмпирическая То есть предсказанная а без то это реальное [музыка] значение вот вопрос получается Мы каждый раз Таргет для нас при тренировки это ошибка и типа в конце когда мы уже максимально пришли типа минимизировать ошибку и получается он типа учится

типа в конце когда мы уже максимально пришли типа минимизировать ошибку и получается он типа учится не совершать предыдущие ошибки типа когда мы предсказание предсказание В итоге итоговое предсказание помоему кто-то в чате подобное что-то спрашивал ещ как потом вернуть предсказанию сходного таргета его предсказывать не надо мы как бы декомпозировать вот эту мелочь то что мы не предсказали арим дава правильно П2 П3 плюс бла-бла-бла всё ну и то какие-то веса даются но пока Сея не грузите эти веса

правильно П2 П3 плюс бла-бла-бла всё ну и то какие-то веса даются но пока Сея не грузите эти веса за вас автоматически выстав срем связаные всё вот твоё предсказание это знаете вот это что-то мне напоминает вот я для себя проводил параллель вот в математике есть такая штука которая называется ряд Тейлора РД Тейлора говорит что Любую функцию в том числе какую-нибудь sin x можно разложить на сумму многочлена то есть по факту на слагаемые В общем виде и я не помню чему Она равна там что-то 1 П x П

то есть по факту на слагаемые В общем виде и я не помню чему Она равна там что-то 1 П x П x ква что-то короче неважно что тут вообще совершенно Но это раскладывается так вот мы в каком-то смысле тоже пытаемся декомпозировать по частям где каждая составляющая - это какое-то определённое одно дерево вот так работает пун понятно если непонятно я вас предупреждал не ждите чуда иногда бывает такое что сразу может быть непонятно самое главное улавливать ключевые вещи кото Я говорю что обучаемся на

сразу может быть непонятно самое главное улавливать ключевые вещи кото Я говорю что обучаемся на таргете что каждое новое дерево исправляет ошибку предыдущего и в итоге вот как бы вот это холодный Стар типа средняя дальше Вот чуть-чуть ошибочка поправили Ещё чуть-чуть ещё чуть-чуть и так чик-чик потихонечку собираем на сумму многочленов Ну да разложить Точнее не на сумму многочленов разложить многочлен многочлен уже подразумевает сумму Спасибо большое Люба я хотела вот уточнить Правильно ли я

многочлен уже подразумевает сумму Спасибо большое Люба я хотела вот уточнить Правильно ли я поняла концепцию Да что Да мы обучаемся на тех же данных нобы получается что вот этим строчкам Эти Эти строчки как на них фокусируется внимание Да и модель подстраивается под те строчки Чтобы исправить ошибки да Ну да да Ну значит более-менее Понятно стало спасибо сжа А у меня такой вопрос а вот мы начали с предсказания просто среднее ли панули это мы сейчас так нужно делать что мы не можем ти с чего-то

с предсказания просто среднее ли панули это мы сейчас так нужно делать что мы не можем ти с чего-то начинать Мы же начинаем предсказывать какой-то ошибки Да вот так по факту правильно многие многие говорят что типа сразу начинаем обучаться с таргета сейчас по пожалуйста [музыка] доф ребят У меня вопрос Вот это ты вроде бы Серга задавал вопрос насчёт среднего это типа мы рандомное среднее берём число какое-то Ну почему рандомное среднее по по таргету оно не рандомное ну типа для всех оно будет

какое-то Ну почему рандомное среднее по по таргету оно не рандомное ну типа для всех оно будет одинаковое правильно Ну и вот я это хочу Ну по идее Да у на же Семёрки везде просто арифметическая таргета понял го Я заблудился то хотел сказать дошёл секун А когда вот мы валидации нули в предикт не у нас же у нас же регрессия а не классификация фки Верт Ну что Давай сер му вопросу можешь ещ раз Сначала почему первичный и это средня а не просто какая очередная моделька можем нать говорят говорят вот

почему первичный и это средня а не просто какая очередная моделька можем нать говорят говорят вот как бы Когда рассказываю чтобы сгладить этот момент про бустинг как раз таки говорят что первая модель обучается на и его предсказывают но на самом деле нет модель Мы никогда не предсказываем са мы предсказываем только ошиб этом може сама логика бустинга что мы всегда предсказываем ошибку А с чего-то же надо начать предсказание наше правильно вот какое самое тупое предсказание может быть

с чего-то же надо начать предсказание наше правильно вот какое самое тупое предсказание может быть предсказание среднем ты точнее чем средним не попадёшь по умолчанию предсказание среднем оно достаточно слабое и дальше мы пытаемся с помощю данных объяснить А почему на этом объекте такое отклонение на этом такое на этом такое на этом такое всё это мы делаем через предсказание ошибок и вот потихоньку Так интерактивно это делаем но с чего-то надо начать предсказание и самое тривиальное

потихоньку Так интерактивно это делаем но с чего-то надо начать предсказание и самое тривиальное предсказание почему мы не можем при тоже моделью Почему мы предсказываем всегда ошибку А когда ты первую призы ые Короче мы тагет вообще не [музыка] трогаем по выборке а второе среднее - это среднее по игре по первому поэтому оно везде одинаковое да да нет вот это не среднее по выборки это просто значение выборки значение таргета А вот это среднее значение таргета Да вот такая черта всегда

значение выборки значение таргета А вот это среднее значение таргета Да вот такая черта всегда обозначает средне А ну поэтому оно везде одинаковое Ну всё понятно спасибо я говорю это Представьте не знаю это вот кстати вот именно по такому принцип работают Вот я не знаю недавно заходил Нани там них есть Почему машина столько или столько у них оценивается чисто ML вкру и всё всё это объясняется там примерно работат следующим образом есть средняя машина по рынку она стоит предположим не знаю 1 млн

примерно работат следующим образом есть средняя машина по рынку она стоит предположим не знаю 1 млн руб далее мы уже там пытаемся понять А почему эта машина за 2 млн руб первое Так может быть потому что это BMW да Или ещё какие-то факторы А эта машина 800.000 почему она так у неё пробег большой и так далее И тут та же самая история то есть вот оно как бы самое тупое предсказание средним А дальше мы пытаемся понять почему одни дороже одни дешевле и как бы соответственно сформировать какое-то

мы пытаемся понять почему одни дороже одни дешевле и как бы соответственно сформировать какое-то какое-то этому объяснение это происходит через то что мы постоянно интерактивно предсказываем ошибку Вот всегда первая ошибку среднем Да всегда Да всегда вот так вот ну что ж Давайте немножко посмотрим то как это пристроена Вот здесь например есть алгоритм Boost я в принципе уже хочу убрать но пока оставил идея В чём собственно говоря вот мы здесь с вами ошибку можно задать по-разному ошибку можно

идея В чём собственно говоря вот мы здесь с вами ошибку можно задать по-разному ошибку можно задать по-разному мы с вами задавали через здесь вообще задача классификации а Boost - это как бы хорошая модель десятых годов начала да она там в принципе зарождалась тогда была неплохая адаптивный бун Там ошибка заключа в том что на элементах на которых мылись им ве то есть смотрите вот разделена область Да как decision 3 вот эти два минуса и вот этот плюс они не в своём лагере правильно При таком

Да как decision 3 вот эти два минуса и вот этот плюс они не в своём лагере правильно При таком сплите согласны Так давайте им дадим двойной вес То есть как бы это выглядело в выборке их просто два вот этих две строки их ещё две сделали Теперь они имеют двойной вес Вот видите они размером даже выделены ть Побольше чем коллеги Исходя из этого мы понима слит это эквивалентно тому что как бы здесь два минуса ини вот этого узла уже будет хуже Поэтому разделение оказалось оптимальным вот такое Ну и

минуса ини вот этого узла уже будет хуже Поэтому разделение оказалось оптимальным вот такое Ну и короче вот так интерактивно продолжаем и получаем что-то типа вот такого что-то типа такого вот далее есть адаптивный бустинг например на линейных моделях То есть у нас есть Логистическая регрессия Вот она первый раз построила Да по Градиент спуску подобрала прямую на этом объекте промах он получает двойной вес теперь уже надо разделять не так а вот так Исходя из этого формируется предсказательная

двойной вес теперь уже надо разделять не так а вот так Исходя из этого формируется предсказательная область она получается какой-то такой и ещё есть много разных других бустинга но конечно завоевал и доминировал это градиентный бустинг то есть в один момент появился градиентный бусинки всем стало ясно что он переплывает просто всех идея его до Жуть И проста смотрите вот у меня вот у меня есть Я по факту что хочу я хочу не ошибаться То есть я хочу вот эту функцию минимизировать правильно

Я по факту что хочу я хочу не ошибаться То есть я хочу вот эту функцию минимизировать правильно Согласно У меня есть зацепка зацеп Ну минимизировать мне нужно пытаться всё точнее и точнее предсказывать То есть если бы это у на выглядело бы с вами как график кто скажет график квадрата выт зависимости от того какие у нас предсказания получаются то есть мы строим функцию с вами которая от предсказаний даёт ошибку Вот например если предсказывать среднем то ошибка Будет средняя Вот такая какая-то

даёт ошибку Вот например если предсказывать среднем то ошибка Будет средняя Вот такая какая-то Парабола буде Конечно будет какая-то Парабола я её вот так вот нарисую я её нарисую вот так вот здесь самое идеальное предсказание А это значит когда Y с крышечкой полностью совпадает с иреком вот так правильно то есть когда предсказано полностью совпадает с реальным наша ошибка минимальна Я даже неправильно нарисовал если такое произойдёт то по факту это вообще коси ляжет совершенно вот так Нижняя

нарисовал если такое произойдёт то по факту это вообще коси ляжет совершенно вот так Нижняя точка Это где-то и Но мы с вами начинаем с нашего вот старта Вот здесь где-то мы предсказали игрем средним Да у нас есть какая-то ошибка правильно помните мы с ми занимались минимизацией функции нам пони дие Градиент ВС верно как у нас выглядела формула с вами Давайте вспомним пусть будет новое предсказание Y Диктуйте Что дальше Ну Омега там были веса Ну веса пока здесь мы сейчас не на уровне весов

Y Диктуйте Что дальше Ну Омега там были веса Ну веса пока здесь мы сейчас не на уровне весов рассуждаем А на уровне предсказаний потому что смотри там мыли За изменения адев весов А здесь мы будем пытаться минимизировать ошибку через путём наших предсказаний на новое предсказание Наше новое предсказание это наше старое предсказание правильно Ну или теку Уно градин и Да минус Давайте сразу же напишем умножить на Градиент только на самом деле диен той функции кото минимизируем вот этой если я на

умножить на Градиент только на самом деле диен той функции кото минимизируем вот этой если я на одном объекте считаю так вот что у нас здесь с вами производная вот этого по Y с крышка Чему равна будет Давайте вот стандарт Error производная по нашему предсказанию -2 y - y с крышкой Абсолютно верно -2 на y - y с крышкой всё то есть двойку вынесли а потом ещё минус перед Y с крышкой здесь глубже не проливаем в веса Можно конечно провалиться в дерево но это не надо мы можем на этом уровне

не проливаем в веса Можно конечно провалиться в дерево но это не надо мы можем на этом уровне остановиться так вот смотрите логика какая Вот наше текущее предсказание пока что я предсказываю среднем идеальный для меня шаг мы сейчас будем пытаться шагнуть по градиенту вот идеальный для меня какой-то шаг вот мне чтобы минимизировать функцию Мне надо попасть сюда мне надо научиться ыва им-то с дере по для это надо чтобы новое дерево модель 1 то есть вот это у нас смотрите есть уже правильно значит

для это надо чтобы новое дерево модель 1 то есть вот это у нас смотрите есть уже правильно значит модель о должна равна быть Вот этому насколько это возможно градиенту нашей функции поэтому градиентный бустинг стал большим революционным таким прорывом и он заключался в том что мы будем с вами призывать ошибку а Градиент ошибки Градиент ошибки Это нам гарантирует что мы будем Когда мы будем предсказывать Градиент ошибки Значит мы будем идти ровно по по Градиент спуску где каждая новая точка Вот

Градиент ошибки Значит мы будем идти ровно по по Градиент спуску где каждая новая точка Вот это вот просто предсказание средним это средним плюс первое дерево средним плюс второе дерево средним плюс третье дерево средним плюс четвёртое дерево и потихоньку топаем В итоге получается что Е1 у меня Е1 E1 E1 Е1 Ну что получается 10 - 7 - это 3 ещё -2 -6 8 - 7 вот сюда подставляю Это 1 на -2 Ми 2 4 - 7 подставляем сюда то есть промахнулись на -3 оказалось 6 нам ещё и знак помогает в какую сторону

- 7 подставляем сюда то есть промахнулись на -3 оказалось 6 нам ещё и знак помогает в какую сторону двигаться 37 подставляем в реальности 3 предсказали 7 -4 у -2 8 15 - 7 15 было семь предсказали очень сильно промахнулись 15 - 7 - это 8 8 - 2 -16 соответственно модель он будет предсказывать это И вот так итеративности то есть то что я вам до этого рассказывал это просто идея бустинга И в частности есть градиентный бустинг Что является доминирующим на данный момент даже когда вас будут просто

есть градиентный бустинг Что является доминирующим на данный момент даже когда вас будут просто спрашивать бустинг все подразумевают градиентный бусин но Вас могут спросить на собеседование Почему А градиентный бусин градиентный градиентного потому что мы пытаемся минимизировать нашу ошибку Идя по градиентного спуску каждая итерация - это одно добавленное дерево Ну вот собственно говоря сколько у вас там итераций было За сколько итераций вы доходили до минимума на прошлых неделях вот в принципе

вас там итераций было За сколько итераций вы доходили до минимума на прошлых неделях вот в принципе в неявном неявном виде сейчас всех запутался в неявном виде сейчас открою элёр а gradient boosting boos прогрессор а ну здесь немножко теория нам нужен нам нужен вот регрессор в неявном виде ребят вообще не отличается от того что мы делали с вами на прошлой неделе смотрите есть тот же Лос который мы минимизируем у меня сейчас это было squ Terror SE квадратичная ошибка Вы можете поставить

мы минимизируем у меня сейчас это было squ Terror SE квадратичная ошибка Вы можете поставить какую-нибудь другую есть знакома знакома N estimators - это в прямом смысле количество итераций градиентного спуска одна итерация Одно дерево решение Да вы как количество эпох задавали Вот это в каком-то смысле тоже самое дальше критерий Вот это всё пошли плюшки плюшки уже самого дерева то есть там настройка не ансамбля а Конкретно вот одной единицы одной единицы Ну вот собственно говоря весь Градиент

не ансамбля а Конкретно вот одной единицы одной единицы Ну вот собственно говоря весь Градиент всё всё вам знакомо всё что мы проговорили ничего нового нету вот ну тут это можете почитать ть дальше вот да Опять же это как у нас с вами был да ранняя остановка Когда уже останавливать градиентный спуск в общем вот и всё всё как на ладони Как говорится Давайте по порядку Бул Ты когда говорил спускаемся спуск каждого дерева и тоже дерево дере это это они принадлежат одному классу одному классу но

спуск каждого дерева и тоже дерево дере это это они принадлежат одному классу одному классу но разные экземпляры класса понял то есть я могуть мы все с вами люди мы все с вами люди а мы разные экземпляры вот тоже одно и то же дерево по настройкам с одной глубиной с одними там всеми гипер параметрами Но это разные экземпляры класса понял как два близнеца Вот то есть все бустинг использую тоже экземпляр с одними и теми же настройками одного и того же кла разные экземпляры одного и того же класса

с одними и теми же настройками одного и того же кла разные экземпляры одного и того же класса с ми а никто не подумал использовать разные э моде Ну хороший вопрос я им тоже задавался но я что-то не полез эту историю разбирать Может что-то есть хорошо спасибо вопрос на самом деле логичный вопрос логичный у тебя Кост я сейчас что-то запутался Немножко значит мы используем дерево решений для того чтобы обучиться новые ошибки и предсказать минимизированы предсказать эту ошибку то есть каждое дерево

обучиться новые ошибки и предсказать минимизированы предсказать эту ошибку то есть каждое дерево отвечает за приска свое ошибки и градиентный спуск используется под капотом в деревьях чтобы минимизировать или нет дадада абсолютно Вот раньше уня было задание Может сейчас есть что-то я подзабыл было задание написать свой класс Типа градиентного бустинга так вот если вы поймёте не Если вы пойм это четыре строчки кода если это понять То есть Ну что тебе по факту нужно тебе нужно прописать вот эту

четыре строчки кода если это понять То есть Ну что тебе по факту нужно тебе нужно прописать вот эту формулу и сказать что Пусть предсказывает новое дерево Т Всё при всей его сложности на самом деле математически он реализовывается в четыре строчки всё остальное контекст сама математическая идея реализовывается всего в четыре строчки и это самые популярные алгоритмы по сей день Ну нейросети начинают поджимать но когда это произойдёт непонятно бустинг не требует так много он самый требовательный

поджимать но когда это произойдёт непонятно бустинг не требует так много он самый требовательный среди всех того что мы проговорили ансамбле но по сравнению с нейросетями он как бы вообще ничего не требует по ресурса если стингу Иногда приходится 8 часов обучаться что ж говори про неть поэтому бустинг будут жить Стин Живи не должны вроде как сдавить этого гиганта в своё время это так соно Y - это ответы а Ита - это ИТ алгоритм И вот она функция Потер считается как средняя на одном объекте

- это ответы а Ита - это ИТ алгоритм И вот она функция Потер считается как средняя на одном объекте выборки Да она может быть разная мы брали с вами средне квадратическую ошибку на рисунке это может выглядеть следующим образом это очень тривиальный рисунок но тем не менее Вот смотрите вот у нас есть такая зависимость да то есть там Логистическая регрессия ой Линейная регрессия понятно что идеально не получится как бы дерево решение по факту Вот первый шаг первый шаг после дерева Вот это уже

не получится как бы дерево решение по факту Вот первый шаг первый шаг после дерева Вот это уже есть как бы одно дерево будет делать см образом то есть вот Бут оставаться остатки и мы эти остатки будем как-то пытаться предсказать то есть вот у нас здесь всё время предсказание итоговое Да по факту то вот в этом столбце А здесь у нас с вами Ну то что будет на фите постоянно у каждого Нового дерева и вот если вы обратить внимание то потихоньку потихоньку сглаживаться То есть то что мы недо

дерева и вот если вы обратить внимание то потихоньку потихоньку сглаживаться То есть то что мы недо предсказали оно становится всё меньше и меньше и в один момент оно выйдет на ну на Плато на нулевой уровень и всё но это будет очень нескоро В итоге это выглядеть будет наше предсказание всё равно как ступенек Но эти ступенек видите они очень детализированные это всё можно назвать аппроксимация функции в каком-то смысле да то есть мы пытаемся эмпирически аппроксимировать эту функцию вот такой вот

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

предсказание всегда Просто сумма сумма сумма сумма сумма сумма е есть очень хорошая иллюстрация градиентного бунга на уровне форму как в гольфе мы пытаемся попасть в лунку То есть можно сказать что вот это вот наше тривиальное предсказание среднее Да средним А дальше мы собственно говоря с помощью каждой новой итерации пытаемся попасть и объяснить А почему же почему же не средняя цена А вот здесь цена реально оказалась больше чем средняя да Первой де говорит ребят надо вот так вот так третье

цена реально оказалась больше чем средняя да Первой де говорит ребят надо вот так вот так третье дерево вот так так и попали в луночкового сжа а у меня такой вопрос касательно вот графического подстраиваясь за такое тут мы наоборот типа рады что она подстроила прямо под данные или я что-то не не понимаю Не не не не не ты ты ты правильно говоришь Это хорошо если это было бы на валидация выборки на трени это есть минусы это как бы как сказать орфи - это когда мы на трейне попали хорошо а на

на трени это есть минусы это как бы как сказать орфи - это когда мы на трейне попали хорошо а на валидацию плохо но если я на трейне попал хорошо и на валидацию хорошо Это же хорошо правильно То есть как бы ругать себя за то что мы точно попали это не есть не всегда плохо Вот Ну мы же мы же по идее что-то такое можем мы линейной регрессии построить каким-нибудь полиномом так описать всю эту фигню или оно так не не будет выглядеть Ты прав Ты прав но индикатором переобучения является не то что

или оно так не не будет выглядеть Ты прав Ты прав но индикатором переобучения является не то что точно предсказал индикатором переобучения см высокая точность а тестовая падает вот как бы собственно говоря есть картинки типа там M Ну вот что-то типа такого вот смотрите вот на на уровне классификации Вот это у нас Я так понимаю собственно говоря не до обучения Давайте вот здесь выведем вот для классификации для регрессии сонно Витин на каждые шумы начали реагировать как бы Афин просто прямой

классификации для регрессии сонно Витин на каждые шумы начали реагировать как бы Афин просто прямой привели всё равно ошибаемся А типа обучение вот как-то такте здоро спасибо С регрессия примерно та же самая история да то есть вот Линейная регрессия В каком-то смысле не до обучения офин это вот так Вот как ты сказал всё вошли в дебри А вот зде что среднее так вот нан у тебя будет просто низкие метрики на орфи высокий трейн низкий тест Потому что ты на шумы реагируешь А здесь будет сопоставимо

на орфи высокий трейн низкий тест Потому что ты на шумы реагируешь А здесь будет сопоставимо понял то есть поэтому как бы переобучение у тебя не должно ассоциироваться с попаданием 100% оно у тебя должно ассоциироваться с тем что Трей и валит стали сильно отличаться друг от друга но если и там и там 100% так это кайф Классно что решили значит за 100% А а как мне понять что пора топать градиентный бустинг он типа не не не за оверхил Я на каждой итерации проверяю с Нет как она ра Ну раньше раньше

бустинг он типа не не не за оверхил Я на каждой итерации проверяю с Нет как она ра Ну раньше раньше вручную надо было через апну какую-нибудь абста он тебе сам скажет на какой итерации пошёл расход вот в прямом смысле вот вот это вот реальное поведение графиков Вот это часто происходит то есть вот Лос функция начинает падать падать она вместе падает у двух графиков у Рейно и валидации падают но в один момент этот дальше падает а этот вверх пошёл Всё мы начали на шумы реагировать Угу Окей понял

один момент этот дальше падает а этот вверх пошёл Всё мы начали на шумы реагировать Угу Окей понял [музыка] угу так так так так градиентный бустинг подытожим по нему опять же под бунго часто ассоциируется градиентный бустинг как под гинго ассоциируется Random Forest градиентный бустинг базовые модели могут быть любыми но лучшие деревья Понятно решает задачу классификации регрессии ранжирования ранжирование Мы в нашей программе не трогаем нужна большая выборка нужна это фак потому что бун чтобы

Мы в нашей программе не трогаем нужна большая выборка нужна это фак потому что бун чтобы ему расли Ему тоже нужны большие данные типа на маленьких выборках не стоит ждать что бун будет делать линейной модели он максимально раскрывается когда выборки становятся очень-очень большими вот когда он появился собственно появился в библиотеке появился в библиотеке я вам это уже открывал да потом появился кгл пошли короче соревнования начали играть на деньги и понятно было с всем что градиентный бусинку

кгл пошли короче соревнования начали играть на деньги и понятно было с всем что градиентный бусинку в плане тупо выбить скор доминировал А там как бы речь о денег там за сотые боролись и какие-то энтузиасты короче начали более подробно читать статьи Фридман или Фриман он короче человека который придумал да вот эту градиентного бустинга и начали намечать Ну находить там костыли некоторые и в итоге они их поправили и появился на свет алгоритм xgb Boost Это наверно одиннадцатый год по-моему где-то

они их поправили и появился на свет алгоритм xgb Boost Это наверно одиннадцатый год по-моему где-то 2011 и тогда там был такой вот вот что в трен попали пацаны короче они сделали и они выигрывали соревнование просто нажав ent уходили Всё даже данные не смотрели он просто был сильней тупо и как бы остальные что-то как пытаются что-то фи и так далее но здесь Победа математики была то есть вот есть данные примерно нажимаешь ent и всё и побеждал даже появлялись мы типа стати же бусты и вс что нужно

примерно нажимаешь ent и всё и побеждал даже появлялись мы типа стати же бусты и вс что нужно как бы чтобы победить Да вот всем стало ясно что это сильно В чём идея буста я глубоко сильно проваливаться не буду но на самом деле первый бу первый Как сказать улучшение дал за счёт того что они поняли что этот чувак кото приду он конно с этими коэ они как ки подвязали и у них стало просто лучше работать вот потом всем стало ясно что Идея хороша но как бы не имела большой поддержки с точки зрения

вот потом всем стало ясно что Идея хороша но как бы не имела большой поддержки с точки зрения каких-то больших корпораций Да это была больше такая Open sce история где как бы энтузиасты что-то поддерживают меси пишут и так далее в 2016 году появляется библиотека lbm за котором разницу да Вы если что можете провалиться поглубже идея лай GB была в том чтобы как бы у бустинга большая проблема он точный Ну как вы думаете какой его главный минус да о медленный он медленный он медленный И как бы

точный Ну как вы думаете какой его главный минус да о медленный он медленный он медленный И как бы ребята из Microsoft сказали Давайте тогда сделаем так вот элементы на которых Мы практически попали Да вот вот этот элемент Ну давайте здесь Было два предположим мы пали вот эти элементы мы на следующей трассы будем убирать то есть там где Градиент нулевой Зачем нам всё это обсчитывают вычислений тем самом они там могли из 100% выборки какие-то рации там пятый уже доползет не знаю 20% выборки

тем самом они там могли из 100% выборки какие-то рации там пятый уже доползет не знаю 20% выборки только или 10% тем самым очень сокращая вычисление очень сокращая вычисление Ну как бы поэтому оно и называлось как бы lgbm да lgbm вот а lgbm мм gbm часто вы увидите в больших компаниях у нас как бы Например пойдёте вы какой-нибудь условно Да там доминирующая история потому что он может уступать бусту по точности немножко но он хотя бы быстрый а представляете какие объёмы данных приходится

бусту по точности немножко но он хотя бы быстрый а представляете какие объёмы данных приходится обрабатывать там любое ускорение это уже как бы классно вот далее пос пови Хотя хотелось бы это вки связа с ками признаками за этой библиотекой стоял Яндекс Вот то есть это наша Отечественная Разработка и она в принципе их превзошла всех произошла и почему-то массово она не прижилась хотя кайфовая штука они первыми добавили [музыка] поддержку всё закодируй сами они первыми добавили нано не заполняйте

они первыми добавили [музыка] поддержку всё закодируй сами они первыми добавили нано не заполняйте мы всё заполним сами короче очень много что но почему-то тут массово она не прижилась всё-таки GB и gbm но если говорить по миру более популярны в России наверное catbus популярнее за исключением тех случаев когда нужны как бы максимально сокращать время потому что всё-таки lgbm он быстрее чем catboost быстрее но КБС много идей внедрил типа они сказали ребят во-первых есть много на ютубере

catboost быстрее но КБС много идей внедрил типа они сказали ребят во-первых есть много на ютубере создательница этого алгоритма но она там рассказывает как бы вообще высшую материю какую-то Я когда сам это слушал Хотя у меня бы достаточно глубокое техническое образование Мне казалось что мы с ней на разных языках иногда говорим вот собственно говоря самое главное что из котб - это понимание что того что есть категори кодирование катег переменных плюс ещё кбу строит симметричное дерево

что того что есть категори кодирование катег переменных плюс ещё кбу строит симметричное дерево симметричное дерево gbm тоже добавили потом кодировку тельных переменных и недавно не так давно вышел новый по меркам по меркам текущего ля классического полгода это совсем недавно для нейронных сетей 2 недели может быть давно тут как бы всё уже примерно устаканится их агрейн мза с что-то то сейчас в принципе можете пробовать любой из них Они до сих пор продолжают конкурировать и это гонка трёх

в принципе можете пробовать любой из них Они до сих пор продолжают конкурировать и это гонка трёх абсолютных лидеров в классическом машинном обучении гонка трёх абсолютных лидеров есть статья про их сравнение но есть ещё статья я вам тоже её скину или она она у меня прикреплена в хабре на ой в хабре говорю в репозитории статья на Хабр так сейчас откроем Давайте этот фазу один Сегодня у нас с вами вторник Да где-то вот она у меня была здесь эта статья Это точно вторник у нас сегодня точно

с вами вторник Да где-то вот она у меня была здесь эта статья Это точно вторник у нас сегодня точно вторник точно вторник там посм знаком что-то похожее было Вот Разбираем особенности вот очень хорошая стая Мне она понравилась То есть как раз здесь рассказывают вот эту математику если прям душит жёстко можете пропустить Да но в принципе это как бы то что у меня в слайдах лекции есть в принципе вот это всё говорю если душит переходите просто да как бы Берегите себя а вот дальше переходите к

вот это всё говорю если душит переходите просто да как бы Берегите себя а вот дальше переходите к разницам кста и вот о говорит рассказывает чтом симетрично дерево имен вот эксперимент Аля первая разница Да вот рассказывается как кодируется значения Это tet но умный Таргет энкодер как бы можно почитать посмотреть Да всякие эти истории и собственно говоря потом что сложно можете как бы скипать я основные вещи вам проговорил Ну и особенности GB да В чём идея какие главные его гиперпараметры он не

вещи вам проговорил Ну и особенности GB да В чём идея какие главные его гиперпараметры он не строит симетрично дерево строит дерево в глубину как прави lbm это если ТБ он вот так вот ровненько то lbm он может как-то вот так уйти неровно это связано уже на уровне алгоритмов разницы но в большинстве случаев это сильно как бы они плюс-минус одинаковую точность и дают на самом деле вот Ну так под вечерок Вот именно на catbus lbm сфокусироваться всё что прямо тут жёсткое сразу пропускайте глубоко

Вот именно на catbus lbm сфокусироваться всё что прямо тут жёсткое сразу пропускайте глубоко пока это не надо совершенно так а что что я ещё вам хотел сказать Вот нужно будет сегодня их запустить документацию читайте документацию они уже нел у них соответственно у всех разная документация Давайте откроем документацию ста например просто пишем Ну документация самая приятная Как по мне у но остановимся Насте вот документация много всего разного видека не видеокарта и так далее Ну вот нам нужен

Насте вот документация много всего разного видека не видеокарта и так далее Ну вот нам нужен нам вот нужен новский пакет Да вот например собственно вот класс здесь немного описываются Какие параметры и методы есть Вот например берм вот собственно говоря все гиперпараметры которые можно уза Я половину сам вообще не знаю и никогда их не трогал и даже читать их не хочу есть основные типа глубина Ну то есть всё что нам с вами знакомо плюс есть очень классна ну объектив очень крутая библиотека

Ну то есть всё что нам с вами знакомо плюс есть очень классна ну объектив очень крутая библиотека реально очень крутая библиотека Как по мне очень крутой алгоритм то есть функцию вы сюда более того можете кастомную функцию написать Да часто это делают на соревнованиях как бы под конт Конте [музыка] То есть вы можете задать намо Вы можете вбо выводить какую-то информацию вставить сит фиксированные обучение Ну так можно оглядеться посмотреть Вы прямо сюда можете поставить метрику которую вам

обучение Ну так можно оглядеться посмотреть Вы прямо сюда можете поставить метрику которую вам нужно считать А сюда можно подать датасет на котором нужно считать и много всего крутого в принципе у LB и у у буста похожая похожая история вот похожая история вот так Ну что А давайте Тогда Тогда Тогда Тогда Тогда немножко посмотрим быстренько в коде в коде в коде в коде мы с вами вчера Вот это всё запускали сейчас посмотрим Просто этот запуск и и и и прово сер давай вопрос быстрый вопрос упоминал

сейчас посмотрим Просто этот запуск и и и и прово сер давай вопрос быстрый вопрос упоминал сказал что они на запускают м е разбиратся вобще нахрен кото вини те в общем виде дают они те в общем виде дают а иногда под данные конкретно нужно как-то по-своему рать Они то есть не идеальная коровка в общем виде не Положи вот как бы там кодировку данных заполнение нанов можешь но опять же заполнение нанов как ки часто связано с тем чтобы знать причину этих нанов а в общем виде если ты понимаешь что

как ки часто связано с тем чтобы знать причину этих нанов а в общем виде если ты понимаешь что как бы справится В общем виде Да с этой историей то конечно проще запустить один процессор собирают отдельно то есть кбу бустом сильны сильный но Когда собирают реальный пайплайн при процессор всё-таки отдельно да КТ бусту больше доверяют именно историю обучения обучения ой Так ну что ж Крос валидацию это всё мы с вами обсуждали сейчас я всё запущу на всякий случай вот теперь с атю Давайте напоминаю

это всё мы с вами обсуждали сейчас я всё запущу на всякий случай вот теперь с атю Давайте напоминаю вот вчера Мы собрались с вами начнём с атна начнём с АПТ что делает библиотека атна библиотека атна Как вы уже многие Да наперёд поупа но библиотека атна нужна для подбора гипер параметров какой С какой проблемой вы вчера могли столкнуться То есть вы строите какой-то свой пайплайн Да вот вы его собираете там ставите глубину дерева три критерии энтропия А почему не два А почему не 10 а почему нени

там ставите глубину дерева три критерии энтропия А почему не два А почему не 10 а почему нени а почему не там другой с или другой Ну то есть как бы вопрос очевидны гиперпараметры есть комбинация но вариантов настолько много что прибирать вручную это будет очень тяжело атна - это библиотека которая как раз-таки позволяет с этим бороться у атна очень приятный сайт Как по мне Ну просто приятный и хорошая документация хорошая примеры они в принципе развивают свою историю например вот есть вкладок

документация хорошая примеры они в принципе развивают свою историю например вот есть вкладок для сна Они показывают как настроить их ТНУ Ну точнее для конкретной срна Да есть для lgbm отдельно у них для КТ буста есть можно найти вот всё прописано как что подобрать В общем много много всего разного более того даже видите нейронные сети можно Ну только самые простые нейронные сети большие нейронные сети тюнить глобально атю занимается Вот ей вообще пофиг что выдаёте знаете вот в школе мы решали

сети тюнить глобально атю занимается Вот ей вообще пофиг что выдаёте знаете вот в школе мы решали задачу минимизации функции Да вот Като смысле атна это делает Как градиентный спуск вот это не совсем Градиент спуск она как бы просто перебирает варианты перебирает варианты что полный градин спус там не собрать и без разницы что выдаёте то есть это оптимизационная Framework оптимизационный поехали У меня есть pipeline как я вам говорил вы всё можете достать вот есть ключ steps вы можете Вот

У меня есть pipeline как я вам говорил вы всё можете достать вот есть ключ steps вы можете Вот пьютер вытащить класс имю сфи генератор модель всё что угодно Вы можете вытаскивать вытаскивать Это очень удобно это очень удобно и помогает если что нужно нужном месте обратиться и поменять Вот теперь про атюн поехали смотрите атна я это не просто так собственно говоря проговорил потому что через него мы сейчас будем в атна вставлять А смотрите поехали атна имеет очень простую конструкцию имеет

него мы сейчас будем в атна вставлять А смотрите поехали атна имеет очень простую конструкцию имеет функция objective и рил рил - это будет грубо говоря один запуск этой функции один один подбор один подсчёт параметров что в функции об Нам необходимо сделать Давайте Сначала я уберу энкодеры и оставлю оставлю тупо на самом деле две строчки кода Если вы так Посмотрите всё остальное это вам уже знакомое вот я гово достаю вот если мы с вами возьмём здесь то в прямом смысле у меня здесь жи сдаю

знакомое вот я гово достаю вот если мы с вами возьмём здесь то в прямом смысле у меня здесь жи сдаю сетку параметров Я хочу для decision 3 перебрать глубину дерева глубину дерева и критерии попробовать различные ну глубину дерева Я хочу перебрать от вот знаете как работает функция NP Range она от одного до десяти С шагом один последня не включительно перебирает значение поэтому я то же самое сюда подставляю Я говорю что цело численно Пройдись от двух до дети С шагом один да Если так посмотреть

подставляю Я говорю что цело численно Пройдись от двух до дети С шагом один да Если так посмотреть то сколько у нас с вами значений здесь восемь уникальных значений Посему восемь разных глубин дерева надо перепробовать с критерием это уже не целочисленный признак Это категориальный я вот эти значения В принципе можете оставлять одинаковым это самое главное чтобы это совпадало с названием гиперпараметры Да потому что он будет его подставлять вот далее далее Далее говорим что на про ро в роли

Да потому что он будет его подставлять вот далее далее Далее говорим что на про ро в роли критерия Да критери разбиения и можно ещё другие истори вставлять дальше я прям подаю в модели говорю задать параметры можно сделать и проще если Вы посмотрите в документацию например слр да то они вот создали сетку и Смотрите Они просто создают экземпляр класса классификатора векторов и вону подат не одно пода вариантов много Ну то есть я как бы тащил по элский па поэтому через создавал всё и пода сюда

пода вариантов много Ну то есть я как бы тащил по элский па поэтому через создавал всё и пода сюда прям вот так вот сетку параметров далее вот эта функция Вот эта функция об должна возвращать то что вы максимизирует или минимизируйте в зависимости от того короче то что как бы левая ирия ри ня валидация поэтому я запустил создал Точнее сптоваров то что возвращается то и с эти будет максимизировать и минимизировать у жно мази поэтому мы создаём стадию И говорим что нам нужно максимизировать выход

и минимизировать у жно мази поэтому мы создаём стадию И говорим что нам нужно максимизировать выход иногда его нужно минимизировать например mse мое да Или что-то ещё есть метрики которые нужно вниз тащить а не вверх Ну и оптимайз самый главный запуск я вот указал что 100 100 запусков как бы хотя Сколько всего Хотя Сколько всего у нас запусков с вами Вот математика смотрите здесь восемь вариантов Здесь три Сколько различных комбинаций нужно перебрать 3.200 Да четыре там ещё пять этих прос

Здесь три Сколько различных комбинаций нужно перебрать 3.200 Да четыре там ещё пять этих прос валидации сидять да 8 у на 3 24 и ещё внутри Крос валидации для каждого запуска ещё пять раз то есть по факту 120 запусков у меня 100 запущено Да вот ну у меня ограничение 100 Ну как бы Окей Можно поставить 120 Ну что ж запускаем опять же стараемся фиксировать как можно больше случайности чтобы вот эти сливания не влияли да то есть пороше везде случайно морозить максимально поехали вот собственно

эти сливания не влияли да то есть пороше везде случайно морозить максимально поехали вот собственно говоря полетела вот он начинает смотрите что у нас с вами то есть вот нулевой Вот его собственно говоря значение наилучшего три да сетка параметров то есть глубина дерева 7 критерий энтропия лучше 078 ну собст вот 819 в принципе пока что на этом всё у нас с вами останавливается Да останавливается останавливается за 82 почему-то не получается у переплюнуть в такой настройке параметров именно в

останавливается за 82 почему-то не получается у переплюнуть в такой настройке параметров именно в такой настройке параметров то есть вот он выдаёт при глубине 5 критерий лучшее значение параметров 81 и9 вы може соть большую сетку более того моги па такое тоже можно хотя это делают редко но вот смотрите тут более Сложно это сделать но возможно то есть я говорю что энкодер мне нужно перебрать ходе иде вот к сожалению вну нельзя подавать сразу целиком экземпляр класса поэтому мне приходится давать

вот к сожалению вну нельзя подавать сразу целиком экземпляр класса поэтому мне приходится давать имя класса и отдельно создавать мапу которая сопоставляет имя и сам экземпляр клас и всё это дело Мы точно также подам да всё очень просто запускаем Поехали то есть видите он теперь ещё говорит какой энкодер он использовал я для для кого-то поменял энкодер Ну скорее всего это вот эта вот часть у меня а не вот здесь вот вот вот здесь я либо ход либо Таргет ходер собственно говоря он пытается пытается

не вот здесь вот вот вот здесь я либо ход либо Таргет ходер собственно говоря он пытается пытается что-то сделать сделать сделать сделать Но похоже безуспешно не получается при таких параметрах точность всё равно 81 и9 не растёт не растёт не получилось за счёт этого переплюнуть ну так короче можете пробовать какие-то свои свои варианты собирать Свои Свои обучалки Так ну что ж теперь Давайте немножко обсудим про ансамблевые модели например да мы запускаем Ну вот как он выглядит вот Обратите

обсудим про ансамблевые модели например да мы запускаем Ну вот как он выглядит вот Обратите внимание видите просто в привычном виде То есть он часть палана спокойно ставится состоит из которые выдают один единый выход Обратите внимание один единый выход создаётся через вот такой собственно говоря знакомую нам конструкцию в палай да В прямом смысле вот так что это такое Я не знаю де Давайте сом и выведем его вот он получился напоминаю дае у меня вчерашний Титаник ният есть [музыка] мива модели

выведем его вот он получился напоминаю дае у меня вчерашний Титаник ният есть [музыка] мива модели тут аж три модели такой уже достаточно внушительный пайплайн с виду Да получился красивый приятный вот ну получились вот такие результаты 82 и6 дал на валидацию выборки что в принципе достаточно Неплохо неплохо но опять на кросс валидацию видите поменьше 81,3 но опять же не забывайте У меня всего 800 элементов выборки и не может не произойти такого что сверх как бы мы превзойдёт очень сильно вот

элементов выборки и не может не произойти такого что сверх как бы мы превзойдёт очень сильно вот далее Bing classifier Вот classifier я например на knn запускаю Да на knn запускаю равно 20 указываю Ну всё также цепляю и Обучаю вот обучил получил какие-то точности Ну то есть вот такая настройка гинга не сработала не очень хорошо не очень хорошо получилось вот Ну может поможет ROM for запускаем ROM Forest тоже опять его просто подцепили обучили предсказали пахнет переобучение пахнет очень жёстким

Forest тоже опять его просто подцепили обучили предсказали пахнет переобучение пахнет очень жёстким переобучения на самом деле очень очень странно почему это произошло надо побольше поставить точность растёт но но это видимо связано ещё с данными с самими данными Хотя хз не знаю почему так про глубина дерева пони а она у нас вообще не стоит Ну давайте поставим Мак Def равно не знаю четыре предположим Ну вот стало более адекватно приходить к результатам опять же надо тюнить и выискивать да как

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

чуть-чуть отдельно то есть смотрите отдельный препроцессор я все данные пре процессинга сделал и сюда уже подъезжает OST его можно сюда засунуть можно засунуть но он всё-таки не из сноской инфраструктуры очень много у кста есть своих методов которые из этого очень сложно доставать получается вот Хотя приятнее конечно было бы если бы они вместе лежали ну ничего страшного Итак что можно создать можно создать Head Boost laif Да и соответственно указать что Метрика оценки будет I и вот смотрите ещё

создать Head Boost laif Да и соответственно указать что Метрика оценки будет I и вот смотрите ещё классную вещь у кот буста и вот у таких бунго Если вы сюда Подойдите прямо Валида датасет лиций датасет то он вам покажет где пошло переобучение Если вы этого не не Подойдите то он не знает где переобучение и фигачит до талова вот а соответственно Если вы сюда Подойдите это будет каким-то индикатором более того есть возможность отрисовывать графики есть возможность вот такую сводную инфу получать

более того есть возможность отрисовывать графики есть возможность вот такую сводную инфу получать Давайте запустим посмотрим что из этого то есть вот пошло обучение Да accuracy собственно говоря вот рнова выборка Learn и выборка тест то есть переобучение пошло практически сразу то есть вот 83 у него получилось на валидации а буквально на Х деревьях на ирах получил вообще на второй Ира не знаю так получилось то есть так получилось у него с двух итераций зафи дальше графики стали расходиться как

получилось то есть так получилось у него с двух итераций зафи дальше графики стали расходиться как Форсаже Да и собственно говоря здесь пошло переобучение А здесь К сожалению как бы хотя бы хотя бы при своих остаёмся точно также у нас с вами градиентный бу зада классификации зада классификации мы минимизируем Какую функцию помните в пятницу Бинар мо график видите очень похож на то что я вам показывал вот здесь классическая история переобучения Когда происходит па падают становимся умнее умнее

вот здесь классическая история переобучения Когда происходит па падают становимся умнее умнее умней а потом понятно что начинаем реагировать на шумы то есть сам бустинг идеи математики позволяет довести этот этот график до нуля до нулевой ошибки как я вам сказал через произвольное количество точек всегда можно провести прямую ой провести кривую линию создать её уравнение всегда через вообще любое произвольное количество точек вопрос времени но это уже к жизни не имеет отношения Вот

вообще любое произвольное количество точек вопрос времени но это уже к жизни не имеет отношения Вот соответственно соответственно как бы вот если вот этот спам не нужен то есть параметр просто можно поставить Вот так ВС просто остави вот эту сторо всякие можно истории это можно выгружать там включать выключать короче покаетесь Посмотрите вот что у нас здесь получилось 83 83 на таком сплите Ну как бы выше выше чем остальные сделать лучше Вот что здесь такое а не забывайте Не забывайте пожалуйста

бы выше выше чем остальные сделать лучше Вот что здесь такое а не забывайте Не забывайте пожалуйста что у Кэт буста у Кэт буста есть очень классная штука где она сейчас что мене чит вот Уста есть очень классная штука вот если мы выведем И вообще если мы с вами создам создадим вот такой Ser Да где в индекс подадим получается да а подадим то что-то должно получиться интересное вот сумма по-моему 100 если мне память не изменяет Но это важность признаков по мнению кста вот опять же можно ещё

100 если мне память не изменяет Но это важность признаков по мнению кста вот опять же можно ещё сортировать его Да сделаем точка И скажем что мы по убыванию самая важная фича пол вторая класс третья возраст потом цена билета Ну и так далее что типа такого что я вам ещё хотел показать А ну здесь собственно говоря предсказание для тестовой выборки то есть смотрите вот тестовая выборка напоминаю это выбо которую есть соревнование на Вы можете кстати попробовать если вот кто прони в том може за

это выбо которую есть соревнование на Вы можете кстати попробовать если вот кто прони в том може за здесь найти Титаник ни так так так где у нас сечас погодите А меня просто не пускает Хотя comp вот Титаник у нас первый самый Вот бы соревнование бесконечно когда-то яство сго что ли или Да с пятнадцатого года Титаник Можете зайти в лидерборд вот здесь Метрика Score это как раз вот предсказание для вот этой вот нашей выборки тестовой те кто получили 100% на них можете не смотреть Это просто

для вот этой вот нашей выборки тестовой те кто получили 100% на них можете не смотреть Это просто хорошо написанный парсер из интернета ибо по всем этим пассажирам очевидно есть информация любого пассажира можно загу узна педи Титаник Википедия какая-то А вот энциклопедия Титаник соответственно можно легко найти да то есть вот она вот этот пассажир раз лежит здесь то он оказался живым вы просто эту информацию парте очень легко вставляете себе сюда и вот ваше предсказание Зачем собирать возраст

информацию парте очень легко вставляете себе сюда и вот ваше предсказание Зачем собирать возраст пол и так далее если есть имя пассажира которое даёт 100% информацию вот но тут как бы Суть в чём я вам хотел показать другое вот собственно говоря процессор предсказываем все данные наши вот эти конвертирова дальше уже готов работать он на Таких данных обучался и мы получаем предсказание для всех этих пассажиров здесь Уста Вы можете посмотреть его параметры С каким он обучался его почти бусту

этих пассажиров здесь Уста Вы можете посмотреть его параметры С каким он обучался его почти бусту практически можно не применять АТ он самм него сам подбирает эти параметры внутри по умолчанию но все но не все здесь можете как бы увидеть и взглянуть теперь мы поговорим о ещё последнем моменти у нас с вами остался достаточно важный момент достаточно важный это связано с пло модели модель нам надо сохранять вот у меня есть ML па Да я вот на нём покажу вот такой вот па всё он уже обучен спосо

сохранять вот у меня есть ML па Да я вот на нём покажу вот такой вот па всё он уже обучен спосо секунду получаем кто выживет то погибнет Хотя выборка грязная опять же повторюсь пайплайн обучен если мне его нужно задеплоить то есть он мне уже нужен там в обученной виде Понимаете в обученной со всеми внутренними состояниями чтобы МЮ знал средний возраст Да который нужно заполнять пропуска чтобы Simple юте знал моду Да вот для вот этих столбцов для МР чтобы стандарт скиллер знал средние

чтобы Simple юте знал моду Да вот для вот этих столбцов для МР чтобы стандарт скиллер знал средние стандартное отклонение чтобы ход знал количество категорий который надо кодировать и кого как чтобы ордер знал категорию чтобы Family transform Ну ладно ему ничего не надо для обучения чтобы Random Forest уже был обучен знал дерево уже было построено это называется обученный pipeline и как его можно сохранить вообще вариантов много мы сохраним просто через библиотеку а через библиотеку J lip

можно сохранить вообще вариантов много мы сохраним просто через библиотеку а через библиотеку J lip делаем дам подаём сюда наш пайплайн и говорим куда его сохранить так сек [музыка] Да всё хорошо лежит там где надо ВС я его сохраняю я его сохраняю не обращай внимания мы его сохранили Теперь давайте провали в мое директории в папочку А И вот мы найдём здесь мы найдём здесь этот файл где он лежит вот он фай тол это это нечитаемый фаго Ну состояниями вы точно такой же вес будете сохранять когда

вот он фай тол это это нечитаемый фаго Ну состояниями вы точно такой же вес будете сохранять когда будете сохранять нейронные сети и их деплоить Вот и теперь представим что вот это ну у меня здесь Хоть и как бы но я типа Аля ваше приложение ваш код самое главное же модель донести сюда до стрита правильно долита что нам здесь понадобится Давайте начнём со следующих вещей с возьму чтобы показать и возьму просто эскал всё подгружает ошибка смотрите он говорит я не могу найти H imputer вспоминайте

возьму просто эскал всё подгружает ошибка смотрите он говорит я не могу найти H imputer вспоминайте в нашем вот этом пайплайн H imputer и Family transform они не в экосистеме срна это наши кастомные написанные классы правильно он знает внутренних состояний но он не знает скелета Поэтому в таких случаях надо делать что берёте и всё выносите в отдельный файл C Trans Я его назвал вообще по-хорошему как бы в реальных палах просто отдельно называют файл Transformers туда все трансформаторы кладутся

как бы в реальных палах просто отдельно называют файл Transformers туда все трансформаторы кладутся и потом импортируются вот как бы я все не буду перекладывать приложил только и Family который мы с вами вчера писали и теперь это отдельный файл То есть у меня есть сущность где я работал где я работа А где я работа ярата вфа вот здесь далее У меня есть где Трансформеры лежат и само приложение сюда я Если бы у вас не было бы кастомного трансформатора не нужно было бы отдельный файл но мне нужно Я

я Если бы у вас не было бы кастомного трансформатора не нужно было бы отдельный файл но мне нужно Я из этого C погружают ске а начинка уже всем известна всё вот он подгрузить Обрати внимание Вот пьютер например да достал если у мров я возьму юте и посмотрю вот он знает что первый класс надо кодировать возрастом 36 с по второй класс 29 третий 24 то есть всё подтянулась грамотно всё он знает о природе данных и всё прекрасно вот ну и проверим погружаем выборку тест вот она и Давайте предскажет

данных и всё прекрасно вот ну и проверим погружаем выборку тест вот она и Давайте предскажет Давайте предскажет Для всего этого тестового датасета Воля всё предсказывает а это значит что теперь пайплайн готов принимать данные в сыром виде и получать точность примерно так делают Вот например зайдём с вами не знаю Ару Да зайдём Ару берём берём оценка авто вот сюда встроена ML модель Да вот заполним все параметры вручную Ну вот вы начинаете выбирать например там не знаю берём берём Ну BMW Пусть

все параметры вручную Ну вот вы начинаете выбирать например там не знаю берём берём Ну BMW Пусть BMW берём третья серии то есть вот он начинает фичи собирать с вас да на оценку модели третьей серии Ну пусть год выпуска дцать первый кузов значит G20 Да тип кузова седан поколение вот оно автоматически потянулось потому что как бы это линеарные фичи вот далее двигатель бензиновый привод полный коробка передач а автомат Тут только один вариант он сам за меня заполнил модификация Ну вот пусть

коробка передач а автомат Тут только один вариант он сам за меня заполнил модификация Ну вот пусть пожёстче будет да руль слева цвет не знаю чёрный и собственно говоря ПТС Ну оригинал владельцы по ПТС Ну пусть будет три пробег 100.000 км то есть вот все фичи в прямом смысле собрались это вот как ваш Стрим понимаете В каком-то смысле можно не через файл Можно так Я хочу я к чему подчеркнул всё собралось в сыром виде видите не в кодированной удобно Ну собственно говоря нажимаем оценить оценки Нет

в сыром виде видите не в кодированной удобно Ну собственно говоря нажимаем оценить оценки Нет не знаю почему А мы не нашли достаточного количества автомобилей с похожим конечно литровым на полном приводе ты выбрал Ну да они что все только задние массово да плюс двушки в [музыка] основном ну короче вы поняли Давайте Ладно вс-таки добьём по что я хотел там Показать что доверительные интервал строится также BMW третьей серии седан бензин полный возм проу модиф будет руль слева цвет оригинал

строится также BMW третьей серии седан бензин полный возм проу модиф будет руль слева цвет оригинал владельца 2 100.000 вот Оцени бесплатно Ну собственно говоря помимо того что у них реальная оценка есть которая получилась Да они ещё строят доверительный интервал какой-то где может быт лежать Справедливая оценка Ну и варианты предлагать Но это по факту чистая мель история и вот вот это Мы тоже с вами будем проговаривать как это можно получить что собственно говоря Какие признаки тянут вверх

с вами будем проговаривать как это можно получить что собственно говоря Какие признаки тянут вверх одеяло Какие вниз Да относительно средне по рынку собственно говоря У нас тоже всё предиктивной Наго пассажиры берём можем вероятностном посмотреть на уровне на уровне уже округления ну короче получить точность предсказани Угу Так какие-нибудь вопросы есть ко мне комментарии есть давай это жёстко Всё спасибо Знаете такого Димит Резин не видели вырезку м с ним не буду говорить так [музыка] А тогда

спасибо Знаете такого Димит Резин не видели вырезку м с ним не буду говорить так [музыка] А тогда остаётся нам немножко проговорить ваше задание сегодняшнее ложать со вчерашним датасета вам нужно запустить все эти модели все модели которые есть Да Ну кто как бы не успевает хотя бы один из бустинга запустить а так на Бен То бишь Random Forest voting один из бунго можете запустить стекинг в том числе далее соответственно создать как бы получить модель и её результат можете прямо вместе со

том числе далее соответственно создать как бы получить модель и её результат можете прямо вместе со вчерашним файлом можете сегодня отдельно тут как бы я это сделал через график но можно как табличка как вчера мне в принципе без разницы без разницы то есть Поли все модели потюленить и собственно говоря лучшую модель попробовать задеплоить и создать интерфейс куда я бы как ваш пациент какие-то или нет вот да Оля а у меня вопрос я поскольку буду по видео всё проделывать Ну как туториал а Стрим ли

нет вот да Оля а у меня вопрос я поскольку буду по видео всё проделывать Ну как туториал а Стрим ли дальше продолжение то есть вот сейчас самостоятельно я за вас всём открываете то что Марк делал а то есть ну и вот этот вот а мы сделали Этот документ но потом если что когда на со звони мы проговори если Галку запишем потому что мы дальше будем много со Стрим делать шпаргалка у вас уже есть со Стрим видео вам Марк скидывал там всё рассказы Ну ладно Попробуй Посмотрю Да насчёт то что мы отдель

видео вам Марк скидывал там всё рассказы Ну ладно Попробуй Посмотрю Да насчёт то что мы отдель типа новский файл создавали для наших компьютеров туда закидываем а в том файле где работали мы их просто типа как функции также оставляем и не трогаем Да [музыка] Окей во-первых я Погугли проми резина не зря не могу успокоиться во-вторых в стрем лите сделать прямо набор признаков то есть как на автору чтобы он по порядку заполнял их и там условно какие-то лимиты поставить или сделать например просто

чтобы он по порядку заполнял их и там условно какие-то лимиты поставить или сделать например просто погрузку дасе этого можешь е раз пожалуйста повтори Ну в Стрим лите не помню ползунки либо через чере черешни Да Дада Ну как правило когда когда очень много фичей Тогда организовывают через файл подгрузка если фичей мало то создают какой-то интерфейс Вот Угу Так что тут фичей мало Я думаю что можно ползунки создать Вот Но в принципе если ты создашь через файл где просто напишешь что надо главно

ползунки создать Вот Но в принципе если ты создашь через файл где просто напишешь что надо главно пользователю сказать так в интернете всегда работало подгрузить файл мы примерно объясняем Да что в этом файле должно быть Поэтому если так сделаешь как бы у никаких проблем всё нормально Главное чтобы я закинул этот файл и у тебя именно дало предсказание уже Да ты как бы можешь какую-то интерпретацию дать как вот в автору сейчас я показывал Но именно самое главное предсказание уже да то есть как

дать как вот в автору сейчас я показывал Но именно самое главное предсказание уже да то есть как бы никакого обучения не будет модель работает только на inference только на предсказание она уже обученная вот как-то так угу Будь здоров Ну что Всё Давайте тогда за работу Хорошего вам продуктивного денёчка и Ну всё по классике работаем по старой схеме Давайте пока-пока Спасибо Пока

и А тут молоту что ли Так Доброе утро всем Кого видел кого не видел Давайте начинать Давайте начинать видно Хорошо Угу я вас не вижу мало камер включён Давайте не стесняемся включаем Так ну что сегодня сегодня сегодня у нас с вами день метрик достаточно на самом деле важный день потому что метрики дают некую Как сказать некую приложение в реальную жизнь эм алгоритм под разным углом можно посмотреть что есть Хорошо что есть плохо с одной стороны мо сказаться хорошо На самом деле это плохо и

что есть Хорошо что есть плохо с одной стороны мо сказаться хорошо На самом деле это плохо и наоборот В общем мы взглянем на всё это дело и метрики задач классификации греси отличаются поэтому мы начнём мы будем рассматривать отдельно начнём с метри классификации сегодня Как измерить что алгоритм хорошо решает зада Это зависит Итак мы начнём метрики с метрик классификации и А конкретно Конкретно сначала будем обсуждать бинарную классификацию как самый часто встречающийся случай вот смотрите вот

будем обсуждать бинарную классификацию как самый часто встречающийся случай вот смотрите вот у нас есть такой М такой так Такая табличка где-то мы с вами с ней уже встречались помните такое дело есть такая буква где мы это всё дело видели чуть ли не в первый день ВТО день это Альфа значение Ну мощность да то есть это статистика Всё верно по факту так и есть то есть статистика помнит кто-нибудь название вот этой четвёрки фантастической четвёрки да confusion либо матри ошибок она как правило

название вот этой четвёрки фантастической четвёрки да confusion либо матри ошибок она как правило както отре отс наоборот её все крутят вертят какого-то единого стандарта нет бедная Матрица её и транспонирующие Итак вспомним немножечко positive обк Ну как бы если Cat в выборке как единичка а не кошка как нолик единичка как нолик то как бы в прямом смысле мы говорим что Позитив объект то есть Обратите внимание по строчке Позитив Позитив это наша реакция а далее То есть вторая буква говорит о

внимание по строчке Позитив Позитив это наша реакция а далее То есть вторая буква говорит о нашей реакции а первая на самом деле говорит о реальности мы могли быть либо правы либо не правы правильно отсюда образуется True POS и Да как-то так тогда такое У меня к вам вопрос вопрос вопрос вопрос заключается в следующем А это ошибка какого рода Вы помните первого это первого негатив второго а сколько у меня здесь ошибка рода вероятно 05 примерно на самом деле Ну да 60 чно Вот так То есть если если

у меня здесь ошибка рода вероятно 05 примерно на самом деле Ну да 60 чно Вот так То есть если если кота не было на самом деле если кота не было да то мы как бы ложно уходим уходим ложно вот в таком количестве случаев в таком количестве случаев вот так Ну собственно говоря пойдём по Метрика пойдём по Метрика давайте я ещё здесь немножко продублируйте рисовать нам пусть у меня будет у нас будет с вами наша Матрица наша [музыка] Матрица будет реальная и предсказанная также но ориентировать её

с вами наша Матрица наша [музыка] Матрица будет реальная и предсказанная также но ориентировать её можно по-разному Ну давайте пусть будет Вот так актуальное и предсказанное значение соответственно единичка нолик единичка нолик True POS fse posse Ne и True одна Метрика нам с вами уже известна вы её запускали и это самая простая Метрика Метрика называется accuracy и ну ACC Да точность если так дословно наводить иногда её сокращают вот так пра ответов можете вот эту фразу долю правильных ответов

наводить иногда её сокращают вот так пра ответов можете вот эту фразу долю правильных ответов перевести на формулу вот исходя из этой четвёрки что это получается диагональ поделить на всё Угу поде на всё да то есть вот это это на это правильные ответы Да а снизу POS п fse POS п fse Ne п в знаменателе все наши с вами ответы то есть доля правильных делить на всё Да как бы в картинке это тоже Легко легко ВС посчитать То есть это 90 п 940 делить на всю эту сумму это и был наш Как вы думаете В чём

легко ВС посчитать То есть это 90 п 940 делить на всю эту сумму это и был наш Как вы думаете В чём эта Метрика может быть несовершенны если у нас не пропорциональные классы Так ну предложим прона в чём проблема будет в мы всех классифицируемым в 99% это нафиг никому не нужен всё равно Да да Абсолютно верно А давайте посмотрим на примере пример будет у нас следующий мы будем с вами классифицировать мошенников классифицировать мошенников Ну то есть задача У вас есть какой-то м предположим У вас

мошенников классифицировать мошенников Ну то есть задача У вас есть какой-то м предположим У вас есть какой-то какой-то сервис Куда люди могут выкладывать свои объявления продавать свой старенький велосипед и всё что угодно Да А вы как бы уже автоматически есть какая-то то есть я написал объявление автоматически оно выкладывается понятно что как бы без мошенников никак не обойдётся и нам необходимо по входным данным данные уже за вас собрали модель построили как-то классифицировать а мошенник

по входным данным данные уже за вас собрали модель построили как-то классифицировать а мошенник это или нет Если мошенник соответственно мы его баним если не мошенник то нет выборка у нас с вами следующего характера это валидация выборка выборка валидации Да и предположим Она имеет следующую историю мошенники будут иметь метку единичка Ну пусть вот так вот будет 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 10 10 объектов выборки Вот так и мы сравним с вами два предсказания предсказание оди и предсказание 2

10 объектов выборки Вот так и мы сравним с вами два предсказания предсказание оди и предсказание 2 предсказание оди оно будет очень простым типа ну зачем мне ML Зачем мне ML я я я пацифист Я верю что все не мошенники мир розовый и всё прекрасно будет то есть я предсказываю без всякого Эля что все нолики в таком случае у меня accuracy Score Сколько получается 07 да то есть 70% точно алгори какая-то и плохая Да точность вот ну и возьмём более другой алгоритм который как бы это ML алгоритм

какая-то и плохая Да точность вот ну и возьмём более другой алгоритм который как бы это ML алгоритм обученный там все дела [музыка] вот пусть он вот так работает сейчас секунду 1 2 3 вот сколько у нас здесь с вами 0 да 0 то есть в 6% случаев мы Вер так вот если бы мы с вами вот вчера Вы когда решали задачу поиска проблемы с сердцем мы с вами В каком-то смысле оперировали только ри в контекст у нас Ну вот это предсказание лучше да про мошенников А здесь мы ни одного мошенника не нашли верно во

Ну вот это предсказание лучше да про мошенников А здесь мы ни одного мошенника не нашли верно во втором случае мы нашли аж двух из трёх мошенников да то есть вот этот пойман ушёл в бан нужно как бы для всех нужно вот предсказание сравнивают с актуальным пойман пойман только вот этот оказался Не пойман Да начинают страдать ещё как кое сги намерения обя обходится в системах это как бы вот это у нас какая ошибка будет Вот такие срабатывание абсолютно вот ну всё-таки мы наверно хотим ловить

у нас какая ошибка будет Вот такие срабатывание абсолютно вот ну всё-таки мы наверно хотим ловить мошенников Поэтому нам надо как-то под другим углом посмотреть как бы упущенный мошенник это у нас какая с миб тся сфокусироваться именно на вот этом негативе Да а вот эта формула она размывает она одинаковый вклад даёт и пози и нети а возможно нужно смотреть как бы под разным углом вот Сержа ещё более радикальный пример привёл чем я да то есть если у вас 99% было бы не мошенников и 1% мошенников

радикальный пример привёл чем я да то есть если у вас 99% было бы не мошенников и 1% мошенников то сказав что все не мошенники у вас [музыка] 09 вас на самом деле никакого Как такового нет просто идт предсказание что все нули Поэтому нам нужны метрики которые смотрят под другим углом а Конкретно смотрят отдельно насколько хорошо Мы работаем СФ позитивом и СС негативом да и такие метрики есть мы с Тамарой ходим парой их две одна контролит другая И начнём сводится поэтому советую на английском их

Тамарой ходим парой их две одна контролит другая И начнём сводится поэтому советую на английском их воспринимать и так собственно говоря в голове у себя держать есть есть есть де п Вот такая формула этой метрики обязательно переварите вот эту штуку Да что делится на что и сейчас у меня будет по этому поводу вопрос давай пока прано слова Ну хорошо хорошо но я как стрельбе из лука когда считает Сколько раз ты попал там как-то читается попал по данной цели и попал в общем и в общем стрельнул

Сколько раз ты попал там как-то читается попал по данной цели и попал в общем и в общем стрельнул направление это из эти два понятия из стрельбы из лука спортивной то есть думаешь оттуда пошло в Возможно не знаю вот ну ладно как бы я советую вс-таки запомнить как и prision вот prision [музыка] вопрос У меня к вам такой я ваш это вот очень важно метрики переваривать и переводить на русский язык как я вам говорил в одну сторону важный мост уметь оцифровывать ваши идеи мысли Да например не знаю Вы

я вам говорил в одну сторону важный мост уметь оцифровывать ваши идеи мысли Да например не знаю Вы хотите не сеть которая умеет играть в шахматы шахматы - это информация её надо суметь оцифровать правильно Это чисто мои УМО умозаключения очень хороший навык когда информацию получается приложить цифру обратная сторона цифру как бы вернуть на язык наш русский и вот собственно говоря я ваш там коллега Из соседнего отдела Да который как бы не знаю Или я вообще продакт-менеджер вот этого сервиса

Из соседнего отдела Да который как бы не знаю Или я вообще продакт-менеджер вот этого сервиса соответственно мне бы хотелось понимать в мой продукт сейчас будет внедрять ль у этого эме prision предположим 08 Вот можете мне русским языком объяснить Я понимаю что такое Что такое Не пойман и вот русским языком мне прок менеджер объяснить что значит Рав 08 мне вот эти ваши фти позитивы ни о чём не говорят что мы в 80% не ошибаемся при поиске этого мошенника ну как-то сложно вот на уровне действий

что мы в 80% не ошибаемся при поиске этого мошенника ну как-то сложно вот на уровне действий уже можешь сказать то есть с вероятностью 08 мы поймаем мошенника Среди кого среди Нет неправильно Так ребят если вот у вас подняты руки Это уже ответ Давайте тогда по порядку по-моему Люба первая поднимала Люба давай твой вариант Ну я так поняла что это на вот наш предсказывает говорит эти ребята [музыка] Моники действительных мошенников Угу близко близко Ну в принципе да достаточно правильно Ну Бул

Моники действительных мошенников Угу близко близко Ну в принципе да достаточно правильно Ну Бул Серёжа может тоже сформулировать Я бы ещё чу-чуть по-другому сформулировал но Люба говорит уже правильно на самом деле Давай Бул из всех Грубо скажу дети мошенников мы поймали только восьмерых из десятерых Как ещё раз из всех десяти мошенников мы только восьмерых поймали Нет неправильно Серёжа меня очень на лю похоже Ну из всех наших меток которых мы модель выдала как POS на самом деле Ну типа 08 из

на лю похоже Ну из всех наших меток которых мы модель выдала как POS на самом деле Ну типа 08 из них правда поте Да вот это правильно просто Старайтесь иногда на уровне действий говорить то есть я бы так сказал что среди всех среди всех тех кто будет Улетать в бан по делу туда улетело 80% потому что давайте для всех смотрите в знаменателе True positive п fse positive это вот эта штука луба Это кто такие как ты их Объедини едино вот эти две группы и об мошенники в реальности мошенники нет в

кто такие как ты их Объедини едино вот эти две группы и об мошенники в реальности мошенники нет в целом типа как ну мы их подели типа в класс типа мошенники такого смотри есть две плоскости есть плоскость реальный мошенник Вот ты мо Вот ты реальный мошенник нет правильно кто знае соответственно есть од плоскость это иго дело говори тебе понял Угу Так вот вот вот эту группу всех объединяет это кто это реальные мошенники или кого мы считаем мошенниками кого мы считаем мошенниками Абсолютно верно

это реальные мошенники или кого мы считаем мошенниками кого мы считаем мошенниками Абсолютно верно потому что видишь это предсказание то есть вот где мы предсказали что это мошенники То есть это не факт что как бы все будут реально мошенника пото что есть POS мы можем сказать что мошенник он был не мошенник получается что как бы вот перевариваем да среди всех кого мы назвали Моника все кто попадают сда улетают в бан автоматически мы же хотим автоматизировать систему правильно числители вот этот

сда улетают в бан автоматически мы же хотим автоматизировать систему правильно числители вот этот Квадрат это те кто оказались реальное мошенники Итого то давай подытожим с тобой Да ну давай я прок менеджер ещё раз поиграем в эту игру 8 Ну короче типа 80% кого мы считаем мошенниками являтся Да да я говорю лучше сразу ещё на уровне действий говорит среди всех кто улетает в бан Ани улетят в бан кого мы считаем мошенниками 80% улетели туда по делу 20% хороших ребят зацепило случайно как-то так

кого мы считаем мошенниками 80% улетели туда по делу 20% хороших ребят зацепило случайно как-то так всем ли Понятно или У кого-то остались вопросы не стесняемся задаём хорошо [музыка] быстрый математический вопрос А в нашей модели где мы предсказываем только нули мы не можем посчитать престижем то что мы будем делить считат его равным нулю стат его равно Ну условно Хотя как бы либо нулю либо нану либо нулю либо на понял Настя а про соотношение Альфа и беты к этому ко всему да можно про запить

либо нулю либо на понял Настя а про соотношение Альфа и беты к этому ко всему да можно про запить Альф и бету правильно Ну тут пря запиш на самом деле Просто я единственно бы что запил бы сказал бы что prision контролирует ошибку рода она в неявном виде тут то есть она не прям вот как бы ошибка перво рода это немножко другое но как бы именно само количество ошибок Что является ошибкой первого рода я бы сказал что prision - это контроль ошибки первого рода чем на ошиб первого второго рода они в

я бы сказал что prision - это контроль ошибки первого рода чем на ошиб первого второго рода они в принципе достаточно как бы сказать эквивалентны друг другу Но более часто как бы и набе вас будут лучше слушать Если вы будете оперировать Именно поэтому воспринимать что prision Обратите внимание здесь другой ошибки нету здесь есть только ошибка верно поэтому prision контролит ошибку первого рода Вот так бы Вопрос такой так свал понял Сколько невиновных было поймано обратно 20% Нет нет нет не

Вот так бы Вопрос такой так свал понял Сколько невиновных было поймано обратно 20% Нет нет нет не совсем нет не Почему я поймал 80 это ошибка первого рода Это значит что в реальности была Короче надо надо смотреть вот как бы на вот эту плоскость по факту вот эту то есть относительно реальности Надо смотреть чтобы получить реальную Аль поется получается сколько невиновных поймано и сколько виновных упущено вместе А сколько мы просто дали правильных отве Я в контексте нашего этого примера Ну в

упущено вместе А сколько мы просто дали правильных отве Я в контексте нашего этого примера Ну в контексте нашего примера сколько правильно выбрано целевых действий доля правильных целевых действий банить или не банить нельзя говорить как бы ты не знаешь Какою пропорции у тебя вот эта Метрика не Дат опуститься до этого уровня она чтот правильны ответ будет доля правильная правильных действий Да если у тебя но во значит в 80% случаев ты будешь прав не забаненного не забанил А ну не не мошенника

у тебя но во значит в 80% случаев ты будешь прав не забаненного не забанил А ну не не мошенника не забанил мошенника забанил а ниж не надо проваливаться в кирус вы уже глубоко смотрите глубоко пошли глубоко лезете всё что надо воспринять что Руси никак не смотрит по отдельности Эти ошибки первого второго рода а значит не даёт нам информации вообще о том а конкретно Да что мы делаем с мошенниками что мы делаем с не мошенниками А вот две метрики которые мы сейчас разберём По отдельности Они

что мы делаем с не мошенниками А вот две метрики которые мы сейчас разберём По отдельности Они показывают это ну ладно подожду Угу Так prision вторая Метрика рекол вторая Метрика рел или полнота Ну тоже лучше просто на английском воспринимать Она кстати кстати сейчас погодите перед реком Давайте посчитаем чему у нас равны жены для вот этих двух предсказаний есть prision о предсказание Ну тут как бы prision о смотрите у нас Т Позитив сколько здесь вот для вот Сопоставьте вот эти две выборки Ну

бы prision о смотрите у нас Т Позитив сколько здесь вот для вот Сопоставьте вот эти две выборки Ну тоже 0,7 будет разве ноль не Почему ноль Мы же вообще Позитив не говорим ни разу у нас даже Позитив объекта ни одного нет у нас всё негатив объект всё нули Ну да сорано вообще по-хорошему выйдет 0 / 0 вот поэтому её обозначают либо нулём либо нано Ну поставим Ноль это в общем в любом случае не информативно и плохо А теперь давайте посчитаем prision 2 Давай ко вместе с тобой посчитаем вот у нас

и плохо А теперь давайте посчитаем prision 2 Давай ко вместе с тобой посчитаем вот у нас есть формула Да вот у нас есть предсказание вот у нас есть реальность Угу можешь прямо последовательно собирать датив - это наши о и оди их сколько здесь два два случая да то есть вот они Да fse POS идёт первым 2 3 4 это первым потом какой там шестой и последний три их и соответственно всего пять в знаменателе 2 п 3 то есть Вот как получается что у нас пять человек уходит в бан из них по делу то ушло туда

2 п 3 то есть Вот как получается что у нас пять человек уходит в бан из них по делу то ушло туда только два правильно но это лучше чем то что было в любом случае Ну вот тако 04 получился 25 хорошо Так теперь тогда переходим к ре Rec - это True POS делить на True POS п false neive Как вы видите Всё остаётся тоже самое меняется только ошибка на которую мы смотрим была fse POS стала Ne То есть как бы л контролирует ошибку другого второго рода или Ne опять же переварить эту формулу да то есть вот

бы л контролирует ошибку другого второго рода или Ne опять же переварить эту формулу да то есть вот это делить на Вот это и собственно говоря на языке опять же я продакт-менеджер объясните мне что бы это могло значить Давайте только я хочу послушать кого-нибудь кого сегодня не слышал Оля Давай с тобой так а что-то тут такая хитрая штука вот прин Понятно А тут значит True POS это сначала Начни Извини перебью тебя вот смотри вот POS плю fse negative Начни со знаменателя это вот эти ребята что их

перебью тебя вот смотри вот POS плю fse negative Начни со знаменателя это вот эти ребята что их объединяет это которые действительно Хулиганы и Ne это которые значит они не Хулиганы Но на самом деле хулиганами являются Я даже наверно не со всем это имел ты как близко смотришь но Смотри вот этот квадрат и вот этот квадрат их объединяет то что это актуальное состояние единица То есть это да мы всех мы их всех отправили куда-то не мы с ними ничего не делаем это актуально льно это реальность это

мы их всех отправили куда-то не мы с ними ничего не делаем это актуально льно это реальность это знат это все реальные мошенники вот это все реальные мошенники Видишь А да я понимаю всё поняла значит А мы из всех реальных детектировать только столько-то всё я поняла внизу они все ра 07 Это значит что а это значит что мы только 7% из а 30% прошли нашу систему и обманули людей и так далее уже все для как для платформы имеются вот проще интерпретировать Чем всем ли понятно с лом то есть на 100 на

как для платформы имеются вот проще интерпретировать Чем всем ли понятно с лом то есть на 100 на 10 мошенников се мы поймаем три пройдут нашу систему безопасно мне кто-то сказал из учеников я вот по-другому запоминал чтобы не путать как бы всегда вот ПП 3п значит жен вот а ПП и не п значит несин То бишь л по остаточному принципу можете Вот такую систему взять на вооружение вроде как действенная всё соответст Повтори ещ раз пожалуйста Ну 3is prision тоже с буквы начинается вот а то есть здесь

всё соответст Повтори ещ раз пожалуйста Ну 3is prision тоже с буквы начинается вот а то есть здесь непре Да значит л хороший способ достаточно Выходит так так так так [музыка] са глав выбо когда не сбалансирован часто с этим сталкиваешься Да есть такое понятие мажоритарный и миноритарный Класс Класс большинства класс меньшинства как правило нас интересует класс меньшинства мошенники Да там класс меньшинства те кто у нас потенциально бы купил увидев рекламу их будет меньшинство понятное дело Да

меньшинства те кто у нас потенциально бы купил увидев рекламу их будет меньшинство понятное дело Да там не знаю заболевани когда мым потенциально их меньшинство и много разных историй вот собственно говоря precision мы его с вами проговорили Rec мы его с вами проговорили есть некая агрегация prion агрикола называется Метрика F1 Score и у меня такой вопрос К вам F1 Score у меня какое может принимать минимальное и максимальное значение ну Дони Может ли Престиже быть одновременно единицами нет А

минимальное и максимальное значение ну Дони Может ли Престиже быть одновременно единицами нет А мне кажется да е сде прави Мне тоже кажется что даме обе выбо стопроцентно всё ни одного промаха довели систему до совершенства Да система принятия решений поэтому конечно максимально они могут быть единиц в таком случае F1 спор у нас с вами равен чему выходит одному Почему Или ты просто Привет передаёшь вотт так хотя анимацию в общем да равно одному а соответственно Ну как бы ноль сложно получить но

вотт так хотя анимацию в общем да равно одному а соответственно Ну как бы ноль сложно получить но считается что F1 Вот он в диапазоне от нуля до одного чем ближе к одному тем лучше это как бы если попытка некая попытка агрегировать и престижен рекол более того более того В общем виде эта Метрика называется F сра F СР F Score вообще Вот видите сколько здесь разных метрик есть вокруг вот этого квадрата хорошая картинка на самом деле можно позалипать в неё вот всяких разных приколюхи метрики это л

хорошая картинка на самом деле можно позалипать в неё вот всяких разных приколюхи метрики это л Там и так далее и я-то хотел чего я вообще хотел F сра где он здесь F Нет мне нужно не в таком виде А вот F СР Вот видите Вот вот в общем виде формул вот так у Вас кстати сегодня будет одно задание про это если вдруг вы хотите дать больше вес жену или больше вес лу в зависимости от задачи Нельзя просто бы Понимаете вот нельзя сказать какая ошибка важнее от задаче к задаче может быть разная у кого-то

бы Понимаете вот нельзя сказать какая ошибка важнее от задаче к задаче может быть разная у кого-то улуя в его данных в его постановке задачи Да на работе там может быть больше пози важнее да у Саши может быть соответственно нети как бы поэтому в общем виде это называют F просто да И вот этот бета будет разв вро одного Итого бе ра о когда бе ра О получается ровно та формула которая у меня в лекции д и 2 де на п и называют Ну при бета равном о логично что это называют F1 с вот чаще всего F1

д и 2 де на п и называют Ну при бета равном о логично что это называют F1 с вот чаще всего F1 просто используют и не парится но тем не менее иногда меняют Так теперь немножко посмотрим как это могло бы быть в случае если бы у нас была бы если бы у нас с вами была многоквартирному может быть срочное обычное и см и как бы мы хотим классифицировать пака может быть может разложить соответственно строим модель принятия решения как в таком случае считать смотрите в таком случае можно считать

строим модель принятия решения как в таком случае считать смотрите в таком случае можно считать следующим образом у нас будет отдельно трина отдельно три ла по каждому классу например берём prision normalis Normal для него как бы даже давайте Нет давайте возьмём вот этот чтобы рисовать было удоб льно для нас соглас то есть вот это вот как бы а вот это всё это где мы сказали что спам напоминаю у нас с вами это Среди всего того что мы назвали спамом Сколько было реально спам То бишь 200 де 230 то

с вами это Среди всего того что мы назвали спамом Сколько было реально спам То бишь 200 де 230 то есть вот этот квадрат делить на всю вот эту из всех кого мы назвали нормальными письмами А это аж 115 писем 60 действительно по делу остальные Ну как бы возникают небольшие У нас тут приколюхи ошибки также соответственно сарн приколу та же самая история то есть л класса Normal говорит о том что среди всех нормальных писем среди всех нормальных писем а их было 100 штук мы правильно классифицировали

всех нормальных писем среди всех нормальных писем а их было 100 штук мы правильно классифицировали 60 ошиблись подробности здесь не уточняем куда конкретно ошиблись просто ошиблись Итого получается у нас с вами здесь л там 06 Да ну можно всё вот это дело в общем считать здесь там Л 05 Ну и здесь какой-то рекол там примерно Получается примерно 08 примерно ну можно всё также почитать сси вопросы достаточно всё в принципе так Понятненько можно ещё раз повторить типа определение жен и Rec Угу Ну

достаточно всё в принципе так Понятненько можно ещё раз повторить типа определение жен и Rec Угу Ну давай ты ещё раз нам тогда Повтори вот жел вот у тебя формулы перед глазами Ну в плане Ну короче типа прин - это сколько мы счита Ну кого мы считаем того в бан Да столько процентов вот смотри вот возьмём один объект выборки Запомни тут есть две сущности вот тебя ещё раз возьмём как объект выборки ты выложил объявление продаю старенький велосипед предположим соответственно есть две плоскости в

ты выложил объявление продаю старенький велосипед предположим соответственно есть две плоскости в действительности ты мошенник или не мошенник и есть другая плоскость как мы тебя считаем как система мошенникам или не мошенникам понял две плоскости то есть одна - это наша реакция это вот вот с этой стороны с лева направо да мы считаем либо тебя мошенником либо не мошенником с другой стороны Ты в реальности мошенник или не мошенник Угу Ну вот тогда получается prision что у тебя такое смотри на

реальности мошенник или не мошенник Угу Ну вот тогда получается prision что у тебя такое смотри на формулу вот формула тебе всё ответит то есть вот это все это кто э кого мы считаем мошенником Красава Так а в числителе у нас типа по факту мошенники теперь полностью сформулируем эту мысль жен равен 0,8 это значит То что мы поймали типа реальных мошенников среди тех кого мы считаем мошенниками Ну да да да среди тех кого Мы считали мошенниками доля реально поймано точнее правильно поймано

Ну да да да среди тех кого Мы считали мошенниками доля реально поймано точнее правильно поймано правильно поймано вот как-то так Ну что ж идём дальше соответственно смотрите как-то бы хотелось бы чтобы вот этих нов сейчас на плоди мас Ладно не три а 10 классов хотелось бы ещё какая-то общая агрегирующие Микро усреднение это касается макро Micro prision макро микро recol а макро микро а F1 Там и так далее первое первое я их ВС сам путаю Вот это маро маро это когда мы берм три и просто их

Там и так далее первое первое я их ВС сам путаю Вот это маро маро это когда мы берм три и просто их усреднять по отдельности Они сделаны как бы матрицами это вот все вот эти вот значения просто свёрнутые в матрице в едины и получаем вот такую историю как вы думаете в чём в чём проблема может быть вот этого мы теряем информацию по классам наверно не то чтобы по классам по классам мы в любом случае потеряем информацию вот такой усреднение говорит о том что все получили вес 1/3 каждый престижен

потеряем информацию вот такой усреднение говорит о том что все получили вес 1/3 каждый престижен получил вес 1/3 а а если бы у меня вот этих было бы всего срочных писем а их так и есть их там очень мало там 10 этих 100 этих тысячи То есть как бы мы получается игнорируем этот факт у нас 086 может получен быть на пти элементах выборки зде полноценно тянет на себя одеяло вот чтобы собственно говоря нивелировать этот эффек можно сделать по-другому мы просто берм вот как бы смотрим для ent как у нас

этот эффек можно сделать по-другому мы просто берм вот как бы смотрим для ent как у нас было бы мы вот 8 вот он Да это вот эти это мы сказали что было срочное письмо но оно оказалось не срочным То бишь 11м вот э ког срочное письмо А оно было срочным пролили Да вот ну и соответственно ВС Вот это остальное дело мы сказали не срочно это действительно было не срочно 340 так считаем по каждому классу в идеологии что где мы правильно приняли решение где нет В итоге просто суммируем эти матрицы

в идеологии что где мы правильно приняли решение где нет В итоге просто суммируем эти матрицы получаем такую матрицу это можно назвать где мы были пра когда мы сли когда бы где мы сказали когда было там и так далее ну короче вот в этой матрице ВС усредни страшного если не успело ещё будет очень много времени осознать сейчас не Старайтесь особенно в этом блоке тут есть вся информация чтобы вы без меня это посмотрели второй раз варили достаточно Как бы не так сложно не так сложно Ну возможно

без меня это посмотрели второй раз варили достаточно Как бы не так сложно не так сложно Ну возможно Время нужно да для себя чтобы понять ты сказал это когда мы провалили а как запомнить Ну просто провалили тоже я когда пролили я не имел в виду что именно на нети просто совершили ошибку А всё понял Вот такая вот история в принципе в принципе вот они как бы precision Rec ACC F1 всё Все разобраны у нас с вами есть такая особенность короче есть такая особенность что все вот эти метрики Как вы

у нас с вами есть такая особенность короче есть такая особенность что все вот эти метрики Как вы думаете В чём их минус точнее Какую мы информацию теряем Вот вы уже строили классификаторы и вы помните Они что они дают не сразу единичку либо ноли А что они дают вероятность А смотрите А мы здесь по факту всё считаем округлённое Да уже вот везде и у меня когда вот эти тру пози считаются два объекта так Может из этих двух объектов на одном мы еле как дотянули до того чтобы сказать это единичка а на

Может из этих двух объектов на одном мы еле как дотянули до того чтобы сказать это единичка а на другом Мы были уверены в общем хотелось бы какую-то метрику которая позволяла бы оценить насколько хорошо Мы работаем ещё на уровне вероятности понимаете Мысль о ЧМ Я говорю и когда все округлённые когда Я мошенник это луба мошенник например Может мы с разной степенью мошенники и вот как-то бы вот эту вот историю уловить чтобы посмотреть классификатор насколько хорош не только в округлённое А ещё и

вот историю уловить чтобы посмотреть классификатор насколько хорош не только в округлённое А ещё и на уровне вероятностей плюс это иногда нужен для ранжирование да для ранжирования например там не знаю Гуглу нужно в поиске выдавать какие-то релевантные странички бы нужно принять решение е и на осно вероятности делать поэтому нуж метрики какие-то которые хоть как както цепляют у кого-то микрофон включён сть у тебя выключ пожалуйста и соответственно мы с вами разберём Две таких метрики Но самое

включён сть у тебя выключ пожалуйста и соответственно мы с вами разберём Две таких метрики Но самое главное мы рассмотрим примере метрики роук вот сейчас пойдёт сложно как не так сильно сложно но посложнее то то что было посложнее того что у нас было пока я рисую Можно вопрос прежде чем начнём про руко Давай можно Давай Давай тут мне вчера выдали вопрос на интервью который звучит просто типа звучит как что показывает 02 ипре 03 собственно вопрос к тебе просто в том что ожидает интервьюер в

звучит как что показывает 02 ипре 03 собственно вопрос к тебе просто в том что ожидает интервьюер в ответ на этот вопрос что Сва ответ или что всё плохо или что или На каком уровне глубины отвечать на такое Ну просто вот как вот мы с вами отвечали точно также а плохо Как я могу рассуждать плохо может 03 это очень хоро раше бы но 03 Может это хорошо всё относительно плохо Хорошо не берите на себя этот груз ответственности рассуждать пока вы не знаете контекст Вы можете просто проинтерпретировать

груз ответственности рассуждать пока вы не знаете контекст Вы можете просто проинтерпретировать Что значит цифра 03 А это то упражнение которое мы с вами сейчас проделывали когда я Вас спрашивал prision 07 что для нас значит рекол 06 вот ровно так я считаю нужным ответить хорошо вот Давайте ещё тогда ладно один вопросик как раз увидел я что мы с вами рекол не посчитали какой рекол здесь у нас будет у первого и какой рекол будет у второ давайте у первого поможет мне посчитать поможет мне

нас будет у первого и какой рекол будет у второ давайте у первого поможет мне посчитать поможет мне посчитать Серёжа Чернышов так первого смотрим получается 2 де 2 плюс погоди Давай давай порядку вот у нас напоминаю Вот это наше предсказание Вот это реальность Давай True POS смотрим True positive это значит где мы сказали единичка и мы были правыми правильно а получается ноль може может что Абсолютно верно У нас даже нет ни одного Позитив решения Да мы ни одного мошенника нет хорошо ноль Здесь

верно У нас даже нет ни одного Позитив решения Да мы ни одного мошенника нет хорошо ноль Здесь тоже ноль теперь ЛС негатив Давай найдём три Абсолютно верно три Вот они да три нуля которые были неправильными пропустили мошенников очень обидно и плохо Итого наш рекол равен но рекол равен Ноль это значит что это значит что мы вообще не ловим мошенников Ну по что мы пацифисты Конечно мы их здесь не ловим это стоило ожидать всё хорошо спасибо Так и Давайте л посчитаем л 2 Сашей так по это два Да вот

это стоило ожидать всё хорошо спасибо Так и Давайте л посчитаем л 2 Сашей так по это два Да вот они у нас два объекта да Угу два пойманных мошенника Угу Так поделить на Д плюс а один да один вот он непойманный да то есть вот из этих трёх скажем так из этих трёх негодяев мы двоих поймали один прошёл у нас Значит мы можем утверждать что с вероятностью 67% мы находим мошенника хорошо Ну что ж теперь теперь Теперь мы с вами пойдём в сторону метрики Роу Потихоньку Сейчас я всё сотру это нам всё не

теперь Теперь мы с вами пойдём в сторону метрики Роу Потихоньку Сейчас я всё сотру это нам всё не понадобится больше можно пока ты стираешь я скажу поделюсь своим опытом короче я вот этот рок аук когда повторяла я потом реально вот уснуть не могла У меня просто какие-то вот как посчитать Почему мы поворачиваем направо просто какое-то мучение было Потом я нашла объяснение Дьяконова Я кстати его видела в сириусе он нам лекцию читал вот Александр Дьяконов но он правда из 3 часов 2 с по занимался

в сириусе он нам лекцию читал вот Александр Дьяконов но он правда из 3 часов 2 с по занимался само восхваления а потом полчаса вот мне вот вот помогло вот это там прямо по шагам написано как строится эта кривая хорошо ребята беже понимание доходило у Так сейчас я вспом вот так Дато источниками инфы если что-то дополнительное Потому что я в полной мере просто физически не успеваю Да раскрыть где-то поэтому какие-то дополнительные дополнительные дополнительные истории всегда будут полезны так

поэтому какие-то дополнительные дополнительные дополнительные истории всегда будут полезны так соответственно здесь у нас Мне нужен Сейчас объясню что это такое здесь делить на п так так так Ну что ж будем потихоньку начинать сри для рока ука Мне нужно ещё две вспомогательные метрики две вспомогательные метрики первая из них называется True positive Raid Но на самом деле она не новая это уже Метрика нам знакомая просто она называется по-другому у неё два названия есть что это за Метрика прикол

нам знакомая просто она называется по-другому у неё два названия есть что это за Метрика прикол прикол примерно не знаю зачем так придумали Ну приходится играть по их правилам Да так как это общепринятые какие-то названия вторая Метрика - это false positive Raid то есть есть True positive Raid и есть - это вот эта штука делить на вот эту Давайте ещ раз вместе с вами переварите мошенников что эта Метрика для нас значит ещё раз играем в эту игру Я прокт менеджер вы команда аналитиков у вас ра 03

Метрика для нас значит ещё раз играем в эту игру Я прокт менеджер вы команда аналитиков у вас ра 03 чтобы это значило для нас кто прям однозначно знает лучше пока это хочу чтобы все подумали посуда Так ну что рассуждали Насть давай с тобой попробуем проинтерпретировать Ну мы берём всех невиновных и и задаём вопросом Ну где мы облажались в смысле обвинили обвинительный приговор Зря Зря Ну да короче получается что в мете все тето бы с благими намерениями выложил Да у нас объявление а в числители

получается что в мете все тето бы с благими намерениями выложил Да у нас объявление а в числители те кто улетели в бан То есть это доля пострадавших людей среди хороших доля пострадавших людей правильно пос Хочется больше или меньше бу к тебе вопрос конечно меньше конечно меньше а хочется больше или мечем ще правильно [музыка] говорим Обратите внимание Они вот в параллельных как бы видите плоскостях то есть True POS показывает долю найденных нами мошенников А fse positive показывает сколько

то есть True POS показывает долю найденных нами мошенников А fse positive показывает сколько мирных людей страдает конечно хотелось бы чтобы вот это стремилось к нулю а вот это стремилось к единице именно этим мы сейчас примерно и будем заниматься у нас есть ещё одна точка манипуляция У нас есть ещё одна точка манипуляции и за счёт неё мы будем манипулировать этими Так что мне нужно будет давайте мне наверное нужно Бут вот эти две таблички третья вам останется для примера вот эти две Тачки

мне наверное нужно Бут вот эти две таблички третья вам останется для примера вот эти две Тачки предположим Ну что ж Давайте предполагать секунду Что за бред Что странно система Ну ладно плохой редактор Видно вам таблицу нормально нормально хорошо то чтото он не хочет растягивать смотрите что у нас есть с вами Вот это у нас с вами выборка валидации вот э вот выборка валидации у нас в ней лежит семь объектов выборки предположим можно сыграть в ту же игру мошенник не мошенник На Семи элементах

семь объектов выборки предположим можно сыграть в ту же игру мошенник не мошенник На Семи элементах выборки мы с вами будем тестировать Вот это кстати очень важная Метрика сейчас внимательно слушайте будет достаточно непросто но если поймёте как бы может быть не сразу а потом это вам даст принципиально новый Горизонт мышления относительно вообще того как устроена Да оцифровка результа вот есть выбор валидации первым ша мимы делаем туже самую валидацию Но мы сортируем вот это самый важный шаг мы

валидации первым ша мимы делаем туже самую валидацию Но мы сортируем вот это самый важный шаг мы сортируем выборку по вероятностям Вот видите по принятию нашего решения сверху это те кого мы как бы считаем более вероятно мошенниками и так далее То есть id4 самый подозрительный самые подозрительный са подозрительно объявление разметка что было на самом деле в идеальной системе я бы наверное хотел согласитесь чтобы все единицы были сверху А все нолики снизу согласны понимаете о чём я говорю но

согласитесь чтобы все единицы были сверху А все нолики снизу согласны понимаете о чём я говорю но тут К сожалению так не получилось теперь теперь мы будем с вами рисовать график потому что Рок аук это аббревиатура рок я не помню как всё время забываю аук - это к То есть это площадь фигуры под графиком площадь фигуры под графиком поэтому Нам нужен Вот график что мне понадобится для этой истории мне понадобится две оси по одной из них я отложу F POS по другой я отложу POS далее [музыка] Далее всё

понадобится две оси по одной из них я отложу F POS по другой я отложу POS далее [музыка] Далее всё вот это то что я рисую пока не обращайте внимания Так 1 2 3 раз 2 3 Так ну что ж сейчас мы с вами сначала сыграем в простую игру эта игра Никак Даже не связано с математикой Просто сыграем знае как паркетчик был у вас на паскали паркетчик типа когда нужно запрограммировать так чтобы если стенка то он обходил её влево вправо вперёд назад так вот у нас про кичик змейка как угодно мы сейчас будем

он обходил её влево вправо вперёд назад так вот у нас про кичик змейка как угодно мы сейчас будем стартовать с вами с вот этой нижней точки с нижней точки и и и и пойдём Вот вот в эту сторону вниз если я встречаю единичку то я делаю шаг вверх если я встречаю нолик я делаю шаг вправо Итак поехали первым делом я встретил единичку правильно дальше нолик я делаю шаг вправо далее У меня единичка далее У меня опять ноли не терте да то есть единичка ноли единичка нолик и опять единичка а потом нолик

У меня опять ноли не терте да то есть единичка ноли единичка нолик и опять единичка а потом нолик нолик эта игра гарантирована эта игра гарантирована начинается в точке 0 0 и эта игра гарантированно заканчивается в точке 1 Вот только путь у всех разный понимаете то есть вариантов Как туда добраться очень много И вот это очень важная история то есть вот у нас точки теперь как и любой график нам в школе объясняли график строится пото точки есть координа они соединяются так их строит и в том числе

объясняли график строится пото точки есть координа они соединяются так их строит и в том числе и так далее мы с вами так и сделаем У меня две оси Ну значит я так и сделаю пока что вот как бы будет и кое-что ещ кое-что ещё сес то что называется порогом принять решение или трешхолд [смех] Теперь у меня к вам первый вопрос первый и очень серьёзный вопрос заключается он в следующем Вот вы строили логистическую регрессию и запускали вчера модели классифика правильно когда вы нажимаете он у нас с

логистическую регрессию и запускали вчера модели классифика правильно когда вы нажимаете он у нас с вами делает что он сначала даёт вероятности А дальше как он этих вероятностей понимает вот получилось Там 037 или 064 как вот он принимает решение Что сделать единий Что сделать нулём ГМО Дат вероятность как бы а дальше Давайте всё ВС верно Абсолютно верно Но тогда стаёт такой вопрос А почему именно 05 Вот кто нам сказал что 05 - это идеальная граница разделения А если мне нужно банить только тех

05 Вот кто нам сказал что 05 - это идеальная граница разделения А если мне нужно банить только тех но в ком я наверняка уверен что мошенник или наоборот тот кто хоть немного у меня вызывает сомнение Тот сразу же улетает в бан понимаете есть пож 0 решение может быть любой граница принятия решения может быть любой поэтому мы с вами сейчас будем строить разные трешхолд по умолчанию он стоит у всех моделей 0,5 А это значит они действительно округляют По правилу 0,5 но вы можете поставить любой

моделей 0,5 А это значит они действительно округляют По правилу 0,5 но вы можете поставить любой другой начну эту игру я первую точку дальше буду передавать вам эстафетную палочку если у меня трешхолд вот я вот так вот поставлю больше чем 0,7 ой точнее Да вот трешхолд больше чем 0,7 Это значит что все те То есть я такой более как сказать либерального Да такого взгляда или консервативного даже можно какой-то смысле сказать но не радикального точно то есть у меня бани только тот кто уж прям ну

какой-то смысле сказать но не радикального точно то есть у меня бани только тот кто уж прям ну Очень вероятно что мошенник Очень вероятно что мошенник да то есть вот у меня граница принятия решений 07 А значит у меня вот id4 к какому классу я его отношу к нулевому а о к нулю но понятно что все будут нули Вот теперь давайте мы с вами посчитаем метрики это в принципе есть да то есть согласитесь это есть у меня так как я вообще ни одного по объекта не назвал у менял будет равен нулю можно

это есть у меня так как я вообще ни одного по объекта не назвал у менял будет равен нулю можно поставить дословно ра Ну ра из всех трх мошенников нифига никого не наш какой POS у нас получился теперь false posi fse новая для нас Метрика так True POS у меня ноль F POS это давайте Ладно вместе пока что вот это fse posi у нас Сколько получается Ну тоже ноль наверное да ноль потому что вообще ни од ни одного по объекта А чему равен что ли Почему но вроде а а в смысле четыре Ну мы смотрим нети

од ни одного по объекта А чему равен что ли Почему но вроде а а в смысле четыре Ну мы смотрим нети четыре тру нети если это интерпретировать при данном эксперименте Никто из мирных не пострадал да то есть все четверо прошли нашу систему выложили своё объявление и так далее То есть как бы здесь плохой ой добрый и как там добрый злой полицейский типа Аля то есть этот будет контролить мошенников А этот мирных людей и вот сейчас вы увидите что Лечим одно калечим другое Поэтому нам нужно будет как

этот мирных людей и вот сейчас вы увидите что Лечим одно калечим другое Поэтому нам нужно будет как бы искать баланс потому что я очень могу легко сделать чтобы никто из мирных не пострадал это пацифизм получается в дут Да как бы всё вот вот у меня такая модель но при этом как бы все кто обманывают меня они соответственно проходят меня Поэтому меня fse positive rid прекраснейший Никто из мирных не пострадал True POS rade очень плохой меня все кто хотели обмануть обманули Ну что ж меняем границу

пострадал True POS rade очень плохой меня все кто хотели обмануть обманули Ну что ж меняем границу принятия решений Теперь мы её снижаем пусть будет 0,55 больше чем 0.55 больше чем 0.55 тогда что у нас меняется по предсказанием но для ID 4 Да 4 теперь у нас единичка Ну что ж Давайте Теперь попробуем посчитать А что ЕС был такой чему бы равнялся на и так далее давайте давай было бы тогда 1 по ты сказал ноль и был неправ А где там этой и пятый Да Красава так иго что получается 1 по 3 1/3 1/3 это

ноль и был неправ А где там этой и пятый Да Красава так иго что получается 1 по 3 1/3 1/3 это как бы это есть л доля пойманных мошенников в таком в такой парадигме ты ловишь одного мошенника да видишь уже хотя бы каких-то мошенников начали ловить давай какой POS это ноль но да как получил все четверо Да у нас не пострадали Да и т негатив 1 2 3 4 то есть но делить на 0 + 4 я думал ты говоришь ноль уже ответ ты имел в виду по Всё я тебя понял и тако получается что ноль ноль как-то можешь это

ноль уже ответ ты имел в виду по Всё я тебя понял и тако получается что ноль ноль как-то можешь это проинтерпретировать чтобы коллеги поняли то есть что бы это для на значило получается 1/3 мошенников которые вообще существуют типа пострадали Угу и ноль э нормальных людей не пострадало То есть как бы да даже вот если сравнить собственно моё значение и твоё значение то видно что твой школ просто лучше работает чем мой при прочих равных да Угу потому что мы оба с тобой не задевая мирных но ты при

работает чем мой при прочих равных да Угу потому что мы оба с тобой не задевая мирных но ты при этом ещё и мошенников накрывает частично Вот хорошо тогда идём дальше Спасибо луба идём к следующему трешхолд двигаем ниже его мы идём всё в более агрессивное решение пусть будет 04 агрессивная Значит радикальная значит уже хоть какие-то Ну всё меньше меньше сомнения уже всё равно как бы мы баним граница принятия решения теперь 04 Кстати если вы когда-то соедините мост его не просто соединить в

граница принятия решения теперь 04 Кстати если вы когда-то соедините мост его не просто соединить в голове но трешхолд - это и есть Т критическое которое мы с вами выставляли когда статистика Помните у нас была критическая зона принятия решения h0 H1 это вот она и есть я вам рассказывал что можно двигать страдает Альфа Бета ошибка первого второго рода Вот это бы в принципе тоже самое есть прово может кто-то когда-нибудь за Ну я хоте проговорить ответ я глубоко не буду проговаривать потому что

может кто-то когда-нибудь за Ну я хоте проговорить ответ я глубоко не буду проговаривать потому что это можно Давай Давай получается у нас теперь вот эти Да ещ тоже мошенник Дава плохих парней трое Да едини из них мы выделили правильно одного вот поэтому один один к трём получается остаётся а там хороших парней У нас четыре и мы выделили и мы обвинили из них теперь одного поэтому теперь у нас обновилось один к четырём Отлично Да супер спасибо наст абсолютно правильно К сожалению один Мирный

обновилось один к четырём Отлично Да супер спасибо наст абсолютно правильно К сожалению один Мирный житель пострадал Да ID один выложил свой свой старенький магнитофон А ему сказали дружище прости что-то подозреваем тебя подозреваем у него были очень благие намерения но нашим Эли алгоритм считается всем иначе ну что ж а опять же видно до сих пор что на самом деле из этих трёх точек самая лучшая вот эта точка да то есть здесь как бы очевидная такая история идём дальше А ещё агрессивнее я всё

вот эта точка да то есть здесь как бы очевидная такая история идём дальше А ещё агрессивнее я всё меньше верю этому миру Да теперь уже пусть будет 025 то есть уже хотя бы на четверть есть вероятность что он мошенник до свидания Так давайте посчитаем с Любой так Ну если у нас это граница 025 Значит все У кого оценка выше мы признаём мошенниками и получается два из трёх мошенников мы ловим 2/3 - это тпр и тепер дали мы зацепили одного Да мирного вроде бы сейчас да да да Значит одного так это fse

тпр и тепер дали мы зацепили одного Да мирного вроде бы сейчас да да да Значит одного так это fse POS 1 так а делим на оди плюс тро негатив так один сейчас сколько мирных А всего мирных че 1/4 да 1/4 Да всё верно Вот теперь вот эта точка стала более сильной да чем вот эта тут вопрос Какой ш лучше Вот который был вот этот или вот этот это спорный вопрос Да в одном лучше ловим мошенников в другом лучше считаем там мирных жителей но тем не менее мы уже с вами ловим так-то 67% мошенников Да вот с

лучше считаем там мирных жителей но тем не менее мы уже с вами ловим так-то 67% мошенников Да вот с таким ходом так вот здесь я поставлю 0 чтобы пока что понятнее было исть 021 то есть уже даже если на 20% есть вероятность До свидания до свидания так с кем мы посчитаем давайте мы посчитаем с Костей хо хочет да как раз Ну нет просто я думаю все же заметили что эти точки совпадают с графиком и Остаётся только вопрос теперь как мы ш оставляем и почему именно так Ну давай проделаем сечас надо Это

только вопрос теперь как мы ш оставляем и почему именно так Ну давай проделаем сечас надо Это упражнение Полезно не только чтобы заметить вот это сопоставление которое ты правильно заметил немножко Повари в POS POS историях и в Метрика проговорить А как вышл дальше обсудим оставь свой вопрос ладно И давай тогда эта точечка на тебе Ну ты только сюда не подглядываю тогда да Всё не смотрю хорошо Так у нас теперь вверху в оцен стоят единички потому что больше 01 из всех кто являются мошенниками их

у нас теперь вверху в оцен стоят единички потому что больше 01 из всех кто являются мошенниками их у нас 1 2Т мы вычислим о и 2 2/3 Угу да то есть 2/3 мошенников так да в действительности У нас четыре не мошенника видно в классе и из них мы метим единичка раз id1 и id3 то есть 2/4 то есть это 50 то есть цена того что мы вот При таком холде цена забанены 7% мошенников 50% пострадавших мирных да да то есть вот за нашу вот эту агрессию Да в бан 50% хороших ребят пострадало так Спасибо Костя идём

то есть вот за нашу вот эту агрессию Да в бан 50% хороших ребят пострадало так Спасибо Костя идём дальше Давайте можно вопрос на осознания небольшой Вот мы сейчас всё время про негатив говорим про мошенников про спам а просто чтобы осознаться не знаю Сейчас время или может быть самой дома подумать про что-то позитивное типа мы увидели позитив вте или не увидели мошенников это же позитивно Я не совсем понимаю твой вопрос Честно говоря Ну короче получается когда мы определяем мошенников мы

не совсем понимаю твой вопрос Честно говоря Ну короче получается когда мы определяем мошенников мы определяем то что сейчас да на нет формулировки вопроса просто мы здесь всё время говорим что вот мы например трешхолд - Это степень нашей агрессивности А если мы хотим например полу ну это как бы степень агрессивности конкретно с мошенниками степень если у тебя единичка но не знаю дать кредит не дать то как бы наверно тут нету такого Да мошенник это просто не очень хорошее действие поэтому я

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

кошек собак лучше чем человек там роук стремится к единице уже практически То есть это практически полностью решённая задача под раным углом издалека спереди сзади сбоку человек уже ошибается кто изображён а не не ошибается хороший мапить вот эту всю историю про вот эти графики госпо вот я те вот я те собаки привёл пример Попробуй для себя построить Вот сама в голове возьми семь объектов единичка Назови кошки если они тебе больше нравятся ноли На таком уровне понятно просто скорее просто

Назови кошки если они тебе больше нравятся ноли На таком уровне понятно просто скорее просто хочется зама это всё на картинку с двумя нормальными распределения которые которых мы проверяем гипотезы ещё не до конца мозг это всё запил Я здесь нигде гипотезу не проверяю то что я тебе сказал что трешхолд - это граница принятия решения я и говорю это не очень просто замечать и не пытайтесь как вот я вам всегда делаю акцент что сложно что просто вот это сложно это ты не поймёшь за 30 секунд я сам это

всегда делаю акцент что сложно что просто вот это сложно это ты не поймёшь за 30 секунд я сам это переваривал очень долго и не знаю зачем на самом деле Потому что я не скажу что это сверх важная история поэтому надо орок ауки фокусироваться как орок ауки и всё и со статистика не ч статистика Ну именно проверки гипотез гипотезы проверяют гипотезы А здесь классификатор это немножко Ну хорошо спасибо Так соответственно 016 ещё более агрессивная агрессивно решение Да теперь так принимаем Давайте

Так соответственно 016 ещё более агрессивная агрессивно решение Да теперь так принимаем Давайте попробуем с кем мы попробуем Кто хочет попробовать Я просто уже начал путаться кого спрашивал кого не спрашивал Давайте Серёжа Кудинова так меня каком холде 06 Ну что это мы це панули ещ одного чувака походу из ТХ да то есть вот тут уже вообще Вот это первый раз мы достигли абсолюта да то есть все мошенники пойманы Да всё спасибо сеш всё правильно Так давайте дальше идём соответственно Пусть 005

мошенники пойманы Да всё спасибо сеш всё правильно Так давайте дальше идём соответственно Пусть 005 больше чем 05 но это уже очень да то есть это по факту почти все уходят в бан даже на 5% есть сомнения на 5% есть сомнения в человеке значит до свидания Да вот как бы такой парадигми Так Саша давай с тобой так ну всех зацепили бандитов единичка Угу ещё один Мирный ошибочно был отправлен в гулак это 34 че да Всё верно спасибо са Так ну и последняя точка это в принципе я создал бизнес в котором как

34 че да Всё верно спасибо са Так ну и последняя точка это в принципе я создал бизнес в котором как бы всех своих пользователей сразу же банил по факту так то есть если все нуле Это был пацифизм то тут как бы да пожалуйста выкладывайте объявление продавайте чувак выкладывает объявление сразу же вы Бано Спасибо что воспользовались нашим сервисом Но это даёт прекрасный й гарантированно ни один мошенник не выложит объявление вас и никакого обмана не будет то есть Как видите в жизни очень сло очень

не выложит объявление вас и никакого обмана не будет то есть Как видите в жизни очень сло очень легко поймать всех мошенников если всех в мире считать шени но как вы понимаете все пострадали все пострадали значит он стал тоже единичным Вот такая история Как правильно заметил Костя мы с вами проделали вот этот путь то есть вот это ровно вот э наша кривая лини думаете Идель точка существует фи идеальная точка Для нас ближе к горизонтали вот этой думаешь вот этой да Ну вот например вот здесь вот

точка Для нас ближе к горизонтали вот этой думаешь вот этой да Ну вот например вот здесь вот близко к ней не Ну кроме нулевого и единиц мне кажется наоборот Чем дальше хотим короче максимум тпр короче вот эта точка равен Ну все мошенники пойманы никто не пострадал если ваша кривая пройдёт Вот так А я вам сказал что мы играем в кетчи У нас есть два режима у змейки либо идти вверх либо вправо всё соответственно есть маршрут чтобы пройти через о но для этого надо было бы чтобы Представьте у меня

соответственно есть маршрут чтобы пройти через о но для этого надо было бы чтобы Представьте у меня соответственно Там как бы неважно Какие мои вероятности Да предположим три самых больших вероятностей были едини едини едини а четыре самых маленьких вероятностей были 0 тогда у меня бы существовал вот этот трешхолд да вот этот трешхолд при котором все мошенники пойманы и никто из мирных не пострадал Вот это было бы идеально Ну что ж вот собственно говоря вероятностная Метрика на этом роук

Вот это было бы идеально Ну что ж вот собственно говоря вероятностная Метрика на этом роук подходит к концу мы с вами её собрали мы построили но надо оцифровать конечным итогом так вот роук - это площадь фигуры под вот этим графиком площадь фигуры под вот этим графиком Давайте вам Задачка Школьная Чему равна площадь гуры 912 да 9 похоже на правду потому что состоит из 12 квадратиков де У нас есть да 9 12 вот поэтому мы бы написали с вами что наш что наш рок аук наш рок аук равен 075 075

есть да 9 12 вот поэтому мы бы написали с вами что наш что наш рок аук наш рок аук равен 075 075 стремиться надо к единице Давайте ваш вопрос А я как раз хотел спросить минимум 05 может быть рока это был мой Следующий вопрос пока что на него не отвечал чтобы все остальные подумали в том числе А если мы предсказываем всегда в анализ данных очень хорошо Как бы заземляют вас то с чего начать это случайное предсказание если я буду на шару говорить Этот мошенник этот не мошенник этот мошенник этот

предсказание если я буду на шару говорить Этот мошенник этот не мошенник этот мошенник этот не мошенник какой у меня будет рок Ау на шару Ну он же уже сказал 05 типа да я сказал что это правильно неправильно я не знаю Может с может сказал может ошибается может у тебя есть свои мысли По этому поводу Ну тут как выставление вероятности 0,5 мы берём половину треугольника этого всего большого квадрата Ну про что мы не знаем мы мы берём равные Да им шанс ошибиться равный шанс сказать правильно Да

Ну про что мы не знаем мы мы берём равные Да им шанс ошибиться равный шанс сказать правильно Да абсолютно правы то есть вот как бы Случайный рок аук в районе 05 рок АК 05 и ваша бы рок кривая она бы как-то крутилась бы Вокруг этой истории ниже вы в принципе получать не будете есть ещё такая Метрика я её не включил Запишите но её периодически спрашивают на самом деле она тоже самоя но иногда что-то послед время её стали больше спрашиваю чем к раньше как-то Роу доминировал Метрика очень простая

послед время её стали больше спрашиваю чем к раньше как-то Роу доминировал Метрика очень простая называется она это не имеет ничего общего с который для сплита дерева это разные и она равна рок ми о е сделали для на самом деле одной простой истории чтобы случайное предсказание 0 для это бы значило что полная неопределённость Ну нуля Ну Джини ноль Да Типа случайное предсказание в Джини было бы ноль и там как бы типа масштаб более приятный где ноль случайное предсказание единица где всё хорошо

и там как бы типа масштаб более приятный где ноль случайное предсказание единица где всё хорошо понятно Вот если вдруг вас спросят типа Метрика Жени Не пугайтесь в принципе всё тоже самое просто чтобы случайно предсказание было нулевым а не ноль пятым а можно ещ раз проговорить Антон вот мы получили этот рок 075 и о чём он нам говорит Ну он показывает насколько хорошо алгоритм на вероятностном уровне справляется он явно интерпретируется очень тяжело на самом деле когда проседает рок ро

уровне справляется он явно интерпретируется очень тяжело на самом деле когда проседает рок ро проседает тогда когда у вас какой-то ноли вым какая-то оказались по разные стороны и как бы нолик в бан уйдёт единичка не уйдёт поэтому интерпретация рока ука она примерно такова что рока УК - это доля правильно упорядоченных пар значений пар объектов вот а какой мы хотим получить когда бы мы такие счастливые были довольные вот если мы пришли бы через эту точку Какая бы у нас площадь под графиком была

были довольные вот если мы пришли бы через эту точку Какая бы у нас площадь под графиком была а вся тогда Ну сколько там 12 из 12 да ну единичка единичный квадрат площадь но да поэтому рок аук Случайный 0,5 лучшей единичка Ну хороший рок ауки прямо там выше ноль наверное Во а делаем мы это для чего то есть я Сначала подумала что мы может быть определяем какой-нибудь трешхолд на на уровне которого мы будем принимать решение вот как-то я так когда мы делали думаю сейчас мы посмотри правильно

мы будем принимать решение вот как-то я так когда мы делали думаю сейчас мы посмотри правильно Прима есть два два применения ро каука первое в поисках тш колда который тебя устраивает в контексте твоих POS R fse POS rid но здесь кандидаты на лучшую точку либо Вот это угу либо получается вот это либо вот эта точка Ага потому что здесь всё время большая часть мошенников меньше частью жертв это вот это вот эти три точки вот эти три точки я так понимаю Да мы по графику тоже можем видеть Ага не Нет

это вот эти три точки вот эти три точки я так понимаю Да мы по графику тоже можем видеть Ага не Нет не они там же нет одна которы вершины вершины а вот вот так вот Вот так вот так вот да вот так вот эти вот эти три точки типа как бы то есть мы можем даже по графику посмотреть где лучше принять решение А всё поняла И вот это 075 нам говорит вообще как у нас ситуация с данными всё поняла немножко и второе помимо поиска оптимального ш в абсолюте показывает хорош св ва ниже 0 то тогда Ужас да нет

и второе помимо поиска оптимального ш в абсолюте показывает хорош св ва ниже 0 то тогда Ужас да нет На самом деле раньше были такие приколы как бы Ладно сечас не буду г этим просто ро меньше 0 у тебя не будет Давайте отде от друга ты говорил доля правильных пар я не успел рядо [музыка] правильно слож сложная интерпретация не такая лёгкая как эме в пятницу я очень надеюсь что Вы мне ответите на этот вопрос На следующей неделе ещ раз давайте Чем отличается принципиально от и там F тем что он

этот вопрос На следующей неделе ещ раз давайте Чем отличается принципиально от и там F тем что он смотрит на непрерывность вероятно непрерыв вероятность это вероятностная ри и если поте туда подите Ирей А если вы подите вам нужно подать Y и так Ладно надо двигаться дальше Вот как это выглядит на рисунке То есть тут ещ доверитель интервалами всё это построено для предсказания да это же всё случайно величины ваше предсказани [музыка] Доми доминирует 097 Да вот это у на градиентный бун Ну тут у

величины ваше предсказани [музыка] Доми доминирует 097 Да вот это у на градиентный бун Ну тут у всех очень высокая точность на самом практически какая-то такая история так ещё есть график смотрите есть есть его братишка Это Илим ходы разные ходы только теперь как бы вот это как было так и остатся он на самом деле связан с в обратную Ну короче история Какая смотрите вот опять вернёмся с мошенниками когда у меня низкий трешхолд значит многие улетают в бан правильно растёт Потому что почти все

когда у меня низкий трешхолд значит многие улетают в бан правильно растёт Потому что почти все мошенники найде потому много выст моло понимаете мою мысль соответственно большой ш в обратную сторону теперь я почти никого не баню то есть я единицами или бами просто так не разбрасывают что у меня будет очень высокий Скорее всего я буду банить только по делу ну и падает рекол из-за этого Почему Потому что ну я почти никого не баню много какп лесенка как у нас с вами построена только видите

Потому что ну я почти никого не баню много какп лесенка как у нас с вами построена только видите сглаживается из-за того что большое количество элементо выборки и уже кажется кривая линия она также хочет сюда где prision 100% л 100% Да кто б не хотел сюда Ну вот как бы насколько это возможно и собственно говоря значение PR - это вот эта площадь под графикам мне больше нравится вот эта метрик к но как бы роук по популярнее То есть если вас если говорить про собеседование вас скорее проро чем

но как бы роук по популярнее То есть если вас если говорить про собеседование вас скорее проро чем экзамен в каком формате будет когда дойдём до экзамена тогда расскажу так ну в принципе всё давай лыба вопросики и уходим на перерыв Ну по сути Пиа ироко типа одно и тоже дают они будут в то другу они об одном и том же на сам одном Им просто в одном случае мы в зависимости отда смотрим и это а в другом случае в зависимости отда мы смотрим и Ну потому что ти ЕС мы решаем задачу например и Выбираем

случае в зависимости отда мы смотрим и Ну потому что ти ЕС мы решаем задачу например и Выбираем одну из двух то по сути разни рут эту историю PR prision recol классическая парочка Да как бы нам известная всё хорошо понятно всё интерпретируемые короче потрясающе Классно а роук немножко посложнее но рокк реально массово гораздо популярнее чем к Может я что-то в этой жизни не понимаю Так ладно давайте тогда 45 минут Сейчас сделаем перерыв 55 продолжаем Всё Не задерживаемся давайте E Ну что давайте

тогда 45 минут Сейчас сделаем перерыв 55 продолжаем Всё Не задерживаемся давайте E Ну что давайте возвращаться так Мы закончили с метриками классификации дальше перейдём к Метрика регрессии метрики регрессии на самом деле в контексте как бы базовых вещей гораздо проще гораздо проще в целом метрики регрессии могут быть существенно сложнее да когда собираются какие-то кастом на истории Там и так далее но как бы На таком базовом уровне который там в 90% случаев Неди метрики регрессии наоборот они

но как бы На таком базовом уровне который там в 90% случаев Неди метрики регрессии наоборот они проще и привычны первая Метрика - это - это когда мы смотрим средний квадрат отклонения ре за непрерывную величину например квартира стоила 100 руб мы предсказали что 120 то есть было бы 100 реальное значение 120 предсказано вот в данном случае как бы уже никакие Здесь нельзя назвать Да как бы нужно по-другому подходить [музыка] и ши То есть как главную метрику качества вашего алгоритма хороша тогда

подходить [музыка] и ши То есть как главную метрику качества вашего алгоритма хороша тогда когда нам нужно подчеркнуть большие выбросы большие промахи Точнее не большие выбросы а большие промахи Почему Потому что опять же возвращаемся наш промах ещё и будет возводиться в квадрат да а все мы знаем что если 20 и 40 отличаются в два раза то 20 к 40 к уже отличаются не а в чере и Это говорит о том что mse как бы там где мы сильно промахнулись он ещё сильнее это подчеркнёт Поэтому если вдруг задачи

mse как бы там где мы сильно промахнулись он ещё сильнее это подчеркнёт Поэтому если вдруг задачи где это было бы актуально и нужно было бы минимизировать именно Ну то есть пусть будет много маленьких ошибок но главное чтобы не было больших можно взять mse с mse мы с вами встречались уже но не как с метрикой А как с чем функции потерь с функцие потерь сло с функцией Метрика Метрика не равно Лос запомните не равно Лос В чём их разница Метрика качества модели наверное а Лос функция - это то что

запомните не равно Лос В чём их разница Метрика качества модели наверное а Лос функция - это то что мы минимизируем при подборе весов Да близко близко к цели Давайте тогда просто чуть-чуть немножко по иначе поставлю с точки зрения вот таймлайна в Какой этап Лос нужен В какой эп метри Лос обучения а Метрика предикт то есть Лос во время обучения а Метрика после обучения правильно вот просто так выпало что mse может выступать в роли того и того чаще он применяется в роли Лос функции но не метрики

что mse может выступать в роли того и того чаще он применяется в роли Лос функции но не метрики потому что объяснять вашему продукт менеджеру а средний квадрат отклонения будет сложная история не очень удобно и не очень читаем Однако такая Метрика как бы это можно посчитать как метрику без всяких проблем Вот какие вопросы Здесь отлично Вот тогда мы идём с вами далее Идём в сторону того что более интерпретируем rmse МС - это собственно говоря тоже аббревиатура р добавляется ещё Root или

более интерпретируем rmse МС - это собственно говоря тоже аббревиатура р добавляется ещё Root или извлечение корня мы как раз-таки пытаемся решить проблему того что mse - это квадрат единиц да то есть mse если как бы у нас реальное предсказано в рублях то МС - это рубль квадрат а МС уже измеряется исходной единицей измерение вот следующая Метрика - это мин Absolute ror или Метрика средний модуль ошибки мое тут всё просто мы смотрим как бы защ ну парадигма такая что А зачем нам вообще возводить

ошибки мое тут всё просто мы смотрим как бы защ ну парадигма такая что А зачем нам вообще возводить в квадрат и потом извлекать корень Когда мы можем сразу же посмотреть на без вот этих процедур Да и как бы получается реально минус предсказанная просто взять по модулю типа неважно В какую сторону отклонились и усреднить Вот мо одна из самых популярных метрик качества модели регрессии Всё достаточно просто понятно Это самая популярная Метрика абсолюта то есть не относительно метри вте ра 20 это

просто понятно Это самая популярная Метрика абсолюта то есть не относительно метри вте ра 20 это много или мало Как ты думаешь много думаешь а если я ошибаюсь предсказывать стоимость квартиры Она стоила 10 млн А у меня 10 млн 20 руб предсказал это много немного а если цены на пирожки или на молоко уже может быть много правильно 20 руб пирожок стоит 30 руб а я предстал как 50 вот это называется абсолютная Метрика 20 руб 20 отклонений контекста непонятно много это или мало в абсолюте Да 100 Вот

Метрика 20 руб 20 отклонений контекста непонятно много это или мало в абсолюте Да 100 Вот это много или мало нуно если мы говорим про дистанцию где нужно выжать максимальную скорость Наверное это много Да не просто как бы если 100 Это у нас как бы в контексте длины Экватора это мало всё в этом мире относительно мое мое Чем хороши он ещё в том числе он в отличие от mse и РМС не сильно штрафует то есть нет этой процедуры возведения в квадрат нет этой процедуры возведения в квадрат поэтому он

то есть нет этой процедуры возведения в квадрат нет этой процедуры возведения в квадрат поэтому он штрафует существенно меньше Но они как правило конкуренты друг другу вот а именно мое и РМС Я бы так сказал что если вам нужно подчёркивать большие штрафы тогда вам метрику качества как основную лучше выбрать РМС Ну есть задачи Где большой промах недопустим А есть где луше меньше раз ошибиться но намного а есть задачи Где можно много раз ошибаться но на немного главное Вот мое как бы это про много

а есть задачи Где можно много раз ошибаться но на немного главное Вот мое как бы это про много маленьких ошибок а МС - это про точнее наоборот МС - это про много маленьких ошибок А мое - это можно немного но большие Да Кость Ну первое просто суб за финали первые три метрики - Это относительные метрики потому что без контекста не воспринять их абсолютные только наоборот абсолютные абсолютные относительные относительно чего-то считаются А вот эти в абсолюте считаются Угу и ну чисто математически

относительно чего-то считаются А вот эти в абсолюте считаются Угу и ну чисто математически мое и МС это же Ну одно и то же как они могут конкурировать и из математики известно что х ква вот так вот поставим вот здесь ре X к Что является МС Да вот МС даже Давай я вот так сделаю коре е ква Ладно сечас запутано моду X для одного объекта это действительно так но у меня тут будет не один объект У меня их будет дофига так вот корень из X1 квадрат промах на Первом элементе в квадрате на Втором уже не

их будет дофига так вот корень из X1 квадрат промах на Первом элементе в квадрате на Втором уже не равен модулю X1 п X2 они близки друг другу Но они неравны другу у порядок [музыка] Да так что ещё можно добавить Вот это уже относительная Метрика потому что она измеряется в процентах это как бы опять аббревиатура Да у нас тут мое мапе МС РМС млс и ещё много разных аббревиатур мапе - это когда мы считаем в процентах классно посчитать типа вот это вот 20 то что я луба спросил А 20 это много Так

считаем в процентах классно посчитать типа вот это вот 20 то что я луба спросил А 20 это много Так давайте посмотрим относительно того в ЧМ Таргет у нас измеряется Да как бы и на это количество разделим если у нас в числителе 20 а цена на пирожок 50 то мы отклонились как бы получается На сколько процентов на 40 думаешь а У нас есть 50 реально 50 реальное значение мы получили 20 Да не на 40% не 40% у на 40% отклонений всё правильно 40% мы отклонились то есть по факту мы как получается реальность

у на 40% отклонений всё правильно 40% мы отклонились то есть по факту мы как получается реальность 50 мы приска 70 На 40% отклонились вот как-то так относительная Метрика к чему Мы стремимся мапе [музыка] чтобы э говорили их надо минимизировать ещё есть такая Метрика спе Я говорю в регрессии вообще угорает по абревиатура там есть Метрика в которой семь букв в аббревиатуре как бы где эта игра закончится Я не знаю ну здесь ребята идут дальше уже соответственно пять уже пять Есть ещё с и что-то ещ

Я не знаю ну здесь ребята идут дальше уже соответственно пять уже пять Есть ещё с и что-то ещ Ну там там уже буквы сложно запоминать Просто становится половина английского алфавита здесь с нами Вот для чего это сделано видите в отличие от вот этой формулы отличие мы делим не на Y а делим на Y п Y предсказано на самом деле это сделано только для одного глобально на самом деле для двух вещей но первая главная вещь чтобы случайно не возникло деление на ноль деление на ноль если вдруг у вас есть

главная вещь чтобы случайно не возникло деление на ноль деление на ноль если вдруг у вас есть Таргет нулевой где-то как тогда мы как бы нивелиру этот риск в целом и тогда пойдёт поэтому так вот работает с мапе с мапе но всё равно мапе гораздо чаще используется чем с мапе то есть достаточно редкая Метрика но она есть следующая Метрика регресси R2 Вот это популярная Метрика это очень популярная Метрика и чтобы её понять на самом деле много не нужного давайте я ещё вот так вот подпишу до множ

Метрика и чтобы её понять на самом деле много не нужного давайте я ещё вот так вот подпишу до множ числитель знаменатели в дроби на 1 де на N как бы я могу сократить обратно и получится тоже самое правильно тогда вот что у меня в числителе что это вам напоминает Да действительно А в знаменателе что это такое вот эта вот чёрточка это предсказание как бы средним да то есть это среднее значение имеет нание квадрати это дисперсия вашей величины Y Помните я вам когда-то говорил дисперсия это равно

нание квадрати это дисперсия вашей величины Y Помните я вам когда-то говорил дисперсия это равно информация очень часто е воспринимают и мы вот сейчас примерно в этой парадигме будем рассуждать в идеале в идеале R2 у нас какой с вами Может быть максимальный R2 какой один когда у нас уходит в ноль правильно то есть мы не отклоняет стремиться к единице а минимальное значение Но на самом деле не совсем у меня может быть 10 млрд прижок стоит 20 руб я его прил 20 квинтиллионов зачем-то минус

не совсем у меня может быть 10 млрд прижок стоит 20 руб я его прил 20 квинтиллионов зачем-то минус бесконечность Да минус бесконечность но как бы ноль на самом деле находит особое значение здесь Но если у вас R2 около Ну крутится Это значит что ваш алгоритм призывает То есть как бы что числитель что знаменатель то есть примерно равен дисперсии а это значит что как бы ну грубо говоря эти предсказания сопоставимы то что вы на предсказывали и то что среднее и как бы общего импакта Как такового нет

сопоставимы то что вы на предсказывали и то что среднее и как бы общего импакта Как такового нет все старания зря данные ничего не объяснили Если вы попали вообще вот в этот диапазон от минус бесконечно нуля ваша модель просто отвратительно работает она мало того что не помогает нам объяснить информацию ещ и делает хуже просто чем средни но сюда вы как бы в исключительных случаях только попадёте скорее это ошибка в коде какая-то вот чаще конечно от нуля до одного диапазон и вот то что я вам

скорее это ошибка в коде какая-то вот чаще конечно от нуля до одного диапазон и вот то что я вам говорил доля объяснён най информации то есть mse в каком-то смысле это как бы то что мы смогли объяснить а мы нормируется и и получаем удобную удобную когда к едини Значит мы всё обясни когда ближе к нулю нифига не объяснили И вот R2 популярный это Метрика абсолютна или относительна относительно относительное мы смотрим наше предсказание относительно чего-то относительно дисперсии То есть как бы

мы смотрим наше предсказание относительно чего-то относительно дисперсии То есть как бы абсолютные метрики у нас популярные me а РМС чаще всего ещё МС но вот как бы вот эти две а соответственно относительная - это R2 и мапе как бы на самом деле вот эти метрики такие [музыка] доминирующие Ну хотя тоже можно назвать абсолютной метрикой на самом деле но хотя бы относительно чего-то смотрится самоя относительно Метрика R2 вот чтобы знаете как в классификации удобно же смотреть что чем ближе к

относительно Метрика R2 вот чтобы знаете как в классификации удобно же смотреть что чем ближе к единице тем и точнее Вот в регрессии Вот именно R2 подведём итоги Выбор метрики всегда зависит от задачи всегда зависит от задачи с которой вы столкнулись вот Метрика не равно функция потерь Да ция потерь она у нас во время обучения Метрика - Это после обучения высчитывается Ну и собственно говоря вот здесь ссылочка у нас есть в под модуль esor Matrix в эрне есть метрики но вам никто не мешает свои

здесь ссылочка у нас есть в под модуль esor Matrix в эрне есть метрики но вам никто не мешает свои метрики всегда кастомные собирает написать функцию две строчки кода Ну как бы предлагает они ВС поменяли вообще потрясающе Ну приятнее стало на самом деле местами тут три блока будет классификация кластеризация Что нас ждёт на следующей неделе да Что нас ждёт на следующей неделе и регрессия то есть вот они регрессионные метрики да2 намели Ну и так далее вся вот эта Бригада Вот и как бы нам

есть вот они регрессионные метрики да2 намели Ну и так далее вся вот эта Бригада Вот и как бы нам знакомые метрики в классификации взвешен можно поставить преси лы Роки и так далее основные мы проговорили ри блок нас ждёт с вами на следующей неделе блок кластеризации или обучение без учителя МП Ну тут надо разрабатывать пока нету пока нет никто ещё оцифровать не смог пока данную мед Кстати как вчера сыграла Франция 2:1 Проиграли проиграли [музыка] у Понятно Так давай проговори сегодняшнее

вчера сыграла Франция 2:1 Проиграли проиграли [музыка] у Понятно Так давай проговори сегодняшнее задание Если у вас есть какие-то вопросы спрашивайте задание на самом деле сегодня оно не сложное вот оно реально не сложно если сильно не замкнуться сфокусироваться не распыляться то оно вообще одно из самых лёгких из того что мы с вами вообще проговаривать за все дни но если как бы не настроиться может показаться наоборот слож Так в чём ваше задание сегодня у вас будет датасет это датасет который

показаться наоборот слож Так в чём ваше задание сегодня у вас будет датасет это датасет который когда-то был на нём рубились в за деньги Ну тут он не весь а его средст сделан понятное дело Это был выложен датасет компании Microsoft когда они разрабатывали свой антивирус и по им нужно как бы было внедрить программу Да которая по в антивирус внедрить чтобы она пом програмно обеспечения могла предсказать есть это вирусно по или нет Вот татом является столбец это бинарная классификация у вас Первые

есть это вирусно по или нет Вот татом является столбец это бинарная классификация у вас Первые три дня то бишь понедельник вторник среда классификация завтра послезавтра вас ждёт регрессия задача регрес так вот [музыка] вам нужно построить модель [музыка] модель модель вот у меня как бы написано Логистическая регрессия попробовать коэффициент регуляризации Если вы возьмёте что-то другое Я ничего против не имею то есть вот здесь сейчас запустить сам как бы становится немножко теперь опять

против не имею то есть вот здесь сейчас запустить сам как бы становится немножко теперь опять контекстом сегодня фокус на Метрика соответственно моде посмотреть где сколько об и так далее но здесь ВС расписано Старайтесь переваривать что вы видите это очень важно переваривает будет посчитать метрики accur prision седьмое задание очень важное потому что это есть интерпретация результатов Какая Метрика более точно описывает происходящее хороший результат мы [музыка] получили в 60% случаев

Метрика более точно описывает происходящее хороший результат мы [музыка] получили в 60% случаев правильно предсказывал наличие вируса на компьютере чтобы не беспокоить клиентов из заложены положительных результатов короче это условная вероятность нам нужно максимизировать Rec при том что prion должен быть больше чем 06 и нужно подобрать такой ш оптимальный код в принципе Здесь есть код здесь есть вам нужно буквально свои значения подставить Всё в рамках библиотеки всё просто решается в две-три

вам нужно буквально свои значения подставить Всё в рамках библиотеки всё просто решается в две-три рочки кода ше дело переварить далее тоже самое в обратную сторону сколом и десятое задание будет на F спор на F тоже решается очень-очень быстро если переварить что происходит Кто всё это сделает Посчитайте точно также для датасета своего для своего датасета с которым вы работали в понедельник и вторник с собственно говоря Дианова заболевания сер потому что вот вы мне дня уже ските 09 а

и вторник с собственно говоря Дианова заболевания сер потому что вот вы мне дня уже ските 09 а представляете это связано с дисбалансом классов кто-то смотрел пропорцию класса Да она примерно равна Ну там 500 и 400 вроде хорошо что посмотрели да как бы там ещё более-менее это Окей но в целом мы 2 дня с вами смотрели на э эе и молились на эту метрику грубо говоря а она могла вообще не отражать суть Так что вот кто всё это сделает может Взглянуть на эту истори Ну и собственно говоря посчитать если

Так что вот кто всё это сделает может Взглянуть на эту истори Ну и собственно говоря посчитать если ещ время останется можете отдохнуть можете свой циновки датасет там не знаю покрутить посчитать метрики регрессии всё что угодно В общем в свободном режиме поработать В этом плане вот такое вот задание на сегодня Костя А есть рекомендации Какую модель использовать или это на наше усмотрение нет никаких рекомендаций нет на ваше усмотрение Абсолютно Да Саша у нас проект начнётся завтра да Угу

никаких рекомендаций нет на ваше усмотрение Абсолютно Да Саша у нас проект начнётся завтра да Угу хорошо так и ещё ещё ещё ещё что я хотел спросить Ой сказать Точнее я хотел сказать следующее что Будьте готовы что метрики будут плохие это нормально сразу вас предупрежу чтобы вас это в стресс не вводило это не то чтобы вы что-то криву запустили если данные Не объясняют что-то то чудес не произойдёт как бы не всегда нам с вами получать эси 09 Да иногда нужно повозиться с метриками поменьше Ну это

как бы не всегда нам с вами получать эси 09 Да иногда нужно повозиться с метриками поменьше Ну это предостерегают возникнуть в принципе всё в принципе всё давай Люба как у нас завтра день будет построен у нас же будет получается регрессия Да новая тема а потом ещё проект А когда проект начинаем регрессия новая тема Что значит регрессия новая тема регрессию Мы проходили уже Ну я имею в виду что завтра ты сказал что будут метрики регрессии Да ну нет я говорю что у вас понедельник ВТО среда Вы с

ты сказал что будут метрики регрессии Да ну нет я говорю что у вас понедельник ВТО среда Вы с СМИ классификации сталкивались четверг пятница с регрессионном Да а проект прямо с утра начнётся Нет с утра ещё будет у нас небольшая лекция мы поговорим с вами быстрый отбор признаков Я думаю что мы до часа справимся и всё дня ваши дальше разобьёмся на команды фронт работы там достаточно большой нужно будет са аккумулировать всю историю ваших знаний этой неделе по крайней мере Всё тогда давайте на

будет са аккумулировать всю историю ваших знаний этой неделе по крайней мере Всё тогда давайте на сегодня Прощаемся по крайней мере в таком контакте Давайте продуктивную денёчка ещё на связи и до вечера пока-пока Y

по Привет всем Давайте начнём нашу лекцию Сегодня мы с вами обсудим сегодня мы с вами обсудим про на самом деле е один этап который есть пала периоди призна очевидно что как бы что-то будет важным что-то будет неважным И как посмотреть и что делать с неважным оставлять или убирать то есть Вот именно вот эти нюансы мы с вами обсудим Так мы посмотрим с вами несколько разных подходов у нас будет небольшой датасет небольшой [музыка] датасет датасет Ну как бы учебный такой учебный датасет скажем так

датасет небольшой [музыка] датасет датасет Ну как бы учебный такой учебный датасет скажем так да здесь собственно говоря это по-моему районы Бостона если мне память не ошибается и медианная цена на объекты недвижимости по районам собственно говоря и есть факторы которые на неё могут влиять Да уровень криминала там а й возраст дис Короче все фичи здесь какое-то описание какае-то описание есть Ну будем потихоньку к нем возвращаться смотреть Да что что есть что вот задача Какая задача вот

Ну будем потихоньку к нем возвращаться смотреть Да что что есть что вот задача Какая задача вот собственно говоря у вас Таргет У вас есть признаки необходимо как-то отобрать эти признаки Ну или не отобрать но хотя бы какое-то решение по ним применять первая самая простая История - это Матрица корреляции Матрица корреляции показывает какую зависимость помните линеар линейную ватную зависимость симметрично относительно главной диагонали потому что как бы признак краем и признак median value или

относительно главной диагонали потому что как бы признак краем и признак median value или признак median value и CR коррелирует одинаково то есть перестановке порядка не меняется поэтому достаточно смотреть там в нижнюю сторону или в верхнюю Ну вот я буду смотреть в верхнюю например Мне так удобнее Просто вот смотрим сюда видим корреляции достаточно высокие достаточно высокие например есть даже корреляции ми 077 вот да вижу выше не вижу если кто-то видит говорить А вот 091 вобще вот это как раз

ми 077 вот да вижу выше не вижу если кто-то видит говорить А вот 091 вобще вот это как раз таки Как называется Люба эти признаки коллинеарны Да эти признаки коллинеарные коллинеарность больше 07 уже считают такой доста высо колино А тут 09 то через один признак можно выразить полностью другой то есть они однозначно определяют друг друга и как бы не привносят какой-то новой информации Ну просто не принося Вот давайте сначала начнём с таргета обсудим с таргетом вот у нас есть Таргет У нас есть

не принося Вот давайте сначала начнём с таргета обсудим с таргетом вот у нас есть Таргет У нас есть Таргет А есть Таргет в принципе все с ним так или иначе коррелируют Да достаточно высокий корреляции имеет кто-то положительный кто-то отрицательный но по модулю как бы считается Ну как считается от 0 до 02 наверно корреляции фактически нет Да там около там 0204 это корреляция небольшая 0407 средняя 07 выше высокая корреляция на признаков Вот Но Но помимо этого как мы видим сами признаки тоже

07 выше высокая корреляция на признаков Вот Но Но помимо этого как мы видим сами признаки тоже имет сверхвысокие коре сверхвысокие 07 059 и так далее Это нам говорит о том что очень много мультикор не всё тут так очевидно то есть вроде как влияют все признаки Но на самом деле может быть можно оставить три и мы ничего не потеряем понимаете это как как не знаю рубль в рублях деньги и в долларах Да и там Влияет ли это на недвижимость конечно влияет но бы и то и другое будет иметь высокую

Да и там Влияет ли это на недвижимость конечно влияет но бы и то и другое будет иметь высокую корреляцию но они между собой поэтому так происходит Вот чем Матрица корреляция хороша тем что она очень ну как бы дешёвый способ на самом деле даже на больших данных посчитать её никакого машинного обучения здесь не нужно только просто буквально одна формула и уже есть хотя бы какое-то первичное представление о том что есть важно что неважно плюс это ещё только для числовых признаков для

представление о том что есть важно что неважно плюс это ещё только для числовых признаков для категориальных будет не очень не очень наглядно Ну что ж я собственно говоря ещё выведу их вот так в столбец и отсортируйте корреляция имеет стат можно посмотреть что это такое например La status of the population да то есть процент неблагополучного скажем так да процент неблагополучного населения в данном районе корреляция отрицательная а это значит что если Вы то цена что будет делать падать да то

районе корреляция отрицательная а это значит что если Вы то цена что будет делать падать да то есть вот в разные стороны в разные стороны они идут и как-то так этот фактор является самым важным почему-то так считает как матри корреляции ещ важный признак Да что это у нас такое соответственно среднее количество комнат простыми словами среднего количества комнат короче какая-то такая история какая-то такая история Теперь смотрите иногда вот в этих числах непонятно можно это Перевести на язык P

такая история Теперь смотрите иногда вот в этих числах непонятно можно это Перевести на язык P типа чтобы принимать решение тут непонятно как принимать решение оставить вот этот или нет для этого есть как бы тесты и влр есть под модули прямое мед регрессии сюда выдаёте X Y и что этот метод делает он проверяет статистическую значимость важности признака каждого относительно таргета запускает статистический тест который мы с вами проходили и возвращает вам P value вы всегда можете собственно

тест который мы с вами проходили и возвращает вам P value вы всегда можете собственно говоря открыть документацию если вам что-то непонятно да и почитать что здесь пишут что здесь объясняют вот собственно раска Какая формула Какая формула статистическая используется это формула Ну для статистики это формула на самом деле этого формула как раз таки корреляции вот Ну и что возвращает значение статистики возвращает и всё Как у нас с вами было мы подхваты получается И вот у нас сказать об этих P

возвращает и всё Как у нас с вами было мы подхваты получается И вот у нас сказать об этих P Блин да за спойлером не увидел маленький pv вспоминайте Когда у нас была с вами статистика Да мы говорили что маленький pv Мы уходим в сторону H1 в сторону значимости Да тут точно также формулируются гипотезы всё это можно будет как бы найти вот здесь если почитаете поподробнее да а здесь в описании здесь здесь где-то это точно есть h0 призна неважен признак важен в итоге по в данном случае мы видим что

здесь где-то это точно есть h0 призна неважен признак важен в итоге по в данном случае мы видим что все признаки оказались важными потому что самый Даже самый большой получается самый большой у меня оказался 7 правильно 10 мип это 5 Ну есть 7 Тут реч даже Мы обычно на уровне значимости 05 то вами знаете что сделать м мы с вами можем вот так вот сделать Давайте сгенерирует нам ещё понадобится сгенерируйте [музыка] Вот так и теперь посмотрим вот он появился Видите вот этот тнм так как он создан

[музыка] Вот так и теперь посмотрим вот он появился Видите вот этот тнм так как он создан случайно никаких корреляций нет И если бы мы смотрели с вами здесь а здесь он почему-то а потому что я сре сделал ладно не суть вот здесь сразу посмотрим Обратите внимание у нма получился pv 03 правильно pv 03 нам говорит о том что мы можем Ну точнее утверждаем что этот признак неважен Вот как бы всё это далеко имеет не самое наверное точное Да точную реализацию относительно того что есть но большой плюс

имеет не самое наверное точное Да точную реализацию относительно того что есть но большой плюс большой плюс это на оценить в том что это очень быстро просто запустить статистический тест или посчитать модель машинного обучения чтобы посмотреть фичи это разные вещи на больших данных это особенно чувствуется в одном случае ты ждёшь 30 секунд в другом случае ты можешь дать 2 часа а когда нужно много гипотез тестить это вот в моменте начинает как бы ты начинаешь идти в сторону простых вещей и

много гипотез тестить это вот в моменте начинает как бы ты начинаешь идти в сторону простых вещей и ценить их вот ну есть есть смысл есть смысл Мега камера наверное есть Ну особо не использу так теперь у меня такой к вам вопрос Как вы думаете какой недостаток если вот отбирать признаки вот так по интерпретируем какая-то Ну не совсем ну точнее нет вообще а Интер вот именно как что оставить что убрать Хорошо посмотрим в ЧМ может быть проблема чего вообще никак не учитывает вот в таком виде

убрать Хорошо посмотрим в ЧМ может быть проблема чего вообще никак не учитывает вот в таком виде выводит или вот вот вот это полностью эквивалентно вот этому полностью эквивалентно Если вы увидите порядок один и тот же ну здесь понятно сам собой а вот дальше они все пойдут в том же порядке история в том что мы как бы смотрим её по Ну точнее мы её смотрим каждый фича с таргетом фича с таргетом фича с таргетом но никак не учитываем действительно какую-то мультикар конструкцию Что может быть в

фича с таргетом но никак не учитываем действительно какую-то мультикар конструкцию Что может быть в конце концов вот эти два признака и вот смотри жно оставить оба вот такс Да вот R типа оба важны оба оставить но это одно и тоже по факту одно и тоже И для этого для этого нам нужен способ который позволяет как-то вместе агрегировать Ну точнее все фичи посмотреть одновременно такой метод есть ласа если вы вспомните А я сейчас даже Открою вам картинку хорошую хорошую картинку М сейчас секунду так

если вы вспомните А я сейчас даже Открою вам картинку хорошую хорошую картинку М сейчас секунду так когда это у нас было там наверное здесь о идеально вот у нас С вами была когда мы там линейную логистическую регрессию строили была регуляризация я вам показывал такую картинку помните вот в чём суть этой картинки эта картинка очень хорошая запомните про регуляризация Кстати когда я вам вечером вчера рассказывал вот что ещё было на том собеседовании это вопросы про регуляризации вот забыл просто

рассказывал вот что ещё было на том собеседовании это вопросы про регуляризации вот забыл просто что-то вам сказать или может говорил вчера так вот Давайте вернёмся смотрите у нас есть L1 регуляризация есть L1 регуляризация есть L2 есть L1 п L2 L1 регуляризация у меня накладывать следующее ограничение мы с вами находимся как бы Аля в ромбики в ромбики То есть у меня вот я начинаю идти по градиентного спуску я хочу попасть сюда с точки зрения математики это оптимальные параметры но чтобы

спуску я хочу попасть сюда с точки зрения математики это оптимальные параметры но чтобы бороться с переобучения и всякими нюансами мы там накладываем Вот это регуляции сама специфика Вот именно L1 ограничение подразумевает что точка будет стремиться к оси какой-нибудь то есть видите она как бы прижалась к оси здесь она не прижалась здесь чуть чуть-чуть прижалась но не так сильно кругу это не свойственно свойственно в первую очередь этот вот это ран Ну правильно то есть залила и всё дала этому

свойственно в первую очередь этот вот это ран Ну правильно то есть залила и всё дала этому Поэтому ласа вот именно изза этой особенности часто называют как способ отбора признаков типа что она будет за нуть какие-то ненужные признаки нам у меня здесь стоит конкретно Альфа но по факту Вы можете через ану или через запустить и подобрать оп Альфа чтобы не страда ва и этот Альфа возможно вам уничтожит в зависимости от коэффициента регуляризации некоторые печи смотрите вот у меня уже три признака

в зависимости от коэффициента регуляризации некоторые печи смотрите вот у меня уже три признака ласа даёт им нулевой вес и четвёртый тоже на подходе Можно попробовать там побольше поставить 08 Да вот получилась Вот такая вот история вот призна Като признаки больше получают вес какие-то меньше Но тем не менее я могу сказать что вот эти четыре признака я убираю если меня точность удовлетворяет то я отобрал признаки правильно Если меня точность удовлетворяет вот да А что насчёт бка он тоже очень

я отобрал признаки правильно Если меня точность удовлетворяет вот да А что насчёт бка он тоже очень маленький Ну как бы я сейчас просто ноль показываю полный Да ну ты можешь поставить не знаю единичку почему Ну не хватает поставить 1.5 а то есть 007 Это много да нет Мало тоже согласен с тобой это вообще ни о чём Можешь выкинуть Можешь выкинуть то есть вот это всё я даже может быть можно вот это нано даже Выкину вот всё что выше пока лучше оставить выше оставить И кстати смотрите практически на

даже Выкину вот всё что выше пока лучше оставить выше оставить И кстати смотрите практически на Первом с стам но они они ко линеарные друг другу если вы найдёте стат и рум где у меня статрум вот они Ну в принципе не прямо полностью линеар но имеет какую-то зависимость и здесь как бы это игнорируется а Логистическая регрессия Обратите внимание рум за нули То есть она поняла что видимо коллинеарность есть одному дала вес другой Уже стало зать То есть как сказать убивать эту мультикор Так что этим

есть одному дала вес другой Уже стало зать То есть как сказать убивать эту мультикор Так что этим Она хороша этим как бы сама идея лосо Она прекрасна сама идея прекрасна мы можем вывести какой-то топ признаков и уже соответственно с ним работать Да Кость потерялся как здесь не делил на валидацию Я просто допустил можно как бы ану навали сделать выбор соответственно подобрать оптимальный регуляцией потерей точности потому что чем ты его выше ставишь тем больше признаков как бы Залим Да вот

потерей точности потому что чем ты его выше ставишь тем больше признаков как бы Залим Да вот поставим вот так 3 по види ея при точность может быть точность падает у меня Да ну можно конечно какую-нибудь быстро вывести точность Но это как бы не валидация выборка поэтому это неправильно падает она или нет поставлю полтора Ну да то есть как бы рубаю сильно поэтому возможно так стоит Ну делать не стоит Ну вот собственно говоря ты можешь так подобрать какой-то себе через опт оптимальный регуляр зщ

Ну вот собственно говоря ты можешь так подобрать какой-то себе через опт оптимальный регуляр зщ коэффициент да Люба а вот этот сэто какой там по умолчания с а ещ Вопрос вот сделал ну как вот на практике применять это лас то есть трансформ делаешь и он коэффициенты переставляет что лиэ топ топ признаков которые неважно удалить и всё А руками то есть нет есть трансформа нету А я понял что имеешь в виду ну как бы а как за тебя трансформировать нет Само е Только прописать хо с собственно гово Даше

виду ну как бы а как за тебя трансформировать нет Само е Только прописать хо с собственно гово Даше идм ML модели да то есть для этого надо обучить но линейно ещё то есть относительно быстро дальше с деревянных моделей опять же я здесь никаких пайплайн ничего не строю а просто чтобы вы помнили может быть кто-то забыл что у каждого у каждой модели которая работает на основе деревьев решений так как это вложено в само дерево решение есть возможность посмотреть важность признаков и как этот список

это вложено в само дерево решение есть возможность посмотреть важность признаков и как этот список формируется помните ни да ни накапливает то есть какие сплиты какие признаки помогали лучше всего сплитом говоря за это они получали конфетки опять же видите как бы такая конструкция мультиколлинеарность никак не фиксирует поэтому ST оба получили большую часть и тут буквально буквально три четыре признака объясняет всё объясняет Всё и очень много Это значит что но смотрите есть такой способ

признака объясняет всё объясняет Всё и очень много Это значит что но смотрите есть такой способ хороший но он не всегда прям работает правильно То есть это эвристика это не математически строгое доказательство А это эвристика лишь просто предположение скажем так вы можете Взглянуть на НМ смотрите НМ Тоже имеет какую-то важность Но если Случайный признак здесь лежит то что можно говорить про эти признаки Да вопросы к ним возникают вопросы к ним возникают ну поть вот так Ну мы уже с вами

эти признаки Да вопросы к ним возникают вопросы к ним возникают ну поть вот так Ну мы уже с вами сгенерирован с кем-то смотрели с прошлой группой м сгенерировано тривиально Сегодня вы будете запускать сегодня кто-то может быть запустит [музыка] Ну кто-то может запустит в общем смотрите смотрите Так а мы с вами переходим к следующему способу идеи отбора признаков этом Этот способ очень его идея заключается в следующем давайте наверное здесь зарисуй так смотрите есть у меня есть у меня датасет

заключается в следующем давайте наверное здесь зарисуй так смотрите есть у меня есть у меня датасет есть у меня датасет какой-то ну там какие-то признаки X1 X2 бла-бла-бла Ну ладно е я ВС это делю на то есть вот это у меня будет новая часть Вот это валидация идея смотрите В чём заключается нам нужно оценить важность признаков Какой признак важен или какой нет Ключевая выборка для нас здесь будет выборка валидации Ну у меня какая-то задача предположи признаки значения Здесь -2 было 5 здесь 7

выборка валидации Ну у меня какая-то задача предположи признаки значения Здесь -2 было 5 здесь 7 здесь 3 6 8 вот так вот здесь 4 16 20 ну число на угад подбираем вот три элемента выборки идея заключается в следующем смотрите вот я хочу оценить важность признака X1 я возьму сейчас и просто вот эти значения случайно перемешать да вот мьют в прямом смысле - это ну глагол Да мьют перемешать Вот то есть мы делаем permutation и у меня после перемешивания после вот этого перемешивания Возможно

то есть мы делаем permutation и у меня после перемешивания после вот этого перемешивания Возможно несколько вариантов Представьте что здесь они местами поменялись сети и я вновь предсказываю и вновь считаю как я повлиял на скор и у меня есть несколько вариантов если скор Давайте если скор понизился что можно сказать если скор понизился То есть я перемешал X1 опять предсказал сравнил с таргетом у меня скор понизился это о чём нам говорит X1 был важен всем это понятно или не всем Люба загадочно

меня скор понизился это о чём нам говорит X1 был важен всем это понятно или не всем Люба загадочно смотришь понятно хорошо вот да как бы соответственно признак был важен Если мы с вами перемешали а а точность осталась примерно точно такой же Ну то есть мы перемешали X1 А точно стало точно такой же неважен неважен все понимают это отлично то есть при знания пере неме ско остатся тем же самым это знат что призна неважен ну и третий вариант очень редкий когда после перемешивания скор вдруг

это знат что призна неважен ну и третий вариант очень редкий когда после перемешивания скор вдруг увеличился тогда можно сказать что призна не то чтобы не помогает он как будто бы нас ещ и на дно тянет Да поэтому Ну это понятно исключительно исто значи призна вот так вот Давайте посмотрим как это запускается у нас в [музыка] коде всё очень просто вам нужна обученная модель я обучу R Forest Ну ва здесь Как говорится могла бы быть ваша модель Да вот далее я вот беру метод permutation сюда вы

ва здесь Как говорится могла бы быть ваша модель Да вот далее я вот беру метод permutation сюда вы податей классификатор и податель на которой нужно тестировать То бишь валион Вот такая процедура как перемешивание каждого признака чтобы исключить факт случайности мы сделаем 30 повторов не один а 30 ну и фиксируем Случайность сптоваров важность признаков получилась Вот такая тоже Проблема в том что по отдельности [музыка] м по отдельности смотрит поэтому как бы относительно друг друга не совсем

по отдельности [музыка] м по отдельности смотрит поэтому как бы относительно друг друга не совсем объективно взглянуть можно но опять доминирует два признака Ой извиняюсь опять доминирует два признака всё остальное Он дал очень маленький вес но тем не менее дал тут такая же история чтобы если что-то было ниже рандома то можно было бы этот признак Удалить Да попробовать опять же говорю это видите разные методы разные концепции дают разные выхлопы то есть здесь одно здесь другое у ласа третье они

методы разные концепции дают разные выхлопы то есть здесь одно здесь другое у ласа третье они все разные и как бы где-то одно используют где-то другое ну неплохой способ советую на него присмотреться Ну и последней последнее что мы разберём с вами это val смотрите Что понять мы с вами чем примере представте что вы не знаю ите где-нибудь по новому Арбату там там играет группа уличных музыкантов в составе пяти человек у них есть солист у них есть гитарист у них есть клавишник Ударник Там и так

в составе пяти человек у них есть солист у них есть гитарист у них есть клавишник Ударник Там и так далее и они играют свою музыку и люди им кладут деньги дам можи Наступает вечер и надо делить деньги мы убираем сейчас а как бы такие там пацанские правила и прочие истории что давайте просто как бы пополам разделим проче Наша задача сейчас попробовать А если бы они были бы объективными ну пытались быть объективными и тогда они говорят ребят Вот здесь условно лежит там не знаю 1.000 руб нам надо

быть объективными и тогда они говорят ребят Вот здесь условно лежит там не знаю 1.000 руб нам надо её разделить на пятерых кто сколько как проверить кто насколько наработал Давай голоса зрителей то кого больше похвалили то получает большую часть соотношения других Ну правда эти эти данные ещё надо собрать тогда у кого больше бицепс ну если все согласятся можно и так Ну объективностью тут не пахнет так идм дальше Сколько времени играл кто е что кто сколько времени играл пропорционально по общему

так идм дальше Сколько времени играл кто е что кто сколько времени играл пропорционально по общему време все вместе игра А все вме все вместе ВС на протяжении всего вечера стояли и вот им положили более важную роль занимает барабанщику меньше всего За всеми Я был барабанщиком не надо барабан унижать А барабанщику надо больше всех платить потому что он очень тяжёлый тарелки таскает А солисту меньше всех потому что ему только Рот открывать вообще ничего не надо таскать тут спорно спорно я понял

всех потому что ему только Рот открывать вообще ничего не надо таскать тут спорно спорно я понял Вас как бы мы всё-таки ссы скорее как бы на то природу появления этих денег эти Деги при нам люди та там барабана кто-то или микрофон Вот они конечно смотрели результат поэтому мы с вами поступим следующим образом это всё на самом деле пришло из теории игр и там Идея заключалась в следующем Надо просто взять условно создать такую экосистему когда на следующий день мы бы пришли бы без барабанщика и

взять условно создать такую экосистему когда на следующий день мы бы пришли бы без барабанщика и посмотреть стали давать лько же может быть барабанщик нам не нужен был тогда или наоборот да Ага соответственно стали платить меньше значит барабанчик нужен был нам да потом Ну или Да и так по каждому без барабанщика без солиста без там клавишника без гитариста и так далее и мы смотрим насколько проседает как бы сумма если их нет И относительно бы вот этого примерно можем прикинуть цены образования

как бы сумма если их нет И относительно бы вот этого примерно можем прикинуть цены образования точнее сумму образования которая получена Ну понятно что идеально и точно это сделать невозможно вообще никак Но насколько это возможно вот пытается сделать эту историю более того чем ещё Хорош тем что он может позволить вам посмотреть это на каждом объекте выборки отдель это мен Ари которы мы проговорили все Ари и все арит отбора признаков они говорят в среднем вот Логистическая регрессия даёт вес

все Ари и все арит отбора признаков они говорят в среднем вот Логистическая регрессия даёт вес признака не знаю квадратные метры в среднем а может кому-то они не нужны Да может кому-то нужны маленькие квадратные метры но побольше земли побольше соток чтобы помидорка засадить вкусно кушать жертвовать площадью в сторону инфраструктуры то есть по факту У всех свои разные хотелки а мы лишь усреднять так вот здесь shap vales пытается как бы это сделать даже в каком-то смысле на каждом элементе

так вот здесь shap vales пытается как бы это сделать даже в каком-то смысле на каждом элементе выборки отдельно и что из этого получается Давайте запускать Так ну здесь много графиков Я на пример КТ буста буду как модель можно взять всё что угодно вот Давайте начнём наверное вот с вот этого графика который называется su так по что мне сейчас я всё мы начнём с вами С вот этого графика сам плот в этом графике Сейчас я его проинтерпретировать интерпретацию Да скажем так есть по факту три сущности

графике Сейчас я его проинтерпретировать интерпретацию Да скажем так есть по факту три сущности или четыре это имя столбцов они ранжированы по важности это значение этих столбцов да где у нас такое более красное это значит большое значение более холодное более такое синее значит маленькое значение именно самого признака самого признака и shap Impact Вот это В прямом смысле шкала импакта То есть она причём оцифровывать вот у вас У вас есть Таргет У вас есть Таргет Да вот Таргет у нас с вами там

причём оцифровывать вот у вас У вас есть Таргет У вас есть Таргет Да вот Таргет у нас с вами там Y вот у нас вот 24 21 34 вот он почему-то же 24 стоит 24000 долларов и мы пытаемся Ага вот какая-нибудь точка Вот эта Например Она говорит что вот этот признак Да он именно дал Импакт 5 то есть 5000 долларов ценообразования то есть в прямом смысле эта шкала измеряется в том в чём измеряется ваш Таргет и как бы отсюда мы можем оценивать положительный Импакт мы имеем или отрицательный и собственно

и как бы отсюда мы можем оценивать положительный Импакт мы имеем или отрицательный и собственно говоря это какойто Эмен выборки какойто Эмен выбор давайте я первый прово то есть что здесь мы видим с Вами Мы видим что более холодно уходит сюда куда-то да более горячий уходит сюда Это значит что чем больше значение в столбце ста чем больше значение ста тем это начинает наносить отрицательный Импакт цене по району чем мем меньше процент этого населения Да неблагополучного или как там как его

цене по району чем мем меньше процент этого населения Да неблагополучного или как там как его назвать не знаю правильно а км цена начинает расти причём растёт очень сильно да В некоторых районах как бы считаем мы что это является очень определяющим фактором и это очень сильно поднимает цены в районе Вот с румом что можно сказать с румом с румом можно сказать что чем больше среднее количество комнат Да по району тем цена в этом районе начинает расти Вот но кстати про отрицательную сторону особо

Да по району тем цена в этом районе начинает расти Вот но кстати про отрицательную сторону особо не скажешь Ну да чуть-чуть падает но не сильно такой более односторонний Ну что давайте кто-нибудь попробует проинтерпретировать тишина СЗ не влияет на цену потому что он в серединке наоборот Он третий вообще он в среднем лучше всего влияет То есть ты вот как бы смотришь на вот эти 2Т 5 точек нет разброс Да небольшой на самом деле но он стабильный и постоянный вот я бы так тебе сказал Видишь то есть

Да небольшой на самом деле но он стабильный и постоянный вот я бы так тебе сказал Видишь то есть Прямо однозначно разделение одного от другого Вот давай тобой проговори что ты можешь сказать про й про год постройки Ну да я сейчас поняла что там большая кучность и действительно этот признак важен но небольшое количество Так что как интерпретировать Да ну что на цену влияет я могу сказать что количество лет то есть небольшие цифры влияют достаточно Дава так большой большой леч за собой что когда

лет то есть небольшие цифры влияют достаточно Дава так большой большой леч за собой что когда когда когда дома средний возраст домов очень большой что становится с ценой цена падает Понятно цена падает то есть Видишь вот эта сторона бы отрицатель соответственно это провоцирует рост да Ну достаточно логично звучит И вот по каждому признаку вы так можете пройтись Ну да то есть синий этот синий это маленькое значение H и там цена растёт Угу Да да Абсолютно Да Дима вот вопрос то есть получается что

значение H и там цена растёт Угу Да да Абсолютно Да Дима вот вопрос то есть получается что по горизонтали Это можно сказать это вариативность признака у да да А по вертикали это что ну толщина условно говоря этих Это что Это количество вот это вот или что или вот это вот нет вот за каждую фичу график если взять для одной какой-то фичи условно говоря его растянули вариативность его Да Дада Ну это зависит от количества точек на данном уровне То есть как бы знаешь как сжали сжали и они вот стали

зависит от количества точек на данном уровне То есть как бы знаешь как сжали сжали и они вот стали вот в эту плоскость Саша вот мы сделали вывод на основе там не знаю того же стата да что чем больше значение Чем меньше значение признака тем выше цена Да вот то каким каким дальнейшим действиям нас это побуждает или это просто для ринги сложные но как правило этим никто не занимается и выискивать какие-то инсайды потому что есть те на кого это влияет сильнее есть те на кого это влияет меньше Но

какие-то инсайды потому что есть те на кого это влияет сильнее есть те на кого это влияет меньше Но глобально как бы просто можно взглянуть вон там признак НМ например и то вот смотрите вот этот признак оказался ниже хотя у него есть однозначное разбиение но скорее всего это бинарный признак потому что то есть это ну по факту корреляция только с другой точки зрения Ну да да да так есть так есть Дима а вот упорядочены эти признаки именно по принципу исключения то есть насколько они влияют если

Дима а вот упорядочены эти признаки именно по принципу исключения то есть насколько они влияют если их исключить дадада да Серёжа а а я правильно понимаю что можно при интерпретировать то что вот этот признак наш Нокс его можно выкидывать потому что там и красный с одной стороны и красный с другой он такой типа случаен вот как с одной стороны да Но с другой стороны видишь есть группа как бы Как сказать всё равно некоторое разделение есть нельзя сказать что всё мешано Как у рандома вообще плюс у

всё равно некоторое разделение есть нельзя сказать что всё мешано Как у рандома вообще плюс у Нокса есть как бы разброс влево и вправо Но вообще ты прав что как бы тут какой-то такой однозначности нет и вопрос к этому признаку вызывают Ну возникают но это не значит что если ты его берёшь то результат станет лучше он может стать лучше он может стать хуже тут надо Просто попробовать А ну можем сказать что зависимость точно нелинейная потому что сго бу получается фи нас там говорит вес этих фичей

что зависимость точно нелинейная потому что сго бу получается фи нас там говорит вес этих фичей а Импакт говорит как сильно куда они нят наш Таргет да да Ну в принципе это как бы сопоставимые друг другу вещи но просто да да импак А есть формула какая-нибудь там ИС умноженный Импакт в квадрате тамде Я не знаю может посмотреть Я не слышал может быть решение зависит поно от меня Я смотрю и сам выбираю два человека могут разные фичи и оставить Да да да это а это всё лишь предположение понимаешь

два человека могут разные фичи и оставить Да да да это а это всё лишь предположение понимаешь никто тебе здесь не скажет ответственно что мы придумали математическую идею которая однозначно у тебя всё сделать правильно это эвристики называются эвристики это предположение О чём-либо вот у тебя есть примерный результат А дальше пробуй нен неправильно воши обни правильного ответа и это просто правда которую нужно прийти мы что-то пробуем взлетает отлично Не взлетает плохо и вот по такой парадигме

которую нужно прийти мы что-то пробуем взлетает отлично Не взлетает плохо и вот по такой парадигме существуем как бы вот нет этой единой единой точки когда единая точка когда всё заработает на 100% точности пока нету 100% всё остальное как бы это игра где есть много комбинаций и непонятно как А какой процент правильных Кто является стандартом индустрии 8% 7 да Нету такого от задачи зависит вы всё какие-то стандарты пытаетесь найти лучше всегда наоборот фокусироваться на контексте то есть общего

какие-то стандарты пытаетесь найти лучше всегда наоборот фокусироваться на контексте то есть общего стандарта как такового то есть где-то 0 где-то 0,3 - это вообще классно где-то 0,3 - это отвратительно вот как бы Спасибо большое Я помню когда я работал в компании Вот как раз которая занималась анализом психологии и они там какой-то психологический вопрос придумали который корреляцию дал 0,25 с чем-то так они просто прыгали от счастья они были самые счастливые люди в этот момент А я ещ как бы

чем-то так они просто прыгали от счастья они были самые счастливые люди в этот момент А я ещ как бы недавно пришёл думаю 025 Молодцы конечно ну как бы звучит странно да типа не очень но сам факт что хоть какая-то корреляция есть они вынашивал как-то короче придумали идею поэтому контек г Конте очень ва Конте Допустим мы увидели какие-то закономерности что эти фичи возможно Надо выбросить а такие-то фичи под вопросом у и дальше как какой-то перебор происходит типа модельки мы строим с каким Ну

фичи под вопросом у и дальше как какой-то перебор происходит типа модельки мы строим с каким Ну делаем с какое-то количество переборов набор фич или как это как все фичи выкидываешь Ну можешь какой-то себе перебор устроить да Что Что фраза просто все ф выкидываешь она звучит странно просто все фичи Не не все все фичи которые тебе не подходят имеется в виду которые у тебя кандидат можешь устроить действительно перебор есть такие методы в слр типа отбора вот такого не помню как называется ну

действительно перебор есть такие методы в слр типа отбора вот такого не помню как называется ну короче это возможно сделать то что ты говоришь попробовать убрать по стандарту Как поступают сайентист типа просто убирают заведомо как бы не влияющие остальное оставляют и едут дальше или люди занимаются активно я не могу сказать какой-то единый стандарт вы меня всё к какому-то стандарту одному приводите я сталкивался с тем где сруба как можно больше чтобы модель была лёгкая И всё И им было там без

я сталкивался с тем где сруба как можно больше чтобы модель была лёгкая И всё И им было там без разницы а были те кто Наоборот за на каждый признак молились условно Да поэтому я не могу как-то сказать однозначно Но работает примерно так же чем больше ты признаков удалишь на самом деле тем будет как бы легче твоя модель от этого Хорошо всем и на практике если 1.000 фичей дают точность 0,8 а пять фичей дают 0,79 конечно выберут пять фичей Вот а если говорить как Ну да да в принципе я наверное

фичей дают 0,79 конечно выберут пять фичей Вот а если говорить как Ну да да в принципе я наверное ответил на твой вопрос поэтому я не могу сказать стандартно А может быть есть задача где Нельзя терять точность 1% тогда они оставят все тысячу фичей поэтому тут скорее нужно понять что есть такой инструмент и в контексте с чем-то уже рассуждать если нужна точность может вообще ничего не нужно будет удалять если нужна интерпретирует быть стоит Удалить если нужна что-то и так далее вот у вас сегодня

если нужна интерпретирует быть стоит Удалить если нужна что-то и так далее вот у вас сегодня будет проект там будет контекст и вы у вас уже появится рассуждение по поводу того что с ними делать поэтому как бы вот я бы наверное так ответил скорее хотела уточнить то что если какие-то фичи совсем не подходят там 900 фич совсем не подходят понят что мы их удаляем но я так понимаю что есть какие-то фичи на границе Да и там нужно будет заниматься каким-то подбором каким-то да да да Окей Ладно спасибо

на границе Да и там нужно будет заниматься каким-то подбором каким-то да да да Окей Ладно спасибо Серёжа Чернышов Атон смотри а вот ты Рандом сделал ещё одну фичу это нам ты нам сделал это Чтобы объяснить или в принципе на практике это и применяется для того чтобы отталкиваться важ неважные фича Ну я это й раз увидел на гле эту историю и на практике потом я сам делал и встречал Кто так делает Не то чтобы это прям популярная штука но прикольная идея вот как-то так м никто запрещает создать

Не то чтобы это прям популярная штука но прикольная идея вот как-то так м никто запрещает создать призна это как один из способов отбора он изв р если у тебя 1.000 фичей Ты на работе в датасете создашь ещё один никто тебе ничего не скажет то есть такая идея есть но я не скажу что она массово применяется как-то так понял спасибо [музыка] Угу А я я Насте ответить заодно спросить есть же вот эти штуки которые Back elimination Forward selection rfe это в эту сторону нужно вообще смотреть Насть

штуки которые Back elimination Forward selection rfe это в эту сторону нужно вообще смотреть Насть объясни что это такое когда мы когда мы Сашей напали 500 признаков для квартир циана с моей лёгкой руки вот было понятно что это какой-то отстой и есть штука которая типа Forward selection она берёт один признак смотрит э что-то высчитывает Дальше она как как-то я не помню сама выбирает другой если если типа Метрика стала лучше продолжает до момента когда это перестаёт влиять особы оставляет а

если типа Метрика стала лучше продолжает до момента когда это перестаёт влиять особы оставляет а квар наоборот он один выкидывает смотрит что ничего не поменял выкидывает другой дальше Вот у него есть какие-то параметры и работал довольно хорошо мы с 500 жали до 2Д и стало только лучше Вот поэтому почитаю в эту сторону закон зако Я хотел спросить изучать Я здесь это не указывал что на самом они на практике не так часто применимы как думаете почему Ну как бы они применимы но не всеми далеко не

на практике не так часто применимы как думаете почему Ну как бы они применимы но не всеми далеко не все когда дае 500 строчек кажется ВС быстро если датасет будет 100 мл строчек вы в принципе все всей компании можете отдохнуть Мне кажется на месяца два у вас просто сервер Встанет и будет работать только на один перебор и никому больше не даст работать условно Я даю вот так что как бы да что про очень хорошая идея вы е можете попробовать сегодня Это самый банальный знаете как Ана как атна в

очень хорошая идея вы е можете попробовать сегодня Это самый банальный знаете как Ана как атна в подборе атна в мире подбора гипер параметров также for и s в плане отбора признаков просто тупым перебором тупым перебором но я бы посоветовал сначала идти Вот такими способами потому что они просто более дешёвые более дешёвые если захочется вы потом запустите это запускается через од строчку кода никаких сложно как в понимании так и в запуске вот как-то так а так действительно такая идея есть Да

сложно как в понимании так и в запуске вот как-то так а так действительно такая идея есть Да Кость смотри мы внимательно изучили разными способами влияния каждого признака на Таргет всё-таки я не до конца уловил Как зафи налить и посмотреть влияние признаков между собой просто визуально через матрицу корреляций их друг другом что короче дополнительно взять один из способов и по нему отобрать признаки Причём я тебе не могу сказать какой правильны Кай те лучше ре те никто этого не скажет К

признаки Причём я тебе не могу сказать какой правильны Кай те лучше ре те никто этого не скажет К [музыка] сожалению сегодня проговорили только один про матриц Коля Да почему позволяете это брать но это в зависимости от каждый признак от таргета А я говорю про мультикор и их зависимость жду друг другом нет Ну мультикор скорее следствие того что мы обсуждаем есть уем сегодня отобрать признаки есть мультиклиник про то что ты сказал именно если ты хочешь как бы убрать мультиклиник ласса потому что

мультиклиник про то что ты сказал именно если ты хочешь как бы убрать мультиклиник ласса потому что это Линейная модель мультикор - это Линейная зависимость все остальные алгоритмы они как бы не особо делают акцент на мультилиния поэтому они просто уберут тебе какие-то признаки чтобы тупо знаешь сохранился скор неважно любой ценой чтобы тупо сохранился скор поэтому поэтому поэтому Да ты собственно говоря отчасти прав Матрица корреляции позволит мультиколлинеарность и ласа и ласа Но если как бы

говоря отчасти прав Матрица корреляции позволит мультиколлинеарность и ласа и ласа Но если как бы объединить вс-таки нашу тему у нас борьба не с мультикар а а борьба скорее с ненужными признаками вообще да с ненужными чтобы сократить размер и максимально держать точность в том числе то вот всё что ниже обсуждали прекрасно подходит для этой истории просто может быть тогда у меня логика не очень Верная мне показалось что сначала нужно посмотреть влияние каждого признака атом то есть мы уже убрали

мне показалось что сначала нужно посмотреть влияние каждого признака атом то есть мы уже убрали часть признаков а потом ещ дополнительно убрать те которые между собой сильно зависимы чтобы ещ облегчить модель То есть мне показало такой стандартный па но звучит так что можно второй НКТ не делать оставить просто первый есть Ну что ж ещё собственно говоря посмотрим вот такой рисунок с вами Какая ен мо постараться встроить в постараться построить в встроить в Stream Lead То есть я бы вам дал объект

постараться встроить в постараться построить в встроить в Stream Lead То есть я бы вам дал объект на выборке на предсказание вы мне вернули примерно такой график В чём его история вот смотрите логика опять Вот у меня есть Y сек Да вот смотрите у меня есть Y средняя цена по району Точнее по районам по районам 2253 000 Ну короче вы поняли 22.500 долларов Обратите внимание это значение есть на этом графике вот оно видите А дальше мы сыграем в игру мысль на самом деле очень-очень логичная типа

графике вот оно видите А дальше мы сыграем в игру мысль на самом деле очень-очень логичная типа смотрите есть как бустинг решает вот бустинг сначала всё приказывает в среднем А дальше говорит этот район почему-то вдруг стал 30.000 долларов а этот почему-то 15.000 долларов То есть и пытается объяснить конкретно Вот shap vales какие факторы тянули вверх Какие вниз понятно И это знаете вот похоже В каком-то смысле я провожу параллель г де с играли все по-любому в перетягивание канатов знаете две

каком-то смысле я провожу параллель г де с играли все по-любому в перетягивание канатов знаете две команды делятся канаты перетягивают не играли как это я буквально в в чат написал просто секунды две назад Да а серьёзно прикольно совпала да то есть собственно говоря канат перетягивает У меня просто тоже такая первая ассоциация возникает перетягивание каната две команды тянут по разную сторону только тут как бы не совсем перетягивание каната А Знаете есть стенка есть стенка и все эту стенку

только тут как бы не совсем перетягивание каната А Знаете есть стенка есть стенка и все эту стенку давят нужно продавить команду соперником В каком-то смысле Ну и собственно говоря вот берём я беру там нулевой можно любой элемент выборки взять вон сотый элемент выборки возьмём вот сотый элемент выборки и можно попробовать посмотреть То есть видите он стоит гораздо больше чем средне по что на это влияло во-первых Эста очень низкий а очень низкий Эста мы с вами знаем способствует увеличению цены

влияло во-первых Эста очень низкий а очень низкий Эста мы с вами знаем способствует увеличению цены правильно рум тоже большое видимо значение принимает тоже вправо давит собственно говоря вот признаки которые дают вправо но при этом здесь всё-таки райончик не молодой поэтому цена должна падать Да ну там так Я думаю что-то с налогами наверно связано налоговая история как бы тянет сюда тоже можно прочитать Вот и так можно посмотреть там любой возьмём 153 Это район наоборот видите эльста процент

прочитать Вот и так можно посмотреть там любой возьмём 153 Это район наоборот видите эльста процент видимо здесь высокий комнаты видимо маленькие дома старые и тут как бы доходит уже до крайности приходится рандому вставать как бы и держать стенку то как не он как говорится наш случайный признак понимаете будет хоть как-то балансировать вот эту стенку вот эту стенку то есть уже до абсурда доходит Да очень крутая штука А смотри значит ширину этих вот баров можно интерпретировать Как влияние

Да очень крутая штука А смотри значит ширину этих вот баров можно интерпретировать Как влияние признаков в принципе да да да да да да а но при этом понять сейчас скажу Какое именно значение этого признака то есть оно маленькое или большое здесь не увидим Ты имеешь в виду в прямом смысле импа Ну дадада то есть фике ниже его можно вытащить его можно вытащить прикольно надо просто посмотреть там внутри но его можно это у отображение простой математики есть базовая цена есть из него что-то вычитают

но его можно это у отображение простой математики есть базовая цена есть из него что-то вычитают что-то прибавляют В итоге где-то это значение стабилизировалось вот Да мне тоже нравится достаточно красивый график Ну хоть какая-то попытка на каждом объекте выборки объяснить Да что собственно Какие факторы были способствовали учени Какие уменьшению Давай любой вопрос вот когда мы не смотрели ещё конкретну Да вот сейчас да конкретный элемент выбрать а просто А что у нас серединка вот между

ещё конкретну Да вот сейчас да конкретный элемент выбрать а просто А что у нас серединка вот между красными и синими не на Бейс Ну у нас все дома стоят как средний что ли Или мы предсказываем всё как средне Ну вот да И когда мы взяли не конкретные дома Да вот сначала дороже был дом потом дешевле асто Вот ты открыл всё вот почему не на середи почему не на граница разделения красного и синего так Потому что вот наше предсказание - это среднее по твоей выборке это вот у тебя есть 100 районов

так Потому что вот наше предсказание - это среднее по твоей выборке это вот у тебя есть 100 районов Бостона средняя цена по районам 2253 вот конкретно на этом объекте 2407 и те попытка обяснить Почему у нас все машины на рынке стоят как средняя вот средняя машина на рынке по милна все машины стоят по милна А мы же Сначала мы сразу смотрели это только для конкретной машины можно построить трафик строится для конкретного элемента выбрать я же вот вопрос сня сла пропусти есть это для конкретного

строится для конкретного элемента выбрать я же вот вопрос сня сла пропусти есть это для конкретного элемента выбрать вот а здесь соответственно общая картина здесь большее количество элементо выборки здесь все все элементы выборки тоже по элемента но отдельно но вообще у них там много всяких разных графиков красивых типа есть просто можете открыть документацию val Вот и посмотреть что они здесь рисуют хорошего библиотеку создали всякие разные приколюшки много всего есть да Люба вот я ещё знаешь

хорошего библиотеку создали всякие разные приколюшки много всего есть да Люба вот я ещё знаешь что вот загуглила сейчас то что О чём Сергей говорил про фвар и описании не нашла отличия от где музыканты боролись за деньги for что они тоже там берут модель без каких-то признаков идея такая же нет идея на самом деле похожая просто но реализация внутри другая Шепс он никого не убирает столпцы он на самом деле просто меняет в каждом объекте значение То есть если вы хотите оценить важность й то он

самом деле просто меняет в каждом объекте значение То есть если вы хотите оценить важность й то он Ваш текущий й заменяет На мат ожидания и в итоге В итоге Исходя из этого оценивает важность признаков for selection просто убирает обучает один раз модель это его большой плюс он не такой долгий for selection обучит модель тонны раз это его минус но for selection может оказаться поточнее в плане отбора признаков смотря смотря Люба за чем ты гонишься тут за интерпретируем те for selection точно не

признаков смотря смотря Люба за чем ты гонишься тут за интерпретируем те for selection точно не по пути за точностью тебе по пути за если у тебя много времени тебе туда по пути если у тебя времени нет ресурсов вычислительных тебе туда не по пути А вот эти ребята они подешевле все SH val и прочим короче Отличие в том что ещё раз да val - это обучение один раз модели А вот Forward selection - это очень много раз количество обученных моделей Вот такие пироги Сегодня у вас Ну может быть Не сегодня

много раз количество обученных моделей Вот такие пироги Сегодня у вас Ну может быть Не сегодня может за Завтра у вас будет попытка попробовать как-то отобрать признаки берите разные способы смотрите у вас будет В этом задании что прикольно некий соревновательный дух соревновательный который Вам возможно бы добавят добавят вайба чтобы пытаться хорошо всё это дело отобрать как-то и придумать что-то поинтереснее вот ну что ж на этом мы наверно Сейчас закончим мы с вами сейчас разделимся на группы

поинтереснее вот ну что ж на этом мы наверно Сейчас закончим мы с вами сейчас разделимся на группы мы с вами разделимся на на группы мы с вами разделимся на группы так Ладно будем мы делиться по два человека будем делиться есть кто как Оля по каким-то причинам будет очень тяжело справляться с проектом потому что будет отвлечённая буду сегодня Сегодня ты получается вообще выдаешь да про Сегодня скорее всего да Так давай тогда вот вас с Олей поставим в одну команду у вас времени будет меньше у

скорее всего да Так давай тогда вот вас с Олей поставим в одну команду у вас времени будет меньше у вас времени меньше будет но с вас будет проект просто позже а остальных коллег мы распределим случайным образом так Ну что поехали сейчас я быстренько вас запишу То есть у на остатся человек если меня математика Не подводит правильно Угу сделаем чисто случайную генерацию нужно какое-то условие сделать чтобы как в прошлый раз Ну чтобы другая была пара не как в прошлый раз Ну если что просто Пере

чтобы как в прошлый раз Ну чтобы другая была пара не как в прошлый раз Ну если что просто Пере запустим я тут дольше вам это условие буду писать так так луба тебя не включаем раз два так Костя Люба кого ребят извиняюсь сразу Саша Саша а Сашу Забыл да без камеры он по я смотрю вас на лице по камере так всё Ну что поехали ваш коллега на ближайший день так сначала я вас просто перемешал случайным образом НМ CH ой шафу ша Всё вы перемешаны А теперь Теперь мы берём вас вот так а точка Шей Можно даже

НМ CH ой шафу ша Всё вы перемешаны А теперь Теперь мы берём вас вот так а точка Шей Можно даже да можно было через я что-то зачем-то так сделал сонной вас во здесь на 2 наче можно кстати не 24 а 2 ми о поставить то что я вам рассказывал он будет сам знать Нет неправильно ми1 2 вот так Ну что же вот команды смотрим и запоминаем Давайте ещё дадим название какое-нибудь Первая команда будет вторая команда будет Третья команда чет команда будет пй команде ещ придумаем название вот как-то так есть

команда будет Третья команда чет команда будет пй команде ещ придумаем название вот как-то так есть какие-то своего коллегу по работе Вот надеюсь никаких дублю жей не возникло сильных да типа Саша тебя Ты ремонтик что имеешь в виду так дома ремонт я говорил просто там не помню вчера ну тебя те это отвлекать Будет А камера не не просто камера Да всё Поня с Так теперь по поводу заданий поводу заданий на самом деле достаточно масштабная Точнее не масштабно а достаточно объёмно достаточно объёмная

на самом деле достаточно масштабная Точнее не масштабно а достаточно объёмно достаточно объёмная и надо правильно распределить силы Потому что от вас потребуется очень много что так собственно говоря здесь что у меня здесь репозиторий который я вам сейчас открою на этот проект проект - это открытое соревнование на гл оно тоже связано с недвижимостью вы уже эксперты в этой истории Вот это соревнование нал чем оно хорошо во-первых здесь очень много признаков можно повозиться поработать и нас с

нал чем оно хорошо во-первых здесь очень много признаков можно повозиться поработать и нас с вами ждёт сразу же сколько Короче у вас будет порядка 90 по-моему признаков здесь ну плюс-минус который как-то надо обрабатывать заполнять наны кодировать там придумывать фичи инженери и так далее здесь есть это соревнование Если вы Нате вы станете его участником есть лидерборд сегодня я вечером поражаюсь что новые топче сюда пришли правильно сдвинули этих ребят четыре команды из Эльбруса Вот Но их

что новые топче сюда пришли правильно сдвинули этих ребят четыре команды из Эльбруса Вот Но их Конечно сложно сдвинуть особенно вот этого потому что здесь метрику надо минимизировать это уже конечно это подгоны подгоны объективная история я вам сейчас скажу сколько возможно Ну плюс-минус вот вот те кто начинают Вот наверное Ну 04 Я не знаю насколько реально это что-то уже тоже какими-то читами по пахнет Ну вот вот с 06 07 вот эти история реальная это нищеты вот а вот этот уровень выбить То есть

пахнет Ну вот вот с 06 07 вот эти история реальная это нищеты вот а вот этот уровень выбить То есть вы вполне себе можете попасть куда-нибудь вот сюда Ну точнее не сюда а вот куда-нибудь сюда если постараетесь Хотя нет если из 0 из 012 выйти сложно из 012 Я вспомнил из 0,12 выйти сложно видите как бы тут уже плотность выше из 02 из 02 вылезти очень сложно не так просто надо нетривиальные идеи рассматривать при образование дахи поможет точнее этим ребятам помог вот этим ямщики самый главный Так

при образование дахи поможет точнее этим ребятам помог вот этим ямщики самый главный Так что ещё скажешь что ещ скажешь вот здесь очень много нюансов здесь очень много нюансов и я как бы вам в принципе оставил файл который Прочтите во-первых Прочтите советы Прочтите советы Прочтите советы Да и Прочтите советы и посмотрите примерный план план действия может быть таким вы его можете подстроить под себя немножечко но здесь как распределить работу Что делать в первый день что во второй день но в

себя немножечко но здесь как распределить работу Что делать в первый день что во второй день но в итоге на выходе у вас должно быть Аж три сущности Вы должны а загрузить результат на кгл и посмотреть на каком вы месте собственно говоря оказались на гле Да если попадёте в топ 500 Это уже хорошо как бы не надо прям угорать по месту лучше сфокусироваться на том чтобы красиво сделать стрим Lead посчитать какие-то другие метрики или что-то ещё второе задание вам нужно построить и деплоить ML сервис

какие-то другие метрики или что-то ещё второе задание вам нужно построить и деплоить ML сервис для автоматического предсказания будущих объектов недвижимости в этом районе сделать это необходимо с помощью Stream Lead вам Ну вот собственно говоря здесь прописано интерфейс Короче нужно задеплоить модельный мли Ну и третье Вы должны приготовить небольшую презентацию в которой собственно говоря Какие идеи пробовали Какие гипотезы пробовали что взлета что помогло что не помогло какой ppl оказался

идеи пробовали Какие гипотезы пробовали что взлета что помогло что не помогло какой ppl оказался самым удачным Какие метрики ещё Считали и так далее То есть вот такой вот фронт работы на 2 дня вечером это уже завтра надо будет презентовать завтра когда ещё раз Ну я думаю что в п Возможно не в п возможно в 4:30 Ну более предметно завтра с вами об этом поговорим что ещё я хотел сказать ребята что я хотел ещё сказать здесь Метрика качества млс это как МС только разница не иков а логарифмов и и и

я хотел ещё сказать здесь Метрика качества млс это как МС только разница не иков а логарифмов и и и предсказанного поэтому я вам советую предсказывать и а на логарифме и это по-моему у меня прописано Да вот прописано здесь совете совете Обратите внимание на это и ещ вам Никто не запрещает выводить другие метрики не фокуси только на ней эта Метрика не очень интерпретируемые выводите чтобы Лучше понимать задачу понятно То есть держите контекст целиком важный файл description txt это файл который

задачу понятно То есть держите контекст целиком важный файл description txt это файл который есть там в гле здесь да у них в вариантах вот Data description в этом файле в этом файле А в этом файле прописано прописано како Какой признак Что делает Вот например там есть признак гараж Да и там вы увидите NAN Вы подумаете что это пропущено значение будете заполнять какое-нибудь моды по гаражам и так далее но в дескрипшн [музыка] Нан это значит гаража нет И вот это как бы вам поможет чтобы вы просто

но в дескрипшн [музыка] Нан это значит гаража нет И вот это как бы вам поможет чтобы вы просто понимаете кто это проигнорировать он может быть как угодно по математике по математической истории там тюнить создавать сверх математические модели Но если данные тупо неправильно заполнены вы уже Априори дали фору на пол дистанции другим людям поэтому как бы все надо в первую очередь делать акн на данных то есть более корректно эти данные подать более корректно их обработать там и вся вся вот эта вот

то есть более корректно эти данные подать более корректно их обработать там и вся вся вот эта вот вытекающая история плюс впш файле вы сможете познакомиться с каждым признаком То есть каждый признак что он значит это важно потому что вам их предо обрабатывать вам что-то с ними делать и по-хорошему бы понимать да а не просто какие-то типа лотария о мне говорит непонятно гори вот такой фрон рабо с вами я думаю что вечером созвонимся к вечеру нужен итог а итогом сегодня от вас от каждой команды Я

вами я думаю что вечером созвонимся к вечеру нужен итог а итогом сегодня от вас от каждой команды Я жду хотя бы один Ну понятно один мне нужен один белай результат сегодня не заморачивайся я это прописал первый день не угараете прямо сильно постройте просто бела модель чтобы у вас был как бы вы решили проблему холодного старта у вас было понятно что к чему улучшать результаты вы будете завтра сегодня чтобы пала работал вы отправили и всё корректно работало Вот то есть сегодня от вас я жду

сегодня чтобы пала работал вы отправили и всё корректно работало Вот то есть сегодня от вас я жду какой-то белай от каждой команды да бы у меня файл не открывается через github который там сейчас дам сейчас дам Так ещё какие-нибудь вопрос есть Может быть у кого-нибудь а завтра на ве дера про Да завтра у нас будет только ретроспектива ретроспектива и соответственно п сегодня нужно делать сегодня сделать осной фн работы а завтра надо его чинить сегодня делаем бела а завтра Да улучшаем завтра

сделать осной фн работы а завтра надо его чинить сегодня делаем бела а завтра Да улучшаем завтра презентация сегодня нужно собрать па максимально Завра не будет Что такое ретроспектива лекция ретроспектива - это утренний сезон в 9:00 утра типа проводим как-то анализируем прошедшую неделю что что получилось что не получилось что понятно что не понятно Вот Бул Проверь ещё раз я открыл репозиторий по тебе проверим за всех написано хвала Антону это правильно абсолютно Так какие-то вопросы остались

тебе проверим за всех написано хвала Антону это правильно абсолютно Так какие-то вопросы остались ко мне если нет Да давай се есть какието советы по разделению обязанностей пока не очень понимаю типа как па двум людям писать как будто бы очень тяжело распараллелить дест смысле по этому пово предложим на числовых признаках другой фокусируется на категориальных признаках потом просто друг другу отдаёте э две части и можете пока на уровне моделей что-то потюленить хитро кто-то Просто смотрит в

отдаёте э две части и можете пока на уровне моделей что-то потюленить хитро кто-то Просто смотрит в первую очередь на числовые признаки рассуждает Какие нужны какие не нужны какие оставить Какие не оставить зальные признаки кае нужные нее оставить оставить сост работу как-то мчить да пайплайн часть пайплайн которая отвечает за за числовые признаки тому кто категориальный категориальный кто числового соответственно как бы вот как-то так можно попробовать подсобное Ну кто-то берёт один Спектр

соответственно как бы вот как-то так можно попробовать подсобное Ну кто-то берёт один Спектр моделей кто-то другой Спектр моделей можно с одним и тем же сидом всё это тащить и соответственно в атюн загонять одни модели другие Ну вот как бы вот как-то так потихоньку распараллелить [музыка] Ну я согласен Это не самая простая история но завтра будет Уже проще один может пытаться тюнить улучшать модели другой начнёт собирать Стрим Лид То есть это именно сегодня сложнее распалить завтра

модели другой начнёт собирать Стрим Лид То есть это именно сегодня сложнее распалить завтра распределится работа прекрасна Ну что всё тогда на этом закончим все помнят своих коллег по команде бу у меня Антон Бул с Димой Люба с Сашей жа сй и Настя с коей что ещ раз Сержа рате получается команда называется ну если хотят могут переименоваться получается так Сергей Сергеевич [музыка] получается я не работал никогда на каг не пробовал то что мы там видим ме Да они где-то либо в overw напишут это

не работал никогда на каг не пробовал то что мы там видим ме Да они где-то либо в overw напишут это либо где-то не здесь по-моему они пишут вот где-то здесь если поищешь то найдёшь считают они всегда на соревнованиях пишут Какая Метрика является метрикой оценки качества Угу Ну то есть не стоит бояться там вот этих ограниченного количества попыток загрузки потому что о всё равно на своём коде всё это можем увидеть эти цифры а туда загружать уже когда уверены в них Дада То есть у вас здесь всего

это можем увидеть эти цифры а туда загружать уже когда уверены в них Дада То есть у вас здесь всего 10В Вы можете себе создать ванную выборку небольшую вам дадут И те с разметкой тест без разметки тест нужно Вот разметить как раз таки предсказать и отправить на А вот реновы вы небольшой кусочек можете отрубить и валидировать себя проверять И только же самые кайфовые гипотезы сюда как-то закидывать Окей А закидывается туда Что именно код нет [музыка] Ноа предсказани Им просто нужно на самом деле

Окей А закидывается туда Что именно код нет [музыка] Ноа предсказани Им просто нужно на самом деле есть 100 объектов те ну 100 предсказаний туда вставить вот что они тебя ждут код им не нужен код нужен на больших сния на деньги потому что там собственно говоря ты выигрываешь код реализаци кода переходит в интеллектуальную собственность те кто организовывает забыл Ну ладно вспомню напишу Ну всё тогда давайте Удачи и на связи Если будут вопросы толубай соли спешите но я напишу ещё вам надо будет

давайте Удачи и на связи Если будут вопросы толубай соли спешите но я напишу ещё вам надо будет сотворить невозможно завтра очень сильно ускорится Ну или за субботу потом отправить собст результат но мы помм давай овать Работу работать вот пересылать в каком-то чате кусочки или продуктивне будет на это лучше пока в чате вы сейчас вя загрузите у вас весь фокус на гит наверно уйдёт Вот лучше пока просто в чатах отправляйте себе ищ Ну да потому что наверное много времени уйдёт чтобы разобраться с

в чатах отправляйте себе ищ Ну да потому что наверное много времени уйдёт чтобы разобраться с эти Да и он для Юпитера для ноутбуков он не очень удобный вы в ноутбуках всё равно будете работать поэтому Всё Давайте Успехов вам и на связи До вечера пока-пока

так Всем доброе утро Ну что будем начинать так вот у нас одного не хватает люг Да у нас нет по-моему так экран мы видно Отлично Так ну что мы с вами переходим к последней финальной недели на фазе оди в принципе у нас здесь грубо говоря будет две такие глобальные темы две большие темы там с небольшой разбивочные ряды каждый из них на каждый из них мы поработаем 2 дня Да То есть понедельник вторник кластеризация среда четы ременные ряды и в пятницу будет экзамен то есть вот такой план примерно эту

среда четы ременные ряды и в пятницу будет экзамен то есть вот такой план примерно эту неделю Если есть какие-то вопросы можете спросить [музыка] предварительно Ну вопрос по экзамену он будет состоять эм по экзамену потом не сейчас будет время я вам всё поподробнее расскажу Да экзамен соло или команде Да [музыка] соло те с э штукам с интервью которые ты у нас спрашивал по Метрика можно будет потом узнать правильные ответы интервью спрашивал по триком что помнишь сказал то что ты был на каком-то

узнать правильные ответы интервью спрашивал по триком что помнишь сказал то что ты был на каком-то собеседовании потом интересно будет узнать Да хорошо Ага Так Ну что поехали кластеризация И как контекст понижения размерности самое главно кластеризации Итак мы с вами на прошлой неделе проходили машинное обучение или как это всё в принципе машинно обучения Но мы с вами проходили так называемый supervise Learning или обучение с учителем под учителем подразумевается Таргет как бы мы знаем какому

Learning или обучение с учителем под учителем подразумевается Таргет как бы мы знаем какому объекту Да соответствует целевое значение и соответственно Исходя из этого могли востановить там закономерности паттерны и так далее ещё есть машинном обучении задача которая называется unice Learning или обучение без учителя что мы с вами здесь в данном случае имеем в данном случае мы с вами имеем Ну признак призна описание объектов призна описание объектов То есть это наше пространство X12 блаблабла xn

призна описание объектов призна описание объектов То есть это наше пространство X12 блаблабла xn в зависимости от того сколько у вас признаков и как бы Исходя из этого мы можем вычленять пытаться какую-то информацию но Давайте зарисуй самый какой-нибудь тривиальный пример пусть у меня 2D пространство будет Вот и вот у меня вот как бы Пять элементов выборки и е собственно говоря Эмен кластеризации в принципе это будет ну найти какие-то общие структуры паттерны в в наших элементах выборки а

в принципе это будет ну найти какие-то общие структуры паттерны в в наших элементах выборки а единственное что мы можем сделать мы можем попытаться как-то объединить похожие друг на друга и разделить непохожие друг на друга в данном случае это было что-то типа того да то есть вот это один кластер вот это второй кластер собственно говоря как это делать есть разные математические идеи разные математические подходы мы с Вами рассмотрим три три из них три принципиально разных вот как-то так и

подходы мы с Вами рассмотрим три три из них три принципиально разных вот как-то так и начнём мы с канс алгоритма конс Я здесь всё прописал словами алгоритм но по факту нам нужна будет самое главное - это визуализация Сейчас секундочку А так 200 точек кластера Давайте поставим меньше пусть будет т супер смотрите вот у нас какое-то признаков видите что здесь три кластера Да ну объективно три кластера в реальности в данных Как работает алгоритм кон Вы ему говорите сколько кластеров то есть

кластера в реальности в данных Как работает алгоритм кон Вы ему говорите сколько кластеров то есть изначально можно и не угадать но в общем есть три кластера мы как бы случайно инициализирует называться троими А дальше происходит Следующая история каждая точка есть вот смотри вот у нас точки сюда попали вот каждая как бы часть пространства она ближе к одной центроид согласны А значит что какие-то точки грубо говоря лежат и принадлежат а принадлежат одному кластеру другие другому но это ещё не

точки грубо говоря лежат и принадлежат а принадлежат одному кластеру другие другому но это ещё не всё это инициализация дальше происходит итерация Мы с вами будем итерироваться центроида будет двигаться в центр масс этих точек то есть смотрите что происходит Вот то есть как бы тут очень легко э так совпало просто что центроид инициализировать с очень удачно Давайте попробуем какой-нибудь более неудачный случай взять вот Ну например наверно такой да можно сказать здесь вот собственно говоря это

случай взять вот Ну например наверно такой да можно сказать здесь вот собственно говоря это идёт идёт идёт идёт Так Сейчас я поставлю побольше точек Давайте вот Давайте ещё раз запустим смотрите вот эта центроида К сожалению Нижняя она застряла и никуда не двинется вот а остальные начинают разделять разделять разделять то есть вот это всё двигается Вот это н двигатся цент масс соответственно захватывает всё больше и больше точек у этой точки отбирает Ей приходится смещаться влево к своему

захватывает всё больше и больше точек у этой точки отбирает Ей приходится смещаться влево к своему центру масс И это всё будет проходить до тех пор пока не произойдёт некая стабилизация и собственно говоря центроид Ну как бы не будут двигаться вот что что какие проблемы здесь есть проблемы есть конечно явно вот такие вот случаи Да когда соответственно Мы инициализирован плохо но в комин с этим борятся в комин просто это в принципе даже будет за пределами вашего взора там 10 раз 20 раз подряд

борятся в комин просто это в принципе даже будет за пределами вашего взора там 10 раз 20 раз подряд запустится это алгоритм и усредни соответственно эта проблема решится А так больше в принципе никаких сильных проблем нет нет ещё одна проблема есть связанная знаете С чем связана с тем что вот как бы ладно сейчас я вижу рисунок А часто рисунок невозможно рисовать то что пространство больше соответственно мне приходится на угад ставить количество кластер я его ставлю ну и соответственно по факту

мне приходится на угад ставить количество кластер я его ставлю ну и соответственно по факту промахи вот здесь видите опять уда тя про наезда Ниго здесь наме сри происходит вот разделение какое-то очевидно что на самом деле Ну как бы это уже не относится к реальности Да это не совсем кластер и мы занимаемся на самом деле фигнёй Вот как это увидеть мы будем стараться это увидеть по Метрика то есть посчитать метрику и подобрать оптимальное количество вопрос или всё понятно давай бы в индустрии пре

метрику и подобрать оптимальное количество вопрос или всё понятно давай бы в индустрии пре доминантная Какая система с учителям или без учителя обучения доминантно в смысле чаще имеешь виду используются конечно с учителем чаще А зачем придумали без учителя для кого когда нет учителя не всегда же есть разметка данных то есть ну какой бы не был бы Каны Несси они не то что они просто не совсем сравнимы они разные Ну тебе когда говорят классификацию не знаю вот те говорят построить классификатор не

они разные Ну тебе когда говорят классификацию не знаю вот те говорят построить классификатор не знаю который будет классифицировать кошек от собак Да а для задач кластеризации немножко другая логика кластеризация Единственное что может это объединить объекты близкие друг другу в пространство в один кластер и сто задать см обм на работе говор Бу Вот у нас есть данные о клиентах да Ну например Это банк да Вот наши клиенты Попробуй найти какую-нибудь типа выделить кластеры или выделить группы

Это банк да Вот наши клиенты Попробуй найти какую-нибудь типа выделить кластеры или выделить группы какие-то клиентов ты проводишь кластеризации потом пытаешься как-то её с интерпретировать вот этот кластер Сейчас секунду Давай прису типа Аля вот этот кластер это там люди старше не знаю 35 лет Тото Тото Тото Тото вот эти у них там поведение такое-то такое-то Ну короче собственно говоря ты пытаешься просто понять что значит каждый и то есть видишь как бы логика немножко другая больше не для

просто понять что значит каждый и то есть видишь как бы логика немножко другая больше не для результата для обучения кластера Я ищу кластеры а не ищу какой-то результат Ну кластер это и есть результат по факту для тебя для него Да да спасибо аба получается кластеризация классификация это плюс-минус одно и тоже нет ну может быть можно так назвать Я не знаю са ю надо понимать В чём луба разница Мне кажется как бы достаточно сильная разница чтобы сказать что они не похожи друг на друга но при этом

кажется как бы достаточно сильная разница чтобы сказать что они не похожи друг на друга но при этом в принципе в каком-то с какой-то стороны может быть и похоже Ну что лба Давай твой ответ В чём разница кластеризации и классификации классификация она типа типа классификация больше чем кластеризация в плане лизация это как типа под классификацией В чём разница [музыка] конкретно Я же в самом начале сказал ещё раз говорю для всех кластеризация у вас в обучающей выборке нету игрека это обучение

сказал ещё раз говорю для всех кластеризация у вас в обучающей выборке нету игрека это обучение без учителя а классификация - это с учителем Вот это самая главная разница Окей понял так перепроверить себя в классификации может быть много много классов Да классификация Да может быть это задача многоквартирный он как бы достаточно лёгкий в принципе относительно других алгоритмов кластеризации поэтому очень легко использу следующее это иерархические методы это методы Ну на самом деле там есть два

очень легко использу следующее это иерархические методы это методы Ну на самом деле там есть два подхода мерав Дивный более популяр арати поэтому Наверно я на примере него собственно говоря вам и покажу Давайте смотрим верхнюю картинку идея очень простая мы начнём с того пром СЖ кластер Ну То бишь у меня здесь 11 кластеров Да вот а далее Далее мы будем объединять Ну Точки которые близки друг другу ну близки друг другу мы их будем объединять ити посчитать что это новый кластер эта игра

друг другу ну близки друг другу мы их будем объединять ити посчитать что это новый кластер эта игра продолжится до тех пор пока все точки не объединятся в один кластер То есть вот это всегда как бы первое состояние А вот это всегда последнее состояние потом надо просто будет выбрать оптимальную историю то есть найти оптимальный момент где как будто бы самое идеальное количество кластеров Но в данном случае я думаю вот эта картинка да то есть вот здесь два кластера образовалось раздва Я думаю

случае я думаю вот эта картинка да то есть вот здесь два кластера образовалось раздва Я думаю что это похоже на правду что в данном случае именно вот эти два кластера вот как-то так да кто определяет когда остановиться и на каком размере остановиться А ты можешь это зада через гиперпараметры вот плюс кое-какие выставлены по умолчанию для тебя Да собственно говоря ещё Так секунду все эти алгоритмы которые мы сегодня с вами проговариваем они также лежат в библиотеке esor вот или там не знаю esor

которые мы сегодня с вами проговариваем они также лежат в библиотеке esor вот или там не знаю esor comin давайте откроем откроем comin вот а ну что здесь интересного собственно говоря также Да количество кластеров указываем в принципе вам особо больше здесь ничего и не нужно То есть как бы реально какие-то прямо параметры в принципе трогать ничего не нужно Ну как бы можно попытаться но в целом по факту только один такой очень важный гипер параметр основной всё остальное как бы так ну и

целом по факту только один такой очень важный гипер параметр основной всё остальное как бы так ну и собственно говоря там вот все алгоритмы которые мы с вами поговорим они есть в библиотеке в библиотеке слр Вы можете строить и вставлять свои пайплайн вот собственно говоря агломерат кластеризация тоже в том числе вот так так вот собственно говоря как бы на какой-то из трасс Мы остановимся и это будет оптимальное количество кластеров сразу скажу что ну на мой взгляд это Из всех трёх что мы с вами

оптимальное количество кластеров сразу скажу что ну на мой взгляд это Из всех трёх что мы с вами проговорили самый менее популярный Однако он принципиально по-другому строит Поэтому иногда его используют вот как-то так ещё кстати вот очень показательная история как работает агломерат кластеризация есть такой график называется денма вот а стала по-другому чуть-чуть [музыка] КСЕ так вот смотрите вот у меня есть соответственно элементы выборки элементы выборки вот всему этому как-то могло

вот у меня есть соответственно элементы выборки элементы выборки вот всему этому как-то могло соответствовать То есть это как бы элементы выборки они где-то у меня лежат в пространстве да По каким-то характеристикам может быть не знаю цвет может быть ягода Ну если переводить Да там не знаю к ягоде относится к фруктам или к овощам может быть к форме или ещё чему-то в итоге получается Какая история Смотри вот каждое наше обединение которое мы с ми вы проговорили в амера кластеризации оно

история Смотри вот каждое наше обединение которое мы с ми вы проговорили в амера кластеризации оно непосредственно соединяет ближайшие объекты и вот у нас смотрите вот они образовались да то есть пи поему персики Да и он то есть апельсины персики оказались близкие друг другу они объединились в один кластер далее соответственно объединились там с яблоками перс не помню что такое Ну короче вот объединилась да группа и соответственно здесь Да ви с вином ление всё соединим в один кластер но нам

да группа и соответственно здесь Да ви с вином ление всё соединим в один кластер но нам нужно как бы где-то остановиться и как будто бы вот это разделение по мнению автора данного рисунка считается оптимальным да то есть Итого у нас получится четыре кластера д и вот эти два элемента то есть томаты типа ни на кого не похожи и бананы ни на кого не похожи получается что у нас четыре кластера в данном случае дама а то вс-таки этот выбор он Поа до финального схода какойто Вот именно так именно так

случае дама а то вс-таки этот выбор он Поа до финального схода какойто Вот именно так именно так мы можем с вами вы дендрограм всегда сможете построить Давайте с вами вместе построим какую-нибудь грамму вот предположим предположим чтобы лучше понять Да как всё это работает возьмём что у нас есть мы делаем кластери И пусть у нас будет с вами пять точек тока здесь точка здесь точка 4 здесь точка 5 вот так Ну что ж какие точки самые ближайшие начинаем соединять вот грамму как здесь [музыка]

5 вот так Ну что ж какие точки самые ближайшие начинаем соединять вот грамму как здесь [музыка] сделаем самые наверно ближние точки друг другу третья Пятая и первая вторая правильность какието условные коорди это уро меня Вот это будет двоечка Вот это пусть будет шека Вот это будет Семка соответственно Здесь пусть будет четвёрка примерно здесь будет примерно шестёрка так вот Давайте вместе с вами единичка и двойка На каком расстоянии друг от друга находятся Да всё верно то есть одна какая-то

единичка и двойка На каком расстоянии друг от друга находятся Да всё верно то есть одна какая-то условная единица расстояния Правильно мы их соединили сюда их орау четки здесь место понадобится вот третье пятое Ну тоже да получается на расстояни один лежат друг другу соединили вот далее Что происходит на следующей рации Ну четка Наверно объединится с ними там на самом деле происходит следующим образом вот эти две точки их серединка где-то вот здесь стала да как бы такая серединка кластера и к

вот эти две точки их серединка где-то вот здесь стала да как бы такая серединка кластера и к ним присоединяется е четка находится это расстояние сес будем с мива но чему-то оно равно В итоге происходит у нас объединение как-то это бы могло выглядеть вот так да вот всё соответственно они уже объединились эти точки и вот эти Ну и всё остаётся последнее соединение и оно будет очень большим так как вот это расстояние далёкое вот здесь соответственно будет большое расстояние и вы визуально увидите

вот это расстояние далёкое вот здесь соответственно будет большое расстояние и вы визуально увидите что у вас Ну как по факту два кластера как-то так это работает вопросы Отлично Так мы тогда с вами идм дальше мы идм к следующему алгоритму это ну вообще как бы семейство называется семейство плотно подходов Да и как самый главный представитель самый главный представитель это давайте сразу же к иллюстрации на ней ВС обсудим смотрите у нас с вами есть точки да элементы выборки есть там РАУ neigh

на ней ВС обсудим смотрите у нас с вами есть точки да элементы выборки есть там РАУ neigh типа который не по количеству соседей А как бы порада вот тут примерно та же самая история у есть два важнейших параметра два важнейших параметра Первое - это называют вот радиус вот этой штуки Это в прямом смысле радар наш радар видимости Да сейчас мы поймём как его использовать дальше Вот ну нач он да это размер и ещё есть параметр что-то me samples что как-то так Короче количество минимальное количество

и ещё есть параметр что-то me samples что как-то так Короче количество минимальное количество точек чтобы их объединить в кластеры чтобы их объединить в кластер вот ну у меня там пусть будет четыре не знаю предположим То есть если какая-то группа сформируется меньше чем четыре они будут считаться выбросами а не кластерами ну возьмём начнём с точки А смотрите что происходит к точке А к точке а в её радар попали вот эта точка Вот эта точка И вот эта точка все они стали её же класт а дальше пошла

радар попали вот эта точка Вот эта точка И вот эта точка все они стали её же класт а дальше пошла Цепная реакция то есть для этой точки смотрим Кто к ней попал для этой точки смотрим Кто к ней попал и знаете такой Зомби Апокалипсис Пошёл Да по всем и соответственно Ну когда-то это всё закончится однозначно есть какие-то крайние точки Они здесь у меня выделены цветом другим Но на самом деле на самом деле они тоже относятся к этому кластеру тут просто показано что это крайние точки то есть на них

деле они тоже относятся к этому кластеру тут просто показано что это крайние точки то есть на них цепочка заканчивается и обрывается они ВС равно будут одним кластером сейчас мы в динамической визуализации это увидим ВС Вот это дело объединится а вот эта точка Точка она у нас окажется выбросом её Ну вы сами можете указать но её помет как мину о Почему Потому что в в в окрестность этой точки не попал ни один сосед значит не кластер выб есть очень хорошая визуализация сейчас откроем её очень

попал ни один сосед значит не кластер выб есть очень хорошая визуализация сейчас откроем её очень хорошая визуализация Дена Давайте возьмём например Smile Face вот собственно говоря у меня ну сколько здесь кластеров четыре Ну как будто бы четыре да то есть левый глаз там правый глаз улыбка и контур лица вот можно Запусти с этим параметром можно поиграться типа как бы вот собственно говоря Вот это да радиусом там можно с количеством соседей поправляться но здесь это не очень видно но в целом на

да радиусом там можно с количеством соседей поправляться но здесь это не очень видно но в целом на другую иллюстрации будет видно ну что ж запускаем и вот она видите пошла идёт идёт идёт идёт идт каждая новая точка зде зпо на не переходит есть попадает в радиус и у неё есть ещё соседи которые попадают в её радиус и в итоге он так работает плюс этого алгоритма что он в принципе как бы он видите нелинейные кластеры тоже выкупает А вот каминс например у него Видите вот как бы структура разделения

кластеры тоже выкупает А вот каминс например у него Видите вот как бы структура разделения структура разделения всё равно везде линейный То есть он как бы линейной кластеризации Но на самом деле в жизни этого как правило достаточно потому что ну как правило достаточно короче в большинстве случаев всё равно каминец популярнее в игре которая есть там которые вирус вампиров называется вот смотрите видите что с этим произошло когда отсюда шли вот когда отсюда шли соответственно вот эта точка ну

видите что с этим произошло когда отсюда шли вот когда отсюда шли соответственно вот эта точка ну короче они не дотянусь то есть не попали в окрестность и он этого свою Касту Да 2 3 4 5 6 7 В итоге это стал просто новый кластер Ну это как бы наш косячок по факту на самом деле че ну такая какая-то с шишкой получился у нас смайлик поставить тогда будет всё правильно Да да да Ну тут надо поиграться с параметрами вот долго достаточно грузится поэтому самостоятельно Попробуйте сейчас уже не будем

с параметрами вот долго достаточно грузится поэтому самостоятельно Попробуйте сейчас уже не будем вместе с вами пробовать Давайте посмотрим что-нибудь другое Не знаю я вам ещ хотел Вот это рисунок показать здесь хорошо Как понятно что имеется в виду под параметром да то есть минимальное количество точек Давайте вот смотрите поставим вот так вот две Теперь смотрите первый ряд первый ряд эти все точки они выбросы они их не закрасила а соответственно вот этоже ста объединяться в один ла Поче пото

они выбросы они их не закрасила а соответственно вот этоже ста объединяться в один ла Поче пото Вот и и так далее соответственно тут можно поиграться по-разному там можно поставить а можно поставить там не знаю четыре соседа тогда видите первые три ряда как бы не будут являться кластерами вот а только а только правые три три колонки Да давай был вопрос как я понял получается то что мин samples - Это не максимальны это минимальный размер кластера То есть если тебе меньше четырёх то ты с Если я

Это не максимальны это минимальный размер кластера То есть если тебе меньше четырёх то ты с Если я сказал максимально я оговорился Да минимальны разме Нет не оговорился Я так понял это да это минимальный именно так то есть в один кластер может быть там четыре элемента другой миллион может быть такого да Главное что они оба больше четырёх Да ну ты всегда сможешь после посмотреть Если ты видишь что у тебя алгоритм всё засовывает в один кластер в принципе толку от такого алгоритма мало Да вот ну

у тебя алгоритм всё засовывает в один кластер в принципе толку от такого алгоритма мало Да вот ну ту тебе никто пост фактом не мешает посмотреть всю эту историю А можно же быт потом эти кластеры по размерам дистрибуцию разделить посмотреть как она делится распределение Ну можно да можно и там понять что получилось натуральни тест поть Ехо натурально если там-то вышел то я должен менять сво Ари можно так можно так Ну что ж собственно говоря вот да мы с вами проговорили его идею он также хожи на

так можно так Ну что ж собственно говоря вот да мы с вами проговорили его идею он также хожи на него есть там HB спектральный они все Окей но как бы по факту самый такой теньки вот кстати здесь есть это на официальной странице библиотеки Да показывается как разные кластеризатор справлялись разной природой синтетических данных здесь стоит обратить внимание на две плоскости это собственно говоря Насколько качественно сдела кластеризация наме Обратите внимание можеть законо Да ч com это короче как

качественно сдела кластеризация наме Обратите внимание можеть законо Да ч com это короче как конс пока что можете так запомнить То есть это обычный конс Вот потому что о всё равно какая-то линейность присутствует не до конца понимает да какой-нибудь деска Ну понятно в силу своей истории у него всё окей Всё прекрасно и ещё вторая плоскость на которую стоит обратить внимание - это время время Вот например смотрите спектральная кластеризация она так-то вообще ой ой но она долгая например есть это

смотрите спектральная кластеризация она так-то вообще ой ой но она долгая например есть это как бы кажется да Т меньше чем получается секунды Да здесь же не заметим Но это мы не заметим Когда у нас 20 точек А вообще разница в 10 раз предположим Если бы была Да это значит что то что считается 2 часа будет считаться 20 часов уже более существенна разница согласитесь вот поэтому на время стоит обращать ти один из самых быстрых самых лёгких и как бы время тоже становится достаточно важным ресурсом

ти один из самых быстрых самых лёгких и как бы время тоже становится достаточно важным ресурсом вот собственно говоря comins агломерат ная кластеризация Дон я сейчас прямо глубоко не буду останавливаться но вы можете посмотреть на на соответственно разных синтетических данных кто справился кто не справился Вот Но в принципе вот то что я как бы мы с вами три разобрали это популярное и ещё спектральная кластеризация тоже популярна вот как-то так Так ну что ж теперь следующий блок нас вообще

кластеризация тоже популярна вот как-то так Так ну что ж теперь следующий блок нас вообще сегодня с вами достаточно много блоков то есть нам надо с вами про алгоритмы кластеризации потом метрики потом понижение размести и потом код то есть переходим ко второй части вот метрики кластеризации Давайте с вами порассуждаем сначала смотрите Ну окей будет какая-то там вотт во или не это вобще оцифровать какие у вас мысли По этому поводы есть порассуждайте давай пропорции размеров классов Ты же говорил

какие у вас мысли По этому поводы есть порассуждайте давай пропорции размеров классов Ты же говорил дет непо нехороший человек Ну это как бы не является гарантом того что кластеризация хорошая или плохая То есть она может быть отврати нет речь о них не идёт поэтому как бы это скорее знаешь посмотреть то что Ну да кластеры плюс-минус одного размера Окей но это не показывает насколько хорошо мы решаем задачу кого ещё какие идеи есть подумайте это вообще очень хороший навык говорю оцифровывать все

задачу кого ещё какие идеи есть подумайте это вообще очень хороший навык говорю оцифровывать все ваши идеи понятно что метрики но упражнение кайфовое какое-нибудь расстояние между кластерами Угу звучит уже как бы интересно так так сек выгнал нашего Антона из конф изза тебя меня слышно что-то меня выбросило слышно Дада слышно не слышно не слышно так Поехали дальше Вот что я хотел показать я хотел в принципе порассуждать и мне надо бы какой-нибудь рисуночек красивый Ну даже вот здесь вот то что

в принципе порассуждать и мне надо бы какой-нибудь рисуночек красивый Ну даже вот здесь вот то что мы с вами рисовали действительно Ну как бы вот у меня будет один кластер вот у меня будет второй кластер то что Сержа говорит ну абсолютно здравая история да то есть хоро хорошая кластеризация по факту когда кластеры максимально не похожи Вот Представьте что мы с вами 11 человек да здесь находимся нас можно как-то кластеризованный Как можно Даг от друга а вот сам кластер внутри чтоб вы сказали

нас можно как-то кластеризованный Как можно Даг от друга а вот сам кластер внутри чтоб вы сказали чтобы более скучный Да был наве Я такой же как мои близкие Я максимально не похож там на чужих типа какой-то сделать так или иначе как бы вы в хорошую сторону пошли так или иначе все рири то есть расстояние между кластерами и расстояние внутри кластера Но это ещё не всё на самом деле помимо помимо А так секунду помимо помимо Вот метрик который мы с вами озвучили идеи для оцифровки как бы ещё есть

так секунду помимо помимо Вот метрик который мы с вами озвучили идеи для оцифровки как бы ещё есть такая штука блин а давайте как бы если кластеризация да её Было бы неплохо оценить в контексте чего-то да то есть мы кризова и в контексте чего-то это возможно только когда у ва есть какая-то разметка Ну то есть предположим У вас есть на самом деле классы но вам никто не мешает сделать кластеризация такая тривиальная быть может мысль но её как бы надо понять соответственно внешние метрики а именно

такая тривиальная быть может мысль но её как бы надо понять соответственно внешние метрики а именно с них мы начнём это метрики качество использующее известное распределение по классам То есть у нас сейчас будут две плоскости кластеры и классы Давайте посмотрим на примере пори натри Эмен выборки что мы видим с вами что мы здесь видим как бы получается что у меня на самом деле есть классы То есть у меня есть три класса Да и есть их разметка и я ещё провёл кластеризации я ещё провёл кластеризации

меня есть три класса Да и есть их разметка и я ещё провёл кластеризации я ещё провёл кластеризации кластеры всё как можно оценить насколько хорошо кластеры бьются с классами понимаете дасть риза в контексте чего-то потому что нас с вами тоже можно разбить на кластеры и потом рассуждать а Хорошие мы кластеры с вами получились или нет так смотря в контексте чего Да тоже опять же Вот там всё от задачи зависит Может у нас не знаю нас Можно с вами кластеризованный кластеризации Так вот в данном

задачи зависит Может у нас не знаю нас Можно с вами кластеризованный кластеризации Так вот в данном случае нам нужна будет такая вот попарно кластере ой точнее если они являются одного класса они ещё лежат в одном кластере Это для нас будет срабатывания Ну например возьмём вот этот блок Да первая вторая точка Они в одном кла в Да они одному и тому же классу это будет срабатывание для нас чисто Давайте возьмём например первый и четвёртый первый и четвёртый объект выборки они в одном кластере

Давайте возьмём например первый и четвёртый первый и четвёртый объект выборки они в одном кластере лежат они в одном классе нет классы разные да то есть собственно говоря когда у нас один кластер но Разные классы разные класс то у нас с вами получается как бы тут та же самая терминология True по F по F negative TR Ne как мы с вами проходили на прошлой неделе Но в другом контексте то есть контекст другой пото что всё равно как бы это не то же самое Да что будет у нас на эсе и так далее Вот ещё

другой пото что всё равно как бы это не то же самое Да что будет у нас на эсе и так далее Вот ещё есть fse nega срабатывание fse нети срабатывание это соответственно Давайте вот возьмём false negative Вот например четвёртый пятый объект четвёртый и пятый объект они в одном кластере Нет они в одном классе да Ну вот собственно говоря как-то так соответственно Я в итоге могу построить какую-то такую историю Я знаю сколько у меня уже как бы вот она моя Матрица ошибок Да а в итоге у меня получается

историю Я знаю сколько у меня уже как бы вот она моя Матрица ошибок Да а в итоге у меня получается вот там True positive True negative false positive false nega True негатив всегда как правило больше всего на самом деле не самое информативная штука А вот эти три очень информативные и дальше Мы можем с вами мчить и считать метрики которые там нам нужны например самая простая Метрика она называется н индекс ндекс что-нибудь напоминает вам это задача классификации Да аналог э абсолютно правильно

н индекс ндекс что-нибудь напоминает вам это задача классификации Да аналог э абсолютно правильно давай вопрос Да у меня вопрос может Я прослушал откуда у нас взялись классы у нас же без учителя как бы или мы потом как-то дорм информацию о классах Ну да да да то есть она либо дорм либо она уже на самом деле есть то есть когда даже есть классы всё равно можно сделать кластеризации чтобы попытаться выделить структуру в данну Вот и если у тебя эта разметка есть какая-то то ты можешь относительно

выделить структуру в данну Вот и если у тебя эта разметка есть какая-то то ты можешь относительно неё поть но во время обучения она не использовалась то есть во время обучения классы не использовались никак мы учились только на иксах на фича Именно поэтому Ну это понятно да Хорошо спасибо в принципе как бы как правило когда есть разметка всё-таки строит больше классификатор чем кластеризатор но бывают задачи когда Может потребоваться и кластеризация в данных где есть разметка так Какая ещё

но бывают задачи когда Может потребоваться и кластеризация в данных где есть разметка так Какая ещё Метрика популярная Вот такая Метрика гомогенность Её называют аналогом Ну какой аналог помните был у нас с вами в классификации prision ППП Да prision тот кто контролирует false POS ошибку а как вы думаете ну попробуйте проинтерпретировать то есть вот смотрите True positive делить на True positive п false positive не знаю она у вас Ну точнее короче здесь у нас Control fse positive если у нас эта

п false positive не знаю она у вас Ну точнее короче здесь у нас Control fse positive если у нас эта Метрика проседает это нам о чём говорит с вами Попробуйте переварить Ну наверное чем больше разных классов в одном кластере тем хуже Угу да да то есть именно так fse positive происходит тогда когда в рамках одного кластера собирается ну несколько классов соответственно как бы по факту fse positive показывает насколько кластеры чистые Да если кластеры будут чистые того будет мало И метрики будет

показывает насколько кластеры чистые Да если кластеры будут чистые того будет мало И метрики будет высокие если кластер просто случайно намеша то соответственно Метрика начинает проседать далее Далее есть ещё такая Метрика которую мы сейчас с вами проговори Ну как правильно вы ВС сказали что аналогом здесь является prision знакомый нам Ну и как бы да ещ есть в кластеризации это полнота понятно что аналог аналогом ла она является вот п Давайте опять же посмотрим и продаем с тка Эри В каком

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

Вот они в принципе внешние метрики ещё раз внешние метрики нам позволяют посмотреть а кластеры в контексте чего-то А ещё очень часто кластеризация сделана и вы в дальнейшем получаете какие-то новые разметки для объектов и можете там посмотреть посмотреть бьётся не бьётся как-то Так а что ещё Ну вот есть такая Метрика в межа что-то что-нибудь напоминает вам классификации конструкции F СР Да F с Вот соответственно B равно если бета Рав о подставить то будет чисто F1 СР как бы всё по факту тоже

Вот соответственно B равно если бета Рав о подставить то будет чисто F1 СР как бы всё по факту тоже самое то же самое вот то есть эта Метрика у нас с вами как агрегация и того и другого Да здесь мы больше смотрим насколько классы распадаются здесь насколько кластеры распадаются это такая просто общая Метрика в принципе всё их на самом деле больше их больше ну как бы основные мы с вами записали именно внешне метрики вот так так так собственно говоря можно открыть scor Matrix да и всё вы здесь

именно внешне метрики вот так так так собственно говоря можно открыть scor Matrix да и всё вы здесь всегда найдёте можете не знаю кастомные метрики писать Ну вот она у нас кластеризация да дошли мы до неё гомогенность компт Ну ещ ряд каких-то Так ну что ж хорошо Теперь смотрите Да это всё у нас были внешние метрики теперь переходим к внутренним Метрика Почему Потому что внутренние метрики - это метрики А когда Точнее они считаются в том случае когда у нас нет никакой разметки в принципе

- это метрики А когда Точнее они считаются в том случае когда у нас нет никакой разметки в принципе кластеризация до этого и нужна и вот все ваши идеи которые вы мне рассказывали что типа будем считать а будем считать расстояние между там кластерами Да чтобы оно было как можно больше и чтобы точки внутри были как как можно ближе вот как раз-таки именно это и агрегирующие и самую популярную внутреннюю метрику которая называется сиэ Score которая называется силу Score Вот она Да или силу

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

Но если простыми словами говорить это оцифровка насколько далеко находятся кластеры друг от друга в среднем вот Конечно я бы хотел чтобы было большим согласны Это было для меня приятно теперь к а переходим А смотрите это среднее расстояние между Фикси обм собственно говоря вот эти расстояния контроля между объектами типа кто насколько близок друг другу если они будут поджимать то а будет падать Ну наверное полностью А мы не хотим маленьким но как бы мы его хотим сделать поменьше вот эта штука

Ну наверное полностью А мы не хотим маленьким но как бы мы его хотим сделать поменьше вот эта штука при правильной кластеризации будет равняться B потому что всё-таки как бы мы хотим так чтобы расстояние между кластерами было уж точно больше чем внутри кластера соответственно у нас получается что-то примерно такое B - А / B и это достаточно интерпретируемые история понятная Метрика Да Саш вот формулировки а и б у нас есть фиксированный объект Угу что является фиксированным объектом какая это

а и б у нас есть фиксированный объект Угу что является фиксированным объектом какая это любая выбранная точка или как Или центроид по аналогии с Это любая выбранная точка Всё понял ну он на самом деле как бы будет их усреднять то есть вот вот берём вот этот он со всеми посчитает среднее расстояние потом вот этот со всеми и короче вот потом так все то есть мы усреднять расстояние по каждой точке между ра Всё я понял именно так если вас на самом деле спросят про кластеризации так или иначе скорее

ра Всё я понял именно так если вас на самом деле спросят про кластеризации так или иначе скорее всего про CS скор вы там проговорите ну на собеса где-то Да потому что ну всё-таки объективно самая такая наверное известная известная Метрика м в кластеризации имеющая множество недостатков на самом деле Ну очень сложно оценить насколько хорошо обучили без учителя поэтому как бы имеем что имеем Тут у эскар есть неплохая демонстрация Давайте вместе в неё заглянем так даже тут Поня смотрите Что здесь

эскар есть неплохая демонстрация Давайте вместе в неё заглянем так даже тут Поня смотрите Что здесь происходит во-первых Ну как бы мы посмотрим ми раз количест ров которым сюри с у нас с вами будет призна пространство слева Сейчас объясню что такое Давайте начнём вот с этого графика где у нас с вами два кластера Итак Ну вот Давайте вот Представьте ещё пока что кластеризация не сделана цвета не выбраны что вам кажется сколько здесь кластеров на глаз Ну я бы четыре ставил Угу Ну то есть либо два

что вам кажется сколько здесь кластеров на глаз Ну я бы четыре ставил Угу Ну то есть либо два либо четыре Да по факту так хочется сказать Ну вот собственно гово мы сейчас это с вами попробуем сделать количество кластеров равно количество кларов равно соответственно все точки вот эти Понятно попали сюда вот эти попали сюда это как бы камин сработал где-то здесь одна центроида а Ну скорее всего бы вот эту координату они Трои и поставили вот когда отсо график что происходит далее смотрите вот этот

эту координату они Трои и поставили вот когда отсо график что происходит далее смотрите вот этот график это такой известный график пропорции классов кластеров мы видим что кластер ноль он такой достаточно большой да то есть Вот его толщина В прямом смысле это ну насколько много элементов выборки туда попало то есть нулевой кластер существенно больше имеет элементы выборки чем первый теперь есть другая плоскость это А вот это что здесь у нас есть а здесь здесь как раз-таки есть оцифровка вот

другая плоскость это А вот это что здесь у нас есть а здесь здесь как раз-таки есть оцифровка вот этого силу это коэффициента то что вот это как бы как бы вот такая линия дёргающая Это связано с тем что он на самом деле поэлементно считает Короче надо воспринимать Примерно серединку это ваш примерно серединку Ну где-нибудь я не знаю вот так у нас или вот так вот у кластера о силуэт СР выше чем у кластера ноль в среднем Как вы думаете почему оним расстоянии друг от друга как бы если человек от

кластера ноль в среднем Как вы думаете почему оним расстоянии друг от друга как бы если человек от меня находится расстояни 5 км то и я для него тоже на расстояни 5 м а почему а меньше Абсолютно верно то есть этот кластер более куч просто да более куч чем кластер ноль Вот Но всё равно на самом деле А И вот эта вот линия Да вот эта линия красненькая это по факту наша наш средний силуэт то как бы всё сводится к одной метрике сит скор - это средний по каждому кластеру он достаточно высокий как бы

сводится к одной метрике сит скор - это средний по каждому кластеру он достаточно высокий как бы блин силуэта 0,5 Поверьте это уже очень хороший силу это как бы а 07 08 - это космос Космос вот знаете ещё какой вопрос Он такой ну ладно сами к этому придёте мы ещё с вами обсудим как понимать хорошая Метрика у вас или плохая Давай ко вопрос Да сейчас немножко удивился что есть несколько метрик для кластеризации Мне казалось что она должна быть одна всего нет но в итоге как бы она одна итоговая

кластеризации Мне казалось что она должна быть одна всего нет но в итоге как бы она одна итоговая есть вот это знание уред [музыка] у компьютера Спросишь у слр он тебе выдаст одно значение это средней сит скор но ты можешь смотреть по кластерам отдельным да то есть он считает средний Как как средняя между всеми кластерами Да просто у средня Да просто понял Ну что ж Давайте тогда посмотрим а Что было бы если бы мы с вами сделали три кластера Ну в трёх кластерах это классно когда у нас здесь есть

бы если бы мы с вами сделали три кластера Ну в трёх кластерах это классно когда у нас здесь есть рисунок к сожалению вот этого может не быть если пространство будет больше чем 3D и тогда базироваться придётся только на вот эту сторону Да но здесь у нас есть возможность посмотреть Тогда почему бы не посмотреть что происходит соответственно кластеры у нас подраз бились вот этот кластер опять себя уверенно чувствует его силуэт вообще никак не изменился то что происходит здесь ему вообще до этого

уверенно чувствует его силуэт вообще никак не изменился то что происходит здесь ему вообще до этого дела никакого нет совершенно поэтому он точно такой же имеет достаточно высокий силу вот кластер 2 соответственно кластер ноль у нас это два близких друг другу клас и кластер 2 Обратите внимание появился вот такой хвостик вот когда такой хвостик появляется Это первый знак того что что-то нехорошо идёт хвостик - это отрицатель силу скор это значит есть объекты выборки там же у нас с вами формула B

хвостик - это отрицатель силу скор это значит есть объекты выборки там же у нас с вами формула B - А Де B отрицательное можно получить только в одном случае если а больше чем B а а - это да а - это расстояние до своего кластера а б до чужого то есть есть элемент выборки к котором как бы Чужой в среднем ближе чем свой Я думаю что это какие-нибудь вот эти точки да То есть им на самом деле вот как бы сюда в среднем одно расстояние А тут видите как бы получается нужно вот это всё расстояние вот эти

сюда в среднем одно расстояние А тут видите как бы получается нужно вот это всё расстояние вот эти учесть и Ну короче проседает вот как бы тут не сильный хвостик можно ещё учитывать что это Аля там выброси немножко или что-то типа того но в целом всегда это уже как бы первый индикатор того что что-то начинает идти не по плану вот когда кластеризации Видите вот этот хвостик и да силу эту скорость провалились стали меньше Да ну хотя только у кластера 2 кластер но тоже в принципе достаточно

провалились стали меньше Да ну хотя только у кластера 2 кластер но тоже в принципе достаточно высокие си вот так дальше идём соответственно Давайте посмотрим четыре кластера ну четыре кластера вот очень здоровая да получилось картинка слева как и справа четыре кластера получилось достаточно четыре пропорциональных кластера по размеру достаточно высото понима что Клары действительно в данных есть и очень хорошие кластеры так да да картинка здорового кластера именно так в реальности это почти ну

и очень хорошие кластеры так да да картинка здорового кластера именно так в реальности это почти ну очень сложно дожи редко когда так что-то хорошо ложится вот так Соответственно что там Когда уже как бы один объективный кластер начинает разбиваться несколькими кластерами это вот начинает вырисовываться как раз вот что-то типа вот в этих хвостики как раз и очень маленькие силуэты очень маленькие силуэты из-за Чего Потому что два кластера друг другу вплотную лежат правильно они так-то достаточно

из-за Чего Потому что два кластера друг другу вплотную лежат правильно они так-то достаточно куч оба но они уже просто очень близко друг к другу у них меж кластерное расстояние маленькое и их силуэты начинают проседать конкретно проседать как-то так давай вопрос есть до Красной линии кото мы устанавливаем что сделает до Красной кра ни дотягивается эти силуэты сами формируют эту красную линию потому что это если вот эти зелёный и Чёрный дотягивается то это плохие си плохие к Ну да да да с бо

что это если вот эти зелёный и Чёрный дотягивается то это плохие си плохие к Ну да да да с бо детально рассуждать Ну силуэт СР там даже на самом деле такой силуэт скор иногда 05 - Это очень хороший силуэт СР вот плохий силуэт скор это ноль Вот это плохой сило скор потому что ладно как бы раз подошли к этому смотрите вам Задачка такая Если вы в классификации случайно предскажет Ну случайно предскажет от ожидание равно ции классификации то есть Представьте что у вас есть классификация Да по

от ожидание равно ции классификации то есть Представьте что у вас есть классификация Да по классификации если я просто случайно преджудис равно будет 50% на каждом элементе 5050 угадываем либо нет На каждом нет ВС рано суммарно считаю я име в виду что предсказ случайно как бы по каждому ВТО неважно даже ес тея будет 99 еди но случайно то я жду 50% правильных ответов а это значит что это как бы ну я называю такой знаете точка холодного старта скажем так в том плане что вот как бы вот это Нижний

я называю такой знаете точка холодного старта скажем так в том плане что вот как бы вот это Нижний уровень Ну ниже него опускаться Ну будет странно да заниматься анализом данных и предсказывать хуже чем случайно собственно говоря А вот в задаче кластеризации в задаче кластеризации А если мы с вами я случайно каждую точку разме Как кластер как вы думаете чему у меня будет Рани си 100 Ну типа вот этой точке бы сказал что она не знаю Первый кластер Это тово минере потому чтот полный даже не к нулю

точке бы сказал что она не знаю Первый кластер Это тово минере потому чтот полный даже не к нулю минус бесконечности поэтому СРО ва4 0304 это может быть Вполне себе нормальный сило скор Ну надо по задаче конкретно смотреть Мы ещё там 2 дня с вами будем запускать как бы ещё будет у нас время это обсудить Так что всегда любую метрику рассуждайте через эту призму то есть си Score 05 это может быть капец какой космический сило Score urc 0,5 - это по факту случайное угадывание вот так вот так Ну что

какой космический сило Score urc 0,5 - это по факту случайное угадывание вот так вот так Ну что в принципе А ну и вот можно посмотреть Да как бы что из этого вышло смотрите для двух кластеров у нас с вами 07 а для чех кластеров 0,65 то есть на самом деле если верить в математике то два кластера самые оптимальные в жизни как бы если бизнесу будет удобно чтобы было четыре кластера значит будет четыре кластера если они хорошо подаются интерпретации там на самом деле Чем более детально разби тем

кластера если они хорошо подаются интерпретации там на самом деле Чем более детально разби тем лучше Ну вот если тупо математически смотреть Да математически как бы ну вот это приближение типа самое лучшее с двумя клас давай вопрос есть между количеством ров игра с ва ве которые давлю весо мне не нужен си о м ну нуж кластеризация чтобы скажем Клара было до п до и 50% я устанавливаю в этом ране подбираю себе было бы класно То есть как бы хочется тебе Ну если тебе данные позволят такой си пробить

себе было бы класно То есть как бы хочется тебе Ну если тебе данные позволят такой си пробить 57 ой если нет то Будешь довольствоваться того что есть вот количество там обычно знаешь как происходит не я хочу А что у нас есть то есть ты пробуешь посмотреть разное количество кластеров смотришь метрики видишь что вот при таком количестве кластеров нормальная Метрика пытаешься понять что за кластер Вот то есть как бы в этом пне рабо ще ско ларо мым А с самом а кто мне скажет сколько их на самом

Вот то есть как бы в этом пне рабо ще ско ларо мым А с самом а кто мне скажет сколько их на самом деле ты потом по результатам скажешь Темин скажет например [музыка] Сержа ты вот сказал что как мы на четырёх кластерах подбирали такое в практике Вообще редко встречается а как обычно Ну то есть обычно мы там 03 видим и всё очень радуемся или прочее точ как на практике это на практике блин Давайте ещё про контекст как бы короче там просто есть нюансы связаные с самой природой данных которые как бы

про контекст как бы короче там просто есть нюансы связаные с самой природой данных которые как бы могут в одном случае сделать 02 не очень хорошим а где-то очень хорошим поэтому я бы наверно сказал что от контекста немножко зависит вот где Какой силуэт скор просто Старайтесь его больше Ну пока держите себя в голове что силу скор 05 - Это очень хороший силу скор А так как бы он ситуативно может быть подобран подобран в контексте чего-то потому сегодня вотт одно задание там один сет хороший А

быть подобран подобран в контексте чего-то потому сегодня вотт одно задание там один сет хороший А завтра как бы даже близко такого Сита не достичь соответственно будут другие проблемы Но при этом завтрашний стария может быть лучше чем сегодняшняя Вот такая вот вот на кластеризация - это очень сложная штука потому что это на самом деле субъективна конкретная у нас как бы нету объективных расчётов вот Ну так вот так как-то так поэтому я не могу тебе точного дать ответа да всегда по контексту по

вот Ну так вот так как-то так поэтому я не могу тебе точного дать ответа да всегда по контексту по контексту Ну пока говорю держите что 0,5 - это очень хорошая сило скоро если у вас 09 силу это просто Это капец Что вы построили на самом деле жёстко Саша давай вопрос вот вопрос по Метрика у нас задача там классификация или регрессии был момент когда мы делили на Рейно и валидацию и высчитывали скор по Рейно и валидация отдельно вот сейчас же мы таких процедур не делаем вообще У нас есть Просто

по Рейно и валидация отдельно вот сейчас же мы таких процедур не делаем вообще У нас есть Просто целый пакет и мы уже как бы оцениваем итоговое Да всё тут нам не нужно действительно делить как бы то на ЧМ обучались нам уже можем посчитать Да вот эти метрики которые мы сейчас считаем правильно понимаю что они для линейной кластеризации подходят нашим смайликом прокати поняли да ты пра работат ком плю хоро линейных силу Да действительно считает хорошо для линейной зависимости Но на самом деле как

хоро линейных силу Да действительно считает хорошо для линейной зависимости Но на самом деле как бы 95% задач покрываются линейными зависимости только исключительный случай когда мы сами создаём проблемы и какие-то данные собираем которые имеют очень сложную как бы структуру Да зависимость вот чаще всего это как обектив истори есть риу Я например знаю моих клиентов Да ме база данных по каждым клиентам я готовлю большую рекламную кампанию хочу как-то кластеризованный факторы не знаю Возраст

клиентам я готовлю большую рекламную кампанию хочу как-то кластеризованный факторы не знаю Возраст сколько раз покупал что ещё бла-бла-бла короче всё в принципе линейно устроено нету знаешь какого-то вот мудрёно схемы поэтому comin как бы нормальная штука вообще и в большинстве случаев её хватает то есть Линейная ция супер редкая вещь И никому не нужна нелинейная Да да нелинейная ну она просто редко встречается в реальности но это не мешает тебе ДБ СН запустить в линейном случае А как А как я

встречается в реальности но это не мешает тебе ДБ СН запустить в линейном случае А как А как я проверю удачно ДБ сне Какая Метрика типа нелинейную пастеризацию чекнуть ну там есть ээ есть короче метрики там в доке посмотришь но это уже достаточно сложная штука это уже достаточно сложная штука хорошо это просто очень сложно оцифровать Прикинь в общем виде оцифровать нелинейность полную субъектив сиину в пространстве о котором мы вообще ничего не знаем Ну вот я тоже ещё подумал такое типа что-то

в пространстве о котором мы вообще ничего не знаем Ну вот я тоже ещё подумал такое типа что-то мне не само Понятно Так ну что давайте тогда возвращаться мы с вами два блока разобрали а ну Ещё кроме Да силуэт скор внутренней метрики Вот мы проговорили с вами силу Score и ещё есть такая Метрика которая называется метод локтя или LB метод В чём его суть мы с вами попробуем попробуем перебрать разное количество кластеров разное количество кластеров Ну там алгоритма comin например и посмотрим вот

количество кластеров разное количество кластеров Ну там алгоритма comin например и посмотрим вот такую штуку это называется инерция Ну простыми словами Это насколько как бы насколько в среднем насколько в среднем Да скажем так то есть вот пусть у меня вот есть точки точки будем Вот как-то вот так и если у меня два кластера то вот как бы у меня вот так получается ложатся Да центроид и получается инерция - это как бы вот вот это расстояние Вот это расстояние вам не слышно У меня тут стрели начали

- это как бы вот вот это расстояние Вот это расстояние вам не слышно У меня тут стрели начали не Нормально отлично хорошо так вот соответственно смотрите Какая логика в это какая логика Вот Представьте Представьте что сначала бы у меня был бы один кластер Ну то есть это понятно что никакого смысла не имеет но тем не менее это расстояние Было бы очень большим правильно для одного кластера то есть вот это расстояние до этой центроид далее Далее у меня становится два кластера что у меня происходит

это расстояние до этой центроид далее Далее у меня становится два кластера что у меня происходит у меня вот это среднее расстояние до своей до своей центрой повторюсь оно стало существенно меньше то есть мы сильно падаем согласны А теперь Представьте дальше будет если я сделаю не не две центроид а три центроид Ну то есть три кластера Как вы думаете вот предположим вот этот кластер распался на два Как вы думаете Вот это среднее расстояние до своей центроид оно упадёт или увеличится Оно ещё

два Как вы думаете Вот это среднее расстояние до своей центроид оно упадёт или увеличится Оно ещё дальше упадёт правильно То есть как бы и где-то в конце где-то в конце когда Каждый элемент выборки был бы отдельным кластером у нас бы эта инерция Вот это расстояние стало бы нулевым согласны то есть этот график по факту он всегда падает вниз но как бы нам надо понять где оптимальная история вот оптимальна В каком-то смысле считается когда резко упали Значит мы резко улучшились А когда вот у нас

В каком-то смысле считается когда резко упали Значит мы резко улучшились А когда вот у нас это плато практически возникает это мы уже полезли в дебри кла метод локтя называют потому что ну как бы вот типа форма локтя Да соответственно чтото Типа такого но чаще всего здесь метод поломанного локтя причём конкретно так да возникает Ну можно как бы всегда рассуждать что не знаю от д до Четы оптимальное количество кластера там уже посмотреть кация может лу вот в этом Дине кости Расскажи про точку

количество кластера там уже посмотреть кация может лу вот в этом Дине кости Расскажи про точку девять это случайное отображение или есть ситуация когда может вдруг вырасти расстояние с уменьшением с увеличением Ну может но это ерунда как бы Можно даже это не обращать внимания вот на вот эти вот небольшие небольшие люфт это может такое возникнуть Но как правило это минимальная минимальная разница Угу Саша да вот про метод локтя видел другое применение там на иерархическом кластерном анализе вот

Угу Саша да вот про метод локтя видел другое применение там на иерархическом кластерном анализе вот выше была картинка как с дендрограм мой там по этой картинке тоже строится такой точно такой же график только резкое возрастание означает что расстояние между кластерами становится слишком большим и на этом моменте стоит установиться объединять точки в группы Угу Угу круто Я кстати не использовал ни разу в контексте Вот вот агломерат методов Ну просто там типа просто по-другому интерпретируется

ни разу в контексте Вот вот агломерат методов Ну просто там типа просто по-другому интерпретируется график также руто круто в принципе Метрика Да которая позволяет нам види можно и в арати риза тоже прокрутить чаще коне но на самом деле она такая как бы типа силу гораздо популярне напоминаю внутрен тримы с вами брата получается остаётся метод локтя и как бы нужен ли он Ну наверное нужен где-то Может быть но всё равно как бы сит более применима это очевидная история вот как-то так Ну что второй

быть но всё равно как бы сит более применима это очевидная история вот как-то так Ну что второй Блок Мы тоже с вами закончили метрики Мы проиграли алгоритмы мы проговорили метрики сейчас мы немножко поговорим про понижение размерности и посмотрим код Вот давайте сделаем перерыв сейчас 23 минуты 33 будем продолжать всё перерыв Ja Так ну что давайте возвращался Так мы с вами проговорили проговорили алгоритмы поговорили как их оценивать про метрики следующее что нам нужно что часто можно встретить

алгоритмы поговорили как их оценивать про метрики следующее что нам нужно что часто можно встретить в алгоритмах кластеризации это а это понижение размерности мы на самом деле с ним с вами единожды сталкивались и какой-то алгоритм был ну там на Да PC метод главных компонента ещё один в тот же день-то там сингуляр разложение или как бы каждый из них имет свои приколни оба линей Завра будем использовать можно сегодня СВД больше с текстом лучше работает по определённой причине который завтра скажу

можно сегодня СВД больше с текстом лучше работает по определённой причине который завтра скажу завтра мы кстати с вами первый раз будем с текстом работать вот и собственно говоря что PS что СВД понижают линейный размерность но есть есть алгоритма понижения размерности и нелинейные в том числе Ну как бы началось это с ТСН потом появился umap кстати вот для алгоритмов меля это это по-моему если мне память не изменя в 2019 году вышло это как бы грубо говоря это очень-очень молодой по меркам

мне память не изменя в 2019 году вышло это как бы грубо говоря это очень-очень молодой по меркам классического меля где все эти бустинг и нги ещё уже с XX века существовали да Вопрос был вычислительных ресурсов только А тут вот такая история так вот в чём идея В чём идея как появился тне потом появился UM они работают в принципе по одной и той же идее просто сделали для того чтобы как бы ну улучшить потому что понижать размерность это реально долго и дорого То есть это на больших данных это име

потому что понижать размерность это реально долго и дорого То есть это на больших данных это име очень много это сопоставимо с обучением алгоритмов а то и дольше то есть собственно говоря это может просто считаться дольше тупо понижать размерность так возвращаемся Для чего нужно понижать размерность есть такая она так и называется в анализ данных проблема называется Проклятие размерности так устроена математика что чем больше пространство именно размерности там 2D 3D 4D 5D оно по факту для нас

математика что чем больше пространство именно размерности там 2D 3D 4D 5D оно по факту для нас бесконечно там Но на самом деле как бы ну вы понимаете что 3D больше чем 2D пространство согласитесь хотя и там там бесконечное количество точек но как бы 2 полностью можно засунуть в 3 Наоборот Нет 4 5 6 Это говорит о том что чем больше пространство тем оно становится более разряженным и более большим а зна что на самом деле как бы в больших пространствах оценить [музыка] нанося с вами посмотреть вот

зна что на самом деле как бы в больших пространствах оценить [музыка] нанося с вами посмотреть вот нас с вами Да кто вот сейчас В ЗМ конференции сидит в контексте буквально двух вещей Ну например цвет волос ближе к светлому либо ближе к тёмному и не знаю цвет глаз то по факту как бы мы все в этом в этом плане близки друг другу согласны ну так или иначе как бы не будем так далеки Но если нас с вами характеризовать там не знаю по тысячам параметров А все наши интересы все там наши взгляды всё

вами характеризовать там не знаю по тысячам параметров А все наши интересы все там наши взгляды всё наше там бла-бла-бла то будет понятно что мы как очень уникальные люди Да и соответственно не похожи Вот примерно такая на самом деле идея В С размерности и возникает то есть называется Проклятие размерности лучше её понижать чтобы как бы находить паттерны схожести Поэтому в пайплайн кластеризации Вы часто увидите именно понижение размерности понижение размерности очень часто так как где так как

Вы часто увидите именно понижение размерности понижение размерности очень часто так как где так как в кластеризации нигде часто это не встречается вот вот вот вот Ну как бы математика там не самая тривиальная я вам честно скажу Наверное я Давайте на вот этом картинке поговорим буквально вкратце покажу что там за идея Если вы хотите можете почитать сами там очень красивая идея реализована на Градиент спуске как бы как перейти короче как там из 20 перейти в 2D максимум сохранив информацию очень

спуске как бы как перейти короче как там из 20 перейти в 2D максимум сохранив информацию очень прикольная история ковине пось оче интерес поново самые простые истории нути представте У меня есть первый второй третий там не знаю четвёртый элемент выборки Вот это они лежат в 2 пространство согласны я попытаюсь понизить это на самом деле как бы что пытается сделать алгоритм с вероятную структуру вероятную структуру элементов это же ВС по факту случайно величины элементы выбо правильно и он берёт

структуру элементов это же ВС по факту случайно величины элементы выбо правильно и он берёт грубо говоря как за центр первую точку и вот как бы вот это матожидание типа Насколько вероятно получить такую Насколько вероятно такую Насколько вероятно такую и он их пытается Вот соответственно в новом пространстве расположить так чтобы сохранить вероятности можно это воспринимать ещ на уровне расстояний Вот напри ближайшая точка будет два с этой стороны вот так задиру а к двойке ближайшая точка

Вот напри ближайшая точка будет два с этой стороны вот так задиру а к двойке ближайшая точка тройка она вот сюда будет лежать а к тройке ну или к единички там четвёрка Ну в 1d вообще ничего закодировать почти не возможно К сожалению всего два как бы этих Ну понятно что логика всё равно съезжает но например третье и четвёртая здесь оказались далеки друг от друга а здесь они не так уж далеки Но идея примерно такая Просто когда соответственно там не знаю из 50D переходишь в 30d там таких

Но идея примерно такая Просто когда соответственно там не знаю из 50D переходишь в 30d там таких сложностей не возникает Вот вот такая примерно идея заложена что в tsne что в Ю UM был предложением tsne и пытался собственно говоря его улучшить но там в основном с точки зрения производительности у него есть один гипер параметр enab важный это грубо говоря Вот если бы вот я разбирал enab равно 4 то есть только на ближайшие четыре точки смотрел если бы Например ко поставил да то он бы вот единичку

есть только на ближайшие четыре точки смотрел если бы Например ко поставил да то он бы вот единичку ещ бы взял наверно только 3Д и пытался бы только для них сохранить структуру всё как бы на остальное не смотрел Поэтому чем у вас больше Ne тем он более глобально видит всё точнее даже как бы может быть не глобально наоборот локально То есть он все нюансы видит их потому что видит всех и это получается как бы после понижения видите как точки как бы большое но зато Блин вот это можно ждать целую

как бы после понижения видите как точки как бы большое но зато Блин вот это можно ждать целую вечность А вот это в принципе можно посчитать быстро как-то так как-то так есть очень хороший пример он мне нравится он есть и в демо у меня в этом м в демо сегодняшнего файла Сейчас секунду что будешь делать-то так а вот есть в демо и давайте сейчас я открою ещё кое-чего вам покажу мысль на самом деле очень прикольная мысль очень прикольная так м называлась эта статья Да нашёл по-моему она короче

очень прикольная мысль очень прикольная так м называлась эта статья Да нашёл по-моему она короче хорошая статья тоже можете её почитать здесь там статья старенькая но полезная на самом деле тут там в контексте pca Да там рассказывают Ну тут как бы рассказывают как он работает но мы с вами это уже проговаривать показывается пример Как из 3D пространства приходили в 2D И кстати вырос как бы обычно чаще наоборот Вы уже убедились на прошлой неделе обычно понижение влечёт как бы лучше точность ну

чаще наоборот Вы уже убедились на прошлой неделе обычно понижение влечёт как бы лучше точность ну здесь у них выросло была 0,88 стала 091 Вот но меня даже как бы пока прикалывает такая история вот смотрите вот вот есть цифры да это датасет вы с ним будете работать на фазе два известн достаточно датасет называется ни или классификация рукописных цифр как бы ну точнее рукописные цифры а там можно делать классификация кластеризация всё что угодно наш с вами человеческий глаз прекрасно отличает

делать классификация кластеризация всё что угодно наш с вами человеческий глаз прекрасно отличает здесь цифры да По крайней мере как бы то что не отличает достраивает по логике и мы понимаем что здесь 0 1 2 3 4 5 6 7 8 9 вот смотрите вопрос на засыпку вопрос на засыпку Каждый элемент выборки Вот это же элемент выборки по факту сколько А в скольки мерном пространстве он лежит чтобы его хранить восем А ну двухмерном по идее Так ну слышал ещё варианты Ну вот количество пикселей наверное будет

восем А ну двухмерном по идее Так ну слышал ещё варианты Ну вот количество пикселей наверное будет размерность там ещё яркость пикселей пикселей наверно ещ не у нас же одноканальная там же не три канала это чёрно-белая поэтому здесь Да здесь там 255 максимально Белый Но полностью чёрный Либо наоборот Ну два тогда ну это можно и в один типа Вектор вытянуть по идее так вот Вектор же у тебя будет количество пикселей Вот такая размерность будет вектора правильно Саша прав абсолютно эта картинка

количество пикселей Вот такая размерность будет вектора правильно Саша прав абсолютно эта картинка имеет разрешение 8 наво Да соответственно 8 наво А это значит Чтобы как бы однозначно закодировать одну цифру мне нужно 64 координаты правильно Ну то есть вот если я сейчас передам не знаю Серёже 64 координаты и он потом через выведет вот в порядке в котором я ему подал Да вот так вот собственно говоря Вот первый восем вторый восем и так далее То как бы он увидит цифру я однозначно передал

говоря Вот первый восем вторый восем и так далее То как бы он увидит цифру я однозначно передал информацию правильно то есть с помощью че координатах я это смогу сделать Вот и короче прикольный эксперимент на самом деле смотрите что получилось вот ну короче да 60 64 координаты попробовали тут есть разметка тут безусловно есть разметка как бы и можно посмотреть Но короче мы понижаем с помощью PC и получилась Вот такая история Вот такая история как бы видите PC по факту светом выделен реальный а

получилась Вот такая история Вот такая история как бы видите PC по факту светом выделен реальный а реальный соответственно реальный класс то есть реальная цифра Да какая она получилась Ну всё равно конечно какая-то группировка там условно есть да какая-то группировка есть но как бы всё равно они накладываются друг на друга и очень близки Ну как бы так себе то есть понижать до двух координат Мы пытались цифру типа знаете как бы кодировать с помощью двух координат а не чех Вот и смотрите как

пытались цифру типа знаете как бы кодировать с помощью двух координат а не чех Вот и смотрите как соответственно запустили ТСН получился Вот такой результат получается что если мы нелинейно понизили то Ну тут по факту информация сохранилась то есть на самом деле представляете что можно цифру цифру вот такую на самом деле хранить не 64 значения всего два и по этим двум значениям в принципе вот сюда как бы подъедет сейчас конс кон с де кото мы поставим 10 кластеров и он в целом Я думаю что бы

сюда как бы подъедет сейчас конс кон с де кото мы поставим 10 кластеров и он в целом Я думаю что бы достаточно высокую точность будет иметь правильно получилось всё очень даже неплохо Вот и мы Там посчитаем внешние метрики они у нас будут очень высокие как-то так но сама мысль Прикольная да что мы понизили размерность аж в 32 раза И при этом даже в абсолюте лучше сказать мы понизили всего до двух координат и мы можем закодировать более того Прикольная штука знаете какая у ю есть обратная

двух координат и мы можем закодировать более того Прикольная штука знаете какая у ю есть обратная трансформация Это значит что вы можете взять например какую-нибудь цифру Каб случайно в пространстве её откатить в 64d это будет какая-то цифра это уже генерация случайных цифр получается синтетический созданных и искусственных прикольно красивы вот как-то так как-то так мы будем конечно не на картинках понижать но тут сама логика в том что можно понизить размер сохранив информацию очень даже

понижать но тут сама логика в том что можно понизить размер сохранив информацию очень даже хорошо и потом провести краснею лазаю всё будет О вот лежит в эрне лежит В отдельной библиотеке Ну мы сейчас собственно говоря с вами запустим запустим запустим код какие-то есть тут вопросы по понижению размерности Сегодня надо будет попробовать как линей так и нелинейную и сравнить результат по Метрика посмотреть так А какой можно быстрый вопрос если возможно сформулировать конечно мысль такую вот

посмотреть так А какой можно быстрый вопрос если возможно сформулировать конечно мысль такую вот просто базу на чём основные различия pca ине что они так по-разному понижают линейно понижают нелинейно то есть способен нелинейные какие-то паттерны улавливать Ну типа вот Какие паттерны Например у едини наверное у едини общий паттерн это вот как-то вот вот прямая история будет это бы по факту есть-то фа собственно говоря если они нелинейную природу имеют S как-то может сохранить Исходя из этого

фа собственно говоря если они нелинейную природу имеют S как-то может сохранить Исходя из этого информацию и сделать так чтобы все единички в пространстве оказались там около друг друга да А вот как бы PC не совсем Может уже потому что не Линейная история для Нейро сете это ещё более клёвое дело на самом деле чем для ТС Вот то есть самое главное что вы должны помнить tsne как И umap лучше даже umap использовать на самом деле более современная реализация там tsap - это нелинейная а PC с это

umap использовать на самом деле более современная реализация там tsap - это нелинейная а PC с это линейное понижение конечно линейные они гораздо более быстрые но иной раз менее точно вот так вот и Мы также указываем гипер параметр количество компонент которые хотим оставить правильно спасибо Так ну что тогда давайте переходить к последней части последня часть у нас с вами осталась код остался код Сегодня у нас с вами будет кластеризация табличных данных зав тек текстов Ну что ж Давайте

код Сегодня у нас с вами будет кластеризация табличных данных зав тек текстов Ну что ж Давайте запускать здесь на самом деле так много-то мало Вот это всё вам знакомо знакомо Ну собственно говоря только его Установите правильно главное здесь указал Как его установить не прописывать что вы не ту библиотеку Установите надо собственно говоря установили потянули PC и по факту всё ну сейчас ещ алгоритмы кластеризации ниже там дорум вот у меня будет достаточно тривиальная история которая не имеет как

кластеризации ниже там дорум вот у меня будет достаточно тривиальная история которая не имеет как бы такого пря бизнес составляющего мы будем кластеризованный [музыка] пингвинов что у меня будет у меня будет вид пингвина Да собственно говоря далее там ну место обитания так клюва длина плавника масса те мас тела пингвина и его по вот лазаю на самом деле часто проводят именно на числовых данных есть попытка кризова на категориальных можете почитать об этом вте но мы с вами останемся на число

есть попытка кризова на категориальных можете почитать об этом вте но мы с вами останемся на число числовых данных есть у меня будет четыре признака Поехали Так что здесь есть немножко нанов [музыка] Ну ладно не суть заполним собственно самыми простыми идеями Я заполнил средним Я заполнил средним теперь у меня нанов нет Что ещё сделаю ещ для подсчёта метрик для почта метрик вид пингвина закодируй Почему этот график называется здесь он у меня небольшой поэтому почему бы его не посмотреть - это

Почему этот график называется здесь он у меня небольшой поэтому почему бы его не посмотреть - это попа порный спт всех всех столбцов У меня их 4 на 4 16 симметрично Понятно относительно главной диагонали на главной диагонали гистограмма распределения Ну как бы вот можно посмотреть какие-то признаки чуть лучше делят Да какие-то признаки Ви Вики сидят ну в общем Наша задача как бы это просто такой знаете следовательский анализ Да чуть-чуть взглянуть мы ВС равно будем пытаться как бы с помощью

знаете следовательский анализ Да чуть-чуть взглянуть мы ВС равно будем пытаться как бы с помощью пока что там 4 пространство как-то использовать всё это и вать так но он тяжёлый график Да он тяжело рисуется тлоу Осо зави очень тяжёлыми не читаем то есть его нарисуешь буквально только когда у тебя немного фичей Ну что ж наша с вами Какая идея мы мы идём в сторону кластеризации Как вы думаете для кластеризации обязательна ли нормировка данных или нет обязательно Да почему потому что мы работаем с

обязательна ли нормировка данных или нет обязательно Да почему потому что мы работаем с расстояниями в пространстве Да помните мы с вами проводили пример Да что не знаю 10 лет не то же самое что 10 руб и так далее у вас если будет одна жёсткая фича имеющая большую дисперсию измеряющая в больших шкалах то как бы фичи которые измеряются в маленькой шкале как бы они их изменение на самом деле может быть очень важно для кластера но его просто большой съезд и всё Поэтому обязательно нормируется

быть очень важно для кластера но его просто большой съезд и всё Поэтому обязательно нормируется нивелировать этот момент А тогда вопрос к вам на засыпку А какому алгоритму классификации не нужна нормировка Ну какому виду именно виду классификация или регрессия без разницы Лау Нет это как раз в пространстве работает леса ему надо мне кажется деревья все деревья то есть деревья как бы он уже Сплит там есть столбец возраст вот он спрашивал раньше старше пятидесяти Ну там возра от до 100 прем сл

там есть столбец возраст вот он спрашивал раньше старше пятидесяти Ну там возра от до 100 прем сл ста ила после Мит 0 и Линейная соответственно нет а для всего остального мировка в том числе для есть там даж быть Вот поэтому мы мием данные обычный стада то есть соответственно получилось како пространство ВС Обратите внимание у вас сегодня будет аж 500 столбцов если у вас компьютер будет взрываться на 500 то просто понижает в идеале надо бы сравнить кластеризации до без понижения размерности и с

на 500 то просто понижает в идеале надо бы сравнить кластеризации до без понижения размерности и с понижением вот я буду понижать до двух компонент буду использовать pcs Ну что ж Всё достаточно просто то есть в одну строчку буквально тфм и всё и всё так Ну вот посчитали там XC Да Две координаты будет лежать потому что это нерская библиотека далее Далее Ну что запускаем смотрите я пока что просто понизил размер взглянем на это пространство иногда как бы это очень круто и Возможно даже 50

просто понизил размер взглянем на это пространство иногда как бы это очень круто и Возможно даже 50 пространство понижаю до д до т с помощью [музыка] при ние цветом цветом выделены классы То есть это реальный вид пингвинов это не результат кластеризации я ещ кластеризации три вида пингвина и можно сказать что ну как по мне неплохо валось один прям не очень Да справляется вс-таки какая-то перемешка есть а вот S Норма Он клан Ласт стато вране находится ну за исключением редких выбросов а два

есть а вот S Норма Он клан Ласт стато вране находится ну за исключением редких выбросов а два кластера они очень близки друг другу Но тем не менее они всё равно как бы отделены отделены вот именно вот в этом пространстве будет работать сейчас любой алгоритм который выберете там Кан или что-то ещё Ну и всё соответственно дальше запускаем и считаем метрики по факту на этом пайплайн кластеризации практически закончилась вот запустили я запустил запустил авю криза внимание можно не ставить ему

практически закончилась вот запустили я запустил запустил авю криза внимание можно не ставить ему количество кластеров как бы кон конс обязательно оставить А ну что-то значит поставили по умолчанию Но вообще как бы давайте откроем документацию раньше это сразу же рило ошибку А он у меня ко открыт А ну всё у них количество кластеров по умолчанию поставили раньше не стояло Ну короче как бы количество кластеров лучше указывать всегда То которое вы хотите грубо говоря да валидировать вс-таки это

кластеров лучше указывать всегда То которое вы хотите грубо говоря да валидировать вс-таки это такой важный параметр в кластеризации количества кластеров очень очевидно А вот поэтому Т на самом деле сюда тоже можно указать что здесь три количество кластеров Да И вот в ДБ сне в ДБ сне мы задаём Epson me samples у ДБ сна как бы количество кластеров не выставишь он сам сколько найдёт по своим параметрам Ну собственно говоря то и получим Ну что ж обучаем и Давайте посмотрим что получилось

параметрам Ну собственно говоря то и получим Ну что ж обучаем и Давайте посмотрим что получилось получилась примерно Вот такая история то есть смотрите здесь Матрица 3 на3 где у меня собственно говоря первая строка это PC втора первый столбец ВТО то есть па понижение размерности плюс кластеризация и все возможных дев комбинаций вот Ну что можно посмотреть я считал ниже Ну вот тне деска тут вообще отрицательный силуэт получился из-за какой-то перемешки Да но это скорее всего потому что деска

отрицательный силуэт получился из-за какой-то перемешки Да но это скорее всего потому что деска начал их отмечать как выбросы Минус один и всё и сразу же силуэт начал он не то чтобы ноль он вообще в отрицательную сторону ушёл здесь силуэты достаточно хорошие высокие Да всё так неплохо делится А здесь силуэты Ну примерно такие же на самом деле то есть да Что Что МПа есть вот этот случай смотрите силу H 086 кто Моть Почему так получилось на ваш взгляд Ну он объединил два кластера в один справа и

H 086 кто Моть Почему так получилось на ваш взгляд Ну он объединил два кластера в один справа и снизу там и они Далеко да то есть видите как бы скну именно за счёт того что кластера стала два а не один так вот это и остаётся как бы по факту таким знаете вопросом субъективности а что мы хотим от кластеризации если мы хотим чтобы кластеры были как бы максимально не похожи тогда мне надо указывать ла считать вре просто летит в космос Но если я хочу посмотреть в контексте чего-то что всё-таки как

ла считать вре просто летит в космос Но если я хочу посмотреть в контексте чего-то что всё-таки как бы когда есть разметка именно так лучше делать тогда я бу посчитал какие-то внешние метрики у меня же есть Вид пингвина правильно выборки вот то что я вам как бы здесь цветом раскрашивал есть соответственно я могу посмотреть как одно накладывается на другое То есть кластеры на классы Ну и посмотреть Чему собственно говоря будет равно тогда конечно скорее всего вот этот случай Да будет лучше чем

Чему собственно говоря будет равно тогда конечно скорее всего вот этот случай Да будет лучше чем вот этот то есть здесь ниже внутренняя но выше внешняя Метрика А здесь наоборот можно как бы для примера собственно говоря посмотреть Давайте запустим то есть здесь я всё Расписал то что мы с вами проговаривать запускаем агломерат кластеризации запускаем db Scan и считаем метрики так вот это у меня метрики вот это у меня метрики что это у меня за метрики иерархическая Да да да Это нет амера

меня метрики вот это у меня метрики что это у меня за метрики иерархическая Да да да Это нет амера кластеризация у меня короче 8888 это достаточно высокий да то есть достаточно чистый кластер не размешанные Да ошибка и классы не разлетелись жёстко по классам То есть это очень хорошая кластеризация Теперь смотрите Теперь смотрите берём я гарантирую что сделает Нет СТ как америци а просела одна выросла Но одна просела причём просела именно гомогенность за что у нас отвечает гомогенность ещё раз

Но одна просела причём просела именно гомогенность за что у нас отвечает гомогенность ещё раз один класс один кластер гомогенность отвечает за кластеры насколько чистый кластеры и соответственно когда раз кластер два кластер к этому кластеру вопроса нет здесь один вид пингвинов только здесь всё О'кей А вот здесь уже по факту два вида помните соответственно как бы и пошло то есть вот этот с этим как бы Вот это с этим и так далее соответственно внешняя Метрика там например если выбра внешняя

как бы Вот это с этим и так далее соответственно внешняя Метрика там например если выбра внешняя Метрика качество гомогенность что достаточно часто может быть как бы получается что хуже работает и это не очень но если вас интересует как бы внутренняя Метрика тогда поэтому это всегда зависит очень зависит от контекста зависит от Конте также Всё зависит от того какую вы нормировка попробовать разные параметры Можете даже в АТ написать вообще можно в АТ написать без всяких проблем любую

разные параметры Можете даже в АТ написать вообще можно в АТ написать без всяких проблем любую кластеризации и тоже там подобрать гиперпараметры то есть АТ вообще без разницы на самом деле че вы ей туда подаёт как бы ей просто надо Вт указать что возвращать Дальше она всё сама прогонит все эти как бы параметры как-то так Ну вот тут кстати Кто хочет в принципе я как бы это не буду сейчас останавливаться это как понижать размерность и что получилось вот вот с этими рукописными цифрами может мы

это как понижать размерность и что получилось вот вот с этими рукописными цифрами может мы завтра с вами это поговорим Посмотрим это вот ровно то что как бы собственно говоря на статье хабра вот там pcs как понижая инфу Вот то есть там в дем ещё есть кое-что но это в свободное время можете посмотреть как бы Для заданий и в целом такой нагрузки Для нас это не несёт то есть пайплайн сегодняшнего дня достаточно на самом деле такой тривиальный кластеризация Она сама по себе не Очень трудная она

дня достаточно на самом деле такой тривиальный кластеризация Она сама по себе не Очень трудная она гораздо проще чем й вот у нас есть датасет мы его нормируемой применяем какой-то алгоритм кластеризации считаем метрики всё Ну как-то так какие-то вопросы пока Я открываю задание сегодняшнее хорошо так Какое у вас сегодня задание будет у вас будет датасет датасет в нём содержатся датчики мобильного теле Ну как бы не понятно информация снята с мобильных датчиков да Для различных активностей

теле Ну как бы не понятно информация снята с мобильных датчиков да Для различных активностей пользователя необходимо выявить какие-то кластеры в данных предложить каким состоянием не соответству коммет сидит пользователь стоит пользователь гуляет пому пользователь гуляет в лестнице по лестницам вверх короче в подм идт или в спуск и по спит короче по-моему пять или шесть состояний но я вам советую сделать следующим образом сначала провести всю кластеризация посмотреть уже есть разметка посчитать

сделать следующим образом сначала провести всю кластеризация посмотреть уже есть разметка посчитать какие-то метрики сначала сфокусироваться именно на кластеризации не обращать внимания на ИЖа вот читать что это такое Это тоже было когда-то соревнование на гле вот ну тут можете что что вам тут может пригодиться вам может пригодиться Ну тут про фичи какое-то описание есть то есть можно посмотреть как бы какой класт какой класс что значит и на каких фича собственно говоря у вас какие фичи у вас

как бы какой класт какой класс что значит и на каких фича собственно говоря у вас какие фичи у вас будут потому что здесь именно здесь в самом задании у вас название колонок не будет так что кому нужно может валится на самом деле это не особо здесь важно так вот а дальше Всё собственно говоря все задания у вас здесь прописаны все задания прописаны кто успеет быстро сделать первое задание ещё есть датасет а в котором нужно кластеризованный карт то есть кластеризованный сделайте полностью первое

датасет а в котором нужно кластеризованный карт то есть кластеризованный сделайте полностью первое задание переварите вечером ещё с вами обсудим У кого что получилось вот как-то так вопросы ко мне Ну всё тогда если Вопросов нет то работаем по старой схеме также вечером с вами обсудим что получилось Тут кстати есть интересные штуки ну интересный красивый результат да сразу Да я всё про эти про вопросы свая и всё Или вечером давайте давайте вечером просто все я думаю всем интересно вечерком можно

свая и всё Или вечером давайте давайте вечером просто все я думаю всем интересно вечерком можно вече Как сказать сейчас не грузить ваш мозг лишним контекстом Ой хорошо можно будет обсудить вот как-то так Ну всё Давайте тогда продуктивного дня и на связи пока-пока

пойдёт заниматься так Всем доброе утро Приветик Ну всё у меня все сборы Давайте начинать сегодня мы с вами поговорим про тексты сегодня мы с вами поговорим про текст ни больше ни меньше так кластеризация кв изображения Ну с изображением на самом деле будет просто пример который вы можете взглянуть как это вообще дело выглядит но как бы на самом деле вся наша речь и ваше задание сегодня оно пойдёт именно о текстах о текстах Итак как представить как сегодня как представить текст так чтобы передать

о текстах о текстах Итак как представить как сегодня как представить текст так чтобы передать его в модель базовые алгоритмы обработки языка решение задач кластеризации текста пример с кластеризации изображений Так ну смотрите вот в целом в целом с текстом можно делать те же самые истории классифицировать текст ну плюс ещё много задач дополнительных типа генерация определение части речи и так далее но вот то что мы с вами проходили как классификация там на прошлой неделе И вот кластеризация

далее но вот то что мы с вами проходили как классификация там на прошлой неделе И вот кластеризация сегодня это тоже можно текстом Да причём алгоритмы не поменяются алгоритмы именно классификации или кластеризации останутся теми же самыми открытый вопрос стоит в другом Как как собственно говоря сделать так ну как как текст закодировать Да как текст представить в виде какого-то там цифры или вектора Ну собственно говоря об этом У нас пойдёт речь Итак мы проговори часть процедур которые

или вектора Ну собственно говоря об этом У нас пойдёт речь Итак мы проговори часть процедур которые собственно говоря на выходе нам дадут векторно представление любого текста первая самая порная пов вот у меня собственно говоря есть текст Да ну понятно что раз оно послов то мы там тонируем вот так по словам изначально как бы даже большие языковые модели они так и работали то есть есть понятие размер словаря это сколько слов модель знает Да собственно го Она формировалась тем сколько слов Она

словаря это сколько слов модель знает Да собственно го Она формировалась тем сколько слов Она видела потому что тонизация была по словно сейчас тонизация ещё более детализированная во внут слова но это в больших моделях ти ус по слони простая процедура Лова на токены ВС достаточно Понятно Вот как правило именно токены определяют размер словаря Так ну что ж каждое слово разбито каждое слово Теперь мы как бы отдельно к нему можем подступиться скажем так и сделать какие-то преобразования Какие

мы как бы отдельно к нему можем подступиться скажем так и сделать какие-то преобразования Какие преобразования популярные есть вообще две такие конкурирующие жду собой разова минг и климатизация начнём со стеми минг - это грубый рический процесс который отрезает лишнее от корня слов часто это приводит к потере словообразовательных суффикс в чём идея смотрите вот Представьте у вас будет много-много элементо выборки то есть много текстов вы их там кластери может быть вообще просто Бинар на

элементо выборки то есть много текстов вы их там кластери может быть вообще просто Бинар на хорошее и плохое описание чего-либо и там вот хороший хорошая хорошенький хорошей всё это раздувает Ну как бы раздувает наш словарь Да токенов становится всё больше это в дальнейшем влияет не очень хорошо на качество а представьте у каждого слова такое будет по 10 форм в общем как бы мы пытаемся здесь обрезать то что в целом возможно для Ну в нашем случае для кластеризации не будет иметь Смысла не будет

то что в целом возможно для Ну в нашем случае для кластеризации не будет иметь Смысла не будет иметь смысла ну и соответственно примеры можете посмотреть да как это примерно выделить конкурентом мин является лизация Тия гораздо ще мин лизация она не такая грубая как минг В чём суть литиции лизация - это процесс который использует словарь и морфологический анализ чтобы в итоге привести слово к канонической форме то есть глагол сейчас чекнуть хочу ой Здоров благодарю В общем глагол собственно

канонической форме то есть глагол сейчас чекнуть хочу ой Здоров благодарю В общем глагол собственно говоря привести к инфинитиву Да а если там речь пот о существительных перевести примените поде прилагательно в начальную форму вот Ну например знаю хотеть хочу хотел да стало как хотеть стала и так далее тем самым как бы по факту все слова придут в лему и тогда словар уменьшится Летиция существенно популярнее чем тоже в принципе достаточно Простая история у вас будут как бы стандартные словари

популярнее чем тоже в принципе достаточно Простая история у вас будут как бы стандартные словари которые мы можем взять и которые знат как бы для каждого слова там гли мати затор который мы сегодня будем использовать будет иметь представление о начальной форме мы можем Всё это дело перевести так если Вопросов нет то пойдём дальше Что следующее в пайплайн может встретиться это Стоп слова но они могут быть на самом деле в другом порядке то есть доле Матиза а стоп слова никаких проблем В чём идея

быть на самом деле в другом порядке то есть доле Матиза а стоп слова никаких проблем В чём идея идея очень простая у нас с вами есть очень много предлогов союзов Да местоимений и тому подобных коротких частей речи которые в целом Ну как бы как таковой смысловой нагрузки не несут в большинстве случаев их всех объединяют как бы в группу стоп слова стоп слова могут быть и кастомные под задачу конкретную то есть в конкретном тексте конкретно слово какое-нибудь паразит кото со стоп словами Это в

то есть в конкретном тексте конкретно слово какое-нибудь паразит кото со стоп словами Это в прямом смысле лист в питоне или какой-нибудь txt файл который вы всегда можете добавить слова которые Вам не нравятся и теперь текст проходя через pel уже будет всегда находиться без этого слова вот без этого слова ну собственно говоря вот примеры русского и английского Давайте посмотрим вот у нас было по асфальту мимо цемента избегая по Аплодисменты обита спальных рендис собственно говоря вот стал афа е

мимо цемента избегая по Аплодисменты обита спальных рендис собственно говоря вот стал афа е стаби [музыка] Ну ВС приходит в Нижне в нижнее подчеркивание Да ну корочек маленьким буковка вот по Ушло да асфальту пришло тут как бы не только собственно стоп слова Уле ещё Лема Да асфальту пришло вте падеж мимо цемент запятые знаки пунктуации тоже убраны избегать зевака Аплодисменты обитатель спальный Осман приводит КМУ чему слову один через словари обзор другой чере сломе что они всегда дают один и

Осман приводит КМУ чему слову один через словари обзор другой чере сломе что они всегда дают один и тотже Реут е случа когда они оба после [музыка] обработки слово э particle третья форма лого си для мации вернёт си правильно по коническая форма а него тоже си потому что он просто уберёт N не нужным Ну так совпадёт так на самом деле происходит Блин я не могу тебе сказать я не собирал такую статистику и не смотрел я вообще сторонник климатизация и как бы сторонник климатизация просто всё спасибо

и не смотрел я вообще сторонник климатизация и как бы сторонник климатизация просто всё спасибо только Лема требует словарь небольшой а в этом плане как бы ему пофигу просто удаляет удаляет давольно лишнего может срезать Так что он более редкий А где-то это вообще не нужно например модели gpt ей со своим словарём ей нужно знать все формы хорошие хорошие хорошенькие и так далее да как бы для неё нет смысла обрезать для нас есть смысл поэтому как бы Лема всё равно чаще чем так с ми подготовите

нет смысла обрезать для нас есть смысл поэтому как бы Лема всё равно чаще чем так с ми подготовите виду мы убрали стоп слова всё приведено к именительном там тежу инфинитиву для глаголов ураны знаки пунктуации и так далее В общем текст как будто бы готов уже к кодировке Итак первая на первая Первый вид кодировки у нас кстати вот этот слайд уже был когда мы с вами матрицы разбирали и называется Этот способ of Words или мешок слов Представьте что у меня есть Четыре элемента выборки в дальнейшем

способ of Words или мешок слов Представьте что у меня есть Четыре элемента выборки в дальнейшем работая с текстами вы узнаете Точнее не узнаете короче называют принято называть документами Ну такой слн текстовый типа на одном документе вот у меня один документ то есть один документ равно один элемент выборки один текст понятно да то есть поэтому можно сказать что у нас здесь четыре документа или четыре текста и нам надо их закодировать даёт очень простую кодировку векторам кодирует за сч просто

текста и нам надо их закодировать даёт очень простую кодировку векторам кодирует за сч просто поч соответственно если слово встречалось хотя бы один раз например слово то мы получаем едини встречалось тоже там один раз мы получаем тоже единичку и того собственно гово формируется какой-то Вектор кодировки документа Как вы думаете размер размер чему будет равен этого вектора размерность разме с у вас на все документы есть уникальных слов правильно вообще все То есть например с здесь же нет в

у вас на все документы есть уникальных слов правильно вообще все То есть например с здесь же нет в первом Да что он там есть дальше Ну как бы Поэтому собственно говоря мы и будем гнаться за тем чтобы ну хотя бы как-то всегда контролить и не раздувать лишний раз датасет потому что это становится очень большие разряженные датасеты что не есть хорошо Да это правильно то есть размер словаря формируется ой размер словаря формирует размерность пространства в котором будет лежать каждый документ Ну и

ой размер словаря формирует размерность пространства в котором будет лежать каждый документ Ну и собственно говоря дальше там второе можете посмотреть Да также там третье и так далее самая достаточно такая тривиальная кодировка Но она очень дешёвая потому что она очень быстрая и быстро кодируется как бы когда-то это вообще было очень сильной штукой понятно что вне сетях сейчас более сложные более сложные да более сложные иде как кодировать текст но иногда просто даже проект бы прой Груп по

сложные да более сложные иде как кодировать текст но иногда просто даже проект бы прой Груп по тексту они вам показывали там это то что мы сечас будем разбирать следующем это в принципе примерно такой же по уровню сложности чуть-чуть сложнее чем вот этот оказывались сильнее чем нейронные сети Поэтому иногда простота простота она это и есть сила слон такая кодировка позволяет Да восстановить порядок слов То есть это будет один метод в коде просто и всё То есть он же знае на каком столбце Ну

слов То есть это будет один метод в коде просто и всё То есть он же знае на каком столбце Ну точнее у него как бы есть соответствие индекса и слова То есть он знает что первый столбец это словом он его знает и всегда сможет откатить поэтому этот метод ещё позволяет откатить обратно хорошо некоторые мето не позволяют То есть это хш кодировка такая односторонняя Я не понял ответа на вопрос Константина То есть получается в каждом чени есть его позиция в предложении Ну это вы глубоко полезли Я не

То есть получается в каждом чени есть его позиция в предложении Ну это вы глубоко полезли Я не знаю зачем Кост сейчас именно этот вопрос возник но в целом как бы типа я так понял что вопрос в том чтобы вот если есть кодировка вектора Можно ли обратно восстановить слово в порядке котором оно было сделано Да Дада ответ Можно конкретно для этого метода можно это кое-где нужно это кое-где нужно но мы до этого ещё не дошли Так ну что ж А как вы думаете В чём минус этого метода в размере жирный

но мы до этого ещё не дошли Так ну что ж А как вы думаете В чём минус этого метода в размере жирный [музыка] м он долгий Да что будешь делать он наоборот недолгий вообще размер Ну размер размер как бы ну я бы не сказал что это проблема как бы это не только проблема конкретно этого метода это в целом в тексте такая проблема тог другой момент он скажем будет сло он три слова разны напишет а не оно слово То есть он не понимает морфологический разбор Ну глубоко пони Я согласен но ели что-то более

слово То есть он не понимает морфологический разбор Ну глубоко пони Я согласен но ели что-то более простое ещ может быть связ между словами не видим волу то есть мы никак не смотрим контекст може было не А смысл сонно гот поменяться в корне от этого И ещё много нюансов То есть как бы получается что контекст мы никак не проверяем для этого если говорить про простые инструменты есть такой инструмент который называется Мы в ЧМ его суть его Суть в том что с не только бы в свой словар берте каждое

который называется Мы в ЧМ его суть его Суть в том что с не только бы в свой словар берте каждое слово по отдельности каждое слово по отдельности но ещ берте все возможные словосочетания которые возникли то есть в моём случае Open Open всё соответственно они будут тоже как бы как часть словаря тем самым хоть какая-то попытка зацепить контекст хоть какая-то попытка можеть и так дает по новы раздувается но хоть какой-то шанс зацепиться за контекст может быть поможет может быть и нет то есть

но хоть какой-то шанс зацепиться за контекст может быть поможет может быть и нет то есть всевозможные комбинации слов да да не все возможные прямо в том плане что случайно берутся А вот как бы соседние слова То есть если мама мыла раму то бимы будут мама мыла и мыла раму а мама раму не будет только соседний то есть Типа если дойти до оден то он просто как Ну весь Всё предложение сохранит Ну никто больше и не делает но вообще да а О'кей Ну и вообще на самом деле Чтобы действительно граммы

никто больше и не делает но вообще да а О'кей Ну и вообще на самом деле Чтобы действительно граммы раскрылись нужны большие текстовые данные для этого большие потому что иначе у вас будет Ну вот Office билдинг на маленьком датасете 100% это встретится только один раз и всё А как мы можем по одному элементу выборки оценить важность вот этого словосочетания не очень-то да Поэтому собственно говоря потребление текста должно быть колоссальное для таких задач вот как-то так вы это можете прямо

потребление текста должно быть колоссальное для таких задач вот как-то так вы это можете прямо вместе включить да то есть ворки добавить граммы любого размера каковых вы хотите посмотреть что из этого Давай бу ну скажем у нас есть научная работа про про болезни У пингвинов то скажем болезнь пингвин больной пингвин пингвин ная болезнь они будут чаще встречаться и будут самые весомые да да типа того да То есть зависит от самой природы текста мы получаем частоту которую ты можешь более того кастом

да То есть зависит от самой природы текста мы получаем частоту которую ты можешь более того кастом на делать если ты знаешь что у тебя там с болезнью пингвина связано как-то ты можешь это прямо сам прописать и почитать сам вхождение знаеш не сложно делается то по сейчас схождение касто не понял Ну вот болезнь пингвинов Тебе нравится чтобы не считать все остальные би граммы а то вручную её просто посчитаешь и всё вес придаю кому что важно Ну да да ну то есть просто добавишь здесь вот ещё будет

посчитаешь и всё вес придаю кому что важно Ну да да ну то есть просто добавишь здесь вот ещё будет ловец появился вес пингвинов Ой не вес а болезнь пингвинов и подсчёт тут как бы инструменты они в общем виде предлагаются конечно словари с которыми Мы работаем они могут быть абсолютно разные в зависимости от того с каким текстом вы столкнулись Давай любой вопрос очень заинтересовал своей фразой про то что кодировку можно использовать в кодировке текстов можно использовать оба метода и мешок слов

то что кодировку можно использовать в кодировке текстов можно использовать оба метода и мешок слов и энграммы можешь поподробнее про это рассказать ну грама - это и есть мешок слов просто также подсчёт ещё не только слов словосочетаний в том числе он даже этот он это всё во слр лежит секун что-то блин новый Зум вы Обновили Зум себе Да я установил Да он такой красивый так-то приятный но у него неудобно хватается окошка с камерами кото Ну где он называется не а называется вот соответственно

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

на то что это как бы уже достаточно старенький алгоритм но он очень простой и этим-то на самом деле и берёт э как Логистическая регрессия в мире нейронных сетей также мире кодировок текст в чём собственно суть этого метода TF - это абревиатура TF - этом frequency вторую idf Я всё забываю честно говоря как она расшифровывается короче это ну собирается из двух составляющих из двух множителей то есть вот у меня первый множитель вот у меня второй но мы сейчас с вами сразу посмотрим на примере Это

вот у меня первый множитель вот у меня второй но мы сейчас с вами сразу посмотрим на примере Это для вас вот так заземлить чтобы После лекции понятно было мы с вами посмотрим сразу на примере смотрите у нас с вами есть также четыре документа чере документа и мы сейчас задиру одно слово выборочно Ну пусть это будет слово так-то как бы ещ много других слов будем кодировать Вот и то что мы выше проговорили есть такой минус в том плане что он бы не нормируется Вот и нам бы хотелось бы чтобы был ней

есть такой минус в том плане что он бы не нормируется Вот и нам бы хотелось бы чтобы был ней некая Такая ноющая сила В каком-то смысле такую штуку имеет смотрит важность слово под двумя углами первое Ну смотрите вот например мы берм там вот здесь по факту Да короче какой-то есть контекст который как бы тоже в себе вот в прямом смысле несёт информацию и возьмём предложение под номером четыре здесь написано C кроме как о кошки здесь речи вообще ни о чём не идёт то есть вся информационная нагрузка

написано C кроме как о кошки здесь речи вообще ни о чём не идёт то есть вся информационная нагрузка ложится на одно слово понимаете мысль мою то есть здесь как бы она помимо того что кошка я ещё понимаю о чём тут ещё шла речь здесь как бы ничего нет так вот первый множитель первый множитель первый множитель он он отвечает за то Ну собственно говоря Какой вес получает как бы слово да В данном случае КТ у нас имеет 1/6 здесь у нас семь слов КТ имеет вес 1 седьмую здесь у нас окошке речи не идёт

КТ у нас имеет 1/6 здесь у нас семь слов КТ имеет вес 1 седьмую здесь у нас окошке речи не идёт поэтому всё соответственно вот здесь уже сразу же в кодировке возникнет Ноль вот здесь целиком то есть слово будет закодировано как ноль Потому что его здесь нет а здесь получается самый большой вес то есть вся нагрузка ложится на это слово то есть это первый нормирующий такой член который как бы оценивает информационную нагрузку в контексте своего документа ещё есть вторая составляющая сейчас мы её

информационную нагрузку в контексте своего документа ещё есть вторая составляющая сейчас мы её проговори Давай любой вопрос Да я очень прошу прощения чуть-чуть отвлеклась моргнула и всё пропустила это тоже метод кодировки Да откуда Если можно пов полу откуда почему лорим говорил это я ещ не говорил этого сейс так вот пер с первой частью разобрались это вот член вот Второй член он оценивает важность слова в контексте всего словаря то есть Насколько часто оно встречалось вот слово смотрите оно у

слова в контексте всего словаря то есть Насколько часто оно встречалось вот слово смотрите оно у нас с вами встречалось в т документах из то есть только вот в этом документе нет так вот этот вот множитель он формируется следующим образом это логарифм Где в числителе в числителе количество документов всего А в знаменателе количество документов где-то слово встретилось Обратите внимание если бы у меня КТ встретилась во всех словах То что бы получилось едини логарифм единиц равен Ну ну залило Прим

КТ встретилась во всех словах То что бы получилось едини логарифм единиц равен Ну ну залило Прим залило бы для всех сразу то есть этот метод подразумевает что мы не будем даже смотреть слова которые как бы встречаются Везде они никакой уникальности не дают совершенно но как бы такого не получить Да что ты будешь делать такого в общем чтобы какое-то слово встретилось во всех сся в общем как бы соответственно чем это слово реже встречается тем Вы на самом деле больше вес получаете правильно всё

чем это слово реже встречается тем Вы на самом деле больше вес получаете правильно всё больше больше больше вес всё вот так работает и говорю Вот если вы помните проект вот группы получается на позу прошлой недели когда они по текстам показывали там Они часто Голи п шла кодировка текста да А через логистическую регрессию шла классификация тек там надо было классифицировать то есть классифицировали уже вот на чём-то таком как бы да тут уже можно Сола так ну в принципе всё по теоретической

уже вот на чём-то таком как бы да тут уже можно Сола так ну в принципе всё по теоретической истории сегодня сейчас нас Е ждт код Итак обработка естественного языка развивающаяся область виде чисел есть классические подходы которые не требуют никаких не сетевых ресурсов Да и достаточно простые есть несетевые подходы Word вы о них будете вы вы их будете обсуждать и их попробуете запустить на фазе 2 когда у вас будет неделя под номером три получается да ну короче текстовая неделя Ну и современные

когда у вас будет неделя под номером три получается да ну короче текстовая неделя Ну и современные подходы формирование инго тоже соответственно о них поговорите у т неделя текста Вот обработаны текст входные данные для какие-то вопросы есть я хотела спросить такой на Мета уровне вопрос про спрос на этот на эти скилы сейчас как бы понятно что все туда побежали и вопрос с ум того чтов это изучат вотча Кая развитие рынка типа предложение дата саентистом превышает спрос на них или всё ещё не

вотча Кая развитие рынка типа предложение дата саентистом превышает спрос на них или всё ещё не превышает наоборот Ну у меня нет такой статически я тебя не могу с Ну может быть по опыту выпускников Эльбруса ты сталкивался может быть общался с кем-то они Ну я знаю что много ваканси много кому сепи нужны ну в смысле Смог ли кто-то трудоустроиться или кто-то кто очень хотел трудоустроиться наоборот не смог Туда туда можно труду устроить если цельте туда то цельте Я бы Оттава не от спроса Я бы

не смог Туда туда можно труду устроить если цельте туда то цельте Я бы Оттава не от спроса Я бы Оттава от того что вас дравит в первую очередь если вас драт текст То идите в текст если ва Луч избегайте тек почему с некоторых областях настолько много уже специалистов Прим уровня что это даже превышает тихоньку все начнут понимать что надо надо надо потому что сейчас уже кто не внедрить себе м в свои чат боты ток не внедрить там короче не будет внедрять и продукт они начнут погибать

себе м в свои чат боты ток не внедрить там короче не будет внедрять и продукт они начнут погибать соответственно все поймут что нужно развивать и потому что это новое правило рынка соотвественно откроются дофи вакансий и в том числе текстовых вот текстовых и классических поменьше в Мом понимании потому что классический бизнес рано текста и много табличных данных вот а картинки по стольку по скольку как бы Угу так что не переживайте по этому поводу А если дравит текст то как бы вы обязательно

как бы Угу так что не переживайте по этому поводу А если дравит текст то как бы вы обязательно найдёте если будете трудиться но текст самый сложный конечно объективно Вот но сложный в плане геморроя Когда уже знаешь или сложный в плане понять и узнать наверно понять Да вообще в целом самый сложный со всех фронтов Ну как бы этот у вас ещё будет целая неделя чтобы сформировать То есть то что как бы мы здесь смотрим это ребячество по сравнению с тем как конечно текст можно обрабатывать вот поэтому

мы здесь смотрим это ребячество по сравнению с тем как конечно текст можно обрабатывать вот поэтому у вас ещё всё впереди всё впереди сейчас нам надо понять просто да Как там текст кодируется Так ну что ж тогда давайте переходить к переходить к заданию приходить к заданию точнее не к заданию а к демо файлу [музыка] мы с вами посмотрим датасет в котором у нас будет четыре точнее у нас будут короче тексты Нам нужно будет их кластеризованный [музыка] возникает необходимость обрабатывать текст так

тексты Нам нужно будет их кластеризованный [музыка] возникает необходимость обрабатывать текст так или иначе но как бы ладно это Даше комен Это для строк Это для словарей базовые вещи такие так потом потом потом потом потом метрики нам знакома та нам знакома вот пошла библиотека лтк стоп слова Нам нужен лизер тайзер всё пока что из библиотеки только три вещи нам нужно будет Вот далее вр мы возьмём кластеризация это нам нужно датасет тупо взять понижение размерности Сегодня надо понижать

возьмём кластеризация это нам нужно датасет тупо взять понижение размерности Сегодня надо понижать размерность будет для этого в текстах чаще всего используется сингулярное разложение вот потом данные строчку вы уже знаете Так ну что ж поехали а мы с вами возьмём на самом деле вот этот вот этот датасет он лежит в элёр внутри это Т твиты людей которые разбиты на 20 групп то есть там на самом деле разметка есть там разметка есть Вот Но мы будем не классификацию строить А всё равно кластеризации

разметка есть там разметка есть Вот Но мы будем не классификацию строить А всё равно кластеризации кластеризации но мы из двадцати групп возьмём не все группы мы возьмём только четыре группы атеизм религия компьютерная графика и Ну короче научная тематика Космос Вот как-то так Тут собственно говоря просто стандартный такой IPS Коски Как вытащить этот датасет в мы будем хранить разметку А в остальном Ну вот датасет точка дата можно посмотреть вот датасет да Что из себя представляет этол который

Ну вот датасет точка дата можно посмотреть вот датасет да Что из себя представляет этол который хранит какие-то помимо датасета ещ всякие истории вот имена какие-то скрип Ну нам нам достаточно Да Ута взять Ну и можно собственно говоря сколько у нас этих документов у нас 387 документов Ну можно взять какой-нибудь один Случайный Документ и отслеживать его судьбу например 19 Да много всяких А знаете что с N какие-нибудь ещё ну СН здесь в основном перевод строки строка да то есть если я вот сейчас

что с N какие-нибудь ещё ну СН здесь в основном перевод строки строка да то есть если я вот сейчас пропишу вот так Print то он отобразится уже в корректно Да Принт уже напечатает с учётом США а Slash B - Это что такое Я не помню лаб это ну типа то же самое но не тоже самое просто это виж вижу там их вообще там их вообще дофига на самом деле этих Да я просто спросила потому что я постоянно вижу SL и Slash и [музыка] путаюсь сейчас я хочу какую-нибудь где больше видно будет того что мы тизи Ну

SL и Slash и [музыка] путаюсь сейчас я хочу какую-нибудь где больше видно будет того что мы тизи Ну ладно Бог с ним Пусть будет 1955 тут цифры есть там так всё пока такой текст поехали здесь функция Вот эта функция вам в принципе пока глубоко в неё не надо погружаться но это функция кото кластеризации и сразу же под ВС То есть как бы это просто агрегация тут нет ничего принципиально новой нагрузки того чтобы вы не знали Видите Там гомогенность компт коэффи все метрики нам уже знакомы вчерашнего

того чтобы вы не знали Видите Там гомогенность компт коэффи все метрики нам уже знакомы вчерашнего дня вот больше ни меньше конкретно заточено под проблемы текстов которые мы имеем Да ну что в твите что в твиттерах Может быть проблемным там прикидываются люди ссылками Да вот вот библиотека р вот вот такой вот конструк RS она ищет шаблон она ищет шаблон и делает замену То есть она вот вот это вот шаблон например одного вот этот шаблон https + этот шаблон зацепить ссылки соответственно если

вот шаблон например одного вот этот шаблон https + этот шаблон зацепить ссылки соответственно если ссылка попадётся то он её заменит Ну на воздух ссылки не будет Вот там например СШ Омега - Это любая цифра по-моему а не любой символ СД любая цифра Да плюс говорит о том что короче любое количество символов там пробел не входит соответственно с собачки начинается это упоминание пользователей понятно что в Твиттере тоже все как бы перекидываю с этими упоминания В итоге В итоге получим получим

что в Твиттере тоже все как бы перекидываю с этими упоминания В итоге В итоге получим получим удаление вот упоминания пользователей хэштеги числа знаки пунктуации нижний регистр В общем какие-то базовые преобразователей этого текста этих данных точнее Так ну что ж Вот текст мы почистили Что я сделал Я просто проинициализировался и применил функцию ко всем это у меня хранится в другой переменной можно вывести наш с вами текст Ну что-то однозначно изменилось Да цифры куда-то пропали цифры куда-то

вывести наш с вами текст Ну что-то однозначно изменилось Да цифры куда-то пропали цифры куда-то пропали пропали часть служебных символов Но не все ещё многие с они просто зажаты внутри слов поэтому они не удалились Но они удалятся там есть инструменты которые их удалят В общем текст стал чуть чище чуть чище деб не Но короче удаление по крайней мере видно что всё прошло Потому что удалили Том и смыс чтобы он значи части слова не значи Ну может быть я не помню честно не помню с самое главное что

чтобы он значи части слова не значи Ну может быть я не помню честно не помню с самое главное что прошёл запуск прошёл запуск Да потому что часть часть удалилась часть удалилась У нас вот так идём дальше Ну собственно говоря лизация [музыка] лизация для этого мы возм из библиотеки и дальше собственно говоря как он работает вот смотрите Я пример Здесь вам указал вот Ну вот вот это лизер да Он переводит в каноническую форму Но вам надо указывать какой часть речи по умолчанию существительных

переводит в каноническую форму Но вам надо указывать какой часть речи по умолчанию существительных Поэтому если у меня стоит существительно то видите возвращает после применения Ну и в обратную сторону Я не знаю могу указать вот так да то есть здесь как бы Я указал апельсины онне перевёл в началь начальную строчку у них не Сделано в этом литае чтобы сразу просто знаете передать несколько частей речи там условно как-нибудь вот так деле не это лизер пригодится вам пригодится другой Лима тайзер а

там условно как-нибудь вот так деле не это лизер пригодится вам пригодится другой Лима тайзер а там такой проблемы нет В общем как бы Лима тайзер охватывает определённую часть речи у него есть знани словаря и он знает слова типа Апельсины да Или ити которые у меня были ему конечно эти слова знакомы Так что я делаю просто прохожу по всем твитам изза того что уже очищено первично применяя каждому слову каждому слову литай Ну и что-то мы с вами получаем Вот то есть как бы ли Матиза она удаляет все

каждому слову литай Ну и что-то мы с вами получаем Вот то есть как бы ли Матиза она удаляет все эти истории со СН это ну побочная такая Побочный продукт можно построить документацию Ну в общем что у нас с вами получилось можно выглядывать где-нибудь бы Давай был вопрос Понимаю за слово с на другом языке написано там да Вари английское слово са фмили может возникает тексте там в тексте столько гемера именно готовить текст это очень сложная оче очень сложная история Я хочу найти какое-нибудь

гемера именно готовить текст это очень сложная оче очень сложная история Я хочу найти какое-нибудь слово которое А вот ну всё хотя бы Например одного что ли Матиза сработала Вот был reasons Да у нас с вами стала Рим То есть он существительно перевёл в именительный падеж вот ну именно существитель потому что у меня включены существительные глаголы если и были то они останутся в своих частях своей форме вот так дальше у нас есть низация там вот с пропало причём с в середине бы в середине слов

форме вот так дальше у нас есть низация там вот с пропало причём с в середине бы в середине слов пропало это тизар так сделал Я побо средст лизации он он это может делать просто как бы можете в документацию зайти посмотреть короче он убирает да такую проблему убирает Так ну что ж токенизация мы разбиваем на токе не знаю можно взять 1955 текст наш с вами Вот каждое слово как бы оно по токенам то есть именно они будут формировать наш формировать наш Словарь наш словар вот что нам ещё нужно нам

есть именно они будут формировать наш формировать наш Словарь наш словар вот что нам ещё нужно нам нужно ещё по факту удалить Стоп слова да то есть чтобы они не были токенами и не раздува то есть найти там слова не знаю например например например о да ну навряд ли мне нужно или end и так далее Да Кость то можешь прокомментировать вот в вызове этого Господи в интеграции объекта класса в скобочках чтобы передали Это означает что да по словам отдельно это шаблон слова Вот это вот с Омега п с Омега

передали Это означает что да по словам отдельно это шаблон слова Вот это вот с Омега п с Омега - это любой символ из таблиц Аки вот а плюс Это значит что короче жадный поиск называется плюс это вот пока есть буквы хвата это на самом деле получается что вот он начал пол отсюда вот он идёт хватает Хватает хватает а пробел не является не является символом как бы буквой То есть он неет кодировку США ога В итоге получается идёт идёт идёт оборвался Всё это токен дальше идёт идёт идёт оборвался короче

В итоге получается идёт идёт идёт оборвался Всё это токен дальше идёт идёт идёт оборвался короче пробел их разрывает и вот эта вот конструкция она пробелы не включает а символы включает тем самым как бы ну да по факту можно сказать что такой шаблон формирует по словно таки не за угу А эти все темки где можно почитать вре или Татьяна хаб либо Да просто ну я когда-то узнал их хорошо но сейчас уже почти всё забыл потому что мало сталкиваешься с этим и я сейчас честно говоря Ну есть gpt который ЕС

всё забыл потому что мало сталкиваешься с этим и я сейчас честно говоря Ну есть gpt который ЕС что ты ему говоришь мне нужно сгенерировать такой-то такой-то шаблон всё плюс ещё есть всякие ну короче сейчас самое нормальное через gpt реально самое нормально сечас через gpt это просто делать если хочеш поподробнее вс-таки узнать чтобы иметь представление ТО советую бы регулярно выражение на хабре есть много статей вот там примерно как бы вот эти нюансы рассказа О наверно если в текст цели что как

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

и не знаешь что делать тут та же самая история в моём понимании что какие-то вещи начинают быть автоматизированы и не ну не требуют сверх экспертизу как-то Так ну что ж теперь удаление стоп слов смотрите Ну у меня стоп слова как бы они лежат в библиотеке лтк я подгружаются отдельно запустим с вами и чтобы вы понимали это в прямом смысле вот просто лист обычный обычный лист вы сюда можете добавить какие-то свои слова если считаете стоп словами ещё что-то вот и далее он будет проверять он будет

какие-то свои слова если считаете стоп словами ещё что-то вот и далее он будет проверять он будет проверять ели слово здесь Если есть то оно удаляется Также можно подгрузить русскоязычные слова но на самом деле здесь очень мало русскоязычных слов есть гораздо лучше словари Я вам сегодня Это в задании прописал в интернете тут что-то вообще мало слов лтк - это не русская библиотека именно русский язык вообще класс совершенно там всё под английский точится так что Ну так для фона сделано не более

вообще класс совершенно там всё под английский точится так что Ну так для фона сделано не более того не более того есть другая библиотека очень крутая для анализа русских текстов Так ну что ж собственно говоря подгружать же иду по своему уже тонированном тексту по токеном Ну собственно гово если слово Ой то Ой если нет то нет В итоге удаляем какие-то стоп слова Ну кто-то удалился точно кто-то удалился там о потому что я не вижу А вот здесь должен быть о например его нет Z также Нет ну и так

удалился там о потому что я не вижу А вот здесь должен быть о например его нет Z также Нет ну и так далее Ну вот такие вот как бы сокращения которые как бы не знает словарь Да ТМ Понятно никакую нагрузку информационную несёт Ну вот это Вечная проблема как бы Значит надо будет вручну как-то прописывать Возможно если нужна прямо сверх идеальна идеальная короче идеальная чистка данных потому что вот если кто-то пишет криво Да не грамматически ну специально там какие-то сокращения прикольны короче

если кто-то пишет криво Да не грамматически ну специально там какие-то сокращения прикольны короче в общем виде эта задача не решена и не будет ещё близко решена как бы в общем виде проблема Как это грамматическая короче грамматическая чтобы всегда вычленить и всё в Единый вид она в общем виде не решена поэтому как бы у каждого у текста свои проблемы уня вобще не виу чтото использовали Я не увидел проы сделать из Эмен индекса используем Даше можно исправить голове что-то одно сначала потом я

проы сделать из Эмен индекса используем Даше можно исправить голове что-то одно сначала потом я поменял и просто не обратил внимания на это то есть да если здесь просто прописать in то всё тоже заработает да то есть вот [музыка] так вот ну собственно говоря что всякая эта предобработка сделана Текст какой есть такой есть там если не устраивает нас то надо дорабатывать что-то Да какие проблемы Ну так мы переходим к этапу векторизации текста Ну у меня будет пример точно также лежит в библиотеке

так мы переходим к этапу векторизации текста Ну у меня будет пример точно также лежит в библиотеке библиотеке библиотеке Ну что скаже в принципе в принципе на самом деле вот то что мы с вами н писали Вы его прям можете сюда засунуть как при процессор Типа если что-то нужно удалить перед преобразованиями там выключить верхний нижний регистр пожалуйста вставить шаблон сюда указывайте пожалуйста стоп слова прямо здесь Можете указать паттерн токены можете указать Агра Можете включить то есть мы да

слова прямо здесь Можете указать паттерн токены можете указать Агра Можете включить то есть мы да это всё отдельно делали но я делаю отдельно чтобы вы поняли как части Пана текста усте на самом деле можно буквально ли не в одну строчку кода это всё делать но советую Это лучше делать отдельно делать отдельно чтобы понимать последовательность Да этапов важные параметры только я выделил наверное вот ма DF имин DF вот эти два Ну они тут всё важно как бы так или иначе Но вот эти прямо могут повлияет

ма DF имин DF вот эти два Ну они тут всё важно как бы так или иначе Но вот эти прямо могут повлияет на точность очень хорошо В чём суть смотрите Давайте начнём с ма Вы можете указать либо FL значение в диапазоне от нуля до одного это всё прописано здесь да либо in что ли я смотрите если указываем вот 05 например Это эквивалент на Следующая история то есть 50 как бы 05 это будет восприниматься как 50% а это значит что слова которые встретились чем чаще чем в 50% домен бы исключаем тот факт чтобы

50% а это значит что слова которые встретились чем чаще чем в 50% домен бы исключаем тот факт чтобы слова ну слова которые очень часто встречаются прямо они будут в каждом кластере доминировать И это ни к чему то есть эти слова не нужны часто употребляемые и наоборот можно снизу зажимать снизу как бы наоборот удалить редко встречаемые слова которые просто развивают датасет на самом деле Ну как по одному двум элементам выборки можно оценивать там вклад слова поэтому снизу можно тоже зажать и вот

одному двум элементам выборки можно оценивать там вклад слова поэтому снизу можно тоже зажать и вот у меня например стоит н F ра 5 Это значит что слова которые встретились реже чем в пяти документах будут удалены будут удалены и не будут участвовать в кодировке соответственно вы можете как бы ставить как А в процентах то есть число число от нуля до одного Также вы можете ставить в абсолюте Там пять или 10 Например я поставлю да это 10 э то есть удаляются слова которые встречаются реже чем 10

пять или 10 Например я поставлю да это 10 э то есть удаляются слова которые встречаются реже чем 10 раз кстати Обратите внимание какая разница существенная 6600 слов При таком параметре то есть 6 короче 6.63 серное пространство да А если я ставлю здесь десяточку то пространство становится 3.83 мерно ну здесь как бы можно посмотреть вот в таком виде если нам всё указать с вами благо Спаси пайла то можно посмотреть какие слова являются словами кото наше пространство ну здесь надо это поставить

то можно посмотреть какие слова являются словами кото наше пространство ну здесь надо это поставить чтобы полностью выводилось там как я не помню как это ставлять чтобы бесконечно [музыка] [музыка] мне на А ма так поставим сработает не сработало вобще съехала А ну пото что мы уже перегнали фай один раз типа мы его перели он сейчас не хочет делать это е раз переписали а я внутри его использую Да ты прав Я его использую внутри тогда нам надо запустить вот эту ячейку Ну вот в общем то есть смотри

прав Я его использую внутри тогда нам надо запустить вот эту ячейку Ну вот в общем то есть смотри так смотреть прикольно на самом деле да Видите Какие всякие там не знаю всякие паразиты попадают можно ещё-то будет почистить если это мусор вот в этом 3рм пространстве этих слов Да где каждый слово кодируется По правилу Обратите внимание Матрица очень разряженная разряженная Матрица - это Матрица содержащая много нулей Матрица содержащее много нулей Для текста это как бы ну да тут будет очень

содержащая много нулей Матрица содержащее много нулей Для текста это как бы ну да тут будет очень много нулей большинство значений будет нулевые но нам надо будет ЭТМ ви понизить размерность В общем как-то так можно там осмотреться да что к чему и как Ну что ж запустим канс на этом пространстве нашем получаем какие-то метрики обучится вот получились у нас метрики смотрите что у нас есть гомогенность у на 092 0333 11 079 вот много или мало думаете 029 033 достаточно наверно ну лучше чем случайно

у на 092 0333 11 079 вот много или мало думаете 029 033 достаточно наверно ну лучше чем случайно или нет Или хуже Если бы я каждому тексту случайно было то это же у меня сколько сколько это текстов там 3387 текстов по факту Я сейчас как бы для каждого текста для каждого элемента выборки получу кластера Вот если бы случайно ставил Причём я количество кластеров указал у Кас и что у меня это четыре То есть я на четыре кластера разбиваю данные Вот случайно бы Ставил бы ему четыре кластера что

То есть я на четыре кластера разбиваю данные Вот случайно бы Ставил бы ему четыре кластера что думаете вышло бы было бы ноль то есть гомогенность комплит на с мато ожидани было бы ноль поэтому действительно мы становимся лучше я вам вчера это вечером комментировал А может быть не Вечером может быть днём о том что как бы есть метрики у которых В случайном угадывании 0,5 А у сило СР случайное угадывание - это минус бесконечность вообще вот поэтому это тоже важно иметь дело то есть вс-таки как бы

- это минус бесконечность вообще вот поэтому это тоже важно иметь дело то есть вс-таки как бы тут ещё небольшой дриль построен в целом как бы небольшая всё-таки Как сказать улучшение есть улучшение есть то есть действительно как бы логика в кластеризации она у нас какая-то имеется я напоминаю я вот эту гомогенность компт межи индекс это какие у меня внешние или внутренние метрики это вне метрики меня поход из ме каждый из этих 3387 текстов размеченный графике либо к религии либо к атеизму либо

меня поход из ме каждый из этих 3387 текстов размеченный графике либо к религии либо к атеизму либо к космосу вот поэтому как бы есть точность Ну может быть не такая высокая но есть Давайте попробуем понизить размерность потому что ну очень больший размерность 3800 это уже много там вообще было у меня 6.000 да то когда вот так вот поставим Давайте ладно так сделаем Семено пространство запускаем вот он посчитал Ну метрики примерно такие же чуть-чуть может похуже по-моему Да похуже в общем

вот он посчитал Ну метрики примерно такие же чуть-чуть может похуже по-моему Да похуже в общем смотрите надо понижать эту размерность но PC не любит разряжены То есть если линейно понижать PC не очень любит разряженные матрицы А вот СВД в силу своей математики сингулярные разложением Да помните мы с вами Матрицу разбивали на произведении трёх Там и так далее вот как бы СВД в принципе нормально с этим справляется в эскал орн как втн СВД Ну вообще как бы вот такую штуку как бы понижение

с этим справляется в эскал орн как втн СВД Ну вообще как бы вот такую штуку как бы понижение размерности плюс ещё нормализация данных называют или латентно семантический анализ вот ну простыми словами как бы это просто понижение размерности То есть я понижаю размерность своего пространства Ну слишком дофига пространство 6600 во-первых вообще очень плохая практика запомните Когда у вас рок меньше чем столбцов это всегда плохо то есть строк должно быть много больше чем столбцов но никак не

чем столбцов это всегда плохо то есть строк должно быть много больше чем столбцов но никак не [музыка] иначе сонно говоря Ну просто понижаю сд всё по классике долю объясн дисперсии вывожу всё что мы с вами когда-то делали когда у нас была неделя математики и линей алгебры в частности сейчас м посчитает Как видите всё-таки всё считается здесь на порядок подольше чем обычно у кого-то Сегодня возможно упадут ядра компьютера [музыка] понижать размерность сразу же вот у меня доля сохранённой

возможно упадут ядра компьютера [музыка] понижать размерность сразу же вот у меня доля сохранённой дисперсии осталась 20 20% Ну вот собственно говоря после понижения видите получились а получились 100 вот этих координат Но по крайней мере нулей уже нет Да так массово нулей вообще нету как бы ну и всё каждый текст закодирован векторами 100 координат Вектор места координат много или мало Ну типа 20% инф с одной стороны может показаться что мало сохранили Да мы там стремились с вами личных данных

инф с одной стороны может показаться что мало сохранили Да мы там стремились с вами личных данных 90% Но с другой стороны Мне нужно всего лишь навсего кластеризованный а ещ там Тото Тото но вс-таки успели слава Богу фильм понравился то есть чтобы сказать что это положительный как бы отзыв по факту фильм Понравился уже содержит в себе эту информацию Правильно а ещё есть тонна как бы инфы контекст которая мне не нужна Поэтому в текстах иногда понижение размерности с такой рубкой это нормальная

которая мне не нужна Поэтому в текстах иногда понижение размерности с такой рубкой это нормальная история надо пробовать смотреть зато мы убираем Проклятие размерности в котором как бы все тексты друг на дру не кажы теде пространство сужается вот не всегда это помогает Но может помочь блин зачем я ещё раз это запустил Ну ладно Лид ждать обожаешь ожидание Да не очень если честно А ты любишь чихать ни сегодня м нет не Так ну что вот в общем мы запустили запустили собственно говоря так каминс мы А

ни сегодня м нет не Так ну что вот в общем мы запустили запустили собственно говоря так каминс мы А каминс мы с вами не запускали Да вот этот чеку мы не запустили Давайте его запустим вот ну метрики подросли подросли метрики Если вы Сравните то что было и то что стало Да это я ещё не претендую что столько самая лучшая история но тем не менее увеличение там гомогенность была 028 стала 0307 компт была компт особо не изменился ме увеличился ндекс тоже увеличился вот он кстати больше всего

компт была компт особо не изменился ме увеличился ндекс тоже увеличился вот он кстати больше всего увеличился и силуэт всё равно подрос подрос подрос вот Может быть там можно ещё посильнее срубить Да ещё пониже и метрики высту ещё есть такая особенность вот как бы внешние метрики классно мы посмотрели с помощью них насколько хорошо у нас всё раскладывается в тексте ещё есть такая вещь как на самом деле субъективная субъективная оценка хорошо это работает или плохо Даже Элементарно на самом деле

деле субъективная субъективная оценка хорошо это работает или плохо Даже Элементарно на самом деле gpt сложно ведь оценить до конца насколько хорошо Как бы вы представляете о разрабатывали её оценить хорошо она отвечает или нехорошо там есть как бы кокие оцифровки но это всё равно остаётся некой субъективность Там как бы пря полти дости очень сложно с текстом тоже самое метрики это классно но всегда можете смотреть интерпретацию кластеров и как бы глазами посмотреть вообще А что в эти кластеры

можете смотреть интерпретацию кластеров и как бы глазами посмотреть вообще А что в эти кластеры в основном попало для этого есть вот такая история котора как раз таки это то что Кост меня спрашивал в самом начале обратный откат то есть мы у преобразования берём обратный откат к из цифрового представления к тексту тем самым мым посмот в каждом Какие слова доминируют это есть как бы какая-то человеческая такая интерпретация Да если вы видите что здесь логика прослеживается какая-то но возможно

такая интерпретация Да если вы видите что здесь логика прослеживается какая-то но возможно кластеризация прошла неплохо Да кластеризация прошла неплохо Вот у нас например смотрите кластер ноль й Image graphic Program Format email Help lookin всё наводит на то что как будто бы это класс кластер кластера который содержит элементы класса компьютерной графики Да согласны вот далее там сй да Ну тут кстати почему-то не очень хорошо это видимо параметры ми неудачно настроили Раньше я помню там там

кстати почему-то не очень хорошо это видимо параметры ми неудачно настроили Раньше я помню там там очень много слов связанных с космосом здесь только с прослеживается да и всё Ну надо поиграться с параметрами Короче как будто бы вот в эту сторону идёт кластер но не совсем этоже ри религия Иисус Библия и так далее Это ВС связано с с чем с религией да Ну и скорее всего вот этот кластер с атеизм А кстати тоже СС что-то перемешалось Да вот эти два кластера перемешались как-то А это первые 10 слов

кстати тоже СС что-то перемешалось Да вот эти два кластера перемешались как-то А это первые 10 слов которые 10 слов Да Самые часто встречающиеся слова часто встречающиеся слова в кластере самый часто встречайся Ну давайте возьмём 20 может получше будет вот да всё-таки пошло хоть что-то но всё равно как-то вот не очень хорошо получись кластеризация что-то я поменял в параметрах что сдела хуже до этого было лучше это где тыр это дела Да что конкретно делаю чтобы по значимости их отсортировать вос

было лучше это где тыр это дела Да что конкретно делаю чтобы по значимости их отсортировать вос у тебя кластеры получается не по порядку Там они не обязаны быть вот эту разметку даёт комин в зависимости от того В каком порядке встретил элементы выборки Вот это порядок порядок ничего общего не име связать что ты называешь это кластером О это это это там сй был в двух местах во втором и третьем щей операции делать Ну и просто как бы значит не удалось хорошо кризова данные к сожалению Но я говорю

операции делать Ну и просто как бы значит не удалось хорошо кризова данные к сожалению Но я говорю здесь надо поиграть с параметрами здесь неплохо получается почему-то вот как бы накладываться начали на себя два кластера немного то есть слова очень похожи like people Space да М надо поиграть с параметрами может быть что-то получится Лучше то есть понизить размерность может быть чуть побольше Да не так сильно низко понижать или чучуть поменьше вот а с вот этими параметрами здесь поиграться Ну и

так сильно низко понижать или чучуть поменьше вот а с вот этими параметрами здесь поиграться Ну и что-то ещё возможно какая-то предобработка Ну щем вы наверное видели кстати сейчас лю подожди такой инструмент вам сегодня тоже надо будет сделать который называется Word Cloud его везде любят его и даже на билбордов всяких можно было встретить или что-то ещё Видели по-любому Видели достаточно частая штука вот по факту сегодня вот топ слов Вам нужно будет построить такой же World CL то есть топ

штука вот по факту сегодня вот топ слов Вам нужно будет построить такой же World CL то есть топ слов в каждом кластере В каждом кластере Если вы увидите что топ слова отличаются да то это прекрасно значит кластеры действительно как бы отдают какую-то сущность какую-то информацию и не похожи друг на друга давай Люба хотела сказать что там беда со стоп словами потому что пролезли слова там типа да ну да потому что они писаны не в стандартном варианте Но даже для английского на самом деле вы

да ну да потому что они писаны не в стандартном варианте Но даже для английского на самом деле вы можете Искать эти словари Это же просто файлы есть на гле где-то очень расширенный расширенный список стоп слов вообще для многих языков вот ну там для английского 700 плюс слов в прямом смысле я думаю что здесь как бы всякие Хотя вот нет не попадает тоже почему-то А ну или он просто не ищет не по алфавиту Нет не по алфавиту короче вот как бы на крайняк всегда можете где-то искать искать искать

алфавиту Нет не по алфавиту короче вот как бы на крайняк всегда можете где-то искать искать искать находить может что-то найдёте ещё интересное вот этих словарей люди в интернет до фиги ещ разных словарей выкидывают с разными языками Да там он русский например тоже побольше Ну хотя кто его составлял скорее всего не не из России потому что ну странная логика честно говоря стоп слов которые здесь указаны вот как-то так то есть любой язык можно найти посмотреть что в ним есть где-то слов больше

указаны вот как-то так то есть любой язык можно найти посмотреть что в ним есть где-то слов больше где-то меньше Так а что здесь соединение в пайплайн А ну просто всё в единый пайплайн обернул и посмотрел точность То есть как бы ничего интересного и вот такой итоговый график просто построим кодируем точность и время затрачено так точнее всего оказался вот на шра смотрите есть есть это есть вектора Но кодирует их так что в обратную сторону вы не откатить То есть к сожалению топ слов и облако

Но кодирует их так что в обратную сторону вы не откатить То есть к сожалению топ слов и облако слов вы построить не сможете но однако если типа нужна точность как бы вот видите он в среднем оказался чуть поточнее чуть поточнее у вас задание сегодня это прописано там кое-что нужно будет самостоятельно прочесть и разобраться Ну в общем какие-то вот такие результаты То есть у нас здесь с Вами каминс просто с Ну то есть камин с понижением ФФ здесь там камин с понижением ФФ что-то у меня какая-то

просто с Ну то есть камин с понижением ФФ здесь там камин с понижением ФФ что-то у меня какая-то описка Короче скорее всего не а ой точнее и здесь там с понижением размерности вектора метрики чуть-чуть подросли имин с понижением размерности ш вектора метрики ещё чуть-чуть подросли Но на самом деле са глав точки роста Опя же не с точки зрения алгоритма с точки зрения обработки данных чем лучше данные тем вот на самом деле стоит ожидать всё больше и больше и лучше точность и Да вот понижение

данные тем вот на самом деле стоит ожидать всё больше и больше и лучше точность и Да вот понижение размерности Как начинает экономить время как вы видите существенном Да потому что строить кластеризации в 6.000 мерном пространстве мало того что ты сталкиваешься с проклятием размерности Да ещё и долго то есть лучше понизить размерность А потом а а потом уже непосредственно лучше понизить размерность а потом уже непосредственно запускать кластеризации вот а задание у вас сегодня у вас сегодня

а потом уже непосредственно запускать кластеризации вот а задание у вас сегодня у вас сегодня задание будет нужно кризова T каналы там разметка есть конечно но бы нам нужна будет ция потом Можете посчитать там различные метрики нужен па очень простой удаление плов климатизация векторизация понижение размерности кластеризации всё по пунктам здесь расписано для составления сделать и самый как бы такой момент у вас будет язык русский То есть у вас Ну текстовые сообщения будут на русском языке мы

момент у вас будет язык русский То есть у вас Ну текстовые сообщения будут на русском языке мы смотрели демо на английском вот для английского нормально использовать библиотеку лтк лтк вот для анализа русскоязычных историй есть такая библиотека по Морфи Но раньше всегда было 2 сейчас стало 3 то есть 3 здесь приме есть как или матировать и всё остальное с помощью неё делать очень хорошая сильная библиотека То есть Вам нужно будет самостоятельно как бы её установить импортировать и с помощью неё

То есть Вам нужно будет самостоятельно как бы её установить импортировать и с помощью неё а проделать проделать климатизация там да или то что вам нужно как-то так Какие вопросы в не в ней есть стоп слова или нужно отдельно их замутить стоп слова лучше отдельно то есть Угу Можно их отдельно взять вот здесь ссылочку я скинул на более расширенный словарь стоп слов который я нашёл чувак какой-то выложил здесь здесь шире чем в лтк Поэтому просто вот этот шник короче содержимое этого TT у вас должно

здесь здесь шире чем в лтк Поэтому просто вот этот шник короче содержимое этого TT у вас должно магическим образом оказаться в питон коде в каком-нибудь листе луба У меня вопрос по итогу получается Если на в тексте используется много сокращений там сленговые слова и так далее типа полностью Чтобы очистить или как-то обработать это всё типа вручную надо сидеть смотреть типа там делать нету чего-то универсального Типа такого Ну прямо полностью универсального Нет если бы это всё было бы едино

универсального Типа такого Ну прямо полностью универсального Нет если бы это всё было бы едино универсально сейчас по-другому совершенно NLP рынок выглядел он был бы ещё более прогрессивным мне даже Сложно представить какого масштаба А так пока всё равно остаётся проблема с подготовкой текстов [музыка] понял Так ну в принципе всё Наверно на это можно заканчивать ЕС вопро никаких задание очень интересное пощупай текст и да смотрите здесь вот как бы эту функцию будете прописывать Я здесь пропи у

пощупай текст и да смотрите здесь вот как бы эту функцию будете прописывать Я здесь пропи у вас там проблема в тексте Бут наме там есть смайлики вот Не пытайтесь как бы заморочиться просто Напишите GT пропиши мнение м нуж здесь будут как бы ну по факту смайлики вам не нужны их кодировать и потом в кластеризации использовать вот их надо удалять для этого как была должен стоять при процессор в данном случае это функция туда очень легко гуглить Ну очень легко gpt gpt практически сразу объяснит что

случае это функция туда очень легко гуглить Ну очень легко gpt gpt практически сразу объяснит что есть стандартные шаблоны Да которые находят именно Смайли передо обработку можете через gpt ну это сложно Это сложнее Хотя как бы блин gpt Это умеет делать gpt это умеют делать но тут у вас У вас как бы кластеризация у Вас внешняя разметка относительно которой надо будет проверить качество она не связана с настроением она связана с тематикой То есть у вас там будет мода наука маркетинг учёба

не связана с настроением она связана с тематикой То есть у вас там будет мода наука маркетинг учёба здоровье Поэтому в каком настроении там пребываем да это сообщение нам неважно да Настя возможно глупый вопрос возможно нет короче как бы результат вид процессинг у нас это понятно А как сказать как мыслить О результате когда мы кластеру то мы короче человеческим бизнес языком в ЧМ результат наше Я не знаю что э дельно кризова каналы ойна кризова сообщения исходя из их настроений позитивно

наше Я не знаю что э дельно кризова каналы ойна кризова сообщения исходя из их настроений позитивно повлияет позитивно на рынок негативно негативно и так далее вот тематика каналов Ну значит для чего-то может быть нужна тематика каналов То есть это как правило разделение дето Гру эм рум Прист а сейчас у нас сегодня Ну мы обсуждали выше и будем делать кластеры это кластеры которые Как сказать это кластеры чего сори если Ну у вас всё прописано Вы посмотрите В смысле это кластеры фраз или кластеры

чего сори если Ну у вас всё прописано Вы посмотрите В смысле это кластеры фраз или кластеры слов если это кластеры сло ла предложений Ну кластеры текстов ну как как у нас было в демо файле один элемент выборки одно предложение вот тут тоже самое Точно также будет и да интеро опять же это поэтому интерпретация уже там глазами какая-то будет да то есть ну вы можете метрики посчитать плюс ещё вывести облако слов будет Нели здесь Кстати если хорошо Здесь всё сделать получится хорошие кластер если

облако слов будет Нели здесь Кстати если хорошо Здесь всё сделать получится хорошие кластер если плохо здесь всё сделать будут плохие кластеры Так что хорошая предобработка и Вуаля прий если мы хом узна нам нужно как-то как сказать адаптировать модель если задача финальная именно сентимент узнать или или как бы всё ну короче просто тому что Конечный результат может быть сентимент а может быть не сентимент может быть что-то другое Да и Ну это как бы относительно Да может быть то есть это

не сентимент может быть что-то другое Да и Ну это как бы относительно Да может быть то есть это интерпретация относительно слов И почёт метрик относительно внешней разметки Если вдруг тебе нужно в контексте чего-то и всё Угу Окей да да девиз девиз работа с текстом всегда такой нормально предо обработает нормально будет иначе беда всё очень много времени ложится именно на эту сторону вот я прошу прощения у меня просто задания нет потому что у меня старая версия я сейчас скачаю себе там что в

прощения у меня просто задания нет потому что у меня старая версия я сейчас скачаю себе там что в итоге тоже вот мы просто песенки делали и потом искали тематики здесь такая же задача да Да да да Угу [музыка] угу так Ну всё тогда давайте заканчивать приступайте к практике Если будут вопросы пишите вечером также названи Всё Всем пока

так привет всем кого у нас нет Серёжа Ну что А у нас сегодня с вами последний блок Новой темы это временные ряды тема на самом деле Ну сказать глобально достаточно сложная она Как по мне она очень сложная то есть Но объективно предсказать временные ряды не всегда просто а иногда практически невозможно очень неустойчивая конструкции очень много факторов которые на них влияют Всё это делает предсказания для временных Лядов очень опасными И часто вообще не как бы вообще мимо грубо говоря да то есть

для временных Лядов очень опасными И часто вообще не как бы вообще мимо грубо говоря да то есть там очень много дополнительных факторов нужно вот но тем не менее инструменты анализа есть есть модели которые можно построить чтобы первично что-то оценить Вот и мы с вами именно их и коснётся на работе с временными рядами никогда Да может быть они у вас будут как контекст то есть немножко всё-таки временных рядов будет кто-то может вообще наоборот будет с временными рядами много работать у кого это

рядов будет кто-то может вообще наоборот будет с временными рядами много работать у кого это там будет основной Хлеб как-то Так как-то так Но как правило таких меньшинство абсолютно Итак сегодня области применения метода анализа временных рядов базовые методы учёт различных компонентов временных рядах и библиотеки для анализа временных рядов Ну про временные ряды первое что нужно знать это как правило 2D график 2D график есть конечно многомерные временные ряды но одномерные чаще возникают 2D

правило 2D график 2D график есть конечно многомерные временные ряды но одномерные чаще возникают 2D график в ЧМ его особенность особенность заключается в следующем что у нас есть ось Y как правило ваше целевое значение то что вы измеряется как регрессионную метку не знаю цена на акции или сколько у вас человек в метро зайдёт завтра или а предсказывать остатки на складах или что-то ещё да то есть то что предсказывает то что анализируйте ну и вторая шкала понятное дело у нас временной ряд А

есть то что предсказывает то что анализируйте ну и вторая шкала понятное дело у нас временной ряд А значит должно присутствовать время Вот время время самое главное должны знать что время должно быть через какую-то одну одинаковую отчетную единицу времени тогда это будет считаться временным рядом если вот эта шкала разная то это случайный процесс это ещё более сложная штука То есть например если мы анализируем как бы ежемесячные продажи чего-то значит у нас один один элемент выборки то есть

мы анализируем как бы ежемесячные продажи чего-то значит у нас один один элемент выборки то есть один одна строка в датафрейме и также и на предсказани это будет ежемесячный период Да он может быть у вас еженедельный он у вас может быть ежедневный он может быть ежегодный он может быть ежеквартальный и так далее вот ну часто конечно это еженедельный ежедневный ежемесячный то есть вот в этом районе как-то Так как-то так ну сфера применения Я думаю и так прекрасно Понятно финансовые особен

районе как-то Так как-то так ну сфера применения Я думаю и так прекрасно Понятно финансовые особен финансовая область мониторинг состояния оборудования климатические исследования естественно научная области много бизнесов составля Дале естественным образом возникают в областях где измерение носит интервальный характер самое главное во временных рядах две сущности это предсказание то есть прогнозирование будущих периодов значения временного ряда и определение природы временного ряда то есть

будущих периодов значения временного ряда и определение природы временного ряда то есть определение природы подразумевается что на текущих данных посмотреть что за у нас временной РД Может быть там какие-то паттерны есть повторения или чтото такое соно Кая которая может быть нам полез вот так Ну что ж а теперь поехали поехали поехали поехали с вами Вот первая первый инструмент который мы с вами проговори это инструмент который называется скользящее средне слышали когда-нибудь про него

с вами проговори это инструмент который называется скользящее средне слышали когда-нибудь про него достаточно известный Вот но Для всех всё равно проговори скользящее среднее что оно под собой подразумевает Представь что у на ежедневные какие-то предсказания и вот вот у нас сегодня с вами 17 июля то есть Так Ну запишу тогда вот так то есть вот это пусть будет 17 июля Вот это будет Вот это будет 16 июля Вот это будет 15 июля 14 июля и 13 июля у меня в данном случае один элемент выборки - это

16 июля Вот это будет 15 июля 14 июля и 13 июля у меня в данном случае один элемент выборки - это один день и соответственно как позиционируется скользящее среднее или или его ещё иногда называют скользящим окном то есть у меня будут как бы какие-то значения в прошлом Ну давайте мы предположим не знаю предсказываем что предсказываем температуру условно може это но наблюдений прошлого но все их усреднять как бы нет смысла потому что какие-то просто устаревают и неактуальны поэтому мы можем

их усреднять как бы нет смысла потому что какие-то просто устаревают и неактуальны поэтому мы можем тянуть только пять прошлых значений или три прошлых значений или два или 10 в зависимости от того как Вам удобно Это называ скользящее среднее размером такого-то или скользящее окно в данном случае у меня вот это окно имеет размер п это могу это воспользоваться Как предсказание то есть мы можем с вами попробовать предсказать на восемнадцатое число тогда у меня скользящее средне в данном случае

вами попробовать предсказать на восемнадцатое число тогда у меня скользящее средне в данном случае будет усреднение по этим пяти значениям и делённое на п получилось Получилось 1234 а в реальности оказалось 1392 К сожалению промазал Ну куда же без этого вот тогда если бы был Если бы был Седьмой день Если бы был Седьмой день то мы бы как уже предсказывали давайте тот кто не сталкивался со скользящим окном луба встречал скользящее окно нет как бы предсказывали Ага со второго по шестой средний

окном луба встречал скользящее окно нет как бы предсказывали Ага со второго по шестой средний брали Абсолютно верно со второго по шестой и соответственно получили бы какое-то здесь значение и вот так бы это окно поэтому оно и называется скользящее Кати во времени скользит скользит скользит скользит я ещё вот вот не так давно относительно увидел например самый банальный пример что их очень много на самом деле скользящий вокруг заходишь в приложение Такси Яндексом и там у нас у пассажиров тоже

на самом деле скользящий вокруг заходишь в приложение Такси Яндексом и там у нас у пассажиров тоже есть рейтинг у пассажиров тоже есть рейтинг я трема дайка про Интересно как още формируется написано прям там что мы считаем скользящее среднее По последним сорока поездкам То есть в принципе очень логично Да может не знаю Вы уже 7 лет на такси катаетесь 7 лет назад вы вообще другим человеком были хулигани Или там или что-то ещё у вас средний балл был один сейчас совершенно другой то есть именно

хулигани Или там или что-то ещё у вас средний балл был один сейчас совершенно другой то есть именно на последних сорока поездках калибруется Да чтобы Лучше понимать какой вы сейчас в моменте вот и это как бы двигается двигается двигается вот тут в принципе тоже самое ну это как бы полностью тоже самое Так ну что какие-то здесь вопросы то есть смо У меня вопрос есть у меня есть вопрос На сколько точек вперёд мы можем На сколько точек вперёд мы можем предсказать на одну пять так услышал варианты

вперёд мы можем На сколько точек вперёд мы можем предсказать на одну пять так услышал варианты на одну на пять на одну на одну так ещ вариант Люба ты что думаешь Да я хотела кружку посмотреть но не успела сечас а есть ещё вариант насколько угодно если мы каждый раз предсказываем появляется новое значение просто сдвигаем окошко дальше и считаем уже с ним зави что-то более предсказываем что-то менее Угу Да нет На самом деле правильный ответ прозвучал мы можем предсказать на одну точку только нет

Угу Да нет На самом деле правильный ответ прозвучал мы можем предсказать на одну точку только нет Как бы вы вот смотрите мы предсказали с вами представьте вот сегодня 17 июля вот этого числа ещё нету 1392 18 июля ещё не наступило правильно но у нас как бы есть вот это предсказание то есть мы можем окно сдвинуть и предсказать на предсказанное Но как правило эти игры очень плохо заканчиваются предсказывают на предсказанное дело очень неблагодарное потому что ну там даже на уровне вероятности это

на предсказанное дело очень неблагодарное потому что ну там даже на уровне вероятности это легко доказывается что если как бы Вы ошиблись на предсказани на 18 июля ТО вероятность что у вас вы ошибётесь ещё сильней на 19 июля она увеличивается То есть у вас промахи пойдут прямо жёстко жёстко Поэтому да как бы лучше на одну точку но этого иногда вполне достаточно типа предсказание продаж на день чего-то да Или предсказание вообще Представляете у вас один элемент выборки - это 1 месяц Да ну и

чего-то да Или предсказание вообще Представляете у вас один элемент выборки - это 1 месяц Да ну и ладно предсказали на оди месяц целый месяц кайфуем как бы исходя из этого запланировали там закупки или всё что угодно любой бизнес-процесс который выстраивается вокруг этого анализа а если уж ежегодное то я вообще молчу поэтому как бы один элемент выборки - это О'кей нормально но скользящий средний чаще конечно используют не как предсказатель ную силу а скорее усреднить На текущий день да На

чаще конечно используют не как предсказатель ную силу а скорее усреднить На текущий день да На текущий момент но предсказывать тоже Ей можно как бы когда мы в такси садимся Конечно нам рейтинг Яндекс ставит не чтобы предсказать нашу следующую поездку Да когда у нас там стоит 493 вобще не будет невозможно получить но тем не менее калибруют на данный момент Так что можно и как предсказывать и как просто смотреть на текущий день Какое среднее у нас накопилось так кто-то поднял ру было поему Саша

просто смотреть на текущий день Какое среднее у нас накопилось так кто-то поднял ру было поему Саша или всё уже да да я поднимал руку хотел задать вопрос того что по-моему временной ряд был на одном из выпускном проектов там с прози они предсказывают только на один день впер вот что дальше там проблематично это делать Да это вот про это да что на одну штучку да Ну они конечно другие модели использовали у них там больше бизнес проблемы были но тематика та же самая что предсказывать на

использовали у них там больше бизнес проблемы были но тематика та же самая что предсказывать на нестабильных данных он очень глубоко вперёд очень сложно так соноя вот как бы у нас - это размер окна если у вас стоит 5 то вы прошлых Ну да ещ обозначение кому-то может быть оно как бы незнакомы будет во временных рядах принято обозначать Y это Как ваша целевая целевое значение и момент времени Т вот момент времени Т это вот какой-то определённый фиксированный момент времени Это может

времени Т вот момент времени Т это вот какой-то определённый фиксированный момент времени Это может подразумеваться сегодняшний день тогда Т ми1 будет Понятное дело что вчерашний этото в где мы вот как бы двигаемся на чётное значение влево и вправо Поэтому если вы ка берёте равное пяти то у нас здесь будет Т -1 потом т -2 потом т -3 т -4 т -5 и всё это считается среднем То есть все получают одинаковый вес все вот эти пять значений получают одинаковый вес и как бы 1/5 и формируют формируют нам с

вес все вот эти пять значений получают одинаковый вес и как бы 1/5 и формируют формируют нам с вами предсказание Но Но помимо скользящего среднего есть ещ взвешен Скользящая средняя логика очень простая А как бы ну может быть я хочу дням которые вот были прямо вообще вчера вчера дать больше вес да типа они ближе ко мне и на них бы получше стоило посмотреть это всё-таки уже уходит в лету потихоньку и как бы ну менее важно может быть Либо наоборот какие-то сезонные истории или что-то ещё О чём-то

и как бы ну менее важно может быть Либо наоборот какие-то сезонные истории или что-то ещё О чём-то мы поговорим с вами о ЧМ мы с вами поговорим попозже но в итоге как бы Вполне себе хочу раздавать какие-то веса поэтому можно посчитать не просто скользящее среднее а взвешенное скользящее среднее Да и кстати вот не проговорил я вот этот называют Ma или sma в любою любую биржу Откройте графики графики каких-нибудь акций вам предложат построить вот эти инструменты это Moving average скользящий

каких-нибудь акций вам предложат построить вот эти инструменты это Moving average скользящий средне или Ну ещё sma называют Вот он у меня здесь написан sm5 это Simple Moving average Вот и туда указывается размер как бы достаточно стандартный инструмент есть ещё вот вот взвешен средний его вы найдёте как wied Moving тоже такой вот инструмент где мы просто Единственное что делаем логика Ну раздаю веса всё раздаю веса и получается вот такая формула как ожидани похоже какого-то прос был да да Костя

всё раздаю веса и получается вот такая формула как ожидани похоже какого-то прос был да да Костя как висо распределяются Ну допустим на примере тех же пяти наблюдений Как ты хочешь ты можешь дать сюда 0,5 предположим сюда 01 А это сколько 0,6 оставшиеся дать по 0,2 можешь там ещё иначе как-то сделать Ну короче дела твоё ка ти веса распределять Ну это можно тюнить можно подбирать оптимально Угу А так в целом это как полная свобода разрисовки тя просто во-первых его вообще даже нет готового

А так в целом это как полная свобода разрисовки тя просто во-первых его вообще даже нет готового методом взвешенно скользящий средний мы будем свой прописывать и туда как бы можешь подать любые веса любые Так ну что ж теперь как бы это самые такие тривиальные были инструменты Да они по факту В себе никакого машинного обучения не содержат ну реально не содержат можно сказать что мы здесь веса Аля подбираем но мы их никак не по Градиент спуску не настраиваем Максимум что можем сделать просто

Аля подбираем но мы их никак не по Градиент спуску не настраиваем Максимум что можем сделать просто тупой перебор вот здесь соответственно тоже никакого как бы машинного обучения Нет сейчас нам нужен будет кое-какой контекст чтобы проговорить как это делаю с помощью модели машинного обучения Вот и Для этого нам нужно понять Вообще А из чего состоит временной ряд Ну как бы полной гарантии всего этого нет но принято считать принято считать что временной ряд Да его значение во времени формируется

нет но принято считать принято считать что временной ряд Да его значение во времени формируется из компоненты тренда Вот она у меня точнее компонента тренда везде просто разными буквами обозначают а а я понял исправил Вот это если что сезонность в общем компонента сезонности компонента сезонности и компонента остатков или ошибок или вот как бы вот то что формирует вот эти прыжки это иногда называют уровень илил то что очень сложно так вот как бы мы с Вами Мы с вами будем пытаться настроить

уровень илил то что очень сложно так вот как бы мы с Вами Мы с вами будем пытаться настроить временной ряд так чтобы контролировать Каждую из этих компонентов на самом деле компонент ещё есть больше в общем виде вообще есть компонента праздников понятно что например ну если мы анализируем что-то что как-то связано с 8 марта с праздником то 8 марта Ну продажи будут аномально большие или аномально маленькие щем они выбью из общего распределения вот а далее ещё есть такая компонента цикличность

маленькие щем они выбью из общего распределения вот а далее ещё есть такая компонента цикличность называется но это уже более экономические более сложные термины вот эта Троица как бы базовая вокруг неё можно много что аппроксимировать да Люба Не знаю я туплю или нет Я не вижу презентацию Ну скорее всего все все остальные видят я думаю да да Всё всё видно ви Чи на на вид спикера то там справа наверху есть какая-то кнопка типа показать материалы что-то такое ну короче Зум в Зуме есть кнопка Ну

есть какая-то кнопка типа показать материалы что-то такое ну короче Зум в Зуме есть кнопка Ну не кнопка а такой текстовый элемент показать презентационный материал Я переключалась раньше сейчас не соображу Ну ладно не обращайте внимания разберусь так извини Антон я не пропустил а не очень понял вот остатки ошибки это вот то что выбросы по дням да какие-то Или это сезонность не остатки ошибки это как бы считается что это кстати в обычном классическом машинном обучении считается что в данных есть

бы считается что это кстати в обычном классическом машинном обучении считается что в данных есть некий шум А типа просто вот какая-то дадада но этот шум - это как правило то что как бы недосказано или то что как бы ну нам неизвестно Почему эти отклонения произошли мы их не можем объяснить Как бы у вас в машинном обучени даже помните когда мы регрессию строили там как бы гаусо шум типа строили Да Дада так и называют Да белый гаусо ский шум вот это вот именно о есть Ага всё понял Да вот на

Да Дада так и называют Да белый гаусо ский шум вот это вот именно о есть Ага всё понял Да вот на примере смотрите вот есть временной ряд вот временной ряд и как попытка его разложить на эти компоненты Ну все видят наверное Давайте начнём с сезонности сезонная компонента Что такое вообще сезонность сезонность - это Следующая история если например мы с вами продаём не знаю оборудование для зимних видов спорта мы с вами понимаем что с конца осени спрос будет увеличиваться правильно это будет

видов спорта мы с вами понимаем что с конца осени спрос будет увеличиваться правильно это будет охотник покупать тогда как весной он будет падать и летом будет там затишно не то чтобы зати но его будет меньше или зимние куртки или наоборот Летом да летом я не знаю продаю я ягоды предположим есть у меня есть оди [музыка] собираю ягоды и продаю Ну когда не знаю клубнику будет хорошо брать наверно в июне когда она вырастет Да когда вишню будут хорошо брать наверное в августе когда она вырастет То

июне когда она вырастет Да когда вишню будут хорошо брать наверное в августе когда она вырастет То есть это сезонные штуки сезонность Это значит от периода к периоду как бы скачет продажа Ну или скача значени временного ряда периоды бывают разные например в случае с тем что я привёл какая у нас с вами сезонность какого периода Да так и называют ежегодная сезонность да Или годовая сезонность потому что июнь к июн бьётся Да там не знаю сентябрь к сентябрю сезонность может быть не знаю например

что июнь к июн бьётся Да там не знаю сентябрь к сентябрю сезонность может быть не знаю например недельная можете привести недельную сезонность на выходных повышается то что люди хотят отдохнуть Да так ещ ресторан почне ресторано Она варьируется не только понедельник ещё по часам обеда И проче да там ещё какая-то сезонность может быть там не знаю трафик в метро Да тоже наверно недельный имеет по выходным тишина по будним больше людей как бы то что в субботу воскресенье меньше людей в метро как

выходным тишина по будним больше людей как бы то что в субботу воскресенье меньше людей в метро как раз таки обусловливается сем причи следственно связи именно сезонные компоненты решает За эту за эту тему не тренд не остатки а именно сезон вот у нас тоже как бы если на Наш график теперь возвращаемся взглянем есть вот эти какие-то всплески Да периодические Ну то есть они как бы вот Идут Идут Да конечно всё время есть какая-то разница что-то чуть выше чуть ниже но в целом они как бы как будто

конечно всё время есть какая-то разница что-то чуть выше чуть ниже но в целом они как бы как будто повторяются так вот мы отдельно выделяем сезонную компоненту сезонную компоненту Вот она у нас получилась как бы видите одна и та же одна и та же то есть выделили сезон далее мы выделяем компоненту тренда тренд как бы у нас такой сначала какой-то такой был потом резкий подъём Ну может быть что-то есть но не сильно Вот какой-то такой тренд получился это за вас делают алгоритмы Но об этом мы будем

но не сильно Вот какой-то такой тренд получился это за вас делают алгоритмы Но об этом мы будем говорить позже То есть как бы эта декомпозиция её сделать возможно Ну и грубо говоря если сезон п трен сложить то всё время будут какие-то такие колебания колебания в идеале Всё ровно не будет И вот эту вот недоработка называют остатки у этих остатков как правило матожидания ноль матожидание ноль а стандартное отклонение Сигма квадрат Ну в зависимости от того в зависимости от данных короче вот вот

отклонение Сигма квадрат Ну в зависимости от того в зависимости от данных короче вот вот такая вот история то есть видите смотрите получается что у нас в среднем эти остатки практически нулевые а Ну небольшая дисперсия есть вот если вот так удаётся экстраполировать всё ой экстраполировать разделить на эти составляющие то в целом как бы у нас и предсказательная сила у временного ряда будет неплохая особенно хорошо когда вот эти остатки имеют маленькую дисперсию то есть смотрите у нас временной

особенно хорошо когда вот эти остатки имеют маленькую дисперсию то есть смотрите у нас временной ряд там измеряется в шкале Короче у нас самый большой большой имеет тренд тренд там 600 в среднем Да сезонный вклад он не такой большой относительно тренда вот а остатки вообще очень маленькие Это хорошо иногда бывает наоборот когда остатки как бы в среднем ноль но иногда не очень большие это к сожалению для нас является тем что мы будем очень сильно промахиваться Да Кость А компонент тренда по идее

для нас является тем что мы будем очень сильно промахиваться Да Кость А компонент тренда по идее же как раз и считается с помощью ну как бы он просто усреднять никак не разделяет по [музыка] средня вообще чтобы вот высчитать вот этот график в идеале как бы надо смотреть разницу двух точек сегодняшней и прош сегодняшний прошлый ЕС так постоянно делать то можно высовывать некий тренд но там есть другая проблема что надо как бы как-то Вычитать сезонную и как-то вычитать окно начинает прослеживать

проблема что надо как бы как-то Вычитать сезонную и как-то вычитать окно начинает прослеживать тренд но как бы это скорее следствие То есть она не является первой целью Да чтобы вывести тренд А как следствие уже там при определённых настройках может показать этот тренд вот как-то так так что нам ещё нужно Мы потихоньку сейчас с вами будем обрастать термина Да чтобы подступиться к модели нам надо е с вами проговорить такое понятие как стационарность временного ряда что Тае смотрите временной ряд

с вами проговорить такое понятие как стационарность временного ряда что Тае смотрите временной ряд временной ряд у него может нарушаться не стационарность по по трём причинам стационарность точнее Первое - это когда временной ряд идёт вверх то есть у него как бы присутствует какая-то трендовая компонента это называется изменение матожидания во времени или изменение среднего времени То есть он не стационарен начинает прыгать второй вариант это изменение дисперсии во времени это значит что у нас

стационарен начинает прыгать второй вариант это изменение дисперсии во времени это значит что у нас как где-то шире где-то уже где-то шире где-то уже То есть как бы статистическая характеристика новой точки новой случайной величины дисперсия меняется то есть здесь меняется мат ожидания здесь меняется дисперсии Ну ещё есть третий вариант он Более сложный с точки зрения объяснения математики это изменение ковариационной функции во времени но простыми словами это как бы на самом деле достаточно

изменение ковариационной функции во времени но простыми словами это как бы на самом деле достаточно част случай когда возникает вот эта игра и гармони гармошка так где-то шире где-то уже вот эти три вещи а разрушают стационарность слева приведён вариант стационарного ряда справа нет для чего это нужно некоторые алгоритмы строятся исходя из статистических данных когда статистические данные нестабильного времени то и прогноз будет нестабилен Поэтому часто хотелось бы чтобы мы делали именно

времени то и прогноз будет нестабилен Поэтому часто хотелось бы чтобы мы делали именно стационарный временной ряд стационарный временной ряд соответственно на нём предсказывали И там возвращались обратно потому что конечно в жизни почти всё нестационарное но как я вам сказал что есть способ как из нестационарного провести в стационарный вот сейчас мы это дальше обсудим Вот то есть стационарный временной ряд который как бы ну статистически достаточно предсказуем и устойчив вот вот хорошая фраза

ряд который как бы ну статистически достаточно предсказуем и устойчив вот вот хорошая фраза он устойчив во времени а не стационар но он как бы неустойчив есть много факторов которые Ну меняют его основные характеристики для любо случайной величины двумя основными характеристиками являлась средняя и дисперсия вот это то что мы с вами обсуждали на неделе там статистики И это всегда как бы касается анализа стройте в модели если у вас по какому-то признаку меняется средняя дисперсия значит у вас

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

времени это вот первый пример Да у нас отсутствие изменений дисперсии времени это второй пример и отсутствие изменений ционной функции времени это третий [музыка] пример нестационарный временной РД нен для иследования большинство моделей строят прогноз по статистическим данным если они нестабильны то и прогноз будет нестабильным Мы это проговорили бороться с нестационарности можно для проверки на стационарность используется тест дикий флера так вот смотрите нулевая гипотеза временной ряд не

на стационарность используется тест дикий флера так вот смотрите нулевая гипотеза временной ряд не является стационарным если у вас pv получился 2% Давайте с Олей вспомним если пи велю 2% что можно сказать будет про временный рат я что-то совсем забыла про казали То есть как бы это к пробити да получается ну можно даже не не интерпретировать Вот смотри нулевая гипотеза - это временной ряд не является стационарным у тебя Ты запустила получился пиво а всё я вспомнила у нас были да бы была была

стационарным у тебя Ты запустила получился пиво а всё я вспомнила у нас были да бы была была нулевую гипотеза тоже вспомнила что нам её надо э ну как бы наша гипотеза альтернативная H1 Да вот это и для того чтобы её подтвердить нам надо опровергнуть нулевую гипотезу да вспомнила ты откуда это первая неделя Да мы учили временной ряд не является стационарным Ну просто вот пив у тебя 2% какую гипотезу примешь h0 H1 а там до какого-то до какого-то значения было на уровне 5% предположим а ну тогда

примешь h0 H1 а там до какого-то до какого-то значения было на уровне 5% предположим а ну тогда H1 H1 Ага так все согласны кто-то не согласен может не соглас наоборот h0 h0 Так мы же улетели Да я тоже за альтернативную H1 правильно H1 правильно То есть как бы я уж просто просил все согласны убедиться что никто не думает в ложную сторону всё-таки кто-то думал вот вспоминаете да именно H1 принимаем то есть маленький pv - это pv - это вероятность ошибиться при принятии H1 если она маленькая то мы

то есть маленький pv - это pv - это вероятность ошибиться при принятии H1 если она маленькая то мы конечно H1 принимаем нам вообще H1 как бы больше импонирует как гипотез ну вовнутрь туда проваливаться мы не будем какая там статистика и так далее просто вот есть тест дики фуллера можно Давайте чуть-чуть с вами наверное Ну чуть-чуть просто можно это в коде реализовать вот я сейчас генерируют так ещ нужен быт всё ну сделаем Давайте компоненты разные вот сделаем например компоненту Так у [музыка]

нужен быт всё ну сделаем Давайте компоненты разные вот сделаем например компоненту Так у [музыка] меня 100 Эмен выборки сделаем так сть т Да какие-то колебания мат ожидани ноль Ну стандартное отклонение пусть будет 10 и мой временной ряд будет пока что из одной компоненты Если мы с вами построим временной ряд то он не построился в чём прикол Я думал что А всё вот Вот такая история вот как бы чем не временной ряд Вполне себе можно построить чуть больше вот временной ряд Как вы думаете

бы чем не временной ряд Вполне себе можно построить чуть больше вот временной ряд Как вы думаете стационарный это временной ряд или нет дано Да стационар же вроде норма норма взял да исходя Как бы как бы тут глаза не обманывали это стационарный временной ряд из нормального распределения Вот кстати одна точка за третью сигму выпрыгнула Да у меня Сигма равна 10 значит вот одна точка Ну в принципе на 100 точек выпрыгнула одна за третью сигму вылететь вероятность около проценты как будто бы похоже

100 точек выпрыгнула одна за третью сигму вылететь вероятность около проценты как будто бы похоже на правду так что это визуально кажется на самом деле и дисперсия и стандартное отклонение может быть а в порядке так ну что ж Для этого нам нужна библиотека Stat moduls ST moduls то fer называется AD fer вот мы его открываем Давайте его импортируем [музыка] импортируем у меня уже установлено библиотеку у вас она может быть не установлена А может она Кстати по умолчанию идёт я не помню вот этого

у вас она может быть не установлена А может она Кстати по умолчанию идёт я не помню вот этого честно говоря так Соответственно что требуется ну здесь всё описано Что такое это бла-бла-бла дики флера описывается Что является там нулевой гипотезой что первый нам на самом деле нужно просто подать X и посмотреть что вот pv второй второй возвращается поэтому я ВФ запускаю свой Т это Time Series аббревиатура получился Вот такой вот у нас с вами То есть это 10 в ми1 это фактически ноль То есть как бы

получился Вот такой вот у нас с вами То есть это 10 в ми1 это фактически ноль То есть как бы это почти со стопроцентной вероятностью у нас а стационарный временной ряд потому что напоминаю у нас гипотеза h0 - это нестационарный значит H1 - это стационарный Ну давайте добавим что-нибудь в него добавим Например трендовую компоненту я возьму трендовую компоненту А трендовую компоненту так и мне надо ещё всё-таки сгенерировать временные значения Пусть они у меня будут Ну от нуля не мне на типа

надо ещё всё-таки сгенерировать временные значения Пусть они у меня будут Ну от нуля не мне на типа сгенерировать от нуля до или от одного от одно до n П 1 вот так от о до П 1 всё сгенерирует точек от о до 100 по фак от Давайте какой-нибудь наложи два звёздочка т и вот сюда сделаем level плюс тренд глянем что тут даже можно какую-то константу добавить вот так слишком сильно добавил трендовую составляющую Ну давайте добавим не знаю 1Д и то сильно 1,1 масштаб разный 1.05 Ну вот какой-то даже тут

Ну давайте добавим не знаю 1Д и то сильно 1,1 масштаб разный 1.05 Ну вот какой-то даже тут всё понятно даже тут всё понятно 1.2 врод немного добавляю А всё равно чувствуется Вот такая вот история Вот такая история Ну временной ряд уже хочется сказать что он у нас с вами какой стационарный или нет Да что у нас с вами нестационарный и действительно мы запускаем и получаем 097 Так что есть которые показывают стационарность нестационарности временного ряда Ну тут даже значение статистики как бы на

стационарность нестационарности временного ряда Ну тут даже значение статистики как бы на всякие на выбросы показано короче можно смотреть тут много чего интересного есть Вот как можно бороться с временным рядом точнее Как можно бороться с не стационарность и приводить временной ряд к стационарному виду есть два два таких преобразования Первое это преобразование называется бокса Кокса с очень таким созвучный названием которое запоминается вот на самом деле вы это преобразование уже использовали

созвучный названием которое запоминается вот на самом деле вы это преобразование уже использовали вы его уже использовали когда когда когда точнее частный случай вот один из где мы с вами использовали логарифмирование Да когда логарифмировать Таргет Абсолютно верно Вот то есть преобразование логарифмирования - это частный случай преобразования бокса Кокса вот как бы в общем виде вот эта штука вот так выглядит если вот эту лямбду устремишься влияние как бы вносится само это преобразование Ну

вот так выглядит если вот эту лямбду устремишься влияние как бы вносится само это преобразование Ну крайний случай это вот когда лямбда как бы равно нулю то это эквивалентно логарифмирование вот этот инструмент позволяет бороться действительно с не стационарность временного ряда но такой вам вопрос на засыпку Как вы думаете вот из вот этих вот трёх проблем логарифмирования таргета в данном случае какую нивелируют больше всего вот из этих трёх вторую вторую Да наверно Абсолютно верно вторую

какую нивелируют больше всего вот из этих трёх вторую вторую Да наверно Абсолютно верно вторую дисперсию потому что Представьте что у вас есть 1.000 и есть 10 если вы вот разница сейчас сколько Во сколько раз отличаются эти две цифры о 100 раз отличаются Да теперь мы применим с вами десятичный логарифм тогда слева что у меня будет три три потому что как бы 10 надо возвести в степень 3 чтобы получить 1000 А здесь что будет о о то есть от разницы X1 от разницы X1 осталась разница X X3 X3 вот

1000 А здесь что будет о о то есть от разницы X1 от разницы X1 осталась разница X X3 X3 вот такой вот прикол и всё Понимаете вот знат чтото Это она маленькая но после логарифмирования она начнёт сглаживаться и уже не будет такой явной соответственно как бы вот именно вот это преобразование это и в целом запомните запомните это правило логарифмирование оно хорошо с двумя вещами борется когда распределение ло нормальное когда оно кривое в одну из сторон особенно в левую и второй момент когда у

ло нормальное когда оно кривое в одну из сторон особенно в левую и второй момент когда у вас когда вы хотите понизить дисперсию данных логарифмирование тоже в этом Об логарифмирование две главные идеи поэтому логарифмирование очень находит большое применение в анализе данных потому что ну и то и другое нужно на самом деле И то и другое нужно так [музыка] а далее и второй второй принцип - это дифференцирование временного ряда дифференцирование временного ряда Ну дифференцирование - это Аля

дифференцирование временного ряда дифференцирование временного ряда Ну дифференцирование - это Аля производная которая у нас была когда-то производная - это скорость изменения скорость изменения временного ряда И на самом деле на самом деле вы как бы часто видите именно дифференцированный временной ряд Ну например говорят что продажи там на или не знаю спрос на покупку однокомнатных квартир в следующем месяце увеличится на 17% или упадёт на 5% слышали часто такие формулировки аналитики говорят

месяце увеличится на 17% или упадёт на 5% слышали часто такие формулировки аналитики говорят аналитики говорят что цены на видеокарты они говорят в абсолюте они будут такими-то Они будут такими-то а они вам говорят именно изменения то есть они скорость изменения вам говорят как это выглядит Представьте что у нас есть временной ряд временной ряд у которого значение следующего характера вот здесь два Давайте здесь предположим сделаем пять следующее пусть будет а сем се и ещё одно будет восем Ну

два Давайте здесь предположим сделаем пять следующее пусть будет а сем се и ещё одно будет восем Ну даже не восем Давайте пусть будет девять даже не девять пусть будет 10 Да вот так 10 вот это 10 если что вот как бы тут конкретно какой-то восходящий временной ряд правильно А сейчас мы проведём процедуру дифференцирования процедура дифференцирования - это как бы когда мы с вами Ну как посчитать скорость изменения функции даже в производном мы это считали между точками вроде бы можно да Через

скорость изменения функции даже в производном мы это считали между точками вроде бы можно да Через угол можно просто посчитать разницу соседних точек Да к сожалению здесь нету понятия Сколь угодно Малая точка Как в общем виде в производной Но я могу разницу посмотреть этих двух точек и всё у меня на одну точку действительно меньше становится но у меня здесь 5 Ми 2 это 3 5 2 это то есть где-то здесь стало 2 а потом 10 ми 7 стало 3 ну одну точку Я гарантированно теряю К сожалению вот и здесь это

стало 2 а потом 10 ми 7 стало 3 ну одну точку Я гарантированно теряю К сожалению вот и здесь это тоже происходит как бы в какую бы сторону я не двигал но тем не менее мы с вами убили вот эту трендовую составляющий ряд стал стационарен причём более того он имеет интерпретируемый как его можно интерпретировать что он показывает кажы момен из 10 падение на 10 на самом деле Ну кто-то понятно просто как бы исходя из какой-то аналитики а кто-то строит временные ряды предсказываю вот

понятно просто как бы исходя из какой-то аналитики а кто-то строит временные ряды предсказываю вот дифференцированные данные а потом собственно говоря пишут статьи о том что Какого они просто ждут или падение просто это даёт более как бы стабильные характеристики потому что у нас возникает стационарность что если график у нас какой есть распределение нормально нормально распределение Но вот так вот выглядит то есть чуть-чуть смещено сдем Ну вот если ты нормальное распределение про логарифми ты

выглядит то есть чуть-чуть смещено сдем Ну вот если ты нормальное распределение про логарифми ты получишь нормальное распределение спасибо Вот как-то так есть это выглядело бы Смотри вот Во мы с вами берём и смотрим Дельту смотрим Дельту со сдвигом То есть я как бы представляете пнул вот с этой стороны как бы стукнул сверху и у меня всё сдвинулось на один восьмёрка ушла куда-то сюда Но она как бы мне нафиг не нужна не то чтобы не нужна Я её просто не смогу здесь реализовать А вот здесь

как бы мне нафиг не нужна не то чтобы не нужна Я её просто не смогу здесь реализовать А вот здесь начинаются возникают разницы да то есть и я их могу смотреть как бы вот получается 4 - 2 вот эти это и есть вот эта двойка 6 - 4 это и есть вот эта двойка 8 - 6 это и есть вот эта двойка вот у меня тут получился временной ряд 2 2 2 можно сдвинуть и в другую сторону Но это как бы не суть тем самым мы как бы с помощью дифференцирования сделали ряд более стационарный Да Саш мы берём модуль этой

мы как бы с помощью дифференцирования сделали ряд более стационарный Да Саш мы берём модуль этой разницы или нет мы смотрим чистую то есть вот это минус Вот это не знак здесь сохранять по-хорошему надо то есть модуль будет не совсем прави Здесь нам нужно сохранять Если ты будешь просто обучаться на модуле Ну нет конечно сможешь получить отрицательные точки Но это плохо закончится нет то есть тут нужно бе без модуля а Бывает такое что дифференцирование недостаточно и приходится ещё играться

тут нужно бе без модуля а Бывает такое что дифференцирование недостаточно и приходится ещё играться чтобы его сделать Можно несколько раз дифференцировать вот да на самом деле как бы на практике это вот как бы в теории это помогает на практике это помогает 50 на то есть иногда это не дат буста дасть только на каких-то сверх больших больших данных вот там статистические приколы максимально раскрываются на небольших данных как бы можно и без дифференцирования построить попробовать можно с

раскрываются на небольших данных как бы можно и без дифференцирования построить попробовать можно с дифференцированием и сравнить а иногда конечно как бы стационарный Ну точнее за одно дифференцирование временной ряд может не стать стационарным Ну ты можешь провести ещё одно дифференцирование так делают график биткоина по-моему за два дифференцирования остановится стационарным вот бу Подними руку Я хочу теорию проверить можешь тыкнуть смайлик не не Вот это поднять поднять руку в Зуме блин

руку Я хочу теорию проверить можешь тыкнуть смайлик не не Вот это поднять поднять руку в Зуме блин Забавно Люба а Да нет всё хорошо сейчас для теста руку подняла то с я понял Поня Так ну что ж тогда как можно этот временной ряд сделать А как этот временный ряд можно сделать стационарным точнее Как как продифференцировать какие у вас идеи Вот вы столкнулись с временным рядом Давайте вот у нас есть та сес по-хорошему Я хочу чтобы 1,85 было минус Вот это значение 0,92 минус Вот это - 337 минус Вот

та сес по-хорошему Я хочу чтобы 1,85 было минус Вот это значение 0,92 минус Вот это - 337 минус Вот это и так далее прекрасная тренировочка на нам Пай а есть же типа функция типа мапа фильт называется не называется она зать одного значения всж Да я могу только через цикл я не пом по наше негласно кодексу поэто не предлагаю украсть Сергея закрыть е в подвале дать ему нам пай цикл и о делает ам рассказывал была история когда один из выпускников это вообще по-моему самая первая Груп пришёл он

рассказывал была история когда один из выпускников это вообще по-моему самая первая Груп пришёл он короче устроился на работу ему начальник сказал что если я увижу что ты использу я тебя уволю сразу же чтобы не было е не было ему ВС приходилось самому искать выискивать вот эти вот сложные конструкции прок коде не должно было быть вообще про ничего не было сказано нуже А можно было использовать я не помню подробно конечно Скорее всего нет потому что включаем фантазию Давайте я вам подскажу

я не помню подробно конечно Скорее всего нет потому что включаем фантазию Давайте я вам подскажу Например если вот 12 ми npay 2Т Вот такая операция почему-то работает без ошибок без циклов фр всяких надоть создать нам нужно создать массив со смещённым на одну значением сделать вот я вот это оставляю Чтобы у вас было у всех перед глазами а здесь Диктуйте Что писать сй так с какого поко с первого до Кон Вот выводим хорошо это вот у вас выявилась вот эта история Дальше что делаем [музыка] минусу

до Кон Вот выводим хорошо это вот у вас выявилась вот эта история Дальше что делаем [музыка] минусу из перво вычитаем там разные в конце илов никто Люба давай Зажигай наоборот оди один думаешь мими Вот это похоже на правду всё сработало То есть вы в первом случае взяли вот эти элементы Да а во втором случае взяли вот эти Эмен количество одинаковая одинаковая точнее в первом случае мы взяли Да вот так вот а во втором случае мы взяли вот так количество элементов осталось одинаковое но они

Да вот так вот а во втором случае мы взяли вот так количество элементов осталось одинаковое но они наложили как раз-таки 1.85 наложило на 22 получилось вот разница и так далее Ну всё видите собрали Молодцы Ну вообще есть для этого метод NP div TS как бы попроще считает но тем не менее самостоятельно с вами как бы сложили со срезами полезные упражнения нам па В общем вот назовём Это теперь ра всё то есть взяли производную В каком-то смысле временного ряда и Давайте построим его график Ну как вы

то есть взяли производную В каком-то смысле временного ряда и Давайте построим его график Ну как вы видите Так сейчас я выставлю те же самые размеры как здесь вот они получились эти разме бы впе ушла ряд стал стационарным Можно также запустить здесь Аде флера афр и сюда подать наш временной ряд у которого pv стал очень маленьким что Это говорит о том что он стационар Ну такая вот идея такая идея бокса бокса бокса говорю а вот такая идея у дифференцирования временного ряда вот так Ну давайте ещё

бокса бокса говорю а вот такая идея у дифференцирования временного ряда вот так Ну давайте ещё один момент разберём и потом у нас как раз уже будут Модели Модели и мы уйдём на модель Я люблю вот будет две модельки две сразу Ух нет по очереди последовательно будет две сразу не успею объяснить последовательно Так давайте разбирать нам из терминологии ещё нужно автокорреляция Вы помните что такое корреляция Что такое корреляция одно сильно влияет на другое Линейная зависимость между двумя

такое корреляция Что такое корреляция одно сильно влияет на другое Линейная зависимость между двумя переменными А как она вычисляется исходя из чего из ковариации на Таргет Ну ковариация ляция это одно и тоже типа ковариация про миро кори в ди Ну я зна ковариация есть показа вобще любой зависимости а корреляция показателя только линей нет На самом десто Не ну там как бы кою тоже по-разному высчитывают но классическая коци да это та же самая корреляция но я хотел вам сказать что вот у вас есть

но классическая коци да это та же самая корреляция но я хотел вам сказать что вот у вас есть признаки X12 работали строили матриц корреляции и смотрели зависимость от двух столбцов вот как они вычисляются за счёт чего хотя бы за счёт чего просто изменени как-то цепляться за разницу да то есть если здесь Было дде было ри здесь вдруг выросло п и здесь выросло во Да ну или Давайте на три Ну не знаю седе что-то стало падать если вот повторюшки вот эти происходят то можно утверждать что X2 как-то

седе что-то стало падать если вот повторюшки вот эти происходят то можно утверждать что X2 как-то линейно зависит от X1 и повторяет его паттерн правильно Ну логично же очень даже логично вот во временных рядах мы Ну по крайней мере пока что с вами рассуждаем о том что мы будем строить будущие будущие прогнозируемые значения вот будущие вот справа вот здесь исходя только из значений прошлого А значит что у нас корреляция как бы как таковой у нас признаков то нету У нас их вообще нету но у нас

что у нас корреляция как бы как таковой у нас признаков то нету У нас их вообще нету но у нас будет не корреляция А автокорреляция автокорреляция - это корреляция с самим же собой и Сейчас будем разбираться с вами что это такое А давайте разбираться разбираться разбираться вот где-нибудь здесь нарисую здесь возьму место Представьте что у меня есть временной ряд а временной ряд какой-нибудь Да не знаю 27 ми4 -2 5 0 0 3 Ну вот такой временной ряд это полностью сгенерировано там случайно мною и у

знаю 27 ми4 -2 5 0 0 3 Ну вот такой временной ряд это полностью сгенерировано там случайно мною и у меня такой стоит вопрос смотрите вот каждый каждая история Каждый элемент выборки это ежедневные ежедневные собранные данные ежедневные Ну предположим Вот это Это как раз-таки было 17 июля Вот это 16 июля 15 июля Ну и так далее понятно тут 14 1 12 11 10 9 Вот это 9 июля и у меня такой стоит вопрос к вам а там на самом деле данных если что ещё есть глубже Ещё ещё дальше ещё дальше У меня вопрос

к вам а там на самом деле данных если что ещё есть глубже Ещё ещё дальше ещё дальше У меня вопрос заключается к вам в следующем вопрос будет стоять так меня вопрос блин сформулирую Сейчас секунду Короче я хочу чтобы вы мне ответили вы мне ответили по поводу того Есть ли зависимость на то какой я сегодня От вчерашнего дня как это проверить то есть вот как бы мне дальше если предсказывать на 18 июля насколько бы влияло 17 июля Но это конкретно для 18 июля для 15 июля прошедшее это 14 июля А если

насколько бы влияло 17 июля Но это конкретно для 18 июля для 15 июля прошедшее это 14 июля А если обще это объединить то сформулировать это можно следующий Что как на меня влияю вчерашний я сума сумма всех средних разниц сумма средних всех разниц так ну средняя сумма всех разниц Ну получись она получись она равна нулю а потом часть ряда со сдвигом на о день вотже ты всю информацию стираешь у средняя получился у тебя средний ноль ты подумаешь что реляции нет а на самом деле у тебя было то пять

получился у тебя средний ноль ты подумаешь что реляции нет а на самом деле у тебя было то пять то минус п то четыре то ми4 то есть всегда какое-то влияние было гима правильно говорит как бы это очень хорошая мысль Все ли её поняли Я хочу чтобы все из процесса не выпадали потому что эту штуку я не очень услышал мысль То есть ты короче берёшь из одного ряда и делаешь две два столбца и потом их коррелирует между собою один просто другой немного двину Ну по двинутый башке голуба по-моему не понял

между собою один просто другой немного двину Ну по двинутый башке голуба по-моему не понял суд по выражени лица что-то вот у нас есть Давайте ещё раз задача Она кстати абсолютно ну логичная я как бы в дальнейшем хочу там строить оценочные прогнозы Я хочу как на завтрашний день влияю сегодняшний Я как это оценить Какие вот есть иде и так далее У меня была идея типа как SM только без мина просто ну типа тоже что-то двигающееся побу попробуем как бы вот этот тренд уследить для этого я возьму и

ну типа тоже что-то двигающееся побу попробуем как бы вот этот тренд уследить для этого я возьму и посмотрю построю ряд со сдвигом о сдвиг называют во временных рядах лагом то есть вот у меня сейчас происходит сдвиг с лагом один То есть я все значения сдвинул на один вот это у меня будет 107 Вот это у меня будет там 1107 Понятное дело и так далее 7 3 -4 -2 п Блин сейчас криво рисую неудачно сделал так 73 МИ 4 здесь будет МИД здесь будет 5 здесь будет но здесь будет но здесь будет 3 в ито Вот

так 73 МИ 4 здесь будет МИД здесь будет 5 здесь будет но здесь будет но здесь будет 3 в ито Вот они меня обвали па и Да я схожесть поведения или нет Что подразумевается под схожестью смотрите здесь Было два здесь Было се правильно здесь мы выросли а здесь мы упали То есть почему здесь я плюс 5 дал здесь я дал п5 а здесь я дал мину далее Я здесь дал ми4 а здесь я дал плюс плюс получается пде а здесь я дал ПД здесь я дал ПД А здесь я дал п 7 и я вот как бы смотрю есть схожесть повторения или нет

я дал ПД здесь я дал ПД А здесь я дал п 7 и я вот как бы смотрю есть схожесть повторения или нет соответственно если она есть это значит говорит нам о том что корреляция есть Так считается и обычная корреляция которую как бы вы считали корреляция между двумя признаками если у вас эта корреляция получается высокая мы можем утверждать что на 18 июля на 18 июля на следующий день достаточно сильно может влиять то что происходит 17 июля вот ну и так далее на 19 июля будет леть во на двадцатое будет

влиять то что происходит 17 июля вот ну и так далее на 19 июля будет леть во на двадцатое будет леть дее ну далее Далее далее Далее вот как-то так как-то так как-то так да кожило впечатление для того чтобы корреляция была ряд должен быть либо там стабильно убывающим либо стабильно возрастающим Ты кстати хорошую вещь заметил очень хорошую вещь заметил но на самом деле нет Угу Но то что ты заметил это важно Типа если ряд постоянно возрастает то корреляция будет и корреляция связана с трендом тупо

важно Типа если ряд постоянно возрастает то корреляция будет и корреляция связана с трендом тупо с этим надо бороться то есть наблюдение хорошие да получается корреляция ходим с парой куда она туда я если оба ря одинаково ведут себя во время во время времени то мы на королями конного Ну хорошо Хот пора это что значило бы для нас вывод Какой самый главный Ну если это падает Я тоже падаю она растёт тоже РАУ Ну окей Нет наверно самый фак друго что то что было то что 17 июля происходит Поэтому в

тоже РАУ Ну окей Нет наверно самый фак друго что то что было то что 17 июля происходит Поэтому в формулах вычисления которые у нас будет 17 июля будет важным признаком для предсказания 18 июля ели доказана корреляция внутри самого ряда так в общем Теперь давайте посмотрим на эти графики и уйдём на перерыв с вами Вот как выглядит автокорреляционная функция с разными лагами то есть Обратите внимание корреляция она ровно ноль никогда не будет Поэтому Ну как бы за вас с помощью статистических

корреляция она ровно ноль никогда не будет Поэтому Ну как бы за вас с помощью статистических тестов формируется вот этот доверительный коридор всё что внутри него можно утверждать что эта корреляция не значимая Ну то есть грубо говоря её нет все же те кто за неё выпрыгнули можно утверждать что это значимые лаги например вот два Вот это да то есть смотрите вот это 1 2 3 лак номер три лак номер четы и лак номер 24 я думаю вот так это лаги которые выпрыгнули вот лаг ноль он имеет корреляцию один

и лак номер 24 я думаю вот так это лаги которые выпрыгнули вот лаг ноль он имеет корреляцию один это как бы корреляция с самим же собой стопроцентно это понятно Вот лак лак оди - это значит корреляция со вчерашним лак 2 - это корреляция с позавчерашний лаг 3 - это корреляция с поза поза вчерашним Вот именно лаг 3 почему-то оказывается статистически значимым именно для данных по которым построен этот график вот Ну соответственно видите как можно много лагов построить это конечно если у вас много

график вот Ну соответственно видите как можно много лагов построить это конечно если у вас много данных но тем не менее Исходя из этого можно посмотреть что было бы важным что было бы неважным потому что это нам поможет дальше в построении модели машинного обучения отобрать важные признаки Да лю То есть я правильно поняла что мы по этим лагам можем посмотреть Например у нас кажды каждые 3 дня какая-то тенденция есть да или там каждые 7 дней Ну да да да да можно посмотреть согласен Костя Ну

какая-то тенденция есть да или там каждые 7 дней Ну да да да да можно посмотреть согласен Костя Ну похоже что как у Любы был вопрос то есть какая-то такое наблюдение что вот каждые три или тыре дня это какая-то сезонность некоторая получается ну не не совсем так это ещё надо постараться объяснить что здесь происходит здесь скорее всего не сезон всё связано с какими-то другими причинами про сезоны сейчас ниже видно о'кей и второй вопрос для нашего примера где мы с циферка строили искали

сезоны сейчас ниже видно о'кей и второй вопрос для нашего примера где мы с циферка строили искали корреляцию мы пришли к выводу что корреляции Нет я же правильно понимаю а на восемнадцатое число семнадцатое А ну там надо ещё усреднять но скорее всего Да там я числа случайно генерируют скорее всего не Угу [музыка] О'кей Саша Да вот что-то я не особо понял что показывает нам автокорреляция вот это получается разница вот каждая вот эта точечка Это разница между предыдущим днём и это коэффициент

получается разница вот каждая вот эта точечка Это разница между предыдущим днём и это коэффициент корреляции то есть насколько сильно влияет вчерашнее или позавчерашние или поза позавчерашние значение на меня То есть вот мы можем от 20 Я просто не понимаю Ну я просто не понимаю это графику что мы можем сказать что влияет что не влияет ты что можешь по матрице корреляции найти важность признаков вот тут тоже важность признаков у тебя в конце концов предсказание будет строиться следующим образом

тут тоже важность признаков у тебя в конце концов предсказание будет строиться следующим образом это вот сейчас мы дальше проговори что Y крышечка то есть предсказание это какой-то вес умножить на то что было вчера плюс какой-то вес умножить на то что было позавчера плюс какой-то вес а там ну короче с какой-то глубиной вовнутрь уходим с какой-то глубиной так вот Какие признаки оставлять то есть вот этот важен вот этот важен или вот этот важен собственно говоря как бы вот такой фип В каком-то

вот этот важен вот этот важен или вот этот важен собственно говоря как бы вот такой фип В каком-то смысле задаёт вот Матрица корреляции ну здесь она у нас только автокорреляция потому что мы на самого же себя и смотрим то есть Судя по этому графику У нас третий и четвёртый день сильно влияют иче сильно влияет а остальные как бы не особо Да Абсолютно верно сразу а правильно понимаю То что у нас вот на графике иксы - это значение лага типа от нуля до 6 да да да то есть на сколько временных

нас вот на графике иксы - это значение лага типа от нуля до 6 да да да то есть на сколько временных интервалов ты сдвинулся назад это может быть месяц то есть Один лак может быть это один месяц может быть один день может быть од неделя в демо у нас сегодня будет месяц на практике у вас сегодня будет неделя ВС зависит от того с какими данными вы работаете так Ну вообще на самом деле помимо авторе помимо автокорреляции есть ещё частичная автокорреляция частично автокорреляция Я опущу там на самом

автокорреляции есть ещё частичная автокорреляция частично автокорреляция Я опущу там на самом деле Какая математика внутри стоит Какая математика внутри стоит чтобы ну Эта мысль она заключается в том чтобы как раз таки нивелировать эффект тренда В каком-то смысле вот то что кости поднял он прямо попал в самую точку в самую точку если график если график будет тупо восходящий то у вас вот этот график у вас всё будет иметь высокие корреляции А это говорит нам не о том что важно Каким я был вчера

у вас всё будет иметь высокие корреляции А это говорит нам не о том что важно Каким я был вчера или позавчера это тупо инфляция может быть понимаете да то есть это как бы не влияние конкретно дня день как причи следственно связи а тупо какие-то вещи которые формируют тренд здесь это не очень видно но в демо которые у нас с вами будет и в вашем примере это будет видно хорошо Поэтому пока что просто нужно понять что есть И то и другое вот как бы вот этот график он такой В общем виде А вот этот

нужно понять что есть И то и другое вот как бы вот этот график он такой В общем виде А вот этот график без учёта тренда и на нём как правило очень хорошо начинают просвечивать сезонные лаги Ну сезонные лаги как правило хорошо на нём начинают показываться если у вас сезонность там есть в данном случае в данном случае что мы с вами видим То есть у нас есть важный лак номер 12 лак номер 24 лак номер 36 лак 48 лак 60 Там и так далее Ну ещё выпрыгнул там первый лак Да ну как бы вот так по мелочи

36 лак 48 лак 60 Там и так далее Ну ещё выпрыгнул там первый лак Да ну как бы вот так по мелочи что-то ещё есть кто это выглядывает да буквально Ляды Ну сколько у нас точно есть сезонность у нас точно есть сезонность Как вы думаете Какого размера э Сенно 12 однозначно Это скорее всего ежегодно годовая сезонность Да вот и один элемент выборки - это оди месяц в общем А для чего конкретно как мы сейчас будем использовать график pacf или частичной а автокорреляционной функции и просто acf как

сейчас будем использовать график pacf или частичной а автокорреляционной функции и просто acf как автокорреляционной функции Люба хулиганишь Люб же нарисовал Нарисуйте пожалуйста пока так и э в общем И то и другое Нам сейчас понадобится для построение модели машинного обучения Так что пока давайте как бы перед этим сделаем наконец перерыв Вот и после этого у нас остаётся разбор модели и код всё 28 минут 38 продолжаем перерыв Так ну что давайте возвращаться мы с вами разобрали достаточно большой

минут 38 продолжаем перерыв Так ну что давайте возвращаться мы с вами разобрали достаточно большой контекст а именно проговорили что есть какие-то составляющие временного ряда Как там тренд сезонность Ил Да Далее как компоненты временного ряда проговорили Что такое стационарность не стационарность временного ряда и как с ней бороться также проговорили автокорреляции частично автокорея что это такое Вот то собственно говоря дошли наконец до моделей и первая модель которую мы разберём с вами это

Вот то собственно говоря дошли наконец до моделей и первая модель которую мы разберём с вами это будут модели класса Рима так называемые модели ВС семейство называют модели класса вообще говоря чуваки которые разработали эту модель получили Нобелевскую премию то есть с время такая достаточно прорывная штука была по экономике это авторегрессия это Она состоит из Ma - это Moving average I - это integrated и это S seasonal сначала была Ар потом появилась ARM потом появилась арима потом появилась

и это S seasonal сначала была Ар потом появилась ARM потом появилась арима потом появилась сама потом ещё появился смакс вроде на этом пока закончили Ну как бы Потихонечку обрастать обрастать вот а мы с вами пойдём по порядку начнём вот с ар авторегрессия Что из себя представляет авторегрессия Давайте я вот здесь напишу формулу то есть идея в ЧМ это будет как обычная классическая задача регрессии где признаками будем мы сами же в прошлом для себя точно также по Градиент спуску минимизации

где признаками будем мы сами же в прошлом для себя точно также по Градиент спуску минимизации находятся эти веса всё тоже самое И теперь надо проговорить Что из себя представляет Итак я запишу это следующим образом то есть наше предсказание в момент времени т это может быть 18 июля То бишь завтрашний день да если у нас ежедневно а ежедневно всё да один элемент выг считать ежедневным отчётом какие-то веса Ну АФ 1 X yt - 1 П Альфа 2 у yt - 2 плюс альфа P у yt - P так вот появляется первый гипер

веса Ну АФ 1 X yt - 1 П Альфа 2 у yt - 2 плюс альфа P у yt - P так вот появляется первый гипер параметр это п маленькая которая как бы отвечает на такой вопрос А насколько глубоко брать значение в прошлом Да И вот P можно взять это порядок авторегрессионная модели он выбирается по графику pacf это номер последнего ненулевого элемента на графике pf Ну давайте посмотрим м так опять не так сделал Сейчас секунду Сейчас посмотрим на Наш график Нам нужен всё-таки Y с крышечкой [музыка] вот собственно

секунду Сейчас посмотрим на Наш график Нам нужен всё-таки Y с крышечкой [музыка] вот собственно говоря собственно говоря номер не нулевого лага Ну смотрите Конечно если говорить последний номер не нулевого лага то он где-то вот здесь вообще да согласитесь то есть это как бы важные вещи но в построении модели реально в практическом построении модели стремятся все идти к простоте какой-то какой-то простоте Ну пока что так как у меня Давайте вот сезонные лаги в первую очередь это Будем считать что

Ну пока что так как у меня Давайте вот сезонные лаги в первую очередь это Будем считать что ну как бы фиг с ними чуть-чуть потеряем но модель будет попроще Я возьму Шей лак пока что возьму Шей лак то есть вот То есть это значит что то есть это значит что я возьму равно 6 как-то так пока что то есть нужно будет настраивать аж 60 весов аж 60 весов идём далее Далее после Ар появилась Арма то есть авто агрессия ещё и ВМ все может показаться понятным как бы он достаточно сложный Я сначала его запишу

агрессия ещё и ВМ все может показаться понятным как бы он достаточно сложный Я сначала его запишу потом попробую объяснить до конца это Скользящая средняя на остатках Скользящая средняя на остатках во временных рядах считается такая история вот кстати вот именно за это пошл большой прорыв римы да то есть как бы вот Эта мысль Она сама по себе достаточно тривиальная В чём суть Я попробую вкратце как бы объяснить самыми базовыми словами потому что глубоко это быстро не объяснишь вот смотрите когда

бы объяснить самыми базовыми словами потому что глубоко это быстро не объяснишь вот смотрите когда мы с вами когда мы с вами например проходили регрессию и строили регрессионной Модели там классическом машинном обучении Мы считали что каждая ошибка вами В каком-то смысле отклонение на одном доме независимо от другого бы все вот эти ошибки они не скованы никак во временных рядах так как элементы выборки между собой во времени связаны это формирую так что если мы на одном промахнулись то

выборки между собой во времени связаны это формирую так что если мы на одном промахнулись то теоретически мы прохм на другом в общем ошибки скованы могут оказаться из меня по й член который будет как-то усреднять ошибки какого-то периода и добавлять их тем самым мы как бы балансирующей средне на ошибках каждое новае новае новае новый член то есть вот сит -1 - это Это ошибка ошибка которая произошла на Т мину первом элементе предсказания Т -2 - это ошибка которая произошла на Т мину втором

на Т мину первом элементе предсказания Т -2 - это ошибка которая произошла на Т мину втором элементе предсказания и вот добавление этого члена хорошо повлияло на качество моделей и появилась Арма так вот чтобы выбрать вот этот Q вот этот Q его нужно выбрать по графику acf acf нуно на самом деле как бы у нас вот двадцать четвёртый лаг поэтому я могу утверждать что Q я возьму 24 Это мой второй гипер параметр Это значит что я взял бы 24 остатка а во времени далее Далее на этом всё не закончилось

параметр Это значит что я взял бы 24 остатка а во времени далее Далее на этом всё не закончилось появилась модель арима арима арима она подразумевала ещё то что вы можете указать как бы модели что нужно продифференцировать данные но I integrated дифференцирование и интегрирование - это противоположные друг другу истории да то есть ну для всех так если что-то продифференцировать а потом взять интеграл то мы получим исходную вещь дифференцирование - Это разность А интегрирование - это сумма они

то мы получим исходную вещь дифференцирование - Это разность А интегрирование - это сумма они противоположны друг другу так вот как бы под на самом деле подразумевается хоть это но подразумевается дифференциация вы сюда можете Вот буковка D есть в центре Вы можете сказать например например Сержа там составляет модель если он D подаёт единичку Это значит что модель поймёт что надо один раз продифференцировать данные ровно так как мы с вами сделали ровно так как мы с вами сделали вот здесь когда

данные ровно так как мы с вами сделали ровно так как мы с вами сделали вот здесь когда проводили То есть вы как поёте исходный временной ряд да исходный временной ряд она просто дифференциацию добавит дифференциацию сама добавит Вот это была Рима дальше после аримы появилась са Рима са Рима ещё говорит Ребят а вот типа ну смотрите вот возьмём мы да Вот мы сейчас тащим 60 с вами лагов хотя на самом деле Вот это всё нам ну нафиг не нужно Ну логично ведь не нужно Не нужно так тогда может быть мы

деле Вот это всё нам ну нафиг не нужно Ну логично ведь не нужно Не нужно так тогда может быть мы просто скажем что нам нужно сколько-то сезонных лагов Например если я укажу P равно 5 А сезонность укажу равное 12 значит п большое п большое возьму Пять это он будет знать что нужно взять лак двенадцатый лаг двадцать четвёртый лаг тридцать шестой лаг сорок восьмой лаг шестидесятый потому что я указал что пять сезонных лагов назад то есть что было год назад 2 года назад 3 года назад 4 года назад и 5

что пять сезонных лагов назад то есть что было год назад 2 года назад 3 года назад 4 года назад и 5 лет назад Он возьмёт тоже самое можно сделать с Q Да ну как правило если тут пять то тут ноль ставят Либо наоборот а а дифференциацию ставят Ну можно поставить дифференцировать сезонный лак можно не ставить но пусть будет ноль у меня условно это надо уже через тюнинг заниматься через атюн Там и так далее но если я вот как бы уже взял вот эти лаги 60 48 36 24 12 тогда вот тут мне п можно не брать

далее но если я вот как бы уже взял вот эти лаги 60 48 36 24 12 тогда вот тут мне п можно не брать такое большое а давайте вот возьмём Я бы взял Вообще знаете сколько я бы взял честно вам скажу Я бы взял бы либо один либо три Я бы взял бы вот один этот лак То есть у меня было бы 1 О и тоже самое с вот этим Q 24 - Это скорее всего сезонный лак Ну вот можно взять 4 Да так как вот четвёртый лак выпрыгнул попробовать построить такую модель итогово у меня бы получилась бы очень простая модель 114

попробовать построить такую модель итогово у меня бы получилась бы очень простая модель 114 500 их так и называют сама 114 500 тем самым Мне нужно всего по факту всего настраивать 10 весов против того что здесь было там 90 весов А это всё на самом деле время это по градиентного спуску это всё надо настроить и прийти поэтому как бы у арима есть такая проблема что чем больше вы весов берёте тем менее она интерпретируемые руководителю ему СМУ сказать что там не знаю такой-то такой-то А у нас

менее она интерпретируемые руководителю ему СМУ сказать что там не знаю такой-то такой-то А у нас влияет тридцать восьмой лак Это значит что давайте посмотрим что было 38 дней назад Вот это очень повлияло Ну как-то звучит даже немного так так себеш да Вот там то что влияло вчера позавчера какой-то сезонный лак быть может вот это вот нормальное объяснение поэтому все к этому и стремятся пусть даже с небольшой потерей точности Зато она интерпретируя быстрая и даже есть такая Метрика специальная

с небольшой потерей точности Зато она интерпретируя быстрая и даже есть такая Метрика специальная себе агрегирующие некий баланс Да Кость зафиксировал что подбирая параметры для сама мы смотрим на Как называется rsf на psf и ищем ищем явную сезонность А если её нет то мы берм какую-то из предыдущих моделей если её нет нет почему ты можешь взять какие-то лаги которы Это не сезонно я его будет не будет не будет сезонность на самом деле в большинстве данных есть как правила сезонно какая-то Но

будет не будет сезонность на самом деле в большинстве данных есть как правила сезонно какая-то Но сезонно рано присутствует то есть параметр он обязательный для или нет Нет он не обязательный строить Ну вообще я советую запускать с Max потому что как бы вы всегда можете если тебе не нужно I Ты можешь сюда ноль поставить ты Выключишь Да если тебе не нужна Ma ты вместо ку поставишь ноль ты его Выключишь То есть как бы весь функционал что-то включил что-то выключил можно прямо это запускать из

То есть как бы весь функционал что-то включил что-то выключил можно прямо это запускать из Рима просто это всё лежит в stats moduls и там лежит по блокам Вы можете конкретно найти ST modul S MAX А я посоветовал бы S MAX здесь уже всё включать выключать Вот они пошли параметры да то есть по умолчанию это авторегрессия вообще стоит это вообще по умолчанию стоит предсказание завтра будет как вчера то есть только на вчерашнее значение базируется одно и всё то есть сезонность выключена вся здесь у

то есть только на вчерашнее значение базируется одно и всё то есть сезонность выключена вся здесь у ну равно D ра Ну только P ра едини но можете выставлять как бы все свои значения Да тут включать тренды Ну и ещё ряд каких-то настроек вот нату я что-то пропустил момент вот Ma равное Типа четырём оно что отображает [музыка] а Ma равно четырём ты имеешь в виду Вот это Q равно 4 Да вот я посмотрел Ma Надо смотреть по графику acf acf Да я посмотрел вот сюда вот здесь у меня лак чере последний

Ma Надо смотреть по графику acf acf Да я посмотрел вот сюда вот здесь у меня лак чере последний стрельнул ещё вот этот стрельнул Но это как-то как будто бы связано с сезоном А я сезонную компоненту отдельно учту поэтому я на неё забил и взял то прыжок всё это значит что как бы Q ра 4 ра 4 ты возьмёшь четыре последних остатка которые как бы у тебя были а остаток - Это разница между реальным и предсказанный потому что вот то что я объяснил во временных рядах есть такая проблема что остатки скоре

потому что вот то что я объяснил во временных рядах есть такая проблема что остатки скоре И тем самым мы пытаемся как бы быть просто точнее всё и с отвечает за большие pdq да да Вот Вы вам нужно обязательно явно задать сезон чтобы как бы компьютер понимал сколько лагов как бы одна один сезонный отчёт Если ты вдруг подаёшь там не знаю P вот здесь равно одному ты бы взял бы только вот этот лак при учёте что сезонность равно 12 но он грубо говоря один умножает на 12 и понимает что надо достать лак

что сезонность равно 12 но он грубо говоря один умножает на 12 и понимает что надо достать лак 12 угу как-то так так ещё вопросы Угу Так так так что дальше Что Дальше у нас что дальше Ну в принципе в принципе вроде всё здесь сма Ну собственно говоря здесь прописано то что мы с вами проговорили подведём итоги посмотрим странных подхода у нас это эконометрический слезно тренда и так далее о нём чаще спрашивают на собеседованиях подход это рассматриваем как задачу регрессии это на самом деле

чаще спрашивают на собеседованиях подход это рассматриваем как задачу регрессии это на самом деле запустить for и так далее То есть какя В прямом смысле регрессионное это немножко я дам комментариев Но на самом деле это будет ваша практическая зада се эконометрический Невой Да соответственно есть рекуррентные нейронные сети которые вы будете проходить когда будете работать с текстом текст время текст временные ряды имеют кое-что общее Как вы думаете что дистрибуцию Ну нет А как в поэзии каждое

временные ряды имеют кое-что общее Как вы думаете что дистрибуцию Ну нет А как в поэзии каждое слово через интервал появляется снова тон Ну не совсем но просто сам тот факт что слова - это тоже последовательность упорядоченная последовательность один элемент за другим следует и временной ряд тоже Поэтому оказалось что неровные сети которые разрабатывали для генерации текста неплохо работали на временных рядах как бы ну на больших данных можно их использовать Хотя в целом как бы одна из групп не

рядах как бы ну на больших данных можно их использовать Хотя в целом как бы одна из групп не вот которая сейчас выпускалась до этого она по-моему то есть неровная сеть СТМ вы её будете разбирать она всё равно уступала например Риме и она уступала Риме арима - это как бы дёшевые сердита грубо говоря то есть за за свои деньги максимальный топ покрывает как бы очень много задача она достаточно простая в сути своей Да относительно того что рекуррентные сети построишь или что-то ещё более сложное

в сути своей Да относительно того что рекуррентные сети построишь или что-то ещё более сложное или там какие-нибудь бустинг ты ещё попробуй с интерпретируйте всё нормально а вот у арима это как бы арима - это как Линейная регрессия для временных рядов на самом деле то есть всё линейным образом всё просто так ну и собственно говоря ещё смотрите на самом деле очень много библиотек есть для для анализа временных рядов мы с вами посмотрим вот эти две Ну и ещё вот эти все видите они имеют так или

временных рядов мы с вами посмотрим вот эти две Ну и ещё вот эти все видите они имеют так или иначе приставку или суффикс ТС Что является как бы аббревиатурой Time Series Да Time Series frh Time Series dar Time Series и так далее они как бы заточены тупо под временные ряды Ну на самом деле Какие Эта библиотека Вот это не только под временные ряды Но она очень как бы популярная ST Mod вот так ладно тогда давайте переходить к демо если Вопросов нет переходим кмам Итак Что у нас по импорту

ладно тогда давайте переходить к демо если Вопросов нет переходим кмам Итак Что у нас по импорту библиотек Ну собственно говоря здесь единственная библиотека новая - это stats moduls stats moduls я его уже открывал вам здесь заходите вот у stats moduls есть всякие интересные описания то есть Вот например сма Да Ирок небольшие примеры Они тут показывают как они всё запускают Какая математика может стоять за этим тут кое какие выводы Да статистические тут в том числе pv считаются о важности

может стоять за этим тут кое какие выводы Да статистические тут в том числе pv считаются о важности признаков ещё вещи примеры описани там третья Пятая десятая короче в этом плане библиотеки modul like у них достаточно неплохие вот эти демки демки всех методов которые есть вот но документация мне их не очень нравится но какая есть то есть вот собственно говоря например вот параметры описание каждого параметра что оно значит и в конце тоже будут методы методы Ну например нам ED Понятно

каждого параметра что оно значит и в конце тоже будут методы методы Ну например нам ED Понятно понадобится метод F вот собственно говоря его значение Ну и что они значат вот так что смотрите Работайте с документацией Mod вам сегодня пригодится так вот я собственно говоря записал Models plot daytime для времени вонги убрали метрики настройка графика всё загружаю датасет Ну у меня будет достаточно простой датасет у вас будет посложнее датасет который как бы ну тут в принципе всё наву на самом

простой датасет у вас будет посложнее датасет который как бы ну тут в принципе всё наву на самом деле видно датасет продажи ой ежемесячных продажах молока Ну что мы здесь видим тренд сезонность л что-то видно вот такие истории потом чу по как-то так но он присутствует сезонность Какого размера Здесь вроде год разброс мока или срок полгода год год То есть вот один сезонность однозначно годовая сезонность Ну и компонента она здесь тоже есть это как бы если бы е не было то это было бы а всё равно

Ну и компонента она здесь тоже есть это как бы если бы е не было то это было бы а всё равно если Вы посмотрите на место на места стыков они везде немножко разные как бы это говорит о том что л есть как бы остатки остаются ошибки имеются но ошибки будут иметься у нас но как бы они на самом вклад там инфляции наверное думаю трендовый вверх его вклад очень минимален но однако мы попробуем построить модель на всём этом [музыка] Так во-первых что очень удобно в в пансе есть внутренний тип данных m64

на всём этом [музыка] Так во-первых что очень удобно в в пансе есть внутренний тип данных m64 он у меня лежит сейчас в индексе конкретно да то есть вот они индекс и чем это удобно Вы можете брать как бы у даты через атрибуты Любу вещь например вам нужны месяца вы можете выдернуть там год Вы можете выдернуть неделю и так далее ну неделе как-то по-другому пишется по-моему Day of Week что-то такое ну короче можно посмотреть что тут предлагают Например я хочу выбрать все июльские значения

такое ну короче можно посмотреть что тут предлагают Например я хочу выбрать все июльские значения пожалуйста вот все июльские значения я взял да то есть вот от года к году июль июль июль июль июль июль могу посмотреть что тут происходит вот далее Что ещё вам сегодня понадобится есть такой полезный метод Называется resample он чем-то похож как бы на груба вот руба в обычных табличных данных а resample вот он во времени Хорош resample - это агрегирующие то временному периоду то есть смотрите

resample вот он во времени Хорош resample - это агрегирующие то временному периоду то есть смотрите например Когда я пишу resample сокращают ER да то есть годовая и указываю агрегирующие функцию сум Это значит что он мне посчитает суммарной продажи молока по годам даже Мы можем с вами указать маркер чтобы было видно Что является элементами выборки то есть видите элементами выборки является вот шестьдесят третий год шесть чет шесть п шесть шесть сед шестьдесят во и так далее видно что из-за

шестьдесят третий год шесть чет шесть п шесть шесть сед шестьдесят во и так далее видно что из-за тренда мы всё больше и больше молока покупаем но здесь собственно говоря Функция может быть разная она может быть не только сум да А может быть средняя А может быть вообще медиана Да тут как бы всё примерно похоже можно смотреть не по годам А например по кварталам Да вот квартал один квартал 3 месяца есть указываю Прим или по полугодию могу указывать в общем какая-то агрегация и какой-то какой-то

есть указываю Прим или по полугодию могу указывать в общем какая-то агрегация и какой-то какой-то как сказать фиксированный интервал у вас сегодня по что будет хаотичный временной ряд нужно будет привести к одному временному ряду м в этом поможет вот месяцев работают потому что индекс лежит в дата тайме сразу в правильном формате да да Абсолютно верно Потому что если бы это был нета текст он бы как бы сказал А что я тебе с текстом сделаю как я знаю Да поэтому как бы одна удобная штука делает

как бы сказал А что я тебе с текстом сделаю как я знаю Да поэтому как бы одна удобная штука делает возможным следствие другой удобной штуки вот ну там Ладно мы пока поставим год как у нас было Ну и Давайте попробуем скользящее среднее есть такая есть такая такое повере что иногда предсказание завтра будет как вчера является уже чуть ли не самым лучшим и на самом деле это часто оказывается Правды потому что временные ряды настолько непредсказуемая штука особенно не знаю взять какие-нибудь

потому что временные ряды настолько непредсказуемая штука особенно не знаю взять какие-нибудь фондовые рынки они очень неустойчивые и поэтому Там как бы очень много факторов ваш анализ может вообще не учесть какого-то фактора которого который его вклад будет просто максимален А мы по нём даже не знаем так вот что я делаю Я указываю окно размером один теперь по коду У меня есть Вот мои значения я есть метод Пан там у который позволяет создать скользящее окно Вы внутри указываете Какого размера

есть метод Пан там у который позволяет создать скользящее окно Вы внутри указываете Какого размера Ну ити закрывать это окно На каком индексе Свами этоже проговори тут Я просто считаю метрики моей и R2 Давайте посчитаем завтра будет как вчера смотрите что получилось то есть видите как бы условно раз было вчера вот такое значит я прихожу Завтра вот такое же То есть как бы В каком-то смысле это просто сдвиг вправо на одно значение верно Даже при такой истории у нас R2 ра 08 Да А мое в среднем

просто сдвиг вправо на одно значение верно Даже при такой истории у нас R2 ра 08 Да А мое в среднем ошибаемся на 39 л молока предсказани можно не выводить можно как бы 2 показывает насколько мое относительно дисперсии мал то есть Ну достаточно мало всё равно предсказание очень хорошие вот что я ещё вам хотел показать я вам хотел показать вот такую историю вот Обратите внимание тут есть два на самом деле режима их на самом деле даже ри но два как бы об одном и том же вот когда я ставлю равно

самом деле режима их на самом деле даже ри но два как бы об одном и том же вот когда я ставлю равно Left А да то видите как бы у меня вот 589 589 стало сейчас хотя погодите-ка секунду не вот здесь вот я вам покажу лучше ниже лучше ниже здесь смотрите вот я пробовал окно размером оди Давайте попробуем окно указать размером 2 3 4 5 и до 15 а это значит что Ну если например окно размером се Это я предсказываю там по семи средним по усреднённый значениям семи последним месяцам Вот запускаем и

я предсказываю там по семи средним по усреднённый значениям семи последним месяцам Вот запускаем и смотрим Что получается месяцем или дням месяцем у меня один отчёт У меня нету детализации на день у меня один элемент выборки - это месяц большего я не знаю вот у меня январь сть вго февраль шестьдесят вго Мар в Вот вот такая как бы такое сокращение Да там в английском принято что сначала год Потом месяц потом день не как мы с вами привыкли Вот соответственно февраль март апрель май 6т и у меня

месяц потом день не как мы с вами привыкли Вот соответственно февраль март апрель май 6т и у меня нету ежедневной детализации вообще ну то есть её просто не существует У меня нет данных как бы что по дням продавалось так вот мы с вами считаем считаем и Обратите внимание прикол какой что скользящее среднее если использовать как предсказание то действительно предсказывать одним днём оказывается самое самые оптималь как бы это странно не звучало Но вот факты вот факты на лицо ну тут видно что

самое самые оптималь как бы это странно не звучало Но вот факты вот факты на лицо ну тут видно что когда сезонный лак стал приближаться двенадцатый то начало падать опять когда он появился когда он появился в предсказании до этого всё хуже хуже хуже становилось добавлялись невалидные данные вот когда сезонный лак стал появляться чу-чуть падение но всё равно как бы окно размером один предсказывает лучше это если его использовать на предсказание так вот здесь вот как бы давайте вот возьмём вот

лучше это если его использовать на предсказание так вот здесь вот как бы давайте вот возьмём вот эту наверно строчку вот эту строчку и Window укажем равны 2 вот смотрите у меня равно 2 вот эти 575 видите как бы это на самом деле средняя 58 п 561 пом 575 ставлю на уровне марта потому что говорю что это предсказание Вы можете это ставить не как предсказание А как просто средний На текущий момент когда ставить режим cled равно Right в таком случае эти 575 видите они калибруется на уровне февраля

ставить режим cled равно Right в таком случае эти 575 видите они калибруется на уровне февраля это будет эквивалентно тому что к февралю средняя 575 к Марту средняя 600 То есть это не режим предсказания а режим скорее фиксации в текущем значении как бы где-то нужно одно где-то нужно другое Так что такая вот штука вот если посмотреть как выглядит Ну ну да предсказание можно сказать так с окном в 12 видите оно уже очень сглазила потому что сглазила сглазила уже средняя Ну 12 точек И мы уже не

в 12 видите оно уже очень сглазила потому что сглазила сглазила уже средняя Ну 12 точек И мы уже не реагируем на каждое новое изменение так сильно получается вот скользя тако сред которая то что вот Кост в самом самом начале спросил как будто бы начинает отрисовывать тренд который у нас происходит потому что почти все значения известно и мы как бы как тренд начинаем формировать То есть это не совсем тренд по-хорошему тренд по-другому считается Но похоже на тренд становится похоже А когда

не совсем тренд по-хорошему тренд по-другому считается Но похоже на тренд становится похоже А когда маленькие окна то наоборот мы начинаем больше повторять форму рядо Да вот это вот если предсказывать по трём последним значениям вопрос получается как предсказание типа мы предполагаем А типа это как факт Нет ну если тебе нужно предсказывать с помощью скользящего среднего то ты поставить можешь тогда вот это вот там 57 Мне показывают мою среднюю как бы оценку Как пассажира мне же е не для

тогда вот это вот там 57 Мне показывают мою среднюю как бы оценку Как пассажира мне же е не для предсказания а для текущей поездки показывают То есть у них как бы грубо говоря да у Яндекса если бы это в датафрейме хранилось у них бы там на текущий мой день просто показывали бы что средняя оценка такая не с целью предсказать Ничего просто показать там Если вы где-нибудь на фондовых рынках Посмотрите зайдёте там на любой на любо пор графи порется там вот этот Вы тоже его Можете включить во-первых

зайдёте там на любой на любо пор графи порется там вот этот Вы тоже его Можете включить во-первых на два режима на предсказание либо на просто текущее значение но там по умолчанию как правило стоит простоя сре показывает какой средне на данный момент чтобы вот например увидеть вот такие штуки которые там вот вот такие Скользящая средня ага Ну мы видим тренд На повышение идёт какое-то да Или что-то ещё то есть не с целью предсказать а просто посмотреть просто посмотреть куда мы идём понял Также

ещё то есть не с целью предсказать а просто посмотреть просто посмотреть куда мы идём понял Также можно взвешенно сль сред нет здесь простая функция написана во внутрь лезть не буду короче ВС достаточно просто и как это бы могло выглядеть вот смотрите я предположим бы хотел как у меня сезонность равна 12 сезонность равна 12 да В данном случае сезонность равна 12 и например когда я бы предсказывал бы там следующую точку январ Я быте ВГ Ян Я так понимаю что это вот это он скорее всего а нет

бы там следующую точку январ Я быте ВГ Ян Я так понимаю что это вот это он скорее всего а нет Наверное это где-то вот это он то есть больше вес дать сезонному лагу Ну логично же как бы сезон вроде должен влиять типа январь к январю бить и дать вес вчерашнему лагу Как так как он тоже оказался важным А это вылилось у меня Примерно вот в такую развесовка 0,7 Я даю вес самому Дальнему значению двенадцатому лагу 0,2 даю самому ближнему и оставшийся 01 из 100% Я уже просто делю по-братски на

двенадцатому лагу 0,2 даю самому ближнему и оставшийся 01 из 100% Я уже просто делю по-братски на остальных Но это на самом деле практически нулевой вес но немножко как бы смотрим на них Итого у меня получается Вот такая вещь что 70% средне взвешенно 70% падает на двенадцатый лак на сезонный То есть если я предсказываю январь 70 Ну или Давайте если я предсказывал бы август 2 это значило бы что 7 на 70% Я бы посмотрел что было в августе ть третьего В августе дцать третьего с продажами на 20% Я

на 70% Я бы посмотрел что было в августе ть третьего В августе дцать третьего с продажами на 20% Я посмотрел что было бы в июле двадцать четвёртого так как месяц перед августом и всё остальное это вот как бы июнь двадцать четвёртого май двад чет апрель 24 Март Там и так далее вот собственно говоря окно размером 12 получается дальше использую эту функцию вот это всё это нужно опять же тупо для подсчёта медрик Итого упал действительно упал R2 вырос да то есть такая развесовка лучше чем какие-то

медрик Итого упал действительно упал R2 вырос да то есть такая развесовка лучше чем какие-то тривиальные штуки из того что имело здесь уже зашкаливает мы ошибаемся в среднем около л молока Ну в общем всё нормально предсказание бы выглядело так но здесь график настолько лёгкий что есть ощущение что можно как-то и пое ноте но призываем только на одну точку вперёд до сих пор на одну точку вперёд Да оптимальную разрисовку можно попробовать найти через есть модуль и МАСИ можно в атне это написать

оптимальную разрисовку можно попробовать найти через есть модуль и МАСИ можно в атне это написать простую сеточку создать и пусть она перер вам разрисовки так чтобы там был минимальны или какая-то мем в которых есть градиентный спуск минимизация Там и так далее через буквально две строчки мы можем построить вот эти два графика вот левый график график автокорреляции Обратите внимание все лаги имеют вклад причём положительный Как вы думаете с чем это связано с трендом повышающим всё Абсолютно

вклад причём положительный Как вы думаете с чем это связано с трендом повышающим всё Абсолютно верно то есть ну как бы тренд есть всё идёт вверх вот здесь можно там посмотреть вот здесь Ну конечно он скажет что каждый с каждым коррелирует потому что все все дружно вместе растут на самом деле это заслуга тренда А как бы не связь конкретных лагов вчера или позавчера поэтому более точно более точно показывает эту историю трен ВС равно надо учитывать поэтому кокие коэффициенты мы возьмём через

показывает эту историю трен ВС равно надо учитывать поэтому кокие коэффициенты мы возьмём через какие-то через здесь пример очень хорошо показывает разницу этих двух графиков Да разницу того не полную Риму А я построю только агрессию вкусненько я оставлю вам вот то есть у меня будет буквально только из всей этой аббревиатуры арима только первые две буквы первые две буквы сам график Ну что ж поехали здесь уже по-хорошему надо делить на Трей ий тест потому что здесь будет обучение полноценное

здесь уже по-хорошему надо делить на Трей ий тест потому что здесь будет обучение полноценное выше то что было со скользящим и взвешенным скользящим сведением там обучения Как такового нет поэтому м вот разделение взял я решил взять оставить два цикла то есть вот у меня 7 четвёртым годом делится то есть на Тез взяли два полных сезона на них будем валидировать можно как бы в другой пропорции разделить Не суть важно что здесь происходит Я создаю авто регрессию говорю что вот мне нужно 12 лагов 12

Не суть важно что здесь происходит Я создаю авто регрессию говорю что вот мне нужно 12 лагов 12 лагов а то бишь смотреть в том числе на то что было 12 признаков назад по что у меня это сезонный лаг Ну и запускается функция всё тут немножко по-другому относительно классического машино обучения в классическом меле мы создаём экземпляр класса а ВД подаём данные здесь данные подаются сюда афд запускается с другими настройками Ну и вот это всё мне нужно тупо для того чтобы дать правильное

запускается с другими настройками Ну и вот это всё мне нужно тупо для того чтобы дать правильное предсказание то есть я говорю что у меня период сезонный равен вытаскиваю здесь преза данные и вот авторегрессия предсказания у них обратить внимание есть метод forecast То есть он не только предикт ещё есть forecast они в принципе практически похожи но я больше сторонник forecast запускать forecast - это как предсказание будущих точек Я попросил соответственно здесь предсказать на три сезона вперёд

это как предсказание будущих точек Я попросил соответственно здесь предсказать на три сезона вперёд Сейчас вы увидите на рисунке что собственно говоря это имеет для чего это нужно Ну и на тестовой выборке на тестовой выборке Да которые как бы я и предсказание получил и тестовые данные у меня были здесь я посчитаю метрики которые у меня есть Ну что ж всё это дело запускаем получилось мое ещё упал стал 12585 R2 Ну хотя вот кстати интересный момент да к вопросу к вопросу Что такое на самом деле

стал 12585 R2 Ну хотя вот кстати интересный момент да к вопросу к вопросу Что такое на самом деле бывает одна метри колется другая колется то есть мое у нас упала но R2 увеличился точнее наоборот стал хуже Аста лучше ко хорошо R2 тоже упал но это плохо такое бывает вопрос тут к вопросу того что вы выбираете как главную метрику качества Я думаю что здесь мое хорошо Как главны качества Давай ко вопрос А это могло быть связано с тем что мы взяли не всю выборку А часть только Ну да Кстати может

вопрос А это могло быть связано с тем что мы взяли не всю выборку А часть только Ну да Кстати может быть может быть с этим но вообще это может быть и не с этим связано то есть это может Вполне себе такое может произойти что одна Метрика лечится другая колечи вот то есть как бы однозначности не гарантируется ну что ж вот у нас собственно говоря Виса Да получились просто через прамс напоминаю авторегрессия авторегрессия это это я взял вот в этой формуле которую мы с вами писали я взял грубо

авторегрессия авторегрессия это это я взял вот в этой формуле которую мы с вами писали я взял грубо говоря только первую часть первую часть Я бы мог на самом деле это запустить через и тогда у меня было бы PQ у меня было бы 12 а всё остальное было бы P большое большое Q большое и сезонность всё было бы нули То есть я вот я на самом деле когда Ар у себя в коде взял я взял вот такую вот такую и вытащил сейчас вот эти веса которые настроились как вот по Градиент спуску как по линей регресси ве

вытащил сейчас вот эти веса которые настроились как вот по Градиент спуску как по линей регресси ве которые можно бы интерпретировать Как вклад признаков Обрати внимание самый большой вес действительно имеет двенадцатый лак Да лак сезонности То есть это для августа два чет Это был бы август двадцать третьего для сентября двадцать чет Это был бы сентябрь дцать третьего и так далее Также второй как бы по значимости это то что было вчера то что было вчера Ну все остальные веса как бы поменьше Ну

бы по значимости это то что было вчера то что было вчера Ну все остальные веса как бы поменьше Ну тут там третий пятый десятый Ну тут настолько малых данных что в принципе реальное значение весов сложно узнать дисперсия их очень большая Ну тем не менее по крайней мере видно общий паттерн что вчерашний и сезонный лак доминировали вчерашний сезонный лак доминировали Ну и теперь Нарисуем график получился вот такой график что у нас здесь светом выделено соответственно Да вот у нас был период когда

вот такой график что у нас здесь светом выделено соответственно Да вот у нас был период когда мы когда мы получается делали трейн да то есть вот на этом всём мы обучались далее соответственно вот у нас был тестовый период тестовый период Ну и мы просто дали немножечко как бы предсказание вперёд видно что здесь уже аппроксимация идёт чуть-чуть по приятней И аппроксимация идёт чуть-чуть попятное и в целом как будто бы достаточно хорошо повторяем контур того что есть то есть выде выч

попятное и в целом как будто бы достаточно хорошо повторяем контур того что есть то есть выде выч закономерность нормально вот Вот такая авторегрессия получилась далее А ну вот собственно говоря ещё можно посмотреть Mod прямо есть моду модуль который позволяет вам посмотреть по отдельности каждую составляющую то есть вот это вот у нас с вами исходный временной ряд вот это вот это у нас с вами Какая составляющая Да это у нас трен это сезонность и это у с вами стаки Обратите внимание остатки

Какая составляющая Да это у нас трен это сезонность и это у с вами стаки Обратите внимание остатки Какие маленькие то есть видите остатки очень маленькие относительно того какие сезоны какой тренд поэтому у нас R2 очень высокий Ну и как бы в целом как бы мы промахивается разработана была компанией Facebook на тот момент называлась Facebook profit Ну как бы сейчас понятно стоит за этой компание Мета что они сделали ну во-первых как бы в принципе это всё была попытка до настроить Риму Ну просто

что они сделали ну во-первых как бы в принципе это всё была попытка до настроить Риму Ну просто там кое что более умное внутри есть Какие компоненты у них есть также трендовые компоненты сезонные компонента плюс у профита можно указать компоненту праздников или других всплесков напрямую задать которые как бы являются праздничными Да и остаток в принципе всё тоже самое как бы кроме праздников но но но но в чём там история там мы вовнутрь туда не будем лезть потому что там строятся не

но но но но в чём там история там мы вовнутрь туда не будем лезть потому что там строятся не классические временные ряды а там ряды фурье ряды фурье это такая математика посерьёзнее мы лучше туда посматривать не будем Будем верить просто Будем верить ребятам из меты что это хорошо вот по факту В каком-то смысле это доведено до такого автоматизма что вы уже получите сильнейший если просто Подойдите туда времен РД и без настройки как просто засне в Профит и будете предсказывать вы уже будете

туда времен РД и без настройки как просто засне в Профит и будете предсказывать вы уже будете иметь неплохой Ну также у них Конечно можно настраивать гиперпараметры есть тюнинг там через атю и так далее у них есть документация можно смотреть здесь всякие приме вот при разные штуки по поводу сезонности не сезонности вот там не знаю коэффициенты регрессоров можно читать смотреть примеры по поводу вкладов Да короче классическая документация но у них кстати хорошо написана документация мне нравится

Да короче классическая документация но у них кстати хорошо написана документация мне нравится вот у профита хорошо написана документация Так мы с вами Что будем делать во-первых чтобы Профит запустить у них есть строгая ограничение В каком виде всё это должно быть они требуют лц временной называть D а столбец который является таргетом назвать то есть поэтому я переименовал чтобы меня Профит просто понял далее Также разделил на Рейно и тестовый период по такому же закону и вот здесь запуск идёт

понял далее Также разделил на Рейно и тестовый период по такому же закону и вот здесь запуск идёт смотрите создаём модель класса Профит во время фита подаём сюда данные Да указываем что у меня вот это Я указываю бы сезонном чтобы на предсказание на эмпирически пытается восстановить есть ви я ему даже не указываю Какой сезон он сам пытается е восстановить Я указываю сезонный период ра 12 для того чтобы просто предсказать на п сезонов вперёд всё вот здесь всё это мы делаем то есть вот у меня есть

просто предсказать на п сезонов вперёд всё вот здесь всё это мы делаем то есть вот у меня есть видите как много всего он выдаёт То есть он помимо вашего итогового предсказания да то есть пож это доверительный интервал Ну и короче много всего здесь всякие годовые сезонности которые он вышни и их вклад и прочее ежемесячной сезонности если они есть можно в общем посмотреть в столпцы почитать что они значат вот так да вот здесь обязательно следите что вы указываете Потому что если вы это не укажете

значат вот так да вот здесь обязательно следите что вы указываете Потому что если вы это не укажете у вас съедет и всё будет некрасиво вам сегодня надо будет стоять да предсказывать неделю Ну и всё здесь просто уже отрисовка графика пошла Видите вот как бы с доверительным интервалом он строит Чем дальше заходим доверительный интервал расширяется потому что у нас знания о прошлом будущем уменьшается и сонно риск ошибиться становится больше Ну вот такая вот история получилась тесто 154 модела ВМ

и сонно риск ошибиться становится больше Ну вот такая вот история получилась тесто 154 модела ВМ Т друг другу то есть они из одного диапазона примерно и как бы их точность сопоставима друг с другом поняли да то есть сопоставим как не знаю как предположим Ну по затратам наверно Профит тяжелее Да нет он хорошо написан низко уровне написан скорее нарот затрат будет вот ну здесь у меня просто просто просто атна по факту Ну это не атна как бы это не используем фреймворк атна здесь их внутренний

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

этого кода и вс вот что здесь конкретно в сетке настраивается я ва сейчас сильно грузить не буду там потому что под другим углом называются все коэффициенты так или иначе Вот они связаны либо с трендом либо сезонностью и с их вкладом вот я просто создал сеточку ну и соответственно говоря Потому что сейчас заспамить Ну ладно не будем выключать всё Вот начало спамить что-то он считает логит всё успешно пока идёт для нас перебирает сетку перебирает сетку сес уже должен закончить Ну вот после

успешно пока идёт для нас перебирает сетку перебирает сетку сес уже должен закончить Ну вот после результатов тюнинга Ну получилось улучшить было 15,4 стало 15.0 но не так прям сильно но в общем есть параметры которые как бы дают результат немножечко получше Так что мы здесь с вами имеем Мы здесь с вами имеем следующую историю что А ну как бы просто выведен и тот и другой график сюда то есть авторегрессия про ктоны бы агре как будто держит больше вот такой Темп Да а Профит профт как-то Профит

про ктоны бы агре как будто держит больше вот такой Темп Да а Профит профт как-то Профит как будто Вот вот этот период больше последний держит немножко не видя вот эту историю агре наоборот видит как-то всю глубину предсказания немного разнятся ното так на длинной дистанции будет лучше видно что что по метрике мое получается что на первом месте агресси На втором Кстати вообще взвешенная так скользящее рение то есть Профи Даже хуже чуть-чуть получило чем взвешенного скользящего среднего и на Ну

рение то есть Профи Даже хуже чуть-чуть получило чем взвешенного скользящего среднего и на Ну понятно скользящей средней ещё хуже в принципе у меня всё вот сегодня ещё можете попробовать Запустить какие-нибудь вот эти библиотеки хотя бы одну выбрать особенно Лион я её так и не запускал совершенно Но это она как бы она вообще очень Недавно вышла совершенно о там февраль месяц А февраль месяц когда её этот когда её опубликовали плюс-минус в самом начале короче недавно для того всё остальное уже

её этот когда её опубликовали плюс-минус в самом начале короче недавно для того всё остальное уже очень детерминировано И давно существует так что можете попробовать запустить и рассказать что получилось из этого интересного Так а мы Давайте с вами ещё задание проговори говорим задани что вам нужно будет сегодня сделать Вам нужно будет построить модель которая будет предсказывать предсказывать сумму продаж мебели категори по категории мебе вот у вас будет временной ряд прот но нужно их будет

сумму продаж мебели категори по категории мебе вот у вас будет временной ряд прот но нужно их будет агрегировать и мы с вами будем смотреть современной ряд по неделям и анализировать суммарную выручку по неделям собственно будет построить модель которая как можно лучше чтобы у вас показывала точность Да можно меньше Метрика качества и и средняя декомпозиция понятно автокорреляция это ВС контекст вот строй модель класса потом седьмой Рой модель класса профет восьмое применить нужно регрессионные

строй модель класса потом седьмой Рой модель класса профет восьмое применить нужно регрессионные модели кто дойдёт до этого и не будет понимать как собствен может ко мне обратиться я вам подскажу но можно запустить также или линейную регрессию при правильной подготовке данных [музыка] какую-то другую модель Ну и посмотреть что лучше из этого то есть вот эти библиотеки они Профит тоже конечно ну как бы заточены прямо конкретно для временных рядов Ну и создать приложение в которой пользователь

как бы заточены прямо конкретно для временных рядов Ну и создать приложение в которой пользователь сможет Загрузить свой файл со временным рядом и получить результат предсказания также метрику интерпретацию результата задание на самом деле достаточно большое и у вас 2 дня в распоряжении ктото может за упра может есть конечно для вас задания на такие случаи на такие случаи но найдёте в репозитории завтрашнего дня там соревнование на гл но в целом можете немножко если считаете знаете такой прокси

завтрашнего дня там соревнование на гл но в целом можете немножко если считаете знаете такой прокси день небольшой завтра чтобы выдохнуть там что-то повторить поды тожить для себя Может что-то забыли примерно такой план у нас с вами на эти д дня Угу давай был во по поводу экзамена проекта сейчас там можно доступ Интернет есть можно читать документацию всё это и будет теоретическая проверка най фазе проверка будет она влияет на оценку или такая больше для вас влияет плохо к сожалению не проте

фазе проверка будет она влияет на оценку или такая больше для вас влияет плохо к сожалению не проте даль то есть нет такой пря чёткой конкретности как бы вместе пообщаемся вместе ВС обсудим и придём к единому целому тоже вопроса в прошлый раз а вопросов мне послышалось процентов каких-то оценки Вопросов нет Ну хорошо давайте сейчас с вами поговорим про экзамен поговорим с вами про экзамен вроде все здесь в здании Да так что все меня услышали ват задание прое вмп дасе по котором нужно построить

здесь в здании Да так что все меня услышали ват задание прое вмп дасе по котором нужно построить модель как Настя уже разузнала Раньше это была модель классификатора но возможно что-то поменяется возможно что-то поменяется но нужно как бы понимать весь контекст То есть вы построите модель построите пала все все пункты этого пайла мы уже дальше там ну я один с вами СМИ не справлюсь мне будет помогать Паша мы уже соответственно будем с ми ктото вы сшито вопро например разницу или как работает

Паша мы уже соответственно будем с ми ктото вы сшито вопро например разницу или как работает бустинг внутри как работает бустинг внутри очень популярный вопрос на собеседовани а или там не знаю Объясните метрику к или рокк Ну вот собственно говоря будем щупать щупать все части пайплайн нормировки кодировки модели тюнинг бустинг бенг метрики Возможно чуть-чуть там текстовой части главное знать базу основу но не детали Как написать функцию там такой-то родан Костян прош то есть утром задание

базу основу но не детали Как написать функцию там такой-то родан Костян прош то есть утром задание попго делать и там ближе к вечеру экзамен типа да Или групповой Ну неважно нет нет делайте Все индивидуально Все индивидуально А дальше Т уже проверяем то есть конве потокового просто по очереди в 9 Ну как ретроспектива закончится там не знаю в 9:30 9:40 после этого Садитесь но в зависимости от того как она закончится дедлайн сформируем там примерно 15:30 тире 1600 к этому момен ещё какие вопросы

как она закончится дедлайн сформируем там примерно 15:30 тире 1600 к этому момен ещё какие вопросы по экзамену ну мы про пятницу говорим Да да просто я думаю что мы сегодня с вами вечером не будем созваниваться я не буду вас отрывать по что в принципе как бы мы созвонимся с вами завтра и если вдруг кому-то хочется узнать сегодня что-то про экзамен Поэтому вот можете спросить меня сейчас договорили с вами в среду Если какие-то вопросы ещё ко мне останутся по экзамену Можете написать там в личку

с вами в среду Если какие-то вопросы ещё ко мне останутся по экзамену Можете написать там в личку ещё комментарий Комментарии ещё как бы ну завтра когда мы с вами созвонимся завтра ещё про экзамен Чуть более детально поговорим дату получается просто написать код и потом по коду ответить на вопросы Ну типа того да но ещё надо пробить метрику до определённого значения чтобы она была не ниже определённого уровня Настя а да просто напомню что завтра утро Меня не не планировалось не планиро моё

уровня Настя а да просто напомню что завтра утро Меня не не планировалось не планиро моё присутствие первые 2-3 часа Вот поэтому это будет будет запись это будет лекция Завтра нет у нас не будет лекции никакой мы с вами завтра как обычно поговорим и всё А я имел в виду вечером когда мы подведём итог этих двух дней вот там мы а то есть с утра пофиг да то что я отсутствую Гру Боре Угу с лекции Всё я можно вас поздравить семнадцатая лекция фаза один подошла к концу 34 часа контента примерно где-то

можно вас поздравить семнадцатая лекция фаза один подошла к концу 34 часа контента примерно где-то больше где-то меньше мы с вами в лай режимах больше суток провели на минуточку Да Саша а у нас будет прямо полноценный Лайф кодинг то есть там если у тебя запустился какой-то подбор параметров то это будет прямо всё жда нене нене не то есть вы готовы результат показываете Но я могу что-то попросить тебя запустить конкретно вот ну то что будет 20 минут дождаться Нет конечно мы такого не будем

тебя запустить конкретно вот ну то что будет 20 минут дождаться Нет конечно мы такого не будем делать у нас времени будет не так много а всё по хорошо Я тебя тоже Антоха поздравляю что ты выдержал нас и все эти часы был и был с нами максимально подробным терпеливым к вопросам я рад я рад Стараюсь помогать Давай бу э Какой лучше экзортовый или класк инвокер Ду следующий раз Какой лучше на беду экзортовый или квас Векс это потом окей Всё ладно это потом на экзамене с тобой обсудим это будет те

или квас Векс это потом окей Всё ладно это потом на экзамене с тобой обсудим это будет те пару дополнительных вопросов со звёздочкой со звёздочкой Да подготовлю Так ну что всё тогда наверное Давайте хорошего дня то есть сегодня без созвон но я как бы на на связи Если есть какие-то вопросы пишите спрашивайте Всё Давайте на связи пока-пока

Вот и сегодня мы посмотрим Как реализовать рекомендатель систему которая может использовать какую-нибудь нейросеть на самом деле совершенно никаких новых слоёв или чего-то подобного у нас не будет потому что собственно но не оказалась область рекомендательных систем Настолько специфической настолько как бы требующей каких-то новых подходов как например картинки или как текст и в целом довольно много всего уже Существую какие-то архитектуры вот несмотря на это пара архитектур была предложена мы

всего уже Существую какие-то архитектуры вот несмотря на это пара архитектур была предложена мы сегодня посмотрим на то как их можно реализовать и в общем-то наверное самую популярную архитектуру для рекомендательных систем применим она будет отличаться от того От вчерашнего от того что вы делали Хотя собственно рекомендатель система вот в плане поиска там соседей построе векторных представлений поис соседей тоже можно исз просто это не всегда выгодно из-за их объёма и второе что нам сегодня

поис соседей тоже можно исз просто это не всегда выгодно из-за их объёма и второе что нам сегодня важно Это ещё посмотреть на некоторые метрики но я вчера упоминал мы будем по большому счёту находиться в концепции классификационных исходов и поэтому метрики могут показаться запутанными Но на самом деле это ровно то же самое что вы уже помните из всяких прежевская [музыка] Ну по подавать какие-нибудь по предлагать какие-нибудь объекты вот довольно часто делают ещё таким образом что как бы

по предлагать какие-нибудь объекты вот довольно часто делают ещё таким образом что как бы генерирует Некоторое количество кандидатов Да но кандидатов можно генерировать на самом деле очень простым способом Ну то есть если у нас есть там например как в сфа условно говоря если у нас есть там несколько десятков миллионов песен Мы же не будем все несколько десятков миллионов прогонять чтобы найти те которые пользователю похоже вот мы можем как-то это пространство сократить мы можем порекомендовать

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

деле взять какое-то подмножество кандидатов и это подмножество кандидатов просто прогнать через модель и понять что конкретному пользователю будет интересно а в целом это тоже такое как бы Костыль и он его придумывание связано с тем что слишком большие это эти модели слишком много пользователей но тем не менее такой подход Тоже имеет место и мы мы сегодня его делать не будем Потому что у нас более-менее вменяемый объём данных но такое тоже иногда встречается Значит есть какие-то кандидаты мы

вменяемый объём данных но такое тоже иногда встречается Значит есть какие-то кандидаты мы пропускаем этих кандидатов через обученную сеть Наша сеть должна в каком-то масштабе определить насколько конкретному пользователю понравится какой-то объект и вот здесь э очень важно теперь понять следующую вещь Вчера мы говорили что у нас есть какие-то близкие объекты и близкие пользователя мы могли использовать для этого евклидово расстояние косинус ную близость коэффициент корреляции В общем любую

для этого евклидово расстояние косинус ную близость коэффициент корреляции В общем любую какую-то метрику которое какое-то расстояние нам считает и мы мы не говорили о том что объект Далеко или близко мы просто говорили Если он ближайший и пользователь его не смотрел Давайте порекомендуем Почему бы и нет вроде логика довольно неплохая Теперь же сеть будет не просто искать что-то ближайшее она нам будет говорить что вот вы дали мне какого-то конкретного пользователя и какой-то конкретный набор

будет говорить что вот вы дали мне какого-то конкретного пользователя и какой-то конкретный набор объектов А я эти объекты раздам этим объектам какие-то оценки эти оценки теперь не будут близостью они могут например варьироваться от нуля до единицы ну классический выход сигмоида единичка Да пользователю очень понравится Вот потому что такая комбинация признаков объекта и такая комбинация информации о пользователе кажется очень успешной либо нет пользователю не понравится а тут на самом деле не

о пользователе кажется очень успешной либо нет пользователю не понравится а тут на самом деле не очень важно от нуля это или до единицы потому что это может быть от нуля до 100 от нуля до 10 от мип до пяти То есть тут Это скорее зависит от того какой мы выход повесим на нашу сеть И как мы этот выход будем ти вот а соответственно дальше Всё довольно просто мы берём те объекты которые сеть оценила высоко фигурально выражаясь высоко в каком-то смысле высоко берём это под множество объектов и

высоко фигурально выражаясь высоко в каком-то смысле высоко берём это под множество объектов и рекомендуем собственно пользователю вот всё то что находится ниже какого-то порога считаем что это довольно бесполезные штуки но в рекомендательных системах чаще отсекают что типа Давайте покажем топ-10 а не например Давайте покажем всё то что по вероятности 0 потому что у нас обычно фиксированное какое-то количество позиций для рекомендаций в некоторых рекомендательных системах и это наверное

какое-то количество позиций для рекомендаций в некоторых рекомендательных системах и это наверное свойственно скорее каким-то торговым площадкам вроде маркетов Яндекс маркетов там рисов и всего остального но ещё Наверное это может быть справедливо для каких-то сервисов Вроде вот этих тиктоков и всего остального на самом [музыка] Поль это обычно как бы не Очень касается тех людей которые разрабатывают сами модели то есть Это скорее как бы само построение инфраструктуры мы можем детализировать

сами модели то есть Это скорее как бы само построение инфраструктуры мы можем детализировать процесс потребления пользователя и выделить в нём некоторые уровни у нас как бы если пользователь перешёл на какую-то страничку например на какую-то страничку о книге которую мы ему порекомендовали является ли этот Клик чем-то интересным относительно пользовательского пользовательского поведения Ну вообще говоря он мог туда перейти случайно он мог туда перейти просто посмотреть потому что там какая-то

говоря он мог туда перейти случайно он мог туда перейти просто посмотреть потому что там какая-то яркая обложка А мог перейти потому что действительно заинтересовался Ну то есть эта информация если мы её можем собирать она в целом не является прям совсем безынтересный потому что ну какое-то это поведение пользовательское и мы можем предполагать что если даже один пользователь у нас нажал на кнопочку случайно то там 10.000 пользователей вряд ли случайно куда-то перешли там За какой за

на кнопочку случайно то там 10.000 пользователей вряд ли случайно куда-то перешли там За какой за какие-нибудь сутки поэтому мы можем собирать информацию о том куда пользователь кликал Ну спойлер она конечно собирается во всех сервисах которые изучают и продают что-то и собственно эту информацию Мы тоже можем каким-то образом использовать второе - это собственно вещи которые пользователь купил да А тут конкретно в этой схеме купил и как бы потреби разделены потому что мы можем например в

да А тут конкретно в этой схеме купил и как бы потреби разделены потому что мы можем например в каком-нибудь сервисе купить себе книгу но при этом мы не обязательно её прочитали мы её приобрели и такие Ну вот там когда что-нибудь произойдёт мы эту книгу прочитаем но при этом сам факт покупки он нас достаточно сильно интересует почему потому что это же денежки денежки к нам пришли денежки поэтому это как бы следующий уровень вовлечённости пользователя он не просто куда-то кликнул там что-то

это как бы следующий уровень вовлечённости пользователя он не просто куда-то кликнул там что-то посмотрел и ушёл а он кликнул и ещё и купил и естественно Мы тоже это записывал Ну и третий как бы самая самая глубокая версия обекты которые пользователь потреби пото что если пользователь купил какой-то объект Не факт что он его сразу будет как-то оценивать потому что он ещё в него там не погрузился Да не начал смотреть не начал читать неважно Ну и мы ожидаем что если пользователь какой-то контент

Да не начал смотреть не начал читать неважно Ну и мы ожидаем что если пользователь какой-то контент потреби там вероятнее всего он его как-то Оценил пусть даже Наум Но это Луни мы будем страдать от того что например мы не знаем куда пользователь кликнул Ну просто сама платформа наша не подразумевает сбора такой информации такое сейчас редко бывает Но тем не менее у нас не всегда что-то продаётся иногда вот опять же там по тому как недавно Мы работали над рекомендательной системой там нету как

иногда вот опять же там по тому как недавно Мы работали над рекомендательной системой там нету как бы покупки там пользователь может прийти на страницу и может как-то оценить тот материал который на этой странице предусмотрен поэтому там покупки нет но если она есть конечно мы бы е и получается что у нас как бы есть некоторый уровень вовлечённости пользователей в принципе всю эту информацию Мы можем каким-то образом использовать Потому что те вещи которые на которые пользователь кликал это

можем каким-то образом использовать Потому что те вещи которые на которые пользователь кликал это условно говоря пользовательская репрезентация его вот в нашей логике в логике нашего сервиса Да если мы там Какое представление о нас имеет какой-нибудь там сервис доставки еды что в пятницу вечеро мы заказываем пиццу да то есть мы как пользователи это люди которые раз в 7 дней оставляют какой-то средний чек в основном из этого ресторана Вот и почему собственно довольно часто всё же к нейросетям

чек в основном из этого ресторана Вот и почему собственно довольно часто всё же к нейросетям прибегают потому что нейросети в зависимости от того насколько Вы хорошо умеете как бы конвертировать информацию под тот вход который у вас есть не самом все эти объединять може использовать просто чистый вход в какой-нибудь полносвязный слой потому что ваши признаки являются числовыми Если вы хотите использовать что-то распределённое во времени У вас есть Например какие-то сети которые умеют эту

использовать что-то распределённое во времени У вас есть Например какие-то сети которые умеют эту информацию агрегировать например те же самые СТМ или Трансформеры они хорошо работают с последовательностями и вот как бы попытка использовать нейросети в рекомендательных системах она как раз-таки скорее про то что есть очень много разных форматов данных и эти данные могут быть очень по-разному представлены Поэтому иногда всё-таки к ней ростя прибегают Хотя это конечно позволить себе могут не все

Поэтому иногда всё-таки к ней ростя прибегают Хотя это конечно позволить себе могут не все ну и соответственно если просто пояснить эту схему дальше да то на что пользователь кликал это какие-то его индивидуальные интересы эти индивидуальные интересы подкрепляются тем что он купил вещи которые он потреби это значит Ну и например Оценил высоко это уже повод искать что-то в логике построения ближайших соседей потому что мы знаем что вот Ага если он там пом купил а потом потреби и оценил высоко

соседей потому что мы знаем что вот Ага если он там пом купил а потом потреби и оценил высоко Давайте искать что-нибудь ближайшее и вот с помощью каких-то гибких моделей вроде нейросетей можно эту информацию запросто агрегировать делается ли это только с помощью нейросетей нет абсолютно не обязательно Вы можете придумать модель которая будет собирать часть информации брать предикты из бустинга вторую часть из ска ближайших соседей потом каким-нибудь Кингом вон ВС это объединять и выдавать вам

часть из ска ближайших соседей потом каким-нибудь Кингом вон ВС это объединять и выдавать вам результат то есть это опять же в зави от того какого формата ваши данные А мы сегодня будем прогнозировать в в нашей задаче рейтинг собственно фильма От единички до пяти и ну Ну это тоже обычная совершенно задача но тут она будет у нас как бы являться такой комбинацией одновременно и задачи классификации и задачи регрессии как бы это странно не звучало то есть с точки зрения самой модели основной её

и задачи регрессии как бы это странно не звучало то есть с точки зрения самой модели основной её части это будет задача классификации но с точки зрения выхода мы будем превращать эту задачу в задачу регрессии Значит мы на самом деле сегодня будем строить архитектуру давайте я пока перейду сюда нижнюю часть я прокомментируй мы сегодня будем строить архитектуру которая у нас будет возвращать а сначала число от нуля до единицы то есть на выходе у нас будет обычная сигмоида А после этого число

сначала число от нуля до единицы то есть на выходе у нас будет обычная сигмоида А после этого число полученное вот в этом вот интервале мы будем конвертировать в интервал от единички до пяти Ну это будет делаться у нас довольно простым выражением Мы же понимаем что если у нас есть что-то от нуля до единички мы можем это перевести в любой интервал который нам нужен мы можем его перевести от нуля до 100 от нуля до п от единички до пяти от минус п до плюс п это неважен и получается что как бы у

до 100 от нуля до п от единички до пяти от минус п до плюс п это неважен и получается что как бы у нас архитектурно эта модель будет в первую очередь моделью классификации потому что мы помним что сигмоида отдаёт намм такой э такой интервал но мы будем результат этой сигмоида масштабировать в другой интервал и на самом деле будем использовать функцию потери не бинарной Крос энтропии вот А собственно А какую бы функцию потерь мы здесь могли использовать на самом деле если мы прогнозируем от

А какую бы функцию потерь мы здесь могли использовать на самом деле если мы прогнозируем от единички до пяти что-нибудь то что бы нам подошло сюда так если я успеваю между заданием вопроса и получением ответа сделать глоток кофе поставить кружку обратно Это значит что я попал в нужное место в какое-то Ну мы можем что-нибудь от регрессии прикрутить какой-нибудь МС вдруг Ну да на самом деле Здесь всё довольно просто вот помните когда мы решали задачу позиционирования этих баун боксов у нас там

всё довольно просто вот помните когда мы решали задачу позиционирования этих баун боксов у нас там что было Ну у нас есть какие-то координаты Да эти координаты там тоже в каком-то интервале Ну давайте мы попробуем вот какие-нибудь регрессионные функции потерь использовать что тогда использовали у меня в Дема Это был сглаженный L1 Лос то есть мое фактически средне абсолютная ошибка со сглаженный вот этим ноликом в центре потому что там производной нет А нам дифференцировать нужно кстати вот

вот этим ноликом в центре потому что там производной нет А нам дифференцировать нужно кстати вот функцию первый раз широко использовали в модели rcnn которая собственно тоже для задачи детекции Вот Можем ли мы здесь прикрутить mse в принципе можем Но а что нам мешает мы будем прогнозировать у нас будет выход от нуля до единицы мы будем его масштабировать от единицы до пяти ну и соответственно у нас В итоге будет предикт например там 3,8 да Таргет у нас будет например 4 можем мы между этими

у нас В итоге будет предикт например там 3,8 да Таргет у нас будет например 4 можем мы между этими двумя числами посчитать средне квадратическую абсолютную Любую регрессионную функцию Да вот без проблем Почему бы и нет Вот поэтому у нас сегодня будет такая модель своего рода своего ро вот Ну да вот я в чате вижу МС МС тоже без проблем вообще ещё даже лучше потому что мое и МС они дают нам понимание отклонений в тех же единицах в которых мы работаем как бы квадрат отклонение оценки - Это ни о

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

в чём она заключалась в том что мы можем применить сингулярное разложение и сингулярное разложение даст нам латентные представления вот эти вот представления в меньшем пространстве пользователей и фильмов А дальше каким-то каким-то образом агрегирующие Умно сингуляр матрицу дожить на Вектор фильма прибавить средний рейтинг пользователя То есть это некоторая агрегация вот этого латентного представления в [музыка] прогнозирует тоже самое только с помощью нейронных сетей и действительно у нас

в [музыка] прогнозирует тоже самое только с помощью нейронных сетей и действительно у нас может быть такая архитектура в которой мы что сделаем мы возьмём идентификаторы пользователя и возм понтии поте сф5 пользователь смот филь 92 эти идентификаторы Да и пользователя и фильма являются целыми числами А какие слои на прошлой неделе у вас обрабатывали целые числа слои Инга Да они строили для какого-то индекса ВМ эсом сво в нашем случае в этот раз это будет просто какой-то пользователь который у

индекса ВМ эсом сво в нашем случае в этот раз это будет просто какой-то пользователь который у нас есть в базе есть у нас пользователь 100 можем мы попросить им бенг построить для этого пользователя векторное представление Почему бы и нет поэтому мы будем брать пользователей и соответствующие фильмы которые они посмотрели и пропускать их через через слой динга соответственно это вот можем [музыка] мне каждого пользователя в вектор размера 32 и преврати мне каждый фильм в вектор размера 32 то

мне каждого пользователя в вектор размера 32 и преврати мне каждый фильм в вектор размера 32 то есть мы фактически переходим От каких-то категориальных данных индексы - это просто категориальные данные мы переходим От категориальных данных какие-то векторные представления и после этого на самом деле дальше мы вообще Делаем всё что хотим мы конвертирова наши входящие данные в полносвязный векторы Ну не полносвязный А вот эти денс У меня всё время крыша немного едет типа потому что плотные

Ну не полносвязный А вот эти денс У меня всё время крыша немного едет типа потому что плотные вектора потому что вот этот вот Вектор типа вектор называется спарс Вектор в английском языке разреженный а выход динга называется дес то есть плотный поэтому я е всё время путаю с полно связано вот спарс он потому что здесь очень много нулей поэтому он разреженный спарс Вектор вот Люба я может быть то есть смотри вот мы когда тексты кодировали Там же эмбеддинг были очень интеллектуальные то есть

то есть смотри вот мы когда тексты кодировали Там же эмбеддинг были очень интеллектуальные то есть векторы были тем ближе чем Ну как нам нужно по тексту по крайней мере Здесь также да получается Ну вообще говоря мы ожидаем что пользователи которые соотве Ну близки к друг другу по интересам то есть иначе говоря близки к оценкам Ну там все посмотрели много там ужасов Да и всем поставили высокую оценку мы содержатель на самом деле от Поль от этих векторов ожидаем то же самое что те пользователи

мы содержатель на самом деле от Поль от этих векторов ожидаем то же самое что те пользователи которые посмотрели и схожим образом оценили какой-то Хорошо Сильно пересекающиеся набор фильмов то они в пространстве будут ближе чем те которые совсем друг на друга по поведению не похожи мы не можем быть в этом уверены Это зависит от того как сеть обучится но ожидания наши абсолютно такие же как вот с текстом слова близкие по смыслу будут близко слова далёкие по смыслу будут далеко тоже использу нет

текстом слова близкие по смыслу будут близко слова далёкие по смыслу будут далеко тоже использу нет здесь мы будем использовать будем использовать обучаемые Им бедин просто прям пай торский слой им бенга но в целом для векторизации в рекомендательных системах часто берто подобные модели используют они не называются Берт потому что Берт Для текста но основанные на такой же идее да такие модели есть но они кстати говоря намного менее универсально Потому что если вы там работаете с русским языком

но они кстати говоря намного менее универсально Потому что если вы там работаете с русским языком У вас есть там условно говоря 10 моделей пожалуйста сре всего они будут показывать какой-то близкий скорее всего неплохой результат Вот почему потому что они обучены на русском языке а взять датасет пользователей которые у нас есть и тут и там и везде это сложная задача то есть они как правило всё-таки там построены для ка какого-то конкретного датасета Окей значит после того как мы получим вот эти

там построены для ка какого-то конкретного датасета Окей значит после того как мы получим вот эти векторные представления наших пользователей и фильмов Даше делат всё что угодно сама по себе нейронная коллаборативная фильтрация почему так называется Потому что если во вчерашнем примере сингулярный разложением мы брали векторное представление пользователей векторное представление фильмов и у нас там были какие-то сингулярные значения мы их комбинировать втроём теперь у нас нет сингулярных

нас там были какие-то сингулярные значения мы их комбинировать втроём теперь у нас нет сингулярных значений Но на самом деле это неважно Почему Потому что мы опять взяли векторные представления наших объектов которые участвуют в потреблении рекомендациях и дальше мы их комбинируем у на с вязаными слоями функциями активации СП кокми вообще всем Чем захотим и оказалось что эта идея она собственно Не сильно далеко по успеху ушла от обычного сингулярность есть достаточно такой хороший плюс в том

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

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

будем прогнозировать какой-то какой-то предикт у нас как бы датасет будет заключаться в том что пользователь 100 посмотрел фильм 45 Оценил его например на 5 пользователь 100 посмотрел фильм 92 Оценил его на ри соответственно для этой пары предикт будем сравнивать с этим таргетом для второй пары будем сравнивать с этим таргетом и так далее вот Уч пользователь фильм какая-то оценка которую пользователь поставил этому фильму типичная задача обучения с учителем очень похожую модель кстати сегодня в

поставил этому фильму типичная задача обучения с учителем очень похожую модель кстати сегодня в демо у нас будет Поэтому мы посмотрим как её реализовывать значит дальше от по-моему если мне память не изменяет Гугла но в целом это не сильно важно появилась такая общая обзорная скажем так публикация по поводу того Каким образом строить рекомендательные системы если хотите это сделать с помою нейросетей они на самом деле фактически Ничего нового не сказали а просто как бы в некоторых терминах

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

более заре средний чек который пользователь оставляет в день в неделю в месяц неважно в какой-то период это ВС там или не знаю те же самые оценки которые пользователь расставляет это ВС Такие показатели которые имеют совершенно однозначную интерпретацию пользователя очень классный вовлечённость вот такие оче хорошие очевидные призна Дава будем юто СЖ моде вот э признаки пропустим их через один полносвязный слой Ну условно один там их может быть несколько Но самое главное что это не какая-то

полносвязный слой Ну условно один там их может быть несколько Но самое главное что это не какая-то гигантская модель и потом применим какую-нибудь функцию активации раз это признаки очень хорошо интерпретируемые Это значит то что простого линейного преобразования должно быть достаточно для того чтобы получить какой-то хороший агрегированный результат если у нас Наряду с такими признаками присутствуют какие-то более сложные признаки прое его географическое расположение Ну то есть что-то такое

какие-то более сложные признаки прое его географическое расположение Ну то есть что-то такое категориальное категориальных На самом деле признаков всегда больше чем числовых иначе как бы всё было бы слишком легко поэтому если у нас есть вот такая сложная комбинация признаков где вроде есть что-то и очень простое и что-то довольно сложное давайте мы простые признаки будем обрабатывать опять же каким-то очень простым преобразованием здесь может быть даже обычная Линейная регрессия собственно тоже

очень простым преобразованием здесь может быть даже обычная Линейная регрессия собственно тоже самое что полносвязный слой а те признаки которые имеют какую-то сложную природу мы будем обрабатывать Сначала с помощью им бедин гов потом через пропускать через какое-то количество скрытых слоёв там свёртки не свёртки Неважно а результаты тоже будем каким-то образом агрегировать Ну и Третий вариант когда мы работаем совершенно в каком-то сложном пространстве признаков где буквально одни

вариант когда мы работаем совершенно в каком-то сложном пространстве признаков где буквально одни категориальные признаки тогда у нас ничего не остаётся как просто использовать ну что-то Похоже на то что было на предыдущем слайде будем все категориальные признаки обрабатывать им бенга Да дорого Да долго обучается вычислитель затратная и так далее Но если у нас такие признаки мы вынуждены использовать какие-то модели которые эти признаки могут хорошо обработать и в таком случае у нас не будет

какие-то модели которые эти признаки могут хорошо обработать и в таком случае у нас не будет вот этой вот части которая условно называется мо когда мы обрабатываем в ширину просто берм все признаки которые есть и преобразованием их агрегирования Ну на деле на самом деле если говорить о том какие модели популярнее всего популярнее всего наверное какие-то подходы ближе вот к этому потому что понятно что ну какие-то простые признаки у нас всегда всё равно есть потому что мы либо что-то продаём

что ну какие-то простые признаки у нас всегда всё равно есть потому что мы либо что-то продаём либо замеряем Сколько человек времени потратил там на на наш сервис и так далее тут как бы как я в начале сказал в этой публикации идёт скорее просто такое сари того что люди используют то есть вот эти White and Deep - это такие как бы термины которые просто говорят о том что вот у нас есть Deep Models многослойные которые там плотно обрабатывают им бедин есть White Models легковесные модели которые

многослойные которые там плотно обрабатывают им бедин есть White Models легковесные модели которые интерпретируют простые признаки То есть это не конкретные архитектуры Это скорее общий взгляд на то как это может быть устроено Окей Давайте последнюю модель она тоже является довольно популярной но по большому счёту она является одной из реализаций как раз-таки вот этого подхода White and Deep который по центру по-моему её Facebook что ли при это представил миру но в ней нет Совершенно ничего

по центру по-моему её Facebook что ли при это представил миру но в ней нет Совершенно ничего такого нового и супер супер супер такого изысканного значит берём числовые фич числовые под числовыми я подразумеваю те которые очень легко интерпретируются понятным человеку языком пропускаем их через какой-нибудь э там полносвязный слой или стек полносвязный слоёв в зависимости от того сколько у нас данных Там и так далее берём категориальные фичи категориальные фичи будем пропускать через слои им

данных Там и так далее берём категориальные фичи категориальные фичи будем пропускать через слои им бедин и пусть каждая каждый категориальный признак у нас будет представлен каким-то вектором который нам отдаст ибен Даше выход с вот этой вот части которую условно я называю White Model Да отправляем в блок который называется попарное взаимодействие кто может вспомнить что бы это могло очень сильно напоминать что ещё где считалось попарно Ну мне напоминает do prod convolution мне от новый слой

напоминать что ещё где считалось попарно Ну мне напоминает do prod convolution мне от новый слой какойто но технологи засчитано Последнее слово не засчитано do prod что был а ан да Видите Саша даже поражённый хворь вспомнил на самом деле да что такое в своей центральной части это просто скалярное произведение между выходами Q выходами ки да и это скалярное произведение пропущенное через софт Мак говорит нам о том как у нас во входящей последовательности слова относятся к друг другу если взять в

нам о том как у нас во входящей последовательности слова относятся к друг другу если взять в общем как элементы последовательности взаимодействуют друг с другом как собственно и там какие-то другие виды ан они все примерно про одно и тоже И вот здесь вот под с икм а подразумевается не анш но как один из вариантов Вот это реализации вот этого блока просто скалярное произведение то есть мы там пришёл к нам пользователь определённого возраста Давайте представим что здесь просто одна числовая фича

к нам пользователь определённого возраста Давайте представим что здесь просто одна числовая фича простоты ради и там знаем что к нам пришёл пользователь там как я не знаю пусть он работает Пусть он студент какой-нибудь и пусть этот студент там является какого-то не знаю какой-нибудь географической принадлежностью Вот обработка числовая его возраста и обработка им бедин его каких-то категориальных признаков И после этого Вот это вот попарное произведение оно нам Что даст оно нам даст что в

признаков И после этого Вот это вот попарное произведение оно нам Что даст оно нам даст что в процессе обучения как бы модель будет понимать что если к нам пришёл какой-то человек определённого возраста да то он может быть студентом Вот с таким как бы шансом там я не знаю пенсионером с таким шансом он может быть с географической там позиции вот как бы ну с таким шансом всё это нам даёт как раз-таки Dot product мы говорим что вот Вектор пользователя которому там 20 лет А вот Вектор того что он

Dot product мы говорим что вот Вектор пользователя которому там 20 лет А вот Вектор того что он пенсионер Я не знаю там какой-нибудь чиновник и так далее Вот то есть вот это попарное взаимодействие оно на самом деле очень близко по своей сути к Анну Вот и по сути просто как бы замеряет то насколько у нас в зависимости от ээ разнообразия признаков могут эти признаки между собой комбинироваться и могут ли они успешно описывать тех пользователей с которыми Мы работаем Ну а дальше всё как обычно

могут ли они успешно описывать тех пользователей с которыми Мы работаем Ну а дальше всё как обычно любят в плен выход отсюда мы а точнее выход из вот этого White Model мы с fairways икм вот здесь вот как-то связали Пусть скалярным произведением Неважно а этот же чистый выход конкатенировать с выходом SP pairwise interaction пропустили ещё через какой-нибудь набор слоёв и Ну в данном случае спрогнозировали Клик probability То есть то что пользователь куда-то Клик нет вот и надо сказать что вот

Клик probability То есть то что пользователь куда-то Клик нет вот и надо сказать что вот эта модель dlm она является достаточно э ну достаточно рабочей лошадкой потому что с одной стороны в ней ничего нового нет никаких новых слоёв или супер каких-то классных фантастических идей но появившись она в общем показала что её очень легко масштабировать Вы можете её делать маленькой можете делать большой в ней есть а гиперпараметры который удобно проверить это может быть либо Dot product либо

большой в ней есть а гиперпараметры который удобно проверить это может быть либо Dot product либо косинусная а сходства если мы о по парном взаимодействии говорим вот и на самом деле даже если вот стать это прямо скрин из э статьи и здесь очень просто она описана что пусть наши пользователи и продукты будут описаны большим количеством непрерывных и категориальных фичей чтобы обработать категориальные фичи каждая категориальная фича будет как бы представлена с помощью им бенга Вот и значит

фичи каждая категориальная фича будет как бы представлена с помощью им бенга Вот и значит обобщающая концепцию латентных факторов которые используются в матричном разложении то есть тоже самое что нейросетевой подход к разложению матриц чтобы обработать непрерывные фичи Они будут как бы трансформированные MLP тилер птн просто последовательность пно связаных слов Вот и они будут там они у них такой же размерности как и Короче размерности между собой совпадают это простоты ради вот Ну и всё

такой же размерности как и Короче размерности между собой совпадают это простоты ради вот Ну и всё дальше типа Second Order interaction соответственно это у нас вот эта вот штука в эти в их репозитории можно посмотреть что вы можете выбрать какой-то подход к этому Second Order Inter Scale product Sity там что-то ещё есть у них можно своё что-нибудь реализовать то есть в целом в модели ничего нового но оказывается что Она довольно универсальна То есть у всех есть числовые И категориальные фичи

но оказывается что Она довольно универсальна То есть у всех есть числовые И категориальные фичи вот пожалуйста модель которая и то и то умеет обрабатывать Вот и Пожалуйста смотрите они даже тоже пользуются сигмоида представляете в Фейсбуке кто-то пользуется сигмоида так же как и мы вот а Ну на самом деле по моделям Всё Давайте вопросы какие-нибудь Окей тогда идём дальше собственно чуть-чуть про метрики качества рекомендаций метрик качества рекомендаций довольно много и их не все одинаково

про метрики качества рекомендаций метрик качества рекомендаций довольно много и их не все одинаково успешно можно замерить потому что вот всё то о чём мы говорили до этого они как бы эти метрики касались у нас того что у на какой-то Валида набор данных и Сегодня у нас тоже будет валидация довольно часто приходится собирать данные для вычисления метрик уже после того как вы какую-то модель задеплоил Ну это означает то что опять же вот у нас есть какой-то сервис рекомендации мы пользователю

Ну это означает то что опять же вот у нас есть какой-то сервис рекомендации мы пользователю который к нам пришёл что-то порекомендовали У нас есть какой-то процесс какой-то а тестирования Да в котором мы одним пользователем показываем блок с рекомендациями нашей модели а другим пользователям показываем условно говоря Рандомные какие-то материалы на которые они в том же в том же блоке на сайте а дальше начинается самое интересное у нас в процессе того как мы с этим работаем Нам нужно замерить

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

сделать из них новую валидацию выборку Ну понятно почему Да потому что мы-то проверили у себя всё в так называемом оффлайне А метрики рекомендаций мы же их получаем через онлайн мы же не можем никак по-другому понять работает алгоритм или нет не пустив как бы в в этот алгоритм пользователей Вот но на самом деле концепция везде Очень похожая А мы разберём две самые простые метрики которые вам нужно будет сегодня реализовать но у меня в материалах есть метрики более сложные и на хабре есть ссылка

будет сегодня реализовать но у меня в материалах есть метрики более сложные и на хабре есть ссылка на Хабр где они описаны в общем-то там на самом деле всё про одно и тоже Нам нужно вспомнить что у нас в случае классификация есть несколько исходов У нас есть исход True и в терминах рекомен рекомендательных систем это будет звучать так мы что-то пользователю порекомендовали и пользователь правда Оценил это высоко под Оценил высоко мы можем считать оценку в пять то что он перешёл то что он купил

это высоко под Оценил высоко мы можем считать оценку в пять то что он перешёл то что он купил тут надо абстрагироваться от конкретного Исхода false POS мы пользователю что-то подсунули а пользователь либо Оценил низко Ну либо вообще прошёл мимо Да мы ожидали Клик а там нолик никакого клика не было и мы пользователю что-то не порекомендовали а он демон сам нашёл и сам посмотрел То есть это у нас тоже может какую-то роль играть все понимают что почему здесь нету Ну это не имеет места быть что мы

может какую-то роль играть все понимают что почему здесь нету Ну это не имеет места быть что мы не порекомендовали есть нем что он не сделает того с тем объектом который он не видит То есть это этой ситуации просто не может возникнуть и что кстати на самом деле усложняет в некотором смысле подход к измерению рекомендательных систем потому что всё относительно Просто если вы сдаёте анализы Да True негатив нет анализы показывают что вы здоровы Не болеете и вы Не болеете очевидный классный исход А

негатив нет анализы показывают что вы здоровы Не болеете и вы Не болеете очевидный классный исход А когда мы Кстати у нас ещё в какой задаче не было Т негатива Кто помнит детекция Почему что бокс объекта нету и бокса нет Что такое ну да ну собственно на самом деле тоже самое объекта нет А если объекта нет Как мы можем Ну сказать модели что не надо ничего рисовать Но она как бы ничего и не должна хороо знат здесь вспомнили нено ввести мины которые рекомендательных системах используются значит вы

знат здесь вспомнили нено ввести мины которые рекомендательных системах используются значит вы в этих двух очень похожих словах будете путаться первое время это нормально потому что нужно Ну как скороговорка Короче нужно много раз их произнести в разных комбинациях чтобы запомнить У нас есть термин который называется релевантные объекты это те объе Мы это знаем Из просто валион части то есть что значит релевантные объекты вот мы можем считать что релевантный объект - Это ам 4 или ам 5 Почему

значит релевантные объекты вот мы можем считать что релевантный объект - Это ам 4 или ам 5 Почему Потому что это то что пользователь Оценил высоко эти объекты ему релевантны то есть они действительно представляют для него интерес второй термин это рекомендованные объекты это те которые модель сошла интересными для пользователя то есть прогноз модели заключается в том что вот она дала какую-то величину и мы на основе этой величины считаем что эти объекты пользователю интересны в данном случае

и мы на основе этой величины считаем что эти объекты пользователю интересны в данном случае какие объекты могут быть могут считаться рекомендованными Ну наверное вот 4,5 4,3 Да если мы округляем там и считаем что всё больше или равно четырём в таком случае 3,5 3 и6 тоже будут рекомендованными потому что если мы от 3 и п возьмём раунд мы получим четыре а четыре мы считаем неплохой оценкой Понятное дело что е Шкала там от единицы до де от нуля до единицы это все параметры варьируют Значит

дело что е Шкала там от единицы до де от нуля до единицы это все параметры варьируют Значит релевантные те которые правда интересны пользователю рекомендованные те которые по мнению модели будут интересны пользователю и теперь первый первая Метрика Значит она называется и в добавляется Вот такая приставка 055 095 и так далее что мы в таком случае делаем давайте считать что рекомендованными мы будем обозначать только те объекты у которых прогнозный рейтинг больше 3,5 по аналогии тому что я

будем обозначать только те объекты у которых прогнозный рейтинг больше 3,5 по аналогии тому что я сказал на предыдущем слайде делаем раунд от 3 с по полу мы говорим что вот эти вот объекты у нас являются рекомендованными дальше мы в Жене смотрим долю релевантных элементов долю тех элементов которые пользователю интересны среди первых к рекомендованных к у нас будет Вот здесь фигурировать в данном случае у меня приси Да потому что я говорю что хочу посчитать на тройке рекомен Поэтому в качестве

случае у меня приси Да потому что я говорю что хочу посчитать на тройке рекомен Поэтому в качестве вычисления метрики у меня сюда попадает первый объект 4,5 у него топовый рейтинг второй по рейтингу 4,3 третий 3,6 вот этот попавший сюда 3,5 Несмотря на то что он по моему порогу является рекомендован у меня не попадает потому что в данном случае у меня Поэтому вот три объекта на которых я буду считать престижем и теперь мне нужно посмотреть долю релевантных то есть долю действительно тех

считать престижем и теперь мне нужно посмотреть долю релевантных то есть долю действительно тех объектов которые пользователю нравятся среди тех которые я порекомендовал фактически здесь релевантный объект минус не попал модель говорит что пользователь оценит это на 2,3 он оценил на самом деле на четыре дальше а It 2 пользователь Оценил наче Я считаю что модель попала потому что она она порекомендовала бы этот объект пользователю дальше Вот эту тройку не работает не получается не попала дальше

бы этот объект пользователю дальше Вот эту тройку не работает не получается не попала дальше двойка что здесь получается ошибка да то есть это тоже Я не учитываю и дальше пятёрка пятка совпала То есть получается что какова доля релевантных элементов среди рекомендованы K у меня равно 3 значит в числителе у меня будет два где я совпал совпал Я вот здесь вот и совпал вот здесь вот поэтому мой prision равен 066 собственно что и написано вот здесь понятна идея Если бы у меня к равно че было то

равен 066 собственно что и написано вот здесь понятна идея Если бы у меня к равно че было то какой бы у меня был пресижн это 4 0 если бы у меня было 4 Ну да да бы мой упал потому что у меня бы сюда Если бы у меня было Топ 4 то есть ра 4 то вот этот вот объект У меня бы стал тоже рекомендованным но при этом этот рекомендованный объект не релевантен пользователю поэтому здесь бы у меня стало а числитель не поме Ой просто 05 понятна идея вот если вдуматься это тот же самый который у нас был на

не поме Ой просто 05 понятна идея вот если вдуматься это тот же самый который у нас был на классификации на обычной какова доля настоящих положительных ответов среди тех которые модель назвала положительными вот ну здесь есть ограничение на потому что все понимают Зачем нам нужно ограничение на почему мы не можем вот у нас не знаю к там не трём а не знаю миллион миллион книг У нас есть потому что юзеру не нужно столько книг ну да мы же не будем обрабатывать столько мы будем обрабатывать только

юзеру не нужно столько книг ну да мы же не будем обрабатывать столько мы будем обрабатывать только то что лежащее ну ну не репрезентативной во-первых долго во-вторых что нам даст э информация Нам же нужно порекомендовать какие-то самые ближайшие проду Ну на самом деле предыдущие два аргумента тоже вполне себе имеют смысл но тут наверно ближе всего как бы к моей точке зрения вот Серёж ответ потому что Ну действительно если мы возьмём все объекты которые у нас есть в нашем сервисе И начнём

потому что Ну действительно если мы возьмём все объекты которые у нас есть в нашем сервисе И начнём считать PR Да пользователь у нас прочитал 20 книг у нас 40 этих книг Вот и будем наме 8000 Да ну потому что какую-то часть моде отсе естественно но какие-то ВС равно будут с высоким рейтингом поэтому мы здесь не можем пока не ограничивать Ну и как правило всё-таки рекомендации - это не что-то супер бесконечное Да в любой рекомендательной штуке даже в каких-то довольно мощных там которые именно

бесконечное Да в любой рекомендательной штуке даже в каких-то довольно мощных там которые именно лентой могут Вам подгружать эти рекомендации там в определённый момент там Если вы YouTube будете 2 часа Вот заж и будете на сайте прова там уже на четвёртой странице будет очень что-то абстрактно напоминающее ваш интерес вот просто потому что алгоритм в этот момент уже перестанет работать потому что бессмысленно уже для такого масштаба пост мне Почему сложилось мнение что к должен подбираться от

бессмысленно уже для такого масштаба пост мне Почему сложилось мнение что к должен подбираться от размера эволюционной выборки Ну потому что иначе мы будем его искусственно раздувать Это так или нет обычно к находится в пределах Аля 3 5 10 20 он не подбирается как-то пропорционально подбирается потому что как правило количество позиций рекомендаций оно имеет некоторое ограниченное пространство Если у тебя есть ситуация в которой у тебя Ну там я не знаю та же самая условно бесконечная Лента где

у тебя есть ситуация в которой у тебя Ну там я не знаю та же самая условно бесконечная Лента где можно сутки мотать вниз и там что-то будет похожее вот там это очевидно делается каким-то другим алгоритмом потому чтоэто имеет смысла нам бом обетов 510 там ну может быть 100 где-то Обычно я встречал там 5-10 где-то так О'кей значит с престижным более-менее Ясно Ну раз престижен такой простой Тогда я жду от вас что такое рекол кто мне объяснит что такое рекол визуально Тоже самое по циферка Ну по

я жду от вас что такое рекол кто мне объяснит что такое рекол визуально Тоже самое по циферка Ну по циферка да но содержатель нет ну наоборот мы смотрим блин сечас нет заб это Говори Ну мы левая колонка знаменателя Да пра права вро Вычислите Ну да смотрим на его действия мы смотрим Какой процент из его действий мы как бы угадали спрогнозировали правильно то есть Ну то есть мы берём Рейн и там три три действия с тремя товарами он действия совершил Вот Потом мы смотрим Ну мы рекомендовали три

три три действия с тремя товарами он действия совершил Вот Потом мы смотрим Ну мы рекомендовали три товара справа зелёненькие Мы спрашиваем себя из того с кем он взаимодействовал сколько мы ему нареком что мы из трёх которые слева нареком два которые спра Да правильно То есть получается что если условно говоря вот здесь вот мы отталкивались вот от этой колонки Да тут мы говорим что так пользователь у нас сделал Раз 2 3 Давайте теперь посмотрим что вот этот пользователь сделал 1 2Т и какова доля

у нас сделал Раз 2 3 Давайте теперь посмотрим что вот этот пользователь сделал 1 2Т и какова доля релевантных вот этих вот элементов среди всех в общем это вот очень сложно сформулировать какова доля релевантных элементов то есть вот тех которые с которой пользователь как-то Оценил высоко среди всех релевантных присутствующих в первых к то есть теперь мы фиксируем всё то что у нас есть в этой области и говорим Ага вот здесь вот получилось угадали здесь угадали и получается что мы угадали но

области и говорим Ага вот здесь вот получилось угадали здесь угадали и получается что мы угадали но теперь у нас какова доля релевантных среди тех которые присутствуют в правой колонке это раз и два а всего таких было три есть это те же самые 2/3 Да почему Ну просто потому что вот Всего их было три и две из них они оказались в рекомендациях поэтому это те же самые будут 2/3 получается л должен быть типа доля релевантных среди рекомендованных аре среди всех релевант то есть вот мы посмотрели что

типа доля релевантных среди рекомендованных аре среди всех релевант то есть вот мы посмотрели что у нас совпадают Раз и два всего релевантных элементов У нас вот вот ну типа вот оно совпадение да Раз и два но мы говорим что вот только вот эти два релевантных среди всех вот этих релевантных оказались успешными То есть это доля как бы внутри вот этой же колонки по сути только числитель мы определяем по вот этим вот совпадения а знаменатель по всем которые пользователь Оценил высоко То есть если

по вот этим вот совпадения а знаменатель по всем которые пользователь Оценил высоко То есть если бы мы например Сказали бы не знаю Ну давайте какой-нибудь там попробуем скажем что вот здесь у нас пользователь тоже Оценил наче если он оценил наче мы считаем что это хороший результат но опять же да сколько у нас релевантных элементов У пользователя всего 2 4 элементов оказалось в рекомендациях Раз и два соответственно 2/4 4 берётся Вот отсюда А две берётся по количеству совпадений Понятно В целом

два соответственно 2/4 4 берётся Вот отсюда А две берётся по количеству совпадений Понятно В целом Да О'кей Ну даже если непонятно сегодня придётся ручками написать эту метрику Поэтому будет понятнее так Ну на самом деле Наверно Наверное всё вот [музыка] публикация задача рекомендации очень тесно связана с задачей ранжирования Вот и на самом деле Задача рекомендаций В каком-то смысле даже родилась из задачи ранжирования потому что мы можем в терминах рекомендаций рассматривать даже поисковую

из задачи ранжирования потому что мы можем в терминах рекомендаций рассматривать даже поисковую выдачу этом за сыл то есть какие-то объекты которые нам могут быть интересны вот тут вот в этой статье довольно много формул но здесь и как бы объяснено и таким человеческим языком Я бы рекомендовал после того как вопросов станет прям Ноль по жену Ире Колу Я бы рекомендовал почитать про две е такие метрики они не совсем пря вот из рекомендательных систем Но из ранжирования это Метрика ndg и

такие метрики они не совсем пря вот из рекомендательных систем Но из ранжирования это Метрика ndg и соответственно её так не а она здесь сразу разбита значит вот это cg dcg и ndcg по большому счёту сейчас используется Только последняя но чтобы понять В чём логика как бы того как она развивалась вот этот раздел Я бы рекомендовал почитать и дальше здесь идут такие уже метрики ну вот я в жизнь даже я эту метрику знаю буквально из этой публикации Ну и то я её никогда не применял поэтому я прочитал

я эту метрику знаю буквально из этой публикации Ну и то я её никогда не применял поэтому я прочитал и через 7 минут забыл вообще что это такое вот тут можно посмотреть как про как корреляции могут быть использованы для решение этой же задачи Это вас немножечко отправит на первую фазу вот Ну и дальше тут в общем много много много всего но я так думаю что в целом типа это такие три самых главных метрики в рекомендательных системах Поэтому если вы с ними проблем не испытываете то наверно всё будет

в рекомендательных системах Поэтому если вы с ними проблем не испытываете то наверно всё будет неплохо Вот Ну значит резюмируя по рекомендатель системам на самом деле генеральная проблема две генеральных проблемы рекомендательных систем это тот факт что человек очень иррациональное животное которому невозможно угодить ич часто Ну просто неприменимо вот как вчера я приводил пример Да посмотрел там первую матрицу класс любой алгоритм скажет посмотри вторую матрицу а вторая Матрица вот человеку не

первую матрицу класс любой алгоритм скажет посмотри вторую матрицу а вторая Матрица вот человеку не нравится да потому потому потому Хотя по всем признакам которые характеризуют эти фильмы они являются близкими вот в этом случае может быть некоторое непонимание между пользователям и рекомендательной системой и второе фактически в рекомендательных системах можно использовать абсолютно любой алгоритм Если вы сумеете представить данные для этого алгоритма в том виде в котором он их принимает на

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

Давайте спрогнозируйте поставит пользователь чему-то определённому какому-то определённого объекту Если у вас есть какая-то последовательность Используйте временные ряды рекуррентные сети Трансформеры свёрточные сети опять же если вы поймёте как представить для них данные никаких проблем то есть у рекомендательных систем нету какого-то алгоритма вот как там я не знаю Вы знаете что Логистическая регрессия решает задачу классификации и в целом можно там каким-то способом под неё подстроить данные

решает задачу классификации и в целом можно там каким-то способом под неё подстроить данные и попытаться эту задачу решить и в рекомендательных системах нету такого алгоритма поэтому тут очень много и часто фантазии нужно применять и в общем даже в рекомендательных системах очень часто используется в буквальном смысле Вонг да давайте возьмём несколько выходов моделей вот а по теории у меня всё так код сразу смотрим или перерыв делаем я думаю можно сразу сегодня короткая лекция да давайте сразу

код сразу смотрим или перерыв делаем я думаю можно сразу сегодня короткая лекция да давайте сразу Давайте сразу мы правда лишаем Сергея возможности встать на а Ясь Так ну что датасет вчерашний А у меня здесь а про это я уже говорил Да у меня есть во внешнем во внешней папке функции Поэтому чтобы они нормально при пересохранить я использую вот эти две строки чтобы обновлялись так А собственно вот отсюда я импортируют мой файлик с моими функциями рекомендации То есть это функции которые уже

вот отсюда я импортируют мой файлик с моими функциями рекомендации То есть это функции которые уже работают на основе модели обученные Там и так далее А у меня Device CPU всякую загрузку здесь я пропущу Значит мы будем реализовывать модель Ну она уже в принципе реализована не то что мы прямо будем её реализовывать а она будет у нас вот такого вот формата Значит первое что мне нужно - это взять пользователей и взять э соответствующие им фильмы и взять Таргет То есть как конкретный пользователь

и взять э соответствующие им фильмы и взять Таргет То есть как конкретный пользователь Оценил конкретный фильм на определённое количество баллов У меня есть вот такой вот это у меня ame очень простое представление у него идентификатор пользователя идентификатор фильма рейтинг и время Ну время мне в принципе не нужно я буду пользоваться вот этими тремя колонками и для того чтобы подать на вход и попросить мою се превратить каждого пользователя в какой-то вектор это СН я должен ему передать число

мою се превратить каждого пользователя в какой-то вектор это СН я должен ему передать число уникальных пользователей на прошлой неделе вот это число уникальных пользователей который у меня сейчас звучит это у вас было число уникальных слов для какого количества слов этому слою предстоит строить векторные представления и вот здесь вот я делаю две переменных датафрейма плю о Почему плю о потому что у меня индексация пользователей их дишни начинаются с единички Адин всегда ждёт что они начинаются

у меня индексация пользователей их дишни начинаются с единички Адин всегда ждёт что они начинаются с нуля поэтому у меня здесь могло бы быть два выхода Я бы мог либо из всех идентификаторов фильмов и юзеров вычесть единичку А могу просто как бы сделать параметр таким который съест я выбираю второй вариант потому что это проще для понимания и проще для дальнейших там для дальнейшей рекомендации Итого у меня в датасете 944 пользователя и всего 1683 фильма дасе у меня обучение и валидации выглядят

у меня в датасете 944 пользователя и всего 1683 фильма дасе у меня обучение и валидации выглядят идентично мне интересны вот эти вот тройки моих данных Понятное дело что это супер экстремальный случай рассчитывать на то что модель очень хорошо научится по номеру пользователя номе фильма строить какие-то классные предсказания не приходится Вот Но дальше уже ваша фантазия чтобы работать с этим датам Мне нужно реализовать собственный ласс датасета Я его называю movet я сюда буду передавать дата

Мне нужно реализовать собственный ласс датасета Я его называю movet я сюда буду передавать дата указываю в каких колонках у меня юзеры колонка но it колонка о и тин колонка 2 присваиваю datame как часть этого класса а здесь просто добываю как бы ну распечатываю инвертирующий числа и отправляю на девайс То есть я здесь создаю три по большому счёту вектора Да это User tenser item tenser и Target эти векторы - это просто колонки из моего датафрейма я расх их на три переменных длину делаю обычным

векторы - это просто колонки из моего датафрейма я расх их на три переменных длину делаю обычным способом И в Get ко мне приходит индекс Я из этих трёх векторов возвращаю идентификатор пользователя идентификатор фильма какую оценку конкретный пользователь поставил конкретно мой фильм и всё тут у меня два создаются дата дата Лора 128 данные Элементарные даже не близко картинки даже 28 на 28 поэтому можно ставить довольно большим Давайте вопрос Вот по этому дасе я только технически Мы здесь уже

можно ставить довольно большим Давайте вопрос Вот по этому дасе я только технически Мы здесь уже можем не заморачиваться видеокартой это всё слишком просто что можно на юшке сделать да Ну да да здесь будет довольно быстро всё обучаться Ну версия этого дасе есть ещё на по гиба Поэтому если кто-то там кстати результат поинтереснее получаются Если кто-то захочет упороться то можете скачать И тогда уж конечно на г побыстрее будет считаться Вот Но это на усмотрение страждущих Окей теперь моя сеть у

конечно на г побыстрее будет считаться Вот Но это на усмотрение страждущих Окей теперь моя сеть у меня в сети много параметров поэтому я сюда буду передавать прямо конфиг целый и этот конфиг просто буду по ходу парсить да то есть у меня будет передаваться сюда словарик из этого словарика я буду доставать пользователе мне ВС это засовывать который будет стоять после динга в полно связанном слое и про Я чуть ниже скажу первые два блока у меня [музыка] это 2 для пользователя и для фильма тут всё

про Я чуть ниже скажу первые два блока у меня [музыка] это 2 для пользователя и для фильма тут всё очень просто я делаю слой у меня первы Это для какого количества пользователей строить векторные представления и какойто я выбираю сам в принципе здесь большое число не нужно потому что ну пользователей всего 900 и там не очень большой типа 16 вполне хватит и делаю слой после динга тоже с параметром который выше из словаря я забрал ВТО блок это буде это второй инг который будет обрабатывать У меня

который выше из словаря я забрал ВТО блок это буде это второй инг который будет обрабатывать У меня теперь на этот раз фильмы в качестве первого аргумента число фильмов для которого я буду строить динг и н S я использую одинаковые размеры Динго Вы можете их сделать разными Мне кажется что это не очень сильно влияет по крайней мере в моих экспериментах это ни к чему не привело поэтому я Остановился на одинаковом эмдин После этого у меня выходы этих Динго пропускаются профильные полносвязный слои

на одинаковом эмдин После этого у меня выходы этих Динго пропускаются профильные полносвязный слои то есть эмбеддинг для пользователей я обрабатываю одним полносвязный слоем эмбеддинг для фильма Я обрабатываю вторым полносвязный слоем и последний мой блок - это блок в котором я а на вход подаю удвоенный как бы eding size Почему Потому что я буду конкатенировать теперь у меня есть два им бедин Пусть они обработаны полносвязный слоем я их размерность вот здесь вот не меняю они на вход н S на

Пусть они обработаны полносвязный слоем я их размерность вот здесь вот не меняю они на вход н S на выход н S я соединяю динг пользователя динг фильма И после этого отправляю в полносвязный слой то есть вот сюда а поэтому у меня здесь удвоенное количество входов То есть если я отмечу это на диаграмме вот этот слой вот у меня отсюда выходят два вектора я эти вектора буду конкатенировать поэтому вот этот вот слой будет принимать на вход удвоенное значение по размеру дальше 512 полносвязный слой с

этот вот слой будет принимать на вход удвоенное значение по размеру дальше 512 полносвязный слой с выходом единичка Кост если быги были разного размера то там было не удвоить А ну сложить размеры Да сложить вот этот вот размер с вот этим вот размером Давайте тода многословно но тем не менее ко мне приходит р ID ко мне приходит it ID то есть фильм вот в этих вот двух строках Да я принимаю на вход эти айдини пропускаю через слой динга пропускаю через полносвязный слои профильные вот Вот они и

эти айдини пропускаю через слой динга пропускаю через полносвязный слои профильные вот Вот они и дальше применяю ой применяю на них сигмой F то Симо следующий этап Мне нужно всё это сковать и передать вот сюда я вызываю две переменные вот эти вот соединяю между собой и записываю в переменную X дальше переменная X у меня приходит вот сюда вот я на выходе взвешивающего преобразование у меня в словаре есть такая штука котора назвается это ВХ мной параметр у меня он меняется от одного до п я хочу

есть такая штука котора назвается это ВХ мной параметр у меня он меняется от одного до п я хочу спрогнозировать какую оценку от одного до пти пользователь отдаст какому-то конкретному объекту поэтому выход после сигмоида который у меня будет от нуля до единицы Я беру этот выход умножаю его на разницу максимального и минимального значения моего анжа в данном случае 5 -1 то есть выход сиг умножаю на четвёрку и прибавляю значение нижней границы анжа то есть единичку и тут легко понять что почему

на четвёрку и прибавляю значение нижней границы анжа то есть единичку и тут легко понять что почему это работает Если у меня сигмоида вышла единий то есть модель сильно уверена в том что пользователь высоко оценит этот фильм Я единичку умножаю на 5 -1 получаю четвёрку 4х 1 = 4 + 1 = 5 если сигмоида отдаёт число очень близкое к единички Это означает что после этого преобразования будет у меня пятёрка почти пятёрка на выходе если моя модель говорит что пользователь с вероятностью 0,1 что-то с

почти пятёрка на выходе если моя модель говорит что пользователь с вероятностью 0,1 что-то с этим объектом сделает 0,1 Я умножаю на 4 прибавляю единичку получаю 1,4 беру от этого Ир он округ есть это означает моя моде говорит мне что пользователь оценит этот обект на единичку что-то не понял если мы сразу работаем с сиг Почему Просто нельзя умножить нап а потом взять намер ить умножить на взять мы знаем что только строго ЕС от на то округлять у тебя не получится потому что процедура округления

знаем что только строго ЕС от на то округлять у тебя не получится потому что процедура округления она не дифференцируема вот умножать просто на п и получить что-то тоже самое в целом можно у меня просто более хитрый вариант но в целом это нормально да так можно делать Ну кстати Попробуйте Да мне кажется что так даже поменьше вычислений не то чтобы это в масштабах [музыка] при на пять умножать это даже ну типа Аля полносвязный слой с фиксированным коэффициентом на самом деле получается просто с

даже ну типа Аля полносвязный слой с фиксированным коэффициентом на самом деле получается просто с да Не попробуйте Да Попробуйте А у меня по замороченный вариант О'кей Давайте вопросы по форварду вот типа если для икса какой-то скиллер использовать это тоже типа как вариант скеле это что значит Ну типа типа стандартного или мамин только который на увеличение работает сначала такой [музыка] скер У тебя есть скер ну как бы два самых таких популярных скеле это каких мима и Стандарт стандарт что

У тебя есть скер ну как бы два самых таких популярных скеле это каких мима и Стандарт стандарт что нри в нуси делает Так что у тебя от нуля до единицы все данные вот а у тебя-то прогноз один То есть вот тебе например модель отдаёт 0,5 Ты должен разделить это на среднее Это что значит Ты делишь на среднее получаешь единичку потому что среднее От 0,5 - это 0,5 вот поэто скейлеры работают в масштабах векторов А здесь у нас одно одно значение понял а да просто читаю сер комент Отвлёкся это у нас

векторов А здесь у нас одно одно значение понял а да просто читаю сер комент Отвлёкся это у нас вероятность отключения нейрона 05 такая стоить низко Да редко делают значение типа 05 или что-то такое Оно обычно там довольно маленькое с на Вт пусть будет но это не даёт прироста в этой архитектуре по крайней мере Хорошо давайте дальше значит что представляют из себя наши данные для обучения ой Там ошибка какая-то что ли а модели У меня нет я не создал что представляют наши данные для обучения

ошибка какая-то что ли а модели У меня нет я не создал что представляют наши данные для обучения первое последовательность шников Вот она ВТО последовательно фильмов Вот она третье что у меня есть в дата лоде - это рейтинги то есть пользователь 880 посмотрел фильм Под идентификатором 106 и оценил его на четыре и так далее Это выход моей модели Да ну сейчас как раз там примерно где-то всё от двух до трёх как среднее такое представление потому что всё инициализирована случайными числами

от двух до трёх как среднее такое представление потому что всё инициализирована случайными числами соответственно сейчас это просто какие-то усреднённый данные Так ну Get Model summary тут по желанию что я здесь использую сглаженные или один Лос Ну и поехали обучать Пусть он пока там обучается у меня 50 Эпоха стоит но он быстро там доделывать Давайте тогда пока Да Кость Хороший вопрос вот мне нравится Серёга написал что если просто умножить на п то будет от нуля до пяти для нас ноль здесь

нравится Серёга написал что если просто умножить на п то будет от нуля до пяти для нас ноль здесь является критичным если мы ставим рейтинг от одного до пяти Мне кажется что всё-таки рейтинг рейтинг ноль обычно в таких дот сетах обозначает что пользователь не взаимодействовал не смотрел не видел Да вот то есть мы-то хотим всё-таки предсказать как бы его взаимодействие да то насколько он от взаимодействовал с этим объектом а ноль как бы прогнозирует что он не взаимодействовал Это скорее зависит

с этим объектом а ноль как бы прогнозирует что он не взаимодействовал Это скорее зависит от на самом деле представление данных даже а не от какого-то в данном конкретном случае в этом датасете Ноль это означает что пользователь не смотрел фильм Если бы у нас ноль пользователь мог бы поставить ноль тогда конечно мы бы этот интервал сделали там от нуля Потому что Ноль - это тоже какая-то оценка пользовательская Ну да Теперь я тогда понял почему такая схема у использована ну в то в том числе Да

Ну да Теперь я тогда понял почему такая схема у использована ну в то в том числе Да хотя я думаю что ну добиться от того чтобы модель прямо здесь ноль прогнозировал довольно сло не очень лют прям такие супер на табличных данных во всяком случае луба а для рекомендаций он типа как самый популярный используется типа это я не знаю самый ли он популярный но очень частый Да понял очень частый Так давайте сть там доумы посмотрим задание собственно обучить модель и первое задание - это создать фай

сть там доумы посмотрим задание собственно обучить модель и первое задание - это создать фай recom и в этом файле разместить две функции первая функция Будет рекомендовать из валидацию какие-то объекты которые пользователь не смотрел но по мнению модели он оценит их высоко То есть вы приходите в ционный передаёте берте на этом датасете фильтрует те фильмы которые пользователь не видел Ну то есть как бы наоборот те которые он получается смотрел в рамках нашего валидацию значение модели

то есть как бы наоборот те которые он получается смотрел в рамках нашего валидацию значение модели прогнозируется рейтинг от модели для фильмов которые пользователь смотрел и выводите это всё в формате датафрейма идентификатор фильма заголовок предсказанный рейтинг и тот рейтинг который пользователь по-настоящему поставил этому фильму То есть фактически просто сравниваете да у вас есть настоящие данные и есть то что модель спрогнозировал Найдите отсортируйте Да просто там скажите что вот 10

данные и есть то что модель спрогнозировал Найдите отсортируйте Да просто там скажите что вот 10 фильмов которые модель пользователю порекомендовала по убыванию рейтинга А вот настоящие рейтинги которые пользователь постави это первая функция она выглядеть должна Примерно вот таким вот образом то есть у вас Понятное дело что в зависимости от модели в зависимости от слоёв и всего остального у Вас могут э немного меняться последовательности или может быть там какой-то фильм вообще не попадёт Да

могут э немного меняться последовательности или может быть там какой-то фильм вообще не попадёт Да потому что это зависит от эпох обучения Learning Рей и всего-всего всего Но а в целом картина должна быть Примерно вот такая очень примерно Но вот такая то есть там скорее всего будет Титаник скорее всего будет Я не знаю что вот это такое Но примерно что-то такое на сотом пользователя то есть функция принимает на вход идентификатор пользователя валидацию часть выборки обученную модель и число

принимает на вход идентификатор пользователя валидацию часть выборки обученную модель и число рекомендаций которые для пользователя нужно достать вторая функция должна осуществлять настоящую рекомендацию вы объединяется два датафрейм обучающий валион переда функцию пользователя полный dataframe ну здесь опционально ID to M чтобы просто по словарю бежать и брать что идентификатор фильма такой это название фильма вот такое чтобы человеческий вывод просто был и возвращаете те фильмы из

такой это название фильма вот такое чтобы человеческий вывод просто был и возвращаете те фильмы из объединённого датасета который пользователь не смотрел но модель ему рекомендует то есть теперь у нас нету рейтинга настоящего Теперь мы берм только те фильмы которые пользователь не смотрел фактически делаем настоящую рекомендацию пользователь не видел этих фильмов мы его мы эти какие-то фильмы рекомендуем для сотого примерно такая картина должна быть Ну там Список Шиндлера Понятно Потому что у

для сотого примерно такая картина должна быть Ну там Список Шиндлера Понятно Потому что у него куча высоких оценок И он там его много людей смотрели но в общем что-то вот такое должно получиться есть вопросы вот по этим двум функциям хорошо второе задание реализовать prision и Rec тогда вы сможете проверить Вот эту вот функцию и оценить её по престижен лу потому что вам известн настоящий и предсказанный рейтинг третье задание вычислить престижный рел для всех пользователей который присутствует

рейтинг третье задание вычислить престижный рел для всех пользователей который присутствует в выборке Ну есть будет вас для одного человека это сравнивать вам нужно эту функцию прогнать просто по всем людям которые есть и получить усредненные значения этой модели для присина ла то есть настоящие метрики Да что для конкретного пользователя как мы разбирали это в презентации где там для конкретного пользователя вот здесь вот например 066 но если мы возм другого пользователя у него будет Мери Да

пользователя вот здесь вот например 066 но если мы возм другого пользователя у него будет Мери Да там 0,54 вот нужно для всех пользователей посчитать и усреднить А ну и здесь есть ссылка на дас увеличенная версия тот кто захочет сильно поэкспериментировать с моделью Я рекомендую брать вот этот вот датасет он конечно же больше но по большому счёту Если вы возьмёте этот датасет и сделаете супе огромную модель вы никакого прироста не получите просто потому что это маленький датс там не Ну мало

модель вы никакого прироста не получите просто потому что это маленький датс там не Ну мало мало строк Да как на Хаус Прай синген получилось получить высокий результат с помощью Нейро потому что просто мало данных а вот и наша модель Это только Лос её вот но она какое-то количество времени обучается но потом уже стабилизируется вопросы prision Ил задание мы будем считать уже на основе второго задания получается Фрей объединенный но просто ещё вытащим оттуда Таргет чтобы дело сравниваться далу

получается Фрей объединенный но просто ещё вытащим оттуда Таргет чтобы дело сравниваться далу тре Цион соединили только изза того что всех юзеров брать Ну [музыка] дали не надо для первого задания вво [музыка] сделать вид что вот эти рейтинг Дан вам Господом Богом что это не валидация часть понял просто ну типа в этом задании нет смысла предсказывать на тех которые есть в обучающие выборки потому что модель видела эти результаты Она училась на них поэтому предсказывать на них смысла нет пость

что модель видела эти результаты Она училась на них поэтому предсказывать на них смысла нет пость два вопроса А можно маленький спойлер по поводу того что будет на проекте чтобы Может быть сегодня в рамках этого задания к чему-то уже подготовиться что-то почитать и а Ну всё пока Да пока первый вопрос Ну у вас ничего особенно связанного не будет у вас будет э механические тоже нужно будет искать близости и всё такое но так что прям почитать конкретную там я не знаю конкретную модель или что-то

близости и всё такое но так что прям почитать конкретную там я не знаю конкретную модель или что-то нет Вот то есть просто механика будет схожая что вам нужно будет Вот что-то искать похожее подходящее Угу Окей хорошо и отоп вопрос был вс-таки про Яндекс музыку Как вс-таки там работает магия Ой не знаю они никому не говорят и очень сложно сказать с последняя публикация она была надо сказать довольно давно наверно в районе год лет назад или ТХ достаточно просто устроено это не всегда стоит

довольно давно наверно в районе год лет назад или ТХ достаточно просто устроено это не всегда стоит ориентироваться spo раскладывал все песни оценивал все песни по трм шкалам уровень её акустичного инструментов которые там являются синтетическими либо являются там ну я не знаю условно электрогитары и так далее либо я не знаю там арфа вот второе количество слов им Вот они говорили что мерном пространстве у них получается находить какие-то удачные рекомендации Я как пользователь с ничего

пространстве у них получается находить какие-то удачные рекомендации Я как пользователь с ничего запредельно Удачного не могу сказать Вот мне казалось что Яндекс музыка действительно рекомендует получше но как работают рекомендации в Яндекс музыке непонятно и в целом есть такая общая для рекомендаци реко вы можете быть уверены в том что сечас уже используется другая которая работает лучше Вот потому что рекомендательная система - это чистейшие деньги и никто естественно не рассказывает о том

что рекомендательная система - это чистейшие деньги и никто естественно не рассказывает о том что у них сейчас работает надо отдать должное в Яндексе действительно работает Это хорошо Ну да влиять то есть условно глубина прослушивания Ну лайки понятно там да что вообще может влиять на то как они будут строится Я подозреваю что они практически всё собирают вплоть до перехода на в альбом на страничку исполнителя Я не знаю количество там может быть шеров плейлистов в которые ты добавляешь этот

исполнителя Я не знаю количество там может быть шеров плейлистов в которые ты добавляешь этот трек Я думаю что там собирается абсолютно всё вот и очевидно там фильтрация происходит не вручную какая-то там есть Модель которая автоматически эти признаки обрабатывает и выделяет из них какие-то самые важные Угу Вот но мне так представляется я к сожалению не знаю ну как бы то что можно сказать точно там 100% используется какая-то векторизация То есть сейчас у крупных сервисов практически нету

там 100% используется какая-то векторизация То есть сейчас у крупных сервисов практически нету рекомендательных систем которые в том или ином виде не строят эмбеддинг объекта Хорошо тогда кто Ну начнёт продвигаться в этом деле скидывайте скрины для сотого пользователя можно будет просто как бы синхронизироваться что всё действительно так для второй строчки Ну мы так обычно делаем просто для сотого пользователя скидываем и плюс-минус понятно находитесь ли вы на правильном пути вот поэтому как

пользователя скидываем и плюс-минус понятно находитесь ли вы на правильном пути вот поэтому как только вот эти функции Напишите прямо скидывайте скриншоты можно будет понять быстренько что всё так или всё не так PR Rec для Гуру это можно написать даже в одну строку это абсолютно противоречит всем нормам читаемости и приличий Но если очень постараться то можно написать это в одну строку я сразу скажу что я не рекомендую заниматься этой эквилибри как бы не имеющей отношения к настоящему пром Вот

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

Так у нас последняя неделя второй фазы мы сегодня коснемся сегодня и завтра коснемся рекомендательных систем сегодня они будут построены в таком самом простом духе По большому счёту вам сегодня нужен будет только панс или Ну для основной большой части заданий там дальше уже По мере того как будете успевать или не успевать зав стрельну [музыка] торча Вот и немножечко поговорим про метрики которые могут быть использованы в рекомендательных системах в принципе будем сконцентрированы на тех Метрика

быть использованы в рекомендательных системах в принципе будем сконцентрированы на тех Метрика которые так или иначе уже знакомы А это именно пресижн рекол и вот всё всё такое и потом у вас будет трёхдневный проект что-то такое будет среднее между рекомендательной системой и а поисковой системой Но это довольно часто такие достаточно близкие по смыслу вещи вот ну и соответственно всё на этом будет закончена вторая фаза вот на третьей фазе там уже будут очень технические вещи там Практически не

закончена вторая фаза вот на третьей фазе там уже будут очень технические вещи там Практически не будет никаких моделей ничего не надо будет обучать будем заниматься тем что будем вокруг всего того что может быть связано с моделями и с данными Как таковыми строить такую некоторую инфраструктуру сед рекомендательные симен используется практически в любом сервисе в котором У вас есть какие-то Клиенты все знают рекомендательные системы там Яндекс Мук Я не знаю каких-нибудь рисов и всего остального

все знают рекомендательные системы там Яндекс Мук Я не знаю каких-нибудь рисов и всего остального В общем у рекомендательной системы генерально как бы есть две цели в зависимости от того что у вас за платформа это либо сделать так чтобы вы оттуда не уходили и проводили в ней Весь день например как это делает tiktok или YouTube и всё такое их Главная задача чтобы вы нев там сидели потому что Чем дольше вы там сидите тем больше рекламы Вы посмотрите тем больше денег получит этот сервис от тех кто

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

товары которые потенциально Вы можете купить чем больше вы их купите тем лучше Вот надо сказать что рекомендательные системы работают ну не как бы метрики которые получаются в рекомендательных системах они совершенно не впечатляют своими абсолютными значениями Вот потому что как правило если там внедрение рекомендательной системы принесло вам я не знаю п 3% чего-нибудь то Это уже считается очень большим успехом Вот потому что люди животные иррациональные и даже обычная логика может совершенно

большим успехом Вот потому что люди животные иррациональные и даже обычная логика может совершенно жутко работать потому что ну понятно что там у всех могут быть кто-то восторгается рекомендательные системами там Яндекс музыки кто-то говорит что это совершенно всё мимо Вот потому что здесь как-то нету ну такого единого персонального ответа Если в среднем как бы стало чуть-чуть лучше после внедрения рекомендательной системы Это хорошо значит всё всё делали Не зря вот а мы будем сегодня в

внедрения рекомендательной системы Это хорошо значит всё всё делали Не зря вот а мы будем сегодня в качестве датта Ну точнее не мы а вы сегодня даже не будет никакого кода от с моей страны а сегодня вы прямо сразу после лекции в пучину значит Панса ипт либо отправитесь вот а и будете использовать dats Movie Lens - это такой своего рода imagnet для э рекомендательных систем то есть в модели обычно демонстрируют там на инете какие-нибудь там классификацию да А вот movel - это такой тестовый

демонстрируют там на инете какие-нибудь там классификацию да А вот movel - это такой тестовый датасет для рекомендательных систем это оценки пользовательские оценки для фильмов у него есть много версий есть огромные поменьше средние В общем одну из версий будем будете сегодня использовать сегодня и завтра Вот Но тут генерально надо понять просто логику того как это устроено дасе в принципе какой он будет это уже не так не так важно Вот значит Ну про это более-менее поговорили два самых таких ГВ

будет это уже не так не так важно Вот значит Ну про это более-менее поговорили два самых таких ГВ в рекомендательных системах Это первый подход коллаборативная фильтрация и второй подход - это контентная контентный подход то есть Котен подход мы сначала поговорим о контент подходе а потом посмотрим что такое коллаборативная фильтрация чем она принципиально отличается значит если очень грубо объяснить то в контент подходе у на есть бы две сущности это первая сущность это пользователи вторая

то в контент подходе у на есть бы две сущности это первая сущность это пользователи вторая сущность - это какие-то объекты с которыми пользователи взаимодействуют Ну в данном случае у нас здесь речь идёт о каких-то публикациях о каких-то статьях и наша логика может быть очень простой если пользователь прочитал какую-нибудь статью тут можно как бы в общем говорить про взаимодействовал с какой-то статьёй он мог её прочитать он мог её прокомментировать он мог её не знаю Там высоко оценить или он

статьёй он мог её прочитать он мог её прокомментировать он мог её не знаю Там высоко оценить или он мог е кому-то рекомендовать В общем э Здесь зависит уже очень сильно от того что конкретно за сервисы Какие взаимодействия он разрешает пользователям со своими объектами но мы можем условно говорить что этот пользователь высоко Оценил какую-то статью Поставил ей пять звёздочек и не знаю там добавил к себе в закладки у нас может быть совершенно Разумное предположение что если такое э происходит э

к себе в закладки у нас может быть совершенно Разумное предположение что если такое э происходит э то есть в отношении конкретной статьи давайте мы посмотрим какие из статей имеющихся у нас в сервисе похоже на ту которую он оценил высоко мы считаем что если он какую-то статью Оценил высоко э статья на определённую тематику Значит мы можем в целом проанализировать что у нас есть похожего и подсунуть Этому пользователю статью которая похожа на ту которую он оценил высоко это общая логика и так

Этому пользователю статью которая похожа на ту которую он оценил высоко это общая логика и так работают ну подавляющее большинство рекомендательных систем работают так потому что ну это такая общая интуиция что если вот определённое поле пользователь пошёл значит мы можем считать что этот пользователь заинтересован в данной теме собственно мы можем здесь слово статьи заменить на слово фильмы слово фильмы заменить на слово песни слово песни заменить там на слово я не знаю Придумайте что-нибудь и

фильмы заменить на слово песни слово песни заменить там на слово я не знаю Придумайте что-нибудь и в целом это одна из самых первых гипотез которую проверяют и довольно часто даже не нужно особенно выдумывать Мы видим что если такой такой простой подход работает а он довольно часто работает то в целом Этого достаточно про [музыка] коллаборативная оценить значит как правило для вот контентной [музыка] контентной о том какие у нас продукты есть под продуктами понимаем всё что угодно фильм статью

контентной о том какие у нас продукты есть под продуктами понимаем всё что угодно фильм статью песню и так далее и информацию о том что и как пользователь оценивал ранее то есть Вы наверняка часто сталкивались что в каких-нибудь сервисах вам после того как вы там с чем-нибудь про взаимодействует вам всё время там какое-нибудь окошко порекомендуете а Оцените от одного до 10 от одного до пяти и так далее вся эта информация собирается соответственно для того чтобы сделать сервис более

пяти и так далее вся эта информация собирается соответственно для того чтобы сделать сервис более персонализированным для вас и тут возникает вопрос Как нам понять что же значит такое похожие объекты потому что ну мы понимаем что статьи Например у которых заголовки там по словам друг на друга похожи Наверное они да про какую-то похожую тему но нам нужно для того чтобы вот эту близость оценить Нам необходимо сделать Ну какое-то предположение Да что вот по какой-то метрике два объекта находятся

необходимо сделать Ну какое-то предположение Да что вот по какой-то метрике два объекта находятся близко к друг другу Ну если у нас у объектов есть какое-то числовое представление один из самых простых способов - это просто посчитать косинусное сходство То есть у нас если вектора двух объектов направлены очень Ну как бы сонаправлены да то есть смотрят в одну сторону мы считаем что эти два объекта которые описываются этими векторами они являются похожими друг на друга если вектора у нас э

которые описываются этими векторами они являются похожими друг на друга если вектора у нас э смотрят в разные стороны то косинус на сходства там будет другой оценки и мы считаем что это два объекта которые совершенно не похожи друг на друга Вот А это самый простой способ по сути можно использовать на самом деле любою метрику расстояния это абсолютное такое то что называется гипер параметр мы не знаем какое расстояние у Ну какой способ вычисления расстояния будет самым самым приемлемым значит

знаем какое расстояние у Ну какой способ вычисления расстояния будет самым самым приемлемым значит иногда вместо обычного косинусное скорректированное косинусное сходство и тут нужно немножечко пофантазировать и понять собственно почему оно скорректировано и что оно вообще корректирует мы можем предположить что мы хотим выяснить похожесть объекта А на и объекта То есть у нас есть два каких-то объекта которые оценивали пользователи которые у нас есть в сервисе и мы хотим Понять насколько эти два

которые оценивали пользователи которые у нас есть в сервисе и мы хотим Понять насколько эти два объекта друг на друга похожи что мы можем делать Мы можем бежать по всем пользователям которые есть у нас в системе брать оценку конкретного пользователя для объекта А и Вычитать из этой оценки среднюю оценку и брать конкретную оценку этого же пользователя для объекта B то есть второго который между которым мы хотим найти близость и тоже Вычитать из этого среднюю оценку значит ну в числителе точнее в

мы хотим найти близость и тоже Вычитать из этого среднюю оценку значит ну в числителе точнее в знаменателе у нас в общем-то тоже самое что и в обычном сходстве косинусное здесь мы просто ищем как бы длину длину этого вектора двух векторов и теперь возникает вопрос вот зачем когда мы бежим по всем нашим пользователям Зачем из пользовательской оценке конкретному объекту Вычитать его среднюю кто может сказать потому что бывают люди критиканы А бывают люди токсичные позитивисты Ну да Хорошо А зачем

сказать потому что бывают люди критиканы А бывают люди токсичные позитивисты Ну да Хорошо А зачем Вычитать нам что нам это даёт бывают такие люди согласен какое-то стандартное отклонение находим или вопрос именно почему вычитается Ну да почему зачем нам нужно Вычитать то есть как бы идея Настины слов верная что Да действительно Это связано с тем что у пользователей у некоторых могут быть слишком неоднозначные тенденции всему ставить пять всему ставить единичку и так далее но вы читать-то зачем

неоднозначные тенденции всему ставить пять всему ставить единичку и так далее но вы читать-то зачем Ну хорошо вот есть у нас пользователь который всему ставит пять Ну и класс Зато он такой вот позитивный хороший человек Ну найти второго такого же пользователя который всему ставит на таком же расстоянии от среднего находится потели разные то мы не можем просто rua и R брать нам нужно Как сказать скорректировать на их критичность Ну да А зачем почему не можем чего такого Ну потому что они

скорректировать на их критичность Ну да А зачем почему не можем чего такого Ну потому что они сдвигают сдвигают реальную оценку Ну это же их реальная оценка они со своей оценкой что угодно могут делать Они были срав это как в датасета с высокими сильно Точнее не так это когда мы разбирали датасет например с со стоимостью недвижимости Да вот была сильно низкая цена и была сильно высокая цена которая очень сильно сдвига статистику Ну то есть меняла как бы общее представление Да среднее какое-то

очень сильно сдвига статистику Ну то есть меняла как бы общее представление Да среднее какое-то представление о том какая цена реально средняя вот так скажем я конечно сказала пьяная но я думаю что Вы меня поняли в том числе с тем что линейные модели не очень любят когда распределение скошенное А здесь у нас вообще Просто обычное расстояние друг от друга двух объектов Какая Ну вот здесь нету никаких номинально Мы можем не Вычитать и ну как бы всё будет О'кей почему всё будет О'кей Мне кажется

номинально Мы можем не Вычитать и ну как бы всё будет О'кей почему всё будет О'кей Мне кажется то что нарисовано Не ну смотрите вот у нас есть скорректированные косинусное сходство зачем его корректируют вот простой зачем мы вычитаем оттуда средний рейтинг Поль то есть чтобы привести к какому-то виду да то есть нам что потом с этим кону Так что мы потом с ним будем делать с этим конусом Ну мы оцениваем близость между двумя объектами между объектом А и объектом б вот и это как бы оценку

мы оцениваем близость между двумя объектами между объектом А и объектом б вот и это как бы оценку пользователя для объекта А и оценку пользователя для объекта б мы используем вот в этом выражении То есть если бы я понимаю мы бы там могли что-то Вычитать или нормировать если бы например вот в оценке для товара А мы используем пользовательскую оценку А в товаре б не используем тогда вот да была бы какая-то несправедливость Ну а здесь что один и тот же пользователь Оценил объект а Оценил объект б

какая-то несправедливость Ну а здесь что один и тот же пользователь Оценил объект а Оценил объект б Ну вот он всему ставит пять всё ему нравится как Ну почему мы вычитаем его средний рейтинг так здесь мы мы же по пользователям по пользователям суммируем то есть чтобы пользователи сравнимы да суммируем Ну чтобы пользователи были сравнимые Ну в смысле чтобы оценки были сравнимые Ну так а если мы вычитаем наоборот как раз оценки несравнимые получаются у всех пользователей разный средний рейтинг

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

стоит оценки и типа важность конечно Представьте что у вас есть пользователь который всему ставит пять его средний рейтинг п нам важно Вот как бы Важна ли его оценка если мы прекрасно знаем что он всему ставит пять вообще всему Ну да и получается что нету смысла рекомендовать потому что он на ВС ставит ПН наставит Представьте себе что вот мы получаем какой-то Да Вектор вот оценок для там товара А мы же заранее знаем что этот пользователь и товару А и товару Б как бы ну поставил высокий рейтинг

мы же заранее знаем что этот пользователь и товару А и товару Б как бы ну поставил высокий рейтинг с точки зрения вычисления вектора получается что у нас У двух векторов как бы одинаковые компоненты если у двух векторов одинаковые компоненты Есть ли смысл в этих двух компонентах Они совпадают полностью То есть получается что не очень-то и нужно и тоже самое будет с теми кото всем ставит единичку нам сильно интересно Если у нас пользователь просто всему подряд всё что видит ставит единицу но нет

сильно интересно Если у нас пользователь просто всему подряд всё что видит ставит единицу но нет в его оценках нету никакой дисперсии нет Никакого разнообразия значит использовать его оценки для того чтобы с позиционировать там Ну для того чтобы посчитать близость между двумя объектами не в этом нет никакого смысла Потому что его оценка константная она не влияет на как бы оценки этого объекта Ну то есть получается Если и там и там пять то Окей мы можем это игнорировать потому что и там и там

то есть получается Если и там и там пять то Окей мы можем это игнорировать потому что и там и там получилось одинаковое число а вот когда мы когда у нас пользователь ставит оценки осмысленные то есть его Он кому-то может поставить единичку кому-то пятёрку кому-то четвёрку Мы видим что в его оценках как бы есть какое-то разнообразие И если в этих оценках есть разнообразие это может быть важно для того чтобы посчитать расстояние между объектами То есть когда он действительно что-то на единичку

того чтобы посчитать расстояние между объектами То есть когда он действительно что-то на единичку что-то на двойку что-то на пятёрку оценивать Вот и в этом собственно основной как бы смысл если в оценках пользователе Нет вариативности это значит То что среднее будет ну среднее будет совпадать с его конкретной оценкой то вот это вот всё превратится в ноль Да и соответственно в числителе для конкретного вот этого пользователя тоже будет Ноль это значит что пользователь ВС оценивает одинаково

вот этого пользователя тоже будет Ноль это значит что пользователь ВС оценивает одинаково можно не использовать его для ле расстояний Саша да Паш Напомни пожалуйста что такое rua rub - Это вот оценка прямо по определённому объекту Да это пользователь ю Оценил объект А и объект B на какую-то каким-то рейтингом а полоской - это средний рейтинг этого пользователя соответственно если он объект а Оценил на пять и средний рейтинг 5 всё для этого пользователя становится нулём это выражение Вот потому

на пять и средний рейтинг 5 всё для этого пользователя становится нулём это выражение Вот потому что нет разнообразия в оценках нету дисперсии значит никакого смысла использовать эти оценки Нет очень простой пример Представьте что вы решаете задачу прогноза цены той же самой квартиры и у вас есть признак например наличия балкона и он у всех квартир есть важен ли этот признак если он есть у всех квартир неважен почему Ну типа у вас просто есть колонка в которой единичка стоит везде нету

у всех квартир неважен почему Ну типа у вас просто есть колонка в которой единичка стоит везде нету разнообразия нету вариативности для прогноза цены этот признак неважен потому что у всех есть балкон мы не можем по наличию или отсутствию балкона спрогнозировать цену потому что он уже есть у всех тут тоже самое Важно ли нам что пользователь там который всё оценивает на пять что он конкретный элемент Оценил на пять нет неважно потому что он всё оценивает на пять Может это вообще бот какой-то

Оценил на пять нет неважно потому что он всё оценивает на пять Может это вообще бот какой-то который бежит по всем и просто всему ставит пятёрку Ну или если он то всему ставит единичку ственно вот тут нет ответа на вопрос Какую метрику сходства использовать с самого начала вот Обычно начинают с какого-нибудь косинусное и коэффициент корреляции можно взять какой-нибудь расстояние минковского с произвольным вот параметром ро который там есть то есть обычно это просто такая ну как бы гипер

с произвольным вот параметром ро который там есть то есть обычно это просто такая ну как бы гипер параметр да то есть Давайте возьмём там несколько метрик типа корреляции Лидо в расстояние скорректированное косинусное сходство и попробуем посчитать разными способами Вот и тут как бы самая главная идея - Это идея того что у нас есть теперь какая-то Метрика близости то есть Теперь если пользователь оценивает какой-нибудь объект высоко то есть берёт например какую-то статью и высоко её оценивает

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

к контент Но работает немного другим образом он называется US подход Давайте представим что у нас есть примерно Вот такая вот матри у на польва на конкретного пользователя и конкретного айма ам - это такое общее название в рекомендательных системах чего-то потому что алгоритмы работают с фильмами с музыкой с товарами Поэтому просто считаем что это какой-то АТЕМ то есть какой-то объект с которым пользователь взаимодействуют и Наша задача собственно спрогнозировать для юзера целевого оценку для

пользователь взаимодействуют и Наша задача собственно спрогнозировать для юзера целевого оценку для item 5 то есть мы хотим как бы понять нам нужно рекомендовать Этому пользователю вот item 5 что по предположению нашей модели Какая какую оценку юзер поставил бы it 5 если бы мы Начали прогнозировать его оценку и тут можно пойти довольно простым способом мы видим то что у каждого пользователя есть какие-то оценки то есть вот они вот эти вот оценки и давайте мы сделаем так мы возьмём какую-нибудь

какие-то оценки то есть вот они вот эти вот оценки и давайте мы сделаем так мы возьмём какую-нибудь метрику ичм счи рание от 2 3 4 давайте мы найдём тех пользователей Ну или того пользователя который является ближайшим Ну в данном случае у нас ближайший пользователь видимо вот этот эти цифры ничего не знают не значит это просто какая-то Метрика близости То есть просто какой-то ближайший пользователь и будем руководствоваться такой логикой если у нас ближайший к нашему целевому пользователю it 5

и будем руководствоваться такой логикой если у нас ближайший к нашему целевому пользователю it 5 на троечку Значит мы сюда ему тоже спрогнозируйте самые Как измерить бли То есть как вот эту вот оценку вычислять корреляция косинусное сходство евклидово расстояние что угодно второе - это как много соседей выбрать Кто помнит если у нас соседей несколько то каким образом мы выбираем нужного Ну в смысле Каким образом мы прогнозируем точнее нашу оценку мини мини тогда несколько пользователей Не ну ну

Каким образом мы прогнозируем точнее нашу оценку мини мини тогда несколько пользователей Не ну ну потом ещё мы потом чуть побольше потом ещё чуть больше не понимаю мы можем взять просто ка ближайших соседе А можем ещё учесть расстояние да Ну вот смотри давайте мы предположим что вот мы здесь у нас ра Д То есть вот это И вот это как с прогнозируем в таком случае сюда Это задача регрессии нак ближайших соседей по большому сч А ну среднее взять по среднее значение да можем взять просто среднее

соседей по большому сч А ну среднее взять по среднее значение да можем взять просто среднее значение можем взять основываясь на расстоянии то есть там есть специальный параметр что чем дальше пользователь Даже если он попал ВК ближайших соседей тем меньше его оценка будет учитываться но по большому счёту это Рим ближа приходит оценку определенную для IT 5 давайте выберем там двух соседов соседей посчитаем на них средняя и вот у нас прогнозировать там 3,5 Да потому что тройка и четвёрка сколько

посчитаем на них средняя и вот у нас прогнозировать там 3,5 Да потому что тройка и четвёрка сколько этих соседей должно быть тоже самое гиперпараметры Как считать близость сколько соседей будет это будет гиперпараметры А давайте представим что мы вот это вот матрицу например то есть вот у нас есть алгоритм который прогнозирует на основе похожести пользователей а прогнозирует рейтинг для юзера и item 5 а что если мы возьмём Вот эту вот матрицу и транспонирующие просто вопрос как будто не Как

и item 5 а что если мы возьмём Вот эту вот матрицу и транспонирующие просто вопрос как будто не Как звучит вопрос Если мы сделаем вот этот алгоритм ка ближайших соседей с помощью него мы сейчас для юзера спрогнозировали оценку для IT 5 основываясь на его ближайших сох давайте мы представим что вот у на есть такая функци в кото Эри воа какойто прогноз А теперь давайте [музыка] транспонировать там самое часто встречающееся значение Ну не совсем нуно которой мы говорим Нет а что вещь Ну то есть мы

часто встречающееся значение Ну не совсем нуно которой мы говорим Нет а что вещь Ну то есть мы там допустим говорим про книгу Да и мы будем уже видеть Какое количество там людей выбрало её Угу Ну здесь же мы ориентируемся на человека Да здесь да то есть здесь мы ищем близость между пользователям да А если мы трансни то будем видеть по вем про которые идт речь да да на самом деле если мы транспонирующие [музыка] [музыка] будем дела будем делать ровно также посчитаем близость вот с этим вот с

[музыка] [музыка] будем дела будем делать ровно также посчитаем близость вот с этим вот с этим вот с этим и вот с этим выясним что it 1 и It 4 наиболее похожи на it 5 если it 1 юзер поставил пятёрку атему 4 поставил четвёрку значит прогнозируем 4,5 то есть Делаем всё ровно тоже самое но теперь как бы мы ищем близость не между пользователями а и вот в таких случаях нужно довольно аккуратно как бы подходить к разработке к разработке рекомендательной системы Почему Давайте представим что у нас

бы подходить к разработке к разработке рекомендательной системы Почему Давайте представим что у нас есть какой-нибудь интернет-магазин и у нас пользователь в этом интернет-магазине купил ведро есть у нас много смысла пытаться найти к ведру ближайшие объекты и рекомендовать пользователю Ну типа он купил красное ведро амы найм больше ведро синее ведро Я не знаю со шваброй И начнём пользователю рекомендовать Ну как бы вроде если он уже купил ведро то в рекомендациях ещё 10 вёдер ему не очень нужно

Ну как бы вроде если он уже купил ведро то в рекомендациях ещё 10 вёдер ему не очень нужно Ну нет может быть и нужно но кажется что вряд ли Вот При этом если мы найдём к Этому пользователю например ближайшего а ближайшего Как мы можем искать Нам не обязательно искать Вот именно там как они я не знаю как эти пользователи оценивали что-то ранее давайте мы найдём просто какой-нибудь ближайший чек ближайший чек по содержимому и по сумме к примеру посмотрим что другие пользователи у которых схожий

чек по содержимому и по сумме к примеру посмотрим что другие пользователи у которых схожий чек ещё в этих чеках пробивали и порекомендуем пользователю Вот то есть получается что как бы с одной стороны если мы рекомендуем к примеру фильмы да то если пользователь высоко Оценил там комедию скери то логично бли комедию и порекомендовать ему Потому что если он там любит этот жанр конкретного актра то возможно ему понравится но абсолютно такая же логика в задаче например рекомендации каких-то товаров

ему понравится но абсолютно такая же логика в задаче например рекомендации каких-то товаров полностью перестаёт работать вот поэтому здесь всегда надо быть очень очень внимательно собственно есть такая ну есть ещё даже не то что это не совсем прямо рекомендательная система но что-то вроде вот аналитических всяких алгоритмов которые связаны тоже с продажами то ли Walmart то ли Вот что-то там Большое американское они проанализировали чеки в своих супермаркетах и после того как они это сделали они

американское они проанализировали чеки в своих супермаркетах и после того как они это сделали они расположили пиво рядом с подгузниками и детским питанием Вот потому что оказалось что типа отцы которых молодые да которых отправляют в в магазин чтобы они там закупились они такие О да Сейчас возьму подгузники там вот это детс питание овас класс Дава тоже возьму Вот и таким образом они просто подняли средний чек среди тех потребителей которые собственно были сконцентрированы вот на изначально на

средний чек среди тех потребителей которые собственно были сконцентрированы вот на изначально на детском там питании и на всём остальном вот ну это там не было никакого такого супе алгоритма это такой метод оценки парных совпадений он называется Априори он в общем я не знаю сейчас используется или нет но он анализирует пользовательскую корзину или пользовательский чек не то чтобы какой-то рекомендательный просто некоторые инсайты открывает Вот соответственно вот два абсолютно одинаковых подхода

просто некоторые инсайты открывает Вот соответственно вот два абсолютно одинаковых подхода Да фактически решение Задачка ближайших соседей на каком-то поле объектов либо это могут быть товары либо это могут быть пользователи он на самом деле очень часто используется и даже вот недавно мы такую рекомендатель систему по объектам не по пользователям по объектам внедряли и всё там отлично работало сфм поиском близости и всем всем остальным вот значит для всех рекомендательных систем Собственно как

поиском близости и всем всем остальным вот значит для всех рекомендательных систем Собственно как и для всех систем машинного обучения в целом есть ряд проблем которые как бы замедляют их замедляют их немедленное применение значит это все проблемы связанные с так называемой проблемо холодного старта когда вы регистрируетесь в каком-нибудь новом сервисе вам говорят лю ли музыки Я не знаю А вот вы читали Вот эту вот книжку Оцените е в общем надо содрать с пользователей хотя бы какую-то информацию

Вот эту вот книжку Оцените е в общем надо содрать с пользователей хотя бы какую-то информацию чтобы понимать вообще с чего начинать все с этой проблемой справляются очень по-разному кто-то парсит какие-то Например я не знаю чарты Да и рекомендует самое популярное хотя бы на первое время кто-то анализирует вот эти первоначальные от польва уже пытаются какие-то более-менее вменяемые модели строить вот кто-то просто я не знаю раздаёт Всем дефолтные оценки у нас пользователь зарегистрировался

вот кто-то просто я не знаю раздаёт Всем дефолтные оценки у нас пользователь зарегистрировался ничего не оценивал давайте мы дефолтные оценки скажем что он всё Оценил на 3 с поно потом По мере того как он начнёт с чем-то взаимодействовать мы будем перезаписывать эти оценки на его настоящее Вот но в целом здесь как бы спасения от этой проблемы нет это всё равно что Представьте вы Я не знаю пришли там в банк и вам говорят нам нужна система которая будет нас уберегает вы говорите Ну давайте мне

там в банк и вам говорят нам нужна система которая будет нас уберегает вы говорите Ну давайте мне данные А вам говорят данных нет ничего вы тогда сделать не можете Да как бы нету данных нету алгоритма Вот Но тут просто это довольно сильно в рекомендательных системах заметно То есть если вы там Да действительно где-то регистрировались наверняка всегда видели Оцените Вот это Какой ваш любимый жанр и всё прочее значит второй подход который тоже довольно часто используется это коллаборативная

жанр и всё прочее значит второй подход который тоже довольно часто используется это коллаборативная фильтрация Значит его основная гипотеза заключается в том что те пользователи которые каким-то образом похоже вели себя в прошлом наверно эту похожесть сохранят в будущем А если такое Если э гипотеза верна Значит мы можем для них как бы придумывать какие-то способа прогноза оценок Вот это действительно не лишённая как бы Смысла не лишённая смысла утверждение и довольно часто в коллаборативный

не лишённая как бы Смысла не лишённая смысла утверждение и довольно часто в коллаборативный фильтрации собственно почему она называется коллаборативный потому что одновременно используется и оценки пользователей и как бы оценки для конкретных объектов То есть если мы вернёмся Вот например сюда О чём у нас здесь шла речь у нас здесь шла речь о том что вот у меня векторное представление об вот я только в этом поле действую То есть если я решаю такую задачу it у меня фактически информация о

я только в этом поле действую То есть если я решаю такую задачу it у меня фактически информация о пользователях пропадает я её никак не использую Я просто говорю что вот у меня есть объект этот объект окружён Какими другими объектами и всё на этом как бы всё останавливается в коллаборативный фильтрации используется информация как бы одновременно и по строкам и по столбцам подобных таблиц мы получается хотим как бы одновременно посмотреть на влияние и пользовательского поведения и какого-то

хотим как бы одновременно посмотреть на влияние и пользовательского поведения и какого-то представления объекта для этого чаще всего используется матричное разложение а точнее конкретный его Тип который называется сингулярный разложением в о сингулярное разложении собственно на первой фазе слышали картиночки рисовали и так далее значит в общем и целом как бы что делает сингулярное разложение оно представляет нашу исходную матрицу в виде произведения трёх матриц как правило меньшего ранга Но это

нашу исходную матрицу в виде произведения трёх матриц как правило меньшего ранга Но это не обязательно меньшего ранга это означает тот самый ползунок который вы передвигали в разложении картинки что типа мы можем очень много компонентов оставить тогда Матрица она очень похожа на исходную можем это число компонентов сильно сократить тогда она немного выглядит повреждённый но всё равно узнаваемо и здесь происходит тоже самое мы на входе у нас Примерно вот такая же не примерно а прямо такая же

и здесь происходит тоже самое мы на входе у нас Примерно вот такая же не примерно а прямо такая же таблица пользователи айтемы она так и называется на самом деле во всех алгоритмах это User User item Матрица или User рейтинг Матрица вот а давайте мы попробуем представить эту исходную матрицу в виде трёх матриц меньшего ранга и получается что как бы у нас каждая пользовательская точнее для каждого пользователя в левой сингулярное матрице у нас появляется некоторая векторное представление У нас

пользователя в левой сингулярное матрице у нас появляется некоторая векторное представление У нас есть в правой сингуляр матрице для каждого фильма то есть Вот они фильмы Терминатор что-то там Крепкий орешек и так далее есть какой-то прогноз и у нас как бы есть вот эта вот Матрица сингулярных значения А что такое матрица сингулярных значений это фактически Матрица которая содержит в себе ну такие численное выражение того как бы как две матрицы вот эти левая и правая связаны между собой

ну такие численное выражение того как бы как две матрицы вот эти левая и правая связаны между собой насколько сильно потому что эти сингулярные числа они собственно и показывают Вот эту вот силу связи и если мы хотим например как вот здесь у меня для спрогнозировать фильм спрогнозировать оценку для фильма ну здесь в данном примере это фильм Мали Любе что мы можем сделать Мы можем взять строку которая Вектор который соответствует Алисе умножить его на матрицу сингулярных значений доно на Вот для

Вектор который соответствует Алисе умножить его на матрицу сингулярных значений доно на Вот для этого средний рейтинг Алисы по тем объектам которые она уже оценивала это один из способов прогноза с помощью сингулярное Значит мы берём средний рейтинг нашей нашего юзера и прибавляем к нему просто произведение соответствующих векторов и матриц сингулярных чисел тут можно кстати я не знаю может быть у меня даже там пример ещё сохранился Сейчас мы посмотрим по-моему есть да а мы можем представить

у меня даже там пример ещё сохранился Сейчас мы посмотрим по-моему есть да а мы можем представить что вот у нас есть Так стоп вот у нас есть Матрица в которой У нас есть всякие там Алисы бобы марки и так далее и есть некоторое количество фильма значит если мы эту матрицу разложим с помощью обычного сингулярное вот картину видите я специально здесь разложил компонент для того чтобы визуализировать координаты пользователей фильма в двумерном пространстве и мы можем увидеть что что у нас например

координаты пользователей фильма в двумерном пространстве и мы можем увидеть что что у нас например есть какие-то Ну вот здесь очевидно это такси и Терминатор Да в они прям наложили друг на друга и если мы посмотрим то действительно вот смотрите Терминатор и такси Алиса Оцени Нано то есть видите у них на самом деле идентичные оценки именно понятно что Это выдуманы пример но здесь просто Смысл в том что если пользователи имеют тенденцию одинаково оценивать два объекта мы увидим что эти два

в том что если пользователи имеют тенденцию одинаково оценивать два объекта мы увидим что эти два объекта они прямо находятся друг над другом да то есть они в одной точке этого пространства мы можем то же самое увидеть вот например у нас есть Алиса Алиса и Роб Да они вот они вот здесь вот находятся очень близко к друг другу Почему Потому что Терминатор они не смотрели Спайдермена оцени высоко ИП не смотрели Король Лев оценили высоко Эйс винту оценили близко не совсем один в один но близко и

ИП не смотрели Король Лев оценили высоко Эйс винту оценили близко не совсем один в один но близко и дальше все их оценки совпадают и вот это вот сингулярное разложение видите оно как бы берёт нашу исходную матрицу мы можем редуцировать эту матрицу до какого-то количества компонент в данном случае двух компонент И на самом деле здесь же решать задачу поиска соседей то есть нам ничего не мешает мы видим то что у нас вот например есть какой-то Марк да и Марк у нас Что Он не смотрел там фильм

мы видим то что у нас вот например есть какой-то Марк да и Марк у нас Что Он не смотрел там фильм Вентура Так давайте мы попробуем найдём ближайшего соседа ближайший Боб а Боб на сколько Оценил венту Оценил на три пожалуйста давайте спрогнозируйте соответствует и в таком случае мы что можем сказать мы хотим посмотреть это у нас получается для для чего тут у Али Мы хотим спрогнозировать если это ю0 это первая строка - это Алиса Ну да короче для какого-то фильма сейчас по индексу я считать не

ю0 это первая строка - это Алиса Ну да короче для какого-то фильма сейчас по индексу я считать не буду Вот но сингулярное разложение в целом видите оно позволяет вам как бы редуцировать э матрицу А дальше применять все те же подходы ближайшие соседи какой-то способ Я не знаю Вы можете сказать что вот вы хотите например вот этим U умножать там например на какой-нибудь коэффициент X да и этот коэффициент тоже выяснить просто по своему дасе взять выборку Ну взять какие-то известные оценки Алисы

тоже выяснить просто по своему дасе взять выборку Ну взять какие-то известные оценки Алисы попробовать спрогнозировать и собственно использовать Это для прогноза надо сказать что не всегда используется конкретно сингулярное разложение то есть То есть существует в сингулярных разложения что как бы немного контри интуитивно у нас получается что координаты вот этих вот новых Ну нового латентного представления наших объектов они могут быть отрицательные вроде как это не очень весело потому что ну

наших объектов они могут быть отрицательные вроде как это не очень весело потому что ну типа как там оценка условно говоря Как она может получаться отрицательной да или там какие-то координаты У нас же полностью положительная Матрица в нашем в нашем вот рейтинг и иногда используют другие матричные разложения есть матричные разложения там nmf Non matx То есть это если у вас есть положительная Матрица она разложит на две положительных матрицы то есть там не будет отрицательных чисел Вот и в целом

она разложит на две положительных матрицы то есть там не будет отрицательных чисел Вот и в целом как бы матричное разложение - это просто удобная штука репрезентации большой матрицы в виде каких-то более простых матриц меньшего ранга поэтому не обязательно СВ но СВ в сво время выи в котом собственно задача была прогноз рейтинга филь соответственно Да главная цель получить новое новую репрезентацию нашей исходной матрицы А дальше уже делаем Что хотим значит есть ещё один подход мы его я его

нашей исходной матрицы А дальше уже делаем Что хотим значит есть ещё один подход мы его я его разберу интуитивно Если вы сегодня дойдёте до этого задание Просто может на первый взгляд показаться таким мутом Но на самом деле в нём очень простая идея давайте представим что у нас есть два каких-то близких пользователя и мы знаем что пользователь а Оценил вот item I на единичку а item G на полтора а пользователь B который на него похож он оценил item и на единичку А вот для item G Мы хотим

а пользователь B который на него похож он оценил item и на единичку А вот для item G Мы хотим спрогнозировать ему оценку давайте мы сделаем довольно простую штуку если эти два пользователя похожи и здесь вот эта Дельта равна 0,5 мы просто возьмём и совершенно без задней мысли скажем что здесь тоже надо просто прибавить 0,5 и получим финальный прогноз кажется что звучит слишком просто для того чтобы это работало но оказывается это действительно работает а и здесь в общем-то речь идёт просто о

это работало но оказывается это действительно работает а и здесь в общем-то речь идёт просто о том что если какие-то пользователи вновь ведут себя похожим образом мы можем эту похожесть попытаться вот через вот эту Дельту оценок каким-то образом использовать для прогноза у меня здесь есть чуть Более сложный пример то есть мы сначала хотим посчитать усреднённый способом Наша задача для Люси спрогнозировать оценку для айма А что мы в таком случае будем делать Давайте посмотрим насколько возьмём

оценку для айма А что мы в таком случае будем делать Давайте посмотрим насколько возьмём точнее для начала всех пользователей которые оценили и АТЕМ А и ам B потому что мы сейчас считаем конкретно для него эти пользователи Это Джон и Марк соответственно здесь у нас Дельта равна Д здесь у нас Дельта равна единички да Ну в данном случае минус единички то есть мы берём оценку Джона для а Джона для Б 5 и3 марка для а а марка для А и иче соответственно из одно разни вычитаем ВТО пото Поль оценили

Б 5 и3 марка для а а марка для А и иче соответственно из одно разни вычитаем ВТО пото Поль оценили одновременно и и тоже самое считаем для и но теперь у нас только Джон одновременно Оценил две вот эти вот штуки поэтому мы берём Джон Оценил на пятёрку минус двойка так как он был один делим на единичку получаем 3 А дальше начинаем элора ни усредненная разница рейтинга между А и 0,5 усредненная разница рейтинга между А и 3 здесь число пар было две потому что здесь у нас два объекта Джон и Марк

рейтинга между А и 3 здесь число пар было две потому что здесь у нас два объекта Джон и Марк были а здесь а только Джон потому что Марк не поставил и в таком случае как мы будем считать как бы прогноз для проно для оценила ам B и добавить Вот эту вот разницу которую мы посчитали вот здесь вот получим 2 с по дальше Смотрим как Люся оценила it C прибавляем сюда разницу это у нас получается вот эта тройка вот она и получаем 8 и дальше мы просто ещё раз усреднять 5 на Вот это число и один человек

тройка вот она и получаем 8 и дальше мы просто ещё раз усреднять 5 на Вот это число и один человек который Оценил а и с умножаем на 8 Почему на 8 потому что вот Люси точнее разница между а и с для Люси - это 8 делим на общее число пар получаем 433 то есть вот здесь вот мы говорим что Согласно динамике изменения средних вот этих отклонений двух айтемов по пользователям Люси оценит это на 4,33 сотых это не очень быстрый алгоритм но оказывается что он Довольно простой в реализации и довольно

сотых это не очень быстрый алгоритм но оказывается что он Довольно простой в реализации и довольно неплохо работает вот если умным способом хранить там всякие промежуточные вот эти вычисления то можно добиться довольно неплохого результата Я знаю что сейчас показалось что очень муторно на самом деле Пока можно абстрагироваться от этого алгоритма Если вы сегодня до него дойдёте то тогда вернётесь к этому примеру и Ну посмотрите повнимательнее просто сейчас у вас до это Зая будет много других

к этому примеру и Ну посмотрите повнимательнее просто сейчас у вас до это Зая будет много других заданий поэтому на НМ Пока можно не останавливать свой разум вот значит в рекомендательных системах довольно часто ещё используются всякие такие эвристические и ну промежуточные анализы то есть довольно часто в рекомендательных системах используют кластерный анали если мы знаем наших пользователе есть какието Гру кото довольно часто так бывает Да потому что у нас могут быть пользователи по возрасту

какието Гру кото довольно часто так бывает Да потому что у нас могут быть пользователи по возрасту объединяться в некоторые группы по интересам по географии и всё прочее то есть ли нам смысл анализировать вообще всех наших пользователей Нет давайте мы будем просто проведём какой-нибудь кластерный анализ потом к нам приходит какой-нибудь пользователь и мы говорим Ага этот пользователь у нас из кластера любителей рыболовов поэтому мы будем подсовывать ему то что Является топом среди всех

из кластера любителей рыболовов поэтому мы будем подсовывать ему то что Является топом среди всех рыболовецких видео на нашем сервисе Вот то есть это с одной стороны помогает снизить нагрузку потому что вы уже тогда будете работать в рамках кластера а не в рамках всех пользователей Да зачем нам считать близость там семидесятилетний подростком если один смотрит там про блесну и мормышки а второй смотрит до Вот то есть мы лучше заранее определим как бы в каком они находятся кластере и будем в

смотрит до Вот то есть мы лучше заранее определим как бы в каком они находятся кластере и будем в рамках этого кластера работать часто экспериментирует со всякими матричным разложения Потому что если мы даже вот сюда вот посмотрим мы увидим что у нас даже здесь есть некоторые Ну некоторые объединения Да мы видим что вот Алиса и Роб У нас где-то вот здесь вот там какой-то Кевин где-то на отшибе Боб и Марк тоже относятся Ну как-то они близко к друг другу расположены и тут как бы кластерный анализ

и Марк тоже относятся Ну как-то они близко к друг другу расположены и тут как бы кластерный анализ он просто естественным образом говорит нам о том что есть какие-то группы но мы его проводим не на полностью прямо вот выборке Со всеми нашими признаками А можем провести его на результатах матричного разложения Это довольно частый подход И в общем-то тоже используется если мы имеем возможность разложить матрицу и работать в меньшем пространстве давайте это попробуем сделать вот ну про SL One я

матрицу и работать в меньшем пространстве давайте это попробуем сделать вот ну про SL One я сказал значит байесовские подходы тоже часто используется Здесь всё довольно просто Давайте зададим себе вопрос Какова вероятность что конкретному фильму оценку вот такую при условии того что он смотрел какие-то предыдущие фильмы и ставил им оценку вот такую То есть тут как бы сам факт того что если у нас есть какая какие-то события Да шанс пользователь смотрел вот эти фильмы Какова вероятность пятёрки у

какая какие-то события Да шанс пользователь смотрел вот эти фильмы Какова вероятность пятёрки у нового фильма если раньше было что-то другое вот но я не слышал чтобы пря байки вот такие оценки довольно хорошо работали но как бы довольно гармонично уклады вспомогательный инструмент тоже может быть прин Ну и вот вероятностный латентный семантический анализ тут как бы это очень сложно звучит но это тоже очень близко к матричным разложения просто там определённого рода подходы именно в разложении

тоже очень близко к матричным разложения просто там определённого рода подходы именно в разложении использоваться вот ну собственно на самом деле всё чего можно из у вас сегодня большая часть она как бы такая ручная с помощью Панса но такие самые популярные библиотеки для Аля и слр в мире рекомендательных систем это FM сразу несколько подходов комбинирует библиотека То есть фактически там метод как бы один но он Понемногу берёт из несколько идей комбинирует Tools если мне память не изменяет это

бы один но он Понемногу берёт из несколько идей комбинирует Tools если мне память не изменяет это вообще ну штука которая на Тор инь уко видите здесь у них иплит kn Mod Это что такое Это просто будем решать с помощью ка ближайших соседей видите здесь указываем движок говорим что нету у нас значит наших этих заголовков и просто в несколько строк получаем какую-то прям вот мо Rec пожалуйста берём какие-то У нас есть пользователи в каком-то датасете ра 10 и фильтру те которые пользователи Уже

какие-то У нас есть пользователи в каком-то датасете ра 10 и фильтру те которые пользователи Уже смотрели фильмы Вот то есть довольно много библиотек которые от вас даже не сильно требуют какого-то погружения внутрь вы просто такие Ага Tool и поехали вот ну Surprise это тоже это эскар подобная библиотека для того чтобы решать эти задачи видите здесь есть СВД СВД п+ NF - это как раз-таки тот как его Тот метод который раскладывает позитивные матри позитивной матрицы в отличие от СВД вот МФ Я даже

Тот метод который раскладывает позитивные матри позитивной матрицы в отличие от СВД вот МФ Я даже не знаю что это такое но тоже какое-то разложение наверное что тут Что тут ну какое-то очередное разложение Да factorization bas то есть всё на это вот и Surprise в принципе тоже довольно довольно такая популярная популярная в этом смысле библиотека но опять же она популярна Потому что тут просто вот вы ВС работает вот ну самопал алгоритмов тоже много соответственно Иногда приходится костыли

вот вы ВС работает вот ну самопал алгоритмов тоже много соответственно Иногда приходится костыли самостоятельно потому что не всегда удовлетворяет то что есть реализовано вот ну у меня наверно Всё Давайте вопросы причи следственное связи Вот когда нужно учитывать путь пользователя и просто хотела уточнить Ну это в ежедневной работе над ресами часто история что приходится применять Если да мы будем это практиковать Ну скорее да чем нет потому что в рекомендательных системах довольно Ред Бывает

это практиковать Ну скорее да чем нет потому что в рекомендательных системах довольно Ред Бывает такое что те какойто готовый моду То есть со многими особенностями там потому что опять же фильмы магазины музыка это всё довольно разной природе вещи и поэтому нету какого-то единого алгоритма поэтому Да довольно часто прежде чем строить рекомендатель систему проводят просто супер комплексный и подробный такой разведочный анализ надо понять что у нас за публика надо Понять насколько эта публика там

такой разведочный анализ надо понять что у нас за публика надо Понять насколько эта публика там внутри отличается между собой потому что кто знает Может у нас там все очень похожи и один алгоритм будет работать на всех Может быть у нас наоборот Все настолько разные что нам придётся Там сначала многоступенчатого понимать что это за пользователь а потом в зависимости от этого уже отправлять его в какой-то конкретный алгоритм рекомендации вот поэтому Да очень большое количество проблем в

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

а потом мы применяем разные рекомендательные системы под разные тако то есть сначала может быть модель классификации которая нам вообще ответит на вопрос этот пользователь он куда Вот откуда вот когда мы определяем его класс то мы можем уже отправить его в какой-то конкретный алгоритм потому того что это метод ближайших соседей те там ближайшего соседа найдёт порекомендует что-нибудь а бывает что пользователь какой-то вот сложный тонко организованный Поэтому если ему понравился первый Вентура А

пользователь какой-то вот сложный тонко организованный Поэтому если ему понравился первый Вентура А мы Ну второй ему рекомендуем А он говорит что нет второй - это отстой Хотя любой алгоритм рекомендации скажет что если первая часть фильма пользователю понравилась значит вторая часть тоже ему понравится Это просто статистически очень достоверно вот поэтому Да довольно часто прежде чем определить чем как бы каким алгоритмом мы будем рекомендовать Мы сначала определимся с тем что у нас за

чем как бы каким алгоритмом мы будем рекомендовать Мы сначала определимся с тем что у нас за пользователь пото что нам нужно куда-то направить вот в этом маршруте рекомендацию Угу И можно сразу второй вопрос про сейчас ещё вчера такая была фраза Что мол область Рекса она устаканится вот и поэтому возник вопрос в ежедневной работе Есть ли какой-то рост у профессионалов в этой области или как этот вообще вается или она скорее уже всё устаканится [музыка] [музыка] есть очень много миллионов

этот вообще вается или она скорее уже всё устаканится [музыка] [музыка] есть очень много миллионов пользователей нам бы рекомендации как бы хороши когда они вот пользователю прямо он нажал и они ему порекомендовали да Через час как бы то что у вас там алгоритм медленный пользователю уже ничего не нужно вот поэтому в рекомендательных системах довольно большую такую долю занимают инженерные всякие штуки а как нам взять Вот эту огромную матрицу и посчитать её быстро это как правило не сильно

штуки а как нам взять Вот эту огромную матрицу и посчитать её быстро это как правило не сильно связано с дата сам в привычном понимании потому что это действительно такая как бы вещь а вот ну очень программист ся очень Техническая Вот но в целом Я не знаю какого-то нового там новой библиотеки или нового алгоритма Я уже давно в рекомендательных системах не встречал вот будто бы все знают что вот мы идём от самого простого берём ка ближайших соседей до каких-то сложных нейросетевых моделей нам

мы идём от самого простого берём ка ближайших соседей до каких-то сложных нейросетевых моделей нам даже не очень важно как они внутри работают Просто эта модель большая и вот Facebook говорит что она классно работает вот поэтому мне кажется что скорее Она [музыка] устаканится кто-то сказал что типа вообще не трогайте их потому что у них ну баланс скорости и метрик модели Ну не оправдан скажем так конкретно Ну есть такое Да нейронные сети они довольно неплохо Как бы рекомендуют именно по Метрика

конкретно Ну есть такое Да нейронные сети они довольно неплохо Как бы рекомендуют именно по Метрика и по всему но Понятное дело что не у всех есть ресурсы для того чтобы это просто очень внедрить вот сейчас мы например когда последний раз недавно делали эту штуку ээ мы такие а как нам строить им бединге и вот у нас с одной стороны есть Берт например да который хорошо работает и хорошие им бедин строит а с другой стороны мы понимаем что мы тогда на одну публикацию Ну из-за просто долгого инфе

строит а с другой стороны мы понимаем что мы тогда на одну публикацию Ну из-за просто долгого инфе будем тратить много времени О'кей мы прогнали это так чтобы это не касалось пользователя то есть чтобы всё это было посчитано Заранее Вот Но если вы не делаете Это в реальном времени возникает другая проблема а Как вам это всё хранить то есть вы получается теперь будете платить не за процессор Да не за скорость процессора А за объём хранилище которое вам нужно вот поэтому мы остановились просто на

за скорость процессора А за объём хранилище которое вам нужно вот поэтому мы остановились просто на тфф он похуже работал чем Берт но в целом как бы пока пока это работает так потому что ограничения в ресурсах есть очевидные которые нам не даёт возможно бо сло быстро работат как бы классно классно ищет близость Ну пока так Поэтому да нети это не самый первый выбор для задач рекомендации если вам картинки надо классифицировать вам первое что скажут берите конечно нее Если вы работаете с

вам картинки надо классифицировать вам первое что скажут берите конечно нее Если вы работаете с рекомендациями вряд ли вам скажут что берите сразу сча пони по что там человек настолько критично к этому относился что как будто вообще стоит вообще отринуть эту мысль про нейросети Ну это видишь как бы а если надо видео например рекомендовать А как видео рекомендовать ни один классический алгоритм не построит векторное представление видео а нейросеть построит а как вот тогда что делать Да вот

не построит векторное представление видео а нейросеть построит а как вот тогда что делать Да вот поэтому тут Да наверное в каких-то более таких простых там в тексте В задачах текста поиска похожести там наверное можно обойтись действительно Ну до определённого по крайней мере момента без нейросетей но бывают задачи в которых просто невозможно Да ну как если мы игнорируем видео Ну О'кей давайте мы будем по описанию этого видео искать похожих по заголовку Ну и всё по большому счёту да то есть

мы будем по описанию этого видео искать похожих по заголовку Ну и всё по большому счёту да то есть следующий этап - Это только анализ самого видео но к сожалению не SL One не бустинг ничего нам не сможет построить числовое представление этого видео значит придётся использовать нейросети Угу Вот супер спасибо большое но в общем тенденция такая да Что Окей Нейро класс но давайте мы всё-таки попробуем что-то использовать более быстрое более быстрое равно более не нейросетевое Угу Так ну что по

что-то использовать более быстрое более быстрое равно более не нейросетевое Угу Так ну что по заданию сегодня в принципе дан датасет дан датасет с идентификаторами пользователей некоторой вспомогательной информации о них есть отдельно табличка с тем Какой фильм с его заголовком датой релиза принадлежит каким жанром то есть вот у нас есть История игрушек это не экшен не Приключения анимация детский комедия и так далее Короче представление по жанрам для каждого фильма и есть табличка с рейтингами

комедия и так далее Короче представление по жанрам для каждого фильма и есть табличка с рейтингами пользователей то есть идентификатор User ID такой-то Оценил вот такой-то Movie ID на троечку это там тайм То есть когда он это сделал и название этого фильма собственно ваша задача следуя вот таким вот ну как бы пунктам сначала построить большое количество разных графиков а потом уже построить рекомендатель систему самое первое это как бы самая первая система это которая будет строить вам это даже

систему самое первое это как бы самая первая система это которая будет строить вам это даже не она ещё вот рекомендации по популярности вот по такой вот метрике вы построите из отдельных колонок колонку скор и эта колонка будет таки репрезентации того какой у фильма рейтинг а высо а потом ближайших пользователей и на основе этого делать какой-то вывод а потом Surprise а потом с но это уже там вторая часть вторая часть Короче говоря сегодня надо спокойненько просто выполнить все вот эти задания

часть вторая часть Короче говоря сегодня надо спокойненько просто выполнить все вот эти задания Ну как бы все Не все все в своём темпе Но по крайней мере полною дой рекомендаци по популярно Вот этого я досюда дойдут все вот Ну что у меня всё тогда Паша У меня есть один вопрос но можно я подожду пока все Разойдутся Давай если все все расходятся то тогда успехов тем кто расходится Спасибо большое До вечера тоже вопрос был

E Доброе утро всем Ну что как дела Вчера заделали луб Как у тебя не успел Так ну что давайте тогда сегодня у нас каков план план очень простой сейчас мы с вами немножко поговорим про gpt а потом вы приступите к проекту достаточно просто так сейчас а у нас не будет утренних утренний рефлексии утрене рефлексии Ну мы не поговорили Почему не поговорили Ну как чаю попить поговорить что люди что ли Ты имеешь в виду что Стендап или просто сейчас пообщаться Да спросить как у меня дела Нет ссылки же были

в виду что Стендап или просто сейчас пообщаться Да спросить как у меня дела Нет ссылки же были в чате В общем я не Поня Что ты имеешь в виду любо Ладно давайте приступать Давайте приступать э так что у нас с вами есть у нас пере Нда у нас с вами сегодня сегодня мы с вами обсуждаем последнюю лекцию на неделе текста и мы конём с вами второй части второй части это декодер А в чём как бы ну посмотрим декодер как архитектуру немножко обсудим её и собственно Какие следствия приятные она даёт в общем

декодер как архитектуру немножко обсудим её и собственно Какие следствия приятные она даёт в общем Где применяется Итак декодер Трансформера стратегии генерации текста напомним Давайте вспомним с вами ещё одну историю вот у нас была вчера вот такая архитектура правильно собственно говоря левая часть у нас с вами была энкодером правая была декодером Для чего изначально применялся декодер помните ой для чего вообще изначально был придуман придуман трансформер для какой задачи текст переводить Да

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

текста оказался просто-напросто не нужен но Давайте сначала поговорим о общей связи да то есть как они вообще ра это не было похоже она также принимает Инги слов на вход у неё также есть как вде Да в которой там также есть нормализация вот дальше у нас был for и нормализация и выход здесь Здесь мы добавляем ну по факту вот эту историю нормализацию как бы её пря можно не считать как за полноценный слой самое главное добавляется Вот это сломаете ВМ и самая главная задача Может какая-нибудь

слой самое главное добавляется Вот это сломаете ВМ и самая главная задача Может какая-нибудь самопроверка на де коде Ну смотрите что сюда на вход приходит сюда приходит на вход информация с энкодера А значит этот att является единственным связующим звеном и деде именно на этом этапе вся информация сде я пря гово Обратите внимание е раз у Вас практически ВС уже есть чтобы это понимать потому что архитектура она сильно не меняется сильно не меняется вот как связующее звено Ну сильно можно не

архитектура она сильно не меняется сильно не меняется вот как связующее звено Ну сильно можно не грузиться по поводу того как это внутри всё устроено Да потому что на самом деле вот эту смешанную архитектуру используют редко собственно говоря повторение врай картинке Что принимает какие-то слова у него получается три этих Инга А вот ещё внутри у него были Если вы помните матрицы и в они не обязательно вот этой размерности да Давайте вспомним Как устроен Помните у нас соответственно приходит

вот этой размерности да Давайте вспомним Как устроен Помните у нас соответственно приходит дван слова они проходят Чере и потом как вот получается выходная размерность получается выходная размерность Вот и собственно говоря Вот она Да одна из эти эти внутренние сущности скажем так которые содержат информацию Да о входных векторах Именно они будут передаваться на декодер сейчас рисунок ниже покажем посмотрим ть по понятнее станет вот так так выбрано было самими разработчиками я здесь не

покажем посмотрим ть по понятнее станет вот так так выбрано было самими разработчиками я здесь не претендую и не буду там комментировать хорошо или плохо или есть лучши варианты вот просто вот в оригинальной статье связь между энкодером и декодом происходила вот таким вот образом то есть Именно по этому каналу связи иде то что он узнал о тексте передавал деде как-то так проговорили что есть задача где мы используем только декодер и в этом случае Тогда что будет происходить с тем входом куда

где мы используем только декодер и в этом случае Тогда что будет происходить с тем входом куда подаются после энкодера данные очень хороший вопрос Хороший вопрос сейчас дойдём к нему Ну ладно давай сразу отвечу там где будет использоваться столько декодер этот блок убирается то есть его нет и В каком-то смысле это становится практически практически как энкодер Но есть небольшое отличие тут на самом деле надо подписать что это не просто Self Attention А это называется masked Self Attention это

деле надо подписать что это не просто Self Attention А это называется masked Self Attention это ещё у меня есть знаете где так а вчерашняя статья вчерашняя статья Помните у нас с вами была вот эта картинка Вот то есть если сюда взглянуть то они действительно очень похожи между собой очень похожи да то есть если вот ну здесь они по-другому чуть ото образили они вот att это они и назвали видите вход сде идт То есть это то есть вот эту штуку если Убрать вот эту штуку если убрать то есть ничего не

сде идт То есть это то есть вот эту штуку если Убрать вот эту штуку если убрать то есть ничего не применять с декодера то выходит что как вы видите практически тоже самое что в инкоде согласны кстати здесь мы проливаем в суть Почему Потому что когда Берт обучался помните вам рассказывал что маскируются случайные слова то есть у Берта как бы во время обучения маскировать только какой-то случайное слово и сонор мог смотреть как влево так вправо наоборот вправо влево собственно говоря тем самым м

слово и сонор мог смотреть как влево так вправо наоборот вправо влево собственно говоря тем самым м в од и ВГУ случае с в случае с Когда у нас будет предложение Мама мыла раму а как я м сказал это декодеры мама мыла раму то получается когда мы обучаемся вот когда нужно генерировать слово мыло после слова мам то ну как бы на раму смотреть нельзя правильно этого сло естт ВС даётся просто говори предскажи это слово оно замаскирован для G убирается и это слово и это это есть то есть наложи маска

это слово оно замаскирован для G убирается и это слово и это это есть то есть наложи маска вот на вот это слово и всё что будет перед тем как генерируется целевое слово на него всего накладывается маска и для них вообще не считаются и они никак не используются в нашей архитектуре они имеют нулевые динги всё нулевое и о удобне для GT напоминаю Когда появился Когда появился у нас с вами декодер ой Когда появился это когда появилася сама архитектура Трансформера она была для машинного перевода и

Когда появился это когда появилася сама архитектура Трансформера она была для машинного перевода и блок Деко был как раз таки для восстановления то есть генерации последователь поэтому как бы понятно что уло именно в сторону prod Attention мы с вами проговорили Да как бы это такой механизм само внимания само внимания и что здесь есть у нас с вами смотрите вот Обратите внимание что вот мы берём с последнего энкодера последнего энкодера У нас вот есть здесь к и в вот у меня энкодер Представьте

с последнего энкодера последнего энкодера У нас вот есть здесь к и в вот у меня энкодер Представьте что мы с вами А вот эти к и в вот эти к и в В каком-то смысле забираем то есть мы отсюда берём и отсюда с последнего энкодера они уже всё равно какую-то информацию содержит Да через полно связанные слои как-то обработаны именно вот они соответственно соответственно идут в слой декодера в декодеры творится Как ви примерно та же самая магия даже если говорить точно не примерно точно такая же Ну и

творится Как ви примерно та же самая магия даже если говорить точно не примерно точно такая же Ну и происходит восстановление всё Вот и вся архитектура декодера пока что мы е управ са бафик просто вот эти они приходят из энкодера этот слой который называется р декодер уже в декоре вот так вотр Да например [музыка] солнце имеет цвет и здесь какое-то слово которое нам надо было бы вставить вот собственно говоря мы могли бы на этом закончить Да и там ну или вообще просто изго они бы зашли сюда эти

говоря мы могли бы на этом закончить Да и там ну или вообще просто изго они бы зашли сюда эти три слова прошли через Self начинают знакомиться каждый с каждым а именно ма а ма att Это значит что солнце не видит ничего Да там солнце имеет имеет там кое-что ещё для генерации Ну вот в общем проходя через все эти истории У меня к вам вопрос А с какой Вот вот этот плано связаный слой Как вы думаете Сколько выходов у него должно быть коря наверное то есть по факту по факту а gpt модель когда вам

Сколько выходов у него должно быть коря наверное то есть по факту по факту а gpt модель когда вам выдаёт каждое слово оно решает задачу классификации по всем своим токенам которые существуют в словаре и так работают все без исключения в том числе gpt модели из самые известные там G Mini барды а Open ai Да Cloud все работают по такому принципу генерации то есть каждое новое слово генерируется как взятое самое вероятное ну или Сейчас мы посмотрим как можно иначе пому слова и так вот

как взятое самое вероятное ну или Сейчас мы посмотрим как можно иначе пому слова и так вот последовательно последовательно рождается генерация давай вопрос а gpt работает связке декодер или только декодер gpt вот в принципе смотрите вот это настолько близки архитектуры что по-хорошему я бы мог бы и декодер Ну вообще говоря использовать для классификации просто прикрутить повязаны сло чем бы квал тоже само Я бы наверно мог бы для каких-то других задач Да использ там тоже попробовать сделать

тоже само Я бы наверно мог бы для каких-то других задач Да использ там тоже попробовать сделать генерацию Хотя как бы Это сложнее будет но просто вот вот это одна разница да одна разница она как бы начинает образовывать кому Какая задача ближе и вот вс-таки иде это больше про классификацию про там выделение инф предсказать Вот это всде это именно проде есть понял А тогда в каком случае нам важно использовать обе модели и вот эти все вот перекидывания матриц имеют смысл Ну как в оригинальной

использовать обе модели и вот эти все вот перекидывания матриц имеют смысл Ну как в оригинальной статье то есть там ещ за написали конечно gole переводчик считается самым сильным переводчиком в мире по факту он там полностью работает Нако моделях Трансформеров Но самая главная суть самая главная суть что оказывается потом все поняли прикольное Следствие по отдельности работы Ира декодера и вообще говоря это стало даже потри [музыка] заговорили про это вот есть вот тако 20 понятно что сечас

говоря это стало даже потри [музыка] заговорили про это вот есть вот тако 20 понятно что сечас дерево ещ разрастается и раст Да и здесь вообще далеко даже близко всего не показано Но вот можно взглянуть Да что у нас с вами есть там Open Source или сонно в открытых источниках или закрытых и как бы если Вы посмотрите дерево вот да то есть в принципе за это не топит дальше чтобы его как-то уничтожать и это семейство существует просто улучшаются текущие есть вот encer декодер модели Обратите

и это семейство существует просто улучшаются текущие есть вот encer декодер модели Обратите внимание Да здесь тоже есть какие-то известные модели Да там К5 гуглов и так далее ну это вот больше говорю связано с чем с машинным переводом или ещё с какими другими задачами но самую интересную гонку Я думаю вы все это ощутили По новостям да тому что происходит получила гонка моделей потому что ну все они решают задачу генерации текста мне это оказалось самой хайповой Ну наверное самой полезной можно

решают задачу генерации текста мне это оказалось самой хайповой Ну наверное самой полезной можно так сказать Ну или просто самой новаторской как будто бы да самой новаторской идее в ллн ках которая как бы ну вообще может очень сильно изменить бизнес-процесс происходящий у нас в жизни Вот поэтому в эту гонку вступили все бигтех Эта гонка продолжается как бы вот мы с вами были свидетелями пару недель назад что там Лама выпустила ещё одну свою модель да точнее выпусти е свою одну модель как бы gp5

назад что там Лама выпустила ещё одну свою модель да точнее выпусти е свою одну модель как бы gp5 там готовится у Гугла ну там буквально ше таких крупных игроков Но вот это всё de моде какие-то в открытом доступе какие-то в закрытом Да но большинство в закрытом потому что все их стали монетизировать по открытой ветке идёт в принципе как бы Мета в основном покры вет коммерческого использования А все остальные предпочитают закрыто решение что раньше вот в этих моделях видите такого как бы не было

остальные предпочитают закрыто решение что раньше вот в этих моделях видите такого как бы не было вообще всё было осорно а здесь соответственно видимо стало много много денег да огромный огромный потребительский спрос соответственно всё стало плюс-минус в закрытых истори плю гонка никто не хочет показывать что ни есть последняя моде кру из та Ой это закрыты Наро бы ОТК Давай са вопрос и с Вот это поему разме спросила что Какая длина у лини размерность ответ был словарь выход ско А здесь что что

поему разме спросила что Какая длина у лини размерность ответ был словарь выход ско А здесь что что первое что ты сказал ну здесь вход какой-то Я не знаю вот в Уно что по пода подам с вами получается то есть мы подаём как бы наш последовательному и скорее всего здесь будет это паме одним предложением где нужно преть одно слово я те Уточнить тези про то что вводит размер это предпосылке о том что мы хотим прогнозировать одно слово и соответственно у нас даёт вероятности для каждого слова из

что мы хотим прогнозировать одно слово и соответственно у нас даёт вероятности для каждого слова из словаря по поводу того какое это слово будет да то есть здесь видимо нужно уточнение ЕС как хотим генерировать не одно слово следующее А много слов нет одного слова показываю потом авторен всё это повторяется то есть мы сгенерировано слово переходим к следующей Это вот смотри Помните у нас был вот у меня пря Я даже уже здесь рисовал что это что-то похожее Наде можно воспринимать Да вот вот это

у меня пря Я даже уже здесь рисовал что это что-то похожее Наде можно воспринимать Да вот вот это контекст передал информацию А у нас с вами как бы это для генерации текста сказали что можно забить на энкодер да для классификации можно забить на декодер Ну как бы вот в принципе суть похожая и видишь у нас как бы получается что вот мы генерируем Да мы генерируем сколько угодно историй пока не упрётся се в служебный token ind of sequence это в принципе для gpt то же самое вот и получаем какую-то

се в служебный token ind of sequence это в принципе для gpt то же самое вот и получаем какую-то последовательность и даже вот на вот это вот рисунка рисунок Мне нравится то есть мы здесь тоже с вами про это проговаривать что вот hidden size в данном случае да ин то есть размер словаря у нас где мы как бы по каждому слову получаем пробили и возвращаем самое вероятное слово то есть мы если сейчас правильное соотношение это вот на эту картинку смотреть мы на НН один НН для следующего слова

правильное соотношение это вот на эту картинку смотреть мы на НН один НН для следующего слова следующий НН для после следующего слова и так далее ну это одна и та же ячейка НН как бы но в принципе да А в смысле Ну это один и тот же как бы класс который просто дела работает вот так аре это называется аре Ну окей Да ладно Так давай твой вопрос Да мы на вход декодер подаём то же самое что и вчера подавали на вход логистической условной регрессии или мы подаём всё-таки матрицы K и в а нет на вход

на вход логистической условной регрессии или мы подаём всё-таки матрицы K и в а нет на вход декодера подаются Инги То есть перед Ром стоит слой динга который их создаёт там или откуда вы эти динги получите в целом как бы ну вот мы вчера трансформером трансформировались тонаром Да это уже динги или нет Ну давай й ответ на вопрос или нет наверное нет Да конечно что там первое слово у них динг так и написано типа мы токены получаем в динг и вспомните как мы КНУ как мы в самый первый день с вами НН

написано типа мы токены получаем в динг и вспомните как мы КНУ как мы в самый первый день с вами НН писали вот НН мы самописный делали там тоже У нас сначала были токены Потом по этим токенам мы получали им бедин лбами помню обсуждали подробнее этот момент То есть им бедин и потом уже все архитектуры ничего не поменялось То есть как бы видите всё то же самое пытаюсь сделать только просто через более сложную архитектуру поэто поэтому ответ на й вопрос токенизация токена потом слон этин заходят

сложную архитектуру поэто поэтому ответ на й вопрос токенизация токена потом слон этин заходят сюда то есть подаётся то что подавалось вче логистическую регрессию усно Ну нет нет подаётся то что ты бы подал бы в так в вроде подал [музыка] ещё подписали здесь отдельно отдельно слой им бенга то есть вот им бенга Ну всё ладно Хорошо посмотрим в коде Берт если Ну в коде Да в коде Посмотрите просто будет слой динга напрямую Если ты берёшь какую-то модель если у них есть слой динга значит они за тебя

слой динга напрямую Если ты берёшь какую-то модель если у них есть слой динга значит они за тебя его сделают если нет слой динга Ну будет добро сам поставить токены как бы токены тебе надо будет дать им то есть таки назер всё равно идёт отдельно всё Угу хорошо вот так так так так какие здесь ещё у нас с вами остались вопросы Ну я думаю плюс-минус Понятно Вот ну как бы если вдруг кому интересно вот мне просто было это интересно Вы прям может даже уже пти спросить чтобы она вам рассказала как

вот мне просто было это интересно Вы прям может даже уже пти спросить чтобы она вам рассказала как обуче кому это кажется какой-то магией Вот вы Пойте что это оче на самом деле несложная история и никакой там прямо сверх магии нет попросите скажите вот есть Пять элементов выборки Покажи как ты на них обучалась О расскажет как она А обучается да вот например мама Мыло раму на самом деле даёт два элемента выборки для обучения нужно предсказывать слово мыло и нужно предсказывать слово раму через

элемента выборки для обучения нужно предсказывать слово мыло и нужно предсказывать слово раму через Mask Self Attention она закрывает нужные слова всё точно так же считается росн тропея и всё вот я просто когда-то прописывал прям вручную этот gpt ну не вручную В смысле на пайтор чтобы лучше понять как он устроен и там потом смотришь понимаешь что идея на самом деле достаточно такая прозрачная и очень похожа на блок инкоде то ну вот реально прям минимальные различия Вот это по поводу процесса

очень похожа на блок инкоде то ну вот реально прям минимальные различия Вот это по поводу процесса самого обучения Да и как вообще всё это может быть устроено мы с вами поговорим именно конкретно на задаче gpt так Ну тут вообще это мы всё обсудили тут можно решать видите не только Да как бы для не только решать задачу генерации текста Как я вам говорил Давайте ещё раз вернёмся в в это в на эту картинку на этот слайд кто мне мешает сюда подцепить полносвязный слой с двумя нейронами решать задачу

на этот слайд кто мне мешает сюда подцепить полносвязный слой с двумя нейронами решать задачу бинарной классификации но никто правильно просто как бы это лучше Надер делать потому что как бы в декоре ма он смотрит только на слова лево относительно слово моза [музыка] вот он смотрит вот он смотрит только на слова слева а правые слова игнорирует вот а смотрит на все поэтому как бы используют классификацию сюда А сюда используют генерацию текст Но помимо этого как бы манипуляции Свободы много вот

сюда А сюда используют генерацию текст Но помимо этого как бы манипуляции Свободы много вот можете посмотреть там вот да решатся вот это по-моему есть соответственно утверждение какое-то есть гипоте точнее Нет Есть предложение гипоте предложение и соответственно мы можем в итоге принимать решение правда это или нет Можем оценивать схожесть Да схожесть двух текстов вот там можно так собрать архитектуру там и ещё на самом деле этих задач очень много но мы на них сильно Останавливаться не будем

там и ещё на самом деле этих задач очень много но мы на них сильно Останавливаться не будем Потому что конечно как бы самая хайповая задача - это генерация текста Гене всех зам за 4 дня Вот но обязательно если что там у вас будут источники г можно почитать так по-моему вот эта ссылка увидел её хочу вам показать она не она Да она помо вот здесь есть всякие [музыка] визуализатор бы разбирался мне не очень нравится но тут можно как бы проваливаться то есть вот слой динга например да то есть вот

не очень нравится но тут можно как бы проваливаться то есть вот слой динга например да то есть вот какие-то входные токены Они показывают вот как динги да то есть Вот соответственно номер токенов и позиционное кодирование динга вот типа появились им бедин дальше можете проваливаться Вот там первый слой Да у нас полносвязный слой normalization потом начинается Self Attention Вот они соответственно пошли головы Да вот вот раз голова КВД голова кв соответственно можно смотреть что куда идт да то

пошли головы Да вот вот раз голова КВД голова кв соответственно можно смотреть что куда идт да то есть вот они как подаются эти кв после этого сло нормализации после они проходят через головы формируется вот у нас att matx дальше эти att Мари кон катятся пропускаются через F и идут там на выход дальше Ну собственно говоря каждый слой вы здесь Можете пощупать посмотреть вот они вот здесь кон катятся прогоняю В итоге что-то там получается получается Ну в общем покайтесь покайтесь кому интересно

прогоняю В итоге что-то там получается получается Ну в общем покайтесь покайтесь кому интересно как по мне ну лично мне не очень нравится тя иногда бывает удачно но в целом не фанат но тут кому как большинство на самом деле наоборот визуала да меньшинство те кто воспринимает информацию обострённое рецепторы я больше как бы воспринимаю Ну просто рисунок може лучше чтобы понять что к чему устроено вот так так так идём идём идём дальше что у нас здесь с вами есть что у нас здесь есть с вами ещ так

так так так идём идём идём дальше что у нас здесь с вами есть что у нас здесь есть с вами ещ так Ну это мы всё с вами обсудили обсудили обсудили здесь мо смотреть объёмы Да объёмы датасета и количество параметров как что росло да то есть вот семейство бе пошло Вот который мы с вами разбирали Да ну он примерно в пять раз да получается меньше Ну тут 108 здесь 10 сеь Ну как бы на порядок Ладно меньше в 10 раз X2 Поэтому в п вот наоборот в сторону увеличения были модели наме Ну увеличивался размер

в 10 раз X2 Поэтому в п вот наоборот в сторону увеличения были модели наме Ну увеличивался размер датасета на котором всё обучалось далее Далее далее Далее Ну в общем да Какая такая веха понятно что здесь как бы это картинка уже не полная и Сюда можно дополнять что было у сверх сверх больших моделей но тем не менее Вот какая-то вот гонка очевидно гонка пошла с тех врем С тех врем так де мы с вами посмотрели Вот давайте посмотрим как бы примеры генерации ой параметры генерации текста чтобы на

посмотрели Вот давайте посмотрим как бы примеры генерации ой параметры генерации текста чтобы на это влияло ещё раз за земли задачу генерацию текста решает декодер декодер вот то есть вот эта вещь просто отрубается просто отрубается она нам не нужна становится Поэтому вот этих мостов которые здесь посерединке их проста вдем плава принимает слов я так матри укажу ю какой-то фразу исходя из этих инго ан сло пря вспомните как бы как как выдаёте GT что-то Да в том числе точно также принимат два

инго ан сло пря вспомните как бы как как выдаёте GT что-то Да в том числе точно также принимат два слова а это вашин Ну то есть у не сла потом нги всё это проходит через слов статистическим вариантом да то есть здесь вот это слово более вероятно здесь вот это вот это вот это вот это и поехали и формируется у нас с вами ответ gpt который как бы уже дошёл просто физических уровней Да подытожить отрубленный декодер без энкодера он будет от энкодера отличаться только то что там ма и каже что на

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

но предложение из де слов например как бы энкодер учился у него закрыли пятое слово нужно будет предсказать это пятое слово энкодер смотрел в обе стороны в обе стороны то есть и так и так да трансформа пер а соответственно Вот это предложение из десяти слов Ну давайте вот для всех Да чтобы немножко так сказать понять что разница Она с одной стороны большая с другой стороны Она присутствует то есть вот у нас с вами какое-то первое слово второе слово третье слово четвёртое слово Ну пусть будет на

вот у нас с вами какое-то первое слово второе слово третье слово четвёртое слово Ну пусть будет на примере пяти слов и вот это слово соответственно как бы оно маскируется оно для Берта его нужно классифицировать тоже а для gpt его нужно сгенерировать как бы так вот как бы gpt ещё отключит вот эти слова тоже накладывая на них маску декодер точнее декодера и его Self отключит скажет что нужно смотреть только сюда когда мы генерируем слова нельзя смотреть наперёд Ату можно было ту можно было всё

только сюда когда мы генерируем слова нельзя смотреть наперёд Ату можно было ту можно было всё вот это самая главная разница конечно да как бы между энкодером декодером да ко какой вопрос ещё на понимание есть значит когда допустим gpt учится когда ему подают тонный текст скармливают он понятно он начинает потихонечку закрывать нашить маски на последние слова сравнивать свои предикты с тем что было в реальности а когда он переходит уже в боевой режим как там внутри это всё борется с скажем так

в реальности а когда он переходит уже в боевой режим как там внутри это всё борется с скажем так накапливает когда ему нужно предсказывать каждое новое слово и дальше предсказание он строит уже на основе плюс одного своего предсказанного слова я понял Ну это как бы Хороший вопрос Мы мы как сказать не застрахованы от этого это значит что если вот Я не знаю Может замечали сейчас уже меньше Но Раньше такое было gpt модель могло унести не туда в генерации не знаю Ну GP наверно да Ну может быть п он

такое было gpt модель могло унести не туда в генерации не знаю Ну GP наверно да Ну может быть п он бы в один момент начинает вообще другие вещи обсуждать какие-то это вот про то что ты говоришь как бы один токен мима порождает соответственно иллюзию того что о обсуждает другой токен мима И вот они начинают потихоньку уходить в сторону вот сейчас это бы ВС меньше и меньше как с этим жеже пори действительно такая проблема такая проблема присутствует что если как бы произошла ошибка то с каждым

такая проблема такая проблема присутствует что если как бы произошла ошибка то с каждым новым токеном она усиливается Ида Вот то есть по большому счёту на это можно повлиять Ну вот базово только только размером изначального словаря и просто чем больше данных ты ему скормил на обучении тем качественно он работает последствия то есть в целом Да Абсолютно верно абсолютно я тоже знаеш тоже люди если мы немного не поймём что нам на вход подаётся Да у нас нет знаний прошлого как это нормально Мы

мы немного не поймём что нам на вход подаётся Да у нас нет знаний прошлого как это нормально Мы можем не воспринять информацию и наш как бы ответ может вообще уйти в сторону да то есть ты вот мне скажешь какую-нибудь мысль А Я не понял твоего вопроса и совестно начинаю Вообще другой объяснять как бы вот наверное можно провести какую-то тут параллель и если я начал другой объяснять то я всё дальше от тебя ухожу то есть как бы мой мой ответ всё больше мимо мимо там Ты конечно меня поправишь и мы

от тебя ухожу то есть как бы мой мой ответ всё больше мимо мимо там Ты конечно меня поправишь и мы выров Ну G5 сейчас тоже так и происходит следующими какими-то своими а давай-ка Вот вот вот на вот этом сделай акцент Да луба Давай твой вопрос ты немного запутался получается энкодер и декодер вместе они нужны для перевода правильно машины перевод декодер отдельно для декодер отдельно для генерации а энкодер отдельно типа для чего просто прикол просто чисто решили обучить р так развлекаться Ну ты

а энкодер отдельно типа для чего просто прикол просто чисто решили обучить р так развлекаться Ну ты вчера использовал для чего ты вчера использовал для классификации классификация Но самое главное на самом деле самое главное даже скал не классификация самое главное что нужно кора получить Инги сло вот эти Инги да использ для классификации их можно ещ использовать для каких-то вещей потому что Инги это как бы знаете Скоми текст какому-то умному человеку Яна своё резюме какое-то такого же размера

это как бы знаете Скоми текст какому-то умному человеку Яна своё резюме какое-то такого же размера причём как и вход дальше мы цепляли классификацию но есть ещё ряд задач которые можно зацепить то есть чаще всего наверное от Берта от Берта если у вас бы спросили на собесе типа Для чего Берт можно коне сказать что он для классификации Но это скорее следствие да то есть как бы как бы классифицируют не Берт классифицируют прирученный модуль классификации к берту а всё-таки са самая главная суть

не Берт классифицируют прирученный модуль классификации к берту а всё-таки са самая главная суть Берта - это вот дать им бедин контекстные динги где как бы ну эти динги отражают предложения уже относительно именно сложившейся ситуаци есть икит в первую очеред получени либо Динго слов либо более того мы с вами вчера брали динги чего не слов а сло Ну можно сказать но мы же немного брали это и был эдинг предложение поэтому можно сказать что Берт возвращает эдинг текст и это очень популярно Бер

эдинг предложение поэтому можно сказать что Берт возвращает эдинг текст и это очень популярно Бер очень популярная модель И encoder по отдельности очень популярны Да наверное конечно как бы gpt гонка сейчас всё это затмила всё это затмила но пока она не началась э gpt гонка как бы как вы видите вот До двадцать первого года интерес больше был не к правой ветке Далеко да вот то в эту гонку игра только оди та ВС Ну там чтото попытался но Никто особо не ул по этой тематики генерации текст да то

только оди та ВС Ну там чтото попытался но Никто особо не ул по этой тематики генерации текст да то есть по факту вот как бы Новатора были о этого направления Зато соответственно игнорировали полностью ничего не делали с этой стороны все остальные модели с этой Ну и остальные компании Конечно вот в те вре после выхода пару революционных моделей на самом деле это gpt-3 вот когда gp3 вышло стало понятно что что-то в принципе как будто бы за этим может быть и стали подключаться туда большие

понятно что что-то в принципе как будто бы за этим может быть и стали подключаться туда большие компании Надеюсь ответил на твой вопрос все энкодер отдельно существует и декодер отдельно существует и оба они очень популярны в зависимости от задач вот де котра же тоже нужно им по деньги правильно Да да Нет ну а [музыка] вот Берт как бы он принимает динги и он отдаёт другие динги это контекстные динги То есть первый динги это бы знаешь В каком-то смысле просто закодированные слова а здесь уже

динги То есть первый динги это бы знаешь В каком-то смысле просто закодированные слова а здесь уже конкретно слова Вот в контексте понял вот иту действительно Ну Ой декору как бы как ты говоришь нужны Инги это равному слова стму слово прямо вовнутрь правильно то есть его нужно всё равно закодировать а векторное представление слова это и называется инг векторное представление слова текста там чего поэтому действительно Да ты прав сюда приходят им бедин особенно после того как мы здесь обвали А

поэтому действительно Да ты прав сюда приходят им бедин особенно после того как мы здесь обвали А что вообще навд подавать кроме как Поэтому да в декодер подаётся динг сло правильное наблюдение вот так Ну что давайте идём дальше Давайте пойдём дальше А у нас на повестке дня параметры генерации текста то есть теперь мы как бы с вами обсудили что вот примерно есть декодер этот декодер обучен Да и он способен генерировать текст Есть ещё пару нюансов как бы генерации текста именно на уже когда на

он способен генерировать текст Есть ещё пару нюансов как бы генерации текста именно на уже когда на inference работаем то Кто у вас успеет сегодня дойти на сегодня точнее завтра скорее до задания связанное с генерацией текста тот мм сть не все доходят как бы поймёте там что имеется в виду там вот как бы параметры генерации текста то есть это параметры которые позволяют по-разному управлять какие токены мы сгенерировал итак генерация очередного токена получили распределение вероятности для

токены мы сгенерировал итак генерация очередного токена получили распределение вероятности для множества токенов Как выбрать следующий токен Ну что самое очевидное самый вероятный Soft ма да са Да от софт Макса скажем так Абсолютно верно то есть берём как бы самое вероятное слово Вот а если выбрать просто наиболее вероятно то будем предсказывать фиксированную последовательность что имеется в виду вот смотрите Давайте вот на эту рисунок возьмём В каком-то смысле В каком-то смысле мы даже с вами

вот смотрите Давайте вот на эту рисунок возьмём В каком-то смысле В каком-то смысле мы даже с вами когда-то рисовали помните дерево решени на теории вероятностей и помните мы дерево решений там полны вероятности считали есть флешбеки небольшие вот В каком-то смысле любую нейросеть можно разложить на дерево принятие дерева решений просто это дерево огромнейший размеров оно не бинарное Но работает всё примерно по той же философии и В каком-то смысле получается что когда есть слово когда есть

всё примерно по той же философии и В каком-то смысле получается что когда есть слово когда есть слово как бы уже вероятности детерминированы правильно Ну то есть это уже всё как бы это посчитано ну как бы он считает в моменте но если мы заглянем в будущее по какой бы мы ветки не пошли там всё детерминировано так или иначе это холодная конечная модель принятия здесь нету никаких отоп факторов никаких точнее внешних факторов нет их просто нет всё как моде обучила так обучила это короб туда

никаких точнее внешних факторов нет их просто нет всё как моде обучила так обучила это короб туда какие-то слова закинули она уже всё у не есть оден рекция Нам нужно как будто бы Случайность какой-то попытаться добавить ещё и вот если соответственно мы как бы просто бы остались у нас было получается у нас Ну вот из этих трёх слов да то есть это най дальше у то есть мы как бы определённо зашли бы вот по такой истории а это значит что все кто бы сталкивались там плюс-минус похожий промт промт и у

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

вот так пройти или что-то ещё в общем все эти вещи все эти вещи они как сказать они актуальны для нас они актуаль вот вот эта процедура называется жадный поиски она как бы не самая такая достаточно оптималь игт воровать онова внести некой случайно чтобы как бы мы уходили по другим веткам в том числе но при этом это было адекватно и процедура называется Beam Search Beam sech например как бы вот вот у меня вот нам Beams указан равен двум Это значит что как бы модель она заглядывает не на одну

вот у меня вот нам Beams указан равен двум Это значит что как бы модель она заглядывает не на одну итерацию вперёд а на две сразу перед тем как генерация перед тем как Вам ответить она подумает о двух словах знаете вот если бы я бы рассуждал вот что мне сейчас вам сказать Я бы думал не только о первом слове а ещ и о втором обязательно и вот на основании двух слов принимал решение в таком случае например Какова вероятность Да получить Давайте полная вероятность вспоминаю это не полная

случае например Какова вероятность Да получить Давайте полная вероятность вспоминаю это не полная вероятность [музыка] Да история зависимые независимые события вот далее здесь соответственно идём вот у нас есть слово док например Давайте вот сюда пойдём сколько здесь у нас с вами 06 0.36 0.36 Абсолютно верно А хорошо 0236 получается что в таком контексте на самом деле оказывается что вот эта идея как будто Ну более интересно да то есть она имеет вероятность можно всегда воспринимать как вес то

как будто Ну более интересно да то есть она имеет вероятность можно всегда воспринимать как вес то есть по факту как будто бы вот здесь вес это больше лежит но на само деле проблему это не решает нашу до сих пор Но тогда всё ходило бы по этой ветке правильно я а скорее как бы как вы поймёте что по отдельности этот механизм ничего не решает он хорош как бы в контексте или в связке Да со следующим механизмом который мы обсудим это как бы наш сказать-то горизонт планирования точне не горизонт

механизмом который мы обсудим это как бы наш сказать-то горизонт планирования точне не горизонт планирования Горизонт взгляда скажем так да когда мы его ставим выше то мы можем посмотреть дальше когда он у меня стоит один я вот дальше этого пока не вижу Вот пока я не даже дальше Вот этого пока я не дам какое-то решение по этому слову я не могу смотреть дальше вот просто не могу я не вижу стена стоит просто стена А как бы вот этот параметр позволяет стену убрать и видеть чуть дальше Конечно как

просто стена А как бы вот этот параметр позволяет стену убрать и видеть чуть дальше Конечно как говорю отдельно Он не решает проблемы мы бы всегда Ходили бы по этой истории Но сейчас посмотрим [музыка] посмотрим как другой ещё параметр на это влияет вот ну здесь смотрите есть рисуночки них не буду останавливаться это примерный расчёт принятия решений как указано здесь Да подробнее как что получается как считают энтропию там и смотрят где она минимальна и принима тоже ВС это Шаг за шагом

получается как считают энтропию там и смотрят где она минимальна и принима тоже ВС это Шаг за шагом считается считается Вот теперь теперь соответственно процедура Сплин процедура Сплин заключается примерно в следующем вот вообще как бы с одной стороны Да На как бы имеет больший вес Ну давайте подумаем как нейронка обучалась нейронка обучалось вот 05 этот что главное слово все идите значит что на 10 случаев она раньше во время обучения пять сталкивалась с таким Четырежды сталкивалась с таким

на 10 случаев она раньше во время обучения пять сталкивалась с таким Четырежды сталкивалась с таким единожды сталкивалась с таким Согласно Ну вот примерно так это всё работает частота Да и по хорошему По хорошему а хорошему А почему бы нам с вами не сделать то же самое то есть Включить этот семплинг Представьте что ну это делаю через генерацию равномерного из из равномерного распределения 0 кто-то помнит равномерное распределение 0 Что делает точнее как бы как выдаётся юниформ которая я в

кто-то помнит равномерное распределение 0 Что делает точнее как бы как выдаётся юниформ которая я в принципе всё уже сказал сам равномерно выдаётся в чём вопрос я хотел спросить юниформ распределение чтобы вы мне напомнили что это такое вы сказали что оно равномерно Я сказал что да так произошла небольшая небольшой лаг вот да это равномерно распределение то есть число от Ну до одно выдаётся абсолютно случайно и мы с вами будем делать Так что вот разделим это на условные границы точнее Вот так

случайно и мы с вами будем делать Так что вот разделим это на условные границы точнее Вот так вот и теперь если у меня выпало слово отсюда Ой точнее выпало случайное число отсюда то мы следующий токен генерации какой дадим как [музыка] думаете Да Томы будем смотре там ветку до то есть вот как бы вот эти 40% ложатся на это слово вот эти 50% а вероятность попасть сюда Через cdf можно посчитать 50% Да и соответственно вероятность попасть сюда она там у нас 10% вот ну и там следующее слово и так

Да и соответственно вероятность попасть сюда она там у нас 10% вот ну и там следующее слово и так далее есть вот это есть процедура слинга внесения случайности Но конечно сейчас мы с вами поймём что тут все слова если указать это будет бред Это значит что даже маленькая вероятность кому-то могла бы ответить вообще в молоко всё равно это надо нивелировать эффект да то есть как бы я же из всех токенов выбираю не только из трёх по факту Это у неё спрашиваешь Какая на улице погода она тебе начинает

выбираю не только из трёх по факту Это у неё спрашиваешь Какая на улице погода она тебе начинает рассказывать не знаю про какие-нибудь гражданские войны вообще периодов прошлых как бы вот вот эти моменты чтобы зафиксировав совокуп когда работают вместе да смотри вот эти параметры которые мы обсудили Мне кажется они хорошо работают когда нет ничего е Вот мы только начинаем генерировать мы начинаем с чего-то там с того же артикля А А есть что-то что может опираться на контекст потому что в любом

с чего-то там с того же артикля А А есть что-то что может опираться на контекст потому что в любом случае как бы ну текст речь Она связана так или иначе Можно ли как-то на более крупные объекты назад посмотреть типа на предыдущее предложение какие-то контекст выпи тамм и на основе туда принимает решение генерации они будут же То есть у тебя как декодер работает то есть декодер У тебя когда генерирует он всё что было он видит То есть он знает это Поэтому соответственно если он что-то

генерирует он всё что было он видит То есть он знает это Поэтому соответственно если он что-то сгенерировал да то есть вот как тебя мама Давайте мама мыло вот вот это слово он те сгенерировал раму Да вот пусть в своём доме предложение мама л раму вот прежде чем сгенерировать в вот здесь вот какой-то токен дать теперь это слово-то известно модели То есть она его знает и она как бы Исходя из этого действует и поэтому то что ты говоришь Чем дальше заходим тем меньше надобности задавать бы эту

действует и поэтому то что ты говоришь Чем дальше заходим тем меньше надобности задавать бы эту Случайность бы ты прав по факту ты прав но всё равно особенно русский язык Представьте насколько вообще на самом деле он и наказатель может быть то есть ведь там ведь как бы среди топ слов будет не полный бред полный бред будет очень далеко а там например будет Как выразить что-то прекрасно я могу сказать прекрасная могу сказать очаровательная красивая захватывающая там или что-то ещё там вот такие

прекрасная могу сказать очаровательная красивая захватывающая там или что-то ещё там вот такие слова конкуренты будут понял кость да то есть в смысле Угу А вот Какие бы вот такие слова которые как бы Когда мне нужно пе прекрасного А чтобы там оказалось слово колесо например которое Вроде вообще здесь никакого отношения не имеет оно будет просто очень иметь маленькую вероятность и вот параметры ниже которые мы поговорим они практически уведут в ноль вообще или вообще обрежу чтобы этого

ниже которые мы поговорим они практически уведут в ноль вообще или вообще обрежу чтобы этого неадеквате не было чтобы такого не было как-то так понял Люба ну я просто не знала про юниформ я сейчас спросила у он мне ска сказал что это способ инициализации весов случайными числами Ты не мог бы объяснить про этот юниформ либо сказать А в какой день обучения это было чтобы я могла вернуться к этой информации потому что мне непонятно про юниформ это был второй день фазы оди наш с вами второй день

информации потому что мне непонятно про юниформ это был второй день фазы оди наш с вами второй день знакомств мы проговаривать разные распределения Ну форм самое простое распределение случайное число от нуля до одного выдать всё Вот они все равны вероятно одинаково То есть если была бы гистограмма какого-нибудь равномерного распределения например кубик имеет равномерное распределение хоть и дискретное но равномерное мы считаем что все числа выпадают равновероятно все цифры 1 2 3 4 5 6 То есть

но равномерное мы считаем что все числа выпадают равновероятно все цифры 1 2 3 4 5 6 То есть вот он юниформ всё одно да что-то видимо Я в точку залип Вот какую-то и в какой момент модель приходит к этому фор распределению для вы следующего слова которое выдать после слоя последнего имеющего выход Я про забыл это параметр называется у этого пермет Мет выбора слов То есть если ты включаешь там можно настройки Какие поставить то в целом в целом ности мы грубо говоря пойдём если бы сэмплинг то было

настройки Какие поставить то в целом в целом ности мы грубо говоря пойдём если бы сэмплинг то было бы выбрано тупо слово Найс понял тупо слово если если сэмплинг Фолс то мы идём по самой крупной вероятной ветке у нас был бы Найс Что у нас там было Если у нас было бы ЛС Ну в зависимости Если бы ты указал нам Beams равно два то мы бы пошли бы по вот этой ветке если типа нам бимс равно один то мы бы смотрели на один шаг вперёд всегда и конечно мы прошли бы за най W вот а когда добавляется сэмплинг

смотрели на один шаг вперёд всегда и конечно мы прошли бы за най W вот а когда добавляется сэмплинг когда есть сэмплинг соответственно у нас даже есть вероятность пойти по вот этой редки предположим то есть нам Beams - это типа ма ну максимальная глубина вот этого дерева типа которое построится Куда мы дальше будем смотреть и мы выбираем максимальную вероятность на самом конце ветки Ну наверное можно так сказать можно так сказать А как нужно сказать Ну я вос принимание глубина я это воспринимал

так сказать можно так сказать А как нужно сказать Ну я вос принимание глубина я это воспринимал Горизонт который я вижу то есть я вижу например значит я вижу два сло то что здесь нет а вот на это значит я сгенерировал все двоечки да и посмотрел то есть мы приходим к слову у нас строятся дальнейшие два слова ветки для дальнейших всё понял Понял мо вос удобно давай это убай сейчас вопрос первый вопрос насчёт вот этого нам Бим Типа если его два задать Он же не обязательно выберет ветку типа как

насчёт вот этого нам Бим Типа если его два задать Он же не обязательно выберет ветку типа как вторую на дог и или он всегда будет выбирать две самые на наибольшем с наибольшей вероятностью не понял вопрос можешь ещ раз повторить вот нам мы типа два указали да это типа как э первая ветка вторая ветка Да значит что ты первое слово второе слово значит ты на два слова смотришь И теперь вот ты мы же посчитали вероятность 02 036 на самом деле Вот это имеет больший вес чем вот это Хотя если бы нам Бим

вероятность 02 036 на самом деле Вот это имеет больший вес чем вот это Хотя если бы нам Бим всё равно ты бы обязательно пошёл бы сюда Найс он будет типа на МС когда 2 укажем он будет типа в каждую заходить и проверять типа до Второй где вероятность больше а да типа например он зат и насчёт слинга там типа по Дефо форм указан Да да да форм - это просто способ по-братски раздать эти вероятности и всё можно по-другому делать то есть как как сгенерировать случайное число и потом сделать отбор чтобы

можно по-другому делать то есть как как сгенерировать случайное число и потом сделать отбор чтобы слово на выпало с вероятностью 50% слово 40% слово 10% вот наме вот таки Да это классическая история То есть это вот примерно Похоже на то что было из видео насчёт типа температуры в или Ну Темп типа в гпт там если выставить определённое э число типа будет всё равно вероятно всё выдавать да да Окей ну это не совсем то но ты зришь корень с температурой ты сталкивался Да уже как бы так сказать у тебя

это не совсем то но ты зришь корень с температурой ты сталкивался Да уже как бы так сказать у тебя этот э нам нам Beams у тебя сейчас был на один больше так сказать на одной трасс ты уже предвидел что мы сейчас про температуру будем говорить Да есть ещё температурные режимы температура вот этот параметр Конечно вот за счёт него добавляется много много всего много всего Так сечас ладно блин я потом вам скину где можно посмотреть разный семплинг разные температуры сейчас буду дольше его искать

вам скину где можно посмотреть разный семплинг разные температуры сейчас буду дольше его искать там на Стрим лите было Вот смотрите вот у нас есть с вами Soft Мак правильно формула софт Макса какая у нас с вами это е в степени ми X по-моему делить на сумму всех экспонентов что-то е в степени минус когда мы идём по всем элементам да то есть мы усреднять просто в степени x просто степени просто возводим степень и делим на сумму вот этих в степени вот как-то так как-то так ну там скажем какой-то

степень и делим на сумму вот этих в степени вот как-то так как-то так ну там скажем какой-то оден здесь ра до по всем этим ниям выхо на Т жалко Вот у меня нет очень хорошей графики вам это показать интерактивной графики В общем это просто вот как бы формуле - это деление на т а следствие происходит такое Как вы думаете если увеличивать Т что будет происходить между разными словами nce Dog и Car Ну они все друг другу будут подкатывать это смотрите есть число 2 5 и 7 большая между ними разница Ну

они все друг другу будут подкатывать это смотрите есть число 2 5 и 7 большая между ними разница Ну как будто бы есть по крайней мере а Представьте что вот это 2 я разделю на 10 вше думаете большая между ними разница уже была бы в шкале вероятности там от нуля до одного Она была бы практически нулевой правильно То есть она как бы в относительной разнице сохраняется там в 2 с половино раза Да здесь в 3 с поно раза но в абсолютной шкале разни становится про минимально А это ТХ м то что говорил их

в 3 с поно раза но в абсолютной шкале разни становится про минимально А это ТХ м то что говорил их вероятности начинают сглаживаться если Т Вот это уре бесконечности Это к чему Как вы думаете придёт ЕС температуру урот да Прав то есть каждое слово будет буквально равно вероятно получается что Чем выше температура тем больше модель Гене что Рандомные слова [музыка] начинать конкретно как бы поиграть температура имеет резон быть Да чтобы сгладить вероятность как бы возможно пойти по другим

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

друга понятно как бы получается уже что-то интересное то есть мы очень сильно обогатили генерацию очень сильно обогатили генерацию Если Вы один и тот же если вы пробовали кто-нибудь Напишите один и тот же пронт он не ответ Вам слово в слово одинако атно промт потому что вот как раз таки вот эти параметры внутри они создают некую Случайность которою он вам может ответить очень похоже и понятно что он вам ответит очень похоже но как бы всё-таки будет некоторая гибкость Особенно где он может себе

он вам ответит очень похоже но как бы всё-таки будет некоторая гибкость Особенно где он может себе это позволить есть токены которые вот Ну вот волей и неволей надо чтобы они там стояли там не до игрушек когда код на вам генерируют она же не может просто в коде что-то левое сгенерить правильно в коде всё детерминировано каждая как бы она на на этапе начала может придумать проект Но дальше когда уже пошла как бы кодовая составляющая всё Свобода пропадает параметры зажмурить вот этот единственный

пошла как бы кодовая составляющая всё Свобода пропадает параметры зажмурить вот этот единственный токен но в начале там водички Здорово там как дела и так далее соответственно можно по-разному сказать и она пользуется этим моментом вот что ещё соответственно есть топк сэмплинг теперь как бы топк сэмплинг как вы думаете что это исходя из рисунка даже можно понять даёт рассматриваем не все вот эти длину намм только самые популярные самые часто повторяющиеся слова Да какие-то ну не то что часто

длину намм только самые популярные самые часто повторяющиеся слова Да какие-то ну не то что часто повторяе самы вероятный всё-таки я бы сказал ставите топк Рав Это значит что вот эти слова вообще не будут смотреться дальше к этим словам может быть применена температура Да может прин быть там на может применён быть сэмплинг и всё остальное Но именно как бы вот это просто Априори обрезается и когда мы The дальше мы генерируем у нас The People не получится К сожалению или к радости но просто от

мы The дальше мы генерируем у нас The People не получится К сожалению или к радости но просто от такого токена невозможно в генерации это параметр опять же играе мой чем больше у васк тем более вариативные истории у вас возможно но и более неадекватные у вас тоже возможно понятное дело Вот но на самом деле не всегда удобно задавать именно в количестве Вот вы же не знаете сколько релевантных слов будет правильно согласитесь понимаете о чём я говорю то есть сколько вот релевантно конструкций

будет правильно согласитесь понимаете о чём я говорю то есть сколько вот релевантно конструкций Когда уже как бы начинается объективный бред А когда ещё нормальный есть ещё второй параметр - Это топп топп позволяет наоборот вероятность указать Вот вы указали например 0,94 P Это значит что остаются все слова которые как бы содержат в себе 94% вероятности То есть если вот мы Помните cdf у нас был на статистике такой метод cdf cdf 094 вернул бы вот эту границу то есть 94% здесь или квантиль можете

статистике такой метод cdf cdf 094 вернул бы вот эту границу то есть 94% здесь или квантиль можете назвать типа в обратную сторону на самом деле это квантиль мы по вероятности получаем разделку 94% и 6% то есть вот 94% сох мы не знаем сколько здесь слов мы не знаем здесь сколько слов но мы знаем что они в себе содержат 94% вероятности тоже как бы вот такой механизм получается за лучше топк оно выглядит так адекватне уместен пример если бы прозвучали были написаны слова из специальной лексики я

так адекватне уместен пример если бы прозвучали были написаны слова из специальной лексики я так думаю там где словарь ограничен специальная лексика терминология или какой-то редкий язык вот помни [музыка] там было второе на 5% ВС конец я именно это и тел показать именно это хотел показать Обратите внимание Вот наме смотрите как бы то генерирует да слова у него есть такая функция точ он генерирует бы одно слово выбирает Ласи генерация как бы такая последовательная классификация последовательно

бы одно слово выбирает Ласи генерация как бы такая последовательная классификация последовательно функции нет он не обучался так поэтому его неадекватно будут использовать для этого слово идеологи выть слово изло ста вот пожалуйста распределение слов здесь как бы укажете 10 слов ой а вот видите насколько однозначно да решение то есть практически одно слово в себе содержит информацию Однако однако если мы возьмём другой пример Да ну давай все они их вероятности размываются потому что они как бы

если мы возьмём другой пример Да ну давай все они их вероятности размываются потому что они как бы распределились очень много кандидатов на то что может здесь быть потому что Берт когда обучался он видел раз разные цели жизни и как бы однозначного решение принять не может Вот Но тем не менее хэппинес считает всё-таки самой главной историей причём даже смотрите всё равно даже на выдавание токенов тоже случайности А это дети уберт всё понял Потому что сам Берт нам выдавал Я помню Лав ещё было

тоже случайности А это дети уберт всё понял Потому что сам Берт нам выдавал Я помню Лав ещё было второе или третье Давай Зай если например топпи использовать и там типа прям 94 это как бы на границе прямо на слово попадает он типа что делает он его берёт или не берёт рать [музыка] Ну что ж как-то так в принципе вот они все истории то есть мы для генерации с вами проговорили что у нас есть у нас есть Beams это Смотреть насколько далеко да Beams дальше у нас есть сэмплинг вообще включать

у нас есть Beams это Смотреть насколько далеко да Beams дальше у нас есть сэмплинг вообще включать Случайность или нет Если она не включена Но это вообще важнейший параметр семплинг без него всё будет однообразно дальше температура она уравнивает вероятности разных веток Если температура выше Вы можете получить но не то чтобы как бы высокая температура это Это неплохо понимаете да то есть как бы сверх высоко - Это плохо а немножечко добавить это как не знаю Всё хорошо в меру вот в меру

как бы сверх высоко - Это плохо а немножечко добавить это как не знаю Всё хорошо в меру вот в меру немножечко температуры жериш добавить Почему бы и нет вот как бы в пределах адекватного но соответственно более опять же у нас вариативная получается генерация далее соответственно Мы ещё поговорили с вами что про топк Вообще Из каких слов выбирать Да ну и топ п - это на уровне вероятности задать вот как бы инструмент который могут могут помочь и в корне повлиять на генерацию это уже говорю когда

как бы инструмент который могут могут помочь и в корне повлиять на генерацию это уже говорю когда мы говорим про Ирен модель да Люба Дава вопрос Можно я проговори как я поняла сегодняшнюю лекцию ты поправишь но я очень кратко Вот смотри бинс Это насколько далеко Мы мыслим Это как в шахматах Да когда хороший гросмейстер он может просчитать на несколько ходов вперёд то есть температура - это регулятор между двумя полюсами формализованное То есть если мы хотим какую-нибудь абстракционист скую

между двумя полюсами формализованное То есть если мы хотим какую-нибудь абстракционист скую поэзию написать мы будем температурою Вот я не очень поняла что за параметр слин если слинга Нет не сбить сно вообще не сможе убирать случайно вот просто он всегда будет брать самое вероятное слово ити само есть го это ключевой параметр там Просто есть разные вилин не помню смотрите если дой не сегодня Завра давай продолжай так температура проговорила топк топ которые умножаются мы рассматриваем не все

давай продолжай так температура проговорила топк топ которые умножаются мы рассматриваем не все вероятности а только топк либо по по количеству Да по их количеству либо если это топп то по их вероятности ограничиваем какими-то нтими Да Абсолютно верно Спасибо Саша вот вопрос про обучение на своих данных все предыдущие недели мы старались Вот и картинки там подобу на своих данных и так далее а здесь я так понимаю все модели предо на достаточно большом объёме слов и нам по факту нужны только

здесь я так понимаю все модели предо на достаточно большом объёме слов и нам по факту нужны только динги и не нужно правильно обучать там на своих данных большинстве случаев Ну как бы я не знаю мы вс-таки вот ты классификацию делал это считается что мы обучались на своих данных ну как бы вот сам Берт он нам произвёл бединге из наших слов а на прошлой неделе ты брал resn он тебе производил свёрточные какие-то м короче те генерик каци ну да согласен то есть мым большую модель которая знает в

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

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

которые как бым есть одна проблема что они не знают контекста хотели бы вы внедрить бата который у Вас бизнес там встречает клиентов он не знает конкретно за клиент возможно что конкретно сегодня происходит в вашей компании поэтому как бы модели надо быть в контексте как будто бы для этого е нужно обучать но пошли другим пум рак создание векторных баз и вот изза этого как бы тюнин он ушёл чуть-чуть в сторону но он существует Просто у нас очень ограниченное время хотелось бы сотворить чудо чтобы

в сторону но он существует Просто у нас очень ограниченное время хотелось бы сотворить чудо чтобы мы с вами стали просто топ NP лучшими в стране специалистами но как бы просто будет Файн тюнинг не под классификацию а будет под а генерацию текста или ещё под какую-то задачу То есть как бы паттерн тот же самый что и в компьютер Vision берёте модель до обучайте на своих данных и предсказывать Надеюсь ответил на вопрос да спасибо Так ну в принципе всё в принципе всё так очень много Антон можешь не

ответил на вопрос да спасибо Так ну в принципе всё в принципе всё так очень много Антон можешь не читать вопро потом Тем более это вопрос именно тея касается времени будем занимать проектное время так что ещё я хотел вам сказать на по лекции всё у вас будет задание с генерацией текста но готовую модель и соответственно пустить её на генерацию также какес взять и я гою очень близки просто деде последовательно классифицируют слова как бы вот если маски накладывать в любом месте Всё потому что вот

классифицируют слова как бы вот если маски накладывать в любом месте Всё потому что вот учились и как бы соотвественно точно также инфраструктуре можно взять подгрузить вы бы вообще могли бы ламу взять которая топ три сейчас ВР 45л К сожалению соответственно Сами понимаете такое дело развернуть дело не получится короче а так бы развернули ламу Гене красивая Ну берём будем брать модель попроще и всё равно посмотрим что из этого получится и будет также возможность если успеете добу про то что

и всё равно посмотрим что из этого получится и будет также возможность если успеете добу про то что говорит Саша да обучить как бы gpt на конкретно там ваших текстах в этом как бы и будет самое главное суть на самом деле всё наг Давайте переходить к заданию к заданию что сегодня васд Точнее не что вас ждёт что вас ждёт я вам ещ Сейчас скину проекта как бы как такового задания по сегодняшнему дн не будет сегодня только лекция а просто будет проект так Сегодня у нас с вами четвер правильно вот в

будет сегодня только лекция а просто будет проект так Сегодня у нас с вами четвер правильно вот в общем смотрите здесь есть стате хороши особенно G2 потому что G2 пошли такие фуро К тому моменту кроме кроме как бы одни тащили это направление и видите что это вылилось да то есть как бы gpt2 это буквально наверно зарождение такого стали понимать что в этом как будто бы есть жёсткая сила и начинали давить что gp3 уже была закрытая gp2 она ещ открыта соответственно здесь есть разные примеры а

давить что gp3 уже была закрытая gp2 она ещ открыта соответственно здесь есть разные примеры а маленький вопросик про эти материалы там Карпаты же делает лекции по там например у него есть че по-моему 4 часа Давайте закодировать типа напишем gpt2 лекция хорошая я понял про какую-то лекцию говоришь я как бы положительно отношусь к этой истории угу так Ну соответственно здесь а Ну я вообще я когда писал Я помню чтобы лучше понять ну не так давно было совершенно Ну короче было Я садился и писал я

писал Я помню чтобы лучше понять ну не так давно было совершенно Ну короче было Я садился и писал я писал я писал вместе с чатом у меня был друг такая авторен конструкция получилась с его старшим братом короче сго старшим братом ВС верно говорю что у меня врем Хотя как нет именно на gpt быстро gpt в принципе за день я за день полтора уже выкупил Я имею в виду в целом вот текстовую историю Да конечно много времени занимает первы а именно gpt нормально Так что у кого-то будет желание прикольно

много времени занимает первы а именно gpt нормально Так что у кого-то будет желание прикольно красиво особенно говорю кто целит в NLP сейчас хайпует эти темы м везде м Откройте сейчас вакансии Ну вы везде увидете сейчас бизнес начинает внедрять в свои бизнес-процессы текстовый как бы искусственный интеллект под разным соусом в разные места но вот сейчас время Где в доминирует это зада однозначно Мне кажется сейчас к месту вопрос про вакансии Какая какого как сказать Какой сложности задачи на

Мне кажется сейчас к месту вопрос про вакансии Какая какого как сказать Какой сложности задачи на работе выполняется например то что было вчера плюс-минус или чтото совсем принци более сложно с начнём с этого то есть чтобы у меня типа на работе был именно NLP вот зависит от того где-то у тебя может быть задача контекст где-то у тебя может быть основная задача если у тебя будет основная ты будешь делать посложнее вещи однозначно но потихоньку выедешь что происходит вы Когда выйдете на работу вы

делать посложнее вещи однозначно но потихоньку выедешь что происходит вы Когда выйдете на работу вы будете продолжаться учиться Вот это надо помнить всегда в голове что-то не знаешь ничего страшного Когда вы знаете базу поверьте вас охотнее возьмут если они видят что вы как бы адекватны и вы понимаете базу Ну что им объяснить вам лишние три-четыре статьи дать прочитать конкретно про то как они у себя это разворачивают для никаких проблем Это вообще не вызовет то есть Отвечая на твой вопрос Ты

себя это разворачивают для никаких проблем Это вообще не вызовет то есть Отвечая на твой вопрос Ты можешь столкнуться с этим же просто брать из hen Face и ипор Transformers А может столкнуться посложнее что нужно что-то будет дооб или так далее Всё зависит от того куда ты попадёшь на какой-то уровень попадёшь что у тебя будет как бы целевыми задачами у меня однозначно и то что мы прошли это под определение базы достаточны для попадания на эту работу Тепа подходит Я считаю что сверх большая база

базы достаточны для попадания на эту работу Тепа подходит Я считаю что сверх большая база Потому что если вы понимаете все эти истории связа слои то любая архитектура дальше это просто по-разному агрегирование этой информации если вы с ней дружите Ты просто шаг вле ша вправо ты не потеряешь скину статью ты посмотришь архитектуру и всё А если пошл он может запустить трансформер но больше ничего То есть для ль вещ с большое за ясность Настя Ну Катя рассказывала Она работает в конторе и как раз

То есть для ль вещ с большое за ясность Настя Ну Катя рассказывала Она работает в конторе и как раз сейчас занимается генерацией текста там писательница написала книгу и фантастическую и берётся лексика и знания главного героя и она пишет такую штуку Ну не одна там в команде что что-то спрашивают у героя он отвечает в соответствии со своей базой знаний со своей к лексикой Ну вот кру Круто Так а дальше идём Ну собственно говоря вот что здесь пример можете посмотреть здесь gpt2 как вы видите там

идём Ну собственно говоря вот что здесь пример можете посмотреть здесь gpt2 как вы видите там тоже СН фейса подгружаются модели здесь есть и процесс как бы просто инфе и процесс того как обучается обучение в принципе интересное но оно очень похоже натовской обучение просто вот эти как бы маскирующие токены они всегда справо и мы точно также выдаём одно слово слово слово слово слово Ну как бы вот здесь ведьма вышла из лес и можно посмотреть да Что вот какая-то собственно говоря пошла генерация

здесь ведьма вышла из лес и можно посмотреть да Что вот какая-то собственно говоря пошла генерация токена Вот это всё остаётся как бы этот ноутбук от вас никуда не убежит вам не советую как бы с него начинать у вас одна из задач проекта - это генерация она последняя вот когда наверное до неё дойдёте вот можно сюда чуть поподробнее провалиться сейчас надо будет делать другие вещи у вас Бут две задачи так или иначе связанные с классификацией Стрим литы фейсы очень много задач всяких разных

задачи так или иначе связанные с классификацией Стрим литы фейсы очень много задач всяких разных поэтому не торопитесь с с gpt А вот если дойдёте то торопитесь Да Кость А про спойлери у нас как на прошлой неделе есть там несколько задач на команду и можно их та-то задачами пр разделить и в этот раз что-то целое одно нужно писать вместе можно можно разделить Да будет супер у вас будет несколько задач как бы каждый может так сказать Не последовательная а Параллельная обработка назовём это так Да

как бы каждый может так сказать Не последовательная а Параллельная обработка назовём это так Да если на фазе один у вас была всё-таки больше наверное Параллельная ой последовательная обработка то тут Да можно рас параллели В смысле так А давайте сейчас знаете как с вами поступим сейчас мы с вами Сейчас я вам скину скину составы команд и мы наверное может потом минут через 10 созвонимся с вами именно проектно То есть я вам скину репозитории и по каждому репозиторию состав команды просто так на

проектно То есть я вам скину репозитории и по каждому репозиторию состав команды просто так на сколько с вами человек де Да очень удобно генерировать случайно будет три команды по три человека И всё И тогда давайте как бы собственно гово се чение д минут вам пришлю в течение 2 минут пришлю состава команд и через 10 минут созвонимся нуно всё 2 дня ла договори Спасибо Спасибо

Ну вот соответственно есть данные вот у тебя н текстов Люба давай дальше Так это у меня какие которые трейнор пока Ну пусть Рейно Пусть разделила есть какие-то текст Так значит есть какой-то текст мы его сначала А через inputs пропускаем зачем-то Ну хорошо что тебе даёт что внутри ну какие-то как бы мы туда оборачивали то есть есть блок тазе правильно не знаю у меня есть вот ла Там просто че строчки который там нетки так сейчас сначала таки потом мне кажется не нужно мучить Любу на этом месте

который там нетки так сейчас сначала таки потом мне кажется не нужно мучить Любу на этом месте потому что она одна не совсем поняла правильно говорите что можно можно как бы как сказать бебе inp можно оформить всё это это просто один из вариантов чтобы всё так в экосистему рча делать Да и соответственно создавать просто отдельный класс для поступления входных данных и там их обрабатывать можно без было сомнение типа всё-таки ну типа строчки эти прочтение Зачем он всё-таки нужен Если мы уже

без было сомнение типа всё-таки ну типа строчки эти прочтение Зачем он всё-таки нужен Если мы уже затоки надели всё вот вот так сейчас сек сек сек сек смотрим Что у нас здесь такое в у нас будет браться соответственно уже твиты Сюда Здесь просто дополнительное правило того того что является элементом менял правильно здесь добавлял так и есть дол есть видите как бы вообще в этой функции работает по одной и той же схеме dataset dat Loader и модель Какая роль каждого из них ну датасет - это просто

одной и той же схеме dataset dat Loader и модель Какая роль каждого из них ну датасет - это просто как бы Аля хранение данных и можно сказать А что является одним элементом выборки вы можете как бы созвать всё что угодно своё в данном случае Вот видите мы с вами тут есть две важные функции это Len Get это прям в документации торча прописано что если вы на следуете датасет И хотите фу понима что Тае дли чтобы на но бить и соответственно Что такое взять один элемент вы здесь можно это было бы не

дли чтобы на но бить и соответственно Что такое взять один элемент вы здесь можно это было бы не описать просто вопрос тогда как бы как Мырли это мы по-своему обнули ВС Вот это сущность дае в ЧМ его сущность это Извини пожалуйста здесь Мы создали датасет же Ну судя по коду правильно Да ви от датасета Это значит что мы как бы создали свой датасет просто и прол кажется что это ключевой момент для второй задачи то что нужно сюда вставить строчку отделяющий л так или если вы хотите чтобы одним

второй задачи то что нужно сюда вставить строчку отделяющий л так или если вы хотите чтобы одним элементом считался ещ Ил Да вот надо сюда прописать и указать что вы считаете ещё помимо этого это неза но можно сделать е нах Эх просто кратко просуммировать вот этот Y вытаскивать для второй задачки на каких этапах еще можно нормально Ну те потом когда ты будешь инициализировать инициализировать Я это подавал отдельно А можно будет подавать не отдельно и всё ну сейчас до ползём до этого Пока что

это подавал отдельно А можно будет подавать не отдельно и всё ну сейчас до ползём до этого Пока что какие здесь ещё вопросы Саш какой вопрос Да вот у меня есть типа 30ф кажы и потом мы получаем Вот encoded tweets это лист состоящий из 25.000 iref так это всё что у нас есть вот энкоды twits и получается в bert inputs мы подаём дит twits для того чтобы знать маску и и динг Ну вот да да не совсем так как бы ты просто [музыка] оборачиваемость он не любит типы данных других поэтому есть чёткое

так как бы ты просто [музыка] оборачиваемость он не любит типы данных других поэтому есть чёткое понятие датасет и как бы если вы документацию откроете они говорят что мы работаем только с тезера только с нзми если какие-то нампа дало скажет я не буду ничего извлекать какие-то нампа пришли я не знаю что это такое чтобы потом в модель знаете не то загнать Как говорится мы типа на хорошем масле ездим только Ну или не на хорошем А на своём масле поэтому ничего инородного мы туда не потащим потому

только Ну или не на хорошем А на своём масле поэтому ничего инородного мы туда не потащим потому что сломается всё так вот bert inp - это просто обёртка наша обёртка которая говорит чтобы ты когда инициализировать вот этот магический метод Get айм вот когда вы видите две чёрточки пошёл уже тупо питонов ское знание классов А знаете что такое магические методы класс Ну это понятно что да типа равно это ИТ плюс это там да ИТ это клас и есть е Вот и так далее Вот Но типа вот я когда добавлял

равно это ИТ плюс это там да ИТ это клас и есть е Вот и так далее Вот Но типа вот я когда добавлял Возвращение лейбла я вот закидывал Self Lab равно La да типа это просто вотр был и я допис вот в третью ещё сущность вот tch T только лучше только лучше самое главное Вот это ранить а второй элемент отдельно не закидывать Ну вот у меня так и было но я не понял как-то Типа потом доставать типа както в модель потом выть как саму модель что смотри то что вот ты соответственно сес погоди то что ты вот

модель потом выть как саму модель что смотри то что вот ты соответственно сес погоди то что ты вот здесь вот здесь вот здесь соответственно сделаешь да вот когда у вас будет Вот сри вот Ой это у нас с вами объект итерируемый да говорит всё я сейчас буду забирать данные ровно по тем правилам из датасета которые мне говорят а ему сказали что лодер всегда забирает поэлементно а чтобы знать что такое элемент нужен индекс Да да да то есть Вот соответственно получается что у тебя Вот первый Л В

такое элемент нужен индекс Да да да то есть Вот соответственно получается что у тебя Вот первый Л В данном случае он бы ушёл в первую координату в предположим а второй во вторую бы там распа это дело уже твоё У нас вот это иты уходят в переменную inp А вот это всё уходит в переменную ма типа в маске если у тебя будет ещё третий Ну соответственно ты там можешь прописать вот здесь вот как бы как та Да можно даже то что я сказал бе можно вот так просто А вот зачем нам это замм про для создания

та Да можно даже то что я сказал бе можно вот так просто А вот зачем нам это замм про для создания нового и вот если у меня будет возвращаться е то у меня будет 312 размер 313 столбец то будет Или как это будет выглядеть Нет почему я же сюда в модель не буду подавать Куда ты будешь сохранять свой и другой метка не нуж понятно То есть вот в этом смысле это не так сильно нужно мы делаем эту разметку если у нас так уже есть для чего нуж разметка задаре что есть ме нужна ваша разметка берту вообще

если у нас так уже есть для чего нуж разметка задаре что есть ме нужна ваша разметка берту вообще фиолетово на вашу классификацию в чистом виде Бер занимается текстами создаёт им динги Как вы уже дальше поце если конечно собирать как бы сети цеплять блок классификации его тюнить то там как бы в dater Y нужен а вот здесь просто прогнать через бе по факту не нужно понимаешь понял что я имею в виду не особо но вот как я это понял я могу просто к которые у нас были изначально которые мы подавали

не особо но вот как я это понял я могу просто к которые у нас были изначально которые мы подавали вре мы можем просто добавить лбе из датафрейма Да его зам чтобы потом типа считать вот короче я ну всё равно ти может быть опять же проще сейчас наце на этой встрече ответить нам всем на вопрос вот Y На каком этапе Куда нужно добавить чтобы задание номер д выть льно вотт види вот сразу ВС разделено вам даже как бы вам просто эти можно назвать Если вы реновы прогнали как абл назвать как Y и всё Ну

вам даже как бы вам просто эти можно назвать Если вы реновы прогнали как абл назвать как Y и всё Ну вот с этой частью всё Мега Понятно Вот прям реально всё понятно Вот то что мы получили 31м нет я просто про уже второе задание Что как зачем там было тогда написано типа добавьте в е чтобы на возвращался чтобы мы я понял вопрос я понял вопрос смотри Потому что когда мы вот вы создадите да соответственно Вот вот тебе же его можно обучить то есть прописать функцию которую вы прописывали для

Вот вот тебе же его можно обучить то есть прописать функцию которую вы прописывали для обучения не сетей на прошлых неделях правильно Где у вас Back propagation короче обучающий цикл Back Ой вот там-то Y же нужен правильно это когда логическая регрессия в стороне то Окей А как бы вот если нужно структуру А как бы Берта ой структуру торча то соответственно там Y нужен напрямую здесь вот и всё Ты можешь делать А можешь с этим сделать Вот первая строка после Super init Self Bird это Mod Class From

делать А можешь с этим сделать Вот первая строка после Super init Self Bird это Mod Class From pretrained From pretrained Что такое pretrained pretrained WS pretrained wes wis - это ну грубо говоря тренированные параметры то есть сюда надо подгрузить свою модель г где е где её взять Ну типа что это ну я просто вот реально не в такая вообще абсолютно что происходит во втором задании Сейчас погоди Блин я сейчас здесь не запущу при нужно подать либо правила веса напрямую Да хотя как бы скорее

Блин я сейчас здесь не запущу при нужно подать либо правила веса напрямую Да хотя как бы скорее всего не веса почему потому чтобе не знает что это за модель то есть он не знает что это за модель либо если у нас модул класс отдельно создаётся где-то типа вот смотри он в демо нигде не задаётся то же самое хотел спросить у нас мол есть там наверху Конкретно мокла вообще нету отсылки нигде в модели я тоже заметил но по-хорошему по-хорошему как вы делали на неделе компьютер Vision вы создавали

я тоже заметил но по-хорошему по-хорошему как вы делали на неделе компьютер Vision вы создавали модель и подгружает мы загружали модели и знает 14 йц Да соответственно точно так же надо просто взять эти веса урта они точно также хранятся вот э Return ters Ну я точно не вспомню Но загуглить потому что везде немножко отличается Короче нужно либо целиком туда загнать модель то есть создаёшь Model и Self то bert указываешь вот эту модель в принципе этого уже тоже достаточно будет либо создать

и Self то bert указываешь вот эту модель в принципе этого уже тоже достаточно будет либо создать пустую модель и Да не в принципе можно туда Просто Берт загнать да и всё просто Бер хорошему без разницы как типа куда загнать Бер SF тока Бер поставить прямо слой Берта и всё вот сюда SF тока Бер постави слой слой берташ это ну тоже его подгрузило в самом начале то есть у тебя тайзер и Бер модел и тайзер равно Да и я просто ставлю модул себер равно моду Да может быть выше просто есть две строчки

тайзер равно Да и я просто ставлю модул себер равно моду Да может быть выше просто есть две строчки чтобы их увидеть чтобы не было ноласи Не ну просто вы как бы пропишите условно Рав Mod Ну там Mod Mod где-то у вас выше Model Model вы создали там свою модель там да вот это то есть в прямом смысле модель только надо под контролем потому что у вас сразу же ВС идт вр То есть у Вас должен быть сделан за пределами То есть вы уже как бы начинаете когда фити Фит выдаёте токены а не слова и всё нет

за пределами То есть вы уже как бы начинаете когда фити Фит выдаёте токены а не слова и всё нет самита нет самита ну у меня нет сейчас напишу па а можно вот са поня примерно понял направление в которое двигатся но всё равно типа для меня это на гига уровне абстракции находится нет По факту по факту по факту Люба Люба секунду перебью тебя по факту всё что нужно сделать всё что нужно сделать чтобы корректно заработало вот это то есть вот сюда вставляете всё то есть вот у вас теперь слой Берта это

заработало вот это то есть вот сюда вставляете всё то есть вот у вас теперь слой Берта это вот эта модель Да ну лучше её конечно отдельно создать а вот здесь прописать ти ВС те на этом слое Да есть модель надо только будет выключить параметры у неё у неё тоже есть соответственно Mod вы вот также Вот это оставляете да То есть в принципе оставляете эту срочку кода замораживайте полностью дасть по факту вот всё что нужно сделать структурно да то есть какая-то моделька и вот как вот у нас здесь с

факту вот всё что нужно сделать структурно да то есть какая-то моделька и вот как вот у нас здесь с вами какая-то моделька и поняли да что я имею в виду просто её вставляете сюда и всё по факту А ну Единственно Только про контроли вот у вас онар так как первым бе встречает то есть уже должны прийти токены и собирайте по кусочкам то есть хорошая практическая то есть на вход мы должны подать токены да то есть этот после тазе да Да всё правильно и где тог меня здесь нету обучающего цикла Ну ладно

да то есть этот после тазе да Да всё правильно и где тог меня здесь нету обучающего цикла Ну ладно ладно всё Ну просто типа вот просто Ctrl ctr сделай прошлых с прошлых заданий функцию обучения вот типа из да А ну ну ладно короче Ну в целом Наверное Ладно тут буквально три-четыре символа три-четыре символа потому что вот здесь вот смотрите S Тобе всё здесь просто нету учения да здесь просто пример функции фвар у нас только есть Но даже вот возьмём мы там сейчас сек Открою открою я знаете что ВД

функции фвар у нас только есть Но даже вот возьмём мы там сейчас сек Открою открою я знаете что ВД открою так вот например мы берём вот у вас Вот соответственно был был был был А вот здесь функция там й предположим Ну либо просто классический трейн взять на самом деле без разницы и вот здесь смотри что идёт вот у тебя Train вот у тебя Lab са дадада Это я понял всё соответственно в inputs тебе надо только проследить Ну inputs - это у тебя может быть tle надо конечно будет переписать по-хорошему

только проследить Ну inputs - это у тебя может быть tle надо конечно будет переписать по-хорошему чуть-чуть Но вам gpt это быстро поправит inps у тебя будет из двух вещей м да из двух вещей Ну он будет плом дада да он будет плом И этот юпл надо на самом деле корректно ещё сейчас я запутался я тут в своих вкладках и этот и этот э ну просто мы берём индекс либо ноль либо один от Тюп и всё но тебе и но и оди нужен для наверно в этом ты дела Тебе нужен и но и о где у меня это было Вот вот смотри

и но и оди нужен для наверно в этом ты дела Тебе нужен и но и о где у меня это было Вот вот смотри вот здесь А ну вот здесь нулевой индекс берётся да то есть инпуты но по-хорошему типа Attention Mask тоже Нам нужен для предсказания можно его взять То есть как мы выше делали предсказание где у нас там Вот мы с вами выше делали как предсказание на выводили же вот то есть видишь самой модели по хорошему тоже нужен поэтому можно это чуть-чуть дело подправить и всё Опять же я Настоятельно рекомендую

тоже нужен поэтому можно это чуть-чуть дело подправить и всё Опять же я Настоятельно рекомендую сначала протестить в прямую сторону создали модель проверили эво отлично работает дальше просто функцию подключить Всё окей Ну стало немножко яснее А скажи пожалуйста зачем нам три столбца из них два одинаковых данных каких три столбца не понял вопрос данные содержат текст и л и текст двух разных столбцах Воте есть колонка Вот это всё да А ну типа любой из них бы да брать Я тоже хоро хорошая задача

Воте есть колонка Вот это всё да А ну типа любой из них бы да брать Я тоже хоро хорошая задача То есть в принципе писать здесь не так много че 5 6 се символов поменять но для этого нужно немножечко понимания ты так сыпешь соль на рано активно Прям вообще капец даче вообще три строчки влета чем вы тут ребята весь день парились Нет я не говорю я не говорю что это Как сказать что это легко ни в коем случае иногда иногда одну строчку нужно вынашивать очень долго то есть я здесь не проводил

в коем случае иногда иногда одну строчку нужно вынашивать очень долго то есть я здесь не проводил параллели не говорил что это легко Я к тому что на если переварить эту информацию то это покажется Всё достаточно аккуратным Но это нужно ещё рить А про всё-таки Как мне получить ответ на вопрос про эти Во втором задании там же мы должны передать моде правильно и какм пой порядок Давайте ещ раз проговори у вас будет порядок следующий вот если говорить уже прямо это давайте здесь зарисуй сначала

у вас будет порядок следующий вот если говорить уже прямо это давайте здесь зарисуй сначала будет называтся называется bert Input всё правильно вот вот этот знаете лейблов нет по определению о из него Данные будет тянуть Data Loader правильно угу вот этот Data Loader Data Loader он уже эти данные будет закидывать в модель непосредственно у нас с вами модель состоит из каких частей то есть сама модель в данном случае модель то есть она первая состоит из Берта и второе блок классификации

сама модель в данном случае модель то есть она первая состоит из Берта и второе блок классификации правильно ты про второе задание говоришь вот первом задаче васер отдельно соответственно здесь описали и вот здесь вот надо чтобы Да брал одним элементом X и ци Что такое dater Берт Y это мы отдельно прописываем строчку для каждого Ирека Y Рав dater Y ра Loader или это по-другому пишется а не совсем X - это у тебя то что понятно X просто Три строчки делается там равно тому-то А Y - это вот то что

X - это у тебя то что понятно X просто Три строчки делается там равно тому-то А Y - это вот то что и написано в задании добавить излечение на файла файла но они же одинаковые Ты просто прогонишь трижды и всё ва вам обучать на надо а на тесте на Валиде просто посчитать выборку но прогнать чере Нерон надо будет чтобы посчитать 25000 или что это он посредник он в нём ничего не лежит дар всегда извлекает данные из датасета отдаёт модели всё он да он да загрузчик А вот хранит в себе данные [музыка]

данные из датасета отдаёт модели всё он да он да загрузчик А вот хранит в себе данные [музыка] 25000 или что Шей Почему 25 элементов выборки просто 25 а ну после токенизация Сколько у тебя будет здесь N умножить на SE Вот так ты же токены сделал Вот такой у тебя размер Y Я про Y спрашиваю ну Y будет 25.000 просто у нас ри ири это Короче ты понимаешь в чём в чём как бы боле или нет то есть есть три файла я пытаюсь понять Во что они Во что преобразуется Y Во что преобразуется три колбасы по 2 в

файла я пытаюсь понять Во что они Во что преобразуется Y Во что преобразуется три колбасы по 2 в этих трёх файлах в сумме три колбасы по 25.000 умножить на один как бы во что они преобразуются как омы их потом Ну во что они преобразование только здесь будет и в таки назер и всё Ну в смысле Ну вот давай трейнор взяли Всё Давайте контрольный проход вот взяли трейнор через таки назер ренова выборка у тебя как выглядит это у тебя 25.000 текстов правильно Какая здесь будет размерность вот здесь 25

у тебя как выглядит это у тебя 25.000 текстов правильно Какая здесь будет размерность вот здесь 25 на 768 не прально размерность будет коллеги помогаем А всё верно 25000 нарет ровно так как вот что ли Что тест у тебя поменяется только первое число второе не будет меня потому что встре после Это почему мы сес говорим про если сечас вопрос только про Y амы не прогоняем чере Я уже запутался честно говоря просто ещ раз заново у тебя в ЧМ сказал напиши одну строчку про и я не понимаю какую

честно говоря просто ещ раз заново у тебя в ЧМ сказал напиши одну строчку про и я не понимаю какую появляется вот здесь Какая размерность Ирика Давайте помогаем все вместе если у нас 25.000 элементов мы Рейно выборку несём Ну если одна выборка то понятно но мы же хотим Ещё ещё две выборки Смотри ты ты ну проводишь отдельно тест Валид их же не обязательно вместе Ты на трейне обучится а потом на иренс уже посчитаешь тест и Валид ты как делала обычно с машинным обучением всегда ТН для обучения а

уже посчитаешь тест и Валид ты как делала обычно с машинным обучением всегда ТН для обучения а Валид для валидации вот тут тоже самое поняла то есть такое ощущение что как будто я раньше правильно говорила Просто ты вообще можешь забыть пока про тест и про и прой ты начинаешь обучение модели всё у тебя все только трейн выборки Y и X они хранятся в датасете дасе говорит по какому правилу будем доставать один элемен сказал датасет задаёт такой скажем интерфейс как забрать у меня элемент а поэтому

один элемен сказал датасет задаёт такой скажем интерфейс как забрать у меня элемент а поэтому правилу обращается да И Ниже уже в придёт просто который указан в даре этих элементов Ну короче Антон возможно я сказал изначально правильно Может быть мы друг друга не поняли тепер короче очень мне каже у кого-то есть код то это показа за секун произнести как у меня это выглядит в коде У меня есть три дата Лора по по по трём исам Да ну тридер и так далее Вот и у меня единственный вопрос остаётся по

дата Лора по по по трём исам Да ну тридер и так далее Вот и у меня единственный вопрос остаётся по иреку Нужно ли сделать Лора у тебя дада да р один должен быть Зачем три дау извлекает данные у тебя три три датасета у нас по иксу Так ну и то у тебя класс датасет оди у тебя три экземпляра класса вот это вот датасет ты поняла три экземпляра класса датасет один а вот у тебя м вот у тебя датасет один вот он у тебя Ну ты вот как вот видишь у меня вот здесь датасет вот так и у тебя бы было бы ещё вот

вот он у тебя Ну ты вот как вот видишь у меня вот здесь датасет вот так и у тебя бы было бы ещё вот здесь бы там назвала бы ли датасет Вот вот я так и сделала Я так и сделала три датасета Вот таких всё да и у меня единственно остался Вопрос вот после того как я сделала таких три датасета как ты только что сделал с и с игрека делать то же самое с [музыка] игми игрики у тебя и будут здесь включены если ты пропи вот сюда ещё дополнительно что нужно извлечь то и А кстати мы сюда же подаём что надо

если ты пропи вот сюда ещё дополнительно что нужно извлечь то и А кстати мы сюда же подаём что надо ещё понять что мы в дае подаём у нас хра либо снаружи либо её сюда подавать дополнительно То есть можно вот ind Lab подавать и соответственно Ну точнее не вот сюда вот сюда подавать ещё лейблы вот так вот да потом здесь соответственно прописывать что S Lab равно Lab и вот сюда писать что мне нужен то всё вот теперь будет состоять из Х элементов Ну точнее только без индекса правильно вот ни как

то всё вот теперь будет состоять из Х элементов Ну точнее только без индекса правильно вот ни как дадада без ИК А почему так а не погоди Нет с индексом всё правильно с индексом так индекс да Ну соответственно тоже надо это будет перенести на куду и поменять тип данных и где-нибудь надо ещё сделать потому что поему не очень дружит со рингом вот я простором сде это можно до входа сделать сразу и вс Вот и потом мы Обращаемся к этому элементу л где нужно там под нужным индексом типа того да я

и вс Вот и потом мы Обращаемся к этому элементу л где нужно там под нужным индексом типа того да я вообще посоветовал вам если вас этот толку сбивает Вы можете сделать по-другому Вы можете есть вот этот экземпляр класса подогнать сюда соответственно вам проще будет но его опять же ВС равно надо за за ну как бы его можно не зать по-хорошему по умолчанию просто бинарную классификацию указ у вас классов больше по-хорошему надо под свою куда кладёте сначала потом классификатор Угу и сюда на вход мы

больше по-хорошему надо под свою куда кладёте сначала потом классификатор Угу и сюда на вход мы подаём вот то что только что мы смотрели да вот совет всем проверяйте всё по порядку То есть у вас есть датасет вы его собрали если датасет корректно работает Попробуйте извлечь из него один элемент в пример из в демо через next и так далее ну точнее в датасете это просто через индекс потом dater проверяете Да забирает данные или датасета и в каком виде он их забирает Вот это через Next прописывать

Да забирает данные или датасета и в каком виде он их забирает Вот это через Next прописывать всё дало работает отлично дальше написать пишите класс модели вы понимаете что в модель будет приходить ровно то что дата Loader взял под это переписываетесь вот так по порядку собрать сначала дасе потом dater потом модель потом тренировка Всё короче Паша Паша Спаси пожалуйста по сабмит и тогда всё станет вообще хорошо Ну что хорошая тренировка тут я спрошу Конечно спрошу ноно надо было нам с вами сразу

вообще хорошо Ну что хорошая тренировка тут я спрошу Конечно спрошу ноно надо было нам с вами сразу начать Так мы успели сейчас уже не будем писать Давай Люба вопрос первой задаче Нам тоже нужен даур если мы не учим модель мы берём просто Берт Ну как ты сама думаешь я Ну я так поняла что да у Хороший ответ сси Ладно давайте тогда А я сейчас прошу про сабмит если будет совсем худо Ну значит завтра выделим время посмотрим хорошо но лучше как бы этот сейчас вам ещё видео они уже должны были прийти

выделим время посмотрим хорошо но лучше как бы этот сейчас вам ещё видео они уже должны были прийти вроде если они стояли Нет они ещё не пришли завтра ждёт вас завтра нас ждёт небольшая лекция и проект Завтра мы поговорим с вами про декодер часть То бишь про всеми Могучие Великий ужасный G5 модели вот всё тогда давайте А по поводу я вообще хотел про такие отоп немного вещи по поводу того что кому-то нравится текст точнее как бы так не очень кому-то очень это нормальная история текст как бы ну

нравится текст точнее как бы так не очень кому-то очень это нормальная история текст как бы ну если вайбы к нему не чувствуешь Ну вот не чувствуешь я вот как бы на самом деле тоже так достаточно спокойно к тексту ровно шу Хотя Иногда у меня бы всплески когда мне это прямо интересно было но в целом как бы вы уже практически всё разобрали и примерно для себя начнёте понимать что вам чуть больше нравится что он чуть меньше Но то что текст - это самое сложное направление это однозначно это ещё мы

что он чуть меньше Но то что текст - это самое сложное направление это однозначно это ещё мы только собираем модели а представляете подготовку данных и так далее То есть это вообще ещё капля в море то что здесь происходит так что конечно текст однозначно самое сложное из того что у нас есть вот но и очень интересно красиво всё-таки как-то всё равно магии много Антон Спасибо многое прояснилось Спасибо Всё Давайте тогда Хорошего вечера видосики ещё небольшие придут и До завтра Пока Давайте до

Спасибо Всё Давайте тогда Хорошего вечера видосики ещё небольшие придут и До завтра Пока Давайте до завтра спасибо Антон пока Всем

Так ну что Давайте продолжать Все ли у нас да всё все отлично а Посмотрим с вами код посмотрим с вами код м во-первых надо обязательно начать теперь теперь для вас это актуально вспомнить Ту самую картинку которую Паша скидывал вот именно как бы сегодня мы это ощутим левую часть вы уже узнали левую часть вы уже знали Да сейчас соответственно мы столкнемся с правой частью а так ну что ж переходим к коду переходим к демо демо на колапс ссылочка в другом окне открыл потому что меня забанили На

к коду переходим к демо демо на колапс ссылочка в другом окне открыл потому что меня забанили На одном аккаунте а поехали Мы будем также с вами классифицировать Сегодня мы будем классифицировать с помощью Берта Ну как бы Сами понимаете можно всё что угодно делать манипуляции с текстом Так что мне нужно мне будет нужен просто ТТ и Нужен класс Я на самом деле сейчас прям деб туда не лезу Что к чему нам нужно понять совершенно другие вещи совершенно другие вещи то есть есть класс есть какой-то

нам нужно понять совершенно другие вещи совершенно другие вещи то есть есть класс есть какой-то сообщение для агрессивное или не агрессивное сообщение или позитивно так подключаем библиотеки Ну нам понадобится как бы модель да мы посмотрим как просто зацепить к КТУ да потом ВС Вам знакомо И вот она появляется библиотека есть такая есть такая такое сообщество или такое кони это вот Face да Сюда выкладывают множество моделей множество репозиториев множество Спей сов где запускаются проекты

выкладывают множество моделей множество репозиториев множество Спей сов где запускаются проекты множество задач Это очень-очень большое и быстрорастущее коммьюнити изначально как NLP но сейчас в целом всё что угодно Здесь вы можете поискать какие-то различные датасеты вот есть фильтр Да в зависимости от того что вам нужно текст видео там и времен ряды и так далее здесь какие-то списки лайки не лайки обсуждения по каждому из них можно смотреть находить также собственно говоря есть модели и вот

обсуждения по каждому из них можно смотреть находить также собственно говоря есть модели и вот все вот эти модели которые здесь выложены сюда выкладывают в том числе модели типа ламы которая Я думаю что вы слышали вот Lama 405b которая вышел совсем недавно неделю назад видите ничего не отличается то есть вот у них даже тоже как бы есть небольшое окушко Ну залогиниться требует Ладно не буду сейчас делать окошко для ашки Но точно также модель выложена Open Source по этой модели есть какая-то инфа

делать окошко для ашки Но точно также модель выложена Open Source по этой модели есть какая-то инфа здесь можно там почитать что к чему бла-бла-бла то есть все модели которые вы знаете известны А это пожалуй среди G5 моделей сейчас самая сильная модель в орсе Да она находится в топ там в топ пять моделей Где ближайший топ-1 ничего близкого осорно нету только только вот фейсбуком вот далее Далее далее Ну соответственно мы можем найти модель также нашу датов есть много различных надо смотреть у

далее Ну соответственно мы можем найти модель также нашу датов есть много различных надо смотреть у них ссылочка как обучались Ну в общем я эту страничку уже сегодня открывал как её запускать Да как её запускать один из вариантов вот нам нужна будет библиотека трансформер и да ещё Вот видите тут запускается немножко по-другому через pel мы будем с вами запускать Иначе я бы посоветовал кто особенно хохочет двигаться вну можно вот так это сам вот у нас шный курс вот здесь можно выбрать язык язык

хохочет двигаться вну можно вот так это сам вот у нас шный курс вот здесь можно выбрать язык язык Да вот русский например Кстати на русский язык Паша переводил один из тех кто переводил этот курс вот здесь соответственно Вы можете посмотреть Трансформеры использование библиотеки фтнг тут в принципе достаточно всё быстро проходится но так кто вот пря целит Особенно потому что так Илина сейчас начинает крутиться NLP вокруг фейса вот использование Трансформера видите таки назе да как их как фант

крутиться NLP вокруг фейса вот использование Трансформера видите таки назе да как их как фант модель там через AP не через AP In Face Hub как разворачивать модели и так далее там библиотека datas Как подготовить датасет Да библиотека тайр сейчас там будет понятно там как Word PE или ещё какие-то тонизация задачи которые там можно решать Ну и в общем много-много прикольного Здесь всё описано всё с приме Да вот она библиотека форме Вот как раз таки фр это и есть как бы подгрузка из Face спейса

с приме Да вот она библиотека форме Вот как раз таки фр это и есть как бы подгрузка из Face спейса понятно То есть как бы вот именно оттуда мы подгружает пип тянет из определённых ресурсов вы Когда пишете Что это P Install это на самом деле вы тянете из определённого спейса То есть если вы разработали библиотеку и хотите чтобы её установили по команде P instal вам Её кое-куда нужно выложить И тогда вот как бы п выискивают в определённых ресурсах и находит эти вещи вы их устанавливаете точно

тогда вот как бы п выискивают в определённых ресурсах и находит эти вещи вы их устанавливаете точно также з как бы вот трансформер собственно говоря с этим связан Так ну что ж Давайте пробовать есть как я сказал много версий Берта есть классический Бер но Давайте наверно мы с вами запустим так называемый дилл - это просто уменьшенная версия Берта можно это я делаю ради экономии времени экономии времени чтобы всё считалось чуточку побыстрей что нам нужно в принципе как бы шаблон один и тотже

времени чтобы всё считалось чуточку побыстрей что нам нужно в принципе как бы шаблон один и тотже будет отде пожа тазер отдельно будет погружаться модель Что делает тайзер напомнит нам кто нам напомнит напомнит нам давайте Дмитрий Дмитрий ну должен преобразовать что на вход таки назе что на выходе подаётся на вход просто предложение последователь на выхо на выхо Ну да Ну вот именно номер токена да номер токена вот как-то так хорошо Правильно правильно правильно то есть отдельно такир подключаем

номер токена вот как-то так хорошо Правильно правильно правильно то есть отдельно такир подключаем отдельно отдельно саму модель модель уже будет работать на inf Понятно Вот это ужа в одной плоскости ещё есть разные версии этой есть large есть Small есть та это ещё меньше Да ну вот у нас пусть будет здесь Бейс вот unc говорит о том что это модель которая не чувствительна к регистру всё это вы в принципе можете найти на фейсе все варианты модели которые есть в зависимости от задачи опять же

в принципе можете найти на фейсе все варианты модели которые есть в зависимости от задачи опять же конечно когда у нас что-то маленькое мы немного раем в точности но как бы зато считаем гораздо быстрее да и модель проще развернуть вечный компромисс Опять та же история надо читать документацию смотреть что по ресурсам что по точност и выбирать уже удовлетворяющую нас историю так здесь то настил прописать Это тот же самый бе что просто в ужа Том режиме давайте сейчас запустим Да вот так выглядит

Это тот же самый бе что просто в ужа Том режиме давайте сейчас запустим Да вот так выглядит подгрузка То есть он всё подгружает необходимые вещи там конфиги словари тазе са моде он погрузил и у меня Обратите внимание есть пример то есть вот у меня есть какой-то текст я его закидываю в кинай и вот что у меня получилось после этого текста после текста получилась такая история а inp индекс То есть это вот входные индексы входные То есть это токены да токены И вот ещё вот этот Attention Mask мы на

вот входные индексы входные То есть это токены да токены И вот ещё вот этот Attention Mask мы на самом деле с ним с вами сталкивались знаете где вот он кстати нет Здесь его нету где я его вам показываю здесь наверно да вот здесь вот вот это att Mask опциональная штука она нужна для того чтобы как бы если на какие-то вещи не надо смотреть и не считать по ним то как бы можно выключить эту историю это особенно актуально для G5 моделей которые как бы генер будущее И когда у них выборки встречаются

особенно актуально для G5 моделей которые как бы генер будущее И когда у них выборки встречаются это будущее надо выключать чтобы он нетал коро В прямом смысле маска вот в пандас делаете срез там да Или что-то ещё это накладывается маска тут тоже самое Тут тоже самое Так ну вот у нас видите Всё включено Всё включено поэтому мы видим всё и ещё вот есть токен 101 токен 102 это служебные токен это токен начала последно и конца вобще по-моему можно знаете как сделать секун то индекс сейчас вспомню

начала последно и конца вобще по-моему можно знаете как сделать секун то индекс сейчас вспомню индекс Да по-моему так и называется и Давайте подадим например 101 токен получится или нет нет не получилось не нравится б так не соображу может быть Вот вот так вот Попро посмотреть е вот да типа 101 видите этон помните который у на типа был начало и соотвественно тон 5672 можно посмотреть это вот токен слова так как у нас не чувствительно регист да то стало всё одинаково можно вообще не знаю на шару

слова так как у нас не чувствительно регист да то стало всё одинаково можно вообще не знаю на шару какой-нибудь 4 5 6 7 предположим Вот бы случайное слово подобрал Ну это слово там операция мы как бы в одну сторону можем и в обратную сторону никакого хэширования Как такового нет поэтому операция она туда-сюда туда-сюда А скажи пожалуйста а почему там длина тензора не 7 + 2 сколько Вот вот здесь 1 2 3 4 5 6 7 8 9 12 здесь 3 6 9 12 так и в чём вопрос Ну как бы маска наклад эже надо а у нас же кто

2 3 4 5 6 7 8 9 12 здесь 3 6 9 12 так и в чём вопрос Ну как бы маска наклад эже надо а у нас же кто ответит на страхует на вопроси бы отве вопро У меня такой же был А да у меня такой же был Надо подумать это маки какие-то ответь чувству ми Как посмотреть 2033 слово Да дальше там 2011 блин что давайте вот так вот сделаем вот так вот и можно посмотреть что получилось во-первых точка попала во-вторых а соответственно ют Да разбилась На три токена а вы воспринимаете это как один Ну короче вот

а соответственно ют Да разбилась На три токена а вы воспринимаете это как один Ну короче вот как-то Вот так он разбил всё это дело то есть вы можете взглянуть это открытой информации Вот и токен как собственно ли Да как конец Да Саш а у нас тут не точка определяется как сепаратор А это отдельная какая-то отдель Да отдельный токен ну точка же не всегда Конец предложения если бы я тебе в тексте задал бы два-три предложения Согласись Ну Дада точка Это в нашей голове по наше привычно парадигме

задал бы два-три предложения Согласись Ну Дада точка Это в нашей голове по наше привычно парадигме конец чего-то но в целом это не обязательно конец вот как-то так как-то Так тогда давайте наверное идти дальше то есть вот тайзер пощу тайзер пощу ну что ж мне надо теперь закодировать все не закодировать точнее занизить все свои твиты они у меня лежат вот в DF в моей выборке что я для этого делаю Ну это уже как бы Привет панс Да App и применяем лям функцию к каждому элементу выборки берм наш

Ну это уже как бы Привет панс Да App и применяем лям функцию к каждому элементу выборки берм наш смотрите 64 то есть ра Не суть важно что сейчас здесь бы значит ну Лано Дава поряд 64 это значит в оригинальном бте как бы он формирует по-моему 5122 мы говорим 64 чтобы было поменьше Да Пан равно ма Это значит что жение короче че4 Т обрезать в принципе ВС то есть теперь он знает что надо делать 64 да окно 64 токена 64 токена то есть вот если бы мы вот этот ТТ посмотрели что бы с ним произошло Как

окно 64 токена 64 токена то есть вот если бы мы вот этот ТТ посмотрели что бы с ним произошло Как вы думаете он же короче чем 64 нулями бы добили в начале ста вот здесь Давайте укажем просто ма короче вот эти все параметры я возьму сюда поставим погружать модель будет заново Ну ладно Обратите внимание нули он ставит в конец а не в начало как это делал У нас с вами но он ставит в конец пустота То есть по-моему вы это можете там в настройках выключить если надо но Бер знает что это пустота сюда

есть по-моему вы это можете там в настройках выключить если надо но Бер знает что это пустота сюда не надо смотреть здесь не надо читать Анны Поэтому вот вот этим маска хороша представляете сколько мы уже времени сэкономили в принципе много очень много да то получается Если масс поставить 512 тогда ке будет флс и панг не нужен Ну да Да не ну панг нужен Наверное потому что если после короче чем 512 А ну понял И почему он лест заполнять После этого токена так Берт устроен он типа как бы пустоту в

А ну понял И почему он лест заполнять После этого токена так Берт устроен он типа как бы пустоту в конце ставит а не в начале Окей то есть типа пустые ячейки скажем так пустые ячейки но говорю Attention Mask позволит вам сделать так чтобы вот вст это была бы катастрофа согласитесь потому что СТМ скорее конец помни чем начало а для архитектуры Трансформера это не катастрофа потому что есть Attention Mask который позволяет выключить из игры всех вот этих ребят и смотреть только вот сюда Ну вот

Mask который позволяет выключить из игры всех вот этих ребят и смотреть только вот сюда Ну вот как-то так Ну что ж Давайте применять Давайте применять А запускаем это наверное займёт некоторое время Ну хотя тайер не так долго как inference модель работает но тем не менее Всё запустили Так мы смотрим как был твит десятый изначальный и как он после того как мы его занизили то есть Вот соответственно Вот это всё наше с вами сообщение выглядит как 101 старт и поехали вот номер номера токенов Ну и

Вот это всё наше с вами сообщение выглядит как 101 старт и поехали вот номер номера токенов Ну и любой Вы можете вывести знаю нулевой Давайте выведем Вот соответственно Вот исходно то есть вот знак восклицания видите тоже как отдельный токен Обратите внимание то есть 999 999 999 да три отдельных токена Ну короче как-то так каждый токен Вы если что сможете посмотреть для себя Если вдруг Это нужно так токен SD код о Через пробел это ставить Но это на самом деле ровно то что мы с вами кстати здесь

токен SD код о Через пробел это ставить Но это на самом деле ровно то что мы с вами кстати здесь сделали да ровно то что с вами здесь сделали Если я сейчас сюда подпишу 2003 появился Да Кость вопрос давай короче эти модели уже позволяют нам работать вместе со всей пунктуацией со всеми символами то есть не заморачиваться уже при процен потому что мы взяли предобработка по одному-два РАУ А здесь Усть практически Ну очень много слов Да ещё эти слова Понятно встречались нени раз ни два ни три

Усть практически Ну очень много слов Да ещё эти слова Понятно встречались нени раз ни два ни три поэтому тут Да и пунктуация и всё всё всё есть на свете вот Ну конечно какую-то предо обработку вы всегда можете делать И это полезно вы упростите работу модели То есть как бы возможно мне знать вот эти нюансы не обязательно в задаче какой-то в контексте конкретно моей задачи понимаешь то есть зачем загружать Да это лишний раз когда это можно на этапе предобработки убрать потому что я решаю задачу

загружать Да это лишний раз когда это можно на этапе предобработки убрать потому что я решаю задачу которая вот вот вот такой мусор отношения ник его не имеет то есть предо обработку всё равно никто не не отменял Если в ней есть необходимость Так ну что ж у нас с вами м так точка value здесь указана наверное вот так вот вот у нас 2783 элемента выборки вот там можно взглянуть Да как всё это примерно выглядит ты готовы они затонированы Они зази а мы с вами зна начинаем двигаться потихоньку дальше

выглядит ты готовы они затонированы Они зази а мы с вами зна начинаем двигаться потихоньку дальше дальше Мы немножко настроим и модели в принципе можно бы через классический дае было сделать луше от Какая длина и как извлекать элемент то есть что будет являться одним элементом то что здесь внутри особо Останавливаться не буду но именно это нам нужно знаете Для чего особенно Нам нужен будет Get item нужно для того чтобы потом правильно как бы даур брал и мы правильно в обучающем цикле писали не

нужно для того чтобы потом правильно как бы даур брал и мы правильно в обучающем цикле писали не в обучающем точнее А в цикле Ирен писали то есть мы просто говорим что один элемент выборка - это отдельно взять отдельно взять Обратите внимание отдельно взять инпуты и отдельно взять att Mask понятно поде ВС соответственно создали создам по классике туда повем ра 128 ша рано стоит потому что у меня элемент выборки Обратите внимание к иреку не привязан видите получается что если я поставлю шав я

элемент выборки Обратите внимание к иреку не привязан видите получается что если я поставлю шав я беру текста случайно а разметку упорядочено not поэтому мы делаем здесь шара Так ну и возьмём один тестовый батч получаем что-то Типа такого что-то Типа такого Это у нас ан маски Да это у нас сами сами элементы всё модель Ставим на куду потихоньку движемся к самой главной Вот это всё вот в этой чеке Обратите внимание идт и модели да то есть теперь уже Обращаемся к модели последо вирова токенов

Обратите внимание идт и модели да то есть теперь уже Обращаемся к модели последо вирова токенов поэтому когда я распаковываю включаю точно предсказание мо равно модул сюда подаю и и подаю маску чтобы он знал на что не надо смотреть и вот здесь ещё одна строка телодвижения но давайте пока с вами порассуждаем А что даёт на поэто мы возм то что нам нужно вот в нашем случае Как вы думаете что нам нужно взять мы решаем задачу классификации что нам Отта нужно твой фирменный что мы что нам нужно для

взять мы решаем задачу классификации что нам Отта нужно твой фирменный что мы что нам нужно для классификации дальше ну содержать информацию Давайте вернёмся к к нашим слайдам с вами Вот когда мы с вами рисовали архитектуру энкодера архитектуру энкодера цельную Да где она то есть вот мне в принципе как бы у меня на вход подавали динги и на выходе Я хотел бы как-то их взять понятно да А дальше уже цепляем блок классификацию то есть в каком-то смысле выход как сст просто цепляем блок

А дальше уже цепляем блок классификацию то есть в каком-то смысле выход как сст просто цепляем блок классификации предсказываем цепляем блок классификации предсказываем Но это ещё не всё это ещё далеко не [музыка] всё в чём особенность смотрите Давайте немножко поговорим Берт на самом деле выдаёт не только Берт выдаёт Вот его вот этот аутпут он выдаёт помимо помимо им бедин ещё ряд сущностей я сейчас на них не буду останавливаться нам нуж конкрет Поэтому нам нужно будет брать кое-что Вот и

я сейчас на них не буду останавливаться нам нуж конкрет Поэтому нам нужно будет брать кое-что Вот и смотри какая е необычная индексация идёт для этого давайте обратимся к картинке которая здесь привязана это конкретна индексация Берта то есть вот здесь выделена вам да это надо смотреть до Если вы вдруг сталкиваетесь с другой моделью везде описано Что является Ирен что как соответственно на рабо Ну даже Давайте Ладно вместе с вами проделаем один раз проделаем так берём Ну давайте вот последний

Ну даже Давайте Ладно вместе с вами проделаем один раз проделаем так берём Ну давайте вот последний бач у меня Пусть выдастся Вот и мы его сохраним куда-то почему он мне не даёт or inputs Не ну for inputs Но обычно в коде он должен хранить в памяти inputs пере как остатся в памяти когда после рань быку Поэтому осталось не знаю а а всё Всё я понял я понял я Поня если прил Print I дадада Или давайте не P а continue пропишу то есть как бы в памяти остаётся последнее значение да то когда мы по

не P а continue пропишу то есть как бы в памяти остаётся последнее значение да то когда мы по этому циклу надо было его запустить сейчас ещё минуту будем ждать а я что-то увидел этот запуск старый и подумал давай чуть-чуть подождём короче в чём идея давайте порассуждаем что выплёвывает что выплёвывает блин порассуждать будет сложно надо будет этот дождаться вки так что можете какие-нибудь Вопросы задать то есть у нас Берт выплёвывает [музыка] матрицу Ну точнее на Ну да это слое вобще ВМ S

задать то есть у нас Берт выплёвывает [музыка] матрицу Ну точнее на Ну да это слое вобще ВМ S условно не не не именно SE L есть sze есть SE L это разные вещи Вот если бы ты работал на на маскировку как как я вам показывал навин фейсе а где мы там с вами запускали Вот здесь Да вот то что мы вот здесь запускали там нужно брать другой то есть надо брать не динги а брать другую сущность я скал Берт возвращает не только динги А ещё кое-что вот а нам нужны именно динги и в динга он возвращает конечно

не только динги А ещё кое-что вот а нам нужны именно динги и в динга он возвращает конечно sequence то есть динги каждого эмбеддинг каждого слова не все эмбеддинг А эмбеддинг каждого слова конкретно в тексте То есть у нас будет 25.000 таких матриц э для каждого твита м да да да да Абсолютно верно Абсолютно [музыка] верно Так так так всё посчитала 42 секунды Отлично вот Давайте попробуем а тест Input я поставлю вот сохраним его и вот можно взглянуть точка Давайте посмотрим что здесь по

а тест Input я поставлю вот сохраним его и вот можно взглянуть точка Давайте посмотрим что здесь по размерность что он выдаёт А вот видите вот то что вам говорил помимо того что вот то что выдаёт помимо Ну там можете взглянуть он возвращает ещё ряд сущностей мы с вами возьмём именно я это сюда пропишу ещ раз зарем и Давайте выведем Вот теперь что это на ваш взгляд за такой шейп получился 79 на 64 на 768 что-то Непонятно вообще какие-то цифры новые все Давайте по порядку 79 что это такое Если мы

на 768 что-то Непонятно вообще какие-то цифры новые все Давайте по порядку 79 что это такое Если мы с вами 24 783 разделим на ба у нас там перемен называется А ну разделим на 128 что количество бачей поже на то нет Это наверно не количество знаешь как процент отделения на 128 возьмём 79 Вот это получается что как бы у меня же по факту вот я прогнал То есть у меня через Вот это всё уже проехали Бачи и по факту на самом деле с последними и есть последний бач правильно А вы ведь понимаете такой

Бачи и по факту на самом деле с последними и есть последний бач правильно А вы ведь понимаете такой прикол в том что бач не обязательно же должен кратно делиться правильно если у меня бач ра 128 А я подам 200 элементов то первый бач будет из 128 а второй любо Из скольки будет Вот именно с этим жеде лну потно как бы 79 поэтому грубо говоря первый размерность это bch size Да 79 текстов последних 64 - это что у нас такое с вами это мы сами ставили Да это sequence L Да 64 длина последовательности у

- это что у нас такое с вами это мы сами ставили Да это sequence L Да 64 длина последовательности у нас для на последовательности и 768 - это как вы думаете что такое мартовский бенг забитый моделин Да кстати вот мы можем с вами вывести вот чтобы вы понимали что Бер не какая-то магия Давайте Наверно выведем с вами Ну где-нибудь вот здесь вот если вы увидите модел то Вот вы увидите архитектуру Берта и вы поймёте что даже для сравнения можно открыть открыть архитектуру нашу вот зде то есть что у

и вы поймёте что даже для сравнения можно открыть открыть архитектуру нашу вот зде то есть что у нас идёт смотрите сначала блок динга блок динга Ну это там размерности словаря мы их перекладываем в 768 То есть это ну типа токенизация Да в получается В Н вот дальше соответственно это positional eding это опять же вот те же самые 768 то есть мы поправляя чуть-чуть просто координаты вот дальше идёт у нас слой нормализации слой нормализации и слой дрота это всё в динга это на самом деле то что

у нас слой нормализации слой нормализации и слой дрота это всё в динга это на самом деле то что грубо говоря они включили сюда аите конно дальше начинается блок Трансформера вот у нас с вами идт трансформер блок или ров Да вот они 2 4 5 6 ров каждый р у нас вот содержит блок А в м в чём у нас с вами содержание точнее это вот эта вот архитектура она в чём У нас вот [музыка] на вход подаётся 768 размерность надо сохранять тоже ставят внутре 768 out - это тот который будет чить наши головы наши

размерность надо сохранять тоже ставят внутре 768 out - это тот который будет чить наши головы наши головы все Да вот он соответственно вот этот полно связаный слой это дальше что у нас с вами идёт опять Лер нормализация возвращаемся к нашей [музыка] картинке вот есть по вот нормализация нормализация да потом и соответственно после неё у нас идт это вот этот блок который состоит из соответственно полносвязная полно Связного слоя активации вот в таком порядке я не знал что такого Блин почему так

полносвязная полно Связного слоя активации вот в таком порядке я не знал что такого Блин почему так отображено что ли вообще вроде как бы даже в оригинально у них статье полносвязный слой функция активации связанных слоя вот выход 768 мы с него берём Ну и последнее - это нормализация то есть и Вот выходит 768 то есть размер бенга 768 768 то есть аво Бен получается словар весь и 768 768 для каждого для каждого токена его эмбеддинг вот так вот для каждого токена его эмбеддинг Давай любой вопрос

для каждого токена его эмбеддинг вот так вот для каждого токена его эмбеддинг Давай любой вопрос так Я вот про это и хотела спросить Это потому что мы его этот eding size немножечко урезаем потому что у нас дистиллированная форма оберта Да да да Абсолютно верно Да не погоди не eding size Я думал ты говоришь про токенизация какую-то Дин size 768 у них по умолчанию стоит ты можешь указать в принципе свою если хочешь Вот мы нигде мы нигде кстати эмбеддинг не задавали размер динга но его можно

свою если хочешь Вот мы нигде мы нигде кстати эмбеддинг не задавали размер динга но его можно задать его можно задать вот стоит 768 стоит 768 в принципе О'кей поехали тогда дальше И вот теперь возвращаемся к нашей истории возвращаемся к нашей истории То есть у нас с вами что получается 79 элементов выборки у каждого последовательно 64 элемента и для каждого из этих элементов есть свой мбенг правильно вот но прикол знаете в чём прикол заключается в том что как вы думаете среди этих шестидесяти

вот но прикол знаете в чём прикол заключается в том что как вы думаете среди этих шестидесяти четырёх на первом месте какой токен стоит как CLS каква и короче принято так делать я не знаю это было следствие или самоцель у Гугла честно говоря не провалился в эту историю Ну короче его используют как итоговый динг то есть смотрите Что может быть то есть у меня может быть мама Мыло раму в каком-то смысле я могу получить как бы тридинга да то есть у меня будет Вот раздин два эмбеддинг три эмбеддинг

я могу получить как бы тридинга да то есть у меня будет Вот раздин два эмбеддинг три эмбеддинг каждого слова то есть мама Мыло раму а можно получить один итоговый эмбеддинг называют эмбеддинг текста целиком понятно То есть он агрегирующие по всей по всей Соответственно по всему тексту по всему тексту а токен CLS у нас с вами стоит на нулевом индексе поэтому смотрите мы берём все элементы мы берём нулевой токен и мы берём все его координаты То бишь берём весь инг понятно то есть мы взяли ин то

нулевой токен и мы берём все его координаты То бишь берём весь инг понятно то есть мы взяли ин то CLS и мы будем считать что это есть наш динг целого текста не одного слова как мы раньше делали а целом целого текста Если вы хотите взять целого текста пожалуйста берите наоборот ВС кроме л и последнего токена тогда вы получите вот это будет Овер много им бенго это вычисление существенно больше просто Знаете чтото есть такой лайфхак и более того Так чаще делают так почти всегда и делают то есть

Знаете чтото есть такой лайфхак и более того Так чаще делают так почти всегда и делают то есть берут именно динг текста Поэтому если вас на себес спросят вас спросят А у Берта Берт Что делает динг текста или эмбеддинг каждого токена Вы можете сказать что И то и другое То есть можно извлечь и ту сущность и другую что-то похожее на hidden State у стма Да есть после каждого слова а есть е итоговый об Вот наверное можно провести паралель как-то Давай вото я немного прослушал получается всего текста

Вот наверное можно провести паралель как-то Давай вото я немного прослушал получается всего текста хранится Ну типа того да ну как бы я говор Честно не знаю это я не исключаю что Google это постфактум сказали ребят Вот мы планировали что дела вот можно карти представить Смотри здесь 2000 элементов выборки вот у нас 3 пришла в нашем случае это было бы 79 потом здесь э 768 у нас остались А здесь Было бы у нас 64 и получается Если мы возьмём вот эту историю вот эту историю то это что такое Давай

бы у нас 64 и получается Если мы возьмём вот эту историю вот эту историю то это что такое Давай те как раз вопросик чтобы закрепил получше это что с как понял сами квадраты это эмбеддинг же правильно Ну вот прямо Ответь на вопрос вот если я сейчас сделаю срез да то есть я по вот этой это значит я возьму по вот этой координате нулевую строчку да то есть нулевую по вот по вот этой координате я возьму тоже нулевой столбец она у меня получается вторая нулевой здесь возьму все значения вот так Ну

тоже нулевой столбец она у меня получается вторая нулевой здесь возьму все значения вот так Ну тут Ладно сейчас тебя запутал не проводи короче вот прямо на рисунке как ты думаешь что вот это такое нужда Ну Первый вариант это то что типа одного элемента в в разных из разных энкодеров у Наде же у нас последовательны выплёвывает всё равно одеры соединены последовательно Если ты про вот этото да типа бли типа всего Ну вот конкретно тебе подало 79 текстов Давайте Люба поможет а динг одного текста

бли типа всего Ну вот конкретно тебе подало 79 текстов Давайте Люба поможет а динг одного текста типа всего одного Ну а ес на конкретно потому что у нас Ноль - это этот да да да А вот вот как пач потом второй индекс определяет ээ ээ сейчас это токе Ну тут смотря что считаешь вторым вот эту размерность Но это порядок тогда Ну давайте вот немножко Вот это был бы токен вот этот ряд бы второй это уже какой-то следующий токен и так далее правильно то есть Итого можно сказать что вот это ибен токены

какой-то следующий токен и так далее правильно то есть Итого можно сказать что вот это ибен токены ЛС конкретно в первом документе первом домен и вот приня именного бра у вас эмбеддинг каждого слова по отдельности Вот они лежат это для первого текста Да там вот для последнего например для последнего текста динг последнего слова последнего токена Ну вот говорю беру ЛС и это выглядит так то есть мы берём все как бы все элементы выборки у них у всех берём только вот этот вот мы в каком-то смысле

берём все как бы все элементы выборки у них у всех берём только вот этот вот мы в каком-то смысле делаем с вами знаете срез чего мы с вами делаем срез вот этой штуки вот этой Ну вы поняли да То есть самый первый тут типа это раница 79 им бенго у 79 текстов именно эту вкусняшку мы забираем А у меня как раз и вопрос был как взять динг всего текста Вот сейчас ответил на этот вопрос же да Угу да именно так давай это вопрос да Что точно итогово понятия получается это именно вот в этом кусочке

именно так давай это вопрос да Что точно итогово понятия получается это именно вот в этом кусочке хранится хранятся типа 79 разных текстов да да абсолютно А в остальной части это типа остальной текст поде по отдельности по каждому сло Ой дари тако идут нарисованы последовательно Хотя вроде бы Насколько я понял До этого сы не совсем чётко как будто микрофон слишком близко к тебе Возможно нормально Лучше просто на схем там энкодеры нарисованы последовательно Хотя вроде я до этого голов правильно

Лучше просто на схем там энкодеры нарисованы последовательно Хотя вроде я до этого голов правильно и выдают как бы с разных сторон видения потом которые конкани и создаётся общий модель А если последовательно Там же получается Не получается этих восемь видений Нет ну вот не путайте вот эти Восемь голов они существуют существуют в рамках одного энкодера сейс уберу всё это де а вот эти во голов они существуют в рамках одного энкодера Поня то есть последовательно всё равно некоторые присутствуют С

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

нового какая-то комба полно связанных слоёв дальше взяли спар или всю Википедию обучили То есть как бы это не что-то такое жик а это в принципе какое-то конечно существующее пространство и нам под силам понять устройство Да Берта и что оно из себя представляет всё соответственно мы с вами забираем забираем Так мы с вами забрали вот у меня теперь fees Как вы думаете что у меня будет из себя размерность представлять какую не будет никакую что у нас У меня сейчас не упало Ничего здесь видимо Ну да

представлять какую не будет никакую что у нас У меня сейчас не упало Ничего здесь видимо Ну да тут все эти все 30 все 24.000 Динго он сейчас выт по-хорошему здесь размер с 24.000 на 783 Ладно нафиг не будем выводить не будем выводить 783 или 768 783 Ты сказал Я не знаю почему я сказал эту цифру 768 Да 768 н 24 783 Вот почему я сказал 24 783 элемента текста Вот и вы соответственно например нас ВС интересует Дин текста номер три вот он родненький Дин текста 3 что-то непонятное для нас вот так вот

Дин текста номер три вот он родненький Дин текста 3 что-то непонятное для нас вот так вот Вот так вот ну что ж а значит мы уже готовы с вами к чему У нас есть вообще говорят датафрейм 2478 на мбенг мы можем классифицировать правильно попытаться всё это дело классифицировать вот что мы Для этого делаем Это наши с вами рисуночки так здесь это объяснение это объяснение поэтому мы начинаем цеплять классификаторы к берту Да количество текстов на 768 ров то что мы получали Ну что ж делим на Валид

классификаторы к берту Да количество текстов на 768 ров то что мы получали Ну что ж делим на Валид классический слёрм Здравствуйте ничего нового для нас разбили так здесь здесь получается у нас с вами пропорция классов да 1 2 0 Ну как дисбаланс есть есть да однозначно есть как бы ну это уже проблема классификации Да проблема Моя или рубашки Как говорится Ну в общем здесь Здесь мы сейчас просто запустим но точность как бы сильно не стоит на неё реагировать потому что дисбаланс есть но так или

запустим но точность как бы сильно не стоит на неё реагировать потому что дисбаланс есть но так или иначе Берт вместе с логистической регрессией даёт точность у нас с вами сейчас посчитаем А да знаешь что е на что ещё хотел бы обратить внимание Я бы хотел обратить внимание на следующую историю вот здесь вот вот здесь Как вы думаете почему мы делаем точка CPU и точка най То есть у нас было всё в инфраструктуре пай торча было в тензора и на ГПУ А тут мы зачем-то откатывать чтоб слр потом фгану

инфраструктуре пай торча было в тензора и на ГПУ А тут мы зачем-то откатывать чтоб слр потом фгану туда да Абсолютно верно то есть в этом не было бы необходимости Если бы вы делали как-то иначе а если вы делаете через лорек срна то нужно возвращать на CPU и откатывать к нам паю потому что СР не поддерживает работу на видеокарте Ну что ж 86% это так-то всё равно даже очень даже хорошо это очень хорошо Берт Молодец лайк берту Да не буду не будем никакие confusion matx сейчас строить и так далее

Берт Молодец лайк берту Да не буду не будем никакие confusion matx сейчас строить и так далее Не суть важно пока что более того смотрите построение собственной модели на основе обекта Если вы всё-таки не хотите не хотите Выходить выходить из инфраструктуры из инфраструктуры торча из инфраструктуры торча то соответственно можно это просто прикрепить дополнительными слоями я пытаюсь понять Ладно сейчас давайте запустим обратить внимание мы есть такое авто и вы конкретно просе рубер Тини 2 - это

давайте запустим обратить внимание мы есть такое авто и вы конкретно просе рубер Тини 2 - это вообще русскоязычная модель То есть это рубер - это русский Берт всё очень просто вот а просто у нас текст англоязычный я что-то не могу догнать А всё пример дальше пошёл на русскоязычном тексте давай сразу вопрос а для Сея подвести Что произошло мы типа эмбеддинг ка превратили в фиче То бишь у нас превратилось в 700 там с чем-то фичей для каждого Да от наших действий то в нашем случае у нас с вами

в 700 там с чем-то фичей для каждого Да от наших действий то в нашем случае у нас с вами 24.7 183 текста и 768 где X1 - это первая координата им бедин и x 768 последняя Вот именно этот датафрейм в пайплайн полетел дальше в логистическую регрессию на обучение Мы также разбили на Train valid там да то есть всё всё что вам уже знаком так погда идём дальше Ну собственно говоря что здесь смотрите погрузили другую модель RT ru 2 по-моему именно её вам сегодня нужно запустить Сейчас посмотрим это

погрузили другую модель RT ru 2 по-моему именно её вам сегодня нужно запустить Сейчас посмотрим это модель которая была добу специально людьми и выложено в Open Source на русскоязычных корпусах текстов опять же соответственно мы с вами можем заходить на H Face там писать можно через поис Простор ни 2 вот она лежит эта модель во-первых всегда здесь указана а а нет у них Почему датасета не указано это спейс - Это кто собственно говоря выкладывал где эта модель так или иначе была развёрнуто

это спейс - Это кто собственно говоря выкладывал где эта модель так или иначе была развёрнуто датасеты у них не открыто но скорее всего где-то в описаниях они могут здесь написать на чём они обучали могут и нет вот короче здесь описание Что к чему бла-бла-бла Как запускать то есть какие-то такие более ноунеймов ские модели а для фейса Да они через авто модул авто тайзер это общий паттерн а здесь просто подписываются конкретная модели и подгружаются то есть сюда подгружается тайзер сюда

а здесь просто подписываются конкретная модели и подгружаются то есть сюда подгружается тайзер сюда подгружаются модель её веса всё А дальше ну здесь вот видите вот как бы то что у меня в коллабе это просто Ctrl C Ctrl V этого примера за исключением того что Привет мир она стала Я люблю собак всё А в остальном всё то же самое здесь вот Давайте немножко посмотрим что здесь ну на само деле интересно Кизер Да дальше модель работать начинает на и здесь в определённом виде подают и проходят по

Кизер Да дальше модель работать начинает на и здесь в определённом виде подают и проходят по извлекая с помощью элемента дальше Обратите внимание динги забираются точно так же как у нас забирались они ещё нормируются и возвращаются всё но вернулись тем не менее ибе Да вот можно посмотреть приме Давайте вот я люб собак получил токены опять же вот этот token Type индекс это это короче нужно для случая когда решается задача Next sentence prediction то есть нам это не нужно Вот Нам нужен опять же

когда решается задача Next sentence prediction то есть нам это не нужно Вот Нам нужен опять же Attention Mask и вот собственно говоря последовательность опять же 2Т скорее всего какие-то служебные токены Вот сама последовательность Я люблю собак Токина работают Отлично вот my как бы это могло выглядеть Напоминаю что мы сейчас делаем мы на примере другой модели Смотрим А как сделать классификационным не выходя из инфраструктуры патча да то есть как бы остаться там поэтому у нас есть Self Как как

не выходя из инфраструктуры патча да то есть как бы остаться там поэтому у нас есть Self Как как отдельный слой дальше соответственно мы его Выключаем Почему Потому что нам его обучать не надо Да потому что мы же как бы берём предо модель все помнят что такое requ равно для чего это нужно делать Ната Напомни нам всем что-то мы там сбрасываем не пом для Ире из готовой модели чтобы не обязательно Ну для и тоже Но самое главное не для этого перестаём обучать параметры меня слышно вобще да Когда вы

для и тоже Но самое главное не для этого перестаём обучать параметры меня слышно вобще да Когда вы ставите сло все абсолютно Вер они заморожены и когда у вас будет заморозка же она она не а не всё ладно Ладно всё Не буду Не буду сама запуталась Ну просто смотри если мы вот это вот уберём вот это уберём то получается получается Вот ты когда запустишь обучение А ты запустишь обучение тебе надо обучать классификацию то он будет считать нужным что вот это всё тоже можно обновить И представляете

классификацию то он будет считать нужным что вот это всё тоже можно обновить И представляете Back propagation через весь Бер это ла на наших ресурсах вот что-то да И зачем нам Берт трогать Берт умный Берт много знает о лингвистике и о всём О всём во всём наше дело простое подцепить классификацию в конце и наслаждаться результатом но здесь опять же Форвард достаточно тривиальный да то есть прошли через Бер нормализацию включили дополнительную sine три Ну у нас тут обучения нет это просто шаблон

через Бер нормализацию включили дополнительную sine три Ну у нас тут обучения нет это просто шаблон это просто шаблон что у меня нет русскоязычного текста это вот Паша прил просто на пример что можно загрузить другую модель вы собрали класс если надо его зафи пожалуйста ну модели включайте как вы это умеете делать Да так здесь что у нас такое что Уде такое веса у меня они не определены я и не видел где это всё подгружается Ну ладно В принципе так визуально посмотреть вот это ничем не отличается

где это всё подгружается Ну ладно В принципе так визуально посмотреть вот это ничем не отличается от вот этого То есть это второй подход Как можно сделать классификацию далее но вообще можно сделать следующим образом можно ещё проще сделать тут мы напоминаю решаем просто классификацию время мы цепляли с калёнов ские модели как простые просто до цепляли полно связанный слой к берту Ну как бы не вы же первый делаете поэтому есть специально когда подгружается модель подгружается вот подгружается

же первый делаете поэтому есть специально когда подгружается модель подгружается вот подгружается да у нас обученный тренировочный Да и соотвественно просто цепляется блок классификация вот Давайте посмотрим автомол выведем и мы увидим что это тот же самый наш Ой вот запу телодвижение ртов Да которые мы делали и и ещё зацепили блок классификации Ну тут конкретно бинарная классификации но соответственно если мы это с вами поправим то можем сделать на три класса чтобы было То есть можно вот

если мы это с вами поправим то можем сделать на три класса чтобы было То есть можно вот просто одной строчкой кода использовать как для классификации здесь пример входных текстов это мы их затонирован работы на inf всё работает смотрите то есть в данном случае это как бы типа Аля два класса было бы только он не обучался если что Но он как бы инициализирован но тем не менее Вот есть четыре текста есть четыре текста да три текста три текста Обратите внимание это один и тот же текст три элемента

есть четыре текста да три текста три текста Обратите внимание это один и тот же текст три элемента входных мы их сначала моде ВС выдали пожалуйста здесь Это ваши гиты это Соф вероятности это взяли и получили что вот они три предсказания всё работает на классификацию то есть по-хорошему чтобы вы понимали то есть мы можем классификацию сделать через три строчки кода или через четыре Да это возвращаясь к вот этой Здесь всё нормально да типа как в Логистическая регрессия Или похоже не Ну смотря

к вот этой Здесь всё нормально да типа как в Логистическая регрессия Или похоже не Ну смотря насколько ты сильно на грузишь свои вот эти слои если сильно то наверное похуже но при этом на видеокарте считается Я тебе не могу здесь однозначно ответить не Логистическая регрессия боль быстрее в любом случае быстрее почитается что там там просто буквально этот матричное умножение самый тривиальный тный способ давай вопрос я упустил в одну строчку сейчас учили мы где количество классов задавали в

тный способ давай вопрос я упустил в одну строчку сейчас учили мы где количество классов задавали в классификатор наш будущий по умолчанию идт а по умолчанию д а ес Мне нужно ти своё количество Кай параметр будет надо смотреть параметр такой есть есть вот здесь вот видишь вот надо доку поднимать смотреть и ты можеш Да если вдруг этого нет ты всегда можешь как в такой ситуации быть если бы этого не было мы можем просто в нашей модели вот этот слой Я же к нему могу обратиться у него кодовое имя

не было мы можем просто в нашей модели вот этот слой Я же к нему могу обратиться у него кодовое имя фа я сюда могу включить не вот этот линер а поставить свой линер всё как вы делали примерно когда брали там всякие реты и прочее и последний слой под себя брали То есть это конструктор конструктор В прямом смысле под красивым именем роется СОБРа архитектура такая же как Какие вы собирали сами Давай любой вопрос Ну я не знаю нужно ли в это вникать но просто я вижу здесь полносвязный слой за

Давай любой вопрос Ну я не знаю нужно ли в это вникать но просто я вижу здесь полносвязный слой за полносвязный подряд как-то Нет это составляющий части когда так отображают это не обязательно фор прямо прямой то есть вот эта веь это ну вот на рисунке рисовал внутри мульти Self Attention это вот вот эта часть то есть вот они Q KV соответственно все вот эти операции они вот у тебя г это можно здесь и как бы как вы понимаете сегодня Практически никакого обучения не было вчера и позавчера мы с

и как бы как вы понимаете сегодня Практически никакого обучения не было вчера и позавчера мы с вами обучали всё с нуля Здесь всё взято Ну как бы обучение блока классификации только у меня присутствует но по крайней мере все эти динги все эти страдания как рентных сетях здесь вот и ещё есть Прикольная штука hing Face можете попробовать сегодня потом вам для этого нужно зарегаться получить ключ и в целом Вы можете просто Ирен получать вот так плюс этой истории что вы берёте ресурсы унф не свои на

целом Вы можете просто Ирен получать вот так плюс этой истории что вы берёте ресурсы унф не свои на проекте так можно можно по факту Да это ещё и ускоряет в принципе не А что плохого только нет можно ничего плохого не вижу в этом единственное что у каких-то моделей иренс платные Ну по пишки цепляться вроде как надо смотреть проект завтра начнётся у завтра мы немного поговорим о gpt и всё и в бой завтра подъедет другая страна тяжеловесов даде деде нуде по прикольнее на самом деле как по мне

бой завтра подъедет другая страна тяжеловесов даде деде нуде по прикольнее на самом деле как по мне лично декодер чисто Да шная штука давайте так к заданиям вашим приходить сегодняшним что вас ждёт что вас ждт сегодня очень много чего Паша для вас подготовил именно по доб материалам Ну что с восклицательным знаком особенно Посмотрите Да ну тут какие-то дополнительные материалы какие-то тейки видосики Вот ну примерно ориентируйтесь сколько по времени занимает но советовал бы сначала всё

видосики Вот ну примерно ориентируйтесь сколько по времени занимает но советовал бы сначала всё запустить чтобы всё заработало А в принципе это можно сделать достаточно быстро сегодня Ну и чуть-чуть покопаться в теории чуть-чуть поэто пори полезная штука используемая модель може поре как [музыка] устро лу в таком порядке пойти в котором указано Ну тоже чучуть покайтесь по нему всякие Что из себя представляет Ну понятно разные Модели там есть всякие поиски и так далее да вы раз разворачивайтесь

представляет Ну понятно разные Модели там есть всякие поиски и так далее да вы раз разворачивайтесь есть своё небольшое пространство для проекта Вот то же самое посты документация какие-то решения ценовая политика Ну и ещё много всего Поэтому если вы как бы шный фан Если вы хотите связываться с NP то потихоньку вам к этой платформе надо будет прове А так там мо как как на Стрим лите тоже здесь только Нан Face облаке разворачивать свои модели да Угу Так ну и собственно говоря ваше задание

только Нан Face облаке разворачивать свои модели да Угу Так ну и собственно говоря ваше задание сегодняшнее Но вам надо взять российскую версию Берта Да тайне опять же говорю что она маленькая То есть она относительно лёгкая Да вот потом сообщение Telegram каналов это ну телеканалы телеканала Telegram канал собственно говоря Саш по-моему который ты брал Да русскоязычные русскоязычная классификация T у вас было в одном из заданий всё очень просто подгрузить модель получить динги получить динги

T у вас было в одном из заданий всё очень просто подгрузить модель получить динги получить динги прикрутить блок классификации и посчитать confus F1 второ побу дополни классификации слоями обу модели в обычном режиме Для этого необходимо добавить выдачу класса из в принципе всё в принципе ВС можно вопросик Давай в самый первый день мы говорили про то что в целом в нашей теме есть есть и так далее и так далее и вот сейчас мы по сути последние 3 дня классифицирует потом Ну потом Да мо по порядку

и так далее и вот сейчас мы по сути последние 3 дня классифицирует потом Ну потом Да мо по порядку ВС по порядку это более ресурсом завтра мы косм другой задаче завтра мы косм задаче генерации вот в принципе на самом деле глобально вотре чаще всего две задаются классификация генерации много разных там историй ВС так или ина он настолько фундамента Бер это как ходящий словарь вот он просто знает много а дальше как эти знания словаря использовать уже дело ваше то есть понимаешь да Если ты

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

основные сущности а именно что такое что такое как правило что такое что такое полносвязный слои в принципе почти всё собирается из этого так или иначе столкнешься с какой-то задачей немножко стороне то ты быстро в неё в ведешь если понимаешь вот эти вот базовые принципы Так что не торопись Москва не сразу строилась классификация нормальная с другими задачами Вы ещё тоже немножко столкнулись завтра вообще говоря мы обсудим gpt Угу Вот ещё вопросы Давай лю ну по поводу домашки не очень поняла то

вообще говоря мы обсудим gpt Угу Вот ещё вопросы Давай лю ну по поводу домашки не очень поняла то есть нам дали выборку размеченный Посмотрим Да сколько там классов val coun любо одна строчка Угу И потом А как так Ну я вообще вот вообще не представляю А что тут что ту представляет У тебя есть текст У тебя есть выборка всё Ой у тебя есть класс Запускай модель А а как потом проверить Ну не на не на фазе 2 должна уже Ты мне говорить не я тебе как проверить не на Валида данных которые нам дали а

на фазе 2 должна уже Ты мне говорить не я тебе как проверить не на Валида данных которые нам дали а вот реально там запихать туда какое-нибудь сообщение То есть T в идеале написать что ли Ну если успеешь Пожалуйста напиши Ну ты же можешь я вот показывал же иренс вот мы сколько с вами здесь сейчас смотрели Сколько мы здесь с вами смотрели вот здесь миллион инфе сов ты найдёшь То есть как модель работает на иренс всё вот пожалуйста предсказание тебе вот и чей прямая ячейка с предсказани

модель работает на иренс всё вот пожалуйста предсказание тебе вот и чей прямая ячейка с предсказани разбирайтесь и пишите пишите пишите если у вас сес какой-то ступор и страх Хотя я думаю сегодня не страшный день относительно согласитесь по сравнению с понедельником вторником сегодня наверное чуть градус снизился Угу Ну и вы плюс уже повалили немножко в этом котелке вас уже вот эти SE и так далее не пугают поэтому я Настоятельно рекомендую если непонятно просто делайте вот Бер Запустить вот

не пугают поэтому я Настоятельно рекомендую если непонятно просто делайте вот Бер Запустить вот сначала запустите а потом рефлексируй сколько хотите о том что тут что здесь Да за высокая материя что здесь и там какие-то вопросы у меня можете спросить но сначала сделайте хорошо Люба сначала Запусти всё вот и потом у тебя другие вопросы совершенно появятся и другой взгляд на всё это всё давайте всем хорошего дня и на коннекте пока-пока Спасибо большое Пока

Доброе утро всем Кого видел кого не видел как вы Нормально отлично так кого у нас нет у нас нет Димы и всё да получается Ну что А сегодня сегодня сегодня а у нас речь с вами пойдёт о ещё одной архитектуре архитектура называется трансформер и это достаточно серьёзная архитектура Ну обо всём по порядку так разм архитектуру Трансформера посмотрим на посмотрим на ещё один вид Анна Да как мы с вами обсуждали вчера В1 реализовывали сами один реализован в демо Да посмотрим ещё другой вид атен который

вчера В1 реализовывали сами один реализован в демо Да посмотрим ещё другой вид атен который встроен именно в трансформер А посмотрим на одну из архитектур очень мощную концепцию а именно модель бе так Давайте немножко опять пойдём с вами в экскурс истории чтобы держать некий таймлайна делать Да когда-то и были подходы которые были на какой-то момент доминирующими это BF DF Напомните мне что они нам позволяют с вами сделать Давайте напомнит нам Серёжа Чернышов Я уже не помню но я помню что мы

нам позволяют с вами сделать Давайте напомнит нам Серёжа Чернышов Я уже не помню но я помню что мы там типа присваивали словам Ну типа кодировали их а в какой-то из них можно было ещё и контекст добавить Ну да это уже как бы всё следствие что Да вот они там становятся контекстным вектором и так далее Но самое главную самую главную как бы мысль ты назвала то есть мы вектори зуем текст вот далее мы с вами смотрели а и если идти дальше появились там вовеки ну GL текст - это очень похожие алгоритмы

с вами смотрели а и если идти дальше появились там вовеки ну GL текст - это очень похожие алгоритмы на Word To век делают примерно так же так или иначе с помою технологий пытаются пытаются решить пытаются закодировать получить Инги то есть Вектор представление текста далее соответственно наступило время доминирования подходов Ну там в целом не конкретно для динга Да но сло включался эте подходы То бишь Ну как бы самое главное из них - это конечно СТМ а семейство СТМ это были такие так

подходы То бишь Ну как бы самое главное из них - это конечно СТМ а семейство СТМ это были такие так называемые Сота Да State of the Art То есть как бы ну грубо говоря наилучшее решения на данный момент все ими пользовались и с помощью них решали до появления Трансформера вот что ещё Интересно как бы Когда доминировал СТМ появилась архитектура Элма это СТМ сеть в принципе в принципе как бы вот эти два слайда которые у меня будут сейчас этот И следующий это больше про про историю Да что вот было

два слайда которые у меня будут сейчас этот И следующий это больше про про историю Да что вот было какое-то развитие развитие можно примерно посмотреть что здесь к чему что по одной архитектуре что будет следующее вот здесь ссылочка есть но так или иначе это было была какая-то попытка улучшить СТМ сеть да В основном там наложением слоёв ещё пару концепций каких-то вот была архитектура эма и ещё модель ни были хорошие модели Хорошо хорошо всё показывали они обучены вот например был обучен на

модель ни были хорошие модели Хорошо хорошо всё показывали они обучены вот например был обучен на Википедии да то есть это тонны данных соответственно как бы всё это проняло чере вот эту модель получались там в зависимости от задачи какие-то манипуляции с текстом которые нам необходимы но в чём как бы Почему эти модели они на самом деле немножко оказались ни потому что вот что одна модель что вторая модель они вышли в 2018 году 201 а в 2017 году в середине 2017 года вышла статья от Гугла

вторая модель они вышли в 2018 году 201 а в 2017 году в середине 2017 года вышла статья от Гугла которая называлась да и была представлена впервые архитектура Трансформера которая сейчас является доминирующей И не только в тексте на самом деле даже если вы откроете например там всё что вверху так или иначе уже не просто на свёртки а либо вообще на Трансформера полностью либо свёртка плюс Трансформеры То есть как бы эту идею потом смогли перенести и обрабатывать с помощью не только текст но и

То есть как бы эту идею потом смогли перенести и обрабатывать с помощью не только текст но и картинки звук и ещё много всего вот архитектура достаточно сложная архитектура достаточно большая вот ну собственно говоря в этом наверное её бу во многом и был вот что из себя представляет архитектура Трансформера аите ставляет две части вот глобально в принципе в оригинальной статье был предложен это рисунок Мы немножко как бы более детально провали в него Да но он на самом деле состоит из двух частей

Мы немножко как бы более детально провали в него Да но он на самом деле состоит из двух частей он состоит из энкодера и он состоит из декодера то есть вот это всё можно называть декодером там сес мы с вами эту логику уже вчера помни помните то есть энкодера и декодера и собственно говоря Вообще вот эта оригинальная статья которая была предложена да или вот Для чего типа Аля Google да А за этим стоит за трансформером Google за этой статьёй вообще это было придумано для машинного перевода то что

за трансформером Google за этой статьёй вообще это было придумано для машинного перевода то что вчера мы с вами разбирали соответственно блок должен был как-то закодировать текст и информацию в этом тексте Ало Но то что мы примерно вали просто здесь архитектура на порядок серьёзнее больше вот как бы изначально да бы были важны обе части и декодер проде мы с вами поговорим сегодня про декодер мы поговорим завтра как дальше будет понятно что эти архитектуры прижались и по отдельности Да И вот это

завтра как дальше будет понятно что эти архитектуры прижались и по отдельности Да И вот это как бы за энкодером самым известным стоит модель кото мы сегодня обсудим а деде это так или иначе вот отдельно они прижились как вы видите что внутри есть некие схожести есть некие схожести Ну то есть примерно что здесь есть Есть И здесь Ну ещё кое-что как-то так поэтому даже чтобы вы проводили параллель с СТМ вот у нас с вами был СТМ например СТМ да давайте вот ОТК и можно было назвать энкодером мы там

СТМ вот у нас с вами был СТМ например СТМ да давайте вот ОТК и можно было назвать энкодером мы там уже думали Как с этого энкодера извлекать инфу может быть сцепить слой Анна чтобы включить-то само внимание усложнить архитектуру Ну так или иначе Р В чём задача энкодера на самом деле закодировать Ну грубо говоря да закодировать как-то информацию передать её дальше Вот А вот эта часть уже как раз-таки была декодером поэтому в роли энкодера декодера это общее понимание может быть архитектура

раз-таки была декодером поэтому в роли энкодера декодера это общее понимание может быть архитектура вообще какого-то своя архитектура ть свою архитектуру вот Ну мы с вами будем обсуждать именно ту архитектуру которая была предложена в оригинальной статье в оригинальной статье потому что дальше Конечно когда она вышла как часто это бывает что что-то в в Open Source выходит начинают как-то Ну улучшать Да коммьюнити собственно говоря все как-то поднимают бустят бустят бустят поэтому мы всё-таки

Да коммьюнити собственно говоря все как-то поднимают бустят бустят бустят поэтому мы всё-таки будем отталкиваться от базовой истории базовая история заключалась примерно в следующем на вход подаётся какое-то какое-то какой-то текст какой-то текст да В данном случае словосочетание как я вам сказал изначально это было для машинного перевода идёт блок энкодера то есть смотрите помимо того что вот у нас есть с вами энкодер и декодер Да эти энкодеры декодеры Будут дальше стака то есть они не просто

нас есть с вами энкодер и декодер Да эти энкодеры декодеры Будут дальше стака то есть они не просто в одном экземпляре А они ещё и в нескольких в оригинале их было шесть штук потом соответственно вы увидите что это расширяли на лаж версии до 81 или наоборот на Стил там короче тайни версии которые наоборот сужают количество ин кодеров как упрощают архитектуру потому что это уже очень тяжёлые модели и без ГПУ их уже не запустить То есть как бы компьютер всё сразу же всё Ну вот мой компьютер Он

и без ГПУ их уже не запустить То есть как бы компьютер всё сразу же всё Ну вот мой компьютер Он просто сразу Shift Enter всё то есть я его могу ребутнуть только через полный перезапуск первую же секунду отказ идёт потому что ну количество вычислений просто как-то так то есть ну и вот собственно говоря можно посмотреть как дальше это всё мчится Но это нас сейчас не сильно интересует мы всё равно больше будем на Фокусе энкодера и провали мы с вами как бы да приблизить скажем так под микроскопом

больше будем на Фокусе энкодера и провали мы с вами как бы да приблизить скажем так под микроскопом посмотрим что будет в самом энкодеры происходить А вот как устроен блок энкодер вообще блок энкодера в чём его суть смотрите у нас с вами приходит как бы вот там какой-то текст он имеет некий некое им бедин представление Ну это может быть какой-то у вас там готовый быть динг может быть не готовый быть динг не суть есть какой-то векторное представление Да наша с вами задача энкодера чтобы мы с

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

друг другу Да например не знаю солнце воздух два слова которые как бы параллельно друг другу сейчас существовали но когда они в контексте возникли то уже может быть обрисовать какая-то информация вообще Как связано солнце воздух могут они вместе стоять не могут Ну и ещё много всего всего всего всего вот А собственно говоря как всё это происходит у нас с вами приходят им бедин дальше идёт блок Анна достаточно такой большой и серьёзный блок Да это наверное Ну главная фишка В каком-то смысле Вот

достаточно такой большой и серьёзный блок Да это наверное Ну главная фишка В каком-то смысле Вот именно селф Attention механизм само внимания Это конечно Ну то что в принципе как бы дало толчок трансформерам не толчок А это как бы идея Трансформеров была потому что как бы все эти математические махинации ни для кого не новые были да мы с вами вчера строили другие Анны и СТМ там что-то матриц умножает Тут нужно было как-то принципиально по-новому придумать а как собственно говоря Ну на что

умножает Тут нужно было как-то принципиально по-новому придумать а как собственно говоря Ну на что смотреть Да вот эту абстракцию переложить на реальные проблемы далее соответственно как мы увидим размерность будет выходить та же самая та же самая потом нам ну нужен слой нормировки чуть-чуть о нём поговорим далее соответственно ffn так называемый Fit Forward Network тоже о нём обсудим потом ещё один слой нормировки и выход А можно разные интуиции выстраивать Для чего нужен каждый блок сильно я

слой нормировки и выход А можно разные интуиции выстраивать Для чего нужен каждый блок сильно я на этом как сильно погружаться в эту историю не буду но тем не менее немножко мы с вами обсудим Вот как вот эта операция на ваш взгляд называется помните когда мы в обход блоку передаём что-то На следующее Да Skip то есть видите здесь не один SK целых два и вчера они у нас тоже были Skip Нам нужен для чего что Градиент нел Да чтобы мы были более вариатив то что ГТО вле архитектуры име тоже ме на

для чего что Градиент нел Да чтобы мы были более вариатив то что ГТО вле архитектуры име тоже ме на обновление сво параметров бы если нету архитектуры очень вытянуты очень вытянуты то происходит затухание градиента как бы вот такая вот архитектура была сформирована и мы с вами сейчас провали вот сюда мы с вами провали сюда вовнутрь он состоит не то есть тут как бы Можно даже дословно есть ут много головни внутри состоит из SC product Attention Scale product att мы сейчас с вами его разберём а

головни внутри состоит из SC product Attention Scale product att мы сейчас с вами его разберём а Mad - это будет просто некий ч даже в прямом смысле Вот таких вот Scale product Attention Scale product Attention - это грубо говоря одна голова то есть вот у нас будет мульти А вот это одна голова Итак давайте падать ещё Да на один уровень ниже скажем так восприятия сюда пришли есть Вот у меня заходит слово Ой вот заходит у меня красивый ПС да получили Като Инги В чём заключается Вот это давайте я

слово Ой вот заходит у меня красивый ПС да получили Като Инги В чём заключается Вот это давайте я сразу Хот Ладно СХ здесь покрупнее заходит встречают три три полно связаных слоя е не раз Уте и увидите в ори бы value это на самом деле условность но это какая-то попытка вот сейчас мы попробуем поговорить да какая-то попытка Как раз-таки включить этот механизм само внимание То есть сейчас вы увидите В чём суть Self анш соответственно мы берём quy и Key вот в принципе вот это размерностью мы

В чём суть Self анш соответственно мы берём quy и Key вот в принципе вот это размерностью мы манипулирую сами то есть Это внутренняя размерность Да она может быть она может быть какой-то другой Она может быть какой-то другой И то есть она не обязательно должна совпадать там с размером им бенга это опять же вот как вы выставляли hidden Si В каком-то смысле это вот оно и есть да внутренний как бы hidden конкретно этого атен мы транспонирующие квадратно Да квадратного однозначно А если вот

бы hidden конкретно этого атен мы транспонирующие квадратно Да квадратного однозначно А если вот представить что вот у меня приходит последовательность Да какая-то вот здесь она конкретно для двух А вот в общем виде среди нам знакомых гипер параметров Как вы думаете какая будет действительно Она всегда будет квадратная вот размер вот этот вот Чему равен Абсолютно верно он равен длине последовательности дальше это прогоняет через софт Мак чтобы получить вероятности получается какая-то вот такая

дальше это прогоняет через софт Мак чтобы получить вероятности получается какая-то вот такая Матрица вот здесь становится понятно что здесь становится понятно почему это называется Self Attention то есть мы пытаемся включить механизм прямо в прямом смысле само внимание то есть обратить на самого же себя даже где-то вот в этой статье я читал помню ну это написано не в этой статье А читал что-то другое там в этой статье восемь человек стоит в том числе один парень с Украины или с Белоруссии

другое там в этой статье восемь человек стоит в том числе один парень с Украины или с Белоруссии короче с такой славянской фамилии по-моему с Украины и они он рассказывал что они сидели просто в столовой что-то там Гугле кушали пили чай и вот где-то там у них столовая родилась идея типа ну как надо забустить забустить забустить машинный перевод типа и вот вот эта идея появилась он говорит что вот тогда типа в столовой что вот а само внимание типа att как-то надо сегрегированный [музыка] но бы

тогда типа в столовой что вот а само внимание типа att как-то надо сегрегированный [музыка] но бы на тот момент она была нетривиально Итого получается Матрица которую Как можно воспринимать вот смотрите как эту матрицу можно воспринимать её на самом деле можно воспринимать примерно так как мы с вами воспринимали в про раз с вами Вот по-хорошему по-хорошему вот это слово красивый вот это слово пёс Ну понятно что вот это тоже красивый вот это слово пёс Да потому что у меня входное красивый пёс

Ну понятно что вот это тоже красивый вот это слово пёс Да потому что у меня входное красивый пёс будет больше последова будет больше и как бы мы пытаемся обратить внимание каждого слова с каждым Ну вот например слово красивый Да оно имеет достаточно небольшой вес 01 Почему Потому что ну вообще красивый как бы оно как отдельное слово не очень-то и существует правильно то есть красиво это как правило Ну характеристика чего-то Да что красивый не знаю красивый мост например да Или красивый пёс тот

Ну характеристика чего-то Да что красивый не знаю красивый мост например да Или красивый пёс тот же самый да Или красивая дорога или ещё чтото вот поэтому как бы 0 далее например красивый и пёс Ну тут наверно можно сказать что насколько красится к слову То есть это подчеркивает тот факт что вот как бы красивый пёс В каком-то смысле мо что связаны и вот красивый очень сильно обращает внимание Да вот на на слово пёс вот в обратную сторону как бы меньший вес да то есть слово пёс в меньшую степень

на на слово пёс вот в обратную сторону как бы меньший вес да то есть слово пёс в меньшую степень обращает внимание на слово красивый но обращает так или ина Но даже лучше начать Вот с этого ПСС сам по себе бы он имеет существенно больше анш Score чем красивый потому что ну почему в русском языке как бы в русском языке существительно это как правило уже полноценная история да то есть это уже какой-то объект как бы наверное главная какая-то часть речи можно сказать что по ней уже понятно вообще

объект как бы наверное главная какая-то часть речи можно сказать что по ней уже понятно вообще предмет того что происходит то есть красивый Просто скажешь одно слово красивый что красивый не до конца понятно да а пёс как бы ну гораздо более понятно о чём происходит ре може возвращаясь к этой ячейке 04 бы насколько для пса важно красивый да насколько пёс относится к слову красивый а здесь насколько Вот это 09 насколько красивый относится к слову получается вот какая-то вот Матрица матри само

Вот это 09 насколько красивый относится к слову получается вот какая-то вот Матрица матри само внимание Но нам надо разворачивать Мари связанного слоя Ну и ещё раз умножаем эти матрицы гарантированно умножаться Да потому что вот эта Матрица у нас с вами имеет на А вот эта Матрица имеет какую размерность гарантировано [музыка] то она у нас гарантировано имеет SE hiden dimension Вот такая история то есть количество столбцов строк всегда заме всегда гарантированно выходит вот эта Матрица эта

то есть количество столбцов строк всегда заме всегда гарантированно выходит вот эта Матрица эта Матрица уже можно сказать В каком-то смысле ещё не совсем так Но можно уже утверждать что вот они два слова но они уже очень хорошо знакомы с друг другом то есть есть такая архитектура которая позволяет както устро процесс само внимание и Да я ещё не проговорил про нормировка Да а то есть собственно говоря слово sced Как раз-таки образуется из вот этой истории корень ДК - это по-моему размерность

говоря слово sced Как раз-таки образуется из вот этой истории корень ДК - это по-моему размерность размерность вектора если мне память не изменяет это всё нужно для того чтобы векторы просто не уходили в большие значения не происходило никаких взрывов Хотя тоже это как бы нормировка её вынашивала и я вам вчера показывал att там 2 года прошло чтобы добавили нормировка а это в принципе это и есть вот этот вот анш как-то так как-то так какие здесь есть вопросы сразу же как бы можно сказать забегая

этот вот анш как-то так как-то так какие здесь есть вопросы сразу же как бы можно сказать забегая вперёд что как вы видите это будет просто обычный слой нейронной сети обычный слой с механизмом самого внимания там не чем не отличающийся от Давайте вопрос какая-то простая интерпретация просто односложно и существует Ну как бы наверно нет Ну в принципе Они что записали но ощущение что это не соотносится к реальности самое лучшее что стоит воспринять Что здесь происходит само внимание есть жено с

к реальности самое лучшее что стоит воспринять Что здесь происходит само внимание есть жено с слова Аля близки друг другу Да Исходя из этого получаем какой-то и эта манипуляция нам нужна чтобы обратно развернуть в Ну в нужное для нас размерности наверное я бы так это сказал размерность Какая получается Умно на что ли Да Абсолютно верно спасибо ко или че попа ну вопросик такой из неважных просто хочется понять Чем отличаться будут эти матрицы после поно связаных слоёв этих трёх там какие-то

хочется понять Чем отличаться будут эти матрицы после поно связаных слоёв этих трёх там какие-то разные параметры Вроде нет выходные ещ размерности одинаковые нет Ну у меня же три отдельных поно связанных слоя со своими весами и когда обучалась Они ведь по-разному обучили Угу это знаешь как как три отдела мозга разных проходит одна информацию но они обработают её по-разному можно было бы создать че то есть оригинально статье было предложено ри тут всё на самом деле создавалось Вот чтоб не

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

в целом в большинстве случаев всё-таки это происходит действительном исследовательским пум кайу и далее за кото там плат по 400 в год это есть оно там е са нем сказать так ты [музыка] права не знаю вообще ВСети сле жа когда те постоянно бьют по щекам грубо говоря просто ну просто не пробуешь не взлетает пробуешь не взлетает пробуешь не взлетает психологически не очень просто на самом деле со всем этим Сталки Я просто сталкивался в один при периуд ко на дизморали существуешь просто но правда

этим Сталки Я просто сталкивался в один при периуд ко на дизморали существуешь просто но правда Когда что-то приятное произойдёт то хорошо становится наши когда что-то получается Мне кажется они просто уже как это сказать обучены этому то есть туда же не берут людей там это обычно это зачастую люди которые там уже академическую деятельность какую-то в этой сфере ведут там типа доктора наук Там и так далее у которых собственно и работа Ну работа предыдущая состоит в этом поэтому конечно это

и так далее у которых собственно и работа Ну работа предыдущая состоит в этом поэтому конечно это наверное просто отдельный сорт людей Ну в принципе нет На самом деле вы можете тоже скну с ресм как бы так или иначе кажется Мне кажется не таким глобальным Ну то есть Ну наверно не таким глобальным но достаточно чтобы ощутить что это очень такая жёсткая штука глобально Ну конечно как бы Мета наверное занимается сверх серьёзными историями по факту у чтот их Лама сейчас в топ-3 по-моему в лидерборд

занимается сверх серьёзными историями по факту у чтот их Лама сейчас в топ-3 по-моему в лидерборд gpt моделей там конечно как бы так сказать не спарсить пару сайти ков и пару гипотез проверить за вечер чая а так ну блин это на самом деле специфика человека больше кому-то это по Кай Я таких не раз встречал мне тяжеловато честно всё это даётся вот так соответственно Ну в коде Как вы видите ничего Прям такого сверх сверх сверх нету да то есть у нас с вами есть три полно связанных слоя Ну Input

Прям такого сверх сверх сверх нету да то есть у нас с вами есть три полно связанных слоя Ну Input dimension это у нас будет что будет являться inp dimension для вот этих ключей Как вы думаете в нашем Ну на нашем языке пропустил вопрос Повтори пожалуйста вопрос заключается следующем то есть вот есть Self то quy Вот у него Input diam и output diam вот Input diam Что образует то есть что сюда надо по факту подавать в контексте наших архитектур dimension у Ну вот сюда Что так что осталось eding

по факту подавать в контексте наших архитектур dimension у Ну вот сюда Что так что осталось eding diam ещё есть у на А ну вот этот да то есть вот это вот у нас с вами будет по-хорошему sequence L на eding dimension да и вс это дело вот здесь его встречает полносвязный слой который имеет параметры как раз таки как и размерность это да соотве а Ну соответственно количество входов и выходов а выход Ну как бы вы сами его выставляете гипер параметр какой хотите можете поставить а там вчера в ресурсе

как бы вы сами его выставляете гипер параметр какой хотите можете поставить а там вчера в ресурсе который ты скидывал там вроде говорилось что входные динги Они совпадают по размерности с выходными вот на каждом слое но мы ещ на самом деле не дошли до конца То есть это одна из одна из головно это как бы не выход полностью а так да ты пра то есть вот собственно говоря уттх может быть может быть много 1 2 3 4 ну здесь их короче восемь Да вот они пронумерованы в оригинальной статье было предложено

1 2 3 4 ну здесь их короче восемь Да вот они пронумерованы в оригинальной статье было предложено восемь а как бы вот ну в каком-то смысле это реально знаете как не знаю одна голова хорошо а две лучше Да вот Google посчитал одна хорошо а восемь лучше то есть Это причём очень удобно это Параллельная архитектура вот СТМ Он полностью последовательный трансформер При всём его а При всём его при все его сложности - это Параллельная архитектура и это делает большой плюс в плане обучения и в плане Ирен

сложности - это Параллельная архитектура и это делает большой плюс в плане обучения и в плане Ирен в том числе То есть если взять плюс-минус одинаково нагруженный по параметрам трансформер и СТМ как бы странно не было трансформер будет работать быстрее правда трансформер чтобы расчехлил вот эти вот Наши hidden все да SE и так далее мы их просто конка и у нас будет финальный полносвязный слой с помощью которого Саша как раз мы манипуру размерностью да то есть здесь р подаём ровно то что вот

с помощью которого Саша как раз мы манипуру размерностью да то есть здесь р подаём ровно то что вот здесь а второй параметр мы подаём dimension обязательно Итого Вуаля у нас с вами наши им бедин а представьте здесь последовательность там в берте она 512 максимум они все проезжают через эту историю через во голов и как бы алгоритм знакоми знакоми с данными Прим Обратите внимание бы Вотс мы подавали слово по одному да то здесь плюс мы подаём их всей матрице сразу же Ну то есть будет у меня здесь

слово по одному да то здесь плюс мы подаём их всей матрице сразу же Ну то есть будет у меня здесь xn мы подаём всю матрицу Да порядок для нас важен но мы подаём всю матрицу параллельно обрабатываем и на выходе мы получаем Что называется контекстный эмбеддинг как бы Исходя из этого модель уже не просто даёт им беддинг слово солнце а слово солнце в контексте например холодную погоду да или что-то е то есть каж с каждым уже так или друг на друга как бы некий атен обращает внимание уже понимание

е то есть каж с каждым уже так или друг на друга как бы некий атен обращает внимание уже понимание что к чему присутствует некоторые как-то так давай сразу вопрос я может немного не догоняю Вот смотри там на слайде ниже там восемь слоёв получается это восемь раз в одном слое происходит то что мы выше рассматривали или это восемь слоёв А понял Абсолютно верно Да Абсолютно верно Ну то есть там как-то меняются данные или разные параметры просто вот это каждая голова у неё свои у неё свои веса

как-то меняются данные или разные параметры просто вот это каждая голова у неё свои у неё свои веса будут то есть она как бы обучается понима это вот реально В прямом смысле восемь разных мозгов и вот данные как бы проезжают А там вообще на самом деле по-моему там по-моему Лано не буду врать точно не пом пока мо так что-то Я просто вспоминал там возможно как бы в каждую голову какая-то часть слова уходит а потом всё мчится Либо наоборот всё уходит в разную голову и каждый голова видит свои

слова уходит а потом всё мчится Либо наоборот всё уходит в разную голову и каждый голова видит свои фокусы Короче надо понимать что как бы это вот ну как отдельный Ну наверное слой можно сказать да который как бы имеет Ну свои мозги свои веса Да тут же есть чему обучаться правильно вот этому делу есть обучаться вот этому делу если обучаться и вот этому делу если обучаться верно А когда это обучается соответственно имеет свой взгляд на дан мы бы сделали не одну а сразу же для того чтобы просто

соответственно имеет свой взгляд на дан мы бы сделали не одну а сразу же для того чтобы просто Лучше понимать устро данны а мы это прописываем какое количество у нас будет этих слоёв Ну вообще да да то есть спасибо ну как бы там в принципе используется стандартный но вот Можно например вот прописать у них вот есть по умолчанию стоит равно если хочешь обучать свой трансфор хорошему ты можешь указать сво значение там вот то что мы говорили вот Ну ещё какие-то параметры собственно говоря поэто Ну

сво значение там вот то что мы говорили вот Ну ещё какие-то параметры собственно говоря поэто Ну да ожидаемое количество фичей то есть по хорошему количество токенов то 52 вот поэтому сразу же ответ на этой вопрос Ты можешь этим управлять но мы будем брать предобработки плюс ещё такого же размера корпус вот вся Википедия которая есть вся вот они всю отправили в обучающую Поэтому лучше мы скажем ребят Google спасибо мы возьмём вашу модель нам не то чтобы её обучить Нам её просто расчехлили

ребят Google спасибо мы возьмём вашу модель нам не то чтобы её обучить Нам её просто расчехлили тяжело чтобы на иренс и как бы там Но даже там есть некая манипуляция вот того что ты говоришь а в целом как бы в общем виде Да пожалуйста это вот Google предложил восем можно поставить своё значение обучать там по-своему этот слой трансформа Давай это убай вопрос Вот почему типа если например каждая Z несёт э свою как бы интерпретацию тех же самых данных почему типа именно конкатенация идёт а не

Z несёт э свою как бы интерпретацию тех же самых данных почему типа именно конкатенация идёт а не например перемножение а потом е раз пропустить через софт мак какой-нибудь и получить это как бы не имеет конкретного ответа Знаешь тут надо конкретно разработчику Гугла спрашивать Ну конка как будто бы звучит пологий потому что мы просто прикладываем да то есть мы как бы не смешиваем всё это знаешь в солянку А у меня отдельно помидорчики отдельно огурчики отдельно зелень и я считаю что так лучше

в солянку А у меня отдельно помидорчики отдельно огурчики отдельно зелень и я считаю что так лучше потому что мне конкретно надо оценить плат зелени отдель огру отдель помидор А всё смешаю получил летний салатик но уже как бы всё смешано всё равно понял поэтому как бы как и возвращаясь к мысли опять тут как бы всё пробовали пробовали пробовали поэтому как бы точного ответа тут не существует реального ответа что вот ровно восемь - это самое правильное ровно Вот законка вот только законка если вы

ответа что вот ровно восемь - это самое правильное ровно Вот законка вот только законка если вы сложите всё капец то есть вот этого как бы вообще не существует да то есть это просто метод пропи ошибок который формирует какие-то архитектуры которые лучше себя показали Люба Люба вопрос давай Да я просто впечатлила с предложением поняла что буква Т на подходе уже у мене вопрос смотри тупой потому что я не очень поняла Вот ты показал эти гиперпараметры сайта торча вот это чего-то там ну это се

что я не очень поняла Вот ты показал эти гиперпараметры сайта торча вот это чего-то там ну это се нужно ведь по факту Не ну это такое вот я только знаю да а это что Ну вот они назвали по-другому SE А это ну во-первых там есть описание Да во-первых тут есть описание можно посмотреть количество входов в Ир А количество входов - это по факту есть Спасибо всё нашлось Так что е Ну собственно говоря даль дальше идт архитектура Ну как бы е у есть вот сложение плюс нормализация данных нормализация

даль дальше идт архитектура Ну как бы е у есть вот сложение плюс нормализация данных нормализация всегда чтобы у нас никакого взрыва не происходило далее У нас ещё будет блок Fit Forward Network а он состоит вот даже можно вот у меня открыта эта статья м открыта эта статья вот а чувак то я вам говорил что Восемь разработчиков Ну восемь человек стоят за этой статьёй вот эта статья она культовая вот она точно культовая статья наверно в [музыка] качестве тусовки Невой одна из самых если не самая

она точно культовая статья наверно в [музыка] качестве тусовки Невой одна из самых если не самая пультовая статья вообще да Так вот вот вот он рассказывал что пока котлетку наворачиваются что тот договорились по информации кото читал в интернете договорились и скинули рандомайзер кто каким выпадет такими указывают Ну все одинаково вклад вот вось выпал наш Славянский друг [музыка] так вот соб Дава статье посмотреть что к чему и так далее но в целом они здесь Подробно как бы рассказывают Вот вот

статье посмотреть что к чему и так далее но в целом они здесь Подробно как бы рассказывают Вот вот Skill prod Да который мы с вами проговорили Вот оно матричное умножение нормировка наложение маски Ну наложение маски это опционально то есть её можно не накладывать А как бы но мы посмотрим пример где накладываем маску чтобы лишнего не считать у нас там софт Мак Потом приходит е матри ужение Вот таких блоков ВиДи ту здесь Да это вот как раз таки Ну и всё соответственно дальше связа слой это и

таких блоков ВиДи ту здесь Да это вот как раз таки Ну и всё соответственно дальше связа слой это и есть вот всё целиком это называется вот ну тут рассказывается там как считается выходы Да attore так называемый уже ретроспективно когда всё обучается ну и здесь можно где-то найти вот вот это for можно кста Взглянуть на понимание вот есть входные данные Кто не сможет сказать что вот это вот значит что значит вот для входных данных Вот такая конструкци ну что-то линейное матри весов Да это Матрица

значит вот для входных данных Вот такая конструкци ну что-то линейное матри весов Да это Матрица весов тогда что это знат такая [музыка] сознание каква умножаем на веса Да ну Ребят давайте ещё думайте когда мы просто матри умножаем на веса линей Ну называется не Сосем линейный как бы полносвязный слой короче полносвязный слой Да называется дальше соответственно Вот это ми дальше опять умножается на вес плюс Константа Это значит что ещё раз полносвязный полносвязный ещё раз да то есть это вот

на вес плюс Константа Это значит что ещё раз полносвязный полносвязный ещё раз да то есть это вот это есть Fit for Network Ну даже наверно если мы загугли for Network откроем а он [музыка] мне выдаёт просто что такое прямой проход сети Я не знаю выдаст конкретно из это архитектуры вроде бы эти слова были слеплены возможно я Ну что-то вот типа ближе к истине но я пока ВС равно не вижу Ну короче вы поняли сейчас мы ещ входе подбой просто полносвязный слой полносвязный слой полносвязный слой всё

поняли сейчас мы ещ входе подбой просто полносвязный слой полносвязный слой полносвязный слой всё ничего там нового для вас Абсолютно нет как бы ну всегда же любит навешивать под конец какую-нибудь какой-нибудь полносвязный слой плюс это нужно чтобы также манипулировать там размер в случае чего плюс дальше опять ещё очередной Skip Con и нормализация и выход Вот это и есть слой иде что на входе что на выходе на входе просто сборище слов Да какое-то ну сборище слов реально То есть просто есть

что на выходе на входе просто сборище слов Да какое-то ну сборище слов реально То есть просто есть мнги Есть динги И эти динги Ну как бы не особо конечно другой вопрос как мы их получили мы их могли получить через вовек Да но когда мы получаем Инги после ворту века мы как бы получили Да относительно друг друга но не конкретно в контексте какого-то предложения какого-то предложения тут же всё-таки мы получаем динги Да динги а энкодер тоже воспринимают как создание им бедин только Динго контекста

мы получаем динги Да динги а энкодер тоже воспринимают как создание им бедин только Динго контекста уже когда Мы всё понимаем они уже конечно здесь друг о друге гораздо больше знают плюс ещё опять же приятная плюшечка Да так сказать сливки мы снимаем обязательно где это Attention W я хотел показать ну здесь мы их видимо не берём вообще тоже можно получить в мух Анне Ну короче не берём как-то так как-то так какие здесь есть вопрос по блоку энкодер обязательно держите верхни уровне вы мысль в

как-то так какие здесь есть вопрос по блоку энкодер обязательно держите верхни уровне вы мысль в голове тут запутаться очень легко ещё раз Для чего Нам нужен слой энкодера Кто кто попробует кто вот на тоненького понимает а Наверное как-то перемешать данные между собой чтобы вычленить из них наибольшую информацию а потом в де кодировщика это всё Ну наверное можно так сказать Ну как бы перемешать мне не совсем нравится слово Ну чтобы они все ну трансформировать как мы не перемешиваем потому что

мне не совсем нравится слово Ну чтобы они все ну трансформировать как мы не перемешиваем потому что вот это вы прямо в коде сможете это увидеть там через Бер прогони что это сейчас пом дальше то соответственно вы можете как бы считать что вот первая строка этон первого слова красивый а это как бы красивый е сознанием того что пёс рядом Да поэтому как бы да вот как-то так Ну вот как в ко слоях мы не меняем картинку но просто выва из неё фичи и так тут типа из слов наверно Ну не знаю как бы я бы

не меняем картинку но просто выва из неё фичи и так тут типа из слов наверно Ну не знаю как бы я бы сказал что Ну наверное можно так сказать можно так сказать можно так сказать очень отдал правда яки считаю это раз вещами тут го уровень абстракции у всех свой уровень вос информаци свой Я хочу чтобы вы держали нить повествования что были динги на входе того и то же самой размерность У нас есть на выходе Ну как бы уже контекстно контекстно применимы и мы понимаем что к чему Вот давай се вопрос

выходе Ну как бы уже контекстно контекстно применимы и мы понимаем что к чему Вот давай се вопрос Вот мой уровень абстракции на котором я понял чу сверить насколько Он верен типа торов они трансформируют начальные в контекст этого текста в котом использова идт типа в одном случае каяб Там модель машинного обучения а в другом случае фотомодель у нас модель будет Стар стартовый одинаковый но в итоге вып совершенно разные потому что о в контекст улт ро я также воспринимают Вот ну как бы даже вот

вып совершенно разные потому что о в контекст улт ро я также воспринимают Вот ну как бы даже вот реально вот они вот заходят Если вот мы бы не делали вот этот вот энкодер да А вот вст подавали бы вот эти X12 то есть по факту бы в каком-то смысле там чере есть попытка контекста она не такая явная да то есть а тут они прямо Повари вместе если вот это кастрюль кой назвать да то есть они прямо там Повари вместе и как бы друг о друге начали узнавать больше красивое о псе а пёс стал узнавать что он

вместе и как бы друг о друге начали узнавать больше красивое о псе а пёс стал узнавать что он красивый вот и как бы дальше соответственно вот этот блок энкодера вот эти вот вот эта история Может идти в следующий энкодер и вот такая процедура повторится Там шесть раз может повториться больше Может -12 просто всё это дело надо обучать это надо помнить вот есть ещё такая история как positional encoder А что что позволяет делать positional encoder опять же мы с вами проговори достаточно простыми

А что что позволяет делать positional encoder опять же мы с вами проговори достаточно простыми вещами как бы positional да positional encoder позволяет нам с вами как бы вот есть слово пёс да или слово красивый одно дело когда оно может стоять в начале другое дело когда оно может стоять в конце как бы по-хорошему когда вот у нас вот эти им бедин сюда приходят вот эти им бедин слов как бы нету такого явного в каком месте они стоят конечно да строка однозначно задаёт Но мы ещё хотим немножко

такого явного в каком месте они стоят конечно да строка однозначно задаёт Но мы ещё хотим немножко разбавить да то есть любое обогащение для нас практически вот на таких больших данных это полезная штука Мы хотим немножечко разбавить и сказать что а давайте как бы вот в зависимости от того на какой позиции стоит там слово красивый например мы к нему будем добавлять какой-то и тепер будет е с некоторой поправкой В прямом смысле мы будем складывать то есть вот это позиционное как бы кодирование

поправкой В прямом смысле мы будем складывать то есть вот это позиционное как бы кодирование первого слова это позиционное кодирование второго слова тут есть формула По какому принципу получаются вот эти значения Да исходя из позиции я на этом сильно не буду останавливаться потому что как бы е если придётся вам и надо будет можете потом отдельно посмотреть сри сст из двух координат 2 и бы может быть таким можеть таким 2 таким 3 ког трем сло на третьей позиции стоит в предложение слова Вот

быть таким можеть таким 2 таким 3 ког трем сло на третьей позиции стоит в предложение слова Вот немножко такая манипуляция так поиграться побаловаться даёт хорошее неплохое слой в архитектуру и все динги предварительно добавляются и с русским языком positional Дин не даёт буста потому что у нас можно слова по-разному ставить а вот в английском языке Это наверное очень значимо Я думаю в русском значимо у нас поставить Можно по-разному но при этом всё равно мы все с вами говорим одним почерком

значимо у нас поставить Можно по-разному но при этом всё равно мы все с вами говорим одним почерком одним почерком Мы все с вами говорим я вот так бы маловероятно что сказал Правильно я сказал мы все с вами говорим одним Поче То есть поставить-то можно по-разному другой вопрос как мы это делаем людям обучаемся всё равно на людских данных все эти данные мы когда-то с вами создали по-хорошему так вот идём дальше идём дальше соответственно вот мы поговорили немножко про энкодер про энкодер и как

вот идём дальше идём дальше соответственно вот мы поговорили немножко про энкодер про энкодер и как он устроен внутри и давайте вем к стартовой архитектуре кото у нас была предложена напоминаю изначально трансформер Нам нужен был для того чтобы как бы ну планировался Гуглом для машинного перевода но он настолько был хорош что прижился в остальных задачах более того стали отдельно отцеплять энкодер от декодера как бы в общем виде всё вот этот энкодер то что мы с вами получили выходы с этого

от декодера как бы в общем виде всё вот этот энкодер то что мы с вами получили выходы с этого энкодера да вот эти динги эти динги бы дальше ушли сюда и как-то через соответственно декодирование мы получили бы какую-то негативную последовательность что в принципе это могло быть машинным переводом или то что мы сейчас повторюсь да то что мы все сейчас с вами знаем это gpt Фоме Вот соответственно Ну как бы говорю настолько это было хорошо и классно вот Индер по факту делает очень крутую вещь

Ну как бы говорю настолько это было хорошо и классно вот Индер по факту делает очень крутую вещь отдельно То есть он его задача как бы понять А вообще кто куда откуда что то есть как бы теперь все друг о друге знают Так а почему бы это encoder Как как бы идею энкодера не использовать в других задачах Да звучит как будто бы очень даже здраво и наверное как бы в принципе Сам же Google был продолжением всей этой истории да Сам же Google и появилась на свет модель bert или B directional encoder

всей этой истории да Сам же Google и появилась на свет модель bert или B directional encoder representation From Transformers Почему B directional мы сейчас с вами чуть как бы во время обучения будет понятно точнее когда мы поговорим как обучался Берт икор понятно что он как бы энкодер Ну и взяты из Трансформера Да грубо говоря вот архитектура Бер стоит за ней тоже соответственно Google это чисто encoder чисто энкодер Ну что ещё скажешь да чисто энкодер модель применяется для самых разных задач

encoder чисто энкодер Ну что ещё скажешь да чисто энкодер модель применяется для самых разных задач самых разных задач А мы немножко сейчас с вами поговорим про обучение и порассуждаем Какие задачи она вообще Могла решать Берт имеет ровно ту архитектуру сразу Да по поводу архитектуры проговорил Берт имеет ровно ту архитектуру которую мы с вами проговорили Может с небольшими поправками оригинальный Берт оригинальный Берт имеет ровно ту архитектуру то есть Google придумал трансформер потом отпил

Берт оригинальный Берт имеет ровно ту архитектуру то есть Google придумал трансформер потом отпил энкодер сказал что это Берт теперь называется и Берта не отдельно обучали отдельно обучали обучали его на нескольких задачах картинка не совсем понятна но как бы можно воспринять примерно таким образом вот во-первых урта немножко сво название тоно вот есть тон это токен старта последовательности как Помните у нас был со вот как бы у там у называется по-моему Да у как они назвали вот у нас есть

как Помните у нас был со вот как бы у там у называется по-моему Да у как они назвали вот у нас есть смотрите с вами Как можно обучаться как обучаться напоминаю ничего не способен генерить продавам видео Да там пророк было или не было да Даже если не было не суть вот просто порассуждайте у вас есть тоны текста Как учить модель Это очень хороший логичный вопрос вот есть тоны тексты Как учить модель просто понимать язык просто улавливать логику и закономерность какие у вас есть идеи обычно мы

просто понимать язык просто улавливать логику и закономерность какие у вас есть идеи обычно мы привыкли что есть какая-то разметка у нас да а вот тут как бы что делать-то может попробовать заставить её продолжать к и среди совпа с тем что было на самом деле это в принципе так обучаются моде потом собственно работа то есть Так бы обучалась Мама мы раму первый элемент выборки был бы мама непонятно что дальше второй мама мыло непонятно что дальше мама раму непонятно что да Да Берт он не генерирует

дальше второй мама мыло непонятно что дальше мама раму непонятно что да Да Берт он не генерирует то есть это не генеративная модель так вот идеи были следующего характера первое вообще их две глобальные это уж очень Мне не нравится эта картинка Ну ладно как бы попробуем то есть берём У нас есть два предложения два предложения мы их разделяем сепарация да то есть токен сепарации которая просто разделяет нам два предложения и мы будем с вами рассуждать рассуждать а вообще говоря это называется

нам два предложения и мы будем с вами рассуждать рассуждать а вообще говоря это называется Next sentence prediction вариант Next sent prediction А вообще могло быть предложение б как бы предложением после А ну то есть Вот например я пошёл гулять на улице было жарко может такое быть вместе то есть может второе быть следствием первого может правильно А если бы я сказал что я пошёл гулять при этом земля круглая или что-нибудь ещ Ну такое прямо в топ для этой истории мы бы это меча что Ну не совсем

круглая или что-нибудь ещ Ну такое прямо в топ для этой истории мы бы это меча что Ну не совсем как бы не бьётся это в контексте и Вот соответственно ВС это дело чась чась чась причём это на самом деле обучается как сказать разметка данных не такая оказалась сложно берте корпус Википедии через точки серие это можно это по слож звучит это один из вариантов был то есть так понимал Ага вот эти Инги когда они рядом с этими так продолжаться вроде не может ну и там вот все соответственно эти вот

когда они рядом с этими так продолжаться вроде не может ну и там вот все соответственно эти вот умозаключения которые он для себя делал Да и вторая идея прикольная вторая идея Я даже вот как бы говорю картинка не очень на самом деле картинка в оригинальной статье называется это mlm а Mask Language modeling В чём его суть мы берём с вами Вот Представьте что у нас есть какая-то последовательность какая-то У нас есть а последовательность Да и мы берём и токена Мак закрываем некоторые слова и как

какая-то У нас есть а последовательность Да и мы берём и токена Мак закрываем некоторые слова и как бы во время обучения размечаем что вот здесь должно стоять Ну что здесь можно стоять на ваш взгляд Ну вот вместо вот этого токена маска что мо может сказать Типа пошёл Ну типа н предположим Да вот всё А вот это вот этот токен спрятали вот этот токен спрятали то же самое здесь какой-то токен то есть токен Mask - это спрятанный токен и в итоге модель как бы училась училась училась училась

то есть токен Mask - это спрятанный токен и в итоге модель как бы училась училась училась училась определять ей разметку давали Вот она вот так потихоньку Ага мужчина магазин что же здесь может быть блин Может быть он пошёл может быть что-то ещё он да сделал соответственно вот там Пингвины а пингвин вот кстати вот ещё интересный момент смотрите вот такая штука Помните я с вами вам говорил вчера или позавчера мы с вами оперировали что токен один токен - это одно слово больши моделях это не так в

позавчера мы с вами оперировали что токен один токен - это одно слово больши моделях это не так в больших моделях морфология уходит гораздо глубже она уходит в составляющие сло Но потому что вот например в английском вот эта конструкция Она встречается часто не только правильно согласны может быть не знаю US ени сло час хранил бы отдельно Flight отдельно Flight отдельно отдельно use и отдельно Flight hess useless то по-хорошему мне уже нужно шесть токенов правильно А я бы мог хранить Flight use

hess useless то по-хорошему мне уже нужно шесть токенов правильно А я бы мог хранить Flight use и указать вот такой токен он прямо так и есть с речками Что означает что это присоединение какой-то части слова и тогда мне уже хранить надо Сами понимаете по-хорошему Вот кто алгоритми сы можете оценить сложность вот этого алгоритма относительно вот этого Во сколько раз экономия памяти будет это же уменьшает размер словаря что очень важно где N N Это количество вот этих слов разница в квадрат

же уменьшает размер словаря что очень важно где N N Это количество вот этих слов разница в квадрат получается Я думаю о от N и и от n кчм квадрат просто N и 2n Ну смотри количество слов и у каждого слова есть слово с приставкой 2 е столько слов тогда это квадрат так просто в два раза больше два раза да да то есть против 2 ну как бы в принципе в алгоритмах Вы знаете что это одинаковая сложность алгоритма Линейная Да но тут как бы речь идёт о словаре он конечный в целом и сократить его в два раза

Линейная Да но тут как бы речь идёт о словаре он конечный в целом и сократить его в два раза Почему бы и нет в д раза в контекст те слов которые зде есть токенов достаточно много Ну и опять же токен Сеп - Это перед разделением А это вот типа как бы раз предложение и два предложение вот Ну что здесь у нас может быть может стоять тоже Стоит подумать как вы думаете что здесь может наверное вот так вот Я думаю типа множественное число скорее всего да так Ну я как будто упустил что мы как перешли от

Я думаю типа множественное число скорее всего да так Ну я как будто упустил что мы как перешли от разбиения сепарации на два предложения к маскам и в целом то как это учится смотри урта было как бы две обучения обучали двумя способами одной вариации его умы сча обм реально В прямом смысле разворот Гугла прописывали рандомайзер который выключал слова Предста у тебя вся Википедия тея что-то случайно выключается и вот Берт начинает учиться Вот и соответственно М это одна итерация обучения а другая

выключается и вот Берт начинает учиться Вот и соответственно М это одна итерация обучения а другая итерация заключалась предсказывать следующее предложение чтобы держать контекст Ну вот как бы вот это просто два обучения одной и той же модели сначала одно учили потом другой кстати не знаю в каком порядке Но вот и то и другое было частью обучения этой огромной огромной серьёз моде но это были последовательные или параллельные операции наложени масок и предсказ следующего после ничего не делаем

или параллельные операции наложени масок и предсказ следующего после ничего не делаем это чтото за глубокомысленно дую нить Мы пова все с вами держим языковая модель он не создавался для решения фиксированной задачи я го его Главная задача была просто научиться генерить как бы динги да и не только динги в целом он ещё возвращает кое-какие штуки короче задача Инга если абстрагироваться от математики просто учиться понимать язык Что ли я бы так сказал пони с чем когда решения фиксированной задачи

просто учиться понимать язык Что ли я бы так сказал пони с чем когда решения фиксированной задачи в зависимости от формата выходного слоя он может решать задачи как лст мы с вами могли по-разному да могли для классификации А можно попробовать подцепить декодеры и вроде генерация получается там и так далее если выходное слови состоит из одного нейрона то можно решить задачу бинарной классификации Next Next sentence prediction да То есть можно такое решить Вполне себе если выходной слой с

Next Next sentence prediction да То есть можно такое решить Вполне себе если выходной слой с несколькими нейронами то можно решить задачу добавив некоторую логику обработки выходов можно решить задачу ответа на вопросы можете почитать про этом можно прогнать текст через предо модели и получить динги на самом деле вот чаще всего реально используется вот для вот этого то есть получает динги А дальше уже манипулируют с ними да какие-то манипуляции что там нужно делают Куда дальше отправляют так

уже манипулируют с ними да какие-то манипуляции что там нужно делают Куда дальше отправляют так или иначе как вот вот даже поте им бедин именно им бедин также и от Берта но при этом надо помнить что Берт Может у них кстати вот мы сейчас с вами об этом поговорим Ну ладно пока оставлю Хотя нет покажу наверное собственно говоря сегодня мы столкнётся с вами С такой платформы которая называется hing Face такое большое очень сильно развивающиеся коммьюнити вот здесь найдём модель Бер пока что не

Face такое большое очень сильно развивающиеся коммьюнити вот здесь найдём модель Бер пока что не говорю Е К чему здесь так вот Google Вот У них даже стоит здесь небольшой да то есть вот смотрите можете сами поиграться Да они пример приводя включ это вообще такой прикол есть то есть ошка вот типа цель жизни как бы модель считает что сама Жизнь вот такая например второй пример можно взглянуть не переключается Как вы думаете что здесь будет на месте вроде как бы даже логичность вот здесь решение

Как вы думаете что здесь будет на месте вроде как бы даже логичность вот здесь решение видите насколько однозначно вот Соф ско тоно в словаре Да вот и сюда Вы можете вставлять не знаю всё что угодно там давайте водитель водитель машины Пусть устал То есть я не знаю вот этот вот токен пусть будет Маск и стат а предлагаю что Карина устала Кармина может быть Вот так вот Вот лучше да то есть и опять же решение не очень то есть у него ещ есть предположение что двигатель утомился там или кто-то ещё

же решение не очень то есть у него ещ есть предположение что двигатель утомился там или кто-то ещё но в общем как вы видите работает да это один из способов это прямой без подкрутки чего-то дополнительного но при этом можно и динги снять но динги как правило для чего-то здесь вот смотрите можно меня уже показать но влом вот которые исполь отры датасеты которые используют для обучения рта то есть Википедия и ещ корпус это о большие размеры большие размеры Ну и здесь там описано Что к чему и как

Википедия и ещ корпус это о большие размеры большие размеры Ну и здесь там описано Что к чему и как так возвращаемся [музыка] КТУ Ну да то есть один из способов обучения это не один из способов а одна из частей обучения а другой - этова много что написали Да там ф можешь начитать что там мы подили немножко А нормально так итоге трансформер это очень мощная модель Да Трансформеры Трансформеры адаптированы под разные задачи текст изображение звук и так далее хо начина тек но потом пошла раннох

под разные задачи текст изображение звук и так далее хо начина тек но потом пошла раннох нужно использовать нные модели основные библиотеки библиотеки для работы с Трансформерами это конечно рафо мы сегодня запустим тут есть курс он очень коротенький Кто хочет пройти по работе это такая некая инфраструктура как я даже ВМ смысле скал [музыка] прое об с людьми загружать свои модели открывать для них очень развивается у них опять какой-то приток большой инвестиции забыл на что но на что-то очень

очень развивается у них опять какой-то приток большой инвестиции забыл на что но на что-то очень крутое будет Бороться и выделять типа простым людям мощности в бесплатном видека Как вы думаете кто выкупит 95 видека Go Ну ещ пару гигантов ВС то есть и то как бы не успевает закрыть потребность элемента понятно что 95 уходит но как с ними соревноваться как какие-то проекты очень сложно Да И вот Тимы будем бороться с централизацией это Павлов Сейчас секунду переходить ди Павлов - это собственно

будем бороться с централизацией это Павлов Сейчас секунду переходить ди Павлов - это собственно говоря место да место и вообще контора которая занимается и разрабатывает NLP модели NLP модели связаные с русским языком с с русским языком как бы это их доминирующий язык тут в общем тоже орный осный фреймворк отсюда можно там выискивать да Или находить гайды по поводу того как запускать русскоязычные модели потому что Берт на самом деле он не русскоязычный то есть Берт обучался на англоязычной

модели потому что Берт на самом деле он не русскоязычный то есть Берт обучался на англоязычной Википедии и берту вообще фиолетовы на русский язык Как вы понимаете он не мультимодал не мультимодал Вот такая история Так ну что какие-то вопросы остались по лекции Давайте ещё раз немножечко за земли мысль всей недели как она у нас проходила точнее начнём с начала неде ми ра с текстом поняли что текст из него по-хорошему надо извлекать инфу А дальше уже решать зада какие-либо мы сталкивались с вами

из него по-хорошему надо извлекать инфу А дальше уже решать зада какие-либо мы сталкивались с вами с классификацией ещ вы столкнетесь с генерацией как бы за извлечение инф из текста в каком-то смысле отвечает блок инкоде даже можно назвать как бы какр да рере сеть но уступает Трансформера кодера и декодера сегодня речь пошла об энкодер Завтра пойдёт речь об декодеры Завтра мы поговорим о gpt как он устроен и как бы идея энкодера любого - Это са агрегировать информацию контекста а дальше делать

он устроен и как бы идея энкодера любого - Это са агрегировать информацию контекста а дальше делать ещё с ней хотите самый главный известный энкодер Берт дальше появлялось много как бы ответ лений да но мы поговорили об оригинале самый главный энкодер - это Берт который применяется к очень многим задачам к очень многим задачам как-то так как-то так Ну наверное всё маленький вопросик Ты в первый день сказал что проты такую фразу произнёс типа про СТМ Мы скоро забудем или что-то такое не не я

день сказал что проты такую фразу произнёс типа про СТМ Мы скоро забудем или что-то такое не не я такого не говорил да Ну я по не помню вот чтобы потому что я так не считаю не знаю Может я конечно как бы себя обманываю понимаете вот как бы а представляете вам нужно развернуть какую-то генеративную модель или что-то ещё на устройстве телефона то есть Работать локально на его ресурсах Трансформеры о не очень затратные их без видеокарт вообще не запустишь СТМ хотя бы запустишь А ну это всё тут уже

не очень затратные их без видеокарт вообще не запустишь СТМ хотя бы запустишь А ну это всё тут уже просто расчехлили нужны Овер мощности Окей А как бы где-то же вот зачем мне это надо Да где-то можно попроще модельку вот я вам рассказывал Яндекс клавиатуру у Яндекса Да которую вы можете установить на свой смартфон Она работает её генерация Да работает тупо на СТ потому что СТ легче просто легче это как Логистическая регрессия в мире машинного обучения вот Лоре он не будет умирать потому что

это как Логистическая регрессия в мире машинного обучения вот Лоре он не будет умирать потому что иренс логистического регрессия в 100 раз быстрее чем у кого бустинга обучение в 100 раз быстрее вес в 100 раз легче Ну да как бы мир нелинейный понятно но какие-то линейные принципы есть и где-то скорость гораздо важнее да Поэтому если Ну те топить за мощность то можно СТМ в этом смысле умер но в целом СТМ конечно не умер И не умрёт ещё Люба ну у меня в результате вашего обсуждения возник Вопрос

СТМ конечно не умер И не умрёт ещё Люба ну у меня в результате вашего обсуждения возник Вопрос вот что-то там Неужели эти модели крутятся на телефоне там же вроде бы телефон - это тонкий клиент там архитектура [музыка] клиент-сервер тура А клиентская архитектура на клиенте всё это вычисляется Вроде да Ну я не буду тебе врать точно если бы она была клиент-серверная архитектура то они бы разворачивали бы просто трансформер Я думаю в Яндексе есть мощности по это у них есть статья на храбры по

бы просто трансформер Я думаю в Яндексе есть мощности по это у них есть статья на храбры по этому поводу есть статья даже если не этот пример Хотя я больше я просто не хочу тебя врать я точно не помню может но как бы можно придумать ещё ряд задач Где тебе на inf надо работать в условиях ограниченных ностей и уже не так просто будет ще дело разворачивать я могу здесь подсказать просто случайно столкнулась на Ютюбе есть видео департамент Гугла который называется департамент о on Device Models и

на Ютюбе есть видео департамент Гугла который называется департамент о on Device Models и они просто рассказывают как мы делаем Ну то есть мы вот именно этим и занимаемся on Device моделями можно просто на юбе посмотреть пару их видик Ну вот вот да как-то так Ну что давай гда делать перерыв у нас Давай это убай да быстры вопроси иде ти можно вообще подсоединять Ну как своей Модели там или что-то такое типа к деде идт как Эндер просто я говорю я для себя в каком-то смысле вот как бы мо уровень

такое типа к деде идт как Эндер просто я говорю я для себя в каком-то смысле вот как бы мо уровень арак поводу Берта самый главный это то что когда текст проходит через Берт те на выхо информаци об этом тек тексте Ну короче как бы он понимает что к чему устроено именно конкретно в этом экземпляре выборки и это позволяет это подключить большой мозг скажем так который Уже понимает что к чему именно содержательно морфологический Там и так далее а дальше это знание оно лежит в каком-то векторе как

содержательно морфологический Там и так далее а дальше это знание оно лежит в каком-то векторе как ты правильно сказал можно манипулировать им уже как угодно по разных задаче Ну всё тогда давайте 33 минуты в 43 встречаемся перерыв лекцию Я также вот эту Сейчас закрою лекцию эту закрою и скину вам новую ссылочку Всё Давайте

уже снова в путь выдвинулся всё правильно как-то у нас в группе был кстати в группе вот которая выступала девочка вчера кат там был паренк тоже 3 в день еще всегда в дороге видел скажем так блин я понял что я очень сильно засиживаюсь прям спине было неприятно всё инвестировал в дорожку и в раму такие секунды бы походил но вот именно рассказывать ходить не получится я пробовал так себе идея так Да так так так Ну что ждём остальных и переходим к коду вопросы может какие-то появились Так давайте

так так так Ну что ждём остальных и переходим к коду вопросы может какие-то появились Так давайте начинать на самом деле то есть глобально Что у нас сегодня поменяется это просто мы в нашу нейронную сеть вот Старайтесь заземлять простые мысли вот мы очень углубляемся но как бы фокус начинается наоборот с верхних вещей то есть глобально всё что мы сегодня сделаем это добавим один слой в нашу вчерашнюю сеть то есть та же самая задача классификации плюс ещё один слой и этот слой как нас все будет

сеть то есть та же самая задача классификации плюс ещё один слой и этот слой как нас все будет называться донести так всё правильно Ладно поехали по библиотекам у нас будет библиотека Нова установить потому что сами се сдела нам нуж сами себя сделают но мы так толь все Много лишних функций кото мы вчера Свами описывали па обрезать последовательность Да какой-то процессинг всё это вынесено в другие файлы То есть как максимально разгружаем то что у нас здесь глаза видят всё убираем ВС что

в другие файлы То есть как максимально разгружаем то что у нас здесь глаза видят всё убираем ВС что контекстно стараемся насколько возможно убрать другие файлы так лучше версию и ещ Я не знаю я Давненько устанавливал Но короче усима конфликт этим там Обновили Короче у вас могут возникнуть может возникнуть проблема при установке но она исправляется просто более старой версии всё будет окей Просто так предупреждаю так поехали что у нас с вами здесь это всё вчерашние при процессинг типа там лаур

так предупреждаю так поехали что у нас с вами здесь это всё вчерашние при процессинг типа там лаур кейсы аэ А вот при процессинг лаур кейсы там удаление стоп слов и прочее прочее прочее прочее истории всё что вчера было нами нами обсуждалось далее что мы здесь делаем с вами здесь мы а готовим считаем так скажем чистоту слов для чего мы её считаем Серёж че шёл Для чего вспоминай относительно вчерашнего пайплайн Ну чтобы вес им придать потом какой-то вес а вес В какой момент Ну можно наверно

пайплайн Ну чтобы вес им придать потом какой-то вес а вес В какой момент Ну можно наверно как-то как бы твою мысль трактовать Так ну для какой для какой процедуры мы это делаем Кто поможет Давайте все вместе низация да для будем номера выдавать есть Этот номер у нас с вами будет Как раз таки в нашей логике фильм получит номер 1 ид потому что не самые часто встречающиеся А номер но Кто получит Пан Абсолютно верно так тогда запускаем так что у нас здесь с вами здесь просто ну собственно говоря мы

Абсолютно верно так тогда запускаем так что у нас здесь с вами здесь просто ну собственно говоря мы потом создам Этот словарь это всё как вчера да то есть вот это тот же самый словарь где у нас слова ча Вот первый самый часто встречающийся фильм второй там и тысячное слово не тысячные и больше Просто ты сюда вмести Да все слова мы ещё их не обрезали Я так понял конвертируем слова в индексы то есть каждую каждый текст Теперь мы ещ записываем в индексах Да теперь там у нас так и вот поехали

есть каждую каждый текст Теперь мы ещ записываем в индексах Да теперь там у нас так и вот поехали собственно нейронная сеть вообще там поему из двух одна из двух полнос слоёв состоит входного и выходного один сворачивает другой разворачивает и задача очень простая научиться каждое слово представ [музыка] из чего есть когда она обучается вот вы вчера смотрели видео как можете объяснить яже я тоже могу закодировать вам сечас случайны числа буду говорить Просто я всё вам закодируют кодирует исходя

закодировать вам сечас случайны числа буду говорить Просто я всё вам закодируют кодирует исходя из чего пытается в контекст то есть контекст определяет Да там яблоко может быть часто где-то встречается там в контексте со словом зелёный сон словом лты ВМ исходя из контекста обучение пое Туве а Исходя из этого мы попробуем получить ин представление каждого слова который у нас есть в словаре у нас по-моему Сколько было вчера 900 с чем-то можно проверить Это осталось или нет 3914 почему-то больше

по-моему Сколько было вчера 900 с чем-то можно проверить Это осталось или нет 3914 почему-то больше стало там поменял хо раньше 1000 последних выкидывал сейчас Входи 200 ну типа ЕС ме Всё верно то есть у меня теперь слов частота слов стоит 200 а была 1000 поэтому словарик чуть больше стал далее Далее что здесь сделать Давайте сюда немножко пройдём Input Он нам нужен соответственно то что мы будем подавать на вход далее мы бежим по всем ревю по всем ревю и вот смотрите это рею который мы вот

подавать на вход далее мы бежим по всем ревю по всем ревю и вот смотрите это рею который мы вот сейчас типа текущий ревью и мы с вами буде состав можно было бы не делать но это делается на всякий случай встретится слово которое как бы Word To не знает Word To не знает и как бы его не окажется но у нас так описано с вами что это вызовет ошибку то есть в данном случае Точнее не ошибку оно не добавится потом мы бежим по словам в ревю в которые пришли если это слово есть в словаре то мы его

добавится потом мы бежим по словам в ревю в которые пришли если это слово есть в словаре то мы его добавляем то есть мы на самом деле проделываем единственную штуку то есть каждое слово вот берём например там не знаю Give Да он проверяет есть словари есть Окей значит это ВС нужно чтобы подготовить для в добавляем ВС один Случайный Обратите внимание он у нас здесь получается в виде слов а не цифр Понятно сло надо знать [музыка] Да dimension указали потому что нам надо сейчас как бы это будет

Понятно сло надо знать [музыка] Да dimension указали потому что нам надо сейчас как бы это будет сказать какой размерности Ну и всё выдаём eding dimension Build то есть строим словарь сюда поданы все слова которые есть он будет знать какие слова с какими и Word обучится относительно контекста того что он видит в наших с вами и здесь обучение запускается но обучение на самом деле достаточно Быстрое обучение достаточно быстрое Так что вы это ctr ctr можете сделать прикольные штуки мы с вами

обучение достаточно быстрое Так что вы это ctr ctr можете сделать прикольные штуки мы с вами поговорим Так это неважно что вот смотрите косинусное сходство косинусное сходство - это мера похожести слов сло и он может оценить схожесть слов Обратите внимание слово фильм и слово имеет косинусное сходство 77 это очень много это это очень большое сходство у нас шкала от минус оного до одного напоминаю где Ноль - это вообще не похожи друг на друга да в параллельных вселенных живут единичка смотрит в

где Ноль - это вообще не похожи друг на друга да в параллельных вселенных живут единичка смотрит в одну сторону А минус оди в противоположном например не знаю Хороший плохой наверно бы имели мину О вот и что можно здесь у видеть интересного СКТ Dog например тоже похожи Да друг на друга так как описывают домашнее животное вот фильм карни очень похожи имеют кос сходства гораздо хуже то есть видите у нас эмбеддинг достаточно осмысленные Это очень хорошо не случайная генерация и это очень

видите у нас эмбеддинг достаточно осмысленные Это очень хорошо не случайная генерация и это очень положительно влияет на обучение модели Также можно посмотреть близкие слова То есть вы берёте слово Movie и вот он вам показывает С какими словами у него самые большие ко просто то есть всё так или иначе там mie это наверное результат пре процессинга Да какой-то получился такой там или movies Лик фильм всё в принципе в контексте Да всё в контексте можно посмотреть вот какой-нибудь эдинг вот

Лик фильм всё в принципе в контексте Да всё в контексте можно посмотреть вот какой-нибудь эдинг вот смотрите вот это динг слово Cat динг слово C его размерность сколько логично в принципе указали може нас будет 64 координаты так как мы сами её задали зададим 32 будет 32 всё очень просто так это ладно нам не надо Теперь смотрите Вчера мы с вами напоминаю подавали в нейронную сеть в нейронную сеть мы с вами подавали токены правильно И у нас был слой эмбеддинг Теперь мы этот слой как бы создадим

мы с вами подавали токены правильно И у нас был слой эмбеддинг Теперь мы этот слой как бы создадим самостоятельно и заполним начинкой то есть там он был обучаемый а здесь мы его создадим самостоятельно что для этого нужно Для этого нам нужна eding Matrix это кстати та самая Матрица та самая Матрица часик найду [музыка] её [музыка] вот вот смотрите вот вот Матрица у нас Это получается во вчерашнем рисунке ой во вчерашней лекции мы с вами обсуждали динг А И вот даже сами писали с вами что eding

рисунке ой во вчерашней лекции мы с вами обсуждали динг А И вот даже сами писали с вами что eding dimension L V То есть все динги для всех матриц понятно И вот ровным счётом здесь мы это и делаем то есть мы её сначала создаём пустой полностью пустой а сейчас будем наполнять начинкой и опять же можно было бы просто сразу туда засунуть всё это дело Но мы проверим вообще А получился динг или нет то есть что мы делаем то есть бежим по всем словам которые есть у нас в словаре пытаемся если мы

то есть что мы делаем то есть бежим по всем словам которые есть у нас в словаре пытаемся если мы находим То есть он почитался во время обучения Бывает такая проблема что говорит я не буду давать Инги по этому слову потому что контекста мало нифига не понятно короче просто через прое проверим чтобы подсветить что если с каким-то словом не получилось посчитать ин чтобы мы просто это знали вот и получается что есть бежим слово мы находим это слово вот эта запись нам возвращает что воз Bing и мы в

что есть бежим слово мы находим это слово вот эта запись нам возвращает что воз Bing и мы в eding Matrix на иту строчку записываем этот Вектор понятно То есть в нашем случае в нашем случае с вами первым будет eding слово Movie второй н слово фильм Ну и так далее это вот а ну вот да вот первая строчка будет Movie eding потом ФМ потом One потом like потом Good потом even и так далее всё это запишется в эту матрицу и мы создаём слой динга Обратите внимание Мы можем туда загрузить Ну я думаю вы уже

в эту матрицу и мы создаём слой динга Обратите внимание Мы можем туда загрузить Ну я думаю вы уже сталкивались да с этим методом From pret то есть мы туда Просто кладём обученные значение то есть мы туда нзр кладём Всё теперь он уже знает эта Матрица Она имеет конкретные значения и у нас уже есть Инги То есть их обучать нам с вами не придётся вот далее Что далее далее Далее взято из просто чтобы не было недопонимания это взято из верхнего обучения которое мы только что сделали Да вот он хранит

не было недопонимания это взято из верхнего обучения которое мы только что сделали Да вот он хранит себе все динги А эти динги мы взяли из результата То есть если ты хочешь например получить динг какого-то слово А ну вот написано Word слово например ты просто указываешь Как как в словаре знаешь указываешь также можем взять точно также можем вять ю вобще любое слово кото кото у на есть в словаре однозначно к чему это чтобы во время обучения Нейро сети Нейро сеть знала что этот слой обучать не

однозначно к чему это чтобы во время обучения Нейро сети Нейро сеть знала что этот слой обучать не надо он детерминирован и там хранится матри Инга Так ну что ж делаем н делаем н делаем на делаем dataset dat Loader делаем Ну тут можно посмотреть один элемент ничего не меняется Да один элемент обратить внимание на вход нейроны стимы всё равно подаём токены просто через слой динг уже обучены всё это как бы уже в готовые эмбеддинг превратиться так дей CPU в моём случае hidden size 32 поехали

это как бы уже в готовые эмбеддинг превратиться так дей CPU в моём случае hidden size 32 поехали Attention начинается Attention вот здесь вот здесь прописано ровно то что мы по-хорошему с вами обсуждали вот здесь это вот этого кода вот этого вот он у меня здесь прописан причём смотрите вот есть очень такие принты Я советую вам как поступить Давайте этот момент варим это очень полез он вам очень Пригодится в целом вы предположим решили написать свой блок нев где будет 5 10 15 преобразований како

в целом вы предположим решили написать свой блок нев где будет 5 10 15 преобразований како человеческий фактор - это вещь такая во-первых в concat Attention в этот слой что у нас приходит на вход что у нас приходит на вход уже все перегрелись что лиин Сай всех всех да то есть вот у нас с вами две сути вот Раз и два Да вот мы их и указываем с вами Вот они у меня и это у нас с вами вот этот вот мы его сюда подаём это ой неправильно показал А ну да это функцию са глав Это всё что нам понадобится

его сюда подаём это ой неправильно показал А ну да это функцию са глав Это всё что нам понадобится нам понадобится нам линейный слой нам понадобится это вот этот и потом А нам понадобится гиперболический тангенс вот смотрите как бы я вам посоветовал поступать вот предположим вы собирать своё Вот это всё закоментить всё вот сейчас сейчас вот там у меня есть пустой какой-то ретр Функция что-то может там возвращает советую Сначала сделать э Вот давайте берём первое мне нужно мне нужно пропустить

там возвращает советую Сначала сделать э Вот давайте берём первое мне нужно мне нужно пропустить вот эту штуку свою через вот этот полносвязный слой Ну вот мы берём это наш lstm outputs нужно пропустить через вот этот первый линейный слой А во-первых можно посмотреть Принт Давайте посмотрим какая у нас размерность у lstm outputs Ну да вот так вот г есть Вот она вот смотрите вот она размер 64 128 на 32 я конечно да Антон А где мы задавали lstm outputs в коде что-то я пров токал этот момент а мы

на 32 я конечно да Антон А где мы задавали lstm outputs в коде что-то я пров токал этот момент а мы пока ещё нигде не задавали смотри мы собираем отдельный блок мы знаем что сюда придёт мы сюда при прямо бач сайз и вот вот эта штука обязательно ребята Это тестовый Случайный бач видите я генерируются важно Мне важна сейчас не начинка мне сейчас важна скелет то есть я говорю что сюда будет приходить Басай 128 - Это что такое у нас ВОМ связан думаешь нужен не это же выход сда после кстати Нет не А

Басай 128 - Это что такое у нас ВОМ связан думаешь нужен не это же выход сда после кстати Нет не А думаешь после латона я что-то сам что за 128 вообще у нас bch size sequence L А что мы разве ставили sequence L 128 такую длинную последовательность где мы с вами вообще sequence L указывали А мы её нигде пока видимо не указывали я понял sequence L мы укажем видимо дальше утебя 32 А почему 128 сюда указывается по хорошему это видимо мы смотрим для последова длиной 128 Давайте зададим и посмотрим

указывается по хорошему это видимо мы смотрим для последова длиной 128 Давайте зададим и посмотрим для последовательно длино 32 так сделать Ну погоди мы срезаем по по Парин ровно такой какая у нас длина sequence L вот вопрос а мы его ещё не Ну так Дава не панг мы панг мы Да мы ещё не сделали Хотя погоди как не сделали Мы панг по-моему мы делали уже Ну в принципе его можно и до и после но но видимо мы его ещё не делали Ладно мы будем считать что у нас неровную сеть будет приходить 32 длина

видимо мы его ещё не делали Ладно мы будем считать что у нас неровную сеть будет приходить 32 длина последовательность поэтому я вот посмотрю то есть вот будет приходить выход с атпу это 45 элементо выборки предположим каждой длиной 32 и соответственно после каждого скрытого состояния у меня выходит длина нужно есть вот мы собираем Это после первого слова после второго после третьего вот за Вот это отвечает у нас а за то вот за Вот это отвечает столько сколько слов мы подали вот поэтому у нас

это отвечает у нас а за то вот за Вот это отвечает столько сколько слов мы подали вот поэтому у нас посмотреть А вот lstm output точка shap что всё корректно у меня выдалось да 64 на 32 на 32 А давайте только не 32 пусть у меня длина обстоятельно будет 20 чтобы одно на другое Не наезжай проследили с вами всё вот это убираем пока что давайте прогоним через первый слой Attention weights прогоняем через первый слой lstm outputs у нас имеет вот мы его только что с вами выводили 6420 на 32 и если

через первый слой lstm outputs у нас имеет вот мы его только что с вами выводили 6420 на 32 и если вот эту матрицу мы прогоним с Вами через полносвязный слой Вот этот который у нас с вами S Si умножаться думаете вообще точ как бы понимает такие вещи Si Si - это 32 на 32 вот вот даже вот эту вещь он на самом деле поймёт Он поймёт что 64 - это бач А вот это нужно матричном Понятно держим это в голове держим это в голове и запускаем Итак ваше предположение Final Final hiden а стоп Это я м не то

держим это в голове и запускаем Итак ваше предположение Final Final hiden а стоп Это я м не то показываю Это не то что мне нужно Давайте вот здесь сделаем А ну да Нет почему Вот он att есть вот смотри первый выхо Какая размерность у нас здесь будет на ваш взгляд 64 20 32 запускаем вот у на 64 2032 А это у нас последний слой да то есть 64 Бача для них один Вектор теперь Обратите внимание Вот 2032 и 321 хорошо между собой делают Вот это матричное умножение но 6464 нужно как бы оставить это бо для

321 хорошо между собой делают Вот это матричное умножение но 6464 нужно как бы оставить это бо для этого есть рч BM рас комментируем получаем att и Давайте посмотрим размерность после то есть видите и вот так вот по кускам собираете у вас будут падать ошибки Это нормально Они у всех падают и надо просто про контролить вот эти матричные умножения 64 на это у нас с вами выход получился вот отсюда 64 элемента выборки 20 это что у нас такое задали то есть 20 слов да для че элементов выборки для

64 элемента выборки 20 это что у нас такое задали то есть 20 слов да для че элементов выборки для каждого из 20 слов одно значение Это что такое какая-то арея информация бы сказа мы сказали Наско Они то есть насколько последний информацию обо всм остальном вот далее далее Далее софт ма прогоняем через Соф вот здесь кстати отдельно Паша сделано здесь Соф мы сохраняем результат а не Ошибка же должна у есть наши ве они уже на выход уйдут Давайте возьмём первый бач первый ба Я ужу нулевое а дальше

у есть наши ве они уже на выход уйдут Давайте возьмём первый бач первый ба Я ужу нулевое а дальше все кординаты надо взять Вот они важности слов получились 044 самое первое слово получило самую большую важность но тем не менее это уже какие-то какие-то вклады какие-то вклады ВС получили Ну короче вот так потихоньку по дальше что мне по-хорошему надо сделать следующая операция У меня вот э bmm для bmm нам нужно что нам нужен вход Обратите внимание Только его надо транспонировать чтобы матрицы

bmm нам нужно что нам нужен вход Обратите внимание Только его надо транспонировать чтобы матрицы умножили потому что они иначе не умножаться это опять же можно легко проверить Если мы с Вами просто Print Вот вот этот lst Shape выведем Нам нужен почитайте вот эта штука на вход и нам нужна вот эта штука то есть то что вышло после софт Макса получается нам нужен Attention то вот я вам рассказываю как делал бы я ровным счётом когда собирал бы да всё проверяю Ага вот сейчас мне их нужно делать бмм

делал бы я ровным счётом когда собирал бы да всё проверяю Ага вот сейчас мне их нужно делать бмм мчатся они или нет нет нет вот надо вот эти две как-то поменять местами правильно 322 поменять местами А нет Стоп только здесь только здесь Конечно вот именно поэтому делается распо то есть вот сюда Если мы с вами выведем вот сюда а то вот здесь Обратите внимание transpose 1 2 Ну кстати почему здесь скузи 2 делается нуно Видимо всё равно не произойдёт ошибки Но можно было бы её и убрать но хорошо

скузи 2 делается нуно Видимо всё равно не произойдёт ошибки Но можно было бы её и убрать но хорошо работает оставляем всё умножили после Так это у нас outputs то shape Это после А мы ещё Стоп это предыдущая строчка bmm вот у меня делается bmm который мы с вами обсуждали Вот он у меня то есть всё как раз-таки и att то что сделали с вами ровным счётом и смотрим что после него получилось [музыка] секунду получилась Вот такая история это у меня как называется вот контекст 6432 на1 это вот эта штука

получилась Вот такая история это у меня как называется вот контекст 6432 на1 это вот эта штука отсюда вы разме 6432 на и Final это уже Паша готовит для следующего размерности Чинг для Кэта выводит то есть размерность вот этого И вот этого да то есть вот эти две размерности сейчас нужно будет конка между собой Всё мы их конка указываем 1 и Обратите внимание по вот этой менон 632 на1 и стало 64 на 64 на1 это как датафрейм можно скон катить построчно это dimension 1 или по столбц dimension 0 и вот

на1 это как датафрейм можно скон катить построчно это dimension 1 или по столбц dimension 0 и вот тут примерно та же самая история для каждого Бача дальше делается Attention hidden Это что это у нас такое прогоняет Да через следующий полносвязный слой и прогоняет через гиперболический тангенс и выводится размерность Вот такая вот история получилась итоговая размерность 64 на 32 Обратите внимание Кстати это размерность что здесь 64 что здесь 32 Ну 32 вот я вам здесь нарисовал эту картинку где-то

это размерность что здесь 64 что здесь 32 Ну 32 вот я вам здесь нарисовал эту картинку где-то вот где я её вам рисовал вот здесь я вам говорю что вот как бы вот этот Attention hidden который мы дальше отправим это на самом деле он такой же размерности будет как вот этот то есть вчера мы с вами сразу вот так делали А теперь мы прикрутили ещё один блок но манипулирую размерности так чтобы осталось всё ровно то же самое то есть это можно в прямом смысле воспринимать что это выход да с

осталось всё ровно то же самое то есть это можно в прямом смысле воспринимать что это выход да с рекуррентного слоя для че элементов выборки последний Вектор 32 с учётом атен который в себе агрегирующие стоит проверка всё работает тестовый хорошо проходит актуально а это значит что всё так как нам нужно Да серо можно типа супер если супе аппроксимировать сказать так то что весь блок он берёт наш Вектор контекста который тупенький и что-то забыл и заново его типа пихает в него информацию Да

наш Вектор контекста который тупенький и что-то забыл и заново его типа пихает в него информацию Да Абсолютно верно именно так то есть главная суть Анна Да в это так всё Итого все эти страдания выливаются в одну строчку новый слой canc att Всё дальше Всё что мы делали с вами вчера Ну только давайте вот здесь Attention Да это Get Mod summary укажем сюда поставим bch size сюда укажем sequence L да И сюда тоже укажем ба sze то есть это конкретно для наших данных было бы вот столько 3.000

L да И сюда тоже укажем ба sze то есть это конкретно для наших данных было бы вот столько 3.000 параметров то есть блок атен даёт дополнительно 3.000 весов для тренировки 3.000 Нейрон наш мозг становится умней искусственный мозг Ну и обучать всё это дело придется подольше Вот такая вот история Ну по крайней мере всё вывелось всё да не понял почему мы торан используем Ну как бы ты можешь взять один элемент выборки свой но я просто знаю что у меня этот элемент выборки будет имет КТУ по прила

один элемент выборки свой но я просто знаю что у меня этот элемент выборки будет имет КТУ по прила правильно Угу Я конечно могу где это у меня Я конечно могу у дата Лора взять элемент Вот он у меня например sample X же есть sample X shave Вот и Вот соответственно что другое 64 на 64 А ну это ещё без им бенга Я короче знаю какой формы придёт мне какой формы мне придёт в Block att данные и просто генерируют случайные данные такого же каркаса понял а ой понял какого же каркаса самое главное Ну и

генерируют случайные данные такого же каркаса понял а ой понял какого же каркаса самое главное Ну и всё поехали У нас 32 а здесь вчера было бы грубо говоря просто А сегодня ещё добавлен СН и смотрите вчера что у нас было с вами был ин был Был блок классификации всё Единственное что мы добавили это прямой ход сети какой заходят инч зат ши туда соно считаем этих слов для этого у нас исполь сло А это погруженные нами ра Давайте найм г у [музыка] на кстати делали доли поэтому мне сейчас не

сло А это погруженные нами ра Давайте найм г у [музыка] на кстати делали доли поэтому мне сейчас не удариться бы в ошибку так поехали поехали поехали сечас скоре все где-то будет ошибка чтото надри размер Ну ладно далее нам выплёвывает три выхода это все все всех слоёв это последний Ну как вы думаете что здесь ещ долгосрочная память Вчера мы с вами говорили же что СТ в отличие от он ещё выплёвывает у нас с вами Вот здесь то есть помимо То есть это вот это всё последний вот ещё sate есть Но как

у нас с вами Вот здесь то есть помимо То есть это вот это всё последний вот ещё sate есть Но как правило не используется больше используется задача во время обуче перева информацию сонно и последний слой подаём х в Attention получаем оттуда Attention hidden Attention Wi и используем блок классификации чтобы предсказать Класс всё создаём дальше всё тоже самое ну и Давайте посчитаем три эпохи три эпохи Опа что-то не хочется чтобы так спамить надо все эти принты убрать наши вот эти убираем раз

эпохи Опа что-то не хочется чтобы так спамить надо все эти принты убрать наши вот эти убираем раз убираем два убираем 3 4 5 Шесть всё вроде все убрал Чита отц так вот первая Эпоха подъехала 083 Ну связано Это с кот ашем или то что мы поменяли а словарь Да и то что мы поменяли sequence L Это надо ещё смотреть Но по крайней мере базовые уже такие хорошие точности идут хорошей [музыка] точности 086 так здесь мы добавляем динг в наш словарь Это был это в обратную сторону то есть на самом деле в

так здесь мы добавляем динг в наш словарь Это был это в обратную сторону то есть на самом деле в тарах всегда есть метод то есть типа по слову получить его токен и по токену получить его слово в обратную сторону Вот видите тут наоборот по токену можно вытащить слово это нам нужно Как вы думаете для чего для отрисовки графиков у нас будут токены важные мы будем отображать на рисунке важ сло Вот соответственно Нуф например смотрите ВС что я здесь делаю ED сюда подаю свою модель Чтобы подготовить

Нуф например смотрите ВС что я здесь делаю ED сюда подаю свою модель Чтобы подготовить сделать это всё вот вот в этой функции Да у нас происходит и важность слов можно взглянуть то есть ну как бы вот модель считает по-хорошему надо ещ её Преди выводить но тем не менее она обращала внимание на слово фильм на 55% на слово 45% можно чуть подлиннее Так что у на здесь написано Я был в кино вчера и смотрел этот фильм Мне он понравился да запускаем вот получилась какая-то история такая Сюда можно

смотрел этот фильм Мне он понравился да запускаем вот получилась какая-то история такая Сюда можно взглянуть бы видите почему-то он на и на фильм ВС равно реагирует Хотя эти слова по факту они не отражают степень окраса Да положитель норе смотреть там ревью когда Ключевая информация в начале да то есть реагирует он на этот факт что смотрит только на конец а не обращает на начало или нет Давайте вот preview 2 запустим то есть теперь Видите вот здесь like Kit был в конце Да здесь он на самом деле

preview 2 запустим то есть теперь Видите вот здесь like Kit был в конце Да здесь он на самом деле в начале смотрим Что произойдёт лайк Ну в принципе реагирует тоже на те же самые слова кстати хуже обучился я потому что это запускал ила оба раза было доминирующее слово то есть скорее всего либо я параметры так поменял либо эпох мало можно ещё подольше подержать Но на самом деле удивительно удивительно вроде ничего особо не менял ла стал не самый популярный А был лай в топе ну попробуйте сегодня

вроде ничего особо не менял ла стал не самый популярный А был лай в топе ну попробуйте сегодня потыкать с параметрами посмотреть что будет по крайней мере появился такой функционал Это очень хорошо да На что обращала внимание модель на что обращала внимание модель Какие слова становятся триггером вот и всё вот и всё Давайте вопросы ваши Даба в целом это же типа это типа база Да нормально что типа он на динг тоже отдаёт какие-то проценты на типа на Ну Слова вот эти это вот это вот это и есть вот

он на динг тоже отдаёт какие-то проценты на типа на Ну Слова вот эти это вот это вот это и есть вот это где там вот то что мы рисовали Вот вот нормально да посмотрели ва важно слов при приняти решени например Еня будет тогда нужно будет и это сохранять обязательно указывать Поу раре первое самое главное как вы думаете Какая что было Ну я всё-таки на первое сто выл то что мы добавили большой блок архитектуры который теоретический позволит нам быть умнее то есть без Анна мы не могли обращать

архитектуры который теоретический позволит нам быть умнее то есть без Анна мы не могли обращать внимание прямо на слова конкретно сейчас Мы научились точность должна вырасти Ну по крайней мере если данные Чем более сложные данные тем более необходим ан то есть в больших архитектура без Ан сейчас уже ничего не работает вот как бы мы про раз е поговорим с вами завтра и послезавтра Вот но сама идея И вторая какие-то приятные следствия которые можем получить то на что обращал внимание давай

идея И вторая какие-то приятные следствия которые можем получить то на что обращал внимание давай посмотрим вым Ну конечно всё-таки как бы нас главна история как бы вот я бы сказал То есть у насто контекстный Вектор последний который плохо помнит уже старенькие слова а тепер мы ему сказали Посмотри по внимательно дружище может интересное найдёшь и совестно более важна история приятная плюшка следствие того что мы с вами можем посмотреть сду вас всего чере задания Первое это вам нужно будет

следствие того что мы с вами можем посмотреть сду вас всего чере задания Первое это вам нужно будет реализовать богдано Сами понимаете вот в принципе как сам устроен То есть то что там показывал в лекх это как считать вот са Вот его схема схема отличается от того что мы с вами проделывали внимание точно так же как бы СТ точно также у нас есть МКА у которой мы забираем как все н сайз так и последний hen sze и дальше начинаются вот эти телодвижения советую вам советую собирать по кусочкам Вот

hen sze и дальше начинаются вот эти телодвижения советую вам советую собирать по кусочкам Вот прям реально вот наст предположим села всё самый Неприятный момент начнётся Когда вы начнёте собирать функцию Forward то вы всё это при процеси там Ctrl C Ctrl V я вам советую всё контекстно сегодня сделать Ctrl C Ctrl V ваша самая главная задача это не сверх точность это не сверх результат обработка данных или что-то ещё ваша самая главная задача чтобы у вас просто сегодня всё это запустило потому что

или что-то ещё ваша самая главная задача чтобы у вас просто сегодня всё это запустило потому что это уже такие высокие материи начинаются чтобы у вас анш заработал это будет хорошо поэтому Когда вы дойдёте до именно самого класса Анна То есть когда вы собираете слой атен вот Настя села предположим и советую вот когда Форвард будете идёте по кусочкам как я делал да то есть по одной строчке проверяете принте размеры и тогда вы обязательно соберёте обязательно соберёте то что у вас здесь

проверяете принте размеры и тогда вы обязательно соберёте обязательно соберёте то что у вас здесь происходит так сюда вот опять два выхода размерности контролем через плоно связанные сло прогоняем чик-чик-чик и выводим это у нас будет ПВО [музыка] [музыка] и соответственно можете тренированные динги то есть слой динга тоже поставить как на обучение как вчера делали А можете вять через в принципе если одно сделать второе будет очень близко сделано как базовую Я выбрал чтобы ещ пощупать Но самое

если одно сделать второе будет очень близко сделано как базовую Я выбрал чтобы ещ пощупать Но самое сложное конечно вас будет собрать вот эту схему собрать е задание это функцию кото иллюстрирует ние для вот э функция у нас короче которая отвечала за отрисовку вот эта функция тоже Ctrl ctr там своим поправками И третье реализовать ну такие задания Да Саша плюсик на схеме это какая там функция в плюсик это сложить просто ти Это не просто сложение надо сложить да плюс Это плюс то есть по

в плюсик это сложить просто ти Это не просто сложение надо сложить да плюс Это плюс то есть по элементная угу угу угу угу всё да Ну скорее всего одинаковые размерности выйдут Ну смотри отсюда что у нас пойдёт отсюда у нас пойдёт Ну да да одинаковый а нет да-да да не погоди тут будет bch size hidden size один надо заметь здесь это будет ту будет hidden size на оди Сай кстати размерности будут разные Надо конкретно в конкретно будет най на оди и типа как по элемент складывать или по столбцам для

Надо конкретно в конкретно будет най на оди и типа как по элемент складывать или по столбцам для каж или нужно будет сложить столько раз сколько типа секун на по элемент складывать получается потно она же будет вектор и Матрица на выходить ну векторы наложить друг на друга Ну понял Ну вот я про это да и говорю Вот соответственно ну здесь всё проделайте по жч что пишите жст плюс это в прямом смысле плюс вот как нас по сталинке учили без всяких этих скрытых приёмов 2 П 2 4 Окей Ну сегодня наверно

плюс вот как нас по сталинке учили без всяких этих скрытых приёмов 2 П 2 4 Окей Ну сегодня наверно пиковый день нагрузки вообще в целом Так что кому кажется что это полная жесть и полный трш сшу вас обрадовать Вас можно понять это действительно жёстко А завтра что-то тирта да завтра да будет Ну опять же видите Всё зависит от уровня абстракции в которой вы готовы провалиться если совсем глубоко уходить то да жёстко если не так глубоко то в целом воспринять можно воспринять можно так что держите

то да жёстко если не так глубоко то в целом воспринять можно воспринять можно так что держите себя за руки за ноги когда есть желание понять каждый болтик внутри Всё тогда давайте хорошего дня продуктивного и на связи пока-пока дате пока N

так Привет всем кого у нас не хватает кого-то Наташи не будет Дима Дима и всё да получается нет же 11 вас было по-моему Ну вместе со мной всё Марк это мои флешбеки Ну толубай ушёл же поэтому луба здесь ой толубай бул я понял прил прос Наташа пришла кото ещ как будто одного нет но Пройдусь по списку и все Ну ладно Так что давайте дава Сегодня нас с вами ждёт интересный день видео посмотрели что как вам War to нормально лба понравился War to как я понял плюс-минус тоже самое практически получаем

вам War to нормально лба понравился War to как я понял плюс-минус тоже самое практически получаем кайфовые Им вединг самое главное что надо понять так а поехали что сегодня у нас с вами будет смотрите сегодня мы по факту частично продолжим то что мы делали то есть практическая задача также будет связана с классификацией мы с вами немножко Как сказать усложни архитектуру которая должна по логике вещей давать более высокие точности Да так способ вычленять Более серьёзные закономерности этот

вещей давать более высокие точности Да так способ вычленять Более серьёзные закономерности этот механизм который м концепция интересная которая как бы внедрена и причём не только в текст вот мы посмотрим там на разных задачки вообще у вас будет сегодня и завтра послезавтра и он всё время будет разный вообще этих анно существует много тут кте на будет подойти просто понять что это вообще за философия также мы немножко с вами коснемся другого вида другой другой задачи ВМ свы слова машинного

также мы немножко с вами коснемся другого вида другой другой задачи ВМ свы слова машинного перевода то есть перевода с одного языка на другой но как бы точно также работает и gpt И вообще все вот в том числе чат gpt и все самые там сильные сильные модели которые вы как бы знаете вот как-то так так сегодня конём задаче машинного перевода но опять же практических задач у вас с машинным переводом не будет нам он просто нужен чтобы понять просто логику как всё это устроено разберём механизм

не будет нам он просто нужен чтобы понять просто логику как всё это устроено разберём механизм внимания атен и реализуем один из видов Анна конкретно в нашей задаче классификации Итак смотрите вот если касаться касаться переводов в последнее время самые сильные переводчики они все так или иначе работают на нех технологиях Да там в рейтинге Ну по крайней мере с русским языком Это Google Яндекс и какой-то ещё один втроём все остальные отстают там уже так или иначе Невы технологии внедрены

и какой-то ещё один втроём все остальные отстают там уже так или иначе Невы технологии внедрены воспринимать можно воспринимать что вот всё что вот это происходит как бы это и есть как бы наш СТМ как бы СТМ - это одна ячейка но я цельно объединяют как бы весь текст проходит через СТМ ячейку Вот они у нас подаются на вход какие-то слова Да там Хаваю в данном случае Вы помните что у нас есть какие-то выходы все это помнят что рекуррентная ячейка она возвращает скрытое состояние с каждого после

выходы все это помнят что рекуррентная ячейка она возвращает скрытое состояние с каждого после каждого слова также есть у нас какой-то общий выход мы его с вами называли как вчера по терминологии немножечко прогоним вот вот это какой гипер параметр Абсолютно верно SE L то как насколько большое векторное представление будет у каждого слова это что у нас с вами вот за Вот эту вот всю историю Вот это что разме размер словаря Да размер сря не к нему сейчас тоже придём с вами он тоже будет фить так

что разме размер словаря Да размер сря не к нему сейчас тоже придём с вами он тоже будет фить так вот мы с вами говорили что у нас есть вот эти вот H1 H2 помните что это у нас промежуточна вающий вообще это как бы State или это промежуточное состояние о скрытое состояние скрытое состояние оно высь у нас после прохода каждого слова агрегированные мы именно к этой части прикручивать классификации в машинном переводе машинном переводе и в gpt историях и так далее это больше конечно лько эта часть

машинном переводе машинном переводе и в gpt историях и так далее это больше конечно лько эта часть грубо говоря Да можно так сказать что в задаче генерации у нас будет с вами энкодер и декодер То есть это как бы две две составляющие причём мы с вами в Завтра по-моему завтра остановимся больше на энкодер и послезавтра больше на декодеры и соответственно будет ещё часть декодера задача Понятно задача энкодера это как-то закодировать входные входную последо задаче машинного обучения как-то

задача энкодера это как-то закодировать входные входную последо задаче машинного обучения как-то агрегировать машинного обучения задаче машинного перевода это какая-то задача агрегировать информацию входного входной последовательности слов а дальше уже конкретно Под свою историю как-то её подводить вот а и получается что вот этот Вектор это и есть Вектор который называют контекстным вектором в данном случае Вектор контекста который держит всю информацию как бы о себе и он подаётся дальше на

данном случае Вектор контекста который держит всю информацию как бы о себе и он подаётся дальше на вход что у меня изображено здесь Здесь у меня изображена Следующая история а [музыка] тут у нас блок декодера его задача соответственно выплёвывать опять слова это может быть тоже какая-то м сеть на самом деле Конечно мы будем разбирать архитектуры которые гораздо Ну не гораздо Но посложнее чем они это архитектура Трансформеров завтрашнего дня они пойдут но пока для простоты понимания можно

они это архитектура Трансформеров завтрашнего дня они пойдут но пока для простоты понимания можно воспринимать это как обычная СТМ сеть которая точно также способна у нас соответственно с вами скрытое состояние выплёвывать это может быть перевод на какой-то другой язык вот ранее у нас с вами в первую помните первое слово когда мы сюда подаём что у нас сюда подаётся как h0 но да какое-то нулевое скрытое состояние то есть ничего не было в данном случае в данном случае как раз-таки контекстный

скрытое состояние то есть ничего не было в данном случае в данном случае как раз-таки контекстный Вектор заходит сюда первым и дальше соответственно Ну примерно по такому принципу там чуть-чуть посложнее видите то есть помимо того что мы просто идём к следующему слову Да к следующему слову мы е собственно говоря этот контекстный Вектор тоже будем передавать Итого пытаемся как-то расшифровать данную последовательность понятно да как это может быть устроено как это может быть устроено Давайте

последовательность понятно да как это может быть устроено как это может быть устроено Давайте ниже чу-чуть Ай блин я вз рисовал но сейчас секунду Т маркер выбрал А как это всё может происходить смотрите вот если чуть-чуть более подробно нарисовать да то есть вот у нас с вами например да приходит на вход последовательность точно также она начинает идти через н формируется какой-то контекстный Вектор Здесь начинается другая другая сеть которая сеть декодер и Она будет принимать на вход У нас тоже

Здесь начинается другая другая сеть которая сеть декодер и Она будет принимать на вход У нас тоже с вами Вот мы с вами уже с одним служебным токеном сталкивались Какой это токен этих служебных токенов их три их больше есть такой служебный токен который называется остат первым начало последовательно соответственно ВС прил контекстный Вектор этот он тоже в прямом смысле у нас с вами Как как слово получает и как бы модель понимает что это просто надо начать генерировать последовательность и Вот

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

мы с вами будем выплёвывать данные далее Если мы с вами сюда подключим полносвязный слой вот такой размерности то какая размерность у нас будет на выходе то есть сколько ну нейронов или сколько значений как угодно можно говорить будет на выходе Давайте вопрос кости размер словаря для на Варя Прошу прощения Я сегодня без камеры и немножко фоном так поздоровится но я тут хорошо здоровь так атно правильно слоя далее здесь на самом деле на этом не заканчивается а применяется функция softmax А кто

слоя далее здесь на самом деле на этом не заканчивается а применяется функция softmax А кто мне напомнит Что такое функция софт Мак А мне напомнит Конкретно мне напомнит наст Ну это которая с блин всё время её путаю видимо с возможно сиг Ну короче Возможно это та которая с с экспонентой наверху и внизу а да да а интерпретировать как-то сможешь её так правильно Ну это та которая логика переводит в в то что от нуля до единицы Да это вот смотрите если бы вы решали многолапый У вас три нейрона

в в то что от нуля до единицы Да это вот смотрите если бы вы решали многолапый У вас три нейрона например не знаю положительный отрицательный или нейтральный отзыв у вас предположим пришло бы 10 7 и пять это так называемый гиты помните гиты Линейная комбинация значений навеса то софт Мак их просто нормируют нормируют в шкалу вероятностей софт - это многомерная сигмоида она например понятно что она самому большому значению дас большую вероятность предположим 06 03 и 0 Я из головы эти числа

она самому большому значению дас большую вероятность предположим 06 03 и 0 Я из головы эти числа придумал Но типа после софт ма вы как бы от абсолюта переходите к вероятности Исходя из этого мы уже можем найти большую вероятность то есть нейронная сеть считает что там что-то более вероятно чтото менее вероятное сю бем наибольшую вероятность И говорим что это вот вот этот класс да класс о там класс по предположим в нашем случае в нашем случае надо говорить не позитивное отрицательное или что-то

по предположим в нашем случае в нашем случае надо говорить не позитивное отрицательное или что-то ещё А в нашем случае нужно генерировать следующее слово и в прямом смысле у нас есть с вами словарь Словарь у нас есть как бы как вот Костя сказал правильно что у нас с вами будет Вектор на выходе вот этот Вектор это будет словаря слово какое-то после того как мы применим Соф мы получим гистограмму с распределением вероятности встретить там какое-либо слово Ну и в данном случае мы видим что это это

распределением вероятности встретить там какое-либо слово Ну и в данном случае мы видим что это это более вероятное поэтому на этой операции выходит слово это То есть фактически фактически мы с вами на каждом шаге будем решать задачу классификации лассо ла это слово также работает gpt оно генерирует слово за словом и когда ей надо что-то сказать Вот вы например пишите что-то напиши мне такой-то такой-то код Да она Окей Я вас поняла и так далее каждое слово происходит именно вот эта процедура

такой-то код Да она Окей Я вас поняла и так далее каждое слово происходит именно вот эта процедура там классов просто тьма огром огромнейшее число но тем не менее тем не менее она всё время выбирает слово И вот так вероятност генерить каждое слово в данном случае у меня это перевод текста но генерация текста ничего не поменяет понятно что имеется в виду то есть вот это уже фаза декодера идт фаза декодера мы вчера напоминаю с вами останавливались здесь мы как-то либо этот контекстный Вектор

декодера мы вчера напоминаю с вами останавливались здесь мы как-то либо этот контекстный Вектор использовали либо использовали вот эти все плюшки разные а с завтрашнего дня задачи будут усложняться они будут не только повязаны классификации соответственно нужна будет необходимость в декодирующее части Да которая позволит с помою декодера именно генерировать То есть как знаете не знаю сигнал вот сигнал отправляют есть соответственно передатчик есть приёмник вот передатчик считается инкоде он

сигнал отправляют есть соответственно передатчик есть приёмник вот передатчик считается инкоде он зашифрованном виде отправляет сигнал а приёмник он принимает шит обратно вот уя на самом деле всё работает примерно так да Саша да может я вчера упустил контекстный Вектор Ты рассказывал или нет да рассказывал контекстный вектор контекстный вектор это вот последний H который выплёвывает из когда последнее слово проходит через не Ну просто что вчера в ресурсе там было немножко другое Нет почему мы

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

вот здесь называется контекстным вектором понимаешь мы как бы сами сейчас манипуру выходами как хотим То есть тут надо понимать что рекуррентные блоки дают выходы как бы после каждого и соответственно дают вот последний выход это в принципе это и есть вот этот выход мы его можем брать Можем всё вот это брать как бы в данном случае в таких архитектура лся Вот именно контекстный Вектор он получил название контекстного вектора именно в этой задаче а хорошо всё Угу А контекстно ну как бы Аля да

название контекстного вектора именно в этой задаче а хорошо всё Угу А контекстно ну как бы Аля да Просто отвечаю на этой вопрос в чате почему он называется контекст если он как раз теряет контекст Ну не факт что он теряет контекст Хотя ты смотришь как бы как сказать в точку но в целом как раз-таки типа Аля именно этот Вектор знает это слово Это слово Это слово это слово Это слово Кто как не он вообще в себе Ну хотя бы агрегировать всё то что он видел Настя Сейчас я просто закрепить потому что

в себе Ну хотя бы агрегировать всё то что он видел Настя Сейчас я просто закрепить потому что всё ещё не связалась эта картинка со вчерашней картинкой Вчера у нас Ну например Вчера у нас на выходе было что Версус Сегодня у нас на выходе что смотрите Да вчера Вот мы с вами Давайте ещё раз да вот вчера мы с вами грубо говоря были просто вот здесь вот и было два варианты архитектуры когда мы крепились вот к этому вектору с последнего слоя и или мы брали все вот эти векторы делали связа сло

крепились вот к этому вектору с последнего слоя и или мы брали все вот эти векторы делали связа сло классификацию сейчас просто мы смотрим на примере немножко другой задачи которую вам не придётся решать Это просто на самом деле можно рассуждать что расширение горизонта горизонта того что мы изучаем но все задачи которы так или иначе надо генерировать У них ещё будет Вот это составляю составляющая декодера она нам сечас поможет просто понять принцип Анна в том числе и как ан зарождался короче

декодера она нам сечас поможет просто понять принцип Анна в том числе и как ан зарождался короче вчера мы Закан ласси сегодня перем мы посмотрим сечас генерацию но тому что на этой картинке мы смотрим как бы на генерацию то есть вчера говорю Здесь был Ну давайте откроем откроем где у нас была картинка с вами это что вчерашние наши с вами труды Даже тот же самый Вот у нас вчера с вами было то есть вот он последний который как бы сейчас у нас с вами как контекстный вектор именуется контекст А мы

вот он последний который как бы сейчас у нас с вами как контекстный вектор именуется контекст А мы ну там два варианта Да в демо было как собственно говоря просто контекстный вектор и блок классификации sequential прикручивать и соответственно flon и сюда вот этот блок классификации прикручиваем А теперь видите как бы будем как-то пытаться манипулировать ещё для дальнейших задач не только для классификации грубо говоря в данном случае у нас раньше был блок классификации А сейчас блок Деко То

грубо говоря в данном случае у нас раньше был блок классификации А сейчас блок Деко То есть он как бы заменил именно вот но опять же это нам нужно для примера чтобы понять атен решать вам сегодня не придётся Спасибо так ещ кого-то остались вопросы в чате да да контекстный Вектор очень старается не всегда у него это получается Всё сохранить это правда так ну что ж собственно говоря вот смотрите одно слово мы сгенерировать да проходит через рекуррентную ячейку плю соно Илина ИТ информация

одно слово мы сгенерировать да проходит через рекуррентную ячейку плю соно Илина ИТ информация контекстного Что здесь происходит опять же полносвязный слой вероятность возникновения следующего токена Оказалось это милое Да самое вероятное ну и вот так вот собственно говоря всё слово за словом будет гери далее А у меня тогда такой вопрос К вам А как вы думаете как у как вообще вот как gpt понимает что пора остановиться или как переводчик вы Пите ему предложение перево работают на Трансформера Ну

что пора остановиться или как переводчик вы Пите ему предложение перево работают на Трансформера Ну хорошие переводчики сильные как они понимают что всё хороше надо тормозить Ну както наверное договори М говори говори Серёг договори ты это что сть Давай ещё раз Ну у меня была мысль про длину изначального входного послания и выходного они как-то должны смиряться Но он же не обязательно совпадает здесь у нас с мип ть со слов а это милое кошко на русском три только будет у меня теория что Вектор

здесь у нас с мип ть со слов а это милое кошко на русском три только будет у меня теория что Вектор контекста типа почти обнуляется Тош Мы его объяснили что у нас какая-то фигня остаётся И всё И мы довольны А ну это очень сложно математически было бы достичь потому что мы именно на процессе обучения на сам Вектор контекста внутри как бы не манипулирует сии уходят он как Как учится сам учится мы тут сложно Ну можно можем мы можем на каждом этапе заново запускать энкодеры сравнивать кто смотреть

сложно Ну можно можем мы можем на каждом этапе заново запускать энкодеры сравнивать кто смотреть обли это такая се архитектура не на самом деле всё проще если у нас есть тон SOS Как вы думаете какой токен ещё может быть он тоже вот ещё один служебный токен Да он существует и во всех генеративных историях если этот токен оказывается самым вероятным самым вероятным Да ну то есть тут вот как бы нес Понятно нари име вду что также нужно здесь что-то будет генерировать Да как бы следующее а сработал

Понятно нари име вду что также нужно здесь что-то будет генерировать Да как бы следующее а сработал токен iOS всё на этом генерация заканчивается То есть если токен оказывается самым вероятным то всё хорошо на этом как бы перевод будет закончен также и с генерацией текста повторюсь то же самое вопросы Угу давай вай типа Кстати я не понял А если например EOS не поставить но при этом типа само предложение закончится ти продолжить генерировать Я когда писал gpt у меня не было этого токена я что-то

закончится ти продолжить генерировать Я когда писал gpt у меня не было этого токена я что-то об этом не подумал и просто поехал не связанные слова Вот сколько хочет столько генерирует и всё пока у меня оперативная память компьютера не закончилась он писал эти слова Вот там в прямом смысле как бы это как вот итеративности то есть идёт for Да там for I in Range Да предположим Ну или даже не через for Range наверно Может быть там while True вот так вот то есть Пока генерируется while True

через for Range наверно Может быть там while True вот так вот то есть Пока генерируется while True соответственно здесь там Next token вычисляется Ну функция Next token предположим которая как раз-таки отвечает за эту историю которая нам бы вытянула следующий токен Да там it это какая-то и тра и п ра 1 и где-то есть исключение что если токен оказался и ос всё брейка и останавливаемся пока его не произойдёт он будет генерировать Ну конечно как бы я думаю что в больших сетях исключение прописано

произойдёт он будет генерировать Ну конечно как бы я думаю что в больших сетях исключение прописано чтобы не было такого что бесконечно генерить всё это да но в целом как бы в правильной конструкции работы существует вот этот токен конца предложения и когда он выстреливает а он точно также будет участвовать во время обучения То есть когда мы с вами обучаемся Вот например мама у вас мог быть элемент выборки для обучения мама мыло это у меня иксы грубо говоря раму Да один элемент а потом мог быть

выборки для обучения мама мыло это у меня иксы грубо говоря раму Да один элемент а потом мог быть элемент мама Мыло раму и вот здесь как раз таки вот этот токен ИО то есть правильное предсказание - это вот токен и ну как бы это уже сложная история по поводу разметки данных для генерации но как-то так примерно можно рассуждать и поэтому уже на этапе разметки обучения прекрасно знает что это за токен это полноценный точе отличающийся от слова мама от слова солнце от слова небо от слова Луна от

это полноценный точе отличающийся от слова мама от слова солнце от слова небо от слова Луна от слова машина и так далее То есть как бы мы же вчера с вами поговаривали есть токены в словаре и вот эти токены они как бы тоже соответственно имеют место на существование и также участвовали в процессе обучения да се то есть правильно я понял получается мы обучаем моде и в кон каждого ложения когда стоит этот токен Угу и соответственно потом когда модель уже обучила она нам прогнозирует что вот ну

этот токен Угу и соответственно потом когда модель уже обучила она нам прогнозирует что вот ну где-то здесь должна закончиться мысль и ставить токен автоматом так получается AOS А да да да ну то есть любая модель а неважно машинный перевод или уж раз мы закрыли про генерацию она генерирует по с по слову и если по токену по токену Если вдруг сгенерирует токен ИО всё она на этом сразу же закончит причём она тебе его отображать не будет как бы просто если выстроил токен EOS значит вот всё Конец

причём она тебе его отображать не будет как бы просто если выстроил токен EOS значит вот всё Конец Конец Нашего Нашего ответа понял спасибо Угу Так а что у нас здесь ну Да собственно говоря вот токен EOS про который мы говорили с Вами служебный токен который остановит остановит вот эту генерацию Да что всё не будет пропуска больше через декодер так А да Дава по поводу проблем нам на самом деле ВС Вот это Это подводящая история отсюда бы я в первую очередь хотел чтобы вы пока просто восприняли

Вот это Это подводящая история отсюда бы я в первую очередь хотел чтобы вы пока просто восприняли что есть такое понятие как иде и декодер да А второе что вы поняли да да на самом деле иде Дед а второе как бы это то к чему мы сейчас двигаемся с вами то к чему мы с вами двигаемся Как вы думаете даже если вот говорить в процессе перевода и в ЧМ здесь может быть проб самом из вас озвучивал говори Ну да я я топлю за всё тоже что он забывает первые слова и теряет контекст и падежи и всё такое

Ну да я я топлю за всё тоже что он забывает первые слова и теряет контекст и падежи и всё такое длительные последовательно Вот Раньше раньше на самом деле в переводчика там не знаю сколько летней давности но давно Если вы закидывает большой текст в перевод то возникали проблемы с тем чтобы долго держать контекст то есть потом со временем начинало тупить тупить тупить тупить это как раз таки примерно связано с этой логикой что контекстный Вектор он вообще говоря Ну как бы лимитированное

примерно связано с этой логикой что контекстный Вектор он вообще говоря Ну как бы лимитированное информации и это проблема это проблема И как-то эту проблему бы хотелось бы вообще говоря решать так контекстный Вектор слишком маленький для длинной последовательности он не может уместить в себе всю информацию сеть теряет контекст вследствие ограниченности у нас нашего контекстного вектора Как из этой истории можно выйти и соответственно появился как раз-таки Attention Attention Attention

из этой истории можно выйти и соответственно появился как раз-таки Attention Attention Attention Attention Attention Как много вы о нём будете слышать это вообще просто идея в целом а существует много это не конкретно как не знаю Или как конкретно Логистическая регрессия или как конкретно Да - это сам сама философия да о том что прямом смысле мы с помощью Анна можем управлять вниманием Да и обращать вниманием на те вещи которые нам с вами просто-напросто Ну и Неди основ идея кажы ко часть вход

вниманием на те вещи которые нам с вами просто-напросто Ну и Неди основ идея кажы ко часть вход релевантных данных а не всю последова проще модель обращает внимание Только на некоторые слова которые важны для перевода текущего слова но мы же с вами помним Да возвращаясь к этому рисунку ра декодера что вообще говоря вообще говоря у меня вот этин выходят после прохода каждого слова то есть после каждого слова есть некие и логично что вот этот он там хорошо понимает про это слово да помимо того

каждого слова есть некие и логично что вот этот он там хорошо понимает про это слово да помимо того что коне он знает про Вот это слово Нон хоро сфку бывшем слове и так далее так Почему нам сделать вот как бы контекстный Вектор сделать немножко по-другому то есть теперь контекстный Вектор который приходит для генерации слова для генерации слова у нас с вами будет в себе содержать информацию Каким образом это как раз-таки есть а принцип Анна что они разные но так или иначе он будет себе

Каким образом это как раз-таки есть а принцип Анна что они разные но так или иначе он будет себе содержать информацию с каждого слова с каждого слова и это как бы поможет нам по факту генерировать генерировать в данном случае перевод Да генерировать перевод идея достаточно проста конечно она увеличивает что память время работы да ресу ресурс потребления очень сильно растёт однозначно в очень больших количествах но так или иначе это нам может помочь не совсем так не совсем так контекстный Вектор

количествах но так или иначе это нам может помочь не совсем так не совсем так контекстный Вектор он как бы ВС равно один который на вход приходит Просто он формируется немножко по-другому он в себе по какому-то принципу агрегирующие под вот эту Вот первую историю первый ан заключается в чём Что мы с вами будем вот Называется он Content bas att появился в 2014 году что для нейросетей это в принципе как нам бы сейчас изучать период человека разумного Да что-то очень-очень давно потому что ну как

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

генерации каждого токена потому что у нас будет некая коя близость соно тел пояс сходство Уго между векторами Да Дада косинус на сходства это угол между векторами просто угол между векторами одна из метрик То есть когда хто вектора вра ние Они у меж собой е один из взглядов Это ко расстояние Нако Они похожи в этоже может быть ти угол маленький но один Вектор сильно длиннее ты прав на самом деле в случае если вектора все Мирова то как бы угол становится хороший так как бы Если действительно с

в случае если вектора все Мирова то как бы угол становится хороший так как бы Если действительно с точки зрения Лидо расстояния Бут просто в космосе то очень далеки как правило это решает просто процесс вопросом нормировки и косное сходство очень популярная Метрика вообще в тексте она в тексте она вообще очень очень популярна Метрика в тексте вот в принципе пока сильно грузиться Что здесь происходит не нужно есть просто некая как бы эволюция того как улучшали эти да оща эту формулу это всё одна

не нужно есть просто некая как бы эволюция того как улучшали эти да оща эту формулу это всё одна простая идея это как агрегировать информацию с того что здесь в то что приходит для следующей генерации то есть На что обращать внимание чтобы правильно всё это выдать и вот начиналось всё С простых вещей потом А вот соответственно адитивна видите Да взяли поняли что лучше там через гиперболический тангенс до умножени ещё кое-какую матрицу висов сейчас в принципе не надо по этому поводу грузиться

тангенс до умножени ещё кое-какую матрицу висов сейчас в принципе не надо по этому поводу грузиться Потому что это не так просто всё да просто надо понять что вот они разные существуют и вот там например Scale product Attention Да вот мы с ним столкнётся то ли завтра то ли послезавтра сейчас залагала я залагала немножко Вот с - это Это к чему отсылка на Верхнем графике с Это к чему - это состояние у каждого бло декодера а а это состояние у каждого блокаде сейчас то есть приводя на простой

у каждого бло декодера а а это состояние у каждого блокаде сейчас то есть приводя на простой русский язык это ну если переводить на простой русский язык самый простой это собственно говоря для генерации вот этого истории на что нам стоит обращать внимание в первую очередь то есть до этого до этого чтобы сгенерировать вот это предположим у нас приходил ту контекстный векто апер вот эти истории ну этот atten Score он считается постфактум когда генерация уже есть соответственно у тебя есть

ну этот atten Score он считается постфактум когда генерация уже есть соответственно у тебя есть какое-то представление твоё которое пришло со слова и мы можем посчитать attentions но говорю пока пока этот сильно сильно сильно не углубляется Вот именно это пока что нам так не нужно Ну тут скорее надо понять идею Анна самого что атен - это просто механизм внимания на какие-то факторы мы сегодня с вами напишем один ан и вот на нём как бы попробуем проинтерпретировать Уже именно в коде именно

с вами напишем один ан и вот на нём как бы попробуем проинтерпретировать Уже именно в коде именно входим пробуем проинтерпретировать Как там что происходит вот как видите здесь собственно говоря года Да есть Вот например чтобы вот был ан с 2 года анализа и решили ещё разделить на корень Казалось бы Всё достаточно тривиально но иной раз за такими мыслями происходит целые целая Эпоха исследований Эдо вот это Как вы думаете что за фамилия откуда Да это белору белору Богданов всё правильно применил

вот это Как вы думаете что за фамилия откуда Да это белору белору Богданов всё правильно применил приложил участие вобще Я так понял что очень большой бу в старте Ана и во многом вот эти вот идеи агрегации были связаны с ним по можно посмотреть как каждый из них агрегирующие Вот например Здесь у нас перевод с английского на французский получается идт да ну либо наоборот Ну с английского на французский Будем считать что здесь интересного смотрите как бы мы понимаем с вами что в разных языках в

Будем считать что здесь интересного смотрите как бы мы понимаем с вами что в разных языках в разных языках порядок слов он отличается правильно То есть если у нас с вами там не знаю это милая кошка на каком-то языке кошка может стоять на первом месте и поэтому довно переводить перево таго Фор лет назад которые просто вот статистически всё это делали работали существенно хуже как бы общих паттернов и закономерностей связи одного языка с другим они не видели Ну в данном случае смотрите что мы

и закономерностей связи одного языка с другим они не видели Ну в данном случае смотрите что мы видим чтобы вот артикль The Да и ль А вот они как бы в принципе друг друга и переводят являются аналогами и поэтому здесь ан Score самый большой Ну в принципе всё идёт достаточно просто да вот предлог предлог там артикль артикль опять всё одинаково идёт но вот ой-ой-ой секунду соответственно приходим к Вот давайте нано к вот этой части целиком её выделим к части вот вот это здесь пошло достаточно

к Вот давайте нано к вот этой части целиком её выделим к части вот вот это здесь пошло достаточно нестандартная история пошла достаточно нестандартная история что здесь можно заметить Вот например когда мы переводили Да мы обратили внимание не только точнее когда вот мы получали перевод артикля мы обращали внимание не только на з а ещё почему-то на А знаете почему там рот важен французском Да во французском важен род и соответственно как бы в данном случае у нас действительно есть такой

Да во французском важен род и соответственно как бы в данном случае у нас действительно есть такой механизм о Есть такой момент что нейросеть обращала внимание и на это слово когда гери вот этот токен да ну и тут тоже вот изза того что порядок немножко у нас с вами отличается становится понятно что вот зон у нас это Ари да бы из что порядок друго чу подруго Понятно ВС будет идти плюс-минус по такому пути плюс-минус по такому пути но есть некоторые вот это вот именно как бы следствие Анна Да мы

пути плюс-минус по такому пути но есть некоторые вот это вот именно как бы следствие Анна Да мы в прямом смысле Когда у нас уже есть результирующий перевод Да есть сила перевода мы можем посмотреть А на что обращала внимание Вот вчера никто не спросил этот вопрос а можно ли вообще как-то как-то знаете вот кайтов можно оты как-то посмотреть А на что обращала внимание на какие токены когда Решала когда Решала собственно отвечать классификация отзыва положительная да или негативная вот тут както В

Решала собственно отвечать классификация отзыва положительная да или негативная вот тут както В каком-то смысле ан позволяет механизм Анна позволяет именно это в том числе щупать то есть мы начинаем понимать а что было важно что было неважно помимо того что мы меняем архитектуру Ну это бы добавление этого куска архитектуры Смотри даже в другом порядке сказа мы добавили вот этот кусок архитектуры он у нас с вами обучился обучился мы стали генерировать помимо того что мы генерировать стали лучше

он у нас с вами обучился обучился мы стали генерировать помимо того что мы генерировать стали лучше потому что мы обращаем на всякие нюансы но мы ещё и постфактум с вами можем взглянуть А где На что мы больше всего обращали внимание понятно И вот как бы если говорить про графическую визуализацию вот здесь это как бы такая Тоже инфографика небольшая здесь форму преобразование Да как обращать на эти att а соответственно здесь вот лучше всего графически вот мы графически посмотрели задачи

на эти att а соответственно здесь вот лучше всего графически вот мы графически посмотрели задачи машинного перевода если бы даже это был бы GP перевод то точно также можно было бы взглянуть когда каждый новый токен рождается Когда вам нейросеть пишет Я поняла что вы хотите А сейчас напишу вам код то по факту можно В каком-то смысле попробовать взглянуть и посмотреть а важность каждого слова если есть блок анш там Конечно они есть есть разные взгляды на разные взгляды на механизм ан Сразу говорю

блок анш там Конечно они есть есть разные взгляды на разные взгляды на механизм ан Сразу говорю вам в атен надо понять что это внимание на что-то Вы Сегодня можете написать свой атен написать по нему статью и Завтра весь мир будет обсуждать Это что за дикий атен ворвался на рынок То есть атен появлятся постоянно все под разные призмы смотрят на это это собственно говоря мы Рандом минус в том что когда у нас ВС со всеми То есть когда мы вычисляем всё вот это когда мы вычисляем всё вот это

что когда у нас ВС со всеми То есть когда мы вычисляем всё вот это когда мы вычисляем всё вот это становится проблема сложность этой истории какая у нас с вами Вот вы на алгоритмы ходите Да вот у меня есть если это длина последовательности сложность вычисления сния в принципе ну такая сложность как бы не хочется ей сильно сильно заморачиваться соответственно вот есть идея например рандома тешена ну может повезёт как бы это много где в Грид сече или в атне можно включить тоже Рандом да то есть

ну может повезёт как бы это много где в Грид сече или в атне можно включить тоже Рандом да то есть не всё перебирать а какие-то Рандомные вариации вот есть там Window tension звучит вот он достаточно логично то есть вот это не очень Как по мне логично Вот это звучит логично и пому мы понимаем что плюс-минус в случае с машинным переводом в случае с машинным переводом как бы слова идут плюс-минус похожи посно Да есть некие как бы сказать некие перестановки Ну мы создаём небольшое окошко в данном

посно Да есть некие как бы сказать некие перестановки Ну мы создаём небольшое окошко в данном случае размером ну там два относительно центрального да или три итоговые как бы в рамках которого мы оцениваем и можем посмотреть важность сло есть там GL например который позволяет для начальных слов видеть ВС а потом в принципе видеть только буквально на одну единиц так себе Так себе ещ есть кото просто Арут в себе себе это всё И это лишь одни из тысячи ан Ну может не из тысячи Но это просто проведе

Арут в себе себе это всё И это лишь одни из тысячи ан Ну может не из тысячи Но это просто проведе Знаете что тут скорее надо понимать именно суть атен суть атен вопросы Мы сегодня напишем с вами свой Аше у нас будет свой механизм внимания мы по-своему будем наблюдать за некоторыми вещами которые у нас происходят в процессе обучения да са так то есть у нас для каждого слова слова строится условно гистограмма с вероятностями Ну не вероятностями а оценкой внимания на что стоит удить больше

гистограмма с вероятностями Ну не вероятностями а оценкой внимания на что стоит удить больше внимания дадада и получается это всё идёт из контекстного вектора Ну не зависит от того как н зада а или у нас просто все скрытые слои перемещаются в Да вот вот всё что вот здесь оно так или иначе использует вот эту идею то есть мы берём все скрытые слои и их используем Ну это под эту архитектуру просто надо будет понимать что мы как бы уже с завтрашнего дня от СТМ отходим от СТ отходим и там будет не

надо будет понимать что мы как бы уже с завтрашнего дня от СТМ отходим от СТ отходим и там будет не совсем тут я говорю лучше воспринять тот факт что мы можем постфактум посмотреть на генерацию чтов слу относительно наших входных данных мы их обрабатывать можем не только с помою с помощью ещ чего-то но механизм внимания нам по крайней мере позволит сделать некий фильтр вот у вас сегодня будет классификация Да там не знаю фильм вот в прямом смысле фильм мне очень понравился как я буду

будет классификация Да там не знаю фильм вот в прямом смысле фильм мне очень понравился как я буду обрабатывать через или через трансформер или ещё через чтоэто дело другое нож ве прано слово понравился должно быть триггером того что у меня отзыв положительный Ну или очень Хотя как бы конечно лучше понравилось поэтому не фокусируются именно что хотя в контекст сегодняшнего дня можно сфокусироваться что да Вот вот все эти истории мы забираем исходя так или и принимает ВС вот эту историю как-то

что да Вот вот все эти истории мы забираем исходя так или и принимает ВС вот эту историю как-то обрабатывает и сюда выт А как у нас ещ раз решается задача классификации текста с помощью анно тебя что-то выт и ты сюда будешь Неде прикручивать смотрите Какая сечас история есть в данном слу поня в это дело у нас здесь будет бло - это слой вот с точки зрения кода это будет дополнительный слой как как у нас с вами был или что-то ещё короче будет как-то Мы собственно как-то это ВС дело получим и

как у нас с вами был или что-то ещё короче будет как-то Мы собственно как-то это ВС дело получим и дальше дальше Вот что ты хочешь здесь сделать хочешь прикрути сюда блок классификации хочешь как бы в данном случае для генерации нуже длях за может быть чтото другое понял Так так так так что у нас с вами ещ есть вот даже есть визуальна но это такая задача текст Вообще текно даже там пытались внедрить в ЧМ его суть Ну как бы есть же нейронные сети в которым как бы скинешь картинку Катин в данном

в ЧМ его суть Ну как бы есть же нейронные сети в которым как бы скинешь картинку Катин в данном случае да что там вот у меня птица птица летит там над морем над водой или что-то такое Да вот а как это происходило бы то есть у нас точно также был бы некий блок энкодера который пытался бы извлечь информацию да то есть Вот какой-то энкодер пытался бы извлечь информацию из того что здесь происходит А в случае с изображениями это могли быть какие-то свёрточные слои которые делают фи мапы правильно

А в случае с изображениями это могли быть какие-то свёрточные слои которые делают фи мапы правильно любой Map так или иначе тоже можно оцифровать Ну он вообще говоря оцифрованный и будет блок декодера блок декодера который делает следующую историю блок декодера генерить текст тут задача существенно сложнее вам это просто чтобы показать погружаться в это не надо то есть на вход изображения на выход текст поэтому encoder Работал бы с изображением декодер с текстом Но в нашем случае смотрите как

текст поэтому encoder Работал бы с изображением декодер с текстом Но в нашем случае смотрите как всё это примерно работало это по-моему реальный эксперимент и тут логика в чём вот смотрите например когда мы пытаемся понять А на что обращал внимание на что обращала внимание нейросеть когда генерировать слово р и типа как бы видите Когда вы здесь видите что-то тоже же как бы мы с вами куда-то взгляд направляем да видим все птицу с вами что она летит видим море Ну или водоём какой-то Ну да не море

направляем да видим все птицу с вами что она летит видим море Ну или водоём какой-то Ну да не море скорее конечно какой-то водоём воду короче видим и соответственно это всё достигается путём Нашего Нашего зрения тут тоже типа есть компьютерное зрение Исходя из этого генерируется последовательность и вот даже с помощью механизма тенна можно попытаться понять как каждое слово наме слово на что обращала внимание моде тут опять же говорю это очень сложная задача Тут ничего не надо понимать то есть

внимание моде тут опять же говорю это очень сложная задача Тут ничего не надо понимать то есть не грузите свёрточные слои фип Как происходит нде декодера Просто сам факт что если атен вдн в эту нейронную сеть как слой то можно попытаться можно попытаться вот такие плюшки поделать но вомз есть же как бы это не сложно воссоздать Когда вам показываешь изображение и куда у вас взгляд нацелен когда вы пытаетесь рассказать про это изображение Ну как бы ничего общего не получилось Мы с вами люди

вы пытаетесь рассказать про это изображение Ну как бы ничего общего не получилось Мы с вами люди вообще иначе работаем в этом плане можем в пустоту смотреть всё равно понимаем что там изображено примерно так а задача классификации постоя ещ раз Давайте теперь чтобы нить Мы не теряли с вами С чего мы всего с чего мы с вами всё начали мы с вами начали во-первых Вчера мы с вами разбирали задачи классификации Да и по факту по факту ой зада мто смен задача всегда вычленить информацию и что-то с ней

Да и по факту по факту ой зада мто смен задача всегда вычленить информацию и что-то с ней делать далее соответственно как бы в случае с генерацией Понятно декодер А если бы у нас была не классификация не классификация не генерация а классификация мы бы сюда с вами писали бы вот этот Nal и сюда бы там вставили бы Nine Да например д слоги ещ один да всё и соответственно куда-то бы это всё дело дальше пошло то есть encoder плюс сразу же блок классификацию для других задач блок декодера то есть мы

пошло то есть encoder плюс сразу же блок классификацию для других задач блок декодера то есть мы сами манипулирую выходами и сами творцы того как мы эту информацию хотим использовать так вот дальше Мы что с вами начали рассуждать во-первых Мы немножко поговорили с вами Как устроена генерация чего-либо чтобы понять принцип работы декодера принцип работы декодера посмотрели это на примере машинного перевода Да что вот собственно говоря у нас есть мы предсказываем мы решаем задачу классовой

перевода Да что вот собственно говоря у нас есть мы предсказываем мы решаем задачу классовой классификации каждый слов это кстати похоже на временной ряд вот генерация последователь очень похожа на временной ряд Помните у на вами был временной ряд Мы же тоже с вами Гене от и до То есть когда я генерирующую точку например вот э СРО я так ината этой то по одной по одной мы с вами что-то можем сгенерировать вот последовательность тоже самое каждое слово из словаря выбирается словари огромные тем

вот последовательность тоже самое каждое слово из словаря выбирается словари огромные тем более представляете какого масштаба словари у мультиязычный моделей а Более того я вам скажу модели гораздо а часть слова чтобы сохранять окончание и прочие вещи то есть там ещ более глубокий морфологический анализ всего это словари огромнейшее но тем не менее каждую секунду принимает решение Какое слово вам отдать следующее чтобы это имело смысл вот далее соответственно на этой истории мы с вами поняли

отдать следующее чтобы это имело смысл вот далее соответственно на этой истории мы с вами поняли что контекстный Вектор может быть Ну так себе А давайте мы с ми давайте мы с ми попробуем както это дело из всё это дело извлекать и отправлять этот контекстный Вектор конкретно сюда и вот это всё мы с вами назовём механизм внимания то есть мы сами управляем на что смотреть На что не смотреть вот что здесь толубай внутри напишет какую архитектуру это дело его эти Анны их может быть очень много а

здесь толубай внутри напишет какую архитектуру это дело его эти Анны их может быть очень много а дальше мы ещё можем посчитать att Score в обратную сторону обратить внимание А вообще что было важно для появления там какого-то определённого токена В прямом смысле как слой встал После ра Вот и здесь Мы это разбирали с вами вот как бы как следствие Можно попробовать вычислить посмотреть всё это дело далее Вот это графическая какая-то визуализация Да это машинного перевода задача но тем не менее

далее Вот это графическая какая-то визуализация Да это машинного перевода задача но тем не менее здесь есть иде и смотреть можем локально А и более того даже посмотрели задачу где ни вот это и то и то на самом деле задача sec to sec sequence to sequence и последовательность на входе последовательность на выходе но по факту у нас с вами была задача выше тексту текст текст текст а сейчас у нас стала IM to Tex задача и так или иначе даже всё равно механизм внимани можно покрыть вот Теперь смотрите

IM to Tex задача и так или иначе даже всё равно механизм внимани можно покрыть вот Теперь смотрите зада классификации задаче перевода есть скрытые состояние декодера задача классификации такой последовательности состояний нет да то есть у нас там скрытое состояние декодера же были выше задаче генерации Вот они вот эти вот скрытые состояния то здесь к сожалению можно применить что у нас с вами есть вспоминаем во-первых так как у меня задача классификации так как у меня задача классификации то В

вспоминаем во-первых так как у меня задача классификации так как у меня задача классификации то В каком-то смысле у меня только энкодер Да роли энкодера выступает в данном случае рекуррентная нейронная сеть НН и всё что мы из неё можем забрать - это H1 H2 H3 то есть вот это как бы Вектор контекста итоговый Вектор он Аля подводит весь итог по информации которая есть и у нас ещё есть промежуточная История это как бы по-хорошему какая-то наша зацепка и может быть можно как-то попробовать обратить

История это как бы по-хорошему какая-то наша зацепка и может быть можно как-то попробовать обратить их внимание друг на друга чтобы как бы итоговый результат Да итоговый результат который мы с вами Дальше например прикрути сюда там не знаю NN то line Там и так далее Короче все полно связаные конструкции чтобы он как-то обращал внимание на вот эти вот истории мы как бы вот обращал внимание да В прямом смысле попробовать как-то это агрегировать для этого нужно собрать какой-то математический блок

смысле попробовать как-то это агрегировать для этого нужно собрать какой-то математический блок этих идей может быть очень много но мы с вами посмотрим такой вариант который называется concat Attention concat Attention Здесь начинается веселье математические попытки как-то всё это интересно агрегировать Так а меня вообще хорошо слышно нормально хорошо хорошо просто у меня пишут что интернет неустойчивый поэтому спрашивал Итак ещё раз вот это у нас приходит напоминаю у нас ней РОНО которая как

поэтому спрашивал Итак ещё раз вот это у нас приходит напоминаю у нас ней РОНО которая как бы Солнце светит ярко ей приехало Давайте чуть-чуть опять поиграем с размерностей по порядку сейчас я поспрашиваю чтобы у нас все все были в процессе Серёжа чернишов Давай с тобой какой Как ты думаешь размерность имеет вот эта история И что это такое говорим Ну это я так понимаю входящие данные то есть длина предложения А так хорошо вот это предположим я согласен давай длина предложения Солнце светит ярко

предложения А так хорошо вот это предположим я согласен давай длина предложения Солнце светит ярко sequence L 3 Да солнце светит ярко А вот это что за размерность у нас ну это вектор вектор чего-то меня с размерность не очень Ну на самом деле сущности не так многого Вот они вчерашни Ну хорошо я понял Так давайте помогаем Люба так А покажи я просто где Нужно сориентироваться Нельзя выпадать Нельзя вот sequence L Да sequence L это да длина предложения там мы либо нулями добиваем Либо обрезаем так

вот sequence L Да sequence L это да длина предложения там мы либо нулями добиваем Либо обрезаем так вот эта размерность Чему равна Мы же матрицу куда отправляем м у вас на самом деле на Ну ладно пока бе это этот э а этот сейчас эмбеддинг по-моему да Давай тогда обратимся к этому рисунку вот эта штука она это не на вход это наоборот выход с нейронной сети значит вот это вот у нас что вот они три слова Солнце светит ярко Нам нужен точно это то есть размер скрытого слоя скрытого состояния всем это

Солнце светит ярко Нам нужен точно это то есть размер скрытого слоя скрытого состояния всем это понятно Вот что это за что это за сущность выла у нанят спрашивайте не стесняетесь это контекстный Вектор который са агрегированные что ещ это контекстный Вектор который сегрегированный Вектор вот он мы пока ничего не сегрегированный НН то есть вот если н то Ну или Ну давайте да rnn ладно вот rnn слой что мне возвращает Вчера вы запускали Ну вот а вот собственно контекстный вектор и все промежуточные

мне возвращает Вчера вы запускали Ну вот а вот собственно контекстный вектор и все промежуточные вектора списком Абсолютно верно то есть он возвращает две вещи это вот этот и есть outputs outputs все промежуточные hidden сй их размерность будет hidden State умножить на SE L то есть натри и ещё возвращает вот этот последний H3 отдель его возвращает что сегодня мы с вами ием Как как контекстный хорошо разобрались соответственно секунду вот эта вся веь вот эта вся веь Это и будет наш с вами а это

разобрались соответственно секунду вот эта вся веь вот эта вся веь Это и будет наш с вами а это будет слой В прямом смысле слой чтото на вход чтото находется Да просто то ли я залагала то ли короче H3 - Это что по существу H3 Ещё раз сюда Обращаемся Смотри вот это вот по этому рисунку вот H3 что это такое давай Ты нам ответишь Спасибо за ответ Ну я говорю что-то может быть по Сравни со вчерашним днём я как-то Ну вот этот рисунок тебе понять вот этот рисунок а можно я попробую короче на этом

днём я как-то Ну вот этот рисунок тебе понять вот этот рисунок а можно я попробую короче на этом слайде мы какую задачу решаем то что вчера или не вчера либо я залагала либо что-то связ так я понял смотрите вот это вот это это НН по факту согласитесь то есть это вообще если говорить в коде это ННН правильно вот вчера вчера Что делала вчера с этим ты просто прип к нему к его выходу полносвязный слой и всё правильно Угу А мы сейчас хотим кое-чем обогатить архитектуру и мы хотим ещё кое-что

слой и всё правильно Угу А мы сейчас хотим кое-чем обогатить архитектуру и мы хотим ещё кое-что прикрутить что будет как-то пытаться обращать внимание на вот эти вещи то есть вот вот это твой выход последний H3 это последний выход с твоей нейронной сети Вот давай вчерашний день ещё раз посмотрим вот они теб выходили Дели два варианта в классифицировали либо брали последний State сюда крепили и классифицировали Понятно Угу как бы sell State на него меньше обращает внимания его тоже можно как бы

Понятно Угу как бы sell State на него меньше обращает внимания его тоже можно как бы извлекать его возвращает но мы больше нанте сфокусирован Вот соответственно я и как-то мы хотим понять А вот в этом хиден йте вообще говоря этот который итоговый как бы результат модели А на что он вообще обращал внимание на вот эти вот вещи на каждой конкретно по отдельности и мы вот именно вот это сейчас попробуем как-то состыковать понима у вот Солнце светит ярко у тебя это классифицирует как что-то

попробуем как-то состыковать понима у вот Солнце светит ярко у тебя это классифицирует как что-то положительное и хорошее ты это сделал за счёт вот этого хиден стейта А что вот было триггером солнце солнце ассоциируется с чем-то хорошим или свет или ярко поняла ну сейчас мы ушли от задачи де кодировки вообще ушли от неё потому что мы ушли от слово какое сказал где от от задачи Какое ушли я просто слово не расслышала от задачи генерации Ага То есть мы сейчас вернулись к задаче классификации Угу

слово не расслышала от задачи генерации Ага То есть мы сейчас вернулись к задаче классификации Угу Так ну что ж собственно говоря ещё раз тогда возвращаемся что нам Насть подытожить что H3 у нас здесь показывает в данном случае Люба хотела помочь лю Давай во-первых я хотела спросить Я просто вчера чётенько себе записала что из н мы получаем вот этот блок классификации и State А сейчас ты говоришь Ну в принципе ещё можно там чего-то получить эти Я ничего не говорю я говорю что вот State и вот

Ну в принципе ещё можно там чего-то получить эти Я ничего не говорю я говорю что вот State и вот ваши Я говорю что можно попробовать понять как вот этот Вектор арет себе информацию по кускам отдельно с каждого й Так теперь на твой вопрос значит если то что из мки выходит у нас Ну вот то что мы используем H3 Да это hidden State котек Угу Хорошо последний Да Последний итоговый контекстный Вектор Всё ну всё в принципе у меня был в этом вопрос тогда у нас здесь с вами Какая размерность очень актив

ну всё в принципе у меня был в этом вопрос тогда у нас здесь с вами Какая размерность очень актив здесь у нано будет простоте размерность А здесь у на вот так вот я не знаю в каком порядке Но наверно вот так а нет учитывая что повязаны с тако ит заходить умножаться на вот эту квадратную матрицу которая здесь есть так поехали ВС начинаем смотреть Что здесь происходит Какая интуиция За всеми этими преобразованиями стоит Можно конечно попробовать её переварить Давайте пойдём по порядку вопервых

преобразованиями стоит Можно конечно попробовать её переварить Давайте пойдём по порядку вопервых полносвязный слой мы прошли через ВНО связаный слой пропустить через полносвязный слой наши данные это всегда равно тому что как бы это же тренирует было через информацию точнее через себя пропускает информацию которая была на входе и какое-то делает переосмысление Итак поехали по размерностей hidden size что идёт сюда на вход по поводу этой операции мы поговорим дальше я хочу понять размерности ну

size что идёт сюда на вход по поводу этой операции мы поговорим дальше я хочу понять размерности ну или вот вот эта вот стрелочка у нас Давайте кто нам поможет нам в этом поможет Саша Голованов у нас будет можно попробовать как-то порассуждать по интерпретировать что это из себя может представлять В каком-то смысле переосмысление неровно сети у каждого слова правильно и агрегация информации Потри [музыка] слова по это mation по-моему в чём её суть смотрите вот мы с вами знаем как умножать

Потри [музыка] слова по это mation по-моему в чём её суть смотрите вот мы с вами знаем как умножать матриц В каком случае можно умножать матриц ну ну например Матрица типа 2 на 5 мы можем умножить если там пятёрка будет в начале да то есть мы можем умножать на матри и вот Тари умножать правильно итоговая размерность у нас с вами Какая здесь будет МП м нап да Михаил на Павла правильно Вот а если иногда бывает такая история что у меня идёт два боча два боча и как бы бочи из матриц То есть у нас с

бывает такая история что у меня идёт два боча два боча и как бы бочи из матриц То есть у нас с вами на самом деле на самом деле здесь если я поведу не одну последовательность не один элемент а Целый бач то у ме размерность ба матри да В итоге у меня на самом деле Вот здесь будет не просто вот так а у меня будет бач на sequence L если я не один элемент А я не один я Бача буду закидывать умножить на hidden size вот так вот и тут тут вот этот у меня hidden ST во-первых когда я сделал UN 2 Что

на hidden size вот так вот и тут тут вот этот у меня hidden ST во-первых когда я сделал UN 2 Что произойдёт Как вы думаете что делает UN две размерности давае или он делает немножко другое он на второй индекс поставит какой-то новый новый нулевой разме Тут знаете почему два потому что я говорю я вам на одном элементе показывал но по-хорошему здесь как бы ещё здесь бач и здесь бач то есть на самом деле вот Это изначально было у на с вами ба ба умножить на hidden size и когда мы 2 делаем мы

самом деле вот Это изначально было у на с вами ба ба умножить на hidden size и когда мы 2 делаем мы просто добавляем сюда размерность понятно И вот точ бмм он берёт два Бача и поэлементно делает матричное умножение то есть итоговая размерность А я напоминаю я именно сюда приходят вот эти две части то есть вот она первая Вот она Вторая как бы по-хорошему Ладно я вот пр так полностью это дело вот здесь тоже потом когда вы пересматривать а будем тащить целый ба поэтому у меня будет Ба и здесь

здесь тоже потом когда вы пересматривать а будем тащить целый ба поэтому у меня будет Ба и здесь после того как я размерность добавил в конце у меня будет Умно матри умножить на друга Да вот и соответственно так и произд просто Бачи поэлементно множатся и в итоге здесь будет размерность как бы бач дальше какая у нас размерность будет Давайте нам поможет в этом Сержа Кудинов на один не теряем всё соответственно вот это как бы матричное умножение прошло сюда после того как мы делаем с 2 Как вы

соответственно вот это как бы матричное умножение прошло сюда после того как мы делаем с 2 Как вы думаете что будет О вот это просто удалилось да то есть Давайте вот здесь у нас с вами вот на вот этой итерации у нас будет так будет ба не с этой стороны укажу будет дот на о после с мы с вами удалили остатся просто бач на дальше мы применяем Соф минус первой к последней размерности к вот этой Что произойдёт у нас с вами вероятность Да в каком-то смысле вероятность или это мож слова sequence L -1

у нас с вами вероятность Да в каком-то смысле вероятность или это мож слова sequence L -1 и я получаю вкад вклад каждого слова Вот далее ну я тут сильно не буду углубляться по размерностей чтобы сильно времени не терять больше на самом деле в коде лучше посмотрим распо только дано помните что м делает transp перево Ну транспонировать ну да это в случае транспонировать это так привычно воспринимать в случае с 2D матрицей типа строки столпцы поменять у меня вообще 3D объект идёт 1 значит что вот

в случае с 2D матрицей типа строки столпцы поменять у меня вообще 3D объект идёт 1 значит что вот эти две размерности надо поменять местами мы Их поменяли с вами Итого итого итого что у меня остаётся софт Мак у меня ну как после софт Макса здесь например будет та же самая размерность ба на sequence L можно посмотреть что сюда Ладно после того как развернул size Умно на hidden size ум SE L опять можно вот это с Вот вот эти по-хорошему Да надому зде это не указано вобще Да должно быть чтобы вот

можно вот это с Вот вот эти по-хорошему Да надому зде это не указано вобще Да должно быть чтобы вот так вот стало и ещ раз чере [музыка] потом не помню просто это Почему у нас пропала единица после софт Макса если мы считаем софт Мак По dimensional ми1 По последней просто вот сейчас скзи 2 добавилось единица softmax ничего не скзи скзи наоборот это убрать а скзи убрать Да да я говорю я сам не понял то есть мы как бы вот так идём а ВТО bmm по-хорошему надо подать ещё добавить эту размерность Ну

то есть мы как бы вот так идём а ВТО bmm по-хорошему надо подать ещё добавить эту размерность Ну сейчас е кодовую часть с вами прогоним примерно ну короче давайте тогда вот пока что дойдём по порядку Да здесь соответственно и идт опять Стартовая история потом полносвязный слой танн ин причём выходят две вещи смотрите против после софт Мак то что я вам говорил софт ма нам выдаст вероятность или грубо говоря насколько модель обращала внимание наж из слов и ещ att это как бы было состояние а будет

говоря насколько модель обращала внимание наж из слов и ещ att это как бы было состояние а будет которое пойдёт дальше следующие блоки вот как-то так вопрос У кого-то был показалось мысли были я думал что возможно стрелочка просто лишняя которая из Соф выходит тогда например одинаково разме здесь кто с м да тогда здесь не с кем Ну сейчас код чуть-чуть варим тут всё как бы смотрите матричное умножение там когда вы будете собирать вам сегодня нужно будет там собрать свой атен самое лучшее его

там когда вы будете собирать вам сегодня нужно будет там собрать свой атен самое лучшее его собирать по частям это всегда самое лучшее собирать по У вас есть фва собрали одну итерацию тестовый бач прогнали залетел Окей и соответственно его так Деми за всем этим Какая интуиция Стоять может за всем давайте наверное здесь нарисую ещё раз вот у нас такая история была с ми Вот это мы можем с вами воспринять как ну наш слой там Ирей слой с Ну наверно можно назвать Как вы думаете как мы его назм по

как ну наш слой там Ирей слой с Ну наверно можно назвать Как вы думаете как мы его назм по что это именно нам даст с вами две ключевые сущности первая сущность - это веса Вот они Как думаешь для чего нам нужно будет Ну для того чтобы вот это слова ранжировать по важности для Ну контекст каких слов важен для смысла для смысловой нагрузки текущего слова Да И у нас ещё с вами будет Attention hiden att hiden который дальше мы с вами отправим в блок классификации какой-то да то есть скажу то есть у

hiden который дальше мы с вами отправим в блок классификации какой-то да то есть скажу то есть у нас здесь будет с вами linear line Ну и всё соответственно здесь там класс либо нулевой либо первый Итого Обратите внимание Вчера мы с вами делали без этого блока вот этого всего то что сверху не было Вот это важная мысль поймите её сейчас то есть вот этого не было и мы с Вами просто сюда напрямую подавали у нас был hidden State Да сейчас мы пытаемся делать Attention hidden То есть как бы мы вот это

у нас был hidden State Да сейчас мы пытаемся делать Attention hidden То есть как бы мы вот это берём и отправляем сюда причём там размерность будет та же самая то есть после всех этих манипуляций на выходе будет иметь тот же самый размер и и что ещё прикольная плюшка пришло Солнце светит ярко помимо того что вы получили что это по Вы ещё Посмотрите который вернёт например солнце 02 светит 0 07 при гарантировано сумма весов будет стопроцентная какая-то попытка воспринять А вообще что модели

при гарантировано сумма весов будет стопроцентная какая-то попытка воспринять А вообще что модели больше всего как бы понравилось что ли Да что она считает таким важным источником того что класс стал вдруг позитивным вот да Давай луй вопрос вопрос Если типа предложение будет большим или там что-то такое то что оно будет забывать то Вот это уже механика пот да Или придётся несколько блоков таких делать тебя тут вот это сколько у тебя тут твой сколько угодно делай Почему не подойдёт подойдёт Это

тебя тут вот это сколько у тебя тут твой сколько угодно делай Почему не подойдёт подойдёт Это ты говоришь в другом смысле это если там для де кодировщика Там могут быть проблемы там другой будет в нашем случае пра в том плане такая Конте 100 слов понятно что он больше в себе содержит информацию о последнем поэтому как бы заметить нормально всё не получится и логика твоя Логика есть что слова которые были ближе к концу они как будто будут иметь большую важность и он что-то будет забывать Ну это

были ближе к концу они как будто будут иметь большую важность и он что-то будет забывать Ну это надо уже эмпирически щупать эмпирически щупать А таких вообще несколько блоков можно ставить Да конечно можно 20 их поставить О'кей Ну вообще-то на самом деле хорошую идею проговорил по поводу того что как бы отдельный есть такой мульти Self Attention который как бы несколько голов так и называют которые как бы каждый отвечает за свою историю как бы каждый пытается уловить свои паттерны и это вот

как бы каждый отвечает за свою историю как бы каждый пытается уловить свои паттерны и это вот примерно может решать проблему которую ты озвучиваешь А теннов может быть много Саша ээ Да вот к вопросу По вчерашней задаче то что там Серёжа обнаружил в стоп словах нот Вот и если у нас это же и останется в стоп словах Мы же не сможем типа это слово вписать как ан и у нас всё равно будет такая же плохая классификация на don't like условно Почему если у тебя Don't есть и он часто видит в разметке что

классификация на don't like условно Почему если у тебя Don't есть и он часто видит в разметке что это отрицательно он будет считать что до - это слово которое плохо влияет Угу Так что должно повлиять нормально Ну там надо смотреть А если Don't там раздражает Don негатив то есть ничего плохого за всё хороше Ну как бы а мы как с вами это отличаемся то же самое там воссоздать если у вас будет много данных и он будет это много раз видеть но модель начнёт отличать То есть если конечно как бы одно

данных и он будет это много раз видеть но модель начнёт отличать То есть если конечно как бы одно предложение у неё есть там не знаю не понравился и Ну опять же в английском двойного отрицания нет то есть мне не понравился А что тогда мы скажем не понравилось это плохо а не как сказать с помощью не и чтобы это было круто что я что-то не могу сообразить раздражает плохой Если как бы по одному разу Она встретила нейронную сеть конечно она вам не будет понимать суть происходящего Но если она not B

Она встретила нейронную сеть конечно она вам не будет понимать суть происходящего Но если она not B увидит тысячи раз то как бы проблема будет решаться это уже видите вопрос вопрос к дам нек архитектуре понимаете да Что я имею в виду Так ну что ж вот att мы с вами обсудили Давайте немножко по поводу хода пройдёмся всё вот это страшное зрелище на самом деле вде более отде свой слой напишем дальше мым то есть вот если бы это у вас было написано Вы вчера просто бы вставили одну строчку кода и у

мым то есть вот если бы это у вас было написано Вы вчера просто бы вставили одну строчку кода и у вас бы всё заработало то есть отдельный слой что у нас здесь с вами что во-первых нам на вход нужно ну здесь там инициализация Какие параметры нам надо ти знать по поводу слоёв по поводу слоёв первый так это атрибут чтобы зна вот первы сло повязаны сло это вот этот слой у нас верно Вот у нас это вот этот слой Ну гиперболический тангенс и всё нужно его будет применить поехали самое главное Форвард

этот слой Ну гиперболический тангенс и всё нужно его будет применить поехали самое главное Форвард вот когда вы будете собирать свои форварды это в целом хорошая практика А вы сегодня и будете собирать собирайте помста с мим вот этого этого первая моя задача выполнить вот эту операцию Вот эту Ой что интересные рисунки Вот в общем здесь надо выполнить вот эту операцию матричное умножение да то есть Нам нужно прогнать входные данные через вот этот линер во-первых вот это у меня строчка Вот она

Нам нужно прогнать входные данные через вот этот линер во-первых вот это у меня строчка Вот она lstm outputs То есть то что мы с вами забираем из lstm outputs мы заберём с вами две сущности Да кстати как мы их с вами а нет lstm outputs вот у нас lstm outputs вот он у нас а вот Final hidden вот у нас Final hidden то есть по отдельности Их забрали вот размерность ровно те которые мы с вами проговорили здесь Si SE hidden size здесь просто size на hidden size всё соответственно LM апу загоняем и

здесь Si SE hidden size здесь просто size на hidden size всё соответственно LM апу загоняем и вот вы на этом Можете уже просто создать экземпляр класса И прогнать тестовый ба нужных размеров Если всё взлетело заработал значит слой работает корректно И вот так по кусочкам по кусочкам собираем Да кусочкам собираем Поехали дальше то есть теперь смотрим что нам нужно вот вот сюда падаем вот здесь это операция точ bmm что нам для неё нужно во-первых нам нужны вот эти Attention weights Да вот они

это операция точ bmm что нам для неё нужно во-первых нам нужны вот эти Attention weights Да вот они которые отсюда пришли это уже подготовка весов у нас идёт дальше мы смотрим насколько они мчатся у нас с финальным hidden с hidden этим hidden через там бла-бла-бла вот она операция BM Всё мы уже с вами находимся здесь здесь Attention weights вот он Soft Ma точка сзи Вот я понял почему кость что здесь сквизи нету пото что вот у па здесь он не сохраняет результат скзи 2 он применил размерность

здесь сквизи нету пото что вот у па здесь он не сохраняет результат скзи 2 он применил размерность оставил Ту же самую понятно это как бы вот если сопоставить сохранения нету вот этого в перемен не сохранил он только вот сделал скзи конкретно для операции Soft а размерность на самом деле та же самае осталось То есть вот с 2 1 мину о только надо Ну видимо 1 тоже совпадёт да потому что она как раз таки находится посерединке то что нужно вот в итоге всё поде сде это делать дальше Вот контекст да

таки находится посерединке то что нужно вот в итоге всё поде сде это делать дальше Вот контекст да какой-то контекстный типа идт преобразование В общем вот здесь сделали через прогнали Короче все необходимые вещи сделали дальше там Да вки конкретизация идёт просто законка прогнали через последний полносвязный слой тангенс все этоко помни выхо Давайте ещ раз подытожим давайте с кости ко вот две сущности как бы как как их можно было бы примерно воспринять Вот именно конкретно в нашем случае так

как бы как как их можно было бы примерно воспринять Вот именно конкретно в нашем случае так Ещё разочек выходит откуда именно вот после блока Анна у нас выйдет А после блока ан Мы у нас выходит определение вероятности какой контекст использовать А собственно вернёт наши после полно связанного слоя вернёт принадлежность к классу Ну это вот как вот этот последний н вчера использовали то вот как бы в принципе он того же самого размера будет дест даль классификаци только вот эти вероятно нев нуж

в принципе он того же самого размера будет дест даль классификаци только вот эти вероятно нев нуж использовать есть на что что повлияло больше всего на я почему-то пытаюсь уйти в предсказываю что мы в классификации да Ну на самом даже классификации что мы предсказываем какой класс как бы а это тако побочка небольшая Логистическая регрессия помимо того что мы с вами можем предсказание получи по этим весам могу посмотреть что есть важно что нет да то есть это предсказание Да нет - это информация

весам могу посмотреть что есть важно что нет да то есть это предсказание Да нет - это информация которая идёт дальше для в блок классификации предсказание пойдут дальше то есть у нас att это просто Вектор вот а это та гистограмма Нури Матрица с тёмными и светлыми Ну в нашем случае это будет не Матрица потому что у нас другой ан В нашем Ну вообще ты прав Да вообще ты прав Это всё зависит от Анна наш это будет просто Вектор из весов слов всё это вот как вчера мы забирали либо всё либо вот один

наш это будет просто Вектор из весов слов всё это вот как вчера мы забирали либо всё либо вот один последний Ну att будет Кстати как вы думаете какой будет размерность Давай Саша к те вопрос так на ну на SE Не он по факту будет просто SE Ну ба SE на самом деле типа вот я говорю ты эту картинку ассоциируешь с тем что так все атен работают это вообще задача генерации немножко другая Это от Анна к Анну зависит мы сейчас написали свой att у нас своя логика того как мы будем смотреть важность это

Анну зависит мы сейчас написали свой att у нас своя логика того как мы будем смотреть важность это att и он просто показывает веса каждого слова всё Угу веса каждого слова для классификации веса каждого слова типа в сторону плох да Ну например я тебе подам вот фильм в целом пойдёт вопервых Я не знаю как это классифицировать но наверное как позитивный отзыв всё-таки и вот на что типа вот как бы вот себе скажет что вот этот слово имело вес 02 предположим Вот это 01 Ну понятно что стоп слово оно

себе скажет что вот этот слово имело вес 02 предположим Вот это 01 Ну понятно что стоп слово оно удалится но в целом как бы 02 0 там здесь 04 предположим но ладно 0 А здесь оставшиеся 06 вот так вот вот это вот Угу дадада причём постфактум да то есть мы Дим позитивно и пытаемся объяснить А на что модель обращала внимание когда говорил что это отзыв позитивный вот такая вот история дальше соответственно даже в свто архитектуре даже в сверточной архитектуре я сейчас глубоко здесь не буду

соответственно даже в свто архитектуре даже в сверточной архитектуре я сейчас глубоко здесь не буду останавливаться Но идея она вообще говоря возмож то есть у нас здесь какие-то операции свёртки идут да три отдельные свёртки и мы две свёртки между собой чем В каком-то смысле делаем само внимание получаем и Чим с третьим выходом очень похоже на то что происходит здесь влито зде и потом отдали сюда Ну опять же говорю это вам больше не будете сейчас конкретно это делать больше так просто понимать

Ну опять же говорю это вам больше не будете сейчас конкретно это делать больше так просто понимать что ан - это просто сама идеология и она может фигурировать относительно любой там любого вида данных и любой математической операции и связано бы с другими задачами совершенно так итоги задача перевода или это задача генерации постоя токенов ровно как gpt такой подход называется авто агресси Да я вот это не сказал вам Ну как бы в принципе не сильно важная информация Наверное это называется

Да я вот это не сказал вам Ну как бы в принципе не сильно важная информация Наверное это называется авторегрессия как вы кстати с авторегрессия сталкивались Кто помнит как расшифровывается арима Ну авторегрессии действительно авторегрессионная подход когда каждый следующий токен Да в нашем случае Каждое следующее значение временного риата там в том случае точнее зависит от того что было на прошлом то есть как бы вот мы авторегрессия так э так как каждый следующий токен зависит от того что было

то есть как бы вот мы авторегрессия так э так как каждый следующий токен зависит от того что было сгенерировано раньше ан позволяет сети сфокусироваться на нужных элементах исходного текста да то есть помимо ребят Не забывайте помимо того что мы как бы получили плюшку в виде Attention weights Мы создали дополнительный слой который модель может обучать понимаете раз она может обучать то как бы мы ей дали навык обращать внимание на некоторые вещи она раньше не могла делать механизм такого слегка

ей дали навык обращать внимание на некоторые вещи она раньше не могла делать механизм такого слегка само внимания Ну вот как бы вот то что мы с вами вчера запускали Вот вот эта архитектура не позволяло делать в полной мере механизм само внимания понимаете о ЧМ я говорю то есть вот само ограничение архитектуры А тут мы добавили полноценный как бы станем чуточку умнее чуточку лучше предсказывать как-то так вот да позволяет сети сфокусироваться нужных элементах исходного текста одного а не

как-то так вот да позволяет сети сфокусироваться нужных элементах исходного текста одного а не существует это набор архитектур который нужно применять и анализировать результат видите это просто как бы понятие такое - это обычная обучаемая сть слой добавили точно так же обучается всё в принципе плюс-минус точно так же работает Вот какие вопросики остались Антон если можешь ответь на мой вопрос в чате получался так ли Ну как бы хорошо хорошо Ну лучше написать лучше написать Ну сейчас Давай после

получался так ли Ну как бы хорошо хорошо Ну лучше написать лучше написать Ну сейчас Давай после кода мы е с тобой обсудим это вопрос чтоб более предмет ты поняла что я имею наверно да не знаю ровно так как написано здесь сзи вот у нас и вот ещ это вот есть у меня Вектор 1 2 3 4 5 вот какую он размерность имеет Как вы думаете о нап Ну на самом деле так устроен компьютер что он это считает размерностью пять А вот мне может быть и как бы Что является здесь элементом этого набора Ну вот единичка

пять А вот мне может быть и как бы Что является здесь элементом этого набора Ну вот единичка двойка тройка правильно А если я хочу чтобы вот вот у меня вот целиком Вот это элемент выборки воспринимался например тогда если я сделаю такую историю как при меню к этой истории не помню как пишется [музыка] сзи вообще вот вам вот так отобрази отображает и нам пай вот так отображает эту размерность п запята просто пятёрка ан скзи - это ан скзи один скажет что у вас будет размерность 5 на оди и у вас

просто пятёрка ан скзи - это ан скзи один скажет что у вас будет размерность 5 на оди и у вас станет вот так вот станет получается Ну да вот так вот у вас станет 1 2 три по-моему так на вторую размерность он ставит четыре точно так он как будто просто скобки добавит Ну пне он же не скобки о добавит если бы скобки он добавит Если бы я сказал а скузи ноль а не Погоди пять на Да да да если бы я сказал ан скзи ноль тогда бы я получил размерность 1 на5 А 1 на5 - это у меня вот такая размерность была

ан скзи ноль тогда бы я получил размерность 1 на5 А 1 на5 - это у меня вот такая размерность была бы вот про то что ты говоришь Ну давайте этот э сейчас сек открою Давайте попробуем посмотреть что-то делать и пойдём на перерыв надо уже на перерыв срочно идти Так э сейчас я создам здесь Но Вот давайте импортируем рч вообще как бы сами пробуйте такую штуку делать это эмпирическими путями сес он подгрузить 1 2 3 создадим такой вот сри вот Да теперь я делаю 1 Вот видите Вот вот как бы Т този 1 он

1 2 3 создадим такой вот сри вот Да теперь я делаю 1 Вот видите Вот вот как бы Т този 1 он добавил То есть он сделал размерность была просто вот так сейчас вым т и т 2 размер была просто видите простори когда я делаю когда я делаю то у меня размерность будет какая твой вопрос был это 31 Да потому что вы как бы вот это нулевой индекс А вы сказали что добав на первую позицию од размер есть на вопрос мй то у меня какая будет размерность 1 на 1т вот он да то есть с наруже и этим удобно

на вопрос мй то у меня какая будет размерность 1 на 1т вот он да то есть с наруже и этим удобно манипулировать То есть когда мне нужно чтобы размер совпадали Я даже знаете как проще бы на самом деле воспринимал вот то что об объяснил вам сложнее чем воспринять по-другому вот есть уня смотри вот такая ижи размерность первой матрицы вторая пока что просто B Чтобы умножить эти две размерности вот к этой к этому нужно применить ан сквизи Сколько один Да потому что это вот нулевой индекс А мы хотим

этой к этому нужно применить ан сквизи Сколько один Да потому что это вот нулевой индекс А мы хотим чтобы На позиции первого индекса появилась размерность B1 всё будет И тогда их можно будет умножить Если вдруг вы пропишите а скзи ноль то Серёжа чеш что будет получается 1 на 3 1 наб О это у меня Б 1 наб да 1 наб Да и это уже не умножил всё ну вообще такие вещи конечно Старайтесь этот эмпирическим путём тыкаться скзи А скзи и смотреть что получится что получится из этого Всё тогда давайте у нас

путём тыкаться скзи А скзи и смотреть что получится что получится из этого Всё тогда давайте у нас ещё код впереди сегодня мы с вами это засиделись Давайте делаем Перерыв 10 минут и возвращаемся к коду я также наверное лекцию закрою чтобы её уже загружать и скину вам новую ссылку Всё Давайте сейчас 58 минут в 008 прошли ссылочку

по Так ну что давайте возвращаться вопрос жики появились Угу Так экран мой видно да да хорошо Поехали что у нас здесь с вами будет Так ну вот смотрите вот эти два метода короче есть такая история когда вы будете собирать проекты когда вы будете собирать проекты Да уже не в одном файле например в нескольких вы будете выносить Ну там импортировать из одного файла что-то в другой вот так вот устроено что по умолчанию вот смотрите я здесь буду тянуть кое-что Вот это я буду тянуть кое-что своё это у

что по умолчанию вот смотрите я здесь буду тянуть кое-что Вот это я буду тянуть кое-что своё это у меня вот где-то вот здесь будет лежать вот наме вот эти фа файл я говорю что вот на этом же уровне Найди папку sce в ней возьми например там rn или короче подрузи конкретно какие-то какие-то вещи да А если что-то я вдруг поменяю в этом файле вот что-то я поменяю в этом файле то по умолчанию по умолчанию это не сохранится ну точнее это не отобразится здесь он будет подтягивать как бы старый вариант

это не сохранится ну точнее это не отобразится здесь он будет подтягивать как бы старый вариант Прим это связано только на уровне кша вот просто так устроено вот эти метод так называемые которые начинаются с проценка питерке позволяют делать какие-то Дополнительные настройки собственно говоря вот этот А когда вы его сделаете то теперь изменения в каких-то файлах они сразу же будут актуальны И для этого файла вот это как бы такая полезная штука поехали что у нас здесь есть OS pand SM PL PR

И для этого файла вот это как бы такая полезная штука поехали что у нас здесь есть OS pand SM PL PR collections всё знакомо Ну collections ладно не знаю знакомо или нет Ну короче это вообще очень простая штука лтк стоп слова помните когда-то мы с вами на фазе О да немножко касались лтк дальше тоже нам знакомый с вами нужен просто для короче базово там посмотреть этот про барч тут всё тоже старое взять Ну ещё ряд вспомогательных историй Нам нужен будет базовые штуки тоже не связа СМИ больше с

взять Ну ещё ряд вспомогательных историй Нам нужен будет базовые штуки тоже не связа СМИ больше с контекстом Ну и кое-какие вещи Просто у меня вынесены в отдельный файл Ну что ж поехали как я вам говорю что у нас с вами будет датасет здесь получается как раз-таки с ревю на фильм И у нас с вами будет задача бинарной классификации бинарной классификации Если я сейчас сделаю Вот это сентимент да который у меня будет отражать как раз таки отзыв настроение этого отзыва Да в прям с приво что тел

который у меня будет отражать как раз таки отзыв настроение этого отзыва Да в прям с приво что тел сделать Ну вот как бы достаточно сбалансированные классы 50.000 всего у нас элемента выборки 25000 с одной стороны 25.000 другой поехали Ну что нам с вами нужно сделать ничего не меняется Нам нужен с вами цес СН убираем в тек чтом Мом случае что во-первых я весь текст буду переносить в нижний регистр да то есть чтобы у меня слово ц большое слово т с маленькой было одним кошка остаётся кошкой

да то есть чтобы у меня слово ц большое слово т с маленькой было одним кошка остаётся кошкой правильно неважно с большой написали или с маленькой в большинстве случаев это так также я удаляю теги потому что ну такой текст его спарс и соответственно Там могут быть теги Понятно никакую роль относительно положительной и отрицательной класса Это тоже не несёт дальше удаление знаков пунктуации удаление стоп слов и и и и А ну соотвественно Возвращение текстовый исходный вид Да потому что здесь у меня

стоп слов и и и и А ну соотвественно Возвращение текстовый исходный вид Да потому что здесь у меня будет лист а я его возвращаю обратно в строку всё применяем то есть запишем это в Clean reviews А да apply просто функцию Ну короче пандусов ские методы чисто сейчас он всё это дело обработает У нас сейчас секунду пока я поставлю на загрузку видео первой часть а нет она ещё не загрузилась Ладно поехали вот можно взглянуть Да что произошло у нас с вами в общем как бы все вот эти вещи которые вы

вот можно взглянуть Да что произошло у нас с вами в общем как бы все вот эти вещи которые вы указали здесь всегда указывается как бы я бы сказал контекстная предобработка Да в зависимости от того Ским текстом Работаете Вы понимаете нюансы вашего текста исходя из это ВС Так что дальше теперь следующее что нам с вами нужно будет это текст тонизировать мы с вами начинаем идти по порядку так давайте сейчас все я ещё открою то есть нам с вами нужно таки митом мся у меня вот Будут всякие вот эти

сейчас все я ещё открою то есть нам с вами нужно таки митом мся у меня вот Будут всякие вот эти Great Movie и так далее Мне нужно как бы тонизировать то есть дать в в нашем случае токен - это дать номер дать номер дать номер этому токену а соответственно что мы делаем то есть для всех слов из текстов тексты взятые из de Clint мы выделяем давайте я запущу сначала Сейчас посмотрим что здесь такое по порядку то есть вот корпус не быстро считает вот корпус Что здесь происходит здесь видите все

по порядку то есть вот корпус не быстро считает вот корпус Что здесь происходит здесь видите все слова вообще все слова которые были употреблены понятно что какие-то слова будут чаще какие-то реже встречаться И вот метод Counter нам позволяет с Вами просто сделать тупо почёт Тупо почёт знаете как val CS мы делаем и мы получаем значение сколько раз оно встречалось в сирис там или в датафрейме вот тут та же самая история и можно взглянуть что у нас с вами причём да Видите слово например Лось

вот тут та же самая история и можно взглянуть что у нас с вами причём да Видите слово например Лось 83000 раз да слово фильм 74 отсортированном видека получается не очень сильно нужна видимо сразу отсортированном виде ВС выдаёт Ну понятно что слово фильм Бут встречаться чаще всего на третьем месте так далее ВС это дело пошло [музыка] разных есть много Да и можно по-разному подойти к этой идее но у нас с вами будет очень простой то есть мы А вот слово Movie получит индекс Один потому что оно

но у нас с вами будет очень простой то есть мы А вот слово Movie получит индекс Один потому что оно чаще всего встречается Я бы мог по алфавиту их аранжировать или ещё по какому-то принципу Ну вот я решил по частоте встречания понятно То есть у нас будет индекс иметь оди ФМ 2 One 3 и так далее Всё ноль У нас зарезервирован под служебный токен н так а прекрасно прекрасно прекрасно что у нас здесь с вами дальше Вот здесь мы можем встретить смотрите я взял последние 10 слов которые реже всего

с вами дальше Вот здесь мы можем встретить смотрите я взял последние 10 слов которые реже всего встречаются и видите они по одному разу встречаются Ну можно ли оценить важность слово и потом с помощью него классифицировать если оно встретилось только Однажды Ну как бы так себе идея согласитесь Вот потому что ну как бы это как знаете предсказывает на одном элементе выборки что-то когда мы видели только раз утверждать значимость этого очень сложно Поэтому по-хорошему нам надо вот как бы по факту

раз утверждать значимость этого очень сложно Поэтому по-хорошему нам надо вот как бы по факту мой словарь сейчас мой словарь это вот эта вот штука согласны то есть вот 22609 уникальных слов образует размер словаря мы сейчас его укроти уберём слова которые Ну как бы нафиг они нам нужны да которые редко встречаются опасна штука Надо их убрать для этого есть фун сто встречаемости мы просто оставляем как бы с учётом фильтрации вот по умолчанию 10 здесь стоит ну Давайте с вами возьмём это условность

как бы с учётом фильтрации вот по умолчанию 10 здесь стоит ну Давайте с вами возьмём это условность опять же Это условность вы можете поиграться это гипер параметр никто заранее не знает какое оптимальное число здесь Но укажем что давайте слова которые хотя бы встречались хотя бы 000 раз хотя бы 000 раз и всё вот у меня сор теперь можете посмотреть что топ 10 с конца слов вот онико вре также ми сколько укоротили слова вообще всего 967 слов осталось Ну может оно и хорошо на самом деле Чтобы

ми сколько укоротили слова вообще всего 967 слов осталось Ну может оно и хорошо на самом деле Чтобы понять положительный и отрицательный отзыв буквально может быть там не знаю 20-30 триггеров да хорошо EX там тоже в сторону хорошего да соответственно точнее плохо Ну как бы какие-то базовые триггеры по которым можно понимать вопросы То есть в принципе вот мы потихоньку бы низация Подходим к концу сейчас будем ползать потихонечку к неровной сети вы пока можете спросить вопросы я быстренько закину

будем ползать потихонечку к неровной сети вы пока можете спросить вопросы я быстренько закину на загрузку видео Давай Серж не слышно Ну не слышно Ну если что можешь в чат написать Хотя учитывая что ты в дороге Сейчас может и сложнее будет написать чем сказать так ещё у кого какие вопросы секундочку финальный штрошу [музыка] Так вы у нас группа плута правильно правильно У меня есть вопрос втоп Когда мы увидим новичков тоже хочется кому-то рассказать там послание новая группа в августе по-моему

мы увидим новичков тоже хочется кому-то рассказать там послание новая группа в августе по-моему или когда Да вы попали в этот как раз рык перерывчик попали Да вы так сказать когда новая группа выйдет вы уже дедушки конкретно дедами будем реально прямо вы уже сможете с высоты говорить серьёзные вещи а выходит 19 августа Кстати я не знаю А ну буде меня слышно Теперь короче у меня вопрос был такой А вот всякая штука которую мы делали в прошлый раз типа низации там что-то сокращались ли монетизация

вот всякая штука которую мы делали в прошлый раз типа низации там что-то сокращались ли монетизация она как бы будет за пределами за пределами нейронной сети Да за пределами и это как бы уменьшит твоё количество словаря соответственно у тебя будет меньше кодировки меньше обучение да то есть в каком-то смысле как бы всё что мы сегодня изучили Это буквально последняя часть да то чтобы заменило логистическую регрессию задачи классификации поэтому опять же в контексте задачи если ты считаешь что

регрессию задачи классификации поэтому опять же в контексте задачи если ты считаешь что это нужно сделать то никаких проблем можно сделать и всё будет ок а ну ти при подработку можно почти всё Поня вот так хорошо что мы с вами сделаем мы создадим такую историю to То есть это когда по слову можно получить его индекс в нашем словаре Ну то есть мы же сейчас с вами говорили что вот например у нас первый Да потому что он самый часто встречающийся где там ну я закрыл Да не выдел вот здесь вот вот

первый Да потому что он самый часто встречающийся где там ну я закрыл Да не выдел вот здесь вот вот самый часто встречающийся он будет первый второй и так далее эта функция Просто она позволяет нам с вами где где где где нахожусь Она позволяет нам с Вами просто получить это в принципе вот эта штука и есть просто она тепер не в будет а в дикте понятно чтобы по ключу получать то есть единственно еди и так далее И вот какое-то самое у нас 967 слов оста Вот соно они встречаются реже всего так давай

и так далее И вот какое-то самое у нас 967 слов оста Вот соно они встречаются реже всего так давай вопрос А где мы Мы е добавили нолик служебный Нет ещё не добавили он тоже здесь будет и соответственно к теме никакого отношения иметь не будет просто сохранение если вам нужно было сохранить файл не знаю стоп слова или в Вы хотели бы словарик скинуть всё можно в джейсоне сохранить и вот они там 1 2 так возвращаемся что что что нам ещё нужно Здесь Вот пример одного а и сонно тепер Сом готовимся с

так возвращаемся что что что нам ещё нужно Здесь Вот пример одного а и сонно тепер Сом готовимся с вами Потихоньку мы с вами потихоньку готовимся к следующему шагу следующему шагу сейчас секундочку опять Всё уехало мы с вами потихоньку готовимся к следующему шагу А значит что хотелось бы чтобы каждый текст из Great Movie Great Movie стало теперь вот таким то есть соответственно чтобы каждая последовательность чтобы каждое текстовое сообщение уже было это е нен это токе точно также работает там

чтобы каждое текстовое сообщение уже было это е нен это токе точно также работает там не знаю по-моему Ну я скорее всего без сейчас не зайду вообще точно также работает точно также работает какой-нибудь точно также работает Open например меня скорее платф Можете зайти написать свою фразу и он покажет что у него является токенами и какой номер имеет в словаре вот прямо то что мы с вами делаем Это открытая у них информация у них нет идигов да ибен это закрыты у них информация у них закрытая

Это открытая у них информация у них нет идигов да ибен это закрыты у них информация у них закрытая модель но сами типа токены они могут показать просто хотя бы даже могут показать просто как бьётся на токены у нас пока токен одно слово а в таких моделях более серьёзного параметра токеном становится вообще часть слова но это как бы если у вас есть оного видеокарт иного сотрудников то в целом Можно попробовать в нашем случае это не надо Вот соответственно в мы будем хранить с вами оцифрованные

попробовать в нашем случае это не надо Вот соответственно в мы будем хранить с вами оцифрованные наши сообщения что я делаю я пробегаю по вот этим очищенным своим сообщения и применяю метод то есть получаю оцифровку здесь Здесь у меня ещё выводится одно из одно из сообщений одно из сообщений Вот это сообщение есть вот можно увидеть номер Да ну и так далее Вот это сообщение уже будет готово приходить в слой им бенга который мы с вами будем создавать м слом динга то есть мы с вами на одну ирасу

в слой им бенга который мы с вами будем создавать м слом динга то есть мы с вами на одну ирасу выше поднялись понятно то есть мы уже очистили поднялись ещ создали вот этот to in как бы поднимаемся одну терасу и уже когда будем фвар собирать вот сло бенга он уже такой вид готов будет принимать от нас так Поехали дальше что у нас здесь здесь Я просто делаю этот делаю энкодер для таргета да для таге это было Позитив негатив сделаем о Но дальше все отзывы состоят из разного числа слово для удобства

это было Позитив негатив сделаем о Но дальше все отзывы состоят из разного числа слово для удобства можно посчитать длину всех отзывов А Да собственно говоря Какая ещё история важна у нас же сейчас с вами как бы как картинки знаете они все разного размера приходят Нам нужен будет Вот тут та же самая история Давайте вообще взглянем что у нас с вами здесь есть Для этого выведем des даже Давайте Вот пока вот сюда Как вы думаете какой размер указать как размер входной последовательности максимально

пока вот сюда Как вы думаете какой размер указать как размер входной последовательности максимально А если у нас с вами будет 100 сообщений длины 2 и одно сообщение длины миллион получается что будем воздух гонять Медиа может сократить Да медиана но нет как бы мы можем указать Почему если у меня в среднем точне медианное значение Да отзыва 50 символов ой 50 слов то те которые будут линне не будут обреза Ну как бы да жалко теряем что-то Ну как бы ВС равно какой-то компромисс надо искать опять

обреза Ну как бы да жалко теряем что-то Ну как бы ВС равно какой-то компромисс надо искать опять компромисс какой-то нужен Вы можете даже на самом деле вот у этого построить например график да то есть там можете построить гистограмму можете построить можете построить гистограмму можете посмотреть и указать какое-то значение Ну вот мы видим почти всё до 300 да до 300 есть какие-то выбросы но 300 - это уже с большим запасом 75% вообще стот наход из этого може какой-то ло 95% вообще никак не

300 - это уже с большим запасом 75% вообще стот наход из этого може какой-то ло 95% вообще никак не пострадают а 5% обре чуть-чуть Но ничего страшного переживём Вы должны понимать чем больше вы создаёте SE А мы сейчас формируем с вами мы сейчас с вами формируем именно вот этот гипер параметр все понимают который мы задаём соответственно Ну как бы если он будет у вас большой чем это будет чревато будем долго обучаться Может будем умнее Но это надо делать ВС еще говор обуть поэтому опять такая

будем долго обучаться Может будем умнее Но это надо делать ВС еще говор обуть поэтому опять такая ирия компромиссов очень Возможно с ними стоит поработать отдельно чтобы посмотреть какую часть отзыва можно убрать из объекта да то есть какая-то ручная обработка текста тоже вполне себе так Ну мы пока с вами не удалили видимо Мы удалим чуть дальше сейчас мы делаем динг Ну в принципе процедура динга и будет заключаться у нас в том что как бы мы будем обрезать да то есть мы будем короткие сообщения

и будет заключаться у нас в том что как бы мы будем обрезать да то есть мы будем короткие сообщения у нас будут дописывать давайте так вот мы сейчас с вами выберем предположим 100 Как вы думаете что будет с с ревью с отзывами которые имеют длину меньше чем 100 ноли в начале до Пишем да абсолютно наверное в начале до пишутся нули соответственно если у нас будет больше чем 100 то что произойдёт Наташа не слышно тебя ну точнее очень тихо ну то есть не будет Ну хорошо давайте так Я указал sequence

не слышно тебя ну точнее очень тихо ну то есть не будет Ну хорошо давайте так Я указал sequence L равно три да а предложение прошло следующее я вышел погулять на улице очень приятно ну несоответствие получается потому что на много слов но вот что у нас будет после динга в данном случае ну ошибка наверное будет потому что не нерону вотже это знаете как ресайз в картинках также здесь мы будем с вами всё делать одного размера И вот я тебе го если мы sequence L указали равный трём то есть мы просто

всё делать одного размера И вот я тебе го если мы sequence L указали равный трём то есть мы просто обре можем получается так всем Это понятно что я сказал Люба что останется в итоге я вышел погулять на улице очень приятно я вышел погулять супер Отлично Отлично если кому-то что-то непонятно Не стесняйтесь спрашивайте Да Сержа давай вопрос А мы можем обрезать типа не первое слова каким-то умным способом типа самый часто встречаемый только оставить или что-то или нужно так делать Да вот у тебя в

типа самый часто встречаемый только оставить или что-то или нужно так делать Да вот у тебя в твоём распоряжении функция динг можешь как бы по своей логике неровность сети без разницы она на вход будет принимать последовательность фиксированной длины как ты её сделаешь дело твоё Просто то что будет нулём для него будет свой определённый мбенг для динга Для пустоты по факту А как бы если ты считаешь что не конец нужно обрезать А Или как-то по-другому это вполне здоровая логика то ну как бы сам

что не конец нужно обрезать А Или как-то по-другому это вполне здоровая логика то ну как бы сам Просто это дело описываешь а о Да если я Вышел вышел погулять можно убрать повторяющиеся слова допустим да да можно так можно так Да вот ну собственно говоря я здесь сильно не буду останавливаться вы вообще сможете Ctrl C Ctrl V это готовые как бы готовое по В каком-то смысле который умеет делать динг который нужно просто подать [музыка] А до какого размера Если вы хотите обрезать и собственно говоря

нужно просто подать [музыка] А до какого размера Если вы хотите обрезать и собственно говоря подать оцифрован ную последовательность если она будет больше то она обре если она будет меньше Она сначала до заполнится нулями всё в принципе всё просто Ну вот да Готово по Ctrl C Ctrl V так сказать спасибо Паша за это всё соответственно запускаем и начинаем формировать смотрите Например я укажу SE равный 32 Да применяю функцию Ping и взглянем взглянем на какой-то один из вот как вы думаете какую

равный 32 Да применяю функцию Ping и взглянем взглянем на какой-то один из вот как вы думаете какую размерность будет у меня иметь вот здесь 32 32 это Вектор из 32 координат Ну да так варианты ещё только не координаты А токенов ну 32 токена всё вот 32 токен уверены 32 на длину копани на количество датафрейме столбцов короче строк строк Да количество элемента выбрать вот review in А у нас review получается имеет что у нас кстати имеет там 967 там А нет это друго это не Матрица он разной

review получается имеет что у нас кстати имеет там 967 там А нет это друго это не Матрица он разной размерности тут короче у нас есть тут можно точно сказать что 50.000 массивов границ но какие-то после длиннее какие-то корочи какие-то отзывы короткие какие-то длинные А вот здесь мы приведём к матричном виду Мы через пенг всё сделаем Итого размерность у нас будет итоговая Какая Настя Серёжа Чернышов Я пока не уловил 32 на 550.000 Да только 550.000 на 32 Всё верно то есть 50 Давайте вместе

Чернышов Я пока не уловил 32 на 550.000 Да только 550.000 на 32 Всё верно то есть 50 Давайте вместе выведем я воо вам Очень советую кода не будете переваривать вставляйте для себя Потому что вот если вы Ctrl C ctr V сделаете всё задание в принципе всё запустится всё заработает Но если вы хотите прямо по-хорошему понять принтут каждый шаг и размерности переваривается что есть когда-то мы с вами когда собирали Градиент строили класс моделей линейной логистической регрессии я вам тоже это

вами когда собирали Градиент строили класс моделей линейной логистической регрессии я вам тоже это советовал тогда делать мы как бы на самом деле от этого далеко не ушли тут просто матриц перемножаемых и вот эти вот принты размерности очень хорошая практика того что имен понять как это устроено Вот соответственно Давайте запустим и действительно если нам логика подсказывает здесь должно быть 50.000 отзывов которые все приведены к одной длине 32 Ну неудачно значит там скорее всего не как бы как

отзывов которые все приведены к одной длине 32 Ну неудачно значит там скорее всего не как бы как сказать А я сам гори одно длины Как видите вот эти были длиннее чем 50 и вот эти были длиннее чем 50 и вот эти Потому что нулей Нет сначала но вот если вы видим тридцать второй он был короче кто-то сильно не не устраивал да вот как бы вот это вот много слов не говорил просто коротко объяснил что он считает по этому фильму получилось меньше чем 50 слов Поэтому у него мы добавили д нуля в начале 48

считает по этому фильму получилось меньше чем 50 слов Поэтому у него мы добавили д нуля в начале 48 слов значит вот всем понятно или нет Настя Сержа Дима Понятно есть держите потихонечку посо что мы с вами уже добились Мы с вами уже готовы вот сюда подать То есть как бы теперь у нас в нашем случае 32 50.000 текстов как бы всё это Мы готовы подавать нейронную сеть там встре первый сло и всё остальное поэтому мы уже элементы выборки Вот например у нас новая выборка Да ну сколько у меня там 20% да

поэтому мы уже элементы выборки Вот например у нас новая выборка Да ну сколько у меня там 20% да ну сколько получается 10 У меня уйдёт на у меня удт на валидацию 40.000 у меня уйдёт на Т ВС и сонно разметка для них что было положительно что было отте отрицательным так далее Далее далее Далее А что мы здесь делаем мыра Это в истру потому что он не любит какие-то левые типы данных в себя принимать в свои нересте конструкции Для табличных данных это понятно Tor dataset Ну и всё соответственно тоже

свои нересте конструкции Для табличных данных это понятно Tor dataset Ну и всё соответственно тоже самое dataset dat Loader Да dataset - это как бы оборачиваем данных dat Load правила по которым нужно извлекать эти данные указываем ба равно 48 ну здесь обычно кратно двойки стоят но здесь скорее Паша развёл чтобы там не наложили вот эти как бы когда размерности чтобы не совпадали чтобы у себя в голове можно было понять что есть любое ло которое нужно можете указать ВНО Понятно вы ВС это знаете

можно было понять что есть любое ло которое нужно можете указать ВНО Понятно вы ВС это знаете Короче идм дальше здесь посмотрим что внутри изм один элемент выборки Да из реновой выборки то есть да случайно извлекает один выбор из датасета получилась Вот такая история Вот какое-то сообщение да А нет размерность у нас 48 Вот она вот э разметка сколько у нас размерность вот этого вот если бы я бы взял бы здесь нзра Да вот у этого нзра 32 на1 думаешь ли 48 на О ну давай всё как Кто хочет стать

взял бы здесь нзра Да вот у этого нзра 32 на1 думаешь ли 48 на О ну давай всё как Кто хочет стать миллионером нужно принимать решение у тебя офер лежит твоей мечты неправильно отвечаешь скажеш Что нужно е полгодика пото Давай твоё решение 48 на1 Поздравляем поздравляем пра Да конечно А что это за 48 значений Давайте Саша Голованов так нуй нет так это наоборот без оффера остаёшься а нет всё сферо правильно 48 сейчас я без оффера се запутался Ну всё уже Да нет 48 правильно А что это вот что эти

правильно 48 сейчас я без оффера се запутался Ну всё уже Да нет 48 правильно А что это вот что эти 48 значений в себе здесь содержат я вот этот у меня был так 1 или классификацию нет положительные отрицательные Да положительны отрицательный отзыв то есть смотрите вот у нас с вами первая последовательность это первое ревью первый отзыв который попал в этот бач соответственно это 193 слово слово слово и так далее и соответственно вот вот это вот ревью вот это ревью оно имеет разметку один это

слово и так далее и соответственно вот вот это вот ревью вот это ревью оно имеет разметку один это было позитивное ревью то есть позитивный отзыв Ну и так далее То есть как бы удержите немножко для себя вот эти размерности это будет полезно это будет полезно хорошо ну всё поехали начинаем собирать А что здесь такое здесь короче есть такая история чтобы в классы подавать кла подавать по факту короче можно подавать в классы более типа удобно мы сразу создаём config и это можно будет менять в

короче можно подавать в классы более типа удобно мы сразу создаём config и это можно будет менять в одном месте и как бы это просто типа более удобно это один из вариантов сейчас поймёте что я имею в виду можете почитать здесь поподробнее что это такое дата CL декларатор навешивается дата CL котором вы просто задаёте ковик config с гипер параметрами которые вам нужны и дальше их передаёте в сеть что нам нужно с вами будет указать size size вай то есть на чём учить кому нужно будет Давайте с

что нам нужно с вами будет указать size size вай то есть на чём учить кому нужно будет Давайте с вами порассуждаем немножко Вот кому нужен будет в нашей неровной сети Всё верно то есть слою вот слою СТ вот этому ему нужно потому что если будут слоёв несколько то мы просто прогоним через несколько слоёв Хорошо давайте вот ens Ну понятно Кому нужен будет сло динга Кому нужен будет да Абсолютно верно рекуррентно сло потому что это влияет на то как он инициализируется внутри теперь нам можно

верно рекуррентно сло потому что это влияет на то как он инициализируется внутри теперь нам можно прыгнуть в самое начало потому что это одно и тоже Давайте прыгнем вот где мы с ми ривали Дат вот ми он знает какие веса здесь генерировать надо как тоже он знает какие веса надо генерировать внутри И сколько их Самое главное сколько вот когда мы задали и мы можем задать это всё дело Хорошо потихонечку забирается кому нужна Как вы думаете динга Чтобы понимать Какую матрицу на вход встречать то есть

забирается кому нужна Как вы думаете динга Чтобы понимать Какую матрицу на вход встречать то есть указывая SE Ну будем это дело понимать так bal если короче просто включим Ну Union это сложновато написано короче это True или fse типа включаем или Выключаем S на ваш взгляд кому нужно знать эм бенгу Ну по-хорошему да эм бенгу надо знать потому что за счёт п сайза Если мы провали с вами в динг слой эм бенга это вот здесь у нас с вами Вот то есть как бы за счёт вот этого кап сайза и создаётся вот

эм бенга это вот здесь у нас с вами Вот то есть как бы за счёт вот этого кап сайза и создаётся вот эта Матрица Динго которые генерируются Потому что если Костя указывает вка Сай равно 100 то нейрона сеть инициализирует 100 случайных им бенго в начале а серже у каждого Кай 200 у него нези 200 случайных инв В общем это нужно чтобы сначала инициализировать тупо Да тупо потому что ведь всё вот это внутри происходящее вот здесь вот это же то как бы там там Значение В прямом смысле эти веса там

внутри происходящее вот здесь вот это же то как бы там там Значение В прямом смысле эти веса там хранятся они сначала случайно инициализировать солнце или как кодировать жарко или как кодировать море нужен им бенгу чтобы сгенерировать ровно столько им бедин Сколько размер словаря динг diam нужен чтобы указать размер этого им бедин как каждое слово Виктори зовать насколько большим размером соответственно hidden size у нас с вами нужен для рекуррентной ячейки чтобы сгенерировать веса внутри B

hidden size у нас с вами нужен для рекуррентной ячейки чтобы сгенерировать веса внутри B directional тоже Понятно туда же sequence L Ну sequence L на самом деле нужен больше для тоже Инга Ну для поддержания контекста да Угу всё соответственно мы сюда всё это указываем что здесь смотри то есть вот мы создаём этот класс этот класс да а потом его заполняем начинкой То есть я как бы все параметры в одно место подам и в свою нейронную сеть это ещ ко Это не нейронная сеть Я тупо закину как бы вот эти

место подам и в свою нейронную сеть это ещ ко Это не нейронная сеть Я тупо закину как бы вот эти параметры знаете как вы конфигурацию чего-то настраиваете в отдельном файле да есть ещ какие-то ког файлы специальные например не знаю возьмёте базу данных есть там указаны все служебные параметры Вот давай ко вопрос Это уже создание экземпляра класса или Пока ещё да у тебя будет свой а у меня будет свой Пустим но как бы у нас свои нюанси у тебя там SE побольше может будет у меня поменьше разные и

свой Пустим но как бы у нас свои нюанси у тебя там SE побольше может будет у меня поменьше разные и так далее можно може вообще это зать иу вот как бы тут Паша вот такой вариант прил в принципе Это не единственный вариант как бы вы можете делать так как делали раньше Я лично сам как бы так не собирал один из вариантов Да по Су де такой способ сделать словарь только через кла [музыка] ня ин хватает на досу можете почитать короче это не то что требует сечас пря высокого вашего погружение

хватает на досу можете почитать короче это не то что требует сечас пря высокого вашего погружение погружение трет другие вещи это лишь один из способов задания Всё я создал свой конфиг и переходим к самому главно Я указал Обратите внимание п плю о Почему у нас скажет нам кто нам скажет сё токе он как бы под него тоже нужен номер а он у нас не включён там напрямую Можно спросить ещё вот по ходу Я так поняла что вообще пофиг Как инициализировать Псай потому что он всё равно на второй итерации уже

поняла что вообще пофиг Как инициализировать Псай потому что он всё равно на второй итерации уже подстроиться Да нет как смотри Вот когда вы нейронную сеть создаёте Она же инициализирует случайно веса согласны Да а вот слой динга Вот мы с вами вместе проговорили Что из себя представляет слой динга вот зде с вами вместе рисовали и вот мы с вами сказали что слой Инга его задают два параметра Это количество слов в словаре и размерность каждого вот это вот сло Инга получается что если как бы не

количество слов в словаре и размерность каждого вот это вот сло Инга получается что если как бы не укажешь его А чем инициализировать его непонятно правильно Да да поэтому как бы это нам нужно всё соответственно всё задали ДАИ погоня на короче затраты вычислительные повлияет сильнее всего Значит м повлияет всё повлияет Ну слои Понятно Ну то есть то чем можно быстро оперировать это SE L й и блин Я тебе даже не могу честно сказать однозначно Что ладно буду играться пофиг всё надо играться игра

Я тебе даже не могу честно сказать однозначно Что ладно буду играться пофиг всё надо играться игра достаточно серьёзная вот Out Of тебя ждёт однозначно в этой игре как бы блин переваривать реально всё важно Я что-то даже себе прям так не задавался таким вопросом Да что конкретно из этих вещей более такая важная история Ну можно углубиться порассуждать или у спросить нормально у нас уже есть лу клуб как он называется of поэтому го вот Е2 тут хотя бы ладно прозрач А вот здесь они все вят влияют

как он называется of поэтому го вот Е2 тут хотя бы ладно прозрач А вот здесь они все вят влияют секун L просто на скорость обработки а всё остальное на количество весов То бишь на обучение Так что как-то Так ну что ж вот поехали наш rnn net соответственно вот сюда видите я как бы винит просто подаю config но я потом его всё равно здесь распаковываю получается ну как бы вот вот так вот Паша решил привести такой вариант Да соответственно как бы можете сильно и грузиться по-хорошему я мог это всё

привести такой вариант Да соответственно как бы можете сильно и грузиться по-хорошему я мог это всё указать сюда понимаете да свои плюсы безусловно есть вы в той статье можете прочитать Но мог бы указать сюда Я про чтобы вас чтобы вы сильно не запутались сейчас всё соответственно Я просто достаю в sequence L указываю sequence L в size указываю dimension в hidden dimension указываю hidden size в указываю nss и так далее Всё и вот поехали у нас ребята уже как бы конкретные это слой им бенга и

в указываю nss и так далее Всё и вот поехали у нас ребята уже как бы конкретные это слой им бенга и слой НН То есть у нас два слоя будет Вот как бы именно нере сетевые слои их будет два динг на вход у на что с вами приходит луба на твой взгляд там написано Тим смысле вот физически Какой объект будет слово там или что зашифрованные слова зашифрованные как что за низинный вариант да то есть вот эти Циферки Вот это ждёт динг на вход и что нам динг выплюни тогда давайте давайте Сержа Куди что нам

Циферки Вот это ждёт динг на вход и что нам динг выплюни тогда давайте давайте Сержа Куди что нам вынет для каждого слова свой Вектор поэтому сло которой равен количеству измерени Давайте перем сло Вот вот здесь вот какая размерность приходит на вход Какая на выход Давайте на вход размерность Давайте с Кост конкретно нашем случае да общем виде У нас есть всякие [музыка] второй размер Умно на Абсолютно верно то есть например мама мыла раму Это был бы как бы там не знаю 1 5 это вот одно из

Абсолютно верно то есть например мама мыла раму Это был бы как бы там не знаю 1 5 это вот одно из сообщений соответственно придёт ровно то какой у вас ба на выходе тогда на выходе что у на будет получим Код Этот Да за Ну цифры Абсолютно верно Давай по размерности что будет по размерности здесь а Конкретно на мама раму или нет вот В целом вот пришёл Басай sequence там в нашем случае 48 сообщений длиной 50 что мы выполним после сло Беринга Ну ты правильно говоришь вот Представь что тебя мама мыла

50 что мы выполним после сло Беринга Ну ты правильно говоришь вот Представь что тебя мама мыла раму мы получим по итогу для каждого из Так что получим каждое слово Ну давай по порядку Так вторая размерность у нас с вами какая будет теперь не просто правильно теперь не просто у нас было например 24 теперь эти 24 двойка станет чем [музыка] каким на sequence L и умножить на длину на кого на длину длину чего длину вот этого предложения которое пришло так это же ма мама мало раму Мы же указали её

длину чего длину вот этого предложения которое пришло так это же ма мама мало раму Мы же указали её уже так Кто поможет Наташе длина Дин Абсолютно верно eding dimension Ну да то есть видите как бы у нас получается В каком-то смысле вот этот плоский Вектор развернулся вот в такую матрицу Понятно один Какая размерность получается на выходе в смысле сколько плоскостей просто ты так написал что как будто Три плоскости так и есть Три плоскости так и есть Три плоскости то есть как бы вот это вот

будто Три плоскости так и есть Три плоскости так и есть Три плоскости то есть как бы вот это вот плоский Вектор баса остатся базом Понятно 48 текстов на выходе 48 текстов на входе наоборот вы поняли что я имел в виду а соответственно 254 станет вдруг 2 имеет какой-то свой инг да свой соответственно Вот это имеет какой-то свой динг и вот это имеет какой-то свой динг я только не знаю в каком порядке эти два параметра Но по крайней мере вот как бы наличие смысл понятен Да всё Поехали дальше то

эти два параметра Но по крайней мере вот как бы наличие смысл понятен Да всё Поехали дальше то есть динг для динга что нам нужно как мы с вами говорили для Инга Понятно нужно сколько инго сгенерировать Сколько размер каждого динга Вот они наши два гипер параметра всё соответственно дальше как бы снм разобрались теперь ячейка н создаётся inp size соответственно inp Сай Давайте перелета сюда м на самом деле неважно одно и тоже перелета с вами вот в принципе много вариантов подходит но блин я уж

самом деле неважно одно и тоже перелета с вами вот в принципе много вариантов подходит но блин я уж сам Так какую я картинку то хотел вам вот эту бы я хотел наверное смотрите соответственно для рнна Какие веса нужно сгенерировать на самом деле в обычном классическом НН генерируется только вот эта Матрица Весов и вот эта то есть два полно связанных слоя понятно что как бы чтобы вот этот слой например сгенерировать вот этот torch linear да torch точ line нам с вами нужно что ну надо понимать

сгенерировать вот этот torch linear да torch точ line нам с вами нужно что ну надо понимать сколько на вход приходит и сколько выход дать правильно а за вход отвечает размер динга верно поэтому у нас с вами вход в ячейку это логично достаточно логично дальше что ещ надо задать надо задать как бы соответственно вот этот вес вот этот зависит от того что идт сюда а это поэтому мы указываем с вами суть это какая-то настройка с чами неважно и bal B у нас с вами будет два статуса двоечка короче там

это какая-то настройка с чами неважно и bal B у нас с вами будет два статуса двоечка короче там бинарная переключал 12Д если мы её включаем соответственно у нас будет в два раза больше выходов если Выключаем значит Выключаем пока что я хочу чтобы мы е выключили у нас B А ну мы когда создавать Будем мы с вами укажем всё соответственно количество слоёв это если вы вдруг несколько раз хотите прогнать Ну и в конце на выходе на выходе на выходе на выходе мы с вами делаем вот это и тогда у меня

Ну и в конце на выходе на выходе на выходе на выходе мы с вами делаем вот это и тогда у меня следующий к вам вопрос продолжаем нашу викторину какая будет размерность то есть вот мне нужно создать полносвязный слой для классификации Да плано связанных слой для классификации понятно что выход один один Нейрон и как бы вероятность Ну там положительный или отрицательный отзыв А сколько будет входов то есть Какой размер у нас будет подсказка это вот это вот влияе вот сколько слов в нашем случае

то есть Какой размер у нас будет подсказка это вот это вот влияе вот сколько слов в нашем случае слова они все сформируют всё Вот соответственно Мы прям это видите указываем то есть Уно в другую сторону у нас выходов станет ровно в два раза больше мы просто сделаем умножить на два если будет единичка значит единичка всё 16 нейронов потом у нас гиперболический тангенс потом у нас полносвязный слой с одним выходом из нейрона всё Вуаля всё собралось как будто бы да Так здесь Mod description Ну это

с одним выходом из нейрона всё Вуаля всё собралось как будто бы да Так здесь Mod description Ну это какие-то описания Просто если видимо запросить чтобы увидеть всегда статус на дво направленный или однонаправленный вот ну и прямой ход прямой Ход до ужаса простой смотрите поехали прил пришёл текст Да какой-то дальше у нас с вами соответственно этот текст прогоняет через ин Вот Вы на самом деле Можете уже здесь писать прин Да мы с вами можем указать после размерность размерность после сло что то

уже здесь писать прин Да мы с вами можем указать после размерность размерность после сло что то вот так вот с вами укажем это то что мы ровно с вами играли дальше соответственно вот этот вот вот этот X наш с вами Вот этот X возвращаемся опять обратно в наше творение где я рисовал Вот здесь всн мы прошли с вами формируется вот эта вот размерность ВС готови к проходу в Ри сущность он выплёвывает По отдельности каждый То есть он вернёт лист вот из этих вот вещей и вернёт обычно это называется

По отдельности каждый То есть он вернёт лист вот из этих вот вещей и вернёт обычно это называется outputs называют обычно и возвращает конкретно последнее состояние А поэтому мы с вами что берём смотрите мы возьмём только аутпут аутпут А как бы последнее состояние не будем брать Вот забираем hidden States hidden States то есть НН у нас НН возвращаем hidden ссы с каждого прохода Да после каждого слова и вс бы конец не будем забирать пустышку ставим это заглушка кто не видел ни разу заглушка в

слова и вс бы конец не будем забирать пустышку ставим это заглушка кто не видел ни разу заглушка в памяти не сохранится то есть Вер и не сохраняется как-то так да А по факту будет тоже самое только три выхода четыре наверно Даже два списка и два выхода Я честно говоря сам нем Дава пори здесь собственно говоря вот это что есть что параметры те же самые вот это он тотже самый как свободный член включать или нет Потом ба включать первый или нет Если надо вы кстати тоже можете там повязаны слои

включать или нет Потом ба включать первый или нет Если надо вы кстати тоже можете там повязаны слои внутри регу и вот можно посмотреть что вот он апу абсолютно правильно ты говоришь то есть три выхода Вот апу - это у нас соответственно с каждого выхода Да можно посмотреть какой размерности это размер последовательности Да и соответственно для каждого выхода у нас Что это bal - Это два выхода с каждого после каждого слова и соответственно H out - это у нас с вами размер н сайза всё очень логично

после каждого слова и соответственно H out - это у нас с вами размер н сайза всё очень логично да Или мы просто можем взять HN Это понятно что это соответственно Если есть то в два раза ули самое главное это количество слов ещ надо указать и то есть S последний финальный и тоже самое с сейм то есть возвращается три Что брать дело твоё как бы как ты это будешь дальше дело использовать А так ты читайте доку на самом деле привыкнете тут сущности не так много не так много надо просто вот

так ты читайте доку на самом деле привыкнете тут сущности не так много не так много надо просто вот переключить голову на этот язык и всё это вам очень упростит работу дальше эта игрушка ничем не отличающаяся от логистической регрессии просто чуть-чуть больше сущности основных сейчас можно ещё спрошу не понял почему три а нече три потому что все список аутов туда идёт туда идут и Ил ин во флад они разворачиваются Да Дада погоди Почему три а не четыре ты спросил да да да то я думал отдельно

они разворачиваются Да Дада погоди Почему три а не четыре ты спросил да да да то я думал отдельно будет линов отдельно будет ло А я Поня теме эти но видишь значит он не выплёвывает промежуточные то есть только да то не выплёвывает просто как-то так как-то так Итого в принципе вот это всё это начинаются вот эти матричные истории Я их сам в это по-моему разворачиваем сго перев наверно какая-то торская фигня типа там не знаю короче какая-то настройка на уровне как бы именно программирования уже а

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

наш который мы объединили всё то есть на самом деле проход этон ячейка полносвязный слой выход сеть готова сеть готова весов получилось 16385 больше всего весов нам 7744 веса - это им бедин вот эти 7744 на самом деле получается очень легко мы с вами знаем это 32 длина последовательность Во а точнее это размер словаря влияет 968 и надо умножить на 8 правильно для каждого слова во координат 968 у 8 - это 72 плюс там свободные члены так и получается примерно 7700 НН ячейка смотрите сама ячейка

у 8 - это 72 плюс там свободные члены так и получается примерно 7700 НН ячейка смотрите сама ячейка генерить очень мало весов как бы странно это не звучало она меньше всего весов генерить всего 400 весов там всего два полносвязный слоя то есть на самом деле во всей этой архитектуре больше всего как бы Настраивать надо им бедин и полносвязный слой на выходе конкретно здесь конкретно здесь то самый блок дешёвый Если у вас есть если у вас есть ну Если у вас есть динги уже то цена просто не такая

блок дешёвый Если у вас есть если у вас есть ну Если у вас есть динги уже то цена просто не такая большая Как вы видите вообще небольшая очень небольшая даже сказал всё поехали это Мы создали начинаем обучать здесь классика создаём функцию оптимайз и метрику и запускаю й напоминаю йн у меня он вынесен вде фа зэто Что зажать процен все можете в отдель вообще ВС можете по отдельным файлам раскидать А тут оставить простою результат варова себя вот тут это обучающий цикл который вам уже знаком

А тут оставить простою результат варова себя вот тут это обучающий цикл который вам уже знаком ничего нового бежим по Чам и так Дале всё соответственно Давайте посчитаем Давайте укажем две эпохи Чтобы хоть посмотреть сколько мой ма2 будет это дело считать ой пос спа нас конкретно это вот здесь вот потому что Форвард у меня Пошёл Да вот Ну по крайней мере можно Ладно давайте уберём это некрасиво можно на одном элементе конкретном посмотреть То есть конкретно один элемент выборки прогнать давай

можно на одном элементе конкретном посмотреть То есть конкретно один элемент выборки прогнать давай вопрос пока у нас идёт обучение А что мы тут будем смотреть по Метрика Ну у нас здесь бинарная классификация поэтому у меня он у меня вот это как как вот есть в вот также есть pch pch как я вам говорил pch - это отдельная экосистема и он не любит другие типы данных парча очень простая позиция ребят хотите работать внутри нас всё работаем по нашим типам данных если что-то у вас не так меняйте в

хотите работать внутри нас всё работаем по нашим типам данных если что-то у вас не так меняйте в наши типы данных поэтому и метрику считать тоже надо как бы ну по хорошему надо брать из поэтому мы же как бы если опять Опусти на уровень зада мы что се Свами делаем мы классифи отз наложи или отрицательно правильно не забывайте эту историю и как бы вот что-то получилось одной эпохой стали умнее 24 секунды одна Эпоха примерно 12 секунд У меня заняла Ну дальше не будем запускать как бы принцип

24 секунды одна Эпоха примерно 12 секунд У меня заняла Ну дальше не будем запускать как бы принцип понятен запускаете больше эпох смотрите Что к чему выходит теперь СТМ модель запустим Давайте Ну как вы видите на самом деле в лст ничего не меняется вот если не грузиться туда во внутрь то что у нас поменялось вот что у нас добавилось с вами в ме нового кто-нибудь что-нибудь видит новое Я нет как лу Ну S он потягивает так же и схидно да сам да да да да да да да он то задаёт размерность Ту же

лу Ну S он потягивает так же и схидно да сам да да да да да да да он то задаёт размерность Ту же самую размерность Ту же самую вот а так всё всё тоже самое всё тоже самое но всё-таки как бы надо понимать что ребята СТМ особо ой НН классически не используется То есть если говорить про как бы вот про вот эту технологию Да не Трансформеров а рекуррентных сетей то безусловно как бы у всех одна ассоциация это СТМ то есть СТМ доминирующая архитектура СТМ СТМ СТМ СТМ то есть вот вот такой блок и так

это СТМ то есть СТМ доминирующая архитектура СТМ СТМ СТМ СТМ то есть вот вот такой блок и так всё тоже самое Да Кость Давай у тебя ещё вопрос Или ты не опустил Да да да сорян Если я достал сегодня короче а тогда не понимаю в чём смысл стма если у нас в аутпут не идёт сел хотя мы говорим что это клёво долговременно память мы здесь делаем классификацию как раз-таки на атпу которые списком не трогаем эти отдельные получается что он там не участвует никак и и в нашей задаче СТМ равно рна смотри он

эти отдельные получается что он там не участвует никак и и в нашей задаче СТМ равно рна смотри он не участвует как бы по факту В выводе но он позволяет как бы по-другому принципиально обучаться м ну да рнн бы он бы забыл бы что было в начале отзыва а sal State призван держать этот контекст То есть если бы я сказал что предположим отзыв был бы такой фильм потрясающий я ходил туда с такими-то друзьями такого-то числа погода хоть и была нелётная Казалось бы дизморали проче соответственно Ну то

такого-то числа погода хоть и была нелётная Казалось бы дизморали проче соответственно Ну то есть как бы мой по факту ревю хорошее вернон бы забыла про это Она бы увидела слово дизмораль и сказала бы что всё отрицательно призван как ну помочь попробовать решить эту проблему Ну и как как бы эмпирические вычисления показали что СТМ дал большой бу относительно это вообще на самом деле творческая история Вы можете свою свою придумать идею выложить статью и может быть её потом напишут наче вашу

история Вы можете свою свою придумать идею выложить статью и может быть её потом напишут наче вашу архитектуру ты в на мы пока ниче не написали е кроме са Обмани меня Ну ладно ещ такой вопрос был А когда тогда используем одиночные выводы выходы Да ты на самом деле для классификации можешь попробовать одиночные выводы вывести кстати будет проще вычислений будет меньше ну где-то там для генерации чего-то могут быть боле послед выходы манипулировать можно но с помою можеш генерировать вообще

чего-то могут быть боле послед выходы манипулировать можно но с помою можеш генерировать вообще говоря текст тоже да Ну по поводу генера мы ещ не говорили но вообще это возможно типа просто генерить новые Инги и соответственно выбирать оптимальные Инги То бишь оптимальные слова в словаре поэтому как бы по другие задачи может подойти более другой вариант А по-моему Паша говорил что здесь два варианта рассматривать Я точно не помню вот смотри но мы опять берём А все элементы боча а последни ан

рассматривать Я точно не помню вот смотри но мы опять берём А все элементы боча а последни ан все элементы последнего H вот смотри вот здесь в астме Паша подругому взял там мы взяли всё А здесь мы взяли именно последний кстати вот ответ на твой вопрос то есть двумя разными подходами посмотрели всё остальное ребят то же самое да то есть eding lstm B directional модуль классификации прикрутили и поехали прогнали через динги прогнали через взяли только последний hidden State взяли Ну тут что-то

поехали прогнали через динги прогнали через взяли только последний hidden State взяли Ну тут что-то взяли последня а нет кстати нет Паша более сложным способом он взял последний слой Но из всех Я так понял но взял Он последний имен тут прописал он да Что имеется в виду какая размерность То есть все элементы Бача взять последний S State и все элементы последнего то есть ну сам Вектор грубо говоря всё дальше через классификацию что у нас здесь по весам Тут ничего особо не поменялось Хотя нет

всё дальше через классификацию что у нас здесь по весам Тут ничего особо не поменялось Хотя нет тут-то существенно поменялось Теперь мы берём только один hidden State поэтому гораздо меньше в полно связанном слое учить самый СТМ блок требует больше ресурсов по понятным причинам там не два полно связаных слова а аж четыре внутри вот Ну и всё запускаем оптимайз обучаем опускаем а обучаем и смотрим Что у нас получилось Ну тут одна Эпоха я по времени Сравни у меня стоит Д или один по-моему у меня

Что у нас получилось Ну тут одна Эпоха я по времени Сравни у меня стоит Д или один по-моему у меня два стоит Ну вот можно посмотреть будет ну чуть подольше обучались опять же надо смотреть может быть точность на самом деле здесь сильно не будет отличаться Да потому что данные достаточно простые может справиться но как бы Неру судить сечас не будем ждать тратить на это время так используем функцию для присн отдельной строки так что мы взяли вот Great Movie Да мы хотим предсказать эту историю это

для присн отдельной строки так что мы взяли вот Great Movie Да мы хотим предсказать эту историю это уже короче тут мы смотрим inference модели Понятно inference модели так Great Movie соответственно А здесь мы берём из нашей настройки Ну короче берём последовательность длину чтобы динг сделать Да и wup to in Нам нужен для чего чтобы получить токены всё просто и вот он ADE Movie заезжает 0048 ну потому что у на если мне память не изменяет 50 А нет она 32 обманываю значит 30 нуле и два последних

что у на если мне память не изменяет 50 А нет она 32 обманываю значит 30 нуле и два последних слова Вот у нас помните в словаре самое часто встречающееся слово было поэтому имеет единичный как бы номер а имеет пятнадцатый всё получилось вот это всё уже готово идти в Какой слой голуба у нас специалист поэтому слой все вопрос тебя с ним были связа Какой слой в этот короче кото блин [музыка] шифрует же смелы специалист Да вот эти вот бы всё приходит в динг если мы прогнали бы только через этот

же смелы специалист Да вот эти вот бы всё приходит в динг если мы прогнали бы только через этот слой динга то мы бы как раз таки получили что вот этот но модели на режим оценки что у нас здесь с вами здесь ещё один при процессинг так вот pred review наверное здесь что у нас здесь с вами происходит Давайте разбираться всё же последние две-три ячейки predict [музыка] review так берётся элемент выборки sle Дальше он подгоняется нужной размерности и прогоняет через сигмой короче выводится две

выборки sle Дальше он подгоняется нужной размерности и прогоняет через сигмой короче выводится две пробили а ну тут видимо Паша просто показал пример двух Паша показал просто пример двух каких-то случайных последовательностей А вот здесь два полноценных отзыва и мы что с ними делаем так и какая-то ошибка у нас с вами так на таких случаях понять где мы упали то есть Давайте вот сюда пром вот у меня прил даже а нет СМЛ печатает значит ошибка где-то внутри где-то внутри Блин надо поиграться с

меня прил даже а нет СМЛ печатает значит ошибка где-то внутри где-то внутри Блин надо поиграться с размерность что здесь не так тут ошибка нехарактерная нифига не понятно а связана с типами данных а где он идес использовал А причём смотрите он именно в лст упал то есть НН давайте я пока сейчас это опущу этот момент попробуем запустить получится у нас с вами запустить без стма вот так вот попробуем запустить Он не видит комментарии так со скобками не то да мне ну кавычки с кавычками Да точнее

запустить Он не видит комментарии так со скобками не то да мне ну кавычки с кавычками Да точнее всё нет тоже падает Блин ну тут надо уже глубже разбираться глуб разбираться что-то падает с размер Можно конечно как бы вот я в таких ситуациях начинаешь смотреть по шагам шагам типа sle sle точ А кстати у нас вообще какой тип данных у сла вот этого получается T короче sle я думаю что размер Бут без проблем потом мы переносим на нужный девайс А по скобка что у нас скорее всего вот здесь падает

без проблем потом мы переносим на нужный девайс А по скобка что у нас скорее всего вот здесь падает Давайте попробуем Вот здесь Да вот он её не выводит он её не выводит значит падает именно там А почему у нас будет у меня CPU типа мы переносим на пу но падает здесь вот падает Вот где-то вот здесь падает то есть падает где-то здесь скорее всего можно бы прописать типа после изменения размерности соответственно и выведем сюда так прос изменения размерности всё вот он навесил эту размерность всё

соответственно и выведем сюда так прос изменения размерности всё вот он навесил эту размерность всё правильно это просто типа что один элемент выборки стал всё корректно А вот именно сама модель падает Ну скорее всего я думаю что это связано знаете с чем Давайте сюда поставим точка D тайпа по-моему так наверное пишется это Flow 32 Я думаю что связано что-то с размерностей даже на самом деле Дальше можно пойти дальше в таких случаях у меня же есть как бы модель модель Да а как она у меня там

можно пойти дальше в таких случаях у меня же есть как бы модель модель Да а как она у меня там называется мол Ну например rnn и можно вытаскивать какой-то конкретный слой например прогонять через слой то есть и вот сюда ВН Давайте ЕС Вот это мы подадим равно и сделаем точка Как там пишется то есть это добавить размерность в нулевую координату всё получается что вот у нас с вами Вот УВО динг вот им бедин начинает падать Да Серёж Какой у тебя вопрос сразу же я блин я вот так давно повесил Я уже

им бедин начинает падать Да Серёж Какой у тебя вопрос сразу же я блин я вот так давно повесил Я уже забыл сейчас я вспомню скажу я просто не могу понять что за ошибка сразу же ожидаемый аргумент для тензора первый индексы А почему у нас не индексы то Ну хорошо А что у меня не индекс СМЛ ноль элемент мой нулевой вроде всё правильно а скалярных значений полу вот он пишет что получил что ещ раз он получил ожидал это вот вот эти значения чтобы они были итоми а не флотов скими может быть Давайте

получил ожидал это вот вот эти значения чтобы они были итоми а не флотов скими может быть Давайте попробуем это сделать вот здесь вот у меня этот сэмпл есть вот этот сейчас надо только вспомнить как это всё преобразовать в in то есть вот точка in может быть как-то можно сделать списку сейчас пробуем этот наверное типа torch D Type int точка Может быть Вот так прописать типа вот так вот Давайте пропишет [музыка] соответственно у меня а вот эту ту вот эту штуку сечас сечас сначала чтобы

пропишет [музыка] соответственно у меня а вот эту ту вот эту штуку сечас сечас сначала чтобы заработало у нас с вами Вот такой и мы с вами сделаем ещ и укажем вот такой всё вот он сечас прил и сохраним это в и сделаем точка вот здесь вот Надеюсь что Сейчас заработает И пройдёт у нас через ВС то сечас У нас корректный 32 Так ну мы можем с вами отдельно как мы сделали через прогнать бем нашу модель неважно и туда на вход напоминаю первый слой то есть мы подаём как раз таки вот этот вот нашл вот в

неважно и туда на вход напоминаю первый слой то есть мы подаём как раз таки вот этот вот нашл вот в таком виде то есть Давайте попробуем его закинуть всё пошла жара хорошо А это я через всю сеть прогнал То есть я уже получил вероятность Да получил вероятность А у меня на выходе здесь мы с вами могли бы сделать [музыка] А что мы могли бы с вами сделать если вы хотите каждый слой да то есть Вот например Дин хотим подаём СМЛ Да вот Обратите внимание и вот она размерность Какая ещё раз давайте

например Дин хотим подаём СМЛ Да вот Обратите внимание и вот она размерность Какая ещё раз давайте финальная тренировочка Ну ба size умножить на sequence L умножить на забыл eding size Как называется так Давайте проверим то то и получили с вами Вот ну в моём случае один элемент выборки подал Поэтому меня ра 32 это у нас длина последовательность и соответственно смотрите вот например слово 2 Да у нас вот Я бы мог вытащить ин этого слова посмотреть его напр мне взять надо было бы Минус один

Да у нас вот Я бы мог вытащить ин этого слова посмотреть его напр мне взять надо было бы Минус один последнее слово и все его восемь кардинал вот инг слова M восемь координат непонятно что это за восемь координат понимает только это рнн никто из людей ни фига это не понимает Ну какие-то цифры какие-то цифры всё что вы можем сказать ан скзи - Это потому что у нас одна фраза Да ан скзи чтобы вот навесить вот эту дада да да чтобы потому что одна фраза правильно Да с Да я вспомнил что хотел

вот навесить вот эту дада да да чтобы потому что одна фраза правильно Да с Да я вспомнил что хотел спросить в нашей реализации Сейчас если мы в и инфе пишем свой текст Если вдруг мы пишем слово которого нет в словаре мы вылетаем с ошибкой сразу потому что мы б никому не сделаем а по-хорошему Да ты правильно говоришь Ну по-моему у Паши здесь динг написан Так что слова которые которых нет они удалятся у тебя а О это Кай то есть не знаю отличная кинокартина вот кинокартин у тебя не будет Оно

удалятся у тебя а О это Кай то есть не знаю отличная кинокартина вот кинокартин у тебя не будет Оно просто дропнется это слово то есть ошибки не будет на этапе динга обработает Но это как бы дело твоё по факту то есть ты хороший на самом деле телом тему поднял потому что как бы бывают слова за пределами словарей и их как-то надо обрабатывать поэтому к ним надо как-то подступах надо динг посмотреть Ну что ж вроде всё мы с вами варили вот динг Дальше можно посмотреть что это Когда пройдёт через

Ну что ж вроде всё мы с вами варили вот динг Дальше можно посмотреть что это Когда пройдёт через рнн также ой через это через Ну да Через н или через СТМ я вам Настоятельно рекомендую периодически хотя бы при первых запусках разочек прогнать Потому что когда вы поймёте то вы увидите что здесь на самом деле блин а Всё достаточно верхнеуровнево несложно просто понять три-четыре ключевые сущности Кто как куда проходит и всё Поэтому будет неплохо Так ну Дик review можно соответственно теперь это

Кто как куда проходит и всё Поэтому будет неплохо Так ну Дик review можно соответственно теперь это раскомментировать но только нам надо сюда с вами навесить вот эти приколы которые мы сделали да то есть вот так вот ещё вот эту строчку сюда включим Вот вот теперь должно заработать Так что ещё надо сделать нам нам надо вот эту штуку сюда включить указать что это для убрать по идее можно убрать по идее не почему нужен будет здесь хорошему я понял в ЧМ г был как бы конкретно что полу у на какието

идее не почему нужен будет здесь хорошему я понял в ЧМ г был как бы конкретно что полу у на какието принты с вами стоят Да это вот это то что мы включали давайте это урм и получили вот такие предсказания что это за предсказания пытаюсь понять я а здесь смотрите здесь не один текст я думал это один текст это Пять элементов выборки позитивных пять негатив СТМ тоже 5 из п но на тоненького Кстати лучше сработал Да а на отрицательных отзывах СТМ 5 из п а rn уже посыпался немножечко две ошибки будут

сработал Да а на отрицательных отзывах СТМ 5 из п а rn уже посыпался немножечко две ошибки будут если у нас трешхолд 05 понятно да что здесь произошло Ну в принципе вот и всё вот и всё интерпретации не очень понятно по-моему там что-то не очень на негатив Ну согласен с тобой две ошибки Ну метрики можно посчитать метрики здесь именно не посчитано графики Ну видимо эту вкусняшку Паша для вас оставил что графики построили Ну в принципе как бы я говорю если просто возьмёте и всё вставить всё

оставил что графики построили Ну в принципе как бы я говорю если просто возьмёте и всё вставить всё заработает обязательно всё заработает ВМ нужно время с этим надо с этим Конечно надо переспать однозначно но запустить Если всё запустите то всё будет работать вот такую сложную тему мы с вами подняли но градус будет на самом деле повышаться на этой неделе вот то есть можно на самом деле абстрагироваться до такого уровня что мы с вами сегодня сли поф факты мы с вами запустили просто новый селм

до такого уровня что мы с вами сегодня сли поф факты мы с вами запустили просто новый селм всё всё остальное контекст глобально мы одну строчку кода взяли S Так что Старайтесь вот себя вот На таком уровне держать где-то чуть-чуть конечно поковырять внутри Но если как бы о конечной цели говорит мы классифицировали текст Для этого взяли просто ячейку СТМ Когда у вас всё уляжется в голове внутри вы будете просто оперировать именно этой историей есть СТ модель и всё и ничего больше знать не надо

будете просто оперировать именно этой историей есть СТ модель и всё и ничего больше знать не надо расскажем в пятницу на проекте как это было Изи с деплоя там всё такое да Так дальше дальше дальше Давайте посмотрим тогда ваше задание что вас сегодня ждёт А так у вас будет какой-то датасет а так тот же самый дата се Так стоп что это решение ОТК не не решение ще ре Ну скорее всего это как бы для вас типа подсказок как бы Костяк для вас собран А вам в этом коке надо подраться и менять у нас hidden

типа подсказок как бы Костяк для вас собран А вам в этом коке надо подраться и менять у нас hidden size точнее Да был 32 размер динг слоя был 16 нужно всё будет поменять здесь задать функцию потерь оптимизатора и реализовать обучающий цикл ну как бы это то что у меня было вынесено в трей в отдельный файл можете также его импортировать просто распечатать кривые обучения Ну я говорю что Паше вам это оставит вкусненькое а реализовать кривые и соответственно историю метрик Ну тоже У вас всё есть в

оставит вкусненькое а реализовать кривые и соответственно историю метрик Ну тоже У вас всё есть в принципе это же всё модульно понимаете да то есть как бы просто взять цепанул с прошлых заданий Ну немножко как бы смазать вот этот вот соединение и всё по факту так а задание д СТМ здесь видимо пример как это выглядит Да создать примерный результат должен выглядеть так Абсолютно верно и дальше Вот ваше задание то есть нужно создать тут немножко с Динго поиграться короче добить Ну и для тех кто

ваше задание то есть нужно создать тут немножко с Динго поиграться короче добить Ну и для тех кто любимая да Для тех кто выживет можете перейти к заданию четыре как-то так Какие остались вопросы сердце заболело Что попить Можно жёстко жёстко Я сам чувствую что жёстко имеется в виду что много представляю ваши сейчас эти Так сказать восприятие Ну ничего пять раз Напишите нормально будет у вас ещё целых 5 дней это понять Так что воле неволе поймёте там мелкий вопрос Когда запустила первую ячейку

целых 5 дней это понять Так что воле неволе поймёте там мелкий вопрос Когда запустила первую ячейку там лтк выдал проблему библиотека вот там какой-то импорт странный с те надо подгрузить ского типа вот этих по умолчанию стоп слов в словарей нету тебе надо через Иста их подтянуть туда он там в ошибке пишет Конкретно что нужно типа запустить чтобы всё работало вниз там Спустись Ну хорошо Ну ВС тогда и помните сущностями рассуждаете есть есть есть есть е и вот эти ребята просто как-то

Ну ВС тогда и помните сущностями рассуждаете есть есть есть есть е и вот эти ребята просто как-то договариваются между собой что ВС это вокально потянет или на Поня у вас девайс будет равно куда а этот гипер памет включён Вот м видеокарта пожалуйста на видеокарте запускайте Всё тогда давайте а ещё вопрос а этот девайс равно куда это на маках не работает да Ну там Ну смотря какой Мак у меня не работает а Ну кстати даже по-моему на маках даже свежих там никуда а MS называется по-моему по-другому

а Ну кстати даже по-моему на маках даже свежих там никуда а MS называется по-моему по-другому немножко подключение видео мощностей Поэтому да Люба будем выживать с тобой на куде ой на этом на Пу на на Мак всё равно очень хорошо оптимизирован есть такой прикол Короче я запускал виртуальную машину вот здесь у меня ма у него 8 ГБ оперативной памяти я запускал короче на виртуальной машине в которой оперативной памяти в разы больше там поему 48 и мощности процессоров не уступающие и при этом модели

памяти в разы больше там поему 48 и мощности процессоров не уступающие и при этом модели кото будем проходить с вами в среду был быстрее на ма Парадокс Хотя позволял гораздо больше вместить и вроде все ресурсы говорят об этом но это вот именно сам на уровне оптимизации железа очень хорош очень хорош что выигрывал даже машите хорошо отдохните Остановитесь и в бой Давайте на связи хорошего дня пока-пока

Доброе утро всем Рад вас видеть в буром здраве у нас небольшая ротация Так что эту недельку вновь мы с вами проведём меня слышно хорошо Это я в таком месте где интернет может периодически подводить так кого у нас ещё нет Дмитрия и кого-то ещё Да поему минутку подождём тогда и начнём мы довели Пашу он отказался от нас не всё в порядке всё хорошо Наташу на лекциях вообще 100 лет не видел получается с бордах времён с каких-то очень бана ладно Ну что будем тогда начинать потихоньку будем начинать

с бордах времён с каких-то очень бана ладно Ну что будем тогда начинать потихоньку будем начинать Кто не успел тот опоздал неделя вас ждёт интересная впереди Но такая весьма короче будет требовать от вас достаточно большого погружения и может на фоне показаться Ну чуточку посложнее наверное чем всё остальное Потому что так оно и есть Так так так видно видно мою Отлично На этой неделе пойдёт так или иначе работа с текстом Если вы помните Мы немножко с вами текст щупа причём как раз таки со мной

иначе работа с текстом Если вы помните Мы немножко с вами текст щупа причём как раз таки со мной помните Когда это было у нас с вами была кластеризация текстов поговорили первично можно обрабатывать текст как его можно оцифровывать и дальнейшие это как бы хороший способ работы Но наверно не лучше в плане точности особенно когда есть мощности там было написано рекуррентно неровные сети я вам говорю что когда-то когда-то вы дойдёте до этого вот собственно говоря когда-то и пришло когда-то и

говорю что когда-то когда-то вы дойдёте до этого вот собственно говоря когда-то и пришло когда-то и пришло вот та самая неделя неделя связана с текстом вот мы пойдём с вами От простого к сложному сегодня проговори на задний фон но тем не менее ещё достаточно ресурсные ну короче там в контексте расскажу что имею в виду так сегодня сфера применения рекуррентных сетей архитектура рекуррентных слоёв это н СТМ и немножко про г то есть НН - это вообще база в принципе с чего всё как бы Начинается да

это н СТМ и немножко про г то есть НН - это вообще база в принципе с чего всё как бы Начинается да идея рекуррентно нейронной сети рекуррентно нейронной сети потом СТМ как её улучшение именно на СТ мы сегодня с вами больше всего Будем иметь акцент вот ну и немножко затронем ещ Другой взгляд на архитектуру не будем запускать просто зна что о будет существовать далее проговори про достаточно важная история в тексте отвечает за Как вы думаете что или аналог только уже ну как бы Невой то есть с

история в тексте отвечает за Как вы думаете что или аналог только уже ну как бы Невой то есть с помою нете будем текст переводить циф Да мама раму этоже можно-то представить каких-то цифрах Вот собст это отвечает он будет под разным углом буде смотреть но так он будет как бы одно из составляющий не точно также будет обучаться и получать какие-то свои представления ция тек вот что ещ можно сказать ранее мы с вами сталкивались вот в основном с такой архитектурой да Ну вы с Пашей сталкивались Ну и

ранее мы с вами сталкивались вот в основном с такой архитектурой да Ну вы с Пашей сталкивались Ну и в целом машино обучение фаза О это вот такой взгляд на данные То есть у нас есть с вами какой-то вход какой-то есть вход соответственно мы требуем какой-то Выход Да здесь внутри происходят какие-то функционально вание чтото меняется вставляем одно к одно наме пое лас на этой картинке Да вы по эти табличные данные вы получаете не знаю регрессионную метку или что-то ещё вот но часто как бы

по эти табличные данные вы получаете не знаю регрессионную метку или что-то ещё вот но часто как бы архитектурное составление да Или сам сама концепция задачи требует немножко другого подхода вот А например вот есть такой взгляд One to Many что здесь на вход подаётся вот под такую как бы вот один вход и например много-много выходов Как вы думаете Это вот что вам в голову приходит классификация какая-нибудь Ну например ну типа картинка на вход и классификация картинки на выход Ну давайте

какая-нибудь Ну например ну типа картинка на вход и классификация картинки на выход Ну давайте смотрите вот моде да то есть вот это собственно говоря Будем считать что это наша модель Вот я ей подаю картинку что о мне выдаёт чтобы я понял что у неё несколько выходов действительно локализация плюс классификация Ну типа где риант даже хороший единственно Наверное это не совсем попадает под эту картину потому что вот здесь как раз-таки возникает суть рекуррентно или возникновения

под эту картину потому что вот здесь как раз-таки возникает суть рекуррентно или возникновения последовательности да То есть в принципе в задаче Вот которую серо сказал Да там из кою Vision где мы как бы [музыка] локализуется Да ну и соответственно здесь там не знаю красная машина на фоне чего-то да красная машина на там и может быть дальше на фоне и бла-бла-бла то есть здесь один выход - это одно слово и мы дальше с вами поймём что примерно так Это и будет работать одно одно слово Ну в нашем

слово и мы дальше с вами поймём что примерно так Это и будет работать одно одно слово Ну в нашем случае это ещё и один токен будет Мы будем более вероятност там их выплёвывать Ну и короче формировать какую-то последовательность вот здесь как бы я не могу взять на и поставить на первое место да на красной машине это уже будет менять суть а возможно вообще исказить представление то есть появляется некая последовательная вот рекуррентно это и есть последовательное и вот сам рекуррентный блок будет

последовательная вот рекуррентно это и есть последовательное и вот сам рекуррентный блок будет как-то Вот так происходить то есть что-то подаётся на вход мы что-то получили первое выплюнуть какую-то информацию отдали Дальше второе выплюнуть выплюнул архитектура например Many to one что что сюда подойдёт например Давайте подумаем С вами Ну бинарная классификация подойдёт или несколько слов одна картинка Ну бинарная классификация наверное не подойдёт Почему Потому что хорошо даже я представил что

Ну бинарная классификация наверное не подойдёт Почему Потому что хорошо даже я представил что у тебя фичи у тебя фичи так по отдельности идут но как сказать они не обрабатываются вот так вот рекуррентно внутри что е какие варианты второй лю Что ты сказала слушал несколько слов на выходе одна картинка да да ну самые популярные жр Да дали и так далее сгенерируйте так-то соответственно и вы вы получаете один объект одно изображение вот Ну потом возможно ещё варианты другие То есть например вот

один объект одно изображение вот Ну потом возможно ещё варианты другие То есть например вот такая последовательность да А где у нас такая последно с вами Может быть ты временные ряды что ли здесь сидят Или нет абсолютно кажется не временные ряды подходят действительно вообще рекуррентные сети мы с вами поговорим Я кстати когда были у нас временны ряды то тоже это прописано у меня в слайдах что они достаточно конкурентно способны Но это один из вариантов даже не знаю В каком-то смысле типа дать

достаточно конкурентно способны Но это один из вариантов даже не знаю В каком-то смысле типа дать неровно текст чтобы она его продолжала да то есть я говорю входную фразу а она что-то говорит дальше то это вот тоже попадает под эту архитектуру под этот вариант вот мы Ну и вот собственно и там на самом деле е можно разновидности разные придумывать это такой вольный способ да Ну например Здесь здесь что может быть у нас Ну например я говорю Мама Мыло раму Да мама мыла раму Можно Можно с вами нам

что может быть у нас Ну например я говорю Мама Мыло раму Да мама мыла раму Можно Можно с вами нам например есть задача определение части речи части речи ижму Слот информа пере можно да например если здесь у меня стояло существительное подлежащее Ну наверное на втором месте менее вероятно будет существительно более вероятно особенно там если мы берём английский язык да а более вероятно там увидеть глагол или что-то ещё вот как-то так как-то Так мы сегодня с вами Ну то есть тексты принципе могут

глагол или что-то ещё вот как-то так как-то Так мы сегодня с вами Ну то есть тексты принципе могут так или иначе работать со всеми вариантами которые здесь есть мы с вами будем работать сегодня именно на практике посмотрим вот эту будет классификация текста то есть есть Входная последовательность Нам необходимо будет отнести е классу Да достаточно важная задача пример классифицировать негативный комментарий или позитивный может быть у вас Като вы хотите как-то автоматизировать модерацию вашего

комментарий или позитивный может быть у вас Като вы хотите как-то автоматизировать модерацию вашего там T канала или какого-то ещё источника Да вот вопросики Отлично тогда идём дальше А ну вот применение вот этой вот сама идея н бы сказа чева вот эре кото видите есть Вот вы уже можно как слой воспринимать вот реально как слой воспринимать У вас есть смотрите може какие слои проходили полно связанные слои свёрточные слои правильно но когда как бы объект проходил через него какой-то объект

связанные слои свёрточные слои правильно но когда как бы объект проходил через него какой-то объект выборки вы всё на этом заканчивали а рекуррентно будет идея в том что какой-то объект выборки пройдёт и вот эта информация помимо того что может выйти она ещё и пойдёт для следующего объекта Вот она как бы рекуррентно и возникает и поэтому самое главное самая главная идея курент заключается в этих стрелочка Вот в этих стрелочка А тут сейчас будет какая-то магия или какие-то обычные преобразования

Вот в этих стрелочка А тут сейчас будет какая-то магия или какие-то обычные преобразования которые нам с вами знакомы как бы там полно связаные слои просто вот сам контекст курент это что вот всё будет проходить это эта ячейка вы поймёте она вообще одна и та же одна и та же и всё вот там первое слово проходит через эту ячейку второе третье вот Оноре возможно применение с помою можно генерировать текст почему бы нет Если вы так обучите да соответственно Какие Проблемы создавать новый текст

текст почему бы нет Если вы так обучите да соответственно Какие Проблемы создавать новый текст наперёд генерировать новые токены Да Далее классификация текста Ну опять же Какие проблемы разме текст Да этот текст как-то оцифровать но Попробуйте его классифицировать определение частей речи зада про которую проговорил она бы Например подошла под эту архитектуру Ларе задачей обнаружения именованных сущностей называется нер Да name entity recognition нервы услышите её чаще А в чём суть её Ну

сущностей называется нер Да name entity recognition нервы услышите её чаще А в чём суть её Ну например не знаю когда мы с вами слышим Москва что мы понимаем с вами под Москвой Ну это город да то есть это вообще географическая какая-то координата вот как бы определение именованных сущностей Это в каком-то смысле некая такая интерпретация которая может стоять за словом а чаще там за словом собственным не нарицательным чаще там за словом собственным Вот Но мы её трогать не будем вроде как не помню

не нарицательным чаще там за словом собственным Вот Но мы её трогать не будем вроде как не помню точно так и соответственно sequence SE to SE SE to SE а sequence to sequence Ну тоже собственно Гоя это поставили ВС грым тут название как бы само за себя говорит вот ну что ж теперь начинаем погружаться вовнутрь начинается будем обсуждать с вами Как устроен Как устроен Как устроена рекуррентная ячейка пойдём от верхнего к нижнему то есть будем сначала смотреть Верхне уровне и потом спускаться всё

пойдём от верхнего к нижнему то есть будем сначала смотреть Верхне уровне и потом спускаться всё чуть глубже глубже глубже пока что мы с вами Вот НН у меня на этой схеме нарисовано НН у меня на этой схеме нарисовано пока что как бы то что внутри там происходит не обсуждаем пока чуть-чуть абстрагируйся от этого и будем воспринимать что там происходят какие-то числовые Ну какие-то преобразования короче какие-то преобразования и соответственно предположим У меня есть последовательность мы её с

короче какие-то преобразования и соответственно предположим У меня есть последовательность мы её с вами хотим закодировать например отзыв на фильм Да кто-то пишет там Это отличный фильм и не знаю что ещё Ну это отличный фильм Пусть будет лайк если у нас будет такое слово в словаре Ну пусть так там пунктуацию убрал ВС Это отличный фильм понятно что это положитель положительный класс да должен быть что это хорошая хороший отзыв Ну вот соответственно как всё это начинает обрабатываться приходит

что это хорошая хороший отзыв Ну вот соответственно как всё это начинает обрабатываться приходит первое слово То есть у нас каждое слово с вами есть но это слово оно вот в таком виде не может прийти правильно это Ну то есть буквы же мы не можем подать в архитектуру Да где у нас преобразование слой о НМ мы поговорим чуть позже пока помните Да что мы идм сверху вниз соответственно пока воспринимаем что у нас есть какое-то векторное представление слово векторное представление слова оно уже

что у нас есть какое-то векторное представление слово векторное представление слова оно уже закодировано это слово приходит в рекуррентную ячейку помимо этого в рекуррентную ячейку ещё будет приходить Вот ещё один Вектор ещё один Вектор который называется h0 или его называют или скрытое состояние ячейки будет переходящим И как вы думаете В чём его суть учитывая что я вам ещё дам такой комментарий что вот этот НН Это если что одно и тоже То есть это одна и та же ячейка просто её нужно Ctrl C ctr

что вот этот НН Это если что одно и тоже То есть это одна и та же ячейка просто её нужно Ctrl C ctr В прямом смысле одна ячейка с одними и теми же весами внутри понятно Вот И тогда такой к вам вопрос Как вы думаете В чём суть вот этого хита какой-нибудь свободный член в контексте может быть вот память память уже уже хорошо уже хорошо пошло действительно память потому что вот например Когда будет приходить какое-нибудь слово фильм по-хорошему в тексте можно как бы ну понимать контекст Что к чему

какое-нибудь слово фильм по-хорошему в тексте можно как бы ну понимать контекст Что к чему Да и мы с Вами тоже как люди в каком-то смысле воспринимаем вот каждая фраза говорится говорится говорится говорится и то что я говорил до этого как-то у вас в голове лежит правильно тут та же самая история Мы попытаемся это оцифровать получается что в каждую якут приходить новое слово как новая информа состояния как попытка сохранить старый контекст там происходит Magic какой-то и выходит рекуррентная

как попытка сохранить старый контекст там происходит Magic какой-то и выходит рекуррентная ячейка нам возвращает скрытое состояние далее так устроено рекуррентные сети Ну вы увидите что собственно говоря как бы они выплёвывают вот эти вот выходы с каждого слова с каждого Ну да с каждого слова как бы этом не ВС уходит дасть он те поро информацию об этом слове согласны ну что-то он её как-то обрабатывал он как-то агрегировать эту информацию приходит Ещё новое слово отличный в нашем случае теперь

он как-то агрегировать эту информацию приходит Ещё новое слово отличный в нашем случае теперь они вместе как-то мчатся А и идут дальше формируется Вектор H2 по-хорошему он как бы знает слово отличный знает слово это этот Вектор идёт опять в эту рекуррентную ячейку здесь у нас с вами ещё одно слово выходы опять также выплёвывают Ну в общем вот так вот Вот в этом-то и есть рекуррентно да то есть рекуррентно все слова проходят через одну и ту же ячейку и в итоге у нас с вами формируется тут

рекуррентно все слова проходят через одну и ту же ячейку и в итоге у нас с вами формируется тут какой-то Вектор вам это будет возвращаться Да вектором Вектор скрытых состояний так и называется там H1 H2 бла-бла-бла HN Вот и ещё соответственно будет выплёвывать выход выход Ну выход последний Я имею в виду то есть его тоже можно забирать АТ и бы просто забирать именно последних есть разные варианты даже на самом деле как бы архитектуру классификации можем построить исходя из последнего можем

даже на самом деле как бы архитектуру классификации можем построить исходя из последнего можем Исходя из этого это уже крепление плано связанных слоёв и так далее но вот первичная логика такая то есть мы пытаемся удержать контекст текста с помощью нашего н стейта или такой небольшой механизма памяти Да причём hidden State - это из себя представляет Вектор то есть смотрите вот это Вектор у него есть своя размерность мы её будем в явном виде указывать Вот это вектор у него есть своя размерность

своя размерность мы её будем в явном виде указывать Вот это вектор у него есть своя размерность мы её будем в явном виде указывать То есть все эти вещи указываются вот понятно что чем больше размерность вот этого тем как бы вы больше сможете хранить информации различной правильно Представьте что был бы один то вы как бы всю информацию хранили бы на одной числовой прямой уже как бы ну это очень сложно было бы закодировать ихни суп вока дёшево вычислять вообще все эти текстовые истории поэтому

сложно было бы закодировать ихни суп вока дёшево вычислять вообще все эти текстовые истории поэтому тут такой баланс между двумя вещами но просто как бы чуть-чуть я начинаю опускаться с уровня абстракции слов на уровень цифр воспринимаете что hidden State - это вектор и динг слова Да это тоже Вектор у них есть своя размерность и это нам надо будет в явном виде указывать и это наши гиперпараметры которые вообще говоря можно даже не знаю затюнить было Если у вас были бы бесконечные ресурсы Ну по

которые вообще говоря можно даже не знаю затюнить было Если у вас были бы бесконечные ресурсы Ну по крайней мере Попробуй подобрать пощупать что из этого подойдёт так Давайте вопрос наст Ну я вот как раз хотела про размерность размерности спросить можно на этих примерах Как соотносится размерность и Ну просто какая размерность относительно длины текста относительно количества слов мы на примере Посмотрим это это всё на самом деле зависит очень сильно зависит от задачи в том числе чем сложнее

Посмотрим это это всё на самом деле зависит очень сильно зависит от задачи в том числе чем сложнее задача тем чем больше инф тебе нужно сохранять чем длиннее последова тем логичнее его ставить больше мы я не помню сколько там Будем ставить или 64 то есть ответа сразу скажу ответа правильного нету то есть его никто там меняется Ты сказала Да я просто к тому что в принципе как об этом мыслить эта размерность она опирается на какие факторы на факторы твоей мощности на самом деле и не боле Ну как

размерность она опирается на какие факторы на факторы твоей мощности на самом деле и не боле Ну как бы нет они все воедино работают то есть они имеют некую совокупность но давай когда у нас код будет Мы это обсудим пока что воспринимай пока что воспринимаю что это Вектор хранения информации То есть это как наш мозг память боль Да просто я просто спрашиваю это чисто для понимания этой схемки Потому что сейчас пока Ну Като Вектор Ну вос пока что он 32 и этот Пусть тоже будет Ну хорошо этот будет

что сейчас пока Ну Като Вектор Ну вос пока что он 32 и этот Пусть тоже будет Ну хорошо этот будет Пусть 16 вот так то есть размерность вот чки вверх h12 пунктир это выходы этой сетки да да абсолютно то есть они входят с этой ячейки и как бы сама вот сама архитектура будет как бы с каждого вот как Как вы думаете длина вот этого вектора Чему равна Ну количество сов там ло количество входов тоже наш гипер параметр называется sequence L А спасибо Дмитрий посветил нам ещё один гиперпараметры вот

наш гипер параметр называется sequence L А спасибо Дмитрий посветил нам ещё один гиперпараметры вот получается что как бы каждая курент ячейка действительно выплёвывает в скрытое состояние эти скрытые состояния вот как бы можно все забрать А можно забрать только последнее как бы он возвращать будет и то и то а здесь получается что у H1 возвращает там первое слово H2 возвращает там Это отличный ну какой-то там переработку Да H3 возвращает Это отличный фильм Да и последний возвращается полно ложе

какой-то там переработку Да H3 возвращает Это отличный фильм Да и последний возвращается полно ложе содержащую да то есть Вектор который как-то вроде [музыка] агрегированные ячейки это наш следующий слайд Вот но я хотел даже больше типа собственно говоря вот что на вход тоже всё обсудим здесь там далее вот а h0 - это всё инпуты И вот аутпут аутпут то есть отдельно каждый слой будет у нас с вами и H HN - это последний слой последний слой Ну пока блин ладно тут зря показал немножко нагружена для

H HN - это последний слой последний слой Ну пока блин ладно тут зря показал немножко нагружена для нас информация так так так так так что я ещё хотел м сказать а на первом слове Как вы думаете h0 что из себя представляет нулевой Да нулевой Вектор вообще можете его каким-то своим задать но по факту по умолчанию и в принципе так всегда и работает он как нуво Ну нет информации новенькие Да чисты память чиста вот а дальше она уже чем-то там наполняется чем-то наполняется Вот например смотрите Ну

чиста вот а дальше она уже чем-то там наполняется чем-то наполняется Вот например смотрите Ну что ж теперь проходим ещё Да как можно это в принципе во что-то агрегировать какую-то уже задачу конкретную например классификация элементов последовательности с точки зрения зрения реп разметка то Ну почему бы и нет то есть вот у меня например солнце У нас с вами есть hidden State вот он сюда выходит его прогоняем ну как вы вы же цепляли правильно на прошлой неделе после свёрточные слоёв в конце А

его прогоняем ну как вы вы же цепляли правильно на прошлой неделе после свёрточные слоёв в конце А какие-то у нас с полно связаные слои чтобы сделать удобный для нас Выход Да также цепляем полносвязный слой там манипулируя размерности как нам нужно в итоге там Ставим какую-нибудь сигмой на выход получаем Ну какую-то собственно говоря с вами вероятность того что вероятность того что это относится к какой-то из сери В итоге ну здесь видимо пример существительно не существитель грубо говоря да

к какой-то из сери В итоге ну здесь видимо пример существительно не существитель грубо говоря да потому что раз бинарная Крос энтропия вот там Ну солнце вероятность 0,78 Таргет единичка Всё я в этой ячейке способен посчитать бинарную кронт оценить свой Лос точно также здесь и здесь ну Для нас это не проблема Вы опять же на прошлой неделе сталкивались с тем когда состоит из нескольких вещей Да я е могу сложить просто этот итоговый лоз но сама идея в том что вот собственно говоря смотрите

Да я е могу сложить просто этот итоговый лоз но сама идея в том что вот собственно говоря смотрите обработка идёт рекуррентно и она здесь имеет смысл по крайней мере в том что Ну например как бы я говорю мы с вами примерно себе представляем есть базовые построение Да лингвистические построения текста что есть там подлежащее есть сказуемое есть дополнение там ну короче ладно я не особо помню все эти вещи что-то там есть да определе да определение Вот все вот эти вот истории Да не очень понял

эти вещи что-то там есть да определе да определение Вот все вот эти вот истории Да не очень понял именно в этом примере Почему бинарная ро тропе если например ча речи может быть несколько Ну да я говорю что здесь как будто бы пример знаешь существительно против не существительно А так если как бы будет больше классов Ну будет Крос энтропия и будет Вот но как бы это один из примеров здесь в данном случае нам вообще нужен кажы выхо сегодня такую зада будем Рем кажды выхо тяжело меть Вовы надо

случае нам вообще нужен кажы выхо сегодня такую зада будем Рем кажды выхо тяжело меть Вовы надо разметить есть по факту В каждом текст нужно каждое слово менить Ну и в этом примере рекуррентно не нужна Ну наверное не нужна Да в каком-то смысле не нужна в принципе это вообще задача уже решённая если слово у нас есть в словаре число русских слов оно для вас сразу скажет какая-то часть речи но тут больше Как пример понять да что к чему так А можем соответственно брать только последний выход

тут больше Как пример понять да что к чему так А можем соответственно брать только последний выход последний выход собственно говоря Ну вот у меня там Здесь много классовая классификация есть три класса Да например не знаю положительный нейтральный или отрицательный окрасу сообщения и вот мы выпл Вектор дальше у нас с вами тагет мы считаем Крос энтропию как оценку ошибки но в общем её минимизируем и в целом здесь вот как бы уже рекуррентно нужна очень явно Да потому что мы берём последний

и в целом здесь вот как бы уже рекуррентно нужна очень явно Да потому что мы берём последний полносвязный слой А он как бы содержит в себе информацию и об этом слове и об этом слове точнее неправильно показываю вот этот слой содержит об этом хиден да об этом слое и ещё и об этом слое Ну потом мы его через полносвязный слой делаем в виде в котором Нам нужен Вполне себе архитектура причём будет на самом деле с точки зрения кода нагрузка практически минимальна на вас всё вот это всё вот это имеет

самом деле с точки зрения кода нагрузка практически минимальна на вас всё вот это всё вот это имеет одну строчку кода tch Ну с указанием параметров Да количество слоёв размер там н сайза размер последовательности размер им бенга все вот эти вещи надо указать но тем не менее глобально Вот она вся архитектура да да да да это сильно сильно Как бы глубоко прям не придётся вам скажем так погружаться не прид вопросы Отлично Так что у нас здесь тут можно объединить выходы со всех ячеек об этом чуть

не прид вопросы Отлично Так что у нас здесь тут можно объединить выходы со всех ячеек об этом чуть позже Ну это в принципе тоже самое так это нам сегодня Давайте переди вот приближаем и проливаем вот сюда вовнутрь ставили Да и там мы обнаруживаем следующее что-то что нарисовано здесь вот она давай вопрос а т они одинакового размера Да и последни тоже Спасибо Да это и это более того ты сам будешь это указывать hidden size ты его указываешь как гипер параметр вот ну что ж поехали как у нас с вами

указывать hidden size ты его указываешь как гипер параметр вот ну что ж поехали как у нас с вами м как у нас с вами устроена ячеек она устро на самом деле Вот именно р достаточно тривиально и нам с вами нужно как-то агрегировать информацию Мы уже с вами знаем что по полносвязный слой хороший мэтчинг в принципе какого-то вектора какой-то информации у нас будет скрытое состояние проходить через в полносвязный слой потом будет проходить Вот видите Вот это уже как бы слово но оно у меня уже в

в полносвязный слой потом будет проходить Вот видите Вот это уже как бы слово но оно у меня уже в оцифровано виде здесь нарисовано Как как мбенг этого слова да а соответственно это слово тоже проходит через полносвязный слой тут размер этого полносвязный такой что размерности на выходах будут одинаковые одинаковые в итоге мы их просто складываем прогоняем через гиперболический тангенс этому тоже есть объяснение почему это лучше чем сигмоида чуть дальше это будет видно Ну и всё а соответственно

есть объяснение почему это лучше чем сигмоида чуть дальше это будет видно Ну и всё а соответственно как бы один State Мы вынули другой пошёл дальше Да это вот как как вот здесь один вот этот State мы выплюнуть его уже дальше соответственно в ту же самую Н это вот как бы физически один и тот же один одна и то же ячейка памяти в компьютере Да с одним и тем же состоянием тут надо будет с размеренно аккуратно Блин я сейчас точно не вспомню по-моему смотрите то есть по-хорошему отсюда у нас приходит

Блин я сейчас точно не вспомню по-моему смотрите то есть по-хорошему отсюда у нас приходит Вектор размером size да а здесь у нас с вами соответственно Si получается как бы полно связа слой же это Матрица весов всегда правильно Как вы думаете каких она размеров должна быть чтобы всё было всё было н мы его должны явно указать или нет одно на другое Ну тут по-моему тут короче помоему на Вот такая вот размерность страшная им обязательно нужно чтобы на выходе была размерность правильно А как бы

вот размерность страшная им обязательно нужно чтобы на выходе была размерность правильно А как бы Когда проходит чтобы матрицы умножили по-хорошему это вот так задаётся то есть вот теперь вот эти две матрицы с помни будет о и мы на выходе получим S А здесь соответственно Вот это будет квадратная Матрица она будет Si потому что на вход приходит size и выплёвывать тоже нужно размерность Si это если бы вы бы задавали это бы tch line line размер входа и размер выхода два параметра же вы указываете

бы вы бы задавали это бы tch line line размер входа и размер выхода два параметра же вы указываете всегда это собственно говоря они и есть Ну опять же это всё за вашим глазом останется поэтому получается как бы Когда State вы указываете вы Априори зада размер этого связанного слоя И сколько весов вам тренировать потому что как бы за счёт того что хиден стоит на входе хн стоит на выходе у меня детерминируется размерности внутри детерминируется ну это что-то я остал немножко уже углубляться ну

размерности внутри детерминируется ну это что-то я остал немножко уже углубляться ну просто чуть-чуть вам объяснил что к чему всё как-то так да Саша ну вот да не особо понял как у нас здесь эмбеддинг вот X1 X2 X3 - это просто отдельные слова да да Солнце как они могут быть представлены вектором одной размерности каждый из них ну мы это не обсуждали ещ сейчас ниже обсудим мы обсудим с вами по пово или просто мы а Ну всё тогда ладно у нас будет сечас чуть дальше когда мы именно пока что да это

или просто мы а Ну всё тогда ладно у нас будет сечас чуть дальше когда мы именно пока что да это короче ответ на вопрос да Это можно сделать и тут как бы уже как следствие Да как результат что у нас уже есть некая цифровка одном одномерные векторизации получались Ну мы делали векторизации А как ска можно закрить было бы одно слово одно слово хорошо получается вот это стои который на выходе это уже типа прошедший через какието там веса и так далее типа тот который мы подавали Дин в начале да Угу

типа прошедший через какието там веса и так далее типа тот который мы подавали Дин в начале да Угу а Виса вот смотри вот приходит Вот давай вторую чек посмотрим приходит слово светит вот сюда уже выплёвывает вот этот н State как бы то есть он уже какую-то первичную информацию имеет он вообще уже работал со словом солнце ранее То есть тут логика очень простая это то что у вас есть в голове уже плюс какая-то новая информация происходит Чинг и это наше текущее состояние мы его дальше подаём понял

какая-то новая информация происходит Чинг и это наше текущее состояние мы его дальше подаём понял вот ты сейчас узнаёшь новое А что-то ты уже знаешь спро если бы обучение в Эльбрусе было бы рекуррентным А в принципе оно рекуррентно то Вот вы узнаёте что-то на фазе но потом это у вас есть Сначала он там пустой мо быть да в контексте именно sence ты с этой инфо иь фау нафа й инфор плю приходит что-то новое ВС у тебя опять новый сформировался новы и на фазу ты уже с ним ид Поня просто

что-то новое ВС у тебя опять новый сформировался новы и на фазу ты уже с ним ид Поня просто закодированные типа те же самые слова по сути прошедшие через какие-то Виса и Да вот конкретно вот нарисова всего д Но на самом деле полно связа то есть полно связаны ничего более сложного здесь нет ничего более сложного нет так что у нас здесь с вами приведено здесь уже более расширенная общая схема того как это могло бы работать например вот у нас здесь указан равно 5 да то есть вот на вход Он пустой

как это могло бы работать например вот у нас здесь указан равно 5 да то есть вот на вход Он пустой 00 Вот они каждого слова далее Что ещ интересное ещ один пермет это картинка больше понять какие гиперпараметры здесь нужны нам то есть всё что здесь указано так или иначе является метрами ещ есть тоже будете указывать сами бы одно дело отрава бы на большее меньшее как бы это не совсем правильно поэтому конечно чем больше инг тем больше наверно как сказать большую информативное слово вы сможете

конечно чем больше инг тем больше наверно как сказать большую информативное слово вы сможете передать Да потому что вот я говорю слово солнце солнце же можно по-разному посмотреть солнце вообще горя оно жёлтое например да вообще говоря оно Круглое А ещё оно светит А это вообще там звезда и вот как бы исходя из вот этих как бы любое слово можно В каком-то смысле категориями описать Вот раче это Аля четыре категории есть да в четырёх четырёхмерном пространстве кодируется слово Так давай ко вопрос

четыре категории есть да в четырёх четырёхмерном пространстве кодируется слово Так давай ко вопрос как-то интересно получается что в идут все промежуточные хиты а какой-то потом в связанный слой а один как стоит выр это почему-то который H это ти вот те компьютер пря В прямом смысле будет возвращать прогонишь данные да когда сделаешь вот он те будет возвращать из двух вещей Вот это лист из вот этих вот всех а это только последний и твоё дело что дальше обрабатывать То есть он скажет что вот ко

вот всех а это только последний и твоё дело что дальше обрабатывать То есть он скажет что вот ко держи дальше делай что хочешь ты можешь никак не использовать это а использовать Вот это и наоборот соответственно А можешь использовать и то иго ть ихо из того что ты ему собрал Да поэтому в данном случае мы с вами взяли вот эти вещи Сейчас я поговорю что здесь дальше но как бы вот это забили в нашей архитектуре это не нужно нашей архитектуре Нужно взять вот эти все промежуточные типа чтобы о

нашей архитектуре это не нужно нашей архитектуре Нужно взять вот эти все промежуточные типа чтобы о каждом слове лучше иметь представление как бы что-то Исходя из этого да Саш вот у нас или это аналог вектора сокращенной размерности это появляется третья размерность это как бы Новый взгляд у нас с вами Раньше у нас с вами раньше один объект выборки по-хорошему был вектором правильно согласитесь если картинка вы её там делали в основном ну хотя ладно нет как бы в свёрточные вос вам на зас Какую

картинка вы её там делали в основном ну хотя ладно нет как бы в свёрточные вос вам на зас Какую он размерность может иметь вот по кра ре на фазе вы Вектор вот здесь это уже не Вектор это уже матрица Как вы думаете какие Она размерности имеет один элемент выборки на Ну как бу Это было бы векто я согласен что этом Дат размерность Да в зависимости от того как слово Ну мама Мыло раму и так далее Что что влияю количество слов это есть про кой саты говоришь вот я говорю про вот ну я те хотел сказать

что влияю количество слов это есть про кой саты говоришь вот я говорю про вот ну я те хотел сказать что блин есть он св риго теста в нерону чего обще вот у нас появляются здесь ребята следу характе старши по размеру Да у на с вами старши по поводу того вообще в на скорость обучения и качество дальше соответственно позволяет нам Чем больше тем Вроде как мы более кра сможем описать это слово более вариативно да одной координа сказал ЕС все слова кодировать точе сложно Сравни между собой богаче

вариативно да одной координа сказал ЕС все слова кодировать точе сложно Сравни между собой богаче слово опять же дольше обучаться че вот этих Гана каждый отвечает за своё именно их мы будем так или иначе подавать отвечает Ну понятно вы как бы сами тоже будете решать Вы можете обрезать последовательности можете давать более длинные чем Более длинное тем сложнее обучать и ещё ряд проблем более короткая тоже в принципе думаю понимаете что просто информации нет ну короче как бы идеально правильных

тоже в принципе думаю понимаете что просто информации нет ну короче как бы идеально правильных этих значений понятно дело их не существует от зада к задаче они могут быть разны Давай ко Вопрос какой вопрос А какой из этих друганов он влияет Ну коррелирует с количеством выходных классов или вообще пофиг мы количество классов регулируем на выходном полном слое нет нет на выходном Да на выходном то есть сильно корреляции Настя всё-таки там понятно это как бы категории которым можно описывать слово

сильно корреляции Настя всё-таки там понятно это как бы категории которым можно описывать слово да часть речи и другое это Как можно себе представить какую аналогию что там Ну представ у теб был размер оди то ты любую информацию кодирова бы Одним числом смогла бы ли ты много разной информации закодировать Так а здесь какого рода информация смысле здесь это очень абстрактно то есть это тут пря очень сильно проваливаться не стоит можно воспринимать это как хранилище для информации чемно больше

сильно проваливаться не стоит можно воспринимать это как хранилище для информации чемно больше информации ты способна хранить Но чем она больше тем сложнее про слово и про его про слово типа или или про что Ну за что у нас отвечает hien S Вот мы выше с вами обсуждали Ну вот ну типа H1 отвечает за первое слово Out да да вот даже вот я бы здесь показал то есть h0 пустое ничего не содержит H1 знаком с солнцем H2 уже знаком как с солнцем через H1 Я просто может быть аналогия есть с тем что мы

с солнцем H2 уже знаком как с солнцем через H1 Я просто может быть аналогия есть с тем что мы делали на шестой неделе или когда что бы векто вот это Ну наверно нет там рекуррентно вс-таки не было поэтому такой про вот на самом деле главная фишка курент именно в этом слое Ну нет главная фишка курент что вот есть э ячейка Вот одна и все слова через неё по порядку проходят Солнце светит ярко это вот как бы [музыка] экстраполировать прошлого Нет это конечно принципиальная рекуррентная история и

вот как бы [музыка] экстраполировать прошлого Нет это конечно принципиальная рекуррентная история и аналогов как бы сложно провести параллель с прошлой неделей а а вот на этом я поняла на этом графике сейчас на этом у нас получается Вектор H1 и из него выплёвывает А вот под H1 просто два раза H1 написано короче output - это именно одно слово а Вектор H1 - это именно hidden State описывающий йт на данный момент да да Окей Ну допустим хорошо Сержа я стараюсь наст ответить правильно понял тогда

на данный момент да да Окей Ну допустим хорошо Сержа я стараюсь наст ответить правильно понял тогда можно ли так объяснить то что вот у нас собственно H Вектор Его длина это можно сравнить с количеством размерностей типа пространства Чем больше тем больше информации можем поместить меньшем сжимается и менее информативным становится но я для себя тоже так держу голо это полная абстракция я даже не претендую нисколько на Это что Это истина контех если у нас есть 3D Вектор с вами Вот hidden State

претендую нисколько на Это что Это истина контех если у нас есть 3D Вектор с вами Вот hidden State первая вторая и третья То есть у нас вот три вариации возможно закодировать да Ну както я например вам сказал что вот Ну не знаю вот у меня Стол стоит стол вообще говоря вот он там чёрного цвета у меня да стол вообще говоря там он нужен для того чтобы писать ещё ещё ряд характеристик чем больше у меня соответственно размерности тем больше информацию Я смогу передать Меньше меньше Ну всё вот как бы

соответственно размерности тем больше информацию Я смогу передать Меньше меньше Ну всё вот как бы както самая ведь история в том что мне потом дальше это как-то сравнивать и этим оперировать Ну тут каждый проваливается до своего уровня абстракции на самом деле самый нормальный уровень абстракции воспринимать это то что этот Вектор хранит что-то из прошлого Да ну вот здесь там храни что-то из прошлого и чем больше этот Вектор тем более более вероятно что вы эту информацию сохраните но всё это

и чем больше этот Вектор тем более более вероятно что вы эту информацию сохраните но всё это дело нужно обучать и это как бы вечный компромисс Я думаю вы его уже заметили компромисс в целом Да между тем чтобы сделать больше чтобы быть умнее но при этом как бы всё это дело надо обучать получается Например мы изначально несём нулевую потом заходит слово мы получили какую-то и потом когда дальше идём то типа уже Ну например нулевая H1 Да мы получили потом дальше идём H2 уже типа он вообще не похож

то типа уже Ну например нулевая H1 Да мы получили потом дальше идём H2 уже типа он вообще не похож на правильно полностью Конечно каждый вот этот слой будет различаться каждый этот Выход будет различаться но при этом H2 несёт и как бы информа да да давай лю вопрос У меня маленький вопрос h0 же мы можем сделать не нулевым задать заранее что расма это текст с точки зрения там листи или там е что ты так коне не сможешь скать рари с точки зрения стилистики ты можешь просто указать h0 который тебе

так коне не сможешь скать рари с точки зрения стилистики ты можешь просто указать h0 который тебе нужен если ты сможешь э мысль как бы в н State положить то тогда наверное тебя поймёт не расц так ну что ж вот собственно говоря да здесь архитектура но видите в конце вот как бы вышло Вот здесь у меня размерность сколько на сколько будет н size eding size м hidden size разве на eding size уверен sequence L Да на sequence L действительно Вот и в итоге в данном случае я флан это да я Ну как бытом

L Да на sequence L действительно Вот и в итоге в данном случае я флан это да я Ну как бытом развернул здесь линейный слой я вот сюда как бы даже в общем виде когда Форвард буду собирать могу прописать что ну прописать что да hien S умножить на sequence L вот такого Мне нужна полносвязная и всё у меня есть один выход Но чем вам не классификация Классно же классно всё сложилось туда дальше там цепляй что хотите Но уже пошли манипуляции свободного характера вот как-то так что ещё здесь смотрите

что хотите Но уже пошли манипуляции свободного характера вот как-то так что ещё здесь смотрите вот слой динга слой динга задача его задача его задача перевести текст в цифру но как бы компьютер у вас будет принимать не просто текст а он у вас будет принимать так называемый токе одно есть такое понятие тайзер который как бы задача кинара каждому слову присвоить номер в словаре а потом по этому номеру можно будет восстановить динг то есть такая двойная связь но пока что говорю Мы потихоньку с

номеру можно будет восстановить динг то есть такая двойная связь но пока что говорю Мы потихоньку с вами грузимся Да вот инг сюда подали как бы Аля что-то о слове и получили Дин то есть вот здесь Дин - это тоже как бы это Матрица это вообще как бы полносвязный слой это реально поно связано сло В прямом смысле и он тоже обучается То есть вы в каком-то смыс обуча как представлять свои слова понятно То есть вы учите как бы компьютер узнаёте вообще компьютер узнаёт что разные слова есть и пытается

То есть вы учите как бы компьютер узнаёте вообще компьютер узнаёт что разные слова есть и пытается их лучшим образом для себя запомнить и понять То есть это тоже обучаемый слой это стоит понять в данном случае конкретно Вот Ну вообще понятно что у каких-то моделей там например знаю тех же у них есть свои Инги да и есть открытые модели вы будете брать и получать динги то есть это тоже как бы Целый отдельный блок и целая отдельная наука как вектори зовать текст но мы будем сегодня вот обучать

отдельный блок и целая отдельная наука как вектори зовать текст но мы будем сегодня вот обучать самостоятельно к Тек Тек Ну что вопросики какие-нибудь Хорошо тогда будем ид дальше пробле блин задумано было не так вот так было задумано ун есть какие-то проблемы какие проблемы на ваш взгляд есть Ну всё Поздно уже проспорил ладно Да хорошо конечно главная проблема н смотрите то есть мы раз идём после два идём три Вот вы обсуждали на компьютер ви модели да типа там не знаю по-моему Или ты которые

два идём три Вот вы обсуждали на компьютер ви модели да типа там не знаю по-моему Или ты которые глубокие достаточно по-моему проблема их Какая Ну то есть мы с вами когда по градиентного этому пок проге идём да то есть мы вот умножаем считая Градиент Градиент считается как это производная умножить на производную того что внутри и вот так вот умножается умножается умножается по всей архитектуре если градиенты и так маленькие то есть Представьте 01 потом ещё раз на 01 потом ещё раз на 01 В итоге

градиенты и так маленькие то есть Представьте 01 потом ещё раз на 01 потом ещё раз на 01 В итоге всё что в начале как бы всё что в начале оно тухнет и не меняется не меняется поэтому поэтому поэтому поэтому как бы это не есть хорошо с этим надо как-то бороться с этим надо как-то бороться Какие ещё есть проблемы короткая память быстро теряет контекст потому что действительно имеет какое-то ограничение это на самом деле даже более главная проблема не в том порядке я начал потому что Градиент Как

это на самом деле даже более главная проблема не в том порядке я начал потому что Градиент Как бы не так актуально А вот именно короткая память что как бы вот у нас 10 этих конкурентных их 20 да 30 представте у вас последовательность идёт 100 слов вот там gpt сейчас вам говорит что у него контекстное окно какое-то Да когда он ещё не выпадает из контекста вот тут тоже как понятно что есть какое-то контекст окно например оно 100 слов Когда я уже сотое слово пишу Мне надо как-то вот вот сотое

контекст окно например оно 100 слов Когда я уже сотое слово пишу Мне надо как-то вот вот сотое слово идёт представьте вот сюда вот сотое слово заходит Вот сотое слово это X100 по факту вот этот H1 должен уже помнить информацию о всех 100 словах А это же как бы ну сложно по факту Поэтому вот инфа типа теряется потихоньку теряется теряется и когда мы классифицирует быть Понимаете вот я сказал фильм отличный а потом пошёл воду разливать на 000 слов и классификация может уйти не туда Хотя в начале

отличный а потом пошёл воду разливать на 000 слов и классификация может уйти не туда Хотя в начале лежит вот где-то Вот здесь лежит Ключевая информация но мы как бы её потеряем Поэтому вот так вот всё это устроено и соответственно А ну развитие Да и появилась такая архитектура которая называется в см как продолжение НН вот а о ней мы сейчас чуть ниже поговорим да Ну тут вот взрывающие затухающие градиенты тут на самом деле пример того почему почему в архитектуре вообще говоря используется

градиенты тут на самом деле пример того почему почему в архитектуре вообще говоря используется тангенс гиперболический Если вы вспомните Как устроена функция сигмоида Как устроена функция тангенса то вы поймёте что сигмоида но она не так круто растёт Как тангенс Поэтому у неё производная просто ниже то есть максимальная производная сигмоида вот у этой функции Да если производную взять она максимальная в нуле вот здесь касательно самая большая поэтому производная самая большая Ну и то она всего

в нуле вот здесь касательно самая большая поэтому производная самая большая Ну и то она всего 02 А в гиперболического тангенс здесь видите как бы рос покруче идёт Да так Поу верен взлетает тут уже вот производна ра едини там где есть вообще что-то связан затуханием градиента тангенс становится более выгодной истори чем сигмой Ну что ж вот собственно говоря мы переходим кстм название очень как бы ну тако или долго длинна Да краткосрочная а корот срочная память Короче все просто называют свою

бы ну тако или долго длинна Да краткосрочная а корот срочная память Короче все просто называют свою нишу и все прекрасно вас поймут кто с текстом связан Что такое лст Так ну это Паш тут чик вставил что когда СТМ вышел СТМ вышел там Вот такая картинка была авторами типа объяснение того что как здесь всё работает вот всё понятно ребята разбирайтесь примерно накидали вам А Паша любезно вам сделал всё гораздо симпатичней Так ну собственно говоря вот что в СТМ происходит СТМ пытался решить эту

всё гораздо симпатичней Так ну собственно говоря вот что в СТМ происходит СТМ пытался решить эту проблему СТМ пытался решить эту проблему даже не одну а две Да целых которые мы с вами обсудили которые вот здесь указано это что мы быстро всё забываем у нас градиенты тухнут как попытались это сделать То есть теперь ячейка будет чуть посложнее внутри то есть там у нас была НН теперь СТМ сразу вас обрадую что как бы внутри мы посмотрим но возможно один раз Возможно вы потом ещё туда вернётесь Но

обрадую что как бы внутри мы посмотрим но возможно один раз Возможно вы потом ещё туда вернётесь Но по-хорошему это одна строчка кода tch lstm и туда подаются все вот эти параметры которые нужны внутри Но всё-таки то что внутри нужно взглянуть и понять Вообще какую логику вот этот hidden State hidden State А это слой скрытого состояния в контексте стма Да и в целом рно его называет краткосрочной памятью краткосрочной памятью у нас ещё с вами появляется cate вот логика пытаться хранить

памятью краткосрочной памятью у нас ещё с вами появляется cate вот логика пытаться хранить информацию долгосрочно от него ничего не требуется вот знаете чтобы вот он просто держал всю информацию всё будет как-то типа ближе к контексту оперировать да то есть то что здесь происходит а должен как бы нести информацию себе обо всём Вот это сделано через вот такую как бы сложную архитектуру там у нас вами было д каждый этот вот вот эта конструкция потом вот эта конструкция и вот эта конструкция они

вами было д каждый этот вот вот эта конструкция потом вот эта конструкция и вот эта конструкция они имеют свои названия свои гейты сейчас об этом мы дальше поговорим То есть это пое это поему foret Gate это по-моему update да типа что-то забыли что-то Обновили что-то Вернули Это Out то есть вот как бы три условных блока есть внутри стма Ну давайте поупа архитектур что у нас здесь с вами есть во-первых смотрите заходит слово и заходит И что здесь происходит на ваш взгляд Свари Нони не указано по

смотрите заходит слово и заходит И что здесь происходит на ваш взгляд Свари Нони не указано по факту когда так рисуют Это обычно значит конкатенация То есть просто как бы есть инфа с одной стороны есть инфа с другой они просто прижились и всё вот дальше это идёт вот в эту полносвязная иресть в каком-то ч вот этой информация Да возвращается в диапазоне от нуля до одного да сигмой же у нас от нуля до одного возвращает информацию и вот эта информация как бы она проходит через операцию умножения с

до одного возвращает информацию и вот эта информация как бы она проходит через операцию умножения с вот этим C sell State вектором который который как бы се секундочку сейчас Прошу прощения это важный звонок вот а получается смотрите В каком-то смысле мы как бы от нуля до одного Да где совсем ноль получается что мы говорим забудь вообще то что было до этого где единичка как бы не забывай В общем какой-то механизм управления вот этим рельсами главными Да через какую-то эту информацию всё то есть

механизм управления вот этим рельсами главными Да через какую-то эту информацию всё то есть вот как бы первый блок обсудили его его он так и называется forget Gate типа ворота забывания что мы как бы сету исходя из текущего что пришло говорим Что что-то надо забыть что-то Надо не забыть это всё очень абстрактно Не пытайтесь там как бы понять до каждой координаты вектора Вот мыслите абстрактными категориями это самое лучшее что можно здесь предложить то есть уровень абстракции действительно

категориями это самое лучшее что можно здесь предложить то есть уровень абстракции действительно очень высок идём дальше соответственно здесь это как бы апдейт апдейт G Ну я так нарисую Да просто вторая часть блок А в чём его суть сюда соответственно эта информация у нас с вами дальше идт И опять проходит через полносвязный слой сигмой точно также как здесь как ту свой полносвязный слой своими весами но тем не менее и ещё поно связан слой с тангенсом дальше мы это дело как-то умножаем

своими весами но тем не менее и ещё поно связан слой с тангенсом дальше мы это дело как-то умножаем размерность у нас будет понятно одна и та же всего этого дела Мы сюда отправляем и складываем то есть это мы как бы обновлённую информацию В каком-то смысле передали Почему почему у нас с вами здесь как бы две есть истории Ну ответа как бы нет как такового понимаете Вы можете собрать здесь вообще свою архитектуру То есть когда выходил авторы скажет что ребят мы сделали так Почему Потому что как

свою архитектуру То есть когда выходил авторы скажет что ребят мы сделали так Почему Потому что как бы вроде сигмоида нужна вроде тангенс нужен У каждого есть свои плюсы А почему бы нам не сделать две две части сделаем две части Да больше обучать Ну как бы из этого появляется большая пропускная способность В каком-то смысле да то есть более вариативно мы можем хранить Иу Ну вот как бы так разбавили архитектуру соответственно дальше Вот эта информация идёт сюда Ну и здесь образуется вот этот

архитектуру соответственно дальше Вот эта информация идёт сюда Ну и здесь образуется вот этот третий блок третий блок Да в котором что у нас происходит с вами опять же все вот эти данные у нас перетекают с вами Сюда Здесь полносвязный слой умножается на сигмоида проходя через сигмой это умножается с тем что вышло с гиперболического тангенса и это возвращается сюда и сюда вот как-то так как-то так опять же говорю что ну по-хорошему разочек надо воспринять что там происходит в принципе одна рочка

опять же говорю что ну по-хорошему разочек надо воспринять что там происходит в принципе одна рочка кода Как вы задавали да или там всякие кон слои Да всё в принципе тоже самое вот так попытались решить эту проблему то самое главное что в нового появилось помимо вот этого как бы увеличения сложности архитектуры Что появляется просто вот если вдруг вас спросят да чем отличается от первое что вы дол сказать коне это информацию о короче долгосрочная память Вот это долгосрочная память это

что вы дол сказать коне это информацию о короче долгосрочная память Вот это долгосрочная память это краткосрочная память прямо как у нас с головой с мозгом Ну и всё дальше соотвественно также каждое слово едет знаю мама вот оно здесь Да там ВС остальное мыло вот оно и раму это об вовторых [музыка] промежуточные если нам нужно теперь надо у нас будет как бы теперь у вас будет возвращаться вектор и будет возвращаться вектор А ещ будет возвращаться вот этот последний набор вот так что у меня здесь

будет возвращаться вектор А ещ будет возвращаться вот этот последний набор вот так что у меня здесь а на самом деле бы я бы выдел вот так условности ВС но я бы вот это вот ВС преобразование математическое назвал Вот это бы назвал бы сейчас дальше пому пройдём Да ну и соответственно Вот это будет Вот он здесь у нас по отдельности с вами указан то что отвечает за выход давай вопрос и по долгосрочной памяти что он нам типа вернёт Ну типа какое будет различие между долгосрочной И краткосрочно что

памяти что он нам типа вернёт Ну типа какое будет различие между долгосрочной И краткосрочно что тебе цифры сказать Какие или понимаю то есть смотри ещё раз это долгосрочная память воспринимаем Вот я говорю не погружая это очень сложная абстракция воспринимает То что вот здесь хранится что-то О долгосрочной да мама мыла раму мыла её тряпкой тряпкой такой-то такой-то можно большой те сказать И вот как бы будет в целом понимать что речь идёт о мытье о мытье рамы А как бы hidden State hidden State

как бы будет в целом понимать что речь идёт о мытье о мытье рамы А как бы hidden State hidden State он будет отвечать за Ну конкретные нюансы понял то есть как бы вот конкретно Мама мыла раму вот сейчас речь о мытье идёт Мы же моем Да там речь о мытье а далее там мыло белая тряпка сейчас вообще о тряпке идёт речь о чём это нам может говорить положительное или отрицательное сообщение нейтральное или нейтрально короче как-то вот типа hidden State момент держит краткосрочный а sell State пытается

нейтрально короче как-то вот типа hidden State момент держит краткосрочный а sell State пытается сверху на всё посмотреть как-то так это самое лучшее восприятие которое ты можешь для себя взять вовнутрь туда лезть дело тако что происходит до конца Поня именно забывает фильтровать долгосрочной понял В целом да Ну всё ну с этим надо Повари лыба всё равно я сам для себя до конца эту интуицию Ну как бы я выстроил её и всё тут каждый волен сам её воспринимать Да в каком-то смысле Ну сигмой этот

как бы я выстроил её и всё тут каждый волен сам её воспринимать Да в каком-то смысле Ну сигмой этот воспринимает диапазон от нуля до одного это можно воспринимать Какой процент информации долгосрочно нужно забыть и какой оставить вот В каком-то смысле Вот как-то так бы я да воспринял Ну и и каждый гей for Gate update и output Gate все эти три гейта да гей или ворота их называют или шлюз А как бы вот каждый из гейтор типа за свою историю так у кого-то Ещё вопросы есть Угу Так если попроще то Ну

вот каждый из гейтор типа за свою историю так у кого-то Ещё вопросы есть Угу Так если попроще то Ну с одной стороны Это сарказм что вот на самом деле как описывается самими с другой стороны не сарказм потому что вот что нужно запустить Ну вот здесь Идут они вот in получается да потом это видимо по-другому называется Но это короче и тут рассказана просто вся математика как соотвественно ко слово приходит обрабатывается через кае считается самом но здесь как раз таки записаны все вот эти вот

приходит обрабатывается через кае считается самом но здесь как раз таки записаны все вот эти вот преобразования все вот эти преобразования да так А вообще потом ещё стало понятно что появилась ещё одна идея улучшения появилось улучшение bal СТМ В чём суть как бы а давайте смотреть на последовательность не только слева направо а ещё справа налево но иногда действительно определяющие факторы могут стоять как до так и по зна в английском языке стро конструкция лингвистическая в кам порядке что

стоять как до так и по зна в английском языке стро конструкция лингвистическая в кам порядке что должно стоять поэтому что-то определяющее Может быть как впереди так позади да и просто это на самом деле расширение архитектуры это указывается одним параметром вам кажется это страшно Ну это может быть действительно страшно Но спасибо за это соответственно в их случае он теперь начинает читать вот эти СТМ блоки да то есть вот у нас с вами предложение он теперь будет выдавать нам с вами вот эти вот

СТМ блоки да то есть вот у нас с вами предложение он теперь будет выдавать нам с вами вот эти вот стей вот эти стей но не только в одну сторону а ещё в другую сторону то есть он будет смотреть как в прямую сторону так и в обратную Ну и здесь Можете на рисунке посмотреть что это из себя представляет То есть вам как бы вернутся хинты с прямого хода Вот они нй с прямого хода идут вот и с обратного хода тоже и ресурсов нужно в два раза больше по-хорошему да то есть параметров будет вдвое больше ты

тоже и ресурсов нужно в два раза больше по-хорошему да то есть параметров будет вдвое больше ты права просто Умно на два количество вот так далее Далее далее Далее что е есть есть Гру есть Гру мы его не будем запускать Но короче это такой минималках то есть попытка тоже как бы воссоздать несколько конструкций да Или даже я сказал на минималках или на максималках такой что-то среднее как бы типа пытаемся и быстро и точно посчитать тут есть тоже р составляю ВБ неть если говори про обычные рентные

и быстро и точно посчитать тут есть тоже р составляю ВБ неть если говори про обычные рентные сети которые конечно отчасти как будто бы себя вают хотя Наверно это не так то что как бы знаете как ну неправильное сравнение сейчас конечно скажу но условно это как Линейная регрессия в мире текстов то есть есть инструменты посерьёзнее на данный момент Но есть ума большие плюсы его лёгкость относительная трансформеры это на чём построены gpt Это Трансформер и так далее Конечно они посерьёзнее текст

трансформеры это на чём построены gpt Это Трансформер и так далее Конечно они посерьёзнее текст обрабатывают но СТМ он за то что он гораздо их легче Почему бы и нет Топ за свои деньги Как говорится Да Кость знаешь что у меня не сложилось когда вме появляется State непонятно что потом мы берём на выход в итоге на выход для полного слоя како какого-нибудь что-то для классификации как мы комбинируем эти Ну это это на самом деле зависит от типа задачи где где что нужно то есть как бы конечно если

эти Ну это это на самом деле зависит от типа задачи где где что нужно то есть как бы конечно если брать то Ну стоит общем можно взять и то и то и законка то есть это как бы я даже не помню Кстати как у нас сегодня в примере посмотрим на обратить внимание на эту историю Ну где-то берут одно где-то берут другое где-то просто конка как-то пытаются эту информацию извлечь Да к полно связному условию цепляют вопрос твоих мощностей и твоего нано творческого истории вот как собственно говоря даже само

вопрос твоих мощностей и твоего нано творческого истории вот как собственно говоря даже само говорит ребят как бы мо дело вам вернуть эти два состояния дальше Делайте что хотите с ними это ваше уже решение да то этот который можно устроить дополнительно это дело ваше как-то так соответственно если бы тебе нужна какая-то более наверное общее видение Да ты возьмёшь се State если вот чуть ближе наверное хи на стоит возможно так что у нас ещё Теперь мы дошли С вами до Дин слоя Дин слой в схеме у

хи на стоит возможно так что у нас ещё Теперь мы дошли С вами до Дин слоя Дин слой в схеме у нас с вами это н слой вот вот он слой он отвечает за что он отвечает чтобы ваша Вот мама мыла раму неожиданно стала вот такими векторами тремя векторами раньше Дин мы называли с вами по-другому то есть Какие способы мы с вами на фазе о пробовали векторизации текста Да of и что-то там есть просто как бык слов е немножко проследить за контекстом а здесь уже прям такая идея давайте мы сами построим эти

слов е немножко проследить за контекстом а здесь уже прям такая идея давайте мы сами построим эти Инги сами попробуем как бы как сказать обучиться Да обучить динг создать каждое представление слова в пространстве Итого итого итого получается что он состоит из нескольких историй на самом деле из нескольких вот Представьте у нас равные в данном случае менят ложения Разно длины [музыка] раз это можно сравнить с тем что у вас картинки же тоже разные приходили вне Да согласны разные Ну как бы они вы

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

номер уникальный в словаре то есть вот у меня смотрите слово Good Ну тут все регистры как бы на регистры не смотрим У нас чувствительно регист слово Good имеет слово Good имеет слово Good имеет получается номер один в словаре слово к номер д знаете как слова рожи какое-нибудь возьмём каждое слово там оно в алфавитном порядке расположено но оно имеет Катон там каждое слово оно пронумеровано тут тоже самое у нас будет словарь это словарь это есть то сколько мы знаем с вами да то есть вот как бы у

самое у нас будет словарь это словарь это есть то сколько мы знаем с вами да то есть вот как бы у каждого из нас с вами сейчас в голове конечное количество знакомых нам слов которые изучены и вот тут тоже самое то есть ВС получается соотвественно у меня будет номером оди номером ном ноно такой служебный токен служебный токен который называется педин прямо Аналогично вы с пенго уже где сталкивались картинках когда размерность увеличили да То есть вы манипулировать размерность В каком-то смысле

картинках когда размерность увеличили да То есть вы манипулировать размерность В каком-то смысле там ну добавляли нули Да предположим вот здесь тоже У нас пенг будет как служебный токен чтобы управлять размерностью сообщения а именно мы будем как вы видите как можно уже Да кто более внимательно чуть вперёд посмотрел можно как бы увеличивать размерность на самом деле самое главное увеличивать доводить до нужного размера доводить до нужного размера хорошо как вы видите тогда у нас соответственно

до нужного размера доводить до нужного размера хорошо как вы видите тогда у нас соответственно как бы в готовом виде можно это воспринять вот так то есть у меня первая это 02 это 034 это 254 понятно Да вот далее Далее ви мы с Вами Мы с вами Будем иметь следующую историю то есть вот смотрите получается вот у меня первая последовательность первая последо Она состоит из ТХ слов То есть как бы вот это параметр у меня всегда правильно согласны каждом это просто на нулевом индексе А если

бы вот это параметр у меня всегда правильно согласны каждом это просто на нулевом индексе А если соответственно как бы наме тоника На вот этом индексе Понятно Как вы думаете вот эта размерность матрицы чем определяется словаря моло Молодцы То есть это у нас размер словаря с вами это по факту есть матричное преобразование такое чтобы получить на выходе То есть у меня смотрите вот это слово оно сейчас является вот этим словом да то есть как бы вот оно закодировал вот это стало вот этим ну и так

является вот этим словом да то есть как бы вот оно закодировал вот это стало вот этим ну и так далее То есть вот это вот этим То есть вот это у меня Дин зади вот меня [музыка] слово слово тут как бы тупо матричное умножение матричное умножение Как вы думаете како какой размерность вот у этой матрицы то есть вот это мы с вами проговорили что здесь звёздочка SE который 32у так о смысле о Умно укажу только вот так вот я укажу дате пря порисуем ЕС вас прот потрясающе класс потрясающе а здесь

укажу только вот так вот я укажу дате пря порисуем ЕС вас прот потрясающе класс потрясающе а здесь действительно будет на что ещ раз на количест разме этри будет содержать в себе динги каждого слова то есть вот у вас каждое слово и его мбенг Почему Потому что в каком-то смысле вот домново строчку из Матрицы инго то есть вот здесь и содержатся все кодировки ваших слов То есть мы их и тюним В каком-то смысле агда возникает вопрос в оранжевом блоке там же если перемножить на то что слева там же

смысле агда возникает вопрос в оранжевом блоке там же если перемножить на то что слева там же единички нули то есть Почему в оранжевом блоке появляется куча ненулевых значений поде вся 4 Ми 2 и проче ну да ну в смысле слева же у нас как этова разреженная Матрица Да поэтому полу ВС зависит от того что вот смотрите вот Представьте у меня приходит первое слово из словаря 1 и приходит второе слово из приходит трее слово словар вот Дава вот с 0 могло такое быть вот я вам подаю посно из двух слов где

приходит трее слово словар вот Дава вот с 0 могло такое быть вот я вам подаю посно из двух слов где я подаю по факту первое слово и третье слово в словаре верно И когда я это умножу умножу а здесь у меня будет здесь у меня будет три слова и eding dimension предположим 4 то есть будет 3 7 - 2 6 там 5 - 4 8 6 и 3 - 2 -0 вот смотрите как можно интерпретировать Вот это эмбеддинг первого слова Вот это эмбеддинг второго Вот это эмбеддинг третьего вот эти две матрицы умножаться друг на друга да

это эмбеддинг второго Вот это эмбеддинг третьего вот эти две матрицы умножаться друг на друга да итоговая размерность какая будет 24 2х 4 Да причём если я вот 2х 4 что у меня будет по факту Вот в этой строчке Это будет как вот это слово мчится с ну по факту со всеми этими можете там конечно по элементам посмотреть Ну короче на самом деле перемножение оставит тупо вот эту вещь 37 - 26 грубо говоря мы извлекли им бедин конкретно первого слова также извлечён им бедин третьего слова то есть здесь

мы извлекли им бедин конкретно первого слова также извлечён им бедин третьего слова то есть здесь будет 3 - 2 - 1 0 Кто Кто сомневается в том что я написал можете перемножить матриц и убедиться что это так вот в принципе всё поэтому как бы Настя ответ на твой вопрос Это всё возникает потому что вот это внутри это Матрица Вот она имеет такую размерность и она содержит в себе какие-то другие цифры Угу и говорю Если уж прямо до точно пойти то это есть но на самом деле тут тоже себя тормозите в том

и говорю Если уж прямо до точно пойти то это есть но на самом деле тут тоже себя тормозите в том плане за вас это компьютер сделает а в попытке уловить Всё тем более за один день можно перегрузить себя пока что просто воспринимайте что у нас есть слова Да У этого слова будет номер номер мы входи в этом убедимся по этому номеру я могу вытащить ин слово всё понятно То есть Теперь бы не просто по слову ять е есть промежуточная нумерация мы е сами с вами создадим сами с вами создадим это важно а то

ять е есть промежуточная нумерация мы е сами с вами создадим сами с вами создадим это важно а то что как бы там угорает по матрицам внутри ну можно в принципе этот моменти пока что опустить для себя Да Кость был вопрос А почему в целом в качествен вот этот ход не передать чтобы ещё там удешевить наши переть чем плоте сказать должны вро как-то информацию передать а информацию не передаёшь ты просто указываешь позицию в словаре его что ли Я бы так сказал это не совсем проводить стоит параллель с

указываешь позицию в словаре его что ли Я бы так сказал это не совсем проводить стоит параллель с дата фреймом здесь немножко посложнее мне надо вот отразить солнце то у меня так так как бы а динг Так ну точнее Вот динг Вот вот могу я утверждать что они одинаковы друг на друга похожи то есть они все находятся на расстоянии друг от друга на один а значит они все плюс-минус одинаковы Но ведь это не так и должны быть гораздо ближе дру поближе поближе так оставляем то получается все слова для нас

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

в пространстве так чтобы близкие слова были друг к другу по смыслу как бы ближе а далёкие были далеки да то есть вот как-то вот как-то вот по такой логике мы пытаемся работать Надеюсь ответил ко на твой вопрос А если дада да понятно понятно Так ещё у кого-то какие-то Вопрос есть Ну у меня был вопрос но он отпал Я тоже сначала не поняла где пространство для улучшения динга но теперь стало понятно да А вот смотрите вот здесь 2D 2D пространство это бы значит какой гипер параметр у нас был бы равен

А вот смотрите вот здесь 2D 2D пространство это бы значит какой гипер параметр у нас был бы равен двум вам вопрос на засыпать димм да да Абсолютно верно то есть именно вот и вы причём это сами указываете вы это сами указываете да А вот этот Понятно Чем больше тем соответственно я более как бы вариативно могу закодировать слово Чем меньше тем менее вариатив Ну это было бы типа облако слов Ну не облако слов - это просто чистота встречаемости Ну бы ну наверное если визуализировать можно сказать

облако слов - это просто чистота встречаемости Ну бы ну наверное если визуализировать можно сказать что это облако слов в прямом смысле Вот кстати прямо вот когда обучение идёт он вот эти слова они на каждом на каждой эпохе катаются и он пытается их пространство расположить оптимальным образом чтобы кодировка давала меньше Лос на выходе Понятно реально Теперь стало понятно Красота это очень крутая штука н есть не только у текста даже ещё других вещей вы там потом об этом будете говорить Дин -

штука н есть не только у текста даже ещё других вещей вы там потом об этом будете говорить Дин - это самое главное если вдруг вас спросит что такое Нан Вы должны всегда знать что это векторно представление Като информации самом Деном Конте Ну что ж Молодцы теперь вот она уже другими глазами у нас играет уже всё почти всю архитектуру с вами сложнейшую собрали да план такой приходит последовательность в нашем случае последовательность из двух слов например очень жарко Почему бы и нет Да очень

в нашем случае последовательность из двух слов например очень жарко Почему бы и нет Да очень жарко соответственно уня создаю нер сеть указывают указываю этот гипер параметр у нас с вами оче очень имеет в словаре номер 31 жарко имеет в словаре слово номер 12 Динго мы добиваем до размерности 4 потому что у нас фиксированный размер входа да Вот соответственно приходит последовательность из четырёх вот эти вот эти четыре последовательность из четырёх как бы номеров приходит слой эмбеддинг и

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

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

будет выплёвывать выходы как бы промежуточные когда мы каждое слово только перевали также какие-то общие паттерны Ну например нам это не нужно Мы хотим взять каждое промежуточное получили вот этин сй да В данном случае и просто их сделали флан полносвязный слой и вынули вот в целом всё как бы мы с вами можем ОТК этот текст Если бы у меня была разметка какая-то для этого текста но уже как-то так бы то есть Давайте ещё раз поговорим какие у нас основные сущности есть сущности Да это во-первых

бы то есть Давайте ещё раз поговорим какие у нас основные сущности есть сущности Да это во-первых суно дальше далее что у нас с вами ещ есть дальше у нас есть сущность под названием н да и его размерность есть сущность это SE которую вы тоже сами задаёте да сами задаёте сами задаёте сами задаёте Ну в принципе всё всё что вы сами задаёте Ну всё так-то ну тут ещ что-то сами зададите готов Давайте подводить итоги и делать перерыв потом у нас ещ будет Давай вопрос У меня такой вопрос есть какие-то

итоги и делать перерыв потом у нас ещ будет Давай вопрос У меня такой вопрос есть какие-то онын которые можно ити не тренировать конечно об этом Об этом об этом сказать реч пот дальше РЕТ дальше течение недели Сегодня будем тренировать сами эти Так итоги основная задача рекуррентных сетей сохранять память да сети могут работать с последовательностями длинные последовательности приводят к проблемам с градиентами длинные последовательности Ведут к забывания контекста Пари с рекуррентными сетями

с градиентами длинные последовательности Ведут к забывания контекста Пари с рекуррентными сетями часто используют н слой его задача тить Каждый элемент последовательности Но кстати правильно сказал вот сегодня с вами будем собирать вот у нас будет функция for Да ну сетях да вот функция которая отвечает за прямой проход сети поняли да О чём я говорю вот прямо в коде for Вот который пишете вот В каком смысле у меня вот X придёт на вход Я в данном случае сейчас вот вы увидите мы запустим его

В каком смысле у меня вот X придёт на вход Я в данном случае сейчас вот вы увидите мы запустим его сначала через слой им бедин а потом через слой СТМ А можно сделать так что им бедин я получу откуда-то Извне Если они у вас есть то можно их и не обучать мыс о том что сказал сер тогда у меня бы в архитектуры был бы только если у меня стоит н слой то как бы точ знает что здесь появляются веса и эти динги Надо выучить Надо выучить Итак в паре СН сетями часто использу сло слой его задача превратить

динги Надо выучить Надо выучить Итак в паре СН сетями часто использу сло слой его задача превратить Каждый элемент последовательности Вектор заданной длины самый популяр курент сети это как базовая но она в целом не используется её полностью затмил Поа подход тексту более провину Топ за свои деньги опять же и вот есть такой кейс это Яндекс клавиатура которая как бы понятно как бы её же нужно разворачивать на устройстве пользователя правильно соответственно ресурсы как бы телефона используются

на устройстве пользователя правильно соответственно ресурсы как бы телефона используются туда развернуть какой-нибудь Это Трансформер то что мы будем дальше проходить это очень затра совестно они решили эту проблему они просто обучили СТМ её внедрили и всё прекрасно работает то есть вот Яндекс клавиатуру Вы можете установить там на своё устройство и вы увидите что она работает автодополнение слов например пора сделать она вам предложит перерыв да Или что-то ещё ну как бы вот знаете что там

слов например пора сделать она вам предложит перерыв да Или что-то ещё ну как бы вот знаете что там внутри встроено СТМ Хотя как бы вот Паша говорил я сам не считал что вот выходило а не так давно выходила ИК в СТМ То есть как бы она имеет предложение Она имеет так сказать не умирает Да и очень хорошая история Так что СТМ класс проблема только у стма одна знаете какая Т9 Т9 легендарный Т9 9 это я не знаю на ч он построено просто на комбинезон это похоже на проблему бустинга трени долго Ну да

я не знаю на ч он построено просто на комбинезон это похоже на проблему бустинга трени долго Ну да дара км вообще всё тренируется долго в целом как бы тема такая Будь здоров Но именно как бы проблема те они параллель у каждого опять свои плюсы и минусы Итого каждая архитектуры может быть двунаправленный да то есть у нас может быть а может быть также и соответственно СГ тоже самое многослойный многослойный Мы кстати про это с вами не поговорили но Представьте у меня приходит мама мыло ра Вот

многослойный Мы кстати про это с вами не поговорили но Представьте у меня приходит мама мыло ра Вот пришла последо ВС у меня здесь уже встречает Да есть встречает соответственно у меня есть какие-то Ну возьмём там да А как бы а кто мне запрещает ещё раз через такой же слой прогнать но по хорошему же никто верно и соответственно взять выходы которые дальше идут то есть вот вот это как бы можно было бы сказать ня что вот это при опять же больше указываете больше обуча всё очень просто да как бы

бы сказать ня что вот это при опять же больше указываете больше обуча всё очень просто да как бы Любой каприз за ваши деньги всё А вот 1 2 здесь это ЕС поставить и inp Si Как вы думаете in Si это что как бы для пофигу что было до этого у него это называется inp Si а Для нас это самое длинное ложение входящее смотри в одну входит Не предложение Нет ну кто у нас сюда входит укажем именно разме вот потом соответственно Это внутренняя размерность Лоя ну sequence Len Ну мы в принципе sequence Lens

потом соответственно Это внутренняя размерность Лоя ну sequence Len Ну мы в принципе sequence Lens будем ранее манипулировать Когда будем создавать последовательность нужной длины это не Конкретно вст стму вообще пофиг сколько слов обработать сколько пошлют ему столько он обработает такой вечно работающий конвейер А ну только чтобы конвейер работал туда данные нужно определённого размера подавать А сколько этих данных ну дело ваше Так ну что ж как-то так как-то так сейчас у нас с вами будет

А сколько этих данных ну дело ваше Так ну что ж как-то так как-то так сейчас у нас с вами будет пример с классификацией текста мы попробуем с вами создать архитектуру кстати сегодня у вас тоже будет классификация можете кому интересно сравнить с тем как бы у Вас бы сработал пайплайн например TF п L или Force п как бы сравнить с какими-то простыми пайплайф о и вот вот модели уже которые построены нево архитектуре как-то так в принципе всё Какие вопросы остались по теоретической части Хорошо

нево архитектуре как-то так в принципе всё Какие вопросы остались по теоретической части Хорошо тогда давайте делаем десятиминутка продолжаем я эту лекцию эту ЗМ конфу закрою чтобы запись уже начала а загружаться Вот поэтому я вам новую ссылочку скину примерно Ну давай через 10 минут Сейчас 48 в 59 минут я вам скину это сылку всё Давайте перерыв

Ну что детект я буду показывать в Кола запускайте вновь как хотите Я не решаюсь к себе локально устанавливать детрон мне страшно из-за того сколько он всего устанавливает Я уже запустил вот эту выполнил ячейку с установкой потому что он устанавливается довольно долго Но логика плюс-минус вже сама фа и работаем с ним в процессе установки он может выдавать некоторые ошибки в целом это никак не влияет на работоспособность если будет прям совсем всё плохо можете воспользоваться вторым вторым

влияет на работоспособность если будет прям совсем всё плохо можете воспользоваться вторым вторым вариантом установки это собственно всё что написано в документации То есть это я не сам придумал два варианта установки у него присутствует логика детект она похожа на то чем вы занимались на прошлой неделе то есть у нас есть какой-то централи репозиторий из этого репозитория мы можем забирать какие-то модели на прошлой неделе это были модели всякие там десне инсп там вчера Мы работали с ла то есть

модели на прошлой неделе это были модели всякие там десне инсп там вчера Мы работали с ла то есть тоже брали ла она могла быть маленькая побольше средняя большая неважно здесь идея та же но теперь Скорее это больше похоже на вариант прошлой недели то есть у нас есть какой-то спек мы определяемся с тем какую задачу Мы хотим решить выбираем для этого модель и пытаемся решить свою задачу с помощью выбранной модели чтобы всё это сделать нам нужно довольно много разных импов ну здесь есть блок

выбранной модели чтобы всё это сделать нам нужно довольно много разных импов ну здесь есть блок [музыка] импортом импортируем детект устанавливаем его лоер чтобы он нам в процесе обучения исходит зо моделе мы сейчас посмотрим как он работает Это собственно такой портал в перечень моделей детект импортируем класс который называется дедик в детект есть разные виды моделей поэтому для того чтобы обобщить с ними работу используется дел предиктор он может работать с моделями детекции моделями

обобщить с ними работу используется дел предиктор он может работать с моделями детекции моделями сегментации моделями Нати тоже будет видно что это такое ВМ это клас это такая надстройка над всеми моделями который понимает как с ними работать независимо от того какую задачу мы решаем чтобы обращаться к моделям мы будем использовать Get config собственно если это портал в Спектр моделей то вот это Это собственно то что мы будем писать в этом конфиге и будет к нам через этот портал прилетать

это Это собственно то что мы будем писать в этом конфиге и будет к нам через этот портал прилетать импортируем вновь у нагут быть очень разные зада ГТО мымре задачу детекции где-то можем решать задачу сегментации вот чтобы нам самим не рисовать всё это я думаю что вам наверно не очень в понедельник понравилось рисовать прямоугольники самостоятельно мы будем использовать лайзер который будет делать это за нас и для собственного датасета мы импортируем два класса metadata каталог и dataset

делать это за нас и для собственного датасета мы импортируем два класса metadata каталог и dataset каталог о них чуть позже они нам понадобятся Когда будем обучать на собственных данных я скачиваю простую картинку а читаю её с помощью библиотеки 2 надо это тоже запустить импортировать это картинка обычного самол но я Напоминаю что cv2 работает с другой последовательностью каналов То есть когда мы читаем картинку с помощью cv2 у неё изначальная последовательность каналов то есть чтобы нормально

читаем картинку с помощью cv2 у неё изначальная последовательность каналов то есть чтобы нормально это распечатала с помощью мы должны написать вго делать с помощью tch permute А можно сделать с помощью обычной индексации я беру всё то что у меня есть в Ну получается по ширине по высоте и все каналы разворачивают То есть можно переписать этот точ per здесь я делаю так это неважно на самом деле мы можем даже в принципе этого не делать Но тогда у нас будут некоторые проблемы с или здесь это не

мы можем даже в принципе этого не делать Но тогда у нас будут некоторые проблемы с или здесь это не обязательно Сейчас посмотрим короче нарисует но видите Да в принципе тоже неплохо но проблема с цветами присутствует А я хочу решить задачу детекции или задачу сегментации с помощью предобморочном этот датасет знает что такое самолёт как мне обратиться мо и скачать её передать ей картинку получить результат Я создаю экземпляр конфигурации и дальше задаю два пути Я сначала попробую решить задачу

результат Я создаю экземпляр конфигурации и дальше задаю два пути Я сначала попробую решить задачу детекции а потом задачу сегментации другой моделью Я отправляюсь отправляю точнее как бы записываю в свою переменную путь к фай который содержит информацию о модели детекции откуда я ть к этому фа переходим вот по этой ссылке попадаем на главную страницу детрон значит здесь есть всякие штуки связанные с просто демо того что можно делать в детект вот когда полосочки появляются на скелете это

с просто демо того что можно делать в детект вот когда полосочки появляются на скелете это называется KP detection то есть детекция ключевых точек тела в спорте довольно часто используется но разме за нудно Значит мы проходим здесь под всякими getting started и всё прочее и видим раздел Model Zo and baselines это то что нам нужно тыкаем по этой ссылке и переходим Сюда Здесь много всего написано а значит переходим к списку моделей и смотрим на первый раздел первый раздел - это Коко object

а значит переходим к списку моделей и смотрим на первый раздел первый раздел - это Коко object detection baselines почему он Коко тоже скажу а первый раздел касается моделей которые умеют решать задачу детекции То есть это модели которые не умеют закрашивать как это делают сегментации а просто рисую как вчера рисовала среди этих моделей нам интересна табличка R и мы видим что на самом деле даже один может быть очень разный Почему у них у всех такое двойное название вот когда мы видим что Ну

один может быть очень разный Почему у них у всех такое двойное название вот когда мы видим что Ну давайте какой пусть будет Вот это R4 модели свто здесь используется п обуч на доме на а C4 означает что архитектура се C4 Она состоит из нескольких сверточных блоков Она довольно компактная и соно мы е подробно не разбирали 10 означает что вот это уже не п а 101 а FN Это значит что Вот вместо вот этого в отличие от предыдущей модели здесь уже не C4 а Такая сеть есть которая называется net Вот она

в отличие от предыдущей модели здесь уже не C4 а Такая сеть есть которая называется net Вот она используется в качестве в этом блоке то есть видите конструк можем поста более точным менее точным более быстрым менее быстрым и вс прочее значит я могу перейти вот по этой ссылке и что я увижу я увижу что у меня появляется вот такая вот [музыка] штука и видите что здесь написано здесь написано откуда брать веса веса сох задачу детекции поэтому никакую маску она рисовать не будет И здесь перечень

брать веса веса сох задачу детекции поэтому никакую маску она рисовать не будет И здесь перечень того какие ты используются используется resnet с глубиной 50 то есть вот этот файл путь к этому файлу это фактически и есть как бы ну моё требование что мне достать из детект Давайте вернёмся Ну и про сегментацию отдельно Сейчас я скажу Костя вначале получается мы клонируем репозиторий целиком если например я вот локально буду делать и путь уже будет лежать у меня локально то есть последняя часть

например я вот локально буду делать и путь уже будет лежать у меня локально то есть последняя часть его понятна здесь а весь путь будет у меня в корне нет Если ты будешь устанавливать вот так вот а скорее всего то всё равно лучше указывать путь который как бы не привязан к твоему локальному потому что здесь фактически то же самое Это удалённый сервер на котором Юпитер то есть вот этот вот мо который мы импортированный адрес до вот этого фай главно сказать какая модель а остальное уже сделать

мы импортированный адрес до вот этого фай главно сказать какая модель а остальное уже сделать Понял сейчас а тем кто в коллабе Что делат с этим репозиторию ну установить как я установил так ничего больше не делать Ну либо вот так но я думаю что в целом типа калап Вроде как один поэтому так сработать должно в первую очередь должно сработать вот так да СБО Так значит я модель для детекции И теперь я вот здесь вот сейчас поменяю что я хочу детек модель использовать я говорю то есть обращается к

я вот здесь вот сейчас поменяю что я хочу детек модель использовать я говорю то есть обращается к тому названию которое я туда передал разбирает его говорит где там веса где всё остальное ние того что у нас есть конкретная модель что там пся откуда взять веса и вс прочее далее я с помощью вот конфига устанавливаю такой непростой параметр config Mods Test это порог обнаружение если он низкий у меня будет рисоваться много всего много бадин боксов повышая и регулируя его в целом я буду бы

у меня будет рисоваться много всего много бадин боксов повышая и регулируя его в целом я буду бы фильтровать те бас в которых модель не уверена отра в этом опять помогает и здесь мне тоже нужно написать потому что я сейчас конкретно вот с этой вот моделью работаю и теперь у меня есть веса есть модель есть параметр обнаружения вот этот ште что я говорю я говорю Преди возьми conf ВМ кон ме чтобы осуществить ние э после этого в предиктор передаю картинку и записываю в переменную out в этом ае

осуществить ние э после этого в предиктор передаю картинку и записываю в переменную out в этом ае будет много всего что там ему виде ГПУ что-то там Непонятно может у меня видеокарта не включена Да какая грусть придётся всё перезапускать Ну давайте пока здесь посмотрим потому картинка здесь Проходит вот зде в этом outputs мы привыкли там что у нас выход модели - это какая-то простая штука типа вероятность там или я не знаю что-нибудь ещё вот а в текущем случае у нас outputs намного сложнее

вероятность там или я не знаю что-нибудь ещё вот а в текущем случае у нас outputs намного сложнее сейчас я к нему вернусь я просто запущу всё то что было до этого в этом outputs а по большому счёту это на самом деле словар здесь есть ключ instances в этом ключе inst что я вижу что он у меня обнаружил один объект я напоминаю Я сейчас работаю с тем самолётом который я скачал выше он обнаружил один объект на картинке вот такого вот размера и в поле FS он мне перечисляет предсказанные боксы то есть

на картинке вот такого вот размера и в поле FS он мне перечисляет предсказанные боксы то есть его предсказанный бокс который он нарисовал находится по вот этим координатам левый верхни правый нижний Уде проще ОМТ обратно Даше Я вяжу SC То есть это вероятности того что этот Bing Bo содержит какой-то объект вероятность этого объекта 0,99 Ну практически единица для вот этого самого самолёта дальше предсказанные классы это нзр 4 То есть это индекс класса четвёртый теперь нам нужно понять откуда

предсказанные классы это нзр 4 То есть это индекс класса четвёртый теперь нам нужно понять откуда собственно наша модель знает что это там какой-то индекс класса и так далее э модель предо обучена на датасете который называется Коко в этот датасет который является одним из дасе сравнения моделей детекции и сегментации как для классификации так коко для детекции сегментации и здесь мы можем просто натыкается картинки из того датасета на котором размеченный здесь есть и овцы и коровы но ещё есть

натыкается картинки из того датасета на котором размеченный здесь есть и овцы и коровы но ещё есть люди То есть это датасет супе общего назначения И в этом датасете где у нас самолёты в этом датасете есть в том числе больше 3.000 изображений самолёта эти самолёты тоже все размеченный Ну что там ну короче он пока будет устанавливаться как мне ну Собственно как мне выяснить что у меня действительно вот в моём конфиге есть информация о том на чём модель обучалась если я у этого конфига распечатаю

вот в моём конфиге есть информация о том на чём модель обучалась если я у этого конфига распечатаю вот это вот поле config она у меня покажет что обучалась эта модель которая у меня сейчас записана в Конфи 201 тута катало Get и передать туда название датасета то есть спросить собственно А что это за датасет и я вот здесь вот увижу что у этого датасета название Коко 2017 у него есть там какой-то J файл это всё лежит в детро в самом у него есть какой-то там путь к его картинкам и дальше у меня

J файл это всё лежит в детро в самом у него есть какой-то там путь к его картинкам и дальше у меня видите есть такой словарь здесь у меня просто сопоставление что у меня есть какие-то классы которые внутри как-то по индексам связаны И теперь я смотрю вот название классов У меня есть класс У меня есть класс ble мотоцикл и Air 0 2 3 4 соответственно вот такой ком предсказанный класс это Tor 4 А 4 - это на если обратиться к тому датасет на котором эта модель была предо это просто самолёт Вот Но

- это на если обратиться к тому датасет на котором эта модель была предо это просто самолёт Вот Но нам на самом деле не столь Интересно что Ну какие там классы предо были хотя мы можем это распечатать без проблем нам вот надо дождаться чтобы эта вся штука уже наконец установилась Но кажется что скоро это сработает Костя А пока ждём а Правильно ли я понимаю что по факту теперь нет задачи учить на своих данных эти классы или вс-таки она остаётся не кла в целом нет нет ну просто тебе тогда просто

своих данных эти классы или вс-таки она остаётся не кла в целом нет нет ну просто тебе тогда просто если ты хочешь например я не знаю определять самолёт и овец модель те ВС равно всё будет определять всё что увидит вот в целом можно сделать Ну как бы тут работает общая логика что если у нас [музыка] тамме хотим переформатировать на свою зада сделаем свой небольшой дасе там несколько итераций подо обучим и она справится То есть тут также как делали Просто мы здесь явно не можем явным образом

обучим и она справится То есть тут также как делали Просто мы здесь явно не можем явным образом менять слои так как мы это делали в пайтор потому что это нужно копаться в самом детект Поэтому если мы хотим такую задачу решить берём наш небольшой датасет немножечко на нём модель тюним и всё будет окей модель поймёт что Да нужно два класса такт вро остановились на вот этом Ну можем ещ раз тут распечатать Это не проблема вот на самом деле нормальный выход деций модели то есть и так далее вот он

Это не проблема вот на самом деле нормальный выход деций модели то есть и так далее вот он ключ inst Вот это всё остаётся прежним то есть мы понимаем что модель знает что-то о самолётах теперь к визуализации создаём экземпляр визера передаём в него картинку передам вго метаданные откуда нание лассо изображений сде и Даше у этого вызываем и говорим ему что вот отсюда из возьми Отправь их на процессор И нарисуй их на вот этом изображении которое мы тебе туда передали И после этого просто можем

И нарисуй их на вот этом изображении которое мы тебе туда передали И после этого просто можем распечатать Зачем на cpo отправлять а потому что cv2 не умеет с тендерами работать а внутри этот визуалайзер работает на cv2 Угу Понял Саш Да вот в предыдущей версии ноутбука у тебя был выделен сегмент самолёт А тут это ну ты сейчас покажешь как это сделать или дадада это сейчас мы запустили модель детекции Она не умеет сегментировать дада да всё понял вот а значит тут на самом деле понятно что всё

Она не умеет сегментировать дада да всё понял вот а значит тут на самом деле понятно что всё намного более многословно чем было вчера вчера мила и Йола сохраняла нам сразу всё что мы хотим мы просто картинку отправляли но Что есть то есть но что относительно хорошо и удобно в том что теперь я хочу использовать например модель сегментации я перехожу обратно в зоопарк моделей то есть вот эта модель которая умеют решать задачу детекции они умеют только рисовать прямоугольник идём дальше и [музыка]

которая умеют решать задачу детекции они умеют только рисовать прямоугольник идём дальше и [музыка] смотрим это модель которая умеет рисовать маску то есть сегментировать состоит Как видите вы она абсолютно из тех же компонентов из которых состоит rcnn то есть вот как я говорил что - это фактически часть мас причём подавляющая так оно на самом деле и есть пойло Можем поста мы копируем и вставляем в нашу переменную то есть теперь я выбираю А по пути instant segmentation Mask arn r50 fpn 3X и

в нашу переменную то есть теперь я выбираю А по пути instant segmentation Mask arn r50 fpn 3X и записываю в переменную seg Mod чтобы получить вот чтобы сделать всё тоже самое что я сейчас делал с детекцией мне достаточно вот здесь вот просто поменять переменную то есть Я указываю своему [музыка] и дальше я буду делать тоже самое вот они мои Out Но вот это вот кто может сказать что такое является ли пиксель классом Да вот эта вот маска это и есть та самая маска которая отдаёт нам маска rcn мы

ли пиксель классом Да вот эта вот маска это и есть та самая маска которая отдаёт нам маска rcn мы понимаем что с левого верхнего угла Да вот она строка для первых пикселей в левом верхнем УГ меня самол нет меня самот на месте вот этих двоеточие где-то там есть Т что пиксель принадлежит классу самолёт мы можем Но тут ничего не поменяется мы можем это всё обучены они всё равно на датте Коко поэтому мы можем просто отправить всё это визуалайзер Пожалуйста теперь у меня модель умеет сегментировать

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

на котором я буду показывать пример давайте мы представим что дава сда загружу чтобы понять как его разметить у меня в принципе там все эти же файлы но я на одном просто Покажу значит вот мы загрузили какое-то количество изображений и переходим к аннотирования этих изображений так сейчас главное здесь не не запутаться создам новый проект так будет более Понятно В любом случае назову его тест теперь выбираем ин сегментацию вчера была сегодня ин сегментация и и так где где из-за Зума не видно

выбираем ин сегментацию вчера была сегодня ин сегментация и и так где где из-за Зума не видно видимо нажимаем ВС назначаю себе У меня нет команды нажимаю ста и пользуюсь собственно здесь есть погон и поехали я смен в Блин нет как в Фотошопе типа который по цветам хотя бы там выделять это это второй вариант Давайте Ого куда-то мы не туда пришли значит здесь есть такая штука Давайте я вот эту удалю которая называется Смарт полигон она вам поможет сделать вот сль м сде Вам скажет Дай 10 баксов

которая называется Смарт полигон она вам поможет сделать вот сль м сде Вам скажет Дай 10 баксов может быть на ро может быть на 202 не знаю как бы тут определяйте сами вот всё если будете с сегментации решать задачу на выпускном проекте придётся тыт разметить картинок самостоятельно поэтому тут дело такое значит дальше всё тоже самое то есть вы размечается создать новый дае добавляете аугментации я ВС это сес делать не буду потому что у меня готовый есть дае нажимаем и самое главное что вы

я ВС это сес делать не буду потому что у меня готовый есть дае нажимаем и самое главное что вы делаете при экспорте вы проверяете что теперь у вас пункт не Да где она там была вот вчерашний пункт А теперь у вас должно быть написано [музыка] вам генерируется такой же фрагмент кода который был вчера и этот фрагмент кода Вы можете запросто вставить к себе в ноутбук значит здесь я просто скопировав по готовому дасе который разме беру Все вчерашние картинки но теперь уже сегментированные если мы

по готовому дасе который разме беру Все вчерашние картинки но теперь уже сегментированные если мы обратимся в нынешнюю и у меня тут есть все те же самые картинки на них можно особенно внимание не обращать они вчера все уже были но теперь у меня появляется такой Файлик который называется an J я его тоже могу открыть и вот здесь вот я увижу другой формат разметки у меня здесь тоже есть бабосы например а также у менятся коорди пикселе вот узлов вот этого полигона которым я отмечал тогда у нас

а также у менятся коорди пикселе вот узлов вот этого полигона которым я отмечал тогда у нас вчера были четыре координаты потому что Понятно прямоугольник по чем координатам мы проводим сегодня разметка более сложная мы подробно копаться в ней не будем Потому что она нам Ну визуально мы с ней ничего делать не будем но тут очень важного у меня приведена вот здесь у меня есть Папочка с датам Gold Папочка TR Вот она в ней есть список файлов и они там правда есть и есть обязательно файл annotations

TR Вот она в ней есть список файлов и они там правда есть и есть обязательно файл annotations J он может по-разному называться потому что путь к нему мы будем вручную указывать но обязательно файл с аннотациями должен находиться здесь же в этом файле J есть имена файлов этим именам файлов соответствуют координаты полигонов координаты ба боксов и всего остального Ну многое делает за нас и Это прекрасно мы скачали датасет теперь нам нужно его зарегистрировать вне тоже делается сложнее чем вчера

мы скачали датасет теперь нам нужно его зарегистрировать вне тоже делается сложнее чем вчера мы импортируем функцию регистр Коко instances то есть мы размеченный в соответствии с детров скими правилами датасет хотим зарегистрировать в этом детро что я т дела функцию register instances называю Doc Train Мета дату вот здесь оставляю пустой и указываю путь к J фай мы можем проверить что у меня здесь Content Doc Семен 1 TR annotations Coco Jon вся вот эта папка Content do у меня здесь Golden

здесь Content Doc Семен 1 TR annotations Coco Jon вся вот эта папка Content do у меня здесь Golden segment 1 приходим в Train ищем J File вот он копируем его путь копируем его путь и вставляем вставили - это папка в которой содержится изображение то есть мы указали как бы путь к папке путь к файлу теперь указываем путь к изображения Мне нужно зарегистрировать вторую часть датасета Лину Ява вторую переменную пустой вот эта вот Мета дата нам она не понадобится и захожу вот сюда беру путь

вторую переменную пустой вот эта вот Мета дата нам она не понадобится и захожу вот сюда беру путь annotations Jon только уже в валидация части Вставляю и здесь указываю папку к валидацию изображениям а теперь у меня ВС Ну если есть тестовая часть я сейчас временно тратить не буду если у вас будет тестовый части по аналогии всё делается теперь я должен а создать каталог и каталог Я говорю это у меня вот этот вот дае это метаданные метаданные в которых написаны Собственно как каждый класс

у меня вот этот вот дае это метаданные метаданные в которых написаны Собственно как каждый класс называется мы для Коко печатали это сверху и дальше это дата каталог тоже самое делаю для Валида части То есть вам здесь только название нужно будет поменяем [музыка] неинтересные если ошиблись в регистрации с помощью метода po можно удалить ненужные датасеты но рекомендую не ошибаться там легко запутаться вплоть до перезапуска всего ноутбука обучение У меня есть два моих точнее У меня есть свой

вплоть до перезапуска всего ноутбука обучение У меня есть два моих точнее У меня есть свой дасе теперь я хочу запустить обучение я буду использовать модель сегментации rnn r114 указываю сразу создаю конфигурацию также как выше говорю Откуда забрать Там информацию о модели указываю Какие датасеты буду использовать config то есть говорю что теперь у меня мои собственные датасеты они предо говорю модели Откуда забрать [музыка] настоящий указываю начальный lear он указывается тоже через

говорю модели Откуда забрать [музыка] настоящий указываю начальный lear он указывается тоже через конфигуратор это B lear ставлю его таким в процессе обучения этот Le будет сам меняться в зависимости от того Как идёт процесс обучения но там на самом деле используются просто разные трюки Типа если качество хорошо падает будет чуть повы если замедляется то чуть пониже задаю сколько итераций буду обучаться У меня 30 задаю вторую вариацию бач сайза вторая вариация бач сайза она внутри модели у нас

У меня 30 задаю вторую вариацию бач сайза вторая вариация бач сайза она внутри модели у нас же там в несколько этапов обучается она внутри модели но я поставлю здесь четыре Вот здесь мнен предлагает 496 но спасибо конечно Джеми не Гугловский но у меня столько памяти нет и столько картинок тоже читать Вот по вот этой вот ссылке но ваша жизнь Никак не поменяется и указываю Какое количество классов есть в моей модели значит то какое количество классов есть в моей модели Почему важно потому что у

есть в моей модели значит то какое количество классов есть в моей модели Почему важно потому что у меня сейчас модель скачается обученная на датасете Коко А мне нужно её перестроить то есть заменить как минимум последний слой Ну если мы это делали по аналогии с заданием с прошлой недели Мне нужно как минимум заменить последний слой поэтому выходное число классов Мне нужно для того чтобы моя модель была адаптирована под мою задачу это тоже нужно указать делается это вот очень простой вот такой

была адаптирована под мою задачу это тоже нужно указать делается это вот очень простой вот такой строкой do Met и это собственно вот тот список с классами который я распечатываем папку для сохранения всяких промежуточных результатов создам обект тренировка это обе кой любые модели из детект то есть мы просто говорим что у нас есть какой-то конфиг с какой-то моделью А этот Trainer он будет у нас эту модель Он знает как эту модель обучить здесь я вызываю Trainer resume or Load resume fse Мне

эту модель Он знает как эту модель обучить здесь я вызываю Trainer resume or Load resume fse Мне продолжать Ну в смысле у меня модель сейчас я её только скачал продолжать обучение мне не нужно если я типа её пооб учал и потом хочу продолжить нужно вот с этой переменной поколдовать и Trainer собственно можем запустить обучение нам здесь распечатывается архитектура модели она тоже написана пайтор свёртки бармы с определённой модификацией значит rpn сеть Да прол генератор свёртка свёртка свёртка

свёртки бармы с определённой модификацией значит rpn сеть Да прол генератор свёртка свёртка свёртка значит это этото собственно всякие там слои специфичные для этой модели вот он это of и всё прочее в процессе обучения мне там что-то должно печататься давайте мы это О он здесь говорит что он нашёл значит 48 представителей класса дог то есть 48 У меня собак на картинках всего это какая-то техническая Тука при размет ня У меня есть ещ одна категория В которой ноль представителей но Окей это как

Тука при размет ня У меня есть ещ одна категория В которой ноль представителей но Окей это как бы его его задача и теперь смотрим 30 итераций что у нас тут происходит Лос то 0,86 Ну и дальше ло классификации регрессии всё всё как обычно я сейчас обучил свою модель на итерация этого естественно мало То есть Вам нужно обучать на большем ле 400 500 600 800 900000 совершенно без проблем но мне сечас делать это просто ни к чему что мне нужно чтобы использовать готовую модель Мне нужно в конфиг

делать это просто ни к чему что мне нужно чтобы использовать готовую модель Мне нужно в конфиг записать те веса которые я получил при обучении модели эти веса у меня сохраняются в папке [музыка] это ве модели которые я получил после обучения также как сохраняет последнюю версию весов также дерон сохраняет последнюю версию весо Я теперь вместо того что чтобы говорить конфигуратор Я ему говорю возьми-ка вот conf out это вот вотка [музыка] ве Теперь у меня есть как бы модель с Весами Я задаю вот

вот conf out это вот вотка [музыка] ве Теперь у меня есть как бы модель с Весами Я задаю вот этот тш тест порог обнаружения и создаю экземпляр предиктора ровно так же как это я делал выше но выше я делал это для предобрий какую-нибудь картинку Давайте возьмём картинку из теста у меня здесь есть какая-то одна картинка Я думаю что ничего он не определит потому что 30 итерации это смешно просто но тем не менее картинку читаем создаём отправляем её в предиктор создаём prediction также как и на в

тем не менее картинку читаем создаём отправляем её в предиктор создаём prediction также как и на в примере выше можем распечатать outputs Нет что-то он нашёл смотрите удивительно Хренова и для того как у меня там картинки разме Ну хотя они у меня там неплохо разме Вот если бы мы пооб бучали модель ещё результаты были бы лучше Но ведь детекция сработала прям хорошо что это действительно собака Да плоховато он её закрашивает но в целом ничего особенно страшного нет Понятно Что можно учить дальше

плоховато он её закрашивает но в целом ничего особенно страшного нет Понятно Что можно учить дальше если бы данных было больше обучали бы большее количество ици результат был бы получше ну здесь есть некоторый пример с валидации он в принципе запускается нормально но у меня в тесте одна картинка там не очень понятно че валидировать на ней Поэтому если у вас будет в тесте больше картинок можете попробовать запустить валидацию Ну и е иногда бывает удобно использовать такую ту она называется TB

попробовать запустить валидацию Ну и е иногда бывает удобно использовать такую ту она называется TB это такая инструмент трекинга обучения вот тем кто может быть хотя что-то он не сейчас он загрузится В общем Когда у нас метрик для того чтобы метрик и лоссов много можно использовать вот такую штуку она она у нас Что делает она рисует нам всякие метрики и всё то что у нас собирается в процессе обучения модели видите здесь лосы у меня мало итераций поэтому он выглядит всё не очень хорошо Вот но

модели видите здесь лосы у меня мало итераций поэтому он выглядит всё не очень хорошо Вот но просто она берёт вот этот вот файл А где у нас output вот events Out TF events это файл в котором история обучения содержится и можно вот просто двумя как бы такими командами попробовать запустить и сразу получить метрики Вот Но это так просто со звёздочкой если кому-то будет интересно ну по коду У меня всё собственно Сергей а у меня возможно стыдный вопрос но я каждый раз забываю Зачем нам делить на

всё собственно Сергей а у меня возможно стыдный вопрос но я каждый раз забываю Зачем нам делить на именно три выборки Чем отличается Валид и тест вот я всегда забываю в ЧМ В чём смысл теста тогда Ну смотри а у тебя валидация выборка влияет на параметры модели потому что подразумевается что ты взя наме какую-нибудь простенькую нейросеть Да обучил е на обучающей выборке проливал на тестовой зафиксировал результат у тебя например результат Ну не очень хороший Ты понимаешь что мог бы получше в этот

результат у тебя например результат Ну не очень хороший Ты понимаешь что мог бы получше в этот момент ты возвращаешься к своей модели и например её как-нибудь меняешь Ну в бустинг увеличивало деревьев число итерации в не увеличивало сло Вт на то как ты выбираешь модель Правильно Потому что по ционной выборке Ты понимаешь что тебе результат бы хотелось Как улучшить типа чтобы я не переобулся подгоняя под валидацию потому что это тоже можно сделать на самом деле если очень долго и упорно пытаться

под валидацию потому что это тоже можно сделать на самом деле если очень долго и упорно пытаться у тебя фактически валидация часть - это всё-таки часть которая связана с обучением вот а тестовая часть подразумевается что вот тестовая часть это ВС когда ты там сдел несколько моделей кандидатов кандидаты тоже подбирал основываясь на показателях валидации и потом ты берёшь тестовую часть и на тестовой части ты уже выбираешь что лучше всё понял спасибо да Дима а в качестве объекта сегментации мы

части ты уже выбираешь что лучше всё понял спасибо да Дима а в качестве объекта сегментации мы можем любый объект выбирать или только те которые в Коко есть не любые любые это семейство моде оно также по умолчанию работает с видеокартой да да вот видел сегодня я пытался когда показывал она мне сразу сказала Установите драйвер NVidia Угу там А в принципе ну не в принципе а её можно То есть если её обучить например на коллабе её локально можно заставить там тоже типа вот а Map Location CPU как в

обучить например на коллабе её локально можно заставить там тоже типа вот а Map Location CPU как в точе было вот тоже самое Там где-то надо написать я не помню На каком этапе Но это первая строка в Гугле будет это частый вопрос Сергей У меня вопрос по разметке если допустим я возьму какой-то объект которого нет вот в этом в Коко то что то есть будет плохо работать вообще не будет работать ну у тебя у тебя по этому объекту должна быть обучающая выборка соответственно насколько много таких

у тебя у тебя по этому объекту должна быть обучающая выборка соответственно насколько много таких объектов насколько хорошо они разме Нет почему он подхватит новые объекты без проблем сдобу моде в кото этого об его не сегмент она не знает что это такое но если ты размести на своих данных возьмёшь предо модель и дот её на собственных данных тогда она будет работать Угу То есть можно вообще не ориентироваться на то что есть в Коко Да да ну обычно на это ориентируется потому что это некоторый

ориентироваться на то что есть в Коко Да да ну обычно на это ориентируется потому что это некоторый косвенный прогноз на то сколько тебе потребуется данных Если у тебя есть что-то очень похожее в Коко то тогда модели будет проще перестроиться потому что она это уже видела то есть какие-то похожие объекты ви а если ты например хочешь я не знаю какие-нибудь там условно Э я не знаю эритроциты находить на в своём датасете да естественно она не видела никогда эритроцитов ей намного сильнее придётся

на в своём датасете да естественно она не видела никогда эритроцитов ей намного сильнее придётся перестроиться чем например коровой чёрно-белой и коровой там бело-коричневый А ещё вопрос если я допустим хочу взять э ну какие-то классы которые похожи визуально друг на друга Ну условно там э чтобы модель различали тут Какая рекомендация просто больше эпох для обучения больше данных и больше эпох да чем меньше вариативность межклассовая то есть иначе говоря чем больше класса похожи между собой тем

чем меньше вариативность межклассовая то есть иначе говоря чем больше класса похожи между собой тем больше нужно данных потому что это сложная задача понял спасибо уба такой вопрос Если Вех к ним и также оставлять и просто пусть оставить и всё да Э так сейчас Давай посмотрим Да ты вот config Model wis здесь можно просто в кавычках написать путь к модели и всё он ждёт путь к файлу с Весами понял О'кей тогда ну я думаю что задание предсказуемо собственно Наверняка да пройти полный путь от

понял О'кей тогда ну я думаю что задание предсказуемо собственно Наверняка да пройти полный путь от разметки до получения результата здесь даны некоторые рекомендации можете использовать вчерашний датасет можете взять какой-нибудь новый датасет который может быть попроще размечается по командам сохраняется потому что сегодня ну размечается в детект у вас находится в разделе instant segmentation то есть детекции ну в смысле Вы можете детекцией в задачу детекции вы уже Хотя наверное сможете Ну

то есть детекции ну в смысле Вы можете детекцией в задачу детекции вы уже Хотя наверное сможете Ну лучше не рисковать я честно говоря не знаю Потому что так никогда не делал и обязательно убедитесь в том что вы берте модель из inst потому что классика я обучил модель 1.000 эпох ждал 1.000 картинок разметили она не сегментировать потом ты смотришь у человека а у него модель детекции как бы она и не должна сегментировать ничего потому что это модель которая не работает с сегментации вот поэтому

не должна сегментировать ничего потому что это модель которая не работает с сегментации вот поэтому Будьте аккуратны с этим А и немного ориентируйтесь на вот эти характеристики которые здесь представлены это собственно секунда на итерацию то есть здесь есть как бы больше полусенсорный можно запустить это тоже важно Костя Да всё про это и был вопрос как вот посмотреть параметрам Какие модели полегче потяжелее Ну на самом деле фактически здесь все Столбцы Они более-менее между собой скоре То есть

потяжелее Ну на самом деле фактически здесь все Столбцы Они более-менее между собой скоре То есть получается что чем наша модель Ну занимает меньше памяти тем скорее всего она работает быстрее тем скорее всего она будет быстрее работать скорее всего у неё будут чуть ниже метрики то есть всё как обычно Ну и кстати видите Посмотрите на average precision да Видите я вам вчера говорил что среди множества классов сложно добиться хорошего average Престиже Ну то есть хорошего МПа на для всех классов

классов сложно добиться хорошего average Престиже Ну то есть хорошего МПа на для всех классов поэтому здесь ПТО собственно не выходит даже за пределы 45% а то есть для таких это сложные модели которые решают сложные задачи поэтому там вот этого О мы классифицировали изображение на 99 и5 такого здесь не бывает [музыка] Саша а у нас идёт дупликация первых трёх моделей потому что там одноканальные и трёхканальный или не понимаю ну вот там дублируют Поня нет Вот это это планировщик Learning это то

трёхканальный или не понимаю ну вот там дублируют Поня нет Вот это это планировщик Learning это то как изменяется в процессе обучения То есть у тебя то есть это у нафиро полу первых ТХ как мы его ставим так он остаётся Да вот собственно типа они все работают с цветными картинками ну то есть просто что там в остальных моделях просто динамически изменяется да Да сечас можно голосом на секунду включу тогда Попробуйте сохранять просто ина Попробуйте сни просто делать скриншоты на баке это вообще

тогда Попробуйте сохранять просто ина Попробуйте сни просто делать скриншоты на баке это вообще работать безотказно у хорошо Ну у нас все изображения были JB Я просто взяла готовый датасет и подёргивается [музыка] нет попробую спасибо Да Попробуйте потому что ну время от времени у людей возникают проблемы с браузерами вот я закономерности никакой не выяснил но Ну вот Сергей пишет что на Яндекс браузере Всё норм Возможно не самый Такой весёлый сайт в этом плане потому что там много всяких наво

Всё норм Возможно не самый Такой весёлый сайт в этом плане потому что там много всяких наво туму несколько попробовать я сейчас вот заходила пробовать опять проект entation создавать но почему-то тоже не даёт загружать но у меня есть до сет прошлый если что подстраховка поэтому А что он не даёт загружать как ну ну вот прямо сразу когда заходишь да Для того чтобы добавить картинки по проект вот я могу сейчас пошарить а давай Угу а только у меня нету права А Да теперь есть Угу Так делится вот

я могу сейчас пошарить а давай Угу а только у меня нету права А Да теперь есть Угу Так делится вот пожалуйста заходим да а это у меня уже проект который был создан На прошлой фазе Вот я допустим беру картинки Ну даже не буду много брать вот скажем вот что происходит то есть он хочет грейда и даже ну то есть ни одной картинки из восьми он не загружает ты уже 10.000 загрузила Ну нет у меня было в прошлый раз 150 и перед этим 150 Ну то есть примерно 300 картинок наверное в общей сложности А если

прошлый раз 150 и перед этим 150 Ну то есть примерно 300 картинок наверное в общей сложности А если вот нажать кнопку продолжить без апгрейда всё рано он ничего Да не выгружает он просто те показывает что он загрузит Но из Но из пап и всё при том что насколько Ну я понимаю вот мы вчера с Сашей это обсуждали Даже если он ну создаёт новый аккаунт создаёт новый проект всё равно такая ситуация почему-то происходит Вы гуг пробовали я вообще первый раз такое Вижу у меня просто десятки тысяч уже

происходит Вы гуг пробовали я вообще первый раз такое Вижу у меня просто десятки тысяч уже размещенных на без оплаты на Я первый раз такое окно вообще вижу Ну возможно конечно проблема в браузере ещ но как бы проблема остаётся и возникает время от времени Угу Ну возможно не знаю А можно действительно попробовать другой браузер потому что я всё в сафри естественно делала Вот Может конечно с этим связано но пока так так что если вдруг что у меня есть старый датасет я могу пошарить там правда 150

но пока так так что если вдруг что у меня есть старый датасет я могу пошарить там правда 150 картинок всего Ну в принципе ну ничего для как бы такого тестового запуска пойдёт Главное чтобы всё это запустило там понятно что и дасе можно сделать больше и больше можно качество сделать и модель более огромную использовать Но главное чтобы это в целом запустило с Угу угу Окей Ну что успехов тогда да Спасибо Давайте картиночки о боты не нужно делать нужно Ну теперь тоже проблем никаких ла да это

да Спасибо Давайте картиночки о боты не нужно делать нужно Ну теперь тоже проблем никаких ла да это правда Ну всё

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

посмотрим на двухэтапное модели с которыми собственно семейство постоянно соперничает в качестве в скорости и во всём остальном и сегодня мы посмотрим на то как устроен ещё один большой фреймворк от Фейсбука который собственно содержит в себе очень большой количество моделей для решения задач комь многословный то есть там уже нужно намного больше написать всего для того чтобы его завести от него вроде как В целом хочется уже Немного отойти потому что он довольно монструозный стороны как бы

вроде как В целом хочется уже Немного отойти потому что он довольно монструозный стороны как бы постоянные его обновления постоянные исправления дополнения они намекают на то что это в общем до сих пор актуально и люди этим пользуются то есть регулярно обновляется и всё такое Поэтому в индустрии тоже довольно популярная штука и придётся с ней познакомиться значит двухэтапный модели детекции то есть модели которые почему-то в два этапа обрабатывают в отличие от ёлы входящее изображение для того

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

немного издалека самый простой подход который был ну он не то чтобы самый простой но такой как бы подразумевающий не очень большое количество ресурсов и не очень исследованную область на тот момент он заключался в следующем его во-первых назвали RC который очень просто расшифровывается это регионы с CN фичами признаками В чём идея пусть у нас есть какое-то входящее изображение Давайте возьмём какой-нибудь классический алгоритм из компьютер вина таких алгоритмов довольно много которые на основе

классический алгоритм из компьютер вина таких алгоритмов довольно много которые на основе контраста на основе там каких-то перепадов цветов и всего остального наге нери ет нам каких-нибудь предположений то есть регионов кандидатов в которых потенциально могут находиться какие-то объекты пример того как этот алгоритм выглядит мы на следующем слайде посмотрим можно абстрагироваться у нас есть какой-то очень простой алгоритм который просто говорит нам Что ага вот здесь вот цвет например поменялся

очень простой алгоритм который просто говорит нам Что ага вот здесь вот цвет например поменялся значит наверное в этом регионе какой-то объект Начинается да потом Мы двигаемся дальше видим что цвет опять поменялся Значит возможно этот объект здесь заканчивается этот алгоритм он назывался sech выборочный поиск он герова примерно 2000 Вот таких вот регионов кандидатов просто какие-то прямоугольные области в которых по предположению этого алгоритма очень простого очень глупого не обучающегося а

области в которых по предположению этого алгоритма очень простого очень глупого не обучающегося а такого просто аналитического а по предположению этого алгоритма вот на картинке предполагалось наличие примерно 2.000 объектов 2.000 взятые авторами статьи такое количество отдаёт Конкретно этот алгоритм их может быть больше их может быть меньше Но они остановились на 2000 на как на компромиссного варианте после этого из изображения вырезаются все регионы которые нам задаёт этот самый алгоритм

варианте после этого из изображения вырезаются все регионы которые нам задаёт этот самый алгоритм selective Search все эти регионы они прямоугольные Они округляются до прямоугольных И после этого ресайз в какой-то фиксированный размер который принимает на вход вот это вот свёрточная сеть э свёрточная сеть она в оригинале была кафене это аналог Google нета ренета и всех-всех вот э вот реят значит после того как все эти картинки точнее все эти регионы отре сайли Они пропускаются через свёрточные

после того как все эти картинки точнее все эти регионы отре сайли Они пропускаются через свёрточные здесь есть также полносвязный слои эти полносвязный слои отдают в персональные обученные методы опорных векторов это у на с и каждый из методов опорных векторов решает За присутствует ли в текущем обработанном с помощью свто сети регионе какой-нибудь объект метод опорных векторов - это бинарный классификатор он по умолчанию не умеет решать задачу [музыка] многокрылый выборке обучается отдельный

он по умолчанию не умеет решать задачу [музыка] многокрылый выборке обучается отдельный метод опорных векторов то есть конт метод один и тотже вектор получают все методы опорных векторов Здесь нам метод опорных векторов отвечает что Ну например он нам предсказывает есть ли самолёт в текущем регионе мы можем как обычно 05 выбираем в качестве порога если у нас предсказанная вероятность меньше чем 0,5 значит это не самолёт дальше мы можем сказать Что отправляем Вектор в свм который заточен на

0,5 значит это не самолёт дальше мы можем сказать Что отправляем Вектор в свм который заточен на классификацию там что это такое Ну типа экрана он нам отвечает Нет это не экран этот же Вектор поступает в классификатор который умеет отличать людей от всех остальных он нам отвечает да что здесь есть человек с какой-то высокой вероятностью значит Ну тут уже можно представить себе Почему этот алгоритм не оптимальный но мы пройдёмся ещё раз сначала вернувшись Рим кото достаточно сильно похож на к

не оптимальный но мы пройдёмся ещё раз сначала вернувшись Рим кото достаточно сильно похож на к ближайших соседей то есть что делает ка ближайших соседей он как бы присоединяет к себе точки смещает у них центр кластера на основе новых точек которые отнесены к этому кластеру и таким образом Просто может объединять как бы регионы входящего объекта Даже на изображениях это работает и как бы говорить о том что вот в каком-то например регионе цвет не очень меняется поэтому мы считаем что и он

о том что вот в каком-то например регионе цвет не очень меняется поэтому мы считаем что и он содержит в себе какой-то объект алгоритм selective Search по сути отличается но по форме выхода очень похож он работает итеративный способом Сначала он анализирует перепады цветов с очень маленькой чувствительностью Потом эта чувствительность увеличивается он получает как бы вот такие вот представления более укрупнённые и в итоге он может отдавать Примерно вот такую картину соответственно если мы знаем

укрупнённые и в итоге он может отдавать Примерно вот такую картину соответственно если мы знаем левый верхний и А ну самый левый и самый верхний самую верхнюю точку начала определённого цвета и знаем самую нижнюю и самую правую точку конца цвета мы можем по этим двум координатам провести Ну сделать прямоугольник построить по ним прямоугольник и соответственно говорить что вот у нас есть вот такой вот результат то есть наш алгоритм selective Search считает что вот это вот какой-то Объект который

вот результат то есть наш алгоритм selective Search считает что вот это вот какой-то Объект который в целом может быть полезен для того чтобы мы решили задачу детекции объекта а в чём минусы собственно такого подхода минусы такого подхода заключаются в том что во-первых а выделение с помощью какого-то левого алгоритма 2.000 предположений оно может быть релевантно одной задаче может быть совершенно нерелевантно другой задаче Мы прекрасно понимаем что если бы у нас была какая-то задача там ну

нерелевантно другой задаче Мы прекрасно понимаем что если бы у нас была какая-то задача там ну более общего характера Да где бы мы хотели например детектировать людей и автомобили 2.000 этих э регионов кандидатов нам не очень интересны потому что ну мы понимаем что там в среднем в одном кадре у нас может быть какое-то гораздо меньшее число этих объектов поэтому от этого алгоритма довольно часто и сразу хотели уйти потому что он является Ну таким просто как бы наобум говорящим нам что где-то

и сразу хотели уйти потому что он является Ну таким просто как бы наобум говорящим нам что где-то есть какие-то объекты второе От чего хотелось бы очень сильно уйти это уйти вот от этой части которая классифицировал выходящие Вектора из сверточной сети с помощью отдельно обученных методов опорных векторов соответственно Если у вас есть сся классов вам нужно обучить вам нужно обучить 000 методов опорных векторов каждый на свой класс метод опорных векторов далеко не чемпион в скорости обучение

опорных векторов каждый на свой класс метод опорных векторов далеко не чемпион в скорости обучение поэтому это тоже само собой занимало некоторое время ещё в чём проблема такого метода и собственно первый шаг к исправлению был предложен именно в развити этой модели это то чтом через свёрточная 2000 раз разные регионы это кажется не сильно оптимальным потому что картинка одна объектов Ну там Скорее всего намного меньше чем 2000 и мы но как бы находясь в рамках такого алгоритма мы вынуждены все

всего намного меньше чем 2000 и мы но как бы находясь в рамках такого алгоритма мы вынуждены все эти 2000 прогонять всё равно через эту СВЧ Сеть Почему бы подход ещ даже наверное сложно назвать двухэтапный то есть это его последователи уже получили Название двухэтапное но мы видим что этапов здесь на самом деле даже больше у нас есть блок выделения регионов кандидатов У нас есть какая-то свёрточная это нейросеть которая пытается отдать И выделить из этих кандидатов какие-то важные признаки и у

это нейросеть которая пытается отдать И выделить из этих кандидатов какие-то важные признаки и у нас есть ещё третий этап который связан с обучением и ирем через методы опорных векторов Понятное дело что обучать всё это нужно Отдельно Ну в плане того что не получится ну либо самим писать какой-то класс метода опорных векторов для того чтобы всё это у нас работало каким-то алгоритмом backward Да как мы любим писать Los то Back и всё оно как бы в одном обучается А обучалось это всё на самом деле

мы любим писать Los то Back и всё оно как бы в одном обучается А обучалось это всё на самом деле с довольно сложными конструкциями Ну тогда ещё когда эта модель появилась не было даже инфраструктуры особой то есть не было таких фреймворков как пайтор и всё всё в этом роде поэтому обучать это всё было долго неудобно и грустно значит что попытались исправить в этой модели я напоминаю эту модель уже не используется попытались исправить собственно следующее идея пришла такая первое Зачем нам гонять

не используется попытались исправить собственно следующее идея пришла такая первое Зачем нам гонять все регионы кандидаты через секв точнее через выходных каналов эти выходные каналы как Мы помним Да каждая каждая из активированных областей она будет соответствовать какому-то какой-то области на изображении после Ну или как бы одновременно с этим мы берём нашу э картинку и отправляем её в блок selective Search здесь уже начали применяться немного другие алгоритмы но смысл их остался прежним У

Search здесь уже начали применяться немного другие алгоритмы но смысл их остался прежним У нас есть какой-то алгоритм который на основе картинки генерирует нам регионы кандидаты А дальше мы делаем следующую вещь мы анализируем то что нам наге нери се ну я буду называть её selective сем просто для общности Мы анализируем те регионы которые нам наге нери selective Search и анализируем те регионы которые нам отдала свёрточная сеть и дальше мы себе задаём вопрос а регион который выглядел выделил

которые нам отдала свёрточная сеть и дальше мы себе задаём вопрос а регион который выглядел выделил selective Search совпадает ли с каким-нибудь активированным регионом после обработки изображение нейросетью если мы видим что такой регион присутствует то есть условно говоря два алгоритма независимых друг от друга выделили нам на изображени какой-то регион кандидат и и там и там этот регион показался интересным двум алгоритмам Значит мы берём и как бы выдёргивает из наших результатов две

показался интересным двум алгоритмам Значит мы берём и как бы выдёргивает из наших результатов две составляющие между собой области Ну и Тут видно что если sech отдал что-то отсюда интересное давайте мы вот отсюда вырежем Да скажем то что у нас два алгоритма совпали во мнении значит там вероятно есть что-то интересное проецирует эту как бы область изображения отсюда выделяем какой-то регион и таким образом как бы на основе Ну очень высокоуровневый это можно назвать голосованием Если два

и таким образом как бы на основе Ну очень высокоуровневый это можно назвать голосованием Если два алгоритма сказали Нам что что-то есть Значит мы берм этот регион и отправляемся с этим регионом дальше пробле здесь возникает на основе простой идеи если у нас есть Ну нейросети Напоминаю что у них довольно низкая вариативность в приёме входных данных они должны быть входные данные должны быть всегда более-менее одинаковые Что делать если у нас вот эти вот регионы кандидаты они на самом деле могут

более-менее одинаковые Что делать если у нас вот эти вот регионы кандидаты они на самом деле могут быть очень разные по размеру как даже видно на этом слайде встал вопрос что с ними делать безусловно мы можем их рейзи но если мы их будем рейзи у нас потеряется пространственная информация вы сами видели что вчера прои ко после того как вы их сжи какую-то горизонтальную картинку в квадратную всех там плют и в общем это не очень удобно потому что восстанавливать эту пространственную информацию

там плют и в общем это не очень удобно потому что восстанавливать эту пространственную информацию тяжело поэтому придумали такой алгоритм у которого тоже есть некоторые потери в этом смысле но он является более оптимальным это алгоритм который называется ролин или связанный таким термином то есть регион интерес к нему на вход поступают разнородные по объему уже как бы связанные с тем что тоже сгенерировал это пулин лит все эти регионы разного размера в тот размер который нам подходит далее Всё

это пулин лит все эти регионы разного размера в тот размер который нам подходит далее Всё вот это вот уже с изменённым мем в ненов сло связа с тем что вместо того чтобы обучать вот эти методы опорных векторов давайте мы сделаем две башки у нашей сети одна будет работать на классификацию то есть что есть конкретно вот в этом регионе а вторая голова будет работать у нас на регрессию координат B это ровно тот же подход который использовали Мы в понедельник то есть од чает зано врат это работало

ровно тот же подход который использовали Мы в понедельник то есть од чает зано врат это работало быстрее и почему ничего умнее чем просто добавить к rcnn слово не придумали на самом деле как бы оптимизации здесь очевидна если вернуться немного вот в эту область теперь нам нужно прогонять через сеть не все регионы кандидаты которые у нас присутствовали В результатах selec sech Теперь мы как бы этот процесс прохода изображения через как правило довольно большую сеть заменяем просто перебором этот

процесс прохода изображения через как правило довольно большую сеть заменяем просто перебором этот перебор тоже ест некоторое время но не сопоставимы с тем что было когда мы гоняли 2.000 регионов с одной картинки через свёрточная оптимизация и вторая оптимизация как раз-таки заключается в том что теперь как бы вот эту вот часть мы можем обучать Э не перескакивая от свёрток методу опорных векторов который был реализован там тоже каким-то способом но не нейросетевых А как это было как это есть у

который был реализован там тоже каким-то способом но не нейросетевых А как это было как это есть у нас вот здесь пару слов о пулинг значит этот пулинг на самом деле в какой-то степени является противоположностью по параметрам пулин который мы использовали в свёрточные сетях как у нас работал в свёрточные сетях в обычных да то есть тех которые мы на прошлой неделе изучали к нам на вход приходит какая-то Матрица и мы нашему пулин говорим у тебя будет л Сай размера 2 над и у тебя будет страйт

какая-то Матрица и мы нашему пулин говорим у тебя будет л Сай размера 2 над и у тебя будет страйт равный двум это будет означать что этот пулинг выделит нам отсюда Ну давайте считать что максимум выделит нам отсюда максимум отсюда максимум и отсюда максимум то есть мы ему задали какой-то размер и этот пулинг просто ему этому пулин который вот здесь вот ему без разницы Какого размера приходит на вход входящий объект у него есть свои параметры он с этими параметрами работает пун или region of

вход входящий объект у него есть свои параметры он с этими параметрами работает пун или region of interest Ping он работает немного по-другому мы ему говорим не какие у тебя будут вот здесь вот параметры А мы этому пулин говорим Несмотря на то что тебе придёт на вход Ты должен нам отдать размер например 2 над придёт к тебе 100х 500 256 на 128 неважно Ты должен сам подобрать вот эти вот параметры и сделать это так чтобы на выходе у нас был тот размер который мы хотим не тот размер который у тебя

сделать это так чтобы на выходе у нас был тот размер который мы хотим не тот размер который у тебя получается просто по факту наличия параметров А найди вот эти параметры такими чтобы у нас выходящий размер был равен 2 над Понятное дело что это тоже нас лишает некоторая информация это тоже Какая Ну какая какая-то редукция в плане того что этот пулинг он всё равно какую-то часть информации забывает но при этом цель была как бы приблизить эту ветку развития моделей во-первых не росте вому способу

но при этом цель была как бы приблизить эту ветку развития моделей во-первых не росте вому способу обучения А пулинг - это чемпион по использованию в этой области и второе сделать как бы эту сеть быстрее быстрее её сделали за счёт того что теперь не всё прогоняет не все результаты selective sech прогоняют через свёрточные блок а а приблизили его собственно к использованию А как бы нейросетевого такому end to end то есть Прямо от начала до конца с помощью построения вот этого вот блока вот а тут

end to end то есть Прямо от начала до конца с помощью построения вот этого вот блока вот а тут у меня дальше есть ээ комментарий но в целом я это уже всё сказал Давайте вопросы по первым двум моделям CN Ну тоже так сейчас Давненько не встречалось в целом поэтому не то чтобы она может попасться где-то на собеседовании Хотя кто знает в компьютер иногда такие динозавры работают что они видели многое Саша да вот непонятен блог который Свер и какая-то его вариация тоже самое что было вот тут вот ну

Саша да вот непонятен блог который Свер и какая-то его вариация тоже самое что было вот тут вот ну просто я вот до сих пор не особо понимаю что та что такое вот он просто как бы принимает наход изображени и пропускает через ко слои выделяя Ну там там не слои это алгоритм аналитический он просто анализирует цвета которые есть рядом переход цветов одного кго Я думаю что после сегодняшней лекции ты фразу sech никогда не услышишь больше скорее всего Но просто для понимания Окей тогда поехали дальше

sech никогда не услышишь больше скорее всего Но просто для понимания Окей тогда поехали дальше следующая ветка и это уже ветка которая собственно сейчас используется в смысле Ну такое развитие этой ветки кото сейчас уже используется модель она на самом деле фантазия Вы сами видите Да в какую сторону идт Нет если что вот немножечко отошли в чём модификация Значит у нас в общем-то архитектура остаётся очень-очень похожий но самое главное принципиальное отличие от того что было на прошлом слайде

очень-очень похожий но самое главное принципиальное отличие от того что было на прошлом слайде Это ответ на сдуй вопро Като е аналог в надежде на то что какую-то вки нам информацию Дат и он действительно е Дат Можем ли мы заменить этот sech на какой-нибудь механизм который уже будет нейросетевые что делает для нас и оказалось что можем это сделали в модели её [музыка] э свёрточная сеть отдаёт нам какое-то количество Map то есть какое-то количество каналов и мы должны это количество каналов

нам какое-то количество Map то есть какое-то количество каналов и мы должны это количество каналов проанализировать давайте мы результаты свёрток который будет называться который просто у авторов так назывался region proposal Network раньше нам который называется Network и делать он будет на самом деле тоже самое это propal блок Будет нам говорить что он обработал все вот эти вот каналы и теперь он будет его Результаты будут попрежнему мчиться с тем что отдала свёрточная сеть но теперь вот этот

будет его Результаты будут попрежнему мчиться с тем что отдала свёрточная сеть но теперь вот этот вот алгоритм будет не сетевым он уже не будет каким-то гипотетически который на основе перепадов цветов чтото намт позволяет как бы ну такая вставка Вот именно такого подхода теперь у нас нет ни одного блока который не обучался бы Back пройм Обычно раньше этот алгоритм он вообще ну который у нас был вот здесь вот он вообще не обучался то есть это был какой-то аналитический алгоритм который что-то

вот здесь вот он вообще не обучался то есть это был какой-то аналитический алгоритм который что-то генерировать теперь этот алгоритм будет обучаться в общей цепочке нейросетевой и вот начиная с этой модели мы уже просто можем то есть теперь у нас нету никаких частей которые зависят от какого-то другого алгоритма второе как бы второе предположение которое Почему собственно называется rcn в том числе из-за отсутствие вот того компонента Но с другой стороны Мы же что-то начинаем обучать значит

числе из-за отсутствие вот того компонента Но с другой стороны Мы же что-то начинаем обучать значит число параметров увеличивается но оказывается что во-первых вот эти вот модели точнее вот эти вот неее блоки они как правило не очень большие по параметрам компактные но генерируют регионы кандидаты они лучше чем какой-то алгоритм который не зависит вообще в целом от нейросетевого подхода но в целом всё остаётся тем же самым Только теперь вот этот блок proposal Network он чит свои результаты с

всё остаётся тем же самым Только теперь вот этот блок proposal Network он чит свои результаты с выходом свёрточная сеть и между собой согласились выковыриваю оттуда те регионы в которых есть предположительно какой-то объект прогоняем всё через пулинг результаты пулин отправляем в полносвязный слои классификация регрессия всё остаётся прежним На второй части толубай Да вот не до конца понял мы получается в одну модель закидываем он даёт результаты и эти результаты мы по сути закидываем в другую

в одну модель закидываем он даёт результаты и эти результаты мы по сути закидываем в другую модель А поконкретнее пожалуйста Ну вот типа у нас есть convolutional Network он типа уже результаты какие-то получил и мы эти результаты по сути что-то похожее закидываем ещё раз да в region propal Network и потом он типа выдаёт результаты и мы сравниваем два Ну да первая часть что он выдаёт результаты А ну типа в чём его ещё один смысл Я на следующем слайде объясню О'кей хорошо Значит вот этот вот

А ну типа в чём его ещё один смысл Я на следующем слайде объясню О'кей хорошо Значит вот этот вот propal Network блог он собственно помимо того что он действительно генерирует нам регионы кандидата нам бы ещё интересно было понять Как он это делает то есть в целом мы на самом деле можем запустить всю эту штуку Ну даже если это будет propal супер супер супер упрощенный это на самом деле тоже будет работать но когда появилась rcnn уже Появись на тот момент как Мы помним ла входящая входящий

будет работать но когда появилась rcnn уже Появись на тот момент как Мы помним ла входящая входящий объект картинка делится на некоторое количество там 7 на 7 в первой версии Но неважно В общем изображение условно покрывается некоторой сеткой и в этой сетке мы как бы оперируя тоже гипотезами начинаем оценивать вероятность того что там в ячейках этой сетки есть какие-то объекты естественно этой идеи собственно не могли пренебречь те кто делал rcn и что они сделали значит этот propal блок это на

собственно не могли пренебречь те кто делал rcn и что они сделали значит этот propal блок это на самом деле очень простая штука она принимает на вход матрицы дальше у неё идёт Некоторое количество свёрточные они там с активацией но смысл в том что это обычная свёрточная сеть и эта свёрточная сеть отдаёт Нам тоже два выхода это 4.000 регрессионных координат и 2000 2.000 оценок того что мы вчера называли confidence то есть 2.000 оценок того что в определённом регионе изображение вообще

вчера называли confidence то есть 2.000 оценок того что в определённом регионе изображение вообще присутствует какой-то объект Это ещё пока не класс это просто мнение сети о том что вот где-то что-то присутствует значит что дёрнули из ёлы и что оказалось эффективным а входящие матрицы то есть входящие Maps из свёрток сеткой то есть не тоже Разде разделялись на ячейки этих ячеек в разных вариациях F rcnn было разное количество Ну собственно так же как и в ли но тут Важно просто обратить внимание

F rcnn было разное количество Ну собственно так же как и в ли но тут Важно просто обратить внимание на то как сюда Это интегрировать значит выбиралась ячейка А это всё происходило прямо по всем ячейкам но на данном вот примере предположим что мы сейчас работаем с этой ячейкой для этой ячейки генерировать как это якорные коробочки Да но не сильно благозвучия генерировать какое-то количество вот этих вот и вот эти они изначально были такого разного формата поме прямоугольни и этих гипотез было

этих вот и вот эти они изначально были такого разного формата поме прямоугольни и этих гипотез было этот он тоже зависит от конкретной версии но мы можем предположить что их четыре и дальше для каждого вот такого бокса строилось предсказание Какова вероятность что вот в р боксе с центром Вот в этой ячейке то есть вот конкретно в этой обла кайто об и содержится Каковы координаты этого объекта То есть к нему поступают какие-то дефолтные координаты Да потому что у нас задан вот этот вот размер Он

к нему поступают какие-то дефолтные координаты Да потому что у нас задан вот этот вот размер Он генерируется просто автоматически разных форматов так же как в ли в изначально на ячейку генерируется вертикальный и горизонтальный бадин бокс Дальше они начинают в процессе обучения изменяться здесь происходит тоже самое И вот помимо выхода который у нас вот здесь вот есть как финальный классификационный финальный на регрессию вот этот ПН блок он ещё и отдаёт нам выходы и мы отдельно вот в этом ПН

финальный на регрессию вот этот ПН блок он ещё и отдаёт нам выходы и мы отдельно вот в этом ПН блоке подстраивает То есть у нас как бы прогнозирование координат оно выходит точнее оно уточняется в процессе обучения то есть мы сначала в процессе обучения генерируем какие-то координаты РБО вот здесь вот это у нас тоже сравнивается с таргетом потому что мы сгенерирована нам нужно эти координаты сравнить с настоящим и после того как мы обработали всю оставшуюся то есть после того как мы обработали

с настоящим и после того как мы обработали всю оставшуюся то есть после того как мы обработали те регионы которые СМТ Мы ещё раз делаем уточнение на координаты вот этот алгоритм он может быть не очень понятен И на самом деле если бы мы писали этот детектор с нуля Я видел его Исходный код Там просто Чёрт ногу сломит после того как ты после него возвращаешься в лу думаешь Господи как хорошо Ну примерно как Агра и вчера у некоторых вот код этого детектора именно в плане обучения довольно сложный

как Агра и вчера у некоторых вот код этого детектора именно в плане обучения довольно сложный потому что нам получается что как бы в два этапа нужно уточнять координаты и в какой-то Ну тоже можно сказать в два этапа делать классификацию но здесь классификация она такая слабая то есть мы говорим здесь просто есть объект нет объекта мы не говорим какого класса этот объект мы просто говорим Дато ме вот этис есть понятно дело что ЕС мы нас у нас изображение очень грубо скажем разделено 2 над Да

ме вот этис есть понятно дело что ЕС мы нас у нас изображение очень грубо скажем разделено 2 над Да точнее просто 2 над и вот этих вот боксов у нас чере то есть на вот эту ячейку будет на вот эту ячейку На вот эту и на вот эту то такое будет работать быстрее потому что у нас гораздо меньше будет [музыка] 4К мы четыре координаты прогнозируем здесь 4 здесь 4 здесь 4 здесь и умножаем всё это на K мы умножаем это на K потому что для каждой из этих ячеек строится к р боксов которые имеют четыре

K мы умножаем это на K потому что для каждой из этих ячеек строится к р боксов которые имеют четыре координаты каждой Это очень сложный для понимания может быть алгоритм и в целом его обучение оно тоже было такое как бы разработано в несколько частей значит сначала обучали rpn сеть то есть первая часть первый этап обучения - это когда мы берём вот это вот всё особенно не трогаем а обучаем просто rpn сеть Мы даже не то что её обучаем мы её инициализирует обучения для того чтобы эта rpn сеть

rpn сеть Мы даже не то что её обучаем мы её инициализирует обучения для того чтобы эта rpn сеть немного поняла с чем она будет работать после этого А мы морозим блок rpn то есть замораживаем и начинаем обучать фае часть часть - это вот эта вот часть то есть слои которые в первую очередь есть у нас вот здесь вот вот они после того как мы чуть-чуть обучили rcnn часть мы собственно обучаем их одновременно при этом веса свёрток они у нас остаются заморожены и вот таким образом зава ве размораживая

при этом веса свёрток они у нас остаются заморожены и вот таким образом зава ве размораживая другие други размораживая первые в таком итерационного собственно достоинства Это то что он работает относительно быстро Несмотря на то что он обучается в несколько этапов он даёт довольно хорошие результаты И самое главное быстрые результаты то есть вот F rcnn Вполне себе некоторое время был конкурентом подходу ла хотя мы видим что здесь у нас тоже есть несколько этапов У нас есть как бы условный этап

подходу ла хотя мы видим что здесь у нас тоже есть несколько этапов У нас есть как бы условный этап выделени у на есть второ э вот это в котором мы Ром окончательные свои предсказания в целом как бы там логику того как это обучалось она для нас ВС равно будет закрыта потому что мы будем запускать это из фреймворка и логику того как это обучалось можно не держать в голове Понятное дело что если нас много разных блоков их нужно там ну как-то вот в том что э сеть ста полностью нейросетью то есть

много разных блоков их нужно там ну как-то вот в том что э сеть ста полностью нейросетью то есть эта модель стала полностью нейросетью свёрточные блок блок и собственно Ну предиктивный блок который за всё это за финальный прогноз отвечает Давайте вопросы работает типа Почему мы ему даём уже готовый результат и ждём от него ещё какой-то типа разделение уже на готовом результате то есть по сути то он готовое берёт а потом типа ещё раз по нему проходится и что-то ещё готовое выдаёт Но да у тебя

он готовое берёт а потом типа ещё раз по нему проходится и что-то ещё готовое выдаёт Но да у тебя вот эта вот сеть предо на тысячи классов она выдаёт ты детектива людей и машины она тебе выдаёт А вот здесь код есть тебе код нужен в процессе как сети объяснить что ну типа у тебя результат вот этот как сети объяснить что пусть здесь вот например код и найден Да но нам этот код не нужен как ты объяснишь это сети с помощью ты конечно у тебя в пине он пропускается Ну предположим что это просто самое

это сети с помощью ты конечно у тебя в пине он пропускается Ну предположим что это просто самое начало у нас еть не обуче пропускается через rpn и вс вот этот Выход Да он содержит себе вот этого самого кота дальше у тебя пропускается через rpn и в процессе обучения ты как бы rn понимает что Несмотря на то что здесь есть какая-то информация мы говорим что Таргет для того региона где был код - это ноль там ничего не должно быть мы не хотим искать никаких котов поэтому прония дала умная свёрточная

там ничего не должно быть мы не хотим искать никаких котов поэтому прония дала умная свёрточная сеть он мне на самом деле не нужен То есть почему она называется region proposal она предлагает те регионы которые нужны не все регионы которые отдала свёрточная сеть а те которые могут понадобиться А потом когда будет происходить вот эта процедура сравнения У тебя же вот здесь-то этот код остался правильно но потом мы сравниваем то что осталось вот здесь с результатом про а прол говорит а там мне

но потом мы сравниваем то что осталось вот здесь с результатом про а прол говорит а там мне это это регион не нужен в процессе обучения я поняла что пусть тут CNN думает что здесь есть что-то важное она предо она может так думать но РПН говорит Нет этот регион мне не нужен поэтому я его просто опускаю и дальше его на вход отправлять не буду потому что там нету того класса который мне нужен Окей теперь понял окей Ну запуска это всё будет несколькими строками самостоятельно Не рекомендую это

теперь понял окей Ну запуска это всё будет несколькими строками самостоятельно Не рекомендую это обучать это довольно Страшная штука кстати не только в детект есть у него даже есть реализация на обычном пайтор там тоже страшновато Давайте тогда дальше значит усложнение задачи компьютер вина усложнение задачи детекции - это собственно сегментация что у нас было в детекции задача детекции на самом деле является достаточно простой То есть у неё в общем смысле могут быть особенности которые будут

деле является достаточно простой То есть у неё в общем смысле могут быть особенности которые будут не очень хорошо там влиять на какие-нибудь модели Да там ла например не очень любит детектировать маленькие объекты Faster rcnn с этим справляется получше но при этом у Faster rcn Там могут быть свои проблемы связанные с дублированием там предсказаний к примеру Вот но так или иначе скорее всего под детекции получится Найти модель которая будет удовлетворять э там какой-то конкретной задачи

под детекции получится Найти модель которая будет удовлетворять э там какой-то конкретной задачи собственно так же как и там я не знаю У нас например есть сеть rnet Да все понимают что Ну скорее всего среди всего Спектра вот этих вот моделей вы найдёте модель которую будет отлично классифицировать картинки Понятное дело что на всех как бы предметных областях в мире это никто не обучает Но это просто свойственно всё есть сеть которая на общем на датасете общего характера хорошо решает задачу

просто свойственно всё есть сеть которая на общем на датасете общего характера хорошо решает задачу О'кей значит Кому надо допили эту сеть под то что ему нужно и задача детекция она в общем случае тоже считается полностью решенной То есть сейчас есть Спектр моделей которые позволяют решать задачу детекции очень-очень хорошо возникает вопрос в детекции есть Явный недостаток У нас есть прямоугольный регион и Понятное дело что в зависимости от формы нашего объекта там процентов 90 этого

регион и Понятное дело что в зависимости от формы нашего объекта там процентов 90 этого прямоугольного региона могут в себе этот объект и не содержать но вы можете представить что классифи например пытаетесь детек какие-нибудь знаки Да дорожные То есть у вас есть вот какой-нибудь там дорожный знак Бабо вокруг этого дорожного знака он там будет какой-нибудь вот такой и мы при этом видим что не тут дорожного знака нет ни тут дорожного знака Нет ну короче говоря хотелось бы не просто прямоугольный

дорожного знака нет ни тут дорожного знака Нет ну короче говоря хотелось бы не просто прямоугольный регион обнаруживать А хотелось бы понять где И вообще Какой конкретно формы у нас объект то есть както за боле сло это этот тип задач относится к сегментации Значит один из самых популярных одна из самых популярных формулировок сегментации Это семантическая сегментация она полностью вот тут объяснена как бы на картинке что происходит мы подаём на вход модели изображение или видео что мы хотим

как бы на картинке что происходит мы подаём на вход модели изображение или видео что мы хотим сделать мым чтобы модель классифицировали картинке по смысловой принадлежности объекта который состоит из этих пикселей то есть вот здесь вот мы видим что всё у нас дерево закрашено зелёным здесь мы видим деревья эти деревья тоже закрашены зелёным здесь мы видим вот множество деревьев эти деревья закрашены зелёным и в данном случае мы понимаем что Несмотря на то что этих деревьев много нас интересует

зелёным и в данном случае мы понимаем что Несмотря на то что этих деревьев много нас интересует Просто то что конкретные пиксели из которых эти деревья состоят отно к классу деревья без разницы сколько этих деревьев там неважно мы сейчас это не считаем Это задача семантической сегментации где мы классифицируемые какой он он в классе дерево закрасили его зелёным взяли вот этот пиксель какой он он в классе машина закрасили синим то есть для семантической сегментации что вот эта машина и что вот

в классе машина закрасили синим то есть для семантической сегментации что вот эта машина и что вот эта машина совершенно неважно класс машина значит работаем красим это в синий цвет второй тип задач это задачи истан сегментации значит задача инстан сегментации она тоже полностью Ну заключена в своей формулировке Что такое instance - это представитель чего-то да то есть экземпляр чего-то если мы решаем задачу истан сегментации то в отличие от задач семантической сегментации мы не просто говорим

задачу истан сегментации то в отличие от задач семантической сегментации мы не просто говорим что все вот эти пиксели принадлежат классу мы говорим что Ага вот этот вот чувак который здесь сидит какой-то дед это класс человек вот здесь вот тоже сидит как бы класс человек но он раскрашен другим цветом потому что это другой инстанс это другой представитель этого класса это всё относится к классу человек но представители этого класса Они разные То есть получается что задача инстан сегментации она

но представители этого класса Они разные То есть получается что задача инстан сегментации она в какой-то степени сложнее потому что модели теперь не просто нужно понять что эти пиксели относятся к определённому классу а понять относятся ли эти пиксели к представители к одному и тому же представителю этого класса Поэтому ей нужно помимо всего прочего ещё и разделять вот эти вот объекты последний Тип сегментации который не очень часто используется но используется но такой он там космической

Тип сегментации который не очень часто используется но используется но такой он там космической всякой штуки используются они на самом деле все используются в Космических там в анализе снимках и всём прочем но не самый частый но при этом интересный тип задач - это задача паноптикс сегментации она собственно тоже У нас полностью из своей формулировки следует патик то есть смотрим на всё на всё что есть Поэтому если мы посмотрим на результат работы пано оптической сегментации мы увидим вот оно

есть Поэтому если мы посмотрим на результат работы пано оптической сегментации мы увидим вот оно небо Ну как бы небо одно представителе истан вя се но при этом мы смотрим это разные машины это разные люди это у нас какой-то там какое-то покрытие асфальт это у нас какое-то дерево стоит это какое-то дерево и паноптик Она довольно сложная Ну во-первых представьте себе разметку всего этого да то есть у вас вам нужно размечается ин сегмента занимаются эти модели они Ну на самом деле по большому

есть у вас вам нужно размечается ин сегмента занимаются эти модели они Ну на самом деле по большому счёту мы одну модель изучим но у неё там есть разные вариации это одна из самых популярных задач в задаче сегментации в целом То есть всего как бы подразумевается что у вас есть три вида сегментации Первый вид сегментации - это семантическая сегментация просто относим каждый пиксель к определённому смыслу да к определённому классу без понимания того сколько экземпляров этого класса стоит второе -

смыслу да к определённому классу без понимания того сколько экземпляров этого класса стоит второе - это инстант сегментация разносим пиксели по смыслу но при этом хотим понимать что два объекта могут принадлежать к одному и тому же классу но при этом они являются разными объектами это инстанс сегментация И паноптик когда мы говорим что вот у нас есть изображение Реши мне задачу и семантической сегментации пойми что вот это вот небо а вот это вот асфальт но Реши мне ещё и задачу А истан

сегментации пойми что вот это вот небо а вот это вот асфальт но Реши мне ещё и задачу А истан сегментации по каким-то объектам То есть это такое как бы два в одном А по формулировке самих задач Понятно В чём отличие кстати говоря тут уже есть некоторый намёк на то как вы будете размечается Да Кость А по-моему в ческой сегментации заметил что у нас класс деревья Вот здесь например да или там светофоры а он не выделяет разных представителей класса Ну это просто там условия картинки или Так в чём

а он не выделяет разных представителей класса Ну это просто там условия картинки или Так в чём какой-то смысл в этом есть Ну это скорее просто визуализация такая угу тот наверное Вот про этот регион говоришь Да что здесь ну ну да там на деревья все зелёные например там светофоры все оранжевые Ну тут как бы оно оно так обозначено что Ну в смысле такого размера картинка может быть это ошибка А может быть просто в самой постановке было Что деревья по объектам различать не надо потому что тут

может быть просто в самой постановке было Что деревья по объектам различать не надо потому что тут очевидно это какой-то типа Аля ccap такой то есть машины и люди для нас имеет смысл их выделять как разные Ну деревья типа могут быть и одинаковыми то есть в одной задаче может быть по факту и семантическая и и от того как мы Какие условия задаём при датов вообще потому что ну это вообще разме данные довольно дорого вот а для патис мало мало таких как бы предпо готов датасета Вот Ну кстати да вот

довольно дорого вот а для патис мало мало таких как бы предпо готов датасета Вот Ну кстати да вот Дима тоже Дима тоже правильно пишет что если объекты граничат но разным цветом Вот Но в плане деревьев тут вообще сложно их как бы разделить на разные ФК того что эти обекты даже для человеческого глаза если они более-менее по цвету совпадающие они не очень различаются но мы можем естественно пытаться делать так чтобы деревья тоже были как бы разными классами просто это опять усилий потребует но

делать так чтобы деревья тоже были как бы разными классами просто это опять усилий потребует но как бы у нас ин для нас такая приоритетная [музыка] Люба определение всё-таки при паноптик нам нужно указывать какие объекты Мы хотим чтобы были семантически выделены Да а какие в качестве инстан сов или или нет Или это сама модель определяет нет это мы будем а делать сами в процессе разметки То есть если Мы попытаемся выделить если мы скажем в процессе разметки например модели что вот свет что вот

если Мы попытаемся выделить если мы скажем в процессе разметки например модели что вот свет что вот эта вот область - это один автомобиль если мы моделе скажем что вот эта область это просто принадлежит классу машина она будет эту область она будет решать задачу в отношении автомобилей как задачу семантической сегментации просто потому что у неё нету разделения на классы если мы скажем ей в процессе в процессе разметки что вот это вот у нас это одна машина вот это вот у нас вторая машина вот

в процессе разметки что вот это вот у нас это одна машина вот это вот у нас вторая машина вот это вот у нас фрагмент третьей машины то она будет в отношении машин решать задачу как задачу инстанс сегментации ну понятно да в процессе разметки мы даём ориентировки спасибо Так а значит собственно самая популярная одна из самых популярных моделей для задачи для решения задачи сегментации это модель которая называется Mask CNN Mask rcnn Как вы видите у неё собственно всё то же самое всё то же самое

называется Mask CNN Mask rcnn Как вы видите у неё собственно всё то же самое всё то же самое что FC то есть вот этот вот блок он является фактически просто готовым F rcn А этот Блок F rcnn решает задачу детекции и будет решать в этой модели задачу детекции в том числе но к этому блоку оказалось что нужно добавить довольно мало для того чтобы А задача решалась хорошо значит а перед тем как отправлять все данные Ну точнее не перед тем Ну в каком-то смысле перед тем как отправлять все данные в

все данные Ну точнее не перед тем Ну в каком-то смысле перед тем как отправлять все данные в блок который будет детектив координаты и классифицировать регионы мы эти данные возьмём и отправим в некоторый свёрточные блок это тоже будет просто как бы сеть состоящая из свёрточные всё в ней будет как обычно и эта сеть Будет нам генерировать маску значит почему называется мак rcnn и собственно что это за маска мы можем себе представить что у нас есть какая-то картинка и что происходит давайте мы

это за маска мы можем себе представить что у нас есть какая-то картинка и что происходит давайте мы представим что на этой картинке вот есть какая-то там по пиксельная разметка да то есть вот что-то там примерно такое и Нарисуем На этой картинке какое-нибудь дерево Как вы видите я художник Как вы могли уже на второй неделе понять и Нарисуем какой-нибудь дом да пусть этот дом где-нибудь будет стоять вдалеке вот так вот мы хотим от модели вот каждый вот этот вот квадрат который здесь есть в сетке

вдалеке вот так вот мы хотим от модели вот каждый вот этот вот квадрат который здесь есть в сетке это на данный момент не как бы не отсылка к тому что происходит в propal А это мы будем считать что это пиксели изображение что мы хотим от нашей модели первое мы хотим чтобы она соответствовала таргету будет Таргет вот у этой картинки если мы решаем задачу сегментации таргетом этой картинки будет собственно говоря прямоугольник такого же размера в котором будет следующее То есть у нас здесь будет

говоря прямоугольник такого же размера в котором будет следующее То есть у нас здесь будет опять вот это вот по пиксельная как бы структура и мы будем говорить что в каких в каких пикселях Какие пиксели у нас принадлежат к классу дерева мы скажем что это пиксель Ну я буду букв плюсик буду ставить Вот здесь у нас есть вот он значит вот здесь у нас есть дерево вот здесь есть дерево Ну и для общности скажем что вот здесь вот и вот здесь тоже есть дерево в каких пикселях у нас присутствует дом дом

скажем что вот здесь вот и вот здесь тоже есть дерево в каких пикселях у нас присутствует дом дом у нас Будем считать что присутствует вот здесь вот и вот здесь вот во всех остальных пикселях нашего изображения Что расположено во всех остальных пикселях у нас ничего не расположено нолик нолик нолик нолик нолик и так далее то есть вот эта вот Матрица будет для нашей задачи таргетом Мы хотим чтобы наша модель в процессе обучения то есть на самом деле вместо вот этих вот плюсиков здесь будет

наша модель в процессе обучения то есть на самом деле вместо вот этих вот плюсиков здесь будет написано что это Например класс О это дерево там где у нас будет дом будет написано что это класс 2 это дом и мы от модели хотим чтобы она отдала нам матрицу такого жери то есть предсказание модели какое будет предсказание модели будет такое же по размеру это будет Матрица и мы хотим чтобы наша модель Отдала Нам ровно вот такую же матрицу Мы хотим чтобы она нам сказала что Ага вот здесь 0,8 что дерево

Нам ровно вот такую же матрицу Мы хотим чтобы она нам сказала что Ага вот здесь 0,8 что дерево здесь 0,7 здесь там с краю например дерево не из очень высокой вероятностью 02 04 0,7 0,8 А мы хотим чтобы вот предсказание вот этой вот вот это предсказанная Матрица полностью была совпадала с таргетом Какую функцию потерь мы здесь можем использовать давайте давайте какую задача что мы здесь решаем на самом деле это регрессия какая-то по пиксельная у тебя 50% слов правильно по пиксельная

решаем на самом деле это регрессия какая-то по пиксельная у тебя 50% слов правильно по пиксельная классификация меняю слово классификацию Да теперь 100% правильно тогда берём Ю на самом деле что мы говорим нашей модели мы говорим ты вот здесь предсказала таргете ноль Ну давайте предположим что здесь 0,1 какому-нибудь классу что мы хотим сделать мы на самом деле ей хотим сказать что у тебя но умноже на лорим 01 плюс А ну собственно всё да как бы тут точка Вот дальше что мы делаем ты здесь

умноже на лорим 01 плюс А ну собственно всё да как бы тут точка Вот дальше что мы делаем ты здесь предсказал 07 должна предсказать единицу но я я напишу это как бы как дальнейшее слагаемое просто то есть что у нас происходит Дальше едини это вот э вот единичка что здесь находится дерево умноже 0,7 То есть фактически мы решаем задачу по пиксельной классификации изображения нам нужно понять пиксель принадлежит или не принадлежит какому-то классу и в итоге получается что видите задача сегментации

принадлежит или не принадлежит какому-то классу и в итоге получается что видите задача сегментации она как бы обладает своим названием там своими моделями и всем остальным но по большому счёту это просто обобщение задачи классификации на объект имеющий гораздо больше характеристик раньше мы решали задачу классификации когда мы говорили У нас есть на входе картинка Вот давайте возьмём обученную какую-то большую модель и эту картинку превратим в одно число в вероятность просто что это 09 это там

большую модель и эту картинку превратим в одно число в вероятность просто что это 09 это там класс например кошка Теперь мы говорим что мы подаём на вход модели картинку а на выходе для этой картинки хотим репрезентацию с вероятностями её пикселей То есть у нас как бы такая задача становится гораздо более сложной раньше для одной картинки одна вероятность теперь для одной картинки столько вероятностей Сколько у неё пикселей вот Саша а вот ма masc на практике используется потому что вот звучит

Сколько у неё пикселей вот Саша а вот ма masc на практике используется потому что вот звучит так как будто классифицировать каждый пиксель это затратно ну используется Да ма популярная модель О кстати не такж и медленно обучается Несмотря на то что выглядит она таким довольно большим комбайном довольно быст просто вчера в ресурсе который ты скидывал там автор говорил что вот да есть модель которая существует и она по класс классифицирует Ну классифицирует каждый пиксель и от них пытались

которая существует и она по класс классифицирует Ну классифицирует каждый пиксель и от них пытались отказаться из-за того что это слишком ресурсо ёмка Вот ну как бы от градиентного спуска уже 20 лет пытаются отказаться просто это ни к чему не приводит так да всё хорошо понял сейчас считаем что классов таки типа два дерева и дом в данном случае или мы считаем что или не так Ну в данном примере два Ну короче это мультикласс модель [музыка] Да Окей значит запускается это всё тоже просто поэтому Ну

Ну короче это мультикласс модель [музыка] Да Окей значит запускается это всё тоже просто поэтому Ну насколько можно это отнести слово запускается прот мо популярная для сегментации Прикольная штука связанная с этой моделью что эта модель была придумана не Гуглом там не какими-то чуваками которые уже там прозвенело глубокого обучения она была придумана вообще в медицинском институте в Германии и её первоначально использовали для сегментации медицинских изображений модель называется собственно

её первоначально использовали для сегментации медицинских изображений модель называется собственно почему она так называется можно увидеть Просто на картинке Да у неё её схему Нарисовали с самого начала Как такую напоминающую букву Ю поэтому название ей дали такое же значит из чего эта модель состоит тут надо сначала просто пробежаться по слоям которые есть в этой модели А первое вид слоёв - это свёртка 3 на3 с функцией активации вторая операция - это cy and спить какую-то матрицу какая-то

это свёртка 3 на3 с функцией активации вторая операция - это cy and спить какую-то матрицу какая-то матри У нас есть мы е как-то обрезаем получаем матрицу поменьше операция Макс линга 2 над абсолютно обычный маслин то есть не тот адаптивный ролин А обычный Ман дальше операция сейчас я про неё скажу пару слов и операция ко о на о в этой сети а точнее что-то делает вот этот вот convolution значит мы с вами разбирали слой свёрточные который Что делает этот свёрточные слой получает на вход какую-то

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

бы уже э получать там какую-нибудь вот такую вот матрицу то есть операция свёртки она сворачивает входную входной объект почти наверняка уменьшая его размер операция а Колю то есть вот это операция конволюция а конволюция она может называться ко она может называться то есть она может называться или как она называется ВТО ко 2D Что происходит в этой операции предположить точнее давайте я не тот фрагмент картинки нашл Но неважно Давайте предположим что у нас есть какая-то входящая Матрица пусть у

картинки нашл Но неважно Давайте предположим что у нас есть какая-то входящая Матрица пусть у этой матрицы будет размер 2 над представим что у нас есть свёрточные фильтр этот свёрточные фильтр Пусть простоты ради тоже будет 2 над что будет делать операция если бы мы стати говоря здесь емы вот это вот входной обект свернули вот этим фром ме то есть мы просто перемножили их по элемент э матри и сложили бы их значение Как работает транспонированная свёртка или или по-разному е называют Везде как

бы их значение Как работает транспонированная свёртка или или по-разному е называют Везде как она работает теперь вместо того чтобы перемножать всё это поэлементно происходит следующее давайте мы возьмём и возьмём вот этот фильтр с позиционирую вот сюда вот и [музыка] перемножив на тот вес который у нас здесь получился то есть Ну давайте предположим что здесь например 0,5 что мы сделаем мы вот это число вот этот X который здесь есть Да пусть будет 05 01 02 09 предположим У нас вот такие веса в

число вот этот X который здесь есть Да пусть будет 05 01 02 09 предположим У нас вот такие веса в нашей СВР наша итоговая штука будет выглядеть Вот так мы скажем после того как мы СПО зонирования 05x 0x 02x 09x то есть после того как мы deconvolution применим только вот к этому коэффициенту у нас получится Вот такой вот результат Теперь мы наш вот этот вот СВЧ сдвинем вот сюда можем сказать условно что здесь у нас Y получаем второй результат это будет соответственно тоже самое 05 0y 02 Y 09 это

что здесь у нас Y получаем второй результат это будет соответственно тоже самое 05 0y 02 Y 09 это второй результат после этого переходим перемещаем наш фильтр дальше вот сюда тоже осуществляем перемножение с вот этих значений на какой-нибудь там Прости Господи Z вот получаем ещё один результат и дальше смотрите что происходит после того как мы всё это умножили мы начинаем просто перекрывающие области складывать то есть вот здесь вот у нас например результат 6 и2 да эти 6,2 идут у нас в эту вот

складывать то есть вот здесь вот у нас например результат 6 и2 да эти 6,2 идут у нас в эту вот в этот регион без изменений вот эти вот 2 и 10 они перекрываются у нас вот с этими 12 и 14 поэтому мы тут складываем и вот эти два значения тоже складываем получаем в результате 14 на 17 дальше как бы применяем следующий да Ну там в примере это ноль То есть получается что у нас как бы здесь как сложение происходит Ну да тут пока мы здесь ничего не меняется потому что здесь нули поэтому здесь остаётся

происходит Ну да тут пока мы здесь ничего не меняется потому что здесь нули поэтому здесь остаётся 217 0 и вот эту вот перекрывающей частью получается что вместо того чтобы наша вот это вот вот этот вот наш фильтр как в обычной свёртки свернул нам входящий объект 3 на3 он на самом деле его будет разворачивать там на самом деле 2 над то есть этото уже результаты перемножения и в таком случае мы можем как бы с помощью использования Вот обучаемых вот этих вот параметров в нашем фильтре мы можем

можем как бы с помощью использования Вот обучаемых вот этих вот параметров в нашем фильтре мы можем найти такие параметры которые вот это развернут и сделают его больше но они развернут его сделают больше с ум того что наша модель обучается Вот то как работает транспонированная свёртка Понятно или нет есть это своего рода типа динг Ну не динг это мы просто бы вот сюда вот нули дописали сказали другой способ перемножения обычная свёртка Вот такая свернула бы нам вот это в дно но мы делаем

другой способ перемножения обычная свёртка Вот такая свернула бы нам вот это в дно но мы делаем наоборот мы говорим что вот у нас вот этот объект фиксируем перемножаемых получилась Матрица получилась по игрем то у нас левый верхний бы результат был просто 0,5x второй результат бы был 01x + 0 5y 0 5y и третий бы результат был 01y вот здесь вот то есть получается что после того как мы наш фильтр перемножили на вот эти вот две координаты У нас пришёл объект у которого два было две координаты а

перемножили на вот эти вот две координаты У нас пришёл объект у которого два было две координаты а вышел объект у которого уже три элемента в нашем в результате то есть мы у Сергей у меня на математическом уровне Понятно Вот на логическом уровне вопрос Ну типа если сврт я понимаю то что мы фильтром ищем фичи Вот и сворачиваем то какой логический смысл этого раздуем на какой-то фильтр Вот А зачем ну сейчас будет понятно моля которые генерируют картинку потому что там как правило идея такая что

ну сейчас будет понятно моля которые генерируют картинку потому что там как правило идея такая что вы получаете на самом деле там изначально вообще получаете какой-нибудь Вектор после этого этот Вектор проходит через слои становится больше больше и ещё больше то есть вы как бы увеличиваете ваше изображение А ну всё Поня обратная задача Мы не выжима свечами чтобы он оброс нормальным представлением и в итоге мы получили вот такую штуку А все вот эти параметры которые здесь есть это все параметры

и в итоге мы получили вот такую штуку А все вот эти параметры которые здесь есть это все параметры обучаемые всё понял Спасибо Костя Прошу прощения если прослушал коэффициенты в матрице в фильтрах которые отвечают за расширение детерминировано или пробираются каждый раз обычный слой с инициализирован случайными параметрами в процесе обучения мго восстанавливать картинку понял как как веса подбираем и находим В итоге лучше Да собственно вот тут у него на самом деле всё остаётся абсолютно тем же

и находим В итоге лучше Да собственно вот тут у него на самом деле всё остаётся абсолютно тем же самым вот у нас как бы фильтр для деконволюция 2 над 4 параметра всё всё всё тоже самое И собственно Где же он у нас используется в этом самом юте значит в юте идея следующая давайте мы попробуем на входящее изображение сначала последовательностью свёрток пунго опять свёрток опять пунго свёрток пунго свёрток опять опять свтв свёрток и пунго попробуем наше изображение уместить вот в какое-то

пунго свёрток опять опять свтв свёрток и пунго попробуем наше изображение уместить вот в какое-то количество вот в какой-то вектор длиной 1024 Мы хотим чтобы этот Вектор длиной 1024 вобрал в себя какие-то признаки то есть чтобы вот мы пустили на вход какую-то там трёхмерную куб картинку которая содержит в себе какие-то признаки давайте мы научим сеть брать эту картинку и строить какую-то Вот такую плотную векторную репрезентацию этой картинки в которой будет понятно что какие-то признаки там

плотную векторную репрезентацию этой картинки в которой будет понятно что какие-то признаки там присутствуют то есть присутствуют какие-то объекты на которые мы должны среагировать и в процессе того как мы будем все вот эти свёртки производить Мы каждый промежуточный будем сохранять после того как мы Прим вот этой вот плотной репрезентации нашего входящего изображения мы начнём делать обратную операцию мы будем говорить а теперь возьми вот этот вот набор разверни его Но после того как ты его

операцию мы будем говорить а теперь возьми вот этот вот набор разверни его Но после того как ты его развернёт должна будешь взять какие-то Вот этот промежуточный эза объединяем предпоследний шаг вот этого вот [музыка] свёрток последний результат свёртки с первым шагом последний результат свёртки с первым шагом развёртки после этого применим ещё там можно Динго это выровнять Но это неважно опять применим два свёрточные слоя и опять сделаем амл но теперь вот этот вот результаты вот этого асмп мы

два свёрточные слоя и опять сделаем амл но теперь вот этот вот результаты вот этого асмп мы конкани с сврт два шага назад то есть вот с этим результатом далее свёртка свёртка опять upsample теперь вот этот синий блок который мы получили после амла мы конкани вот с этим этапом свёртки всё тоже самое сделаем повторим и получим в результате последнюю конкатенацию последний этап асмп конкани с первым этапом свёртки Это позволяет модели как вот это вот постоянное сохранение промежуточных результатов

этапом свёртки Это позволяет модели как вот это вот постоянное сохранение промежуточных результатов оно в определённом смысле является СП конек то есть мы как бы передаём информацию которую мы на разных этапах получили во время обработки и отправляем её просто на зеркальный этап по Ну как бы уже посто обработки можно сказать некоторого асмн идея состоит в том что если мы здесь получили какой-то преобразование давайте мы это преобразование объединим вот с тем что получилось у нас вот с тем что

преобразование давайте мы это преобразование объединим вот с тем что получилось у нас вот с тем что вышло отсюда потому что это нам позволит учесть и высокоуровневый информацию и какую-то очень низкоуровневый которая 1.000 раз там уже прошла через большое количество слоёв и в итоге мы восстановим нашу картинку не полностью по размеру на самом деле можно восстановить полностью в оригинале просто этого не делаю мы восстановим нашу картинку по размеру и на выходе получим output segmentation Map

этого не делаю мы восстановим нашу картинку по размеру и на выходе получим output segmentation Map output segmentation Map - это собственно та та же самая маска в которою будет сказано вот этот пиксель ничего не обозначает а вот эти вот пиксели у нас что-то обозначают вот таргетом будет тоже самое соответственно мы будем на картинке есть у нас какой-нибудь домик Вот мы возьмём и этот домик также Вот так выделим и опишем пиксели которые принадлежат этому домику вот так вот работал unet и

также Вот так выделим и опишем пиксели которые принадлежат этому домику вот так вот работал unet и работает до сих пор unet там до наверно прошлого примерно года был одним из самых главных компонентов всех и всего всего всего что генерирует картинки потому что UN принимал на вход некоторую репрезентацию как бы первоначальную изображение а потом это изображение разворачивался изображении Да у нас информация о том Ну как бы что у нас расположено на картинки эта информация у нас в процессе вот

информация о том Ну как бы что у нас расположено на картинки эта информация у нас в процессе вот этого вот как бы спуска по каскаду всех свёрток она у нас [музыка] запакованный последовательностью деконволюция чтобы мы смогли восстановить не просто То что в этом векторе что-то есть А ещё и где это есть и в этом нам на каждом этапе будут помогать вот эти вот промежуточные результаты на сам деле unet одна из самых простых сетей и довольно эффективных Дима а то есть получается что вот на

деле unet одна из самых простых сетей и довольно эффективных Дима а то есть получается что вот на восходящей ветви а сетка как бы удваивается да по объёму А кто сеть удваивается Ну да ну то есть так как там не только вот восстановленная да идёт свои но и к мрут те которые входные Да но тут нужно помнить что вот если у нас есть например Это даже тоже неважно вот если у нас есть какой-то свёрточные слой конф 2D Да мы на вход ему передаём там на вход пришло каналов То есть получается что нам как

слой конф 2D Да мы на вход ему передаём там на вход пришло каналов То есть получается что нам как бы вот вот вот сть 100 каких-то Да 128 каналов и к ней видишь Вот давайте сейчас я ещ поближе придвинуть видно что вот здесь вот написано 256 да то есть вот этот блок состоит из 256 каналов то есть 256 каналов 256 вот матриц Вот таких вот 128 то есть вот э вот сть 12 а е 128 получены вот отсюда потому что вот сверточный слой который отдаёт 128 поэтому у нас если у нас вот здесь есть какой-то

потому что вот сверточный слой который отдаёт 128 поэтому у нас если у нас вот здесь есть какой-то свёрточные слой который что-то на вход принимает например 128 то он должен принимать 128 на2 потому что к нему часть пришла с деконволюция а часть пришла с предыдущего этапа вот отсюда чем боль входно каналов темра безусловно то есть она как бы сама сеть по числу слоёв не удваивается Но вот число путешествующих между слоями данных на восходящее ветви оно увеличивается Спасибо Окей значит Ну про

путешествующих между слоями данных на восходящее ветви оно увеличивается Спасибо Окей значит Ну про unet здесь есть хорошая небольшая лекция в принципе сеть хорошая тут есть всякие ссылочки в том числе Нарус язычные публикации на хабре был тоже такой цикл публикаций про про всю вот э Короче говоря скажем так про Вот эту вот ветвь моделей там тоже довольно неплохие объяснения картинки не помню по-моему по-моему отсюда там картинок естественно там ещё наверно побольше значит что можно сказать Вот

по-моему отсюда там картинок естественно там ещё наверно побольше значит что можно сказать Вот сейчас можно немного верну на шаг назад и вспомнить что на самом деле Почему модель ла называлась одноэтапная потому что у неё была свёрточная сеть она отдавал результаты и дальше мы как бы эти результаты просто обрабатывали пост процессингового вот этой вот интуиции того что давайте Сначала мы какие-то там регионы кандидаты придумаем потом регионы кандидата е [музыка] у умет сегментировать обекты оно

там регионы кандидаты придумаем потом регионы кандидата е [музыка] у умет сегментировать обекты оно умеет не только детек а е и умеет сегментировать это просто два таких основных направлений вот в области решения подобных задач как правило если вам нужно решить какую-то задачу заранее сказать что сработает лучше под лучше я подразумеваю точнее быстрее на больше на больше вариативно ласо называтся но они основаны на архитектуре Трансформеров Я не видел чтобы где-то в продакшене применяли потому

но они основаны на архитектуре Трансформеров Я не видел чтобы где-то в продакшене применяли потому что это очень тяжёлые модели обучать их нужно очень долго данных для них нужно очень много работают они очень медленно поэтому мы с Трансформерами знакомимся только в отношении обработки текста но при этом там я не знаю может кто-то слышал что вчера вышла модель которая называется это модель это аббревиатура которая расшифровывается как segment anything Model то есть сегменти что угодно модель

аббревиатура которая расшифровывается как segment anything Model то есть сегменти что угодно модель работает она примерно таким образом что вы подаете на вход картинку пишете ей найди мне на картинке собаку она анализирует ваш текст то есть ваш промт и ищет на картинке собаку естественно обучена эта модель там на запредельном количестве данных и у неё Она довольно тяжёлая но в целом как правило [музыка] области а в Промышленной области семейство ла и семейство Вот rcnn и Mask rcnn они

правило [музыка] области а в Промышленной области семейство ла и семейство Вот rcnn и Mask rcnn они доминируют что можно ещё сказать Значит не надо путать ла и детрон а и Mask rcnn у нас есть фреймворки вот ла находится во фреймворке а ещ старые версии Y есть во фреймворке darknet тот кто любит писать на си может прийти туда и написать свой как бы детектор на си первоначально ло публиковались именно во фреймворке darknet после того как там произошла некоторая Санта Барбара среди авторов начиная

во фреймворке darknet после того как там произошла некоторая Санта Барбара среди авторов начиная с четвёртой версии они начали дублировать Во фреймворке а то есть а - это фреймворк для компьютер который содержит себе модерон в котором мы сегодня будем работать он это тоже фреймворк для компьютер вина который содержит в себе ветку моделей которые базируются на вот этом региональном понимании изображений Faster CNN Faster Mask и всё прочее прочее прочее то есть надо различать Если вы скажете что

Faster CNN Faster Mask и всё прочее прочее прочее то есть надо различать Если вы скажете что ой какую модель вас спросит Какую модель Я использовал вы скажете Я использовал detectron 2 это будет ваш последний ответ на собеседование deton 2 - это фво с кучей моделей Tic - это Framework с кучей моделей это фреймворк с кучей моделей есть MM detection - это реворк тоже с кучей моделей это фреймворки которые содержат в себе реализованные модели Вот и сегодня мы будем работать с детект нам Сергей

которые содержат в себе реализованные модели Вот и сегодня мы будем работать с детект нам Сергей Паша А вот восьмой версии Следующий пункт она тоже одноэтапная или там уже какой-то более сложно алгоритм я честно говоря не смотрел как восьмая реализована но не то есть там одноэтапная принципиальное соперничество вот может быть им бы и хотелось но общее Наследие не позволяет перейти к двухэтапной формулировке Настя А в чём пробле можно рассказать ВС равно картинки показать какие-нибудь да

формулировке Настя А в чём пробле можно рассказать ВС равно картинки показать какие-нибудь да проблема просто просто фут Хорошо Давайте тогда 10 минут перерыв и продолжим эту трансляцию я завершу чтобы как всегда об работалось побыстрее

ссылка на ноутбук который я буду показывать Сейчас она у нас собственно где вторник вторник вот демо мы будем пользоваться готовой реализации от лаборатории а можно прямо перейти по ссылке которая здесь есть здесь очень много всего про про то как её запустить в Кола не в коллабе Как использовать разные по размеру модели по аналогии с тем что там dnet бывает там 201 50 и так далее вот поэтому здесь с репозиторием Я рекомендую ознакомиться довольно подробно тут прям всё просто Как обучить на

здесь с репозиторием Я рекомендую ознакомиться довольно подробно тут прям всё просто Как обучить на собственных данных Как получить хорошие результаты тренировки Как обучить на нескольких видеокартах В общем как объединить модели Ну в общем всё очень дружелюбно я сразу устанавливаю прямо по Мы клонируем репозиторий у нас появляется папка 5 в целом это ВС можно запустить локально но Я рекомендую в таком случае создать отдельное окружение для этого Потому что если ла вам поломает там все

в таком случае создать отдельное окружение для этого Потому что если ла вам поломает там все зависимости в конде Вы потратите много часов на то чтобы это восстановить Поэтому лучше создать отдельное окружение для в принципе в отдельном окружении у меня работало совершенно переходим То есть у нас на данный момент после запуска этой ячейки если мы введём команду у нас домашний директория уже не просто контент а Y 5 это важно будет для некоторых следующих шагов импортируем точ импортируем и делаем

контент а Y 5 это важно будет для некоторых следующих шагов импортируем точ импортируем и делаем такую штуку Это для того чтобы у нас более удобным образом визуализации Да ня для того чтобы читать картинки с диска тут у меня есть сразу такой образец как бы команды которая может вам позволить детектировать какие-то объекты предо обученные моделью на картинки на видео там со скриншота экрана с картинки которая ну там типа со всех Картино которые над в па с и далее с этим поэте с СХ и положу их в

которая ну там типа со всех Картино которые над в па с и далее с этим поэте с СХ и положу их в папку Обратите внимание что после выполнения этой команды у меня эта папка создалась не в папке Котен в папке потому что выше я поменял домашнюю директорию Поэтому если я приду вот сюда и нажму здесь я увижу что у меня есть раз станет не совсем псом что нужно сделать для того чтобы воспользоваться обычной моделью прям вот не Обучаю её просто чтобы что-нибудь за детектировать пишем слите знак Python то

моделью прям вот не Обучаю её просто чтобы что-нибудь за детектировать пишем слите знак Python то есть вызываем Python Котен Y V5 дете я использую минус Минус weights это предо веса версии Small yola то есть Y 5S это Пятая версия ы все картинки будут отса это дефолтный размер на котором обучалась Y пятой версии confidence устанавливаю в 0,5 То есть я считаю что модель сработала когда у меня confidence больше 0,5 и Source - это собственно Откуда забрать картинки то есть на чём я сейчас буду

больше 0,5 и Source - это собственно Откуда забрать картинки то есть на чём я сейчас буду детектировать откуда взять объекты на которых я буду решать свою задачу модель скачивается естественно всё это надо делать на видеокарте можете попробовать делать локально я не против но сколько это времени займёт Я не знаю модель скачалась там значит какая-то первая картинка 48 ми секунд вторая картинка 49 миллисекунд И самое главное что в логах у меня показывается что результаты сохранены в Run detect

миллисекунд И самое главное что в логах у меня показывается что результаты сохранены в Run detect exp я соответственно могу прийти в папочку Run здесь есть Папочка detect эксперимент и распечатать или просто посмотреть две картинки на которых у меня появился результат Ну первый пёс смысле второй ПС который единственный он стал неожиданно котом правда с не очень высокой вероятностью видимой вс-таки его немножечко покороче высокой вероятностью но опять же вероятно дело в ресайз картинки

вс-таки его немножечко покороче высокой вероятностью но опять же вероятно дело в ресайз картинки горизонтальные я их сплющило бы использовать какую-то какой-то вид аргументации или наоборот отрезать каким-нибудь образом Но это ВМ зави я Обучаю потому что ла была обучена преимущественно на квадратных изображениях если у меня есть задачи в которой у меня изображение принципиально другого характера пространственного Я имею в виду высоту и ширину значит мне нужно с этим что-то делать самостоятельно

Я имею в виду высоту и ширину значит мне нужно с этим что-то делать самостоятельно то есть либо эти картинки резать пополам чтобы у меня были они более-менее одинакового размера В общем как-то выкручиваться Ну тут тут у меня показано как собственно сделать тоже самое просто с помощью питонов сть распечатать результаты которые модель мне натек Ну это не очень весело нам хорошо разметить изображение самим и самим же обучить на них модель значит для этого можно использовать сервис который

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

это идт куда-то в служебные фай приватный проект можно создавать только либо за деньги либо там с какими-то ограничениями поэтому делайте публич Никто там ничего у вас не украдёт У меня есть сразу папка с готовыми картинками Значит мы возьмём все эти картинки И собственно они у нас загруз в фай сечас будут некоторое время загружаться и после этого мы перейм к разметке Значит у меня тут появляется слева точнее справа появляется такая штука здесь можно использовать автол это тоже такая штука

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

соучастников к себе в команду разме одному долго и не очень весело поэтому если вы найдёте большой датасет который захотите разметить прямо по адресу электронной почты Вы можете пригласить сюда человека для того чтобы разметить с ним один и тот же датасет чтобы сэкономить время я никого не буду приглашать поэтому у меня здесь просто я выбираю что типа всё присвоить себе То есть все картинки буду размечают нажимаем Start annotating и собственно поехали У меня появляется инструмент по умолчанию

размечают нажимаем Start annotating и собственно поехали У меня появляется инструмент по умолчанию bounding Box tool я выделяю область которую хочу чтобы моя модель детектива У меня появляется предложение сохраняю что это действительно У меня собака сохраняю вот здесь вот собаку Ну и в общем тут мне нужно будет это сделать Некоторое количество раз если у вас есть мышка то вам скорее всего повезло если у вас мышки нет то это будет некоторым таким медитативный способом провести время но я рано

если у вас мышки нет то это будет некоторым таким медитативный способом провести время но я рано сечас мечу пото руне уже лень будет показывать разметку я буду пользоваться этим датам готовым поэтому вам немного Придётся подождать пока я занимаюсь этой прекрасной работой можно пока какие-нибудь Вопросы задать Если хотите А если их несколько Ты просто выбираешь всех по очереди потом нажимаешь сохранить Да да да Ну тут в принципе если класс один то его не обязательно даже нажимать Сохранить то

Да да да Ну тут в принципе если класс один то его не обязательно даже нажимать Сохранить то есть понятно что О он сам примени если у вас классов будет несколько А у вас их будет несколько тодо [музыка] вот прекрасно тут не так давно золотистый ретривер сумел удержать в пасте типа 13 что ли мечей вот этих теннисных и это просто прекрасно Вот это я понимаю способность не то что вся вот эта ерунда там у всяких непонятных супергероев Но кто играл в большой теннис знает что это очень полезная

там у всяких непонятных супергероев Но кто играл в большой теннис знает что это очень полезная функция всегда хочется чтобы на корте был золотистый ретривер чтобы ты самостоятельно не собирал мечи а карманы зачем тогда ну карманы что как колхозник там носить с морквою Да нормально все с карманами играют Ну это это так с карманами не Особенно удобно корзиночку рядом вставил и всё корзиночку А как же размахивать ракеткой безумном что МЧ туда не попадает я любитель Например я любитель конечно

как же размахивать ракеткой безумном что МЧ туда не попадает я любитель Например я любитель конечно отдельно в тренера попасть но это не всегда получается потому что он человек как бы привычный к этому Поэтому он довольно ловко уворачивается от всего этого дела Но главное я делаю Это специально вот так Ну всё у нас вроде всё мече тогда нажимаем назад у нас появляется примерно такая картина здесь Ну выделе на выделена наша разметка нажимаем добавить 14 объектов в датасет тут он сразу предлагает

Ну выделе на выделена наша разметка нажимаем добавить 14 объектов в датасет тут он сразу предлагает вам разделить их на Т инвалид и тест соотношение будет показываться Вот здесь Я рекомендую делать это разделение потому что ла так устроена Что если вы явно её не запустите без валидации то как бы обучение прой а потом она удт с ошибкой потому что она по умолчанию требует Валида зде это делается совершенно для этого ничего не нужно сделать Вам уже предлагается поэтому это можно без проблем просто

для этого ничего не нужно сделать Вам уже предлагается поэтому это можно без проблем просто оставить как есть 70% Т 20 Валид 10 тест нажимаем добавить изображение и и и и что тут происходит есть у нас есть идём вот сюда по этим тут есть какой-то Ну типа он проверяет что все картинки там хорошие что битых и всё такое Ну и в целом переходим во вкладку generate во вкладке generate у нас есть такая кнопка Create New version и здесь сразу можно такой отчёт посмотреть сколько всего картинок Сколько

кнопка Create New version и здесь сразу можно такой отчёт посмотреть сколько всего картинок Сколько классов что у меня все картинки размеченный и ставит им ресайз в 640x 640 здесь можно добавить какие-то ещё шаги при процессинга если вам это если вам это нужно Но типа вот Давайте можем какой-нибудь там кроп добавить он тоже довольно популярен а добавим contin А есть сразу встроенная аугментация её там какое-то количество В общем э можно применить бесплатно потом он скажет что типа тоже давай

её там какое-то количество В общем э можно применить бесплатно потом он скажет что типа тоже давай деньги но в целом что мы можем выбрать давайте выберем Grey Scale например и давайте выберем вот одно из такое нововведений ла это так называемая мозаичная аугментация я не помню В какой версии авторы предложили и в итоге Она довольно популярна вот эта мозаичная аугментация он даже там получил какие-то очень классные похвалы Вот но здесь есть видите мозаичная аугментация помогает модели лучше

очень классные похвалы Вот но здесь есть видите мозаичная аугментация помогает модели лучше работать на маленьких объектах нам в принципе она здесь не нужна у меня все объекты довольно кру буно в лом можно просто запомнить что мозаичная аменция такой важно для моделе детекции ша ну Давайте попробуем какой-нибудь Ката использовать чтобы из собак порезать вот такие вот случайным образом участки Вот это тоже поможет кам изображени применена каким-то нет тут можно увидеть всякие юхи к этому даже на

это тоже поможет кам изображени применена каким-то нет тут можно увидеть всякие юхи к этому даже на есть модели которую вы можете просто типа нажать выбрать модель она у вас обучится но сделать это как вы видите получится не очень большое количество раз типа всего кредитов три Сколько один кредит стоит Не знаю я тут никогда ничего не обучал нажимая мы работаем именно с этой моделью и есть два способа либо скачать ZIP к себе либо Show Down код я выбираю Вот это потому что мне нужно это сразу

способа либо скачать ZIP к себе либо Show Down код я выбираю Вот это потому что мне нужно это сразу отправить на сейчас все эти файлы заархивированный фактически я устанавливаю библиотеку rofl использую IP который ключ который сгенерирован мне был в процессе создания датасета говорю какой датасет я хочу скачать указываю версию этого датасета То есть если я например добавил каких-то картинок в я могу сгенерировать вторую версию датасета Ну более расширенную Это довольно удобно Вот и

в я могу сгенерировать вторую версию датасета Ну более расширенную Это довольно удобно Вот и соответственно В каком формате я буду это ВС скачивать чит сча Вот это здесь какой-то он рестарт хочет я нажимаю В таких случаях вот поэтому вы тоже нажмите потому что что-то типа какую-то зависимость переустанавливается серьёзную и как будто бы это должно чему-то помешать но пока это ничему не мешало поэтому рестарт можно не делать Давайте посмотрим что всё скачалось У меня есть Папочка можем сюда Зай

рестарт можно не делать Давайте посмотрим что всё скачалось У меня есть Папочка можем сюда Зай здесь есть наме Train images Ну и смотрим Да пожалуйста Ну тут конечно собаку немного как бы сказали в одной восточно-европейской стране попер долил Ну ладно не не удачная аргументация вышла а Но ничего страшного как бы там у нас датасет какое-то количество изображений содержит поэтому надеемся что это же изображение в какой-нибудь другой версии аргументации было получше и видим что в папочке У нас

же изображение в какой-нибудь другой версии аргументации было получше и видим что в папочке У нас есть папка которая называется А это как раз таки и есть наши разметка наших классов класс ноль координаты для другой картинки будет Ну у меня класс ноль будет везде потому что у меня класс просто один у вас соответственно если объектов на картинке несколько то классов будет тоже классов будет тоже несколько е одни координаты то есть каждому фай с изображением у меня соответствует текстовый файл в

е одни координаты то есть каждому фай с изображением у меня соответствует текстовый файл в котором указаны классы и координаты нужных bounding боксов это отличается от того что у нас было вчера Ну то есть вчера мы просто эти координаты из дало разбирали Но вот в таком стиле работает Y То есть это один из стандартов который принят в обучении моделей семейства Y каждой картинке соответствует текстовый файл в которой указан и координаты бадин бокса в котором объект находится что самое важное здесь

файл в которой указан и координаты бадин бокса в котором объект находится что самое важное здесь у нас есть такой Файлик который называется Data yel собственно путь к этому файли и есть такой вход нашей модели в наши данные А здесь перечисляются названия классов если классов было бы больше здесь бы через тире было бы написано ещё больше обозначении NC N cles у меня класс один То есть всего я детектива и пути к обучающей Валида и тестовой выборке то есть вот этот Y фай это файл с

всего я детектива и пути к обучающей Валида и тестовой выборке то есть вот этот Y фай это файл с характеристиками Куда нужно прийти ло для того чтобы взять данные для обучения чтобы обучить модель я делаю тоже очень простую вещь Я говорю Python Train указываю В 16 В принципе здесь можно побольше Наверно Но у меня небольшая выборка две эпохи Я долго обучать не буду даже если качество будет плохое потому что ну типа чтобы Время не тратить и вот здесь вот минус Минус дата я должен указать путь к

потому что ну типа чтобы Время не тратить и вот здесь вот минус Минус дата я должен указать путь к ямо файлу видите у меня сейчас здесь вставлен предыдущий ссылка на предыдущий ямо файл поэтому я должен прийти в папку со своим датасета выбрать здесь копировать путь у ямо файла и вот этот вот путь Я просто меняю контент Y 5 Golden 1 да соответственно Y 5 Golden 1 да и я буду тренировать самую простую модель это Y V5 NAN и я беру предоброе неделе я говорил что здесь можно начать с нуля но даже в

модель это Y V5 NAN и я беру предоброе неделе я говорил что здесь можно начать с нуля но даже в рекомендациях обучения в репозитории написано чтоли ирее рекомендуем начинать обучение сдобных весов Вот это в любом случае лучше чем начинать со случайно инициализирован Саша да у нас получается вот архитектура это предо обучена gole или там что-то ещё Вот и мы получается обучаемся на следующих ко слоях [музыка] те которые в вот в этом предо обучен Google Net они тоже будут обучаться а то есть мы

[музыка] те которые в вот в этом предо обучен Google Net они тоже будут обучаться а то есть мы полностью всю сеть обучаем Да мы обучаем её полностью просто не с нуля ла довольно компактная поэтому нет если взять дого То есть у нас уже есть какие-то неслучайные веса и мы уже с них начинаем пока не увидел адев виде по у это это делает по умолчанию вот чтобы обучить не на видеокарте это надо смотреть там будет аргумент что типа обучать на CPU А так она прямо сразу работает на пу Ой это из-за

там будет аргумент что типа обучать на CPU А так она прямо сразу работает на пу Ой это из-за фреймворка потому что это если бы я писал свою ё я бы делал всё как обычно то есть прямо и далее Ну в общем я здесь запу видите тут он показывает какие-то предупреждения в принципе они нам не сильно не сильно интересны потому что здесь что-то скуд если какое-то предупреждение связано с кудо это автоматически значит что как бы мы ничего не поймём И я тоже ничего не пойму видим что вопервых куно сразу

значит что как бы мы ничего не поймём И я тоже ничего не пойму видим что вопервых куно сразу Тесла он выбрал это собственно Вот про то что Костя спрашивал гиперпараметры и всё всякое такое здесь Е было NC 80 по умолчанию в этой ле 80 классов но он видите переписал её на классе с о потому что мы подставили туда собственные данные Значит тут архитектура этой модели собственно C3 - это такой свёрточные эти типа C3 они по сути между собой связаны конкатенации Об этом можно почитать По ссылкам из

эти типа C3 они по сути между собой связаны конкатенации Об этом можно почитать По ссылкам из статьи которую я показывал в слайдах здесь он нам печатает две эпохи всего лиш супер низкий высокий для нас ничего хорошего Но это как бы для нас неважно для конкретно для просто надо дольше обучать и вновь видим идм в Теперь у меня появилась папка во-первых лучшие и последние веса которые модель автоматически сохранила то есть чтобы забрать веса предо обученные не предо а те которые я получил я могу

сохранила то есть чтобы забрать веса предо обученные не предо а те которые я получил я могу просто нажать типа вот так вот всё мои веса готовы они скачиваются ко мне локально дальше здесь есть множество разных precision Rec квов и всего остального У меня всё это выглядит плохо потому что две эпохи ничего модель конечно же пока ещё не поняла А тут есть э всякие результаты Короче говоря вот результат всего вот этого вы можете потыкать сами в принципе это всё так или иначе либо метрики либо логи

всего вот этого вы можете потыкать сами в принципе это всё так или иначе либо метрики либо логи обучения Вот то есть если бы мне там захотелось не знаю распечатать кривые обучения Я бы пришёл там куда куда-куда вот здесь есть такой EV его тоже можно открыть посмотреть со всякими моделями там со всем остальным Вот но в целом тут есть даже и лосы где можно Вить такую вот штуку типа это валидация часть выборки где мне модель как бы пытается нарисовать bounding Box которые она нашла Короче вот этот

выборки где мне модель как бы пытается нарисовать bounding Box которые она нашла Короче вот этот results папочку results Я в целом рекомендую А обязательно посмотреть То есть папочку exp со всем тем что здесь есть а здесь две рекомендации по поводу того как например эту папочку переназначить чтобы всё например сохранялось к вам на Google Drive чтобы не было ситуации которая была на прошлой неделе у некоторых что обучается обучается потом всё вырубается и всё пропадает То есть можно заставить

у некоторых что обучается обучается потом всё вырубается и всё пропадает То есть можно заставить йло сохранять сразу куда-нибудь на Google Диск ваши результаты это бывает удобно чтобы продолжить обучение на своих весах не знаю обучили 10 эпох потом хотите продолжить нужно соответственно указать путь к своим весам с ключом wis то есть мы брали Давайте на иренс посмотрим Здесь всё довольно довольно просто тоже значит не помню Для чего здесь transforms ф нам здесь не нужен создаём модель на этот

просто тоже значит не помню Для чего здесь transforms ф нам здесь не нужен создаём модель на этот раз чтобы было попроще будем мы можем inf сделать с помощью detect который был выше который вызывается через командную строку второй вариант это сделать более Чуть более привычным образом это создать обк Mod tch сказать что работать будем с текущей моделью которая у нас здесь есть сейчас которую мы только что обучали э модель кастомная не предо А какая-то наша указать путь к весам этой модели чтобы

что обучали э модель кастомная не предо А какая-то наша указать путь к весам этой модели чтобы указать путь к весам модели мы соответственно идём в runs Ну и Давайте возм Хотя они у меняло И те и те з ть Да ВС потому что типа вот она локальна запускаем значит создали модель ла к ней прикрепленные наши веса и так это тоже непонятно что такое и Теперь попробуем взять какую-нибудь картинку и на ней отрисовать наши предсказание А вот здесь вот мне как раз понадобится transforms Ир ставлю

и на ней отрисовать наши предсказание А вот здесь вот мне как раз понадобится transforms Ир ставлю минимальную вероятность у меня модель плохо обучена поэтому мне нужно понять Вообще она что-нибудь рисует или нет потому что может быть там что-то пошло не так возм картин я эту тестовой выборки возьмём Golden и вот у нас тестовая выборка images и здесь у меня одна картинка скопирую её путь поставим молва Ну и тут наверное тоже надо добавить inference [музыка] мо и запускаем Ну как мы видим с

молва Ну и тут наверное тоже надо добавить inference [музыка] мо и запускаем Ну как мы видим с таким порогом конечно онана обнаружила мне много но порог то всего лишь х Давайте попробуем сделать порог какой-нибудь там 0 например вряд ли что-то будет хорошо работать но да Видите сколько бадин боксов Потому что потому что модель толком необычна поэтому генерирует много не очень уверенных Басов Но регулируя вот этот вот порог я соответственно могу для себя какой-то результат приемлемый обозначать

вот этот вот порог я соответственно могу для себя какой-то результат приемлемый обозначать вот тут всё Дело в том что две эпохи две эпохи и 30 картинок - это конечно ни о чём совершенно модель ничего не поняла ещё о том что ей нужно рисовать вот если вы обучите больше на большем количестве картинок то всё будет неплохо Ну и у вывода Вла есть всякие нормальные методы нам не всегда нужно прямо рисовать картинку Например иногда нам нужно просто забрать координаты Или иногда мы хотим посчитать

рисовать картинку Например иногда нам нужно просто забрать координаты Или иногда мы хотим посчитать количество разных классов которые есть на изображении поэтому здесь можно всё вот это вот в панс переводить и более удобным способом анализировать то есть мы можем это обуче ну в смысле результаты нашего Ирен прямо записывать в какой-нибудь CSV файл и потом использовать для каких-нибудь ещё а целей вот тут даже есть какой-то метод кроп Давайте попробуем results может он так наверное и будет

целей вот тут даже есть какой-то метод кроп Давайте попробуем results может он так наверное и будет работать так 14 17н непонятно что это такое наверное отсюда нужно А ну типа у много разных этих предсказаний и можно в них порыться что-нибудь здесь найти Я не знаю короче надо посмотреть документации как этот кроп делать Вот но это тоже может быть полез пото что Ино используется как промежуточная модель в Каде моделе типа приходит на вход картинка из картинки вырезается нужный объект и

модель в Каде моделе типа приходит на вход картинка из картинки вырезается нужный объект и отправляется дальше какой-нибудь модели для чего-нибудь вот а ну по коду у меня собственно всё Как видите сегодня кода немного совершенно Давайте вопросы луба получается использовать ло типа нам ничего не надо особо делать Просто типа импортировать постоянно и всё Ну да да О ну также как чтобы использовать м же не нужно его писать каждый раз самим Да вы там максимум слой последний меняете А здесь это

м же не нужно его писать каждый раз самим Да вы там максимум слой последний меняете А здесь это автоматически происходит Просто по факту наших данных в я файле написано Какое количество у нас должно быть класса вот самая тла сть ра с делать разметки разметка и деплой - это всегда самые тяжёлые штуки обучить модель - это очень легко обучить модель может десятиклассник как бы в этом нет никакого совершенно ну навыка такого серьёзного скажем так а вот разметка и анализ данных и деплой вот это да

ну навыка такого серьёзного скажем так а вот разметка и анализ данных и деплой вот это да это сложно Так ну что по заданию сегодня всё тоже предсказуемо значит Возьмите какой-нибудь дасе Я рекомендую разметить вообще в целом картинок 150-200 разметить его Желательно чтобы там было как минимум два класса обучите какую-нибудь версию лыы можно начать с лыы 5n это Y 5 NAN то есть самая маленькая версия можно взять какую-нибудь побольше чем больше у вас бы данных и если вы в таком случае будете

версия можно взять какую-нибудь побольше чем больше у вас бы данных и если вы в таком случае будете брать большую модель то у вас будет ВС обучаться очень медленно потому что большое количество данных нужно таскать через большую модель Ну как обычно ВС Вот и в телеграме сделайте Бота который будет детектировать что-нибудь что присылает ему пользователь Вот но главная цель сегодня пройти путь Сония дае и зака реу ти вот Telegram по ходу дела главное как бы весь этот процесс от регистрации на

дае и зака реу ти вот Telegram по ходу дела главное как бы весь этот процесс от регистрации на рофло и разметке до визуализации конечного результата пройти У меня всё да луба 150 фоток для каждого класса Ну нет 150 как бы можно 150-200 всего вот Ну тут э чтобы в целом вы просто прикинули как бы масштабы себя здесь есть всякие подсказки для хорошего обучения Йола Ну и посмотрите какие здесь рекомендации на один класс рекомендуется от полутора тысяч картинок вот значит на один класс рекомендуется

на один класс рекомендуется от полутора тысяч картинок вот значит на один класс рекомендуется от 10.000 его представлений то есть условно говоря э Если у вас есть какой-нибудь класс да там собака та же самая эта собака должна быть представлена не меньше чем 10.000 раз в вашем датасете Но это к вопросу как раз-таки о разметки данных в целом понятно что получить там на простых объектах получить какой-то Ну приемлемый результат хотя бы будет видно что всё работает можно на гораздо меньшем

какой-то Ну приемлемый результат хотя бы будет видно что всё работает можно на гораздо меньшем количестве объектов но при этом это в целом требует довольно большого числа элементов выборки Так ну и вот здесь рекомендую ещё почитать статью про то как то ли те кто учился в Яндексе то ли те кто работал я не очень помню но главное что они с помощью лы детек барсов в заповедники вот здесь они много как бы описывают каких какие у них проблемы были значит там и время суток какието рогатые черти прих

бы описывают каких какие у них проблемы были значит там и время суток какието рогатые черти прих тоже при детектировать в прикольно прикольно прикольное описание Сергей такой вопрос сами фотки просто на просторах интернета вбиваем Google и ищем как оно идёт или есть какие-то датасеты где можно скачать уже вручную меча плане откуда оригинальные фотки брать лучше оригинальные фотки Ну обычно из интернета берут А про по Кто у нас там с чем С чем работал можете какой-нибудь взять дасе с прошлого с

берут А про по Кто у нас там с чем С чем работал можете какой-нибудь взять дасе с прошлого с прошлой недели где классификация там где есть объекты потому что вот например те кто работал с задачей классификации архитектурных штук Ну там никаких объектов Нет ну там типа алтари алтари просто вот определённого цвета и определённой там зернистости вот а так проходите фотографи и всё Собственно как я сегодня вот этих ретриверов доставал Я просто в Гугле ввёл ретривер и скриншоте начал нарезать их на

вот этих ретриверов доставал Я просто в Гугле ввёл ретривер и скриншоте начал нарезать их на картинки и всё на Фло тоже объединяйтесь в команды чтобы пусть дасе может быть хоть один на всех вот главное чтобы он просто был большим Ну относительно большим то есть лучше втроём разметить типа 300 фотографий чем одному разметить 30 и потом думать почему ничего не работает вот Возьмите объединитесь просто быстро раскидайте и ВС если собрать и типа втроём вчетвером там сся изображений разметить это

быстро раскидайте и ВС если собрать и типа втроём вчетвером там сся изображений разметить это вообще не проблема Это не так уж и сложно тем более завтра всё равно тоже разме поэтому набивайте руку какая разница А разве можно больше троих на работать по-моему же нет каже можноли по-моему больше чем три человека оно не пускало Поэтому лучше по команду примерно так равноценно разбиться да Ну у вас как раз девять человек по три прекрасно абсолютно Ну всё тогда успехов Давайте до встречи Спасибо а

вот а значит давайте начнём сначала с метрики вот собственно нам нужно понять как нам определить что детектор какая-то модель хорошо справляется или плохо справляется с какой-либо задачей Вчера всё было достаточно Просто у нас была какая-то общая такая ну как бы задача классификации и задача построения бокса и у нас были по сути говоря отдельные метрики То есть у нас была Метрика которая связана с классификацией и мы её использовали Ну там ACC да и была Метрика I но при этом у нас не было

с классификацией и мы её использовали Ну там ACC да и была Метрика I но при этом у нас не было какого-то интегрального показателя Ну то есть который бы нам одновременно говорил И что мы хорошо классифицируй что у нас при этом ещё I высокий вот а для того чтобы понять как эти две штуки можно объединить и собственно по какой метрике качество работы детекторов определяют нужно Ну во-первых про I вспомнить тут есть у кого-нибудь вопросы или всё понятно со вчера Ну да я тоже думаю что вроде Здесь

тут есть у кого-нибудь вопросы или всё понятно со вчера Ну да я тоже думаю что вроде Здесь всё довольно просто нам нужно вспомнить раз у нас здесь классификация используется в определённом смысле нам нужно вспомнить какие в классификации у нас бывают исходы но при этом перенести это в термины в термины рисование бадин боксов или обнаружение вообще в целом объектов вот если у нас объекта нет а к мы нарисовали Это что за исход классификации который Как называется ложно положительный Да ложе

а к мы нарисовали Это что за исход классификации который Как называется ложно положительный Да ложе положительный fse POS то есть действительно объекта никакого не было наша модель сказала что он есть также как и в случае с какими-нибудь заболеваниями пациент Здоров наша модель говорит что нет Он болен это ложно положительное срабатывание наоборот когда объект есть но бокса нет какой-то объект присутствует мы ожидаем что модель его Найт а модель нам говорит что нет никакого объекта нет вот этот

мы ожидаем что модель его Найт а модель нам говорит что нет никакого объекта нет вот этот исход у нас называется ну и последний самый простой случай это когда объект есть и бокс правильный То есть это модель должна была найти Объект который действительно присутствует и тут у нас как быст Это совершенно бесполезная вещь Это из разряда бокса нет и объекта нет то есть нам не ясно вообще даже Зачем нам эту штуку нужно каким-то образом включать в оценку потому что непонятно относительно чего

Зачем нам эту штуку нужно каким-то образом включать в оценку потому что непонятно относительно чего оценивать То есть у нас нету сущности для детекции поэтому то что у нас ничего не нарисовано но вроде как логично что и не должно было быть ничего нарисовано вот поэтому негатив В нашем случае не очень для нас важен дальше кто расскажет что такое prision и что такое Л но только не в терминах тпн и так далее а более человеческим языком я я могу Давайте преси кто-нибудь другой рекол возьмёт доля

и так далее а более человеческим языком я я могу Давайте преси кто-нибудь другой рекол возьмёт доля правильно уган из всех которых мы посчитали плюсиком Ну всех наших догадок Какая из них правдива Проложи уга Метрика которая ориентируется на предсказание модели она ищет долю исти положительных среди всех тех которые модель назвала положительными Кто помнит это из те которые реально положительны положитель на все реально положитель да истинно положительные результаты по отношению ко всем тем

положитель на все реально положитель да истинно положительные результаты по отношению ко всем тем которые в выборке были положительными Вот то есть у нас на самом деле там просто в знаменателе false positive меняется на false negative то есть false negative - это как раз таки те объекты которые мы назвали отрицательными они на самом деле положительные вот а хорошо значит тогда переходим к тому что такое prision prision Rec мы вспомнили У нас есть исходная картинка на этой картинке у нас

тому что такое prision prision Rec мы вспомнили У нас есть исходная картинка на этой картинке у нас отмечены объекты они выделены бадин боксами и в этой на этой картинке у меня всего есть четыре класса То есть первый класс - это собственно автомобиль второй класс - это собаки класс люди и Класс вот этого вот ну мягкой игрушки мы сес разм построение этой метрики только относительно одного ла собак но относительно всех остальных классов они будут таким же образом считаться то есть алгоритм будет

но относительно всех остальных классов они будут таким же образом считаться то есть алгоритм будет тот же просто мы это будем делать для нескольких классов Ну нет конечно мы это сами писать не будем но в целом Метрика будет считаться универсально для любого класса который есть задача предположим что наша модель используя Ну вот примерно вот такой вот Таргет она обучила вот таким вот образом то есть она очевидно здесь нашла какието каких-то собак на нам в данном случае интересны только собаки

есть она очевидно здесь нашла какието каких-то собак на нам в данном случае интересны только собаки понятно что тут ещё есть люди и так далее э у каждой детекции есть определённая вероятность Откуда эта вероятность берётся мы посмотрим когда будем разбирать Йола То есть получается что как бы каждый bounding Box обладает некоторой уверенностью то есть уверенностью в том что этот объект который содержится в этом баун боксе он принадлежит определённому классу я Напоминаю что вчера мы

который содержится в этом баун боксе он принадлежит определённому классу я Напоминаю что вчера мы классифицировали картинку целиком У нас не было задачи классифицировать то что есть в определенном регионе изображение да то есть то что есть в бае мы вчера классифицировали картинку Полностью тут у нас задача чуть сложнее у нас есть предсказанные боксы и мы начинаем построение собственно самой метрики Значит первое что мы делаем берём в разрезе класса и упорядочить уверенности того что в бадин

Значит первое что мы делаем берём в разрезе класса и упорядочить уверенности того что в бадин боксе находится собака Значит мы начинаем строить вот такую вот табличку вот у нас есть первое предсказание это первое предсказание оно у нас находится вот здесь вот вот она собака с уверенностью модели 0,92 мы должны сопоставить это предсказание с настоящим бадин боксом настоящий у расположен вот здесь вот есть для этого который был в таргете модель нарисовала вот такой вот ба далее мы делаем

здесь вот есть для этого который был в таргете модель нарисовала вот такой вот ба далее мы делаем следующее мы начинаем считать между вот этими двумя бадин боксами то есть настоящим таргетом и тем которые модель нарисовал мы между ними считаем I Ну в целом Мы видим что вот тут собака выделена достаточно хорошо В нашем предсказаний собак тоже практически таким же образом выделе то есть эти очевидно что меду вот этими там например больше 0,5 это может быть на самом деле любой порог но возьмём для

что меду вот этими там например больше 0,5 это может быть на самом деле любой порог но возьмём для простоты 0,5 понимаем что эти два бадин бокса пересекаются больше чем на 0,5 Значит мы считаем Вот это вот предсказание успешным успешное предсказание в наших терминах - это True POS то есть объект был мы нарисовали бан этот бан хорошо пересекается с истинным баун боксом поэтому мы считаем что это предсказание наша модель уверена на 0,92 мы говорим что совпадение то есть наш исход классификации в

наша модель уверена на 0,92 мы говорим что совпадение то есть наш исход классификации в отношении конкретно этого объекта True POS и записываем в накопительную статистику True POS единичку записываем Но почему ноль потому что в данный момент мы попытались классифицировать точнее сравнили один ба это успешный т п ничего не помело дамен дальше мы считаем у на считается Как число п на данный момент Но на становится равным единички считаем В ле у нас в знаменателе общее число объектов картинке вот

Но на становится равным единички считаем В ле у нас в знаменателе общее число объектов картинке вот и получается что на данный момент мы сделали только одно предсказание это предсказание было Т позитивом тив мы делим на все объекты которые должны были закти их всего 16 рекол равен 0,800 Идём по второму предсказанию а второе предсказание у нас вероятность достаточно высокая но у второго предсказания очевидно есть проблема это предсказание у нас нарисовано вот здесь вот Мы видим что Несмотря на

очевидно есть проблема это предсказание у нас нарисовано вот здесь вот Мы видим что Несмотря на то что модель достаточно сильно уверена в том что здесь действительно собака если мы два вот этих вот бабок сравним между собой по I то у них будет не сильно-то успешной потому что здесь морда собаки полностью захвачено а здесь в предсказании здесь захвачен только край морды этой и мы понимаем что если мы поем это в данном случае точно будет меньше чем 05 чем наш порог в таком случае если маленький

мы поем это в данном случае точно будет меньше чем 05 чем наш порог в таком случае если маленький мы говорим что наше вот это вот предсказание является ложноположительным Несмотря на то что модель сильно уверена что там собака Bing Bo мы качественным не считаем потому что она она не захватила в хорошей степени ту область которую должна была захватить бадин бок поэтому мы спускаемся на вторую строку говорим что у нас здесь есть у на на самом деле сейчас Один потому что вот мы только один

строку говорим что у нас здесь есть у на на самом деле сейчас Один потому что вот мы только один проанализировали но при этом добавляется соответственно prision падает до 0,5 потому что здесь прибавилась единичка в позитива л остаётся неизменным потому что ни одного тру позитива не добавилось Значит рекол тоже не поменялся А количество объектов которые мы должны с детектировать оно по-прежнему 16 их на для этой картин не стало больше идм Дат третье предсказание третье предсказание - это собака

их на для этой картин не стало больше идм Дат третье предсказание третье предсказание - это собака которая где-то у нас сидит Но это очевидно Вот она значит между этими двумя бадин боксами вот предсказание которое нарисовала модель между ними достаточно хороший I мы будем считать что он больше 0,5 Ну и мы по вот этому предсказанию видим что он действительно довольно хороший считаем что это установится п здесь вот у на единичка изменяется на двойку как бы как был вот это единичный так он сюда и

п здесь вот у на единичка изменяется на двойку как бы как был вот это единичный так он сюда и приходит потому что здесь у нас только прибавился Таким образом у нас возрастает потому что увеличился потому что увеличился да то есть теперь он типа точнее 2 п в знаменателе что происходит Дальше Дальше мы считаем Вот по этой же самой механике все предсказания выполненной моделью в рамках одного класса и в процессе получаем вот такую вот историю изменения наших нов и реков это же рекол только для

и в процессе получаем вот такую вот историю изменения наших нов и реков это же рекол только для одного класса только для собак механика того как он считается понятна прока [музыка] 2 + 3 там ра 0,66 там 2 по 3 в смысле 2 по 2 + на 3 там да да да да вот а у нас появляется для одного класса История прежевская откладываем А по оси X значение реколор Идём по той истории которая у нас есть на первом этапе равен едини равен 0,8 ставим куда-нибудь вот сюда точку вторая строка Rec падает в два раза

этапе равен едини равен 0,8 ставим куда-нибудь вот сюда точку вторая строка Rec падает в два раза падает в два раза 0,5 то есть пришли Вот сюда л не меняется поэтому мы как бы приходим вот в эту вот строчку дальше л возрастает вместе спрем то есть становится больше становится больше идм Соединяем вот зде Таким образом мы проходим по всей нашей табличке с нашими классами и после этого нам необходимо просто соединить линиями те Точки которые у нас получились на графике соответственно тут понятно

просто соединить линиями те Точки которые у нас получились на графике соответственно тут понятно что эта Метрика она уже подразумевает вычисление площади под кривой Если Вы две метрики откладываете одну по оси X в по оси Y это 100% дальше вы должны будете посчитать площадь Под этой кривой а в виду того что присины рекол они могут в зависимости от нашей детекции изменяться по-разному мы сами видим что вот этот пресижн он может сначала упасть потом он может возрасти потом он может опять упасть А

что вот этот пресижн он может сначала упасть потом он может возрасти потом он может опять упасть А в отличие от например рока аука где у нас просто эта кривая она Ну в нормальном случае да она должна быть выпуклая то есть если у вас в руко уке кривая какая-то Вот такая это значит что-то у вас не так вообще кардинальным образом э кривая она не обязана быть выпуклой поэтому для того чтобы посчитать по ней площадь ленивые ребята делают примерно таким образом они говорят что давайте мы не будем вот

по ней площадь ленивые ребята делают примерно таким образом они говорят что давайте мы не будем вот над этим вот думать Да над тем как нам вот эти вот области ограниченные кривыми здесь какую-нибудь площадь посчитать давайте мы просто возьмём и пока справа мы не найдём какой-нибудь максимум то есть мы не будем как бы спускаться вот сюда идти сюда и вот так вот делать а мы будем Вот так идти вниз как только справа найдётся какое-то высокое значение мы вот так вот возьмём это дело и округли здесь

только справа найдётся какое-то высокое значение мы вот так вот возьмём это дело и округли здесь опять начинаем спускаться вниз справа уже ничего нет то есть справа никакого значения присина высокого нет приси у нас просто с определённого момента падает падает падает падает и таким образом мы получаем орун Риво соответственно Наша задача Вот эту вот самую площадь и вычислить понятно что чем эта площадь будет больше тем вот эта Метрика Вот это значение вот значение вот этой площади это будет

площадь будет больше тем вот эта Метрика Вот это значение вот значение вот этой площади это будет Метрика которая называется которая называется у по нашему одному классу максимальное значение этой метрики будет единичка потому что максимум что как бы как мы можем пройти максимально хорошо Это мы можем пройти вот таким вот образом в данном случае ну у нас очевидно даже меньше 05 и вот этот вот с для одного лас посчитали Ever prion для собак для собак Ever prion там ну будет я не знаю пусть 0 там

одного лас посчитали Ever prion для собак для собак Ever prion там ну будет я не знаю пусть 0 там 41 к примеру а должен Должны мы его устремиться к единички вот сейчас Какие вопросы есть Напомни пожалуйста оси Как подписано что там рекол и prion рекол по иксу prision по игре хорошо Значит теперь можем вернуться вот сюда вот и увидит что у нас на самом деле есть ещё какие-то классы у нас здесь есть класс людей у нас здесь есть класс мягкой игрушки У нас тут есть класс связанный с автомобилем

есть класс людей у нас здесь есть класс мягкой игрушки У нас тут есть класс связанный с автомобилем если мы для всех этих классов произведём ровно такую же процедуру после этого посчитаем для каждого из этих классов А после этого всё то же самое Нарисуем то мы получим Примерно вот такую диаграмму Вот это это диаграмма aage PR синов для большого количества классов мы видим что какие-то классы здесь детектива хорошо то есть у нас есть например вот здесь вот какая-то ну какой-то серый класс я

здесь детектива хорошо то есть у нас есть например вот здесь вот какая-то ну какой-то серый класс я сейчас не буду вникать там по легенде к чему он привязан но мы видим что у него прямо детекция отличная да то есть он захватывает явно больше 0,5 и это это Вполне хороший результат какие-то классы которые у нас например вот здесь вот начинаются у них prision становится 0,2 и фактически это prion максимальный потому что дальше все эти значения просто падают то есть какие-то классы детектива очень

потому что дальше все эти значения просто падают то есть какие-то классы детектива очень плохо если мы под каждой из этих кривых посчитаем площадь то есть для каждого класса посчитаем average precision и усредни все эти aage присины А между всеми классами то мы получим метрику aage prision То есть это усреднённый сред усредненная средняя точность для всех классов метрику mean prision не переводит по понятным причинам на русский язык Вообще нигде То есть она как звучит Метрика так она и звучит

по понятным причинам на русский язык Вообще нигде То есть она как звучит Метрика так она и звучит метрикой вот Метрика - это то почему сравниваются детектори чем Метрика Map выше на конкретном детекторе на конкретном датасете чем тем этот детектор считается более качественным у метрики Map ввиду того что она работает одновременно для большого количества классов а у неё не бывает таких результатов прям высоких что там мы будем там п получать Я не знаю 0,98 потому что как правило если у вас есть

прям высоких что там мы будем там п получать Я не знаю 0,98 потому что как правило если у вас есть даже 20 классов каких-нибудь в обучающей выборке Ну неизбежно будет такое что какие-то буро хуже чем другие средняя это величина которая очень сильно зависит от выбросов поэтому один Ну как бы один плохой среди там пяти классов это автоматически снижение потому что среднее к этому чувствительно Вот иногда можно увидеть что Метрика 05 это означает то что порог при вычислении вот этого был 0,5 ровно

можно увидеть что Метрика 05 это означает то что порог при вычислении вот этого был 0,5 ровно так как я объяснял на одном из предыдущих слайдов то есть мы считаем что если наши бан боксы пересекаются больше чем на 05 Да 0,5 это значит То что это нас приводит к Иногда вы можете увидеть что Метрика может то есть Map какой-то порог Иногда вы можете увидеть метрику Map например там 075 099 Это означает что по-моему с со вот Ну да с оно Сой перебирается вот этот вот порог iu начиная с 0,75 до 0,99

что по-моему с со вот Ну да с оно Сой перебирается вот этот вот порог iu начиная с 0,75 до 0,99 для каждого из значений этого порога считается Метрика Map И после этого всё усреднять Понятное дело что чем мы больше ставим ограничения на э пересечение наших баун боксов тем более высокие требования к модели мы как бы предъявляем если мы требуем чтобы наши баун боксы пересекались например не на 0,5 А на 0 там 9 Это значит что м будет снижаться потому что модели намного сложнее нарисовать такой

А на 0 там 9 Это значит что м будет снижаться потому что модели намного сложнее нарисовать такой баун бокс чтобы он прямо совпадал практически идеально вот но в целом можно ориентироваться на метрику Map Map 0,5 это Самый классический вариант вопросы по этой метрике Коль Ну такая явная аналогия трешхолд для роук а используются ли эти показатели после собачки для того чтобы наоборот максимизировать мап то есть перебирать их да да В целом как бы обычно даже используется например какой-нибудь ну

мап то есть перебирать их да да В целом как бы обычно даже используется например какой-нибудь ну то есть вот здесь же мы явным образом зависим всегда Да ТПО появляются от I Поэтому иногда вплоть даже до того что вручную люди перебирают и просто смотрят какой порог I становится оптимальны потому что выбор здесь примерно тот же самый про который вы уже 1.000 раз слышали У нас есть prision у нас есть рекол что для нас лучше не не в медицине это может быть одна ситуация в том если мы кому-то

есть рекол что для нас лучше не не в медицине это может быть одна ситуация в том если мы кому-то рассылаем эсэмэски которые для нас фактически бесплатно Это совершенно другая ситуация Ну Господи отправим там од тысячную копейки потеряем Ну какая разница вот поэтому здесь Всё конечно зависит всегда от задачи Хорошо тогда давайте переходить к моделям собственно модель Y это даже не одна модель а семейство уже десятая вышла или я не знаю Ну наверно десятая последняя это целое семейство моделей до

уже десятая вышла или я не знаю Ну наверно десятая последняя это целое семейство моделей до определённого момента они разрабатывались как бы коллективом разработчиков одним а потом сама эта идея стала настолько популярной и настолько такой простой и эффективной что фактически сейчас если кто-то берёт Костяк вот этой модели там её как-то дооб бучаева то все это всё равно называют ла Хотя в какой-то момент у авторов непосредственных разработчиков этой модели были даже претензии Какого чёрта там

момент у авторов непосредственных разработчиков этой модели были даже претензии Какого чёрта там какие-то китайцы взяли нашу идею назвали её ло 5 и почему-то выложили Вот но потом вроде всё угомонилась стало ясно что чем больше моделей тем лучше и проблема только в том что они выходит каждые там месяца четыре и за этим довольно сложно уследить но тем не менее мы разберём сегодня самую первую версию модели Несмотря на то что типа Казалось бы там первая и десятая да у них такой прям супер

версию модели Несмотря на то что типа Казалось бы там первая и десятая да у них такой прям супер кардинальной разниц наверное только по отношению к десятой есть потому что в десятой один компонент серьёзный убрали но тем не менее концептуальная идея осталась прежней В чём собственно проблема Проблема в том что существующие на тот момент детектора мы о них будем говорить завтра у нас немного смещено временное повествование потому что сложность у них разная Вот это понять проще чем то что будет

временное повествование потому что сложность у них разная Вот это понять проще чем то что будет завтра существующие на тот момент детекторы работали хотелось заставить их работать на детек в режиме реального времени вот те детекторы которые были они были очень медленные они были двухэтапный мы завтра посмотрим Почему они собственно работали не очень быстро станет Ясно поэтому люди начали думать как сделать эти модели более простыми но при этом более эффективными ВМ году выходит модель архитек

как сделать эти модели более простыми но при этом более эффективными ВМ году выходит модель архитек это общее название которое только один раз противовес двух этапные Ну да здесь уже вот можно номерных версий де зачеркнуть на 10 но в целом как бы семейство довольно мощное в первую очередь появилось как модель которая умеет детектировать объекты на изображениях и на видео значит как эта модель устроена она на самом деле состоит из двух таких главных блоков и одного ещ одного даже не то чтобы а

она на самом деле состоит из двух таких главных блоков и одного ещ одного даже не то чтобы а ещ одной процедурой которую мы тоже сегодня разберём первая часть этой модели - это классификационная часть это в оригинале в первых версиях Это был Google Net потом эту модель поменяли там на какую-то другую и вообще в целом туда можно подставить на самом деле всё что угодно то есть эта модель в буквальном смысле как мы вчера и на прошлой неделе применяли Давайте возьмём какую-нибудь предо модель и эту

смысле как мы вчера и на прошлой неделе применяли Давайте возьмём какую-нибудь предо модель и эту чю модель будем использовать как экстракта Пусть это предо обработает нам картинку так чтобы мы потом на её результатах смогли построить какой-то какое-то продолжение нашего алгоритма вторая часть этой модели - это детекция часть эта часть принимает на вход выход классификационной части и выдаёт тензор размера 7 на 7 на 30 То есть это просто 30 матриц кажд из которых разме на кото ты скидывал было

размера 7 на 7 на 30 То есть это просто 30 матриц кажд из которых разме на кото ты скидывал было сказано что наносится сетка 7 на 7 и в каждой клеточке получается собирается обобщённая информация по каждому сектор Вот это да Но сейчас это неважно пока Ну просто я для понимания так в оригинале Это был в смысле В этой верси Это был 7 на 7 потом там сделали 13 на1 Короче говоря Это можно сказать параметр алгоритма на самом деле вот значит две части нас больше всего интересует часть которая

параметр алгоритма на самом деле вот значит две части нас больше всего интересует часть которая собственно Будет отдавать вот эти вот 7х 7 на 30 потому что именно с этими 7х 7 на 30 будет происходить основная процедура которая связана с детекцией а предполагается что наша картинка состоит из вот такой вот сетки Ну то есть на неё просто нанесена сетка эта сетка она как бы очень условная Да просто с помощью неё проще проиллюстрировать э именно с точки зрения как бы того что прямо там сетка как-то

помощью неё проще проиллюстрировать э именно с точки зрения как бы того что прямо там сетка как-то в алгоритме накладывается такого нет значит э сетка 7 на 7 вновь это параметр сетка может быть и другого размера она делит изображение на 49 одинаковых квадратов после того как картинка изначальная пропускается через собственно всю эту модель это просто набор свёрточные плюс набор полносвязный 7 на и в глубину на 30 То есть это получается такой параллелепипед как бы с числами у него Ну Батон батон

в глубину на 30 То есть это получается такой параллелепипед как бы с числами у него Ну Батон батон из матриц у него соответственно 30 вот этих вот чисел в пространственном измерении эти 30 чисел они соответствуют например вот этому квадрату соответственно если мы возьмём вторые вот эти вот 30 они будут соответствовать вот этому ра глубину вот здесь вот числа они будут соответствовать исходному региону на изображени теперь что же хранится в этих собственно всех числах если мы возьмём один вот

региону на изображени теперь что же хранится в этих собственно всех числах если мы возьмём один вот такой вот Вектор в глубину то а в нём будет храниться 30 чисел первые два числа то есть вот эти вот X1 y1 - это координаты первого потенциального бадин бокса который будет нарисован в этом регионе то есть в левом верхнем углу изображения вторые две вторые два числа - это высота и ширина этого бадин бокс То есть у нас как бы подразумевается что вот в этом вот ба точнее в этом регионе изображени

бокс То есть у нас как бы подразумевается что вот в этом вот ба точнее в этом регионе изображени потенциально может находиться два бадин бокса один какой-нибудь вот такой второй какой-нибудь вот такой соответственно первые четыре числа это координаты и шири первого бадин бокса пятое число это так называемый conf уверенность модели в наличии центра объекта в этой ячейке То есть если у нас будет расположен Ну предположим что наша модель нарисовала Ну разберём на одном нарисовала какой-нибудь Бабо

Ну предположим что наша модель нарисовала Ну разберём на одном нарисовала какой-нибудь Бабо Да у которого я не знаю Вот такая вот какая-нибудь форма в принципе он может быть и заходить на другие ячейки здесь нет никаких ограничений у этого бадин бокса у него есть соответственно X1 y1 и есть у него высота и есть у него не там я написал есть у него высота и есть у него ширина вот ещё одно число к этим четырём вот это вот C1 это уверенность модели В каком-то смысле это можно воротной для этого

к этим четырём вот это вот C1 это уверенность модели В каком-то смысле это можно воротной для этого есть C1 он будет измеряться от нуля до единицы и он будет обозначать что вот в центре вот этого баун бокса есть какой-нибудь объект неважно какой вообще что вот в центре этого баун бокса есть какой-то объект просто произвольный объект этот объект на данный момент не обязан быть привязан ни к какому классу просто что-то присутствует в этом баун боксе вторые пять чисел которые есть вот в этом

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

обнаружить и изначально модель естественно будет с высокими вот этими конденса потому что она будет думать что везде что-то есть потому что ну там дерево Может быть но в процесе обучения когда ЧМ обучать эту модель она будет понимать что мы хотим концентрироваться на каких-то определённых объектов определённых классах поэтому этот код confidence Score он будет для хороших бадин боксов повышаться а для бадин боксов которые были Пусть изначально высокими он будет понижаться просто типа по причине

для бадин боксов которые были Пусть изначально высокими он будет понижаться просто типа по причине того что набор объектов на которых мы обучаем ограничен у вот значит вот это первые пять чисел вторые пять чисел это потенциальные те же самые по характеристикам числа Но для потенциального второго бадин бокса предполагается Вот сама ла просто по природе это делает она подразумевает что в каждой вот этой вот ячейки может быть нарисовано два бадин бокса соответственно высота ширина и

в каждой вот этой вот ячейки может быть нарисовано два бадин бокса соответственно высота ширина и позиционирование второго баун бокса это X2 y2 v11 и у него тоже будет какой-то у C2 Почему этих бадин боксов именно два идея в том что предполагается что ну как бы модель генерирует потенциальное множество кандидат в этих бадин боксах что-то может находиться в процессе обучения тот ба Который больше подходит объекту определённого размера просто будет быстрее подогнать гите какой-то из них будет

подходит объекту определённого размера просто будет быстрее подогнать гите какой-то из них будет лучше какой-то из них будет хуже Но она их генерирует сразу два это первые 10 первые 10 чисел из того самого Вектора в 30 вторые вторая часть всех этих чисел То есть то что находится у нас вот здесь вот этих чисел 20 итно я конкретно вот здесь вот вот тут вот без привязки к банкса что в этой ячейке есть объект определённого класса изначально соответственно Ну как бы там тоже будут какие-то случайные

объект определённого класса изначально соответственно Ну как бы там тоже будут какие-то случайные числа потому что модель не знает есть ли там что-то или нет Вот именно чисел здесь 20 Потому что тот датасет на котом обуча 200 соржа себе 20 классов если мы захотим обучить эту модель например на два класса пусть она детект нам кошек и собак соответственно вот эта часть будет без изменений потому что модель по-прежнему будет генерировать два бадин бокса у них будет четыре характеристики позиции

что модель по-прежнему будет генерировать два бадин бокса у них будет четыре характеристики позиции высоты ширины будет какой-то конфиденс но при этом вместо д элементов зде Эмен зависит в общем-то только от числа классов на которых мы обучаем в оригинале их было 20 в оригинале Я имею в виду у авторов статьи У нас их может быть другое количество модель как бы там всё это делается через фреймворк поэтому когда мы модели зададим количество классов и её архитектура автоматически сметчимся То есть

поэтому когда мы модели зададим количество классов и её архитектура автоматически сметчимся То есть получается 49 Вот таких вот векторов потому что у нас 49 ячеек по которым мы будем такую задачу решать но теперь у нас есть две вещи даже в каком-то смысле д с половиной первая вещь - Это собственно вероятности того что в ячейке какой-то объект есть а вторая с половиной вещь - Это то что у нас есть какие-то оценки модели в том что центр объекта находится в бан бое без разни какого обекта

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

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

величины мы получим в буквальном смысле обозначение что а Какова вероятность что вот в этом вот квадратике содержится один из двадцати классов а Какова вероятность что в этом квадратике содержится для второго баун бокса тоже один вот это из этих двадцати классов то есть у нас есть две оценки относительно разных бадин боксов и у нас есть распределение оценок относительно классов Как нам выяснить какой баун бокс лучше содержит в себе объект перемножить там где Например если у нас У этого баун

какой баун бокс лучше содержит в себе объект перемножить там где Например если у нас У этого баун бокса там уверенность 0,8 А у этого бадин бокса уверенность 0,5 то тогда 5 сократят все эти вероятности в два раза а эти тоже сократят но не в два раза поэтому распределение вот здесь вот будет выше чем распределение вот здесь вот вот этот вот Ну типа зачем происходит умножение понятно хорошо да Сергей Паш скажи а вот мы умножаем на вероятность а как мы понимаем вот ну Какова эта вероятность Ну

Паш скажи а вот мы умножаем на вероятность а как мы понимаем вот ну Какова эта вероятность Ну модель Т матриц же как-то перемножили Ну как Какова нам модель же отдаёт какое-то число это число едини мы его интерпретируем как вероятность Я просто думал что вот как раз c12 это есть вот по сути вероятность того что в центре находится А это про тоже вероятно какой-то объект находится в центре да любой вот поэтому тут и называют вот эти C1 C2 чтобы не путать их Именно с вероятностями классов их для

вот поэтому тут и называют вот эти C1 C2 чтобы не путать их Именно с вероятностями классов их для этого и называют confidence Score То есть это уверенность модели что там что-то есть что-то присутствует в этом баун боксе вообще в целом что-то вот а вероятности - это уже вероятности классов софт ма всё как положено то есть это уже после того как модель нам э всё это просчиталась вот как было на самой верхней картинке с собаками всё вот это это выход модели прям выход вот модель нам отдаёт вот

самой верхней картинке с собаками всё вот это это выход модели прям выход вот модель нам отдаёт вот это вот то что мы дальше считаем Это как бы это интегрировано в архитектуру модели но как бы сама модель вот конкретно в вычислении вот этого она как не участвует то есть всё Вот она вот выход модели она нам это отдала дальше переходим ко второму этапу начина с предсказания Хотя во фреймворке это будет так что модель нам сразу отдаёт квадратики Да нарисованные на изображении но как бы номинально

так что модель нам сразу отдаёт квадратики Да нарисованные на изображении но как бы номинально это другая процедура Сергей у меня вот вопрос который у меня собственно остался после вчерашнего просмотрам сся туя что находится условная собака В2 боксе условная кошка Мы же никак не сможем перемножить вероятности так чтобы типа в рамках одного в рамках этих двух ба боксов это так определилось то что п у нас фиксированная условно Мы же не сможем это сделать так ещё раз В1 что допустим у нас ситуация

у нас фиксированная условно Мы же не сможем это сделать так ещё раз В1 что допустим у нас ситуация то что у нас в C1 находится один класс2 другой Ну так совпало что Собачка там на в одной штучки кошка ря Но они у них центр как будто совпадает они и мы тогда мы же не сможем тогда модель моделью за детектив то что в C1 у нас находится собака в C2 кошка потому что у нас п фиксированная и мы никак не подберём C2 и C1 и п чтобы у нас в одном как бы превалировали кошко в другом собака Ну если я

не подберём C2 и C1 и п чтобы у нас в одном как бы превалировали кошко в другом собака Ну если я правильно будет ошибка Да всё А ну в плане Ну то что это ограничение модели то что мы мы не можем это сделать а это ограничение фактически всех моделей если у тебя два класса расположены супер близко к друг другу ну повышается шанс того что модель не сможет их ээ нормально детектировать Ага вот у нас например просто вот на картинке которая была тесто где вот эти ди были собаки и так далее Там они

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

разметку в виде координат и посмотри что происходит Вот например с этой детекцией видишь То есть модель она с одной стороны нашла как бы здесь хорошее предсказание но при этом вот выделилось Так что здесь тоже что-то есть это что-то умножила это тоже получилась собака но при этом мы получаем как бы это вот в целом понял то что у нас э ну модель не вычленить случае когда прямо одно на другое наложило там ну типа совсем близко Да это такая ну типа смотри тут как бы выходы есть они относительно

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

больше будет гипотез на баун боксы больше будет всего-всего всего но при этом ты сделаешь эту сетку более детализированной шанс того что что-то сработает получше есть точно ли Нет не точно хорошо то То бишь грубо говоря мы здесь ээ у нас максимум 49 разных классов может получиться потому что 7 на се сетка и мы Ну да Но обычно на таком количестве детек дела гипе но не бо Всё всё я понял всё ссво так хорошо Ну мы разобрали соответственно один вот та одну аэ один вот такой вот объект Да который у

хорошо Ну мы разобрали соответственно один вот та одну аэ один вот такой вот объект Да который у нас уходит вот сюда вот в А в глубину таких будет 49 169 в зависимости от того на насколько у нас поделено в оригинале л 7х 7 дальше 1212 13 13 и всё прочее а получили Да теперь мы получили вот эти вот самые вероятности а и с этими вероятностями намм нужно собственно говоря что-то делать у нас получается 49 таких объектов соответственно для каждого вот такого прямоугольника у нас появляется Вектор

49 таких объектов соответственно для каждого вот такого прямоугольника у нас появляется Вектор то есть вот для а самого левого верхнего У нас есть пара векторов Почему пара потому что у нас там два баун бокса потенциально да то есть вот эти вектора вероятности для баун бокса один после перемножения и для второго соответственно только для одного вот такого левого верхнего угла у нас будет два бадин бок берём дальше второй а вторую ячейку ещё два вектора третью ячейку ещё два вектора

два бадин бок берём дальше второй а вторую ячейку ещё два вектора третью ячейку ещё два вектора соответственно всего у нас вот здесь в высоту получается 20 классов потому что э предо модель была на двадцати классов будет два класса будет Значит у нас высоту две строки в этой матрице и 98 боксов то есть на каждую ячейку д ба бокса 7 на 7 49 у 2 98 то есть 98 столбцов и 20 строк жю ячейку Ну потому что так в архитектуре модели вот мы здесь Это я рисовал вот оно более хороший результат чем другой

что так в архитектуре модели вот мы здесь Это я рисовал вот оно более хороший результат чем другой хош Так значит теперь нам нужно выяснить собственно где что-то вообще с детектировать или нет это делается с помощью процедуры Non maum supr 10 ля насколько я читал от этой процедуры отказались чем её заменили Я не знаю но пока там результаты типа не сильно Вт етем не менее Практически во всех используется поэтому разобраться как он работает стоит вот мы берём у нас значит первая строка это первая

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

меньше 0,3 этот порог тоже может варьироваться он в оригинале был по-моему 0,3 или 0299 не помню но что-то вот в этом в этом масштабе то есть мы говорим что здесь этот элемент у нас но этот элемент но этот элемент ноль дальше ноль и так далее Понятное дело что у нас останется у нас во-первых будет довольно много нулей потому что в процессе обучения Там модель должна понять что например вот здесь вот нету совершенно никакой собаки ни велосипеда ничего Ну типа если мы на деревьях обучаем то

вот нету совершенно никакой собаки ни велосипеда ничего Ну типа если мы на деревьях обучаем то дерево там будет Но в терминах там собаки велосипеда автомобили здесь нет ничего поэтому как бы в целом большинство вот из этих ячеек они в процессе обучения станут нулевыми потому что х ВС Что там ниже определенной вероятности будет равно нулю дальше мы оставшиеся значения сортируем то есть мы фактически берём и вот сюда вот влево ставим бадин боксы с самыми высокими значениями вероятности Ну и

берём и вот сюда вот влево ставим бадин боксы с самыми высокими значениями вероятности Ну и дальше по убыванию то есть где-то вот здесь вот в конце У нас есть какие-то бадин боксы которые просто равны нулю они нам на самом деле больше не интерес тепер мым фиксируем это 08 и вот сейчас будет происходить Ход конём который может показаться совершенно нелогичным Но на самом деле он действительно приводит к тем результатам которые нам нужны мы берём первый ба берм второй по как бы значению

приводит к тем результатам которые нам нужны мы берём первый ба берм второй по как бы значению вероятности и дальше изображены вот здесь вот да что у нас есть закти ная собака ей соответствует bounding Box 0,8 и есть тоже это это как бы всё у нас вектор для собаки и у нас здесь есть второй бадин бокс уверенность его 0,4 в том что здесь тоже есть собака мы считаем между этими двумя баун боксами I и если этот I больше 0,5 то мы бокс заем А если этот I меньше п то есть эти два бан бокса не очень

и если этот I больше 0,5 то мы бокс заем А если этот I меньше п то есть эти два бан бокса не очень сильно между собой пересекаются то мы этот бокс оставляем Вот это мысль в которую не сразу легко въехать Но что мы здесь фактически делаем мы фактически здесь говорим модели что если два банкса совпадают с каким-то оден хорошим высоким чени это значит То что эти два Бади бокса дублируют друг друга То есть если какой-то очень высокий мы можем например взять ради примера и вот здесь просто

друга То есть если какой-то очень высокий мы можем например взять ради примера и вот здесь просто нарисовать что вот у нас есть например вот такой Бабо он с красным пересекается очень сильно поэтому держать нам два бадин бокса которые говорят нам по об одном и том же нам нет никакого смысла при вра по уверенности модели он второй кандидат и если они пересекаются не очень сильно то нам есть смысл его оставить Почему А вдруг он за [музыка] детектировать Там две собаки на самом деле может одна

его оставить Почему А вдруг он за [музыка] детектировать Там две собаки на самом деле может одна собака сидит а вторая собака вот горизонтально Да если как бы получается что вот здесь мы например оставляем баун BX и очевидным образом мы здесь ошибаемся потому что на самом деле гораздо более успешный баун бок даёт нам больше информации и он собаку обводит лучше но при этом исходя из алгоритма который мы применяем мы говорим что и этот bounding Box Мы тоже будем оставлять потому что Судя по

который мы применяем мы говорим что и этот bounding Box Мы тоже будем оставлять потому что Судя по нашему алгоритму там тоже что-то есть вот эта логика понятна зачем мы это делаем кость Да эта логика понятна хочу чуть-чуть выше подняться на один слайд и там под разобраться то есть вот эта строга которую мы взяли ниже Она идёт уже горизонтально То есть это не баун Box это принадлежность к классу это разные вероятности которые классу принадлежат каждого баун бокса да для каждого баутин бокса и

это разные вероятности которые классу принадлежат каждого баун бокса да для каждого баутин бокса и вот не сложилось как мы начинаем рассматривать более большие баутин боксы не входящие в один этот из се на се квадратов а то есть за счёт того что есть вероятности принадлежности к каждому бадин боксу они вместе дают нам вот эти уже укрупнённые такие мостки на на Всё изображение Ну в каком-то смысле Да но при этом с помощью I I же оно не очень зависит от размера да то есть у тебя будет какой-то

Да но при этом с помощью I I же оно не очень зависит от размера да то есть у тебя будет какой-то бадин бо очень большой и при этом этот ба Bo Ну который условно говоря там эту собаку с огромным запасом за детектив но потом у тебя найдётся баун бо который маленький у них же I всё равно будет маленькая Почему Потому что их единение оно всё равно будет довольно маленьким вот поэтому мы маленький Бабо тоже оставим Угу видимо не срослось как поучаствовали координаты которые есть в каждой ячейке на

тоже оставим Угу видимо не срослось как поучаствовали координаты которые есть в каждой ячейке на вот дальнейшую картину координаты Какие вот эти вот координаты Да X1 y1 и ширина этих боксов то есть вот это вот это ширина и вот на этом Это и будет как бы участвовать в вычислении Лоса регрессионного угу вот в зависимости от того какие насколько хорошо мы вот эти вот координаты под гоним то есть вот эти координаты они изначально будут случайными эти координаты изначально будут случайными Но

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

будем же как бы разницу вероятности минимизировать поэтому за счёт того что здесь несколько параметров у нас один Бабо точно должен выиграть Ну мы ожидаем этого во всяком случае он окажется в сравнении вот здесь дальше как пот можетли оказа какой-то бадин бок который очень хорошо конкурирует с самым главным баун боксом но при этом мы его всё равно оставляем конечно может быть То есть даже в этом алгоритме может быть такое что мы один объект дважды детектива Ну так такое бывает да Угу хорошо И

алгоритме может быть такое что мы один объект дважды детектива Ну так такое бывает да Угу хорошо И второй вопрос А сколько мы здесь оставим всего бадин боксов у которых вероятно про это поговорим Ага Хорошо Саша да вот я сейчас не очень понимаю у нас генерируется 98 баун боксов на каждой ячейки А если у нас условно задача отследить все рисинг на фотографии Ну их же явно будет больше 98 Вот и будет ли эта задача решена как-то если у нас максимум 98 баун боксов Ну как-то будет решена А ну я

будет ли эта задача решена как-то если у нас максимум 98 баун боксов Ну как-то будет решена А ну я просто Ну вот сейчас не не улавливаю особо типа вот из девяносто восьми Мы же оставляем сколько-то А ну смотри Да из девяносто вось мы оставляем сколько-то Скорее всего будет решена эта задача плохо Ну тут понятно мы говорим сейчас как бы о воздухе потому что Что значит обучающая выборка на рисинка это смотря какое у тебя разрешение фотографии Вот ну вот у меня фотография Да и там вот условно в

это смотря какое у тебя разрешение фотографии Вот ну вот у меня фотография Да и там вот условно в каждой в каждом пикселе на чёрном фоне рисинка Ну нет такую задачу решать детектором не нужно Посчитай количество белых пикселей и вот тебе и будет если у тебя в каждом пикселе лисинка Посчитай количество белых пикселей ла здесь не нужна Ну просто я к тому что если у нас объектов больше сотни Ну больше 8 конкретно в этой реализации да Но дальше сделано так что у тебя количество объектов просто

больше 8 конкретно в этой реализации да Но дальше сделано так что у тебя количество объектов просто максимально возможное количество обетов круе по ходу развития этой модели оно возрастает это вот зависит от сетки там 7 на 7 13 на 13 да да А и и если у нас задача всплывёт что там очень много объектов то мы сами можем увеличить этот параметр сетки Ну я не видел чтобы этот параметр сетки увеличивали самостоятельно по крайней мере в публичном доступе Я думаю что это конечно где-то делается но вряд

самостоятельно по крайней мере в публичном доступе Я думаю что это конечно где-то делается но вряд ли это прям сильно выкладывается куда-то потому са но в целом Да мы можем э сетку увеличить сами это тоже при подпилить архитектура Но ничего страшного написано ВС поэтому нормально можно это сделать вот что-то сейчас в моменте задумался вот у нас вот этой получается ма мы смотрим самое большое число и смотрим типа класс этого самого большого числа и потом типа определяем типа что мы вообще ищем

и смотрим типа класс этого самого большого числа и потом типа определяем типа что мы вообще ищем вот этот вот Вектор он весь для собак вот в этом вот векторе 98 чисел для каждой ячейки два бандинг бокса с вероятностью того что там находится собака А как мы понимаем что это именно для собаки но мы как пришли к этому вектору мы его взяли вот отсюда как мы пришли к этой матрице мы взяли Вот эту вот ячейку получили здесь вероятности как мы определили что эти вероятности для собаки потому что мы их

ячейку получили здесь вероятности как мы определили что эти вероятности для собаки потому что мы их перемножили на соответствующий индекс шагом ранее угу вот у нас 20 вероятностей мы перемножают два вероятность потом перешли к следующей ячейке получили ещё одну такую штуку но здесь вот например там двух это как была собака так и осталась просто мы теперь говорим что вот у нас вот эти вот P2 это всё для собак у нас же индексы классов заданы Угу они просто по порядку остаются также понял Так

всё для собак у нас же индексы классов заданы Угу они просто по порядку остаются также понял Так значит тут получается что вот эти вот два бадин бокса мы оставляем Почему Потому что у них относительно высокая вероятность она за после вот этой процедуры обычной Но это условно фильтрация И теперь мы идм дальше мы собственно берём по-прежнему оставляем наш вот этот 0,8 мы сейчас работаем с этим баксом потому что он самый вероятный и теперь сравниваем его вот с этими 0,3 здесь мы видим что у нас

потому что он самый вероятный и теперь сравниваем его вот с этими 0,3 здесь мы видим что у нас высокая пере 0э мы ставим сюда Но почему Потому что эти бадин боксы по метрике дают нам самое большое большое пересечение значит они говорят нам об одном и том же объекте после того ну как бы тут можно было бы можно было бы предположить там следующий слайд Он немного неточный Поэтому я здесь остановлюсь можно было бы предположить к примеру что у нас вот здесь вот наме есть е зна 29 во когда бы мы

можно было бы предположить к примеру что у нас вот здесь вот наме есть е зна 29 во когда бы мы сравнили этот баун бок вот здесь вот со всеми какие-то из них занурили бы какие-то из них остались бы по I мы бы это выяснили после этого мы бы перешли ко второму по популярности баун боксу и начали бы его сравнивать с вот этими баун боксами то есть мы как бы Идём по от самого вероятного бадин бокса к самому наименее вероятно баун боксу попутно сравнивая их с оставшимися баун боксами и таким образом

самому наименее вероятно баун боксу попутно сравнивая их с оставшимися баун боксами и таким образом если у нас вот этот 0,8 какой-то баун бокс не зану например вот этот нуно он у нас тут зану ет да Ну например какой-нибудь вот этот вот не зану то это не факт что Второй по популярности его не зану соответственно с течением применения всего вот этого алгоритма вот в этом вот векторе этот Вектор соответствует классу собака просто для всех всех всех ячеек в этом векторе У нас будут очень много

соответствует классу собака просто для всех всех всех ячеек в этом векторе У нас будут очень много нулей потому что не один бадин залит на какой-нибудь шальной так другой ба сложность алгоритма выходит какая Ну я думаю что здесь что-то типа от числа входов наверное логарифм будет типа налогам на N Вот потому что мы всё-таки не полностью не квадратичные потому что мы не полностью Каждый с каждым сравниваем Потому что если мы уходим вот отсюда вот этот бадин уже с N - 1 будет сравниваться этот

сравниваем Потому что если мы уходим вот отсюда вот этот бадин уже с N - 1 будет сравниваться этот бадин N - 2 и так далее Может быть кми что-то но я честно говоря не знаю но кстати Я тут недавно с выпускником созванивался Он проходил собеседование и один сказали Ну пиши алгоритм прям с нуля просто вот н пожалуйста алгоритм но там была не джун позиция далеко Поэтому в принципе нум вино Паш правильно я понял то есть сначала у нас там есть порог который занулье а потом те значения которые

правильно я понял то есть сначала у нас там есть порог который занулье а потом те значения которые остались мы опять же пытаемся привести к нулю чтобы ну исключить вероятность того что наш Ну вот этот самый вероятный Бау бо неверно что-то определил можешь пожалуйста заново повторить я что-то смотри у нас там получается вот слайдом выше Э мы исходя из порога Вот ты говорил то что вот да меньше 0,3 или там 0299 мы это зану и всё выбрасываем дальше мы с этим не работаем Мы работаем только с

0,3 или там 0299 мы это зану и всё выбрасываем дальше мы с этим не работаем Мы работаем только с оставшимися значениями правильно А если допустим вот слайд ниже то что iou там допустим у них э получается Если он меньше 05 то мы оставляем правильно или наоборот если меньше 05 то оставляем Да а что вот с этими происходит то есть это Бади боксы у которых центры в разных точках в разных ячейках он же получается остаётся вот в разрезе этого класса то есть мы мы понимаем что там что-то ещё есть но

же получается остаётся вот в разрезе этого класса то есть мы мы понимаем что там что-то ещё есть но это именно относится к классу собак То есть если он там построит какой-то Бади бокс который хорошо Ну идентифицирует велосипед Но он также вот будет и какую-то часть собаки ВТО мы приходим ктому что вообще один остаётся то есть ещё дальше какие-то алгоритмы есть которые занулье Ну он как бы на наш задача конечно сделать так чтобы он оставался один но всегда ли это будет так нет потому что у нас

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

есть очевидно что вот даже вот в в этом примере мы посчитали что у нас есть два вот этих баун Box Несмотря на то что вот это всё там например зану да и в целом везде будут нули тут-то у нас всё равно остаётся баун бок но мы так как мы вот это сделали Сейчас только для класса собака дальше мы будем делать очень простую вещь вот после того как мы оставим а после того как мы сделаем эту процедуру для всех классов которые у нас есть то есть по каждой строке из той самой матрицы Мы пробежимся за

для всех классов которые у нас есть то есть по каждой строке из той самой матрицы Мы пробежимся за нулин Там и так далее То что у нас получится у нас получится что вот например мы берём как бы соответствующее соответствующий первому боксу оценки и делаем следующую процедуру мы берём индекс максимального элемента то есть говорим что вот у нас есть 0 нашли максимум это 0,8 понимаем что этот максимум больше нуля то есть не нулевая уверенность модели что здесь есть собака если эта вероятность

больше нуля то есть не нулевая уверенность модели что здесь есть собака если эта вероятность довольно высокая то мы забираем её индекс И после этого идём в наш словарик ИК to CL и достаём оттуда индекс класса но тут вопрос в том что типа вот эти 04 это же по-прежнему какая-то собака Правильно Потому что вся вот эта строка для собаки но при этом где-нибудь вот у этого вектора вот здесь вот может встретиться значение например 0,9 и это будет соответствовать какому-нибудь классу байк то есть мы же

значение например 0,9 и это будет соответствовать какому-нибудь классу байк то есть мы же отсюда будем забирать максимум из этого столбика максимальную вероятность которая содержит который соответствует этому бадин боксу Да окей здесь он сработал на псину 0,4 СГ учитывая наши правила удалить Это ба но при этом у этого ба может быть какая-то другая высокая вероятность по отношению к другому классу поэтому когда мы всю эту процедуру сделаем мы придём вот сюда и скажем Ага какой Какая здесь

классу поэтому когда мы всю эту процедуру сделаем мы придём вот сюда и скажем Ага какой Какая здесь максимальная вероятность 0,9 опять спросим себя 0,9 больше нуля Да больше ищем индекс 09 откуда отсюда дом этос словаря и понимаем что это у нас на этот раз байк и то есть мы мы его как бы не зану но и не используем потому что вот именно в этом столбце есть бо ну максимальное значение у этого Бау бокса Да понял Всё спасибо этот бадин бокс он не обязан содержать себе только один объект он обязан

бокса Да понял Всё спасибо этот бадин бокс он не обязан содержать себе только один объект он обязан дать нам некоторую уверенность того что в этом бадин боксе содержится какой-то объект он может быть в собаке уверен 10% там в велосипеде на 30% А в машине на 50% Вот и эти 50% нам интереснее чем собака на 10 и велосипед на 30 вот ну собственно всё то есть после того как мы всю вот эту штуку там может быть на самом деле разный То есть у меня здесь стоит что он там больше нуля но мы сегодня будем

быть на самом деле разный То есть у меня здесь стоит что он там больше нуля но мы сегодня будем устанавливать как бы этот порог Сами мы будем модели говорить рисуй мне вот ты на детектива что-то рисуй мне то что больше 0 там 8 например или рисуй мне то что больше 0,2 вот так что тут мы как бы будем некоторым образом фантазировать так Ну тут у меня те же те же те же самые комментарии собственно вот Лос лы как мы вчера поняли Лос не обязан состоять из одного выражения вроде или что-нибудь здесь

Лос лы как мы вчера поняли Лос не обязан состоять из одного выражения вроде или что-нибудь здесь лосо сразу несколько соответственно они масштабируется вот такими вот лямбда для некоторых для некоторых слагаемых но в целом картина здесь в общем-то примерно та же самая которая кото была это я просто скрином взл и стаи горя не сильно помню что там что там вот конкретно Вот например в этих вот штуках Но идея в том что пожалуйста квадратичный Лос на координаты центра баун бокса квадратичный Лос С

Но идея в том что пожалуйста квадратичный Лос на координаты центра баун бокса квадратичный Лос С извлечением корня Так обучалось стабильнее по заверениям авторов квадратичный Лос на высоту и ширину значит если мне память не изменяет это вот присутствие объектов в сетке Но я честно говоря не помню это надо статью открывать что там есть и неожиданным образом никакой кросс энтропии А по заверениям авторов квадратичный Лос на вероятностях тоже работал лучше чем Крос энтропия Вот Но я как бы

авторов квадратичный Лос на вероятностях тоже работал лучше чем Крос энтропия Вот Но я как бы предположительно это связано как раз-таки с тем что вся остальная функция потерь имеет регрессионный характер Вот соответственно динамика её изменений не такая как динамика изменений Крос энтропии Вот и соответственно Они использовали квадратичный Лос потом эту функцию потерь несколько раз ещ переделывали у кого-то обучалась лучше с одним у кого-то с другим вот таким компонентом Ну то есть в целом идея

у кого-то обучалась лучше с одним у кого-то с другим вот таким компонентом Ну то есть в целом идея такая что вновь мы делаем регрессию на координаты центра высоту и ширину и делаем какую-то Лос на классификацию в данном случае он неожиданным образом регрессионный тоже э но в общем э если так лучше обучается то Господи пожалуйста какая разница Так ну у меня собственно наверное по теории у нас всё давай кость Давай вернёмся на два слайда выше пожалуйста сейчас хочу финалочка по Каму вероятности

давай кость Давай вернёмся на два слайда выше пожалуйста сейчас хочу финалочка по Каму вероятности для каждого класса и выкинули лишнее В итоге сколько их может остаться больше двух боксов здесь одной строке класса в одной строке класса так Ну давай подумаем значит ЕС 104 тоже максимум Да мы его оставили да И мы тоже его оставляем Да может может может так А почему последняя строка неупорядоченная стоит ну мне лень это было рисовать Ты знаешь А всё всё всё Не всё вопросов Вопросов нет просто

стоит ну мне лень это было рисовать Ты знаешь А всё всё всё Не всё вопросов Вопросов нет просто думаю в этом какая-то есть логика и И вот я на вопросе Серёжи Отвлёкся вот концово когда у нас все 20 классов упорядочены мы оставили только правильные бандинг боксы Теперь мы в конце для каждого класса начинаем просто отрисовывать и выбирать или мы оставляем всё что всё что мы оставили после этой сортировки мы оставляем их все и все их Нарисуем вты имеешь виду вот после вот этой по векторам когда мы

мы оставляем их все и все их Нарисуем вты имеешь виду вот после вот этой по векторам когда мы вот по всем Ну да да не мы рисуем всё то то что зде вручную Мом параметры задать что там Если меньше 05 то не рисуй но номинально после этого алгоритма рисуется всё арим на самом деле работает гораздо лучше чем может показаться То есть сейчас кажется что у него прям Куда Куда Не взгляни какой-то ограничение или недочёт но практика показывает что он на самом деле довольно успешен его Единственная

или недочёт но практика показывает что он на самом деле довольно успешен его Единственная проблема - это вот собственно скорость вычислений потому Тари насколько я знаю кроме как там в де ли от него никто даже не думал отказываться То есть это в целом общее дело общее место Угу Понял спасибо Так ну собственно Да что хорошего ло привнесла привнесла качество 63 На вот этом датасете паль pas это Аля для задач детекции то есть в инете у нас просто мече вот ну там всякие какие-то бараны там ослы и

для задач детекции то есть в инете у нас просто мече вот ну там всякие какие-то бараны там ослы и прочие прочие предметы вот уже была приемлемая скорость но при этом это качество не дотягивает Вот но общее как бы направление развития лы оно скорее не в том что надо сделать качество 99% в том чтобы это быст рабо устройствах не всегда это компьютер тем более не всегда видеокарта вот поэтому у них Какое отдельное направление - это ускорение собственно кому будет интересно почитать вот здесь есть

Какое отдельное направление - это ускорение собственно кому будет интересно почитать вот здесь есть цикл статей до пятой лы Пятая йл мы сегодня будем использовать Она фактически вот четвёртая и пятая на данный момент являются Самыми популярными вот Вас никогда не должно пугать что типа там я не знаю Вы проснулись Попили кофе и вышла одиннадцатая ла Скоро это действительно будет шутка потому что когда у вас очень много людей этим занимаются то они естественно штампуют эти модели довольно

что когда у вас очень много людей этим занимаются то они естественно штампуют эти модели довольно регулярно Вот но как бы в целом есть очень много ограничении при переходе с одной модели на другую в плане продакшена вот поэтому то что там какая-то где-то используется четвёртая ёла или Пятая ёла и Казалось бы о боже Она вышла 3 года назад Это уже там типа хлам исторический Нет это так не работает Если какая-то модель вышла её в проде начнут применять года через полтора после огромного количества

какая-то модель вышла её в проде начнут применять года через полтора после огромного количества тестов и Просто так это по щелчку не делается что типа классно там Метрика на полпроцента выше Давайте весь техпроцесс переделаем Ну конечно Вот но в целом как бы логику развития Я рекомендую вот по этим статьям там даже просто такие как бы интересные моментики тоже присутствует вот Ну что давайте тогда перерыв сделаем и наверное я при ссылку на нову [музыка] тран 42 Тогда встречаемся по новой ссылке

Всем привет давайте к новой неделе у нас на этой неделе более сложные задачи работы с изображениями Ну тем кто у кого всё успешно получится попробует поработать немножечко и с видео у нас будет три лекции Сегодня мы посмотрим на локализацию объектов завтра мы разберём задачу детекции объектов и послезавтра мы косм задачи и детекции Но немного другим способом и задачи сегментации Четверг и пятница Как водится будет проект командный вот в целом мы будем на этой неделе сегодня работать с пайтор

Как водится будет проект командный вот в целом мы будем на этой неделе сегодня работать с пайтор завтра мы будем и послезавтра работать с такими довольно высокоуровневым библиотеками они тоже внутри у себя используют pch но при этом они являются такой довольно мощной надстройкой для решения как раз-таки задач конкретно компьютер вина сегодня лекция будет простая завтра лекция будет посложнее в среду тоже будет относительно сложная лекция но завтра будет кода мало потому что будем пользоваться

тоже будет относительно сложная лекция но завтра будет кода мало потому что будем пользоваться очень дружественной такой библиотекой послезавтра кода будет побольше намного более запутанного и всё такое вот но сегодня у нас чистый парч Поэтому бояться особенно нечего вот чит мы на прошлой Неде решали зада но задача классификации как я говорил это Задача В общем в таком Нейро сетевом моделировании фактически ренна То есть никто сейчас не разрабатывает никакие модели в которых там решается задача

фактически ренна То есть никто сейчас не разрабатывает никакие модели в которых там решается задача классификации картинок вот если такие модели выходят они как правило просто являются Ну как бы таким как сказать берут какую-нибудь архитектуру которая до этого не была применена вообще в виже и просто адаптирует её к новой задаче Но на самом деле в целом задача считается уже решённый и следующая логично возникающая Задача в обработке изображений - это собственно хорошо мы умеем классифицировать

возникающая Задача в обработке изображений - это собственно хорошо мы умеем классифицировать картинки то есть мы можем сказать что если нам на вход пришёл какой-то объект мы можем как бы отнести его к определённому классу А что если нам необходимо не просто классифицировать А ещё и понять где расположен этот объект на изображении то есть изображение может быть большим нам бы хотелось чтобы мы ещ могли понимать участок входящего объекта на котором интересующая нас какая-то сущность расположена

могли понимать участок входящего объекта на котором интересующая нас какая-то сущность расположена Вот и сегодня мы посмотрим как это можно делать Какие Какую модель можно для этого придумать и какие лосы собственно использовать Ну у нас сегодня по большому счёту не с точки зрения лосо там не с точки зрения архитектуры Ничего нового не будет вот Единственное мы немножечко погрузимся в профильную в профильную метрику для решения и для оценки моделей подобных значит в классификации всё просто Да

в профильную метрику для решения и для оценки моделей подобных значит в классификации всё просто Да у нас есть набор классных моделей ты там коне и всё остальное что мы хотим сделать Мы просто хотим классифицировать входящую картинку мы можем без проблем совершенно взять предо обученную модель или обучить какую-нибудь модель заново или написать свою модель если нас там по каким-то причинам и в общем-то ВС замечательно То есть тут ответ на вопрос как эту задачу решить он фактически уже известен

ВС замечательно То есть тут ответ на вопрос как эту задачу решить он фактически уже известен заранее чуть-чуть сложнее становится если мы хотим нарисовать то что называется в этих задачах такой бадин боксом или ограничивающей рамкой я буду чаще всего говорить просто потому что это короче всего выговаривать ограничиваю ра всего будет лень поэтому Если я говорю бокс Я говорю о том что изображено у меня вот здесь вот на картинке справа это означает что я хочу не просто классифицировать то что у

у меня вот здесь вот на картинке справа это означает что я хочу не просто классифицировать то что у меня расположено на картинке но ещё хочу и нарисовать бокс то есть ограничивающую рамку которая будет э содержать в себе объект То есть мне нужно научить модель не просто отвечать мне что на картинке код А ещё каким-то образом спрогнозировать координаты по которым я смогу нарисовать бокс и быть уверенным в том что именно в этом боксе у меня расположен искомый объект тут в общем можно очень

уверенным в том что именно в этом боксе у меня расположен искомый объект тут в общем можно очень по-разному подходить но теперь мы понимаем что у нас для наших данных помимо того что у нас есть лейл в самой картинке что на этой картинке расположен код у нас появляется е в общем случае изменения в зависимости от зада кото решаем мы будем просто брать И на самом деле предсказывать вот эти вот координаты и будем стараться минимизировать разницу между истинными координатами эти координаты истины

и будем стараться минимизировать разницу между истинными координатами эти координаты истины будут даны нам в как бы по факту того что мы хотим решить эту задачу завтра мы будем самостоятельно размет [музыка] данных Сегодня у нас будет задача попроще У меня есть готовая функция которая будет возвращать нам просто истинные координаты объектов которые мы будем детектировать Вот Но в общем случае мы будем либо искать датасеты которые содержат себе уже нужную для нас разметку либо разме

случае мы будем либо искать датасеты которые содержат себе уже нужную для нас разметку либо разме самостоятельно соответственно теперь так как наша модель Ну в наших данных уже появляется как бы так скажем д и то есть 1 - это какой лас а второй такой условный Y - это какой-то набор координат мы понимаем что наша модель теперь должна быть сложнее чем та которая была на прошлой неделе потому что на прошлой неделе у нас был единственный выход этот выход у нас отвечал Ну преимущественно за

что на прошлой неделе у нас был единственный выход этот выход у нас отвечал Ну преимущественно за классификацию да В понедельник это была регрессия Но идея такая что для каждого входного объекта мы прогнозировали какую-то одну величину вероятность принадлежности классу сколько там квартира стоит неважном будет э делать чуть-чуть сложнее у нас будет какая-то сеть которая будет обрабатывать входящую картинку в общем случае для неё можно использовать совершенно любую свёрточные ренет всё что

картинку в общем случае для неё можно использовать совершенно любую свёрточные ренет всё что захотите но выход этой сети теперь будет приходить у нас не только в тот слой который отвечает классификационной задаче нашего формата он будет приходить в две маленькие сети первая сеть которую мы будем обучать на классификацию то есть Это буквально будет обычный полносвязный слой с количеством выходов равным количеством количеству классов и второй выход этой свто сети будет отправляться у нас в

равным количеством количеству классов и второй выход этой свто сети будет отправляться у нас в полносвязный блок который будет прогнозировать нам координаты нашей ограничивающей рамки то есть сеть у нас ну Те кто помнит немного архитектуру инсп в инсп было два выхода это делали из соображений борьб с Заха градиентами в нашем случае мы это будем делать из соображения того что теперь нам для одной картинки нужно предсказывать не только класс А ещё и ещё и координаты бадин боксов Значит тут

одной картинки нужно предсказывать не только класс А ещё и ещё и координаты бадин боксов Значит тут становится ясно что наша выборка теперь должна быть более сложной То есть это звучит довольно просто Что окей у нас была картинка её класс да но эта картинка лежала где-то просто в определённой папке А теперь звучит просто у нас есть картинка У нас есть её класс Е Като координа и тут оказывается что мы уже не можем пользоваться обычным например ифом который вы использовали на прошлой неделе

что мы уже не можем пользоваться обычным например ифом который вы использовали на прошлой неделе потому что иф - это класс который позволяет нам просто понять он смотрит Ага выборка раз класс Д класс какие-то картинки которые он отсюда достаёт тоже самое с Валида частью и всё теперь нам откуда нужно доставать координа и обычно эти координа могут быть задам фа сегодня нам в целом можно об этом не думать Хотя я немножечко прогусь по функции которая будет эти координаты нам возвращать но теперь у

думать Хотя я немножечко прогусь по функции которая будет эти координаты нам возвращать но теперь у нас может быть вариант в котором У нас есть Папочка с обучением в ней есть папка с классом И помимо чтения самой картинки мы должны будем ещё вручную открывать какой-то файл который соответствует этой картинке и содержит в себе информацию о бадин боксах это может быть TT файл как у нас будет завтра это может быть xml файл Как у вас будет на проекте это может быть J файл как у нас будет в среду Но

это может быть xml файл Как у вас будет на проекте это может быть J файл как у нас будет в среду Но идея состоит в том что на самом деле формат именно как бы самих вот этих вот координат если мы пишем самописный модель он нам не важен потому что нам самое главное точно понимать что вот картинке вот этой соответствует какой-то файл содержащий координаты они там могут быть записаны в любом формате нам без разницы будет текстовый файл откроем текстовый файл будет откроем как бы это не проблема вот

без разницы будет текстовый файл откроем текстовый файл будет откроем как бы это не проблема вот и это очень важная штука вот сегодня у нас как бы всё будет так скажем дано Уже просто по факту разработанной заранее функции но когда там на проекте вам придётся написать свой класс датасета он там уже на самом деле в примере вам дан но разобраться придётся какого-то строгого формата зану с локализацией детекции или там с чем-нибудь е строгого формата вообще говоря не существует то есть есть

детекции или там с чем-нибудь е строгого формата вообще говоря не существует то есть есть некоторый набор библиотек которые используются для решения подобных задач и у этих библиотек свои стандарты То есть у нас может быть например какая-нибудь довольно сложная структура Вот мы там с такой структурой будем работать например в среду это будет такой большой достаточно J фа в НМ будет много служебной информации короче всякого всякого всякого но этот Jon файл будет обрабатываться готовой

служебной информации короче всякого всякого всякого но этот Jon файл будет обрабатываться готовой библиотекой То есть это стандарт который использует конкретно Эта библиотека завтра у нас будет достаточно простой Файлик в котором у нас будет просто написано что вот где-то есть класс объект класса о И вот пожалуйста четыре координаты которые соответствуют баун боксу в итоге как бы как всегда будет важно просто вникнуть в то как хранятся данные А дальше мы будем писать датасет свой класс датасета

важно просто вникнуть в то как хранятся данные А дальше мы будем писать датасет свой класс датасета который будет нам просто помимо картинок и классов возвращать ещё какую-то информацию А ну да вот здесь ещё есть пример этот пример уже ближе к тому что у вас будет на проекте Вот то есть вам для каждой картинке нужно будет открывать вот у вас будет xml файл который соответствует картинке здесь будет там какая-то ширина высота этой картинки количество каналов дальше там будет какая-то информация

там какая-то ширина высота этой картинки количество каналов дальше там будет какая-то информация вот мы будем видеть что здесь есть такой раздел вложен структура B пожалуйста координата д координата координаты координа эти файлы нужно будет сопоставлять просто с конкретными картинками вот в целом как бы JT неважно главное чтобы мы могли открыть это открыть это представление и увидеть каким способом оттуда э 10 и всё такое где всё автоматически разме и всё вообще классно но не всегда это таким

оттуда э 10 и всё такое где всё автоматически разме и всё вообще классно но не всегда это таким простым образом происходит да Люба вот то что сейчас на слайде Вот это формат мля Вот xml кто не знает Это такой язык разметки от которого очень много всего наследуется и html от xml появился короче это формат хранения структурированных данных вот просто нюанс в том что структура может быть фактически произвольной для задачи Ну типа в экле там хранятся экселевский в мле могут храниться там данные

произвольной для задачи Ну типа в экле там хранятся экселевский в мле могут храниться там данные передаваемые между там какими-то сервисами в интернете и так далее Вот то есть формат данных структурированный просто структуру может быть очень сложно вот а ну это касаемо собственно самих данных Давайте по этой части вопроса Хорошо тогда идм дальше Значит нам у нас следующая проблема возникает когда мы решаем задачу классификации у нас всё круто у нас всё круто потому что у нас есть F1 Я не знаю

мы решаем задачу классификации у нас всё круто у нас всё круто потому что у нас есть F1 Я не знаю коэффициент корреляции Юса Роу всё что хотим всё к нашим услугам метрик очень много зада сопоставления каких-то пространственных объектов а иначе говоря наличие бан боксов это и есть пространственная задача всё становится сложнее при этом Мы помним что В текущей постановке у нас всё равно задача классификации сохраняется А это значит То что для конкретно этой задачи классификации у нас может быть

сохраняется А это значит То что для конкретно этой задачи классификации у нас может быть любая Метрика которая известна вам с первой фазы В общем любая классификационная Метрика в случае если мы решаем задачу там [музыка] какие-то бадин боксы и нам бы эти баун боксы хотелось каким-то образом оценивать э для каждого объекта в нашей обучающей выборки У нас есть настоящий баун бок То есть это какие-то координаты а которые у нас могут выглядеть примерно вот так X1 y1 Да X2 y2 То есть это просто

координаты а которые у нас могут выглядеть примерно вот так X1 y1 Да X2 y2 То есть это просто точки через эти две точки мы зная что это левый верхний и правый нижний угол э нашего баун бокса мы имеем возможность построить прямоугольник у этого прямоугольника соответственно есть четыре координаты которые мы хотим предсказать Ясное дело что в процессе обучения модель не сразу начнёт нам предсказывать настоящие хорошие координаты потому что у него какое-то время уйдёт во-первых на позиционирование

настоящие хорошие координаты потому что у него какое-то время уйдёт во-первых на позиционирование этих точек Да она будет ошибаться довольно сильно с размером Ну просто потому что она находится в процессе обучения это нормально Она стартует со случайных значений с чего бы ей вдруг прямо сразу давать нам хорошие координа вни мы будем видеть Ну вы будете видеть Если Напишите функцию которая будет рисовать эти бадин боксы мы будем видеть что у нас в определённых объектах как-то модель хорошо

рисовать эти бадин боксы мы будем видеть что у нас в определённых объектах как-то модель хорошо отрабатывает или в начале обучения может быть плохо а потом всё лучше лучше и лучше но при этом нам бы хотелось понять а что Ну мы интуитивно понимаем что вот у нас есть например два случая позиционирования bounding Box первый и второй и интуитивно мы понимаем что вот этот вот случай гораздо хуже чем вот этот вот случай потому что у нас в голове есть концептуальное понимание такое что Ну вот здесь

вот этот вот случай потому что у нас в голове есть концептуальное понимание такое что Ну вот здесь вот соответствует красный предсказанный прямоугольник лучше зелёному чем вот здесь вот здесь они как-то не очень хорошо относительно друг друга расположены Это очень хорошо с точки зрения нашей интуиции но совершенно непонятно как это объединить так чтобы сказать об этом модели но нам нужна какая-то иначе говоря числовая оценка потому что мы же не будем распечатывать все картинки из нашего

иначе говоря числовая оценка потому что мы же не будем распечатывать все картинки из нашего датасета и оперировать какими-то категориями Ну вот тут вот хорошо вот здесь не очень хорошо потому что нам нужна какая-то грань где уже хорошо и нормально А где ещё плохо и надо учить для этого используется Метрика которая называется I или Inter Over Union или более общая её формулировка для как бы таких задач множества это ну Sity или просто Метрика кото строится из двух компонентов соответственно в

задач множества это ну Sity или просто Метрика кото строится из двух компонентов соответственно в числителе у нас будет расположена такая ну как бы мера в которой два наших прямоугольника пересекаются то есть то насколько они друг на друга наложены и в знаменателе будет расположена мера объединения двух этих прямоугольников То есть получается очень простая логика если у Нава прямоугольника очень мало перека объединение очень-очень большое это значит что мы какую-то малую величину будем делить

мало перека объединение очень-очень большое это значит что мы какую-то малую величину будем делить на какую-то достаточно большую величину в таком случае Метрика Inter Over Union будет низкой Почему Потому что мы маленькое число будем делить на большое число соответственно это маленькое число ещё больше уменьшится если у нас возникает ситуация как например вот здесь мы видим что пересечение как бы двух бадин боксов истинного и предсказанного оно практически совпадает с объединением вот за

как бы двух бадин боксов истинного и предсказанного оно практически совпадает с объединением вот за исключением какой-то маленькой маленькой области вот здесь вот то мы будем относительно большое число делить на примерно такое же число чуть побольше А это означает что мы не слишком сильно Уменьши наша наш числитель и это означает что Метрика intersection Over Union чем она выше тем лучше соответственно чем она ниже тем хуже если она низкая это что два бан бокса мало пересекаются но делим мы это

чем она ниже тем хуже если она низкая это что два бан бокса мало пересекаются но делим мы это пересечение на большое объединение Сегодня мы посмотрим метрику intersection Over Union как бы просто вот В текущей постановке завтра мы посмотрим как эта Метрика будет влиять на другую метрику частью которой является intersection Over Union в более сложной формулировке Вот и Да сегодня мы будем использовать библиотеку torch Matrix потому что лень самостоятельно считать intersection over Ну в смысле

библиотеку torch Matrix потому что лень самостоятельно считать intersection over Ну в смысле это на самом деле не очень сложно но просто использовать библиотеку профильную для метрик - это тоже довольно важная затея которая нам упростит жизнь неоднократно по вот этой метрике есть вопрос хорошо Да она в каких в каком диапазоне она всё-таки варьируется о Насть В каком диапазоне она изменяется Не ну мне хочется конечно сказать от нуля до единички но есть небольшая неуверенность а но Давайте

Не ну мне хочется конечно сказать от нуля до единички но есть небольшая неуверенность а но Давайте подумаем самый лучший вариант вот этой метрики он какой будет то есть идеальный вообще вариант едини совпали полностью когда полностью совпали Если два прямоугольника полностью совпали что у них будет равно у них площадь пересечения будет полностью равна площади объединения полу э прямоугольников понятное дело Но мы получим две величины которые Один в один совпадают мы одно число разделим на

понятное дело Но мы получим две величины которые Один в один совпадают мы одно число разделим на абсолютно такое же число значит в случае полного совпадения мы получим единичку от дой хорошо просто возник микро сомнения потому что они возникло микро сомнения на самом деле важно понять потому что интуиция она во всех Метрика примерно такая же вот ноль у вас вот смотрите фактически в любой метрике которая измеряется от нуля до единицы Да если в этих Метрика присутствует дробь то скорее всего ноль

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

вот это можно даже не считать тоже самое мы можем например в вспомнить из э Да что у нас в эе в числителе и не правильно смыв ни разу не угадали негативные объекты вот это вот становится нум абсолютно неважно что у нас будет вот здесь вот в знаменателя поэтому это такая общая интуиция метрик её стоит тоже иногда задавать себе вопрос типа почему вот так вот происходит Почему ноль самый плохой а единичка самая хорошая Это не совсем так работает в Роке например но там более сложная ситуация это

единичка самая хорошая Это не совсем так работает в Роке например но там более сложная ситуация это фактически така взаимодействие двух других метрик зависящих ещ ко всему прочему от порога поэтому там посложнее Саша а вот трешхолд этой метрики вот мы сами как-то определяем Ну сегодня мы не будем про это говорить Сегодня мы про трешхолд завтра будем говорить Он сегодня пока нам ни к чему всё хорошо Да завтра про ТЛ поговорим Сергей Ну получается эту метрику можем применить только если у на есть

Да завтра про ТЛ поговорим Сергей Ну получается эту метрику можем применить только если у на есть разметка изначально то есть вот эти два прямоугольника это вот истинный наш получается прямоугольник куда попадает изображение полностью а второй который у нас посчитала наша модель да А если разметки нет то нам нужно каким-то образом разметить сначала а потом эту метрику применять да Угу понял Ну нам это нужно даже разметить не Перед тем как мы метрику будем применять а перед тем как мы модель

нам это нужно даже разметить не Перед тем как мы метрику будем применять а перед тем как мы модель начнём обучать вот иначе у если у нас нет разметки у нас нет таргета который будет учиться учить координаты вот а то я подумал что эти два прямоугольника вот как на предыдущей картинке там вариант о вариант 2 и от этого смотрится ВС я пере не у нас как бы Зелёная она в любом случае должна быть Ну Зелёная в терминах того что это наши данные без них мы не сможем прийти к модели которая будет решать

в терминах того что это наши данные без них мы не сможем прийти к модели которая будет решать такую задачу Окей значит можно использовать Любую функцию потерь регрессионную Тут нужно экспериментировать в каких-то случаях лучше работает в каких-то случаях лучше сработает Вот но здесь идея как бы состоит в том что на самом деле наши координаты да то есть мы можем вот представить что у нас например есть две пары координат как бы это у нас получается пря вот если это написать то это будет Да X2 y2

есть две пары координат как бы это у нас получается пря вот если это написать то это будет Да X2 y2 и это там например для первой картинки вот это вот тоже самое будет там для какой-то второй картин и идея в том что Вот наши предсказанные данные они по формату будут абсолютно такие же Ну то есть мы фактически просто будем вот вот это это предсказанный бан бо то есть там X1 y1 только с крышечкой Да X2 y2 тоже просто с крышечкой для первого то есть мы как бы будем считать отклонение вот этих вот

X2 y2 тоже просто с крышечкой для первого то есть мы как бы будем считать отклонение вот этих вот предсказанных данных от нашего от нашего таргета и в целом это можно делать абсолютно даже и не Пользуясь там какими-то супер сложными функциями потерь потому что Что мы будем делать У нас есть какой-то там настоящий бокс Да мы можем Вычесть из этого настоящего бокса какие-то предсказанные координаты всё это возвести в квадрат суммировать и разделить на два Почему на два потому что у нас две

всё это возвести в квадрат суммировать и разделить на два Почему на два потому что у нас две картинки мы для двух картинок предсказали то есть мы это то что мы делали постоянно когда считали какой-нибудь там EAC на прошлой неделе когда мы брали argmax сравнивали попали не попали сумм разделить на число объектов вот здесь будет всё в общем-то тоже самое то есть это это очень просто буквально одной строкой можно сделать в коде можно использовать конечно без проблем можно использовать там какую-то

строкой можно сделать в коде можно использовать конечно без проблем можно использовать там какую-то функцию функцию потерь готовую Но даже просто посчитать это обычным выражением bych тоже проблемы не составит тут возникает вопрос что нам делать если у нас два Лоса И на самом деле это прекрасная совершенно особенность не особенность точнее а в целом такая штука свойственная для вообще глубокого обучения в том что если у вас модель решает сразу несколько задач лосы в которых отличаются а

обучения в том что если у вас модель решает сразу несколько задач лосы в которых отличаются а Понятное дело что фактически всегда функция поте определяет задачу которую мы решаем мы можем попробовать решить зада фикации с помощью средней квадратической ошибки и более того она даже будет решаться но проблема в том что это не совсем как бы приведёт В итоге к таким хорошим результатам как если бы мы использовали Гросс энтропию поэтому несколько задач несколько функций потерь что нам делать с этими

использовали Гросс энтропию поэтому несколько задач несколько функций потерь что нам делать с этими функциями потерь ничего посчитать сначала одну функцию потерь потом вторую потом посчитать их сумму и сделать то что мы делаем постоянно L Back оп омай вот а не несколько функций потерь Для задачи глубокого обучения - Это совершенно обычная штука э как бы в процессе развития модели становились всё сложнее и сложнее хочется минимизировать хочется делать модели многофункциональными то есть хочется

сложнее и сложнее хочется минимизировать хочется делать модели многофункциональными то есть хочется чтобы она и вот тут хорошо работала и вот эту задачу Решала ещё там я не знаю какую-нибудь регуляризации использовала поэтому объединение лоссов - это супер обычный шаг который нужно абсолютно нормально относиться если мы можем посчитать частную производную от одной функции потерь ничего нам не мешает посчитать частную производную от двух функций потерь А так как вот здесь вот операция сложения

посчитать частную производную от двух функций потерь А так как вот здесь вот операция сложения она абсолютно Ну Она фактически Линейная да то есть ничего нам здесь ничего не усложняет то есть сумма двух функций потерь как бы сумма двух функций Как посчитать производную посчитать производ каждой функции ло одинаковых размерной сы давали больше это такой момент который наверно В сегодняшней задаче неважный но в целом его можно встретить действительно если у нас кронт энтропия она вообще не

неважный но в целом его можно встретить действительно если у нас кронт энтропия она вообще не особенно часто бывает какой-то большой Да потому что ну там о классификационный Лос Ну я условно напишу он там где-нибудь полтора и есть какой-нибудь регрессионный Лос который измеряется например там в десятках да Ну пусть он там будет например там 15 то нам есть смысл вот это вот разделить на 10 Почему просто для того чтобы соблюдать некоторый масштаб двух лоссов делается это исключительно из

Почему просто для того чтобы соблюдать некоторый масштаб двух лоссов делается это исключительно из зачисленных как бы тах соображений есть удобнее когда данные ВНО мас что у здесь Было 05 а здесь Было 175 вот поэтому иногда это действительно делается Как понять что вам нужно это делать понять это очень просто Вы начинаете обучать и видите что у вас один Лос очень сильно доминирует над вторым по значению Поэтому если у вас такая ситуация складывается вы приходите в тот Лос который у вас больше и

Поэтому если у вас такая ситуация складывается вы приходите в тот Лос который у вас больше и просто говорите окей Тогда вот этот вот Лос Я например разделю на 100 и всё Никаких совершенно проблем Это не не доставит Есть ещё такие более автоматические способы балансировки Лоса что типа мы можем например Лос классификации Да ло классификация мы можем умножать сейчас я вспомню Ну типа что-то на едини де на метрику память не изменяет и получается Лос регрессии тоже будем умножать на единицу

на едини де на метрику память не изменяет и получается Лос регрессии тоже будем умножать на единицу делённую на метрику или наоборот или просто на метрику если Метрика Очень низкая Ну короче говоря это на самом деле сейчас не особенно используется но есть автоматические способы масштабирования не помню может у меня сегодня в коде это будет потому что я я его честно говоря переделывал довольно а да давайте в коде Это посмотрим У меня есть это в коде правильный вариант чтобы я не запутал но в

а да давайте в коде Это посмотрим У меня есть это в коде правильный вариант чтобы я не запутал но в целом Да ответ на вопрос Если лосы в разных масштабах Можно ли с ними что-то делать чтобы они были более-менее одинаковыми по масштабу Да можно так так иногда делают параметры того Типа насколько умножить чтобы было всё окей как правило как правило подбираются просто эмпирически нету какого-то ответа что вот если у вас один Лос больше другого в 7 с по раз Значит вам нужно кайто фиксированный

ответа что вот если у вас один Лос больше другого в 7 с по раз Значит вам нужно кайто фиксированный коэфициент Вот хорошо тогда давайте давайте дальше Ну кому интересно в формуле это могло бы выглядеть примерно вот так объединённый Лос И на самом деле мы можем видеть что здесь Совершенно ничего сложного нет здесь много индексов потому что у нас много как бы предсказываем величин но пожалуйста квадраты разни между исами настоями Иза настоящими предсказан тоже самое для игре ВС это в квадрате да

разни между исами настоями Иза настоящими предсказан тоже самое для игре ВС это в квадрате да Вот масштаби то есть делим на объём выборки и вот это у нас это обычная Крос энтропия то есть Лос может выглядеть очень-очень-очень стрёмно в плане именно в какой-нибудь статье но представлять из себя просто три строки обычных Вт тепер [музыка] увеличилось количество лоссов Да увеличилось количество метрик теперь у нас не просто какая-то точность естественным образом возрастает количество переменных

теперь у нас не просто какая-то точность естественным образом возрастает количество переменных которые нам нужно логировать в плане того что раньше мы такие Los Да всё четыре уже многовато но как-то справлялись теперь нам нужно будет логировать большее число значений нам хорошо бы Смотреть насколько хорошо решается задача классификации и регрессии нам хороо динамику суммарного лосса чтобы понимать что суммарный Лос тоже падает мы будем отдельно смотреть метрику классификации и будем отдельно

что суммарный Лос тоже падает мы будем отдельно смотреть метрику классификации и будем отдельно смотреть метрику I а именно метрику позиционирования нашего баун бокса то есть теперь мы уже как бы двумя графиками не отделам где у нас с одной стороны классификационный Лос с другой стороны классификационная Метрика на обучения и валидации вот Но это всё естественно как бы дело такое дело техники Да было четыре списка Ну что теперь будет 10 списков что не мы же их храним Да комплюктер пусть Всё это

четыре списка Ну что теперь будет 10 списков что не мы же их храним Да комплюктер пусть Всё это делает вот а все понимают Да откуда взялось сразу гораздо большее количество вот этих исторических данных Хорошо если позволишь Можно я скажу правильно так как мы решаем задачу классификации лоз классификации регрессия - это для анализа точности постановки рамки суммарный Лос - это их сумма Ну и метрики классификации ипра Спасибо всё так вот ну собственно примерно такая сегодня будет у нас

и метрики классификации ипра Спасибо всё так вот ну собственно примерно такая сегодня будет у нас архитектура у нас будет dater в этом даре У нас будут какие-то данные он может быть там немного изменён может быть как-то е не знаю возвращать нам не просто там картинку ти и координаты мы можем иногда добавлять туда например имя файла для того чтобы мы могли например этот файл прочесть с дис распечатать Но самое главное что он будет возвращать нам как минимум три объекта это сам объект на котором

Но самое главное что он будет возвращать нам как минимум три объекта это сам объект на котором Ну собственно картинка это координаты бан боксов и это класс то есть настоящий лейл этой картинки дальше Вот здесь могут быть как бы некоторые сказать у меня зде Гра например resnet 50 А в демо коде у меня там просто маленькая свёрточная сеть Ну мы сегодня будем работать с изменённой версией дас Mist поэтому Ну кажется что на mnist уж resnet 50 натравлю прямо совсем грустная затея вот он довольно

поэтому Ну кажется что на mnist уж resnet 50 натравлю прямо совсем грустная затея вот он довольно быстро с этим разберётся и более того немного замедлит обучение Это не совсем в наших интересах и мы будем просто говорить что вот здесь есть какая-то классификационная сеть хотите Используйте resnet 50 я не против мне собственно ну Мне нужно чтобы там просто была какая-то сеть которая умеет доставать признаки есть ли у этой сети название в виде и или это ваша самописная сеть для меня не очень

признаки есть ли у этой сети название в виде и или это ваша самописная сеть для меня не очень важно далее выходы из этой сети у нас будут отправляться в два блока Ну и здесь я уже могу сказать что не у нас будут отправляться А у вас потому что э модель собственно Вам нужно будет сегодня написать вот один бло и отдавать всё всё что нужно в Крос энтропию второй Лос будет у нас забирать координаты баун боксов из предсказано сети которую условно мы называем там регрессоров [музыка] в это средняя

баун боксов из предсказано сети которую условно мы называем там регрессоров [музыка] в это средняя абсолютная ошибка Вот можете почитать про ра будет интересно какие у кого мысли будут про этот лобера Но дальше просто эти лосы будем складывать То есть фактически Наша сеть будет состоять из трх компонент общий блок который будет анализировать изображение выходы этого общего блока будут отправ в блок классификации и в бло регрессии есть компонент и третий компонент Лос Лос суммарный Лос будем

блок классификации и в бло регрессии есть компонент и третий компонент Лос Лос суммарный Лос будем считать для баксов будем считать для наших классов Да смотри мы берём какую-то модель Ну любую произвольную либо самосюк но не очень понимаю сколько нужно выходов на последнем слое но интуитивно два один на и или пять не знаю меня честно говоря ни число оди ни число п не укладывается в логике ошибки даже ты ты про вот это вот говориш да про этот выход но Смотри Вот у этого ренета в идеале Да что у

даже ты ты про вот это вот говориш да про этот выход но Смотри Вот у этого ренета в идеале Да что у него есть у него есть какая-то последовательность слов дальше у него полносвязный слой на 1 классов выходами нам не нужен типа он ни к чему нам потому что там уже Лагин просто говорит К какому классу относится объект нам он не нужен поэтому мы вот этот последний слой убираем оттуда присобачить прийти Вот сюда на вход и вот сюда на вход соответственно какое оно будет Ну наверно делать его слишком

Вот сюда на вход и вот сюда на вход соответственно какое оно будет Ну наверно делать его слишком маленьким смысла нет Потому он будет таким промежуточным перед двумя другими блоками если мы сразу сделаем так что слишком сильно сум это пространство то сети будет довольно сложно обучиться Поэтому в целом мы можем сделать Как мы можем вот этот обученный слой на 1000 классов отрубить и например сюда сказать то что Ну пусть у нас Ну например будет 512 выходов тогда соответственно 512 будет на вход

сказать то что Ну пусть у нас Ну например будет 512 выходов тогда соответственно 512 будет на вход сюда приходить и 512 на вход будет приходить сюда Но вот этот слой в таком случае то есть всё вот это будет заморожено А вот этот слой который мы туда впихнуть размороженный понятно да да А мои цифры 1,5 - это уже были выходы нашего классификатора то есть там Понятно Задача будет с классификации это будет выход один и четыре выхода будет на регрессии скорее всего ну здесь будет число выходов

это будет выход один и четыре выхода будет на регрессии скорее всего ну здесь будет число выходов равное числу классов а здесь будет четыре кардина в нашем случае сегодня здесь будет 10 Потому что ни модифицированный просто будет Сергей у меня немного возможно глупый вопрос А почему у нас это не во кординат не XY до каждой точки как оно считается но смотри если я тебе скажу что вот здесь вот точка и два точка те с ум ния того что прямоугольника Всё всё я забыл я забыл что это прямоугольник всё

и два точка те с ум ния того что прямоугольника Всё всё я забыл я забыл что это прямоугольник всё вопроса нет Дада про то когда это не прямоугольник мы поговорим в среду там Конечно уже всё не так безоблачно так хорошо Ну собственно резюмируя задача локализации отличается от задачи обычной классификации тем что мы теперь хотим выяснить какую-то прямоугольную область прямоугольная область сложилась просто истори Опя же в среду мы поговорим про то что делать если нас не устраивает именно

сложилась просто истори Опя же в среду мы поговорим про то что делать если нас не устраивает именно прямоугольное хотим например как-то по-другому решать задачу сегодня это неважно именно локализация обычно говорит нам о том что есть какая-то прямоугольная область которой искомый объект расположен и мы на самом деле решаем здесь одновременно две задачи мы решаем и задачу классификации и решаем задачу регрессии регрессия у нас отвечает за позиционирование координа это прямоугольника данные

задачу регрессии регрессия у нас отвечает за позиционирование координа это прямоугольника данные становятся сложнее потому что теперь в отличие от того что у нас просто изображение должно храниться в определённой папке А И по этой папке pytorch отлично определит её класс и всё всё классно всё весело ничего не надо делать самому А у нас теперь появляется дополнительная штука нам нужно читать координаты и эти координаты могут храниться в каком-то представлении это представление чаще всего в том

и эти координаты могут храниться в каком-то представлении это представление чаще всего в том или ином виде текстовое Я имею в виду Jon xml txt но всё зависит от э сказать Ну нашего упорства и фантазии мы можем куда угодно эти координаты записать а модель в этом смысле становится такая а двух двух задач соответственно если мы решаем несколько задач у нас появляется несколько выходов и один из выходов будет решать привычную задачу классификации второй Выход будет решать задачу собственно эту

выходов будет решать привычную задачу классификации второй Выход будет решать задачу собственно эту регрессию задачу регрессии теперь ээ помимо одного Лоса энтропийного который у нас доминировал на прошлой неделе у нас появляется ещё регрессионный Лос но здесь слава Богу всё просто в Крос энтропию отправляем предсказание классов в какой-то регрессионный Лос отправляем предсказание по координатом А после этого просто их суммируем для бадин боксов появляется ещё одна Метрика которая называется I

А после этого просто их суммируем для бадин боксов появляется ещё одна Метрика которая называется I это собственно мера пересечения двух бадин боксов между собой которые говорит нам о том насколько хорошо эти баун боксы соответствуют друг другу иначе говоря насколько хорошо предсказанный баун бок покрывает истинный Бау Bo Ну покрывает даже не очень хорошее слово вот Насколько хорошо он ему соответствует именно вот что что здесь важно да важно сказать что вот текущим текущей моделью Да и текущим

именно вот что что здесь важно да важно сказать что вот текущим текущей моделью Да и текущим подходом о котором мы сегодня говорили у нас не решаются задачи сейчас то есть Ну такую модель которую мы вот на данный момент разбирали в XX веке задача локализации не решается потому что задача локализации она тоже уже в общем-то решённая и её следующий этап задача детекции - это то что мы будем разбирать завтра Почему нам важно разобрать эту задачу потому что не поняв Как работает локализация и какие

завтра Почему нам важно разобрать эту задачу потому что не поняв Как работает локализация и какие у неё есть ограничения будет очень сложно понять как пришли к тому что мы будем обсуждать Завра потому мы сегодня например Разбираем моментально Ну пока вам может быть вы об этом не думали но становится очевидно что В текущей постановке Мы например не очень знаем как нам сделать так чтобы наша модель рисовала не один баун бокс а два в конце концов Может ли у нас два кота быть на изображении Да без

рисовала не один баун бокс а два в конце концов Может ли у нас два кота быть на изображении Да без проблем может но В текущей модели мы не можем нарисовать два баун бокса потому что у нас нет возможности подать одну и ту же картинку так чтобы Таргет был то один то второй а предсказывать восем координат наша модель не может она может предсказывать только четыре про то как с этой проблемы справлялись мы поговорим завтра потому что завтра мы будем обсуждать задачу детекции которая собственно и

мы поговорим завтра потому что завтра мы будем обсуждать задачу детекции которая собственно и отличается от сегодняшней задачи Вот такими усовершенствования Вот Но при этом важно понять архитектуру которая сегодня была объяснена для того чтобы завтра менее безболезненно въехать в то что мы буде а завтра будет сложновато вопросы Давайте по по теории у меня собственно всё позволишь Дада Ну у меня вопрос знаешь что вот я просто когда рассказывала чем мы занимаемся на этой неделе И вот я не смогла

знаешь что вот я просто когда рассказывала чем мы занимаемся на этой неделе И вот я не смогла ответить на вопрос не услыша в лекциях А вообще что это за магия такая вот как мым что можешь повторить вопрос Ну мне непонятно как мы вообще на картинке находим Ну как модель находим мы Понятно Мы всё считаем Да вот есть разметка иногда сами размечаем я участвовала в хакатоне меня взяли только для того чтобы я им данные сидела разме Вот Но мне Непонятно вообще модет кота Нати по каким-то я не знаю по

чтобы я им данные сидела разме Вот Но мне Непонятно вообще модет кота Нати по каким-то я не знаю по соотношению сторон математически как это где можно посмотреть Или в двух словах услышать от тебя ну это очень странный вопрос Ты понимаешь что такое функция потерь Ну да я понимаю что что она показывает нам Ну это же две разные картинки два разных кота вот маче как это как это можно подожди что показывает функция потерь Ну ну по картинкам не очень понятно Ну нет у нас есть вот функция потерь

показывает функция потерь Ну ну по картинкам не очень понятно Ну нет у нас есть вот функция потерь средней квадратическая ошибка что она показывает в отрыве от картинки там и всего остального просто что показывает вот функция потерь средней квадратической ошибка нум расстояние бем пря зависимость показывает и смотрим насколько наши точки удалены от этой функции Угу хорошом квадра чтобы не было обнуления Ну вот Смотрим Да хорошо Вот теперь надо ответить на вопрос А что такое выход вот сети вот

Ну вот Смотрим Да хорошо Вот теперь надо ответить на вопрос А что такое выход вот сети вот этой вот её части Да который у нас прогнозирует координаты вот чисто математически что это за выход то есть Результатом чего эти координаты являются Слушай ну я поняла уже ответ на свой вопрос спасибо Ну нет здесь просто к этому надо подходить как функции Да каждый из этих координат является результатом применения каких-то математических функций эти математические функции они зависит от параметров

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

представим себе что например у нас просто Давайте таким простоты ради как бы да сейчас куда-нибудь мы [музыка] CNN скажем так вот этот CNN нам может отдавать какое-то количество каналов то как вот мы на прошлой недели говорили да давайте представим что у нас вот есть три канала вот если у нас например в каком-нибудь канале Ну вот здесь вот да И вот здесь вот и там где-нибудь вот здесь вот высокие значения что это означает относительно нашей вот этой вот большой картинки которая пришла к нам на

значения что это означает относительно нашей вот этой вот большой картинки которая пришла к нам на вход Это означает что операция свёртки же что делает она берёт регион изображения Да сворачивает его Потом мы применяем пулинг и в итоге получается что какой-нибудь например вот этот вот регион изображения здесь может быть множество какой-то пикселей Он у нас в [музыка] результирующей в результирующих матрицах это он например соответствуют вот это вот этой области Да потому что у на сворачивался

матрицах это он например соответствуют вот это вот этой области Да потому что у на сворачивался этот регион картинки это какая-то важная область там глаз или ухо да да потом Ну соответственно вот эта вот часть Да она у нас просто по операциям как бы пришла вот сюда вот когда мы вот к такому выходу присобачить операцию флатон Правильно Потому что полносвязный слой должен принимать на вход вектора он не умеет с такими матрицами работать когда мы делаем операцию фла у нас наши данные они

вектора он не умеет с такими матрицами работать когда мы делаем операцию фла у нас наши данные они становится Вот мы берм и просто говорим что у нас были два две матрицы 3 натри А теперь вот это первая Матрица это вот они первые девять значений вот здесь вот а вторая Матрица - это вторые девять значений вот здесь вот и вот в этих вот регионах мы понимаем что вот этот вот высокое значение оно пришло куда-то вот сюда вот в этот элемент вектора Вот это значение высокое пришло куда-нибудь это

пришло куда-то вот сюда вот в этот элемент вектора Вот это значение высокое пришло куда-нибудь это элемент вектора Вот это значение это второй канал поэтому он просто будет после латона где-то там ниже куда-то Вот сюда вот пришло и после этого у нас есть полносвязный слой этот полносвязный слой что будет делать Этот полносвязный слой берёт те самые НУП г вот Берт все элементы нашего входящего век то есть прям ВС эти элементы у нас перемножаются на какую-то матрицу коэффициентов И после этого с

то есть прям ВС эти элементы у нас перемножаются на какую-то матрицу коэффициентов И после этого с учётом того что э Матрица коэффициентов это не случайные числа это числа которые были получены в процессе обучения наша модель понимает что Ага если мы берём вот эти вот объекты которые здесь пришли к нам вот из этония [музыка] мы получаем какие-то координаты предсказанные которые хорошо описывают вот эти области А эти области в свою очередь являются репрезентаций исходных областей на этой

вот эти области А эти области в свою очередь являются репрезентаций исходных областей на этой картинке Вот примерно так это выглядит откуда Мы это знаем Мы это знаем оттуда что мы возьмём после того как мы получили эти предсказания сравним их с настоями предсказаниями которые нам Дафа и нанм минимизировать вот эту вот разницу когда мы е минимизируем мы получим ошибку если мы получили какую-то ошибку мы можем посчитать частную производную потому что мы хотим чтобы вот эта вот суммарная ошибка

мы можем посчитать частную производную потому что мы хотим чтобы вот эта вот суммарная ошибка была устремлено в минимум ровно так как вы говорили что у вас есть Парабола и вы хотите прийти Вот сюда вот корректируя вот эти вот параметры модели мы будем перешивать полученные входы вот разница как раз-таки оказалась оказывалась минимальной Угу Ну то есть получается что есть какие-то скрытые зависимости Но вот например там соотношение между расстоянием между ушами и глазами и намного более сложные

Но вот например там соотношение между расстоянием между ушами и глазами и намного более сложные которые нельзя описать даже понятными словами и они оказываются Вот в этих свёртка и сравниваются с эталонными Ну да у нас могут быть на Первом шаге вот как мы на прошлой неделе распечатывать Я показывал в среду что после первого свёрточная такой результат вот после первого свёрток которые напоминают что-то исходное потом это всё начинает преобразовываться в какие-то представления которые удобны сети

исходное потом это всё начинает преобразовываться в какие-то представления которые удобны сети Нам очень тяжело их интерпретировать потому что сеть находится как бы в контексте того что она решает фиксированную задачу и мы не можем вмешиваться в то что вот она должна определённым образом предобработки зрения функции потерь вот а поэтому первоначальные какие-то результаты свёрток ещё можно интерпретировать что там Ага она там нашла что-то Вот такое интересное но это скорее наша интерпретация

что там Ага она там нашла что-то Вот такое интересное но это скорее наша интерпретация просто какого-то алгоритма вряд ли она имеет какие-то сильные предположения Спасибо стало всё понятно спасибо Хорошо тогда у меня вопрос код сразу смотрим или перерыв делаем перерывчик перев перерывчик Хорошо Тогда давайте в 1022 встречаемся здесь же так значит у нас сегодня сейчас я по функции которую Ну точнее по файлу который готовит я отдельно прогусь тут такая важная штука Если у вас есть функции которые

по файлу который готовит я отдельно прогусь тут такая важная штука Если у вас есть функции которые вы импортируется что они самописный [музыка] д строки желательно в самой первой ячейке загрузить расширение А и собственно этот а включить Питер нотбук достаточно тупая штука Поэтому если вы например Напишите какую-нибудь функцию импортируйте её проверите что она Ну может быть работает не так как вам нужно потом перейдёте в эту функцию исправите е сохраните о не умеет обновлять в реальном времени

нужно потом перейдёте в эту функцию исправите е сохраните о не умеет обновлять в реальном времени вот сохраненные функции для этого придумали расширение которое делает это за нас это достаточно классный Костыль в плане того что это уже очень-очень много лет и никто По всей видимости это исправлять не собирается Но Такова жизнь поэтому вот эти две строки помогут вам не путаться если здесь функцию мам мро точно будет работать что у меня здесь нового из импортом деле не всё используется прямо в

мам мро точно будет работать что у меня здесь нового из импортом деле не всё используется прямо в этом ноутбуке Да в общем-то кроме по большому счёту torch Matrix functional detection I импортируем intersection Over Union это функция которая нам нужна для того чтобы считать I автоматически вот можно это делать и вручную в этом нет никаких совершенно проблем вот вот у меня есть функция которая называется Get dload это функция собственно у меня расположено в отдельном файле что здесь происходит

Get dload это функция собственно у меня расположено в отдельном файле что здесь происходит Давайте посмотрим здесь первое создаётся новый класс датасета он называется resist я сюда передаю обычный датасет Mist и передаю сюда размер новых картинок второй ме который мне нужно обязательно задать - это вернуть количество объектов которые у меня есть в обучающей выборке этот датасет пойдёт на вход дало даур будет делить весь наш датасет на батчи поэтому дата лоде обязательно нужен знать каков объём

даур будет делить весь наш датасет на батчи поэтому дата лоде обязательно нужен знать каков объём выборки у всего нашего датасета поэтому я говорю что метод Len он возвращает просто число объектов в моей обучающей выборке следующий метод это Get item вот когда dat Loader приходит в dataset в этом методе Get item описывается что должен вернуть мне dat Loader То есть фактически когда мы создавали например там Image Fold dataset или там какой-то другой датасет А в этих датасета есть метод Get item

там Image Fold dataset или там какой-то другой датасет А в этих датасета есть метод Get item который просто отвечает на вопрос а в процессе того как dater придёт сюда Что dater должен отсюда забрать то есть Какую информацию Мы будем возвращать из дара здесь у меня всё достаточно просто первое что я делаю Это забираю из датасета ста картинку и соответствующий ей Л всё это происходит по индексу то есть в Get передаётся индекс я беру свой датасет и распаковываю его говорю что возьми оттуда

то есть в Get передаётся индекс я беру свой датасет и распаковываю его говорю что возьми оттуда какую-то картинку и какую-то дальше Эту картинку я перевожу в форма это Ну для того чтобы сделать некоторые модификации этой картинки модификации мои заключаются в том что я эту картинку сначала изменю у неё размер А после этого ещё и позиционирую свою своё число изначально Да там же числа рукописные позиционирую просто в какой-то регион своей новой картинки этот зде как 100 на 100 и я фактически что

просто в какой-то регион своей новой картинки этот зде как 100 на 100 и я фактически что я делаю я увеличиваю как бы размер этой картинки таким образом что моё моя цифра попадает в какую-то случайную область И после этого просто заполняю нулями всю оставшуюся область То есть у меня была картинка обычная где там какая-нибудь единичка Теперь у меня картинка больше эта единичка где-то в произвольном оказывается месте вот этой новой картинки 100 на1 у меня здесь также присутствует штука digit are

оказывается месте вот этой новой картинки 100 на1 у меня здесь также присутствует штука digit are это собственно координаты моей картинки то есть мало того что я изображение увеличил и теперь моя цифра находится где-то в произвольной области моей картинки Мы сейчас в основном файле посмотрим как это выглядит я ещё и возвращаю собственно координаты того где у меня новая у меня на новой карти расположена ф г вот э ерунда будет делаться само по себе Вот в этом методе сюда прил и получается что

ф г вот э ерунда будет делаться само по себе Вот в этом методе сюда прил и получается что обратившись по индексу к определённой картинке и леб этой картинки в ответ мой дар получит первое картинку новую которую я модифицировал с помощью вот этого всего второе эти расположена у меня на новом изображении координаты этой картинки размер моего нового изображения 100 на 100 соответственно координаты моей картинки они тоже будут от нуля до 100 Но мне как как Мы помним нейросети не очень любят

моей картинки они тоже будут от нуля до 100 Но мне как как Мы помним нейросети не очень любят работать с большими числами поэтому я все эти координаты не от нуля до 100 а от нуля до единицы Вот это очень важный шаг вам придётся его делать и в проекте тоже то есть вот этот датасет класс датасета он фактически берёт обычные датасеты Mist увеличивает размеры картинок до 100 на 100 и возвращает мне новую позицию цифр на картинках нового размера саму картинку Ил этой картинки когда я переж меде оче

позицию цифр на картинках нового размера саму картинку Ил этой картинки когда я переж меде оче Просто я задаю трансформацию [музыка] преобразовал это происходит также как мы это делали во вторник на прошлой неделе дальше создаю два экземпляра датасета обучающий и валидацию класса выше и после этого создаю два Дара который я использую в свом обучении если мы просто это запустим то соответственно мне вернутся Ну сейчас скачается и вернётся собственно мой мои два датасета и мы можем обратившись к

вернутся Ну сейчас скачается и вернётся собственно мой мои два датасета и мы можем обратившись к этим датасета просто посмотреть что же мне возвращает Точнее обратившись к дарам Что же мне будет возвращать кажды вот здесь вот видно возвращает тройку новое изображение л и координаты картинки поэтому когда я вот здесь с помощью Next обращаюсь к кру я распаковываю свои данные картинка мои координаты и могу распечатать шейпы мой Басай 32 картинки одноканальные у них новый размер 100 на1 второе это

и могу распечатать шейпы мой Басай 32 картинки одноканальные у них новый размер 100 на1 второе это лейблы 32 каждый л - это просто одна цифра и третья - это 32 картинки для каждой картинки четыре координаты То есть если я хочу посмотреть на свои Т боксы я могу это очень просто сделать бо там 32 на4 забираем первый элемент смотрим нашей это четыре координаты то есть для первой картинки из этого Бача Вот мои координаты Вот в этих вот вот он левый верхний угол и правый нижний угол Так давайте вот

Вот мои координаты Вот в этих вот вот он левый верхний угол и правый нижний угол Так давайте вот по вот этому есть вопросы как бы по дасе это у вас там ещё будет возможность разобраться Это не так важно он просто демонстрационный Тут всё понятно что вот это что это за данные Паша Зачем увеличивали размерность до 100 на 100 Ну потому что там картинки втык 28 на 28 нам их локализовать не надо мы можем просто говорить что у нас все картинки находятся в координатах 0 вот а теперь когда у нас когда

просто говорить что у нас все картинки находятся в координатах 0 вот а теперь когда у нас когда у нас картинки Ну давайте Вот это распечатаем что-то не запустил Да я здесь записываю чтобы потом им пользоваться То есть если бы у нас была обычная картинка она бы была четвёркой вот во всю вот эту площадь мне задачу локализации на таком даете решать довольно ранно я могу сказать верхний ул правый нижний А теперь у меня картинка 100х 10000 Но вот эта вот её часть она просто позиционируется случайно

А теперь у меня картинка 100х 10000 Но вот эта вот её часть она просто позиционируется случайно в какие-то в какие-то области этой картинки Теперь я могу изобразить что у меня есть задача поиска этой картинки просто искусственно создаём себе задачу на этом датасете я понял спасибо да да Саша а вот у нас четыре угол их координаты это вот четыре пикселя чёрных которые не зелёные А это про вот эти вот дадада ну здесь такой толщины вот эта рамка что сложно сказать Я думаю что истинные из-за толщины

дадада ну здесь такой толщины вот эта рамка что сложно сказать Я думаю что истинные из-за толщины истинные координаты где-то вот тут вот то есть посередине этой жирной линии Угу хорошо а как рисуется собственно у меня эта штука вам сегодня с рисованием тоже придётся поработать Я создаю область задаю какой-нибудь это обозначает У меня просто какой-то сказать Э ка даёт мне просто какой-то произвольный элемент из Бача здесь я проверяю что произвольный элемент из Бача у меня меньше 3Д Потому что

элемент из Бача здесь я проверяю что произвольный элемент из Бача у меня меньше 3Д Потому что если он больше 32 то я выйду за пределы Бача у меня ничего не получится отрисовать значит я картинку преобразовав е в библиотеку cv22 это библиотека она так и называется computer Vision 2 она в ней есть много всяких штук для работы с картинками а и нам периодически нужно будет её использовать А я сначала превращаю эту картинку в нужный формат как бы подходящий для конкретно cv2 потому что опять же Это

превращаю эту картинку в нужный формат как бы подходящий для конкретно cv2 потому что опять же Это ещё одна очень удобная штука формат изображений в num И в cv2 тоже разные также как в пайтор в Мали в cv2 и в общем нету единого формата Вот это мне нужно для того чтобы я мог нарисовать поверх картинки какие-то объекты в целом Я бы мог это сделать и в Мали но вбе там что-то сложновато это делается Поэтому я решил это делать cv2 то есть вот это объект IMG это объект cv2 и теперь я на этом объекте

Поэтому я решил это делать cv2 то есть вот это объект IMG это объект cv2 и теперь я на этом объекте буду рисовать Я говорю cv2 нарисуй На этой картинке стоящий бокс Это левый верхний угол умноженный на потому что я нормированный правый угол Вот он я тоже беру вторые две координаты из своего Т бокса умножаю на перевожу в num и говорю что у меня будет это сонно выражены оста по нулям и - это толщина и беру и убираю у него Ну вот эти вот подписи типа по осям значит вот так вот у меня выглядит мой

и беру и убираю у него Ну вот эти вот подписи типа по осям значит вот так вот у меня выглядит мой датасет я могу здесь менять всякие элементы Бача какой-нибудь выбрать Деме и буду ви что вот меня всё что вот здесь есть это и есть мой обучающий набор ну здесь только не хватает ещё классов что это на само деле двойка Хотя я честно говоря не знаю что это за цифра это больше похоже на букву Альфа вот а это мой мой Таргет то есть соответственно Т боксы - Это мой Таргет по отношению к регрессии А йл

а это мой мой Таргет то есть соответственно Т боксы - Это мой Таргет по отношению к регрессии А йл - это мой Таргет по отношению к задаче классификации а пик - это картинка которую я буду отправлять свою модель Давайте вот по этой части У кого есть вопросы откуда берём Вот откуда берём это возвращает мне мой дасе который я создал в соседнем файле полу можешь ещё раз повторить для чего мы умножаем на IM S Ну иначе у меня вот здесь вот когда возвращаются координаты картинки точнее координаты

на IM S Ну иначе у меня вот здесь вот когда возвращаются координаты картинки точнее координаты обекта на картинке у меня эти координаты изначально от нуля до от нуля до 100 потому что картинки 100 на 10000 если у меня такая ситуация сохранялась то тогда я бы должен был прогнозировать числа от нуля до 100 Как вы помните по понедельнику прошлой неделе не не любит прогнозировать большие числа Поэтому вот здесь вот я все координаты нормируют на максимальный размер у меня размер 100 таким образом

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

например предсказал какой-нибудь координату 0,7 я должен умножить её обратно на размер изображения чтобы получить истинное положение на оригинальных карти и тоже самое вот зде номи но так сечас я ничего не предсказываю просто рисую я должен умножить его на тут очень Можем даже попробовать специально Сделать ошибку если мы будем забудем нормировать ну или дерми в этом случае видите куда позиционируется вот просто какой-то там сечас какая-то Зелёная штука да по пикселям здесь раскрасила почему

вот просто какой-то там сечас какая-то Зелёная штука да по пикселям здесь раскрасила почему потому что у меня координата от Ну до единиц вот а вот здесь измерение 100 на 100 а не от нуля до единицы Поэтому если у меня такая ситуация возникает это значит То что я должен свои координаты вот здесь вот нормировать на размер изображения в таком случае у меня оно вытянет на истинный на истинный пространственный масштаб О'кей идём дальше хотя дальше собственно особенно уже идти некуда У меня есть

масштаб О'кей идём дальше хотя дальше собственно особенно уже идти некуда У меня есть шаблон модели здесь у меня простенькая свёрточная сеть с со свёртка функция активации лу и пунго есть два блока которые вам нужно заполнить самостоятельно это классификационная часть и часть регрессионная самостоятельно описать фвар здесь я в форварде сразу Box Out То есть то что будет мне та часть сети которая будет возвращать мне координаты я применяю сигмой сигмоида в этом случае меня очень устраивает

будет возвращать мне координаты я применяю сигмой сигмоида в этом случае меня очень устраивает потому что нормированные координаты от нуля до единиц и здесь я тоже примен сигмоида у меня Бут ВС от нуля до единицы просто эти от нуля до единицы Я в случае отрисовки буду потом умножать на размер картинки вот и это собственно вам нужно Дописать самостоятельно Саша активацию мы не применяем классификации Out потому что у нас в критери есть эта штука энтропия Да она сама Да всё значит оптимизатор у

Out потому что у нас в критери есть эта штука энтропия Да она сама Да всё значит оптимизатор у меня есть такой обрезанный скажем так цикл обучающий здесь есть Лог в котором хранятся все метрики ило о котором мы говорили о которых мы говорили на лекции Здесь вам нужно Дописать блок кода который будет собственно получать выходы и всё такое Есть образец того как будут считаться энтропия и у меня в данном случае используется сглаженный L1 loss можете использовать Любую регрессионную функцию Потер

данном случае используется сглаженный L1 loss можете использовать Любую регрессионную функцию Потер считаются I считается accuracy и валидацию часть вам полностью нужно написать самим и Добавить сюда визуализацию результатов То есть у вас в процессе обучения должны выводиться примерно такие картинки зелёные координаты зелёный bounding Bo - Это настоящий bounding Bo красный Bing Bo - это то что пред модель теперь у нас намного больше всяких лоссов метрик и всего такого Поэтому нужно нарисовать

модель теперь у нас намного больше всяких лоссов метрик и всего такого Поэтому нужно нарисовать вот такую диаграмму две метрики ACC энтропия L1 loss соответственно классификация регрессия и суммарный Лос Вот то есть ваше сегодня задание фактически долить этот ноутбук для решение задач локализации объектов вот И у меня всё Люба ну с учётом того что на Маке Э не работает Куда сразу нужно выполнять домашку в Google коллабе да Ну я не думаю что у вас сегодня будет такая Огромная модель ээ которая

домашку в Google коллабе да Ну я не думаю что у вас сегодня будет такая Огромная модель ээ которая будет долго считаться я вот это локально делал вообще без проблем совершенно локально тоже всё будет О'кей Сергей а по визуализации баун бокса мы берём одно случайное изображение за эпоху да Можете брать несколько неважно Ну просто понятно что если вы поймёте Как нарисовать одно то нарисовать несколько тоже не будет проблем вот эй Ну если вопросов больше нет то не знаю тогда что по А ты довольно

тоже не будет проблем вот эй Ну если вопросов больше нет то не знаю тогда что по А ты довольно подробно рассказал про функцию которая подготовила датасет и упомянул что там что-то похожее надо будет сделать на проекте просто в двух словах к чему готовиться Мы будем также сами предо обрабатывать для того чтобы не у вас будет просто пара картинка и текстовый файл то есть нужно будет Вот в этом самом методе методе Get item нужно будет открывать картинку и открывать текстовый файл просто доставать

методе методе Get item нужно будет открывать картинку и открывать текстовый файл просто доставать из него координаты соответственно Return у вас будет такой же абсолютно у вас будет обычная картинка с ней ничего не надо будет делать её нужно будет просто открыть а лейл он будет задан в этом же текстовом файле и координаты которые вы из xml файла Просто достанете у меня там довольно подробный пример есть Поэтому я не думаю что будут проблемы о фактически готовый на самом деле Угу хорошо ну и по

есть Поэтому я не думаю что будут проблемы о фактически готовый на самом деле Угу хорошо ну и по своему вопросу к тебе обратиться я не знаю Если есть возможность Можем остаться если нет я я тоже тебе хотел предложить Давай сейчас по вопросам по заданию разберёмся и тогда останемся просто значит смотрите если кто-то захочет тем не менее делать где-то там на колаби и так далее Вы должны понимать что вот вот вот этот файл тоже нужно притащить с собой потому чтоли выго не при тащите у вас не будет

вот вот вот этот файл тоже нужно притащить с собой потому чтоли выго не при тащите у вас не будет функции которая генерирует датасеты если у вас этой функции не будет непонятно какую задачу вы будете решать вот поэтому это нужно помнить Просто у меня всё в таком случае успехов что скидывайте красивые картинки М спасибо Да пока

так э ну здесь вот этот ответ как бы он не не очень понятен то есть ну в общем если бы я где-нибудь на собеседовании услышал такой ответ Я бы сказал до свидания потому что это ответ который не объясняет ровным счётом ничего Вообще куча ситуаций когда трейн Метрика выше чем Метрика на тесте и Это совершенно не будет означать переобучение поэтому здесь хорошо бы пояснить более подробно Здесь всё правильно в дропаут тоже тоже ответы в общем-то правильные А здесь ну тут было сложно неправильно

правильно в дропаут тоже тоже ответы в общем-то правильные А здесь ну тут было сложно неправильно ответить с учётом однокоренных слов поэтому тоже всё верно здесь ответы правильные А здесь Вопрос непонятен Но это обычный вопрос Какое количество параметров будет в слое это мой ответ Это мой ответ это вот та формула v + p та формула это про выходной размер результата свёртки А это формула про то какое количество будет параметров в слое то есть Сколько сколько параметров мы будем обучать в этом

какое количество будет параметров в слое то есть Сколько сколько параметров мы будем обучать в этом слое Ну и здесь видно что если в одном фильтре размер одного фильтра 3 натри То есть это уже девять параметров входных каналов три значит для каждого входного канала будет сгенерирован по одному фильтру 3 на3 Ну в общем формула здесь самое правильное выходной канал оди каналов три значит размер одного 3 на 3 равно де входной канал о умножаем точнее выходной канал о умножаем на количество входных

3 на 3 равно де входной канал о умножаем точнее выходной канал о умножаем на количество входных умножаем на количество параметров в каждом фильтре и добавляем бас будет 28 параметров вот значит в пулинг никакого увеличения изображений пулинг не сможет сделать даже При всём желании если это не какой-то пулинг названный конкретно вашим именем и вы придумали пулинг который делает ровно то что он не должен делать Вот пулинг ну как минимум можно его настроить так чтобы он не менял размерность

он не должен делать Вот пулинг ну как минимум можно его настроить так чтобы он не менял размерность изображения но в таком случае эта операция Не имеет смысла потому что она ничего не будет делать со входным объёмом вот поэтому Да пулинг используется для выделения наиболее как бы информативных признаков и сокращение размерности тут сложно было тоже не ответить с учётом схожести слов поэтому всё правильно про Крос энтропию значит я бы здесь вот этот ответ уточнил что всё-таки классификация

всё правильно про Крос энтропию значит я бы здесь вот этот ответ уточнил что всё-таки классификация [музыка] друг из друга вещи и никаких проблем С математической точки зрения нет Но обычно когда об этом говорят всё-таки уточняют что бинарная или многоквартирная Крос энтропии будут являться функциями потерь и я бы не рекомендовал использовать формулировку множественная классификация потому что классификация бывает если у нас много классов классификация бывает двух видов бывает задача

что классификация бывает если у нас много классов классификация бывает двух видов бывает задача мультикласс вой классификации о которой мы говорили во вторник о которой мы вчера которой с которой Ну в общем довольно часто приходится иметь дело и второй вид классификации - это мульти классификация Когда у нас объект может относиться сразу к нескольким классам и задача сети Ну в каком-то смысле проранжировать что он к одному классу Ну то есть у нас может быть условно говоря какая-нибудь там не

что он к одному классу Ну то есть у нас может быть условно говоря какая-нибудь там не знаю какой-нибудь код который с одной стороны является представителем домашних но при этом является ещ и в целом животным поэтому мы бы его определили как бы сразу в два класса это не очень частая задача но она тоже встречается и она называется тил то есть множественная классификации такой формулировки в целом Нет она либо многоквартирному что человек может не понять такое множественной классификации здесь все

она либо многоквартирному что человек может не понять такое множественной классификации здесь все ответы правильные про СП коне тоже ответы правильные значит в inception присутствуют дополнительные выходы Чтобы избежать проблемы застукают первый ответ совершенно неправильный потому что среди вариантов есть что-то про регрессию естественно и никакую задачу регрессии не решает и в целом не понимает что это такое Это модель которая была совершенно на другом обучена Ну и тут это легко понять хотя

что это такое Это модель которая была совершенно на другом обучена Ну и тут это легко понять хотя бы потому что inception это модель классификации картинок то есть in работает с картинками на картинках задачу регрессии В смысле визуального представления не решают поэтому Ответ неправильный Что кто-то что-то сказал так здесь тоже ВС правильно последний про архитектуру деннет Ну в общем да здесь я пробежался по первом в общем-то Всё правильно да - это архитектура которая фактически на полную

я пробежался по первом в общем-то Всё правильно да - это архитектура которая фактически на полную разгоняет идею Skip конек Да а что будет если мы результаты обработки входящих объектов каждым слоем будем передавать дальше Давайте посмотрим как это будет работать работает Это в общем-то неплохо но не занял какое-то своё место то есть оказалось что эта идея Она хороша идея СП конек пропуска нескольких слоёв Она хороша как бы для такого Ну в умеренном использовании А если сделать что-нибудь

слоёв Она хороша как бы для такого Ну в умеренном использовании А если сделать что-нибудь наподобие danet то в определённый момент это просто теряет смысл то есть никакого профита не добавляет но при этом сама архитектура усложняется вот что-то вот ги гипотетическая формулировка что как бы я не знаю что это такое но Давайте поразмышляем именно этим и вводит в заблуждение тем что как раз-таки полносвязный слоёв вне Ну как обычно только на выходе Вот то есть там на самом деле последовательность

слоёв вне Ну как обычно только на выходе Вот то есть там на самом деле последовательность свёрточные и его вот этот денс Да его плотность она заключается в том что каждый слой переда информа которые идут После него вот а и он в этом смысле денс что как бы каждый слой он связывает каждый себя с каждым следующим а не в том что там используется последовательность полносвязный слоёв полносвязный слои уже лет 30 наверное или Ну поменьше Может быть 25 не используются для э классификации картинок Вот

уже лет 30 наверное или Ну поменьше Может быть 25 не используются для э классификации картинок Вот они просто слишком сильны но при этом не работают таким образом которым бы нам хотелось вопросы по вопросам Ну вот да Про это про 28 типа просто ещё раз ясность вот вторая формула соответственно она на каком этапе и эта формула На каком этапе не понял что какая вторая формула откуда Ну которая единственная формула которая у нас была с размером керла и с панго и со страм Так а ну вопрос Какой

единственная формула которая у нас была с размером керла и с панго и со страм Так а ну вопрос Какой формулы я понял в п 2Б минус этот делить на S П О что формула Да формула просто просто хочется как бы представить на уровне Ну потока работы модели Вот вот этот ответ на этот вопрос мы когда когда мы на него получаем Ну хотим получить и ну и просто отдельно ответ на тот вопрос Когда мы хотим получить Ну на этот вопрос Мы ответ хотим получить когда мы хотим вычислить количество параметров которые

Ну на этот вопрос Мы ответ хотим получить когда мы хотим вычислить количество параметров которые у нас есть в сети то есть вот у нас может быть последовательность свёрточные Мы хотим выяснить Какое в них будет количество параметров у нас это делается автоматически когда мы запускаем метод Get Mod summary мы на вход передаём модель этот метод анализирует какие у нас есть слои и автоматически нам считает количество параметров вот ответ на вопрос по вчерашней формуле вот к нам приходит картинка

считает количество параметров вот ответ на вопрос по вчерашней формуле вот к нам приходит картинка какого-то размера мы к ней применяем какой-то свёрточные слой вот та формула позволяет нам понять после того как мы этот свёрточные слой к картинке применим она размер свой как поменяет то есть свёртка сворачивает То есть к нам пришло объект 5 на5 после свёртки он например стал 2 над вот эти 2х 2 мы можем получить после того как применим вчерашнюю формулу и этот ответ мы его Хотим мы его

2х 2 мы можем получить после того как применим вчерашнюю формулу и этот ответ мы его Хотим мы его используем чтобы что этот ответ мы используем для того чтобы ответить например на такой вопрос на собеседовании то есть вручную это опять же никто не считает Вчера когда мы смотрели практику я вам говорил что вот у нас со свёрточные выходит какая-то информация нам нужно её отрешен У слою потому что мы не знаем Ско сколько будет на выходе е у нас есть большая последовательность слоёв свёрточные у

мы не знаем Ско сколько будет на выходе е у нас есть большая последовательность слоёв свёрточные у нас будет на выходе А можем спровоцировать ошибку Я вчера показывал как спровоцировать эту ошибку чтобы понять вот у нас 10 свёрточные они в какой размер наши картинки превратили А это вот для того чтобы то что ты рассказывал три метода чтобы Парат поставить в коде если мы Зами мы потали По вчерашней формуле Угу Вот но у нас есть компьютер да да я задаю эти вопросы в том числе чтобы понять ну

формуле Угу Вот но у нас есть компьютер да да я задаю эти вопросы в том числе чтобы понять ну нужно ли себе как-то триггерить чтобы потому что они реально нужны для кода или там на часть вопросов под капотом полностью я так поняла на первый вопрос полностью под капотом и типа просто это вот этот тестовый вопрос у нас для понимания скорее а второй вопрос а на второй вопрос Ну вот эта формула она нам реально ну иногда нужна Ну или просто спровоцировать ошибку и по ошибке увидеть какая там циферка

реально ну иногда нужна Ну или просто спровоцировать ошибку и по ошибке увидеть какая там циферка да Ну просто такие вопросы встречаются собеседование пря людям говорят вот у нас есть свёрточные слой Si 3 на3 но на вход прила прил объект Ты на сколько будет у нас на выходе как бы о Ну как м с моей точки зрения тупой вопрос типа он ничего абсолютно не поясняет Ну давайте мы сейчас посидим вспомним формулу и почитаем поклад и поделим вспомним как дроби устроены но все по-разному собесе поэтому Т

формулу и почитаем поклад и поделим вспомним как дроби устроены но все по-разному собесе поэтому Т быть гото может встре СБО У меня вопрос был насчёт формулы размера выходного нзра он может быть виде ответ А вот если вот в нашем случае типа 100 там формуле посчитал 51 что неправильно г тебя же не может быть полови пикселя будет в любом случае какойто ме вопрос скорее по впечатления было два вопроса на которые вроде как один Ну точно подходит один Ну отчасти подходит то есть например там что

на которые вроде как один Ну точно подходит один Ну отчасти подходит то есть например там что представляет собой там применяется да для сжатия данных в какойто степени потому что допустим боковые участки изображения могут скушать если их не нарастить Это первое и второе Для чего используется операция пулин уния размера изображений но в том числе для уния всех значени изображении бы тоже отчасти можно так сказать так или [музыка] можно сказать что свёртка сжимает э как бы объект входящий но

можно так сказать так или [музыка] можно сказать что свёртка сжимает э как бы объект входящий но подразумевается обычно что сжатие - это процесс детерминированный То есть у нас есть какой-то фиксированный алгоритм который и Наш выход будет зависеть только выход этого фиксированного алгоритма будет зависеть только от того какой у нас вход алгоритм у нас остаётся неизменным Да вот как работают архиваторы есть фиксированный алгоритм к ним приходит какая-то информация и этот алгоритм совершенно

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

изменился и передавая на двух эпохах одну и ту же картинку временни мы получим другой результат потому что параметры в свёртки поменяются поэтому интуитивно можно говорить что свёртки конечно в каком-то смысле сжимают входящий объект Но если таким образом ответить то тут моментально можно привести контур пример А если мы к нашей входящей картинке добавим такое значение динга которое добавление которого не поменяет размер входящего изображения то есть мы бы у на есть например да мы Окой наше

которого не поменяет размер входящего изображения то есть мы бы у на есть например да мы Окой наше изображение Динго и получается что у нас пришло какое-то изображение мы к нему добавили динг а на выходе мы получили Такой же размер изображения То есть фактически операция свёртки случилась но сжатия не произошло именно физического сжатия Вот поэтому я бы не рекомендовал использовать именно сжатие по отношению к свёртка Хотя в этом есть некоторая интуиция но просто контрпример моментальный

по отношению к свёртка Хотя в этом есть некоторая интуиция но просто контрпример моментальный приводится сразу вот в целом как бы операция свёртки - это обычный нормальный ответ то есть это свёртка - это алгебраическая операция которая производит поэлементное произведение и сложение соответствующих там участков данных А по поводу линга усреднение на самом деле так давайте где этот вопрос был Где он Где он Где он вот он операция линга в целом если это операция пулинг да Но получается что в

Где он Где он Где он вот он операция линга в целом если это операция пулинг да Но получается что в случае операции как бы обычного усреднения Да мы не очень понятно какие тогда признаки выделяем потому что пулинг же он всё-таки берёт максимальные или средние значения не просто так он их берёт из каких-то регионов изображения а если мы возьмём просто и всё у средним это уже отдельная операция которая называется Глобал пулин и про Глобал пулинг обычно всё время говорят отдельно То есть когда вы

называется Глобал пулин и про Глобал пулинг обычно всё время говорят отдельно То есть когда вы слышите просто пулинг скорее всего либо Макс либо Эд то есть тот который обрабатывает картинку скользящим окном вот если речь идёт о глобале Global пулин Да просто всё усреднять Вот Но тут бы было про него тогда отдельно написано что какую операцию делает Global Ever пулинг а не просто пулинг хорошо тогда давайте по сегодняшней теме А у нас сегодня тема переноса переноса знаний трансфер ленга фаню в

давайте по сегодняшней теме А у нас сегодня тема переноса переноса знаний трансфер ленга фаню в общем всё это довольно похожие штуки и все они отвечают на вопрос как использовать модель если у нас нет ресурсов самостоятельно её обучить сейчас так используется Ну процентов 95 моделей потому что достаточно редко кто-то под какую-то сложную задачу начинает писать собственную модель обычно берут какую-то более-менее успешную с точки зрения там много где использованную архитектуру и пытаются её

какую-то более-менее успешную с точки зрения там много где использованную архитектуру и пытаются её некоторым образом модифицировать Под свою собственную задачу и сделать это можно несколькими способами мы сейчас посмотрим какими значит первый способ - это взять какую-нибудь обученную кем-то другим модель под кем-то другим я обычно буду подразумевать какой-нибудь Google Microsoft Я не знаю все все всю вот это вот семейство тех у кого много видеокарт и довольно сто Мы можем взять какую-нибудь

все всю вот это вот семейство тех у кого много видеокарт и довольно сто Мы можем взять какую-нибудь обученную этими ребятами модель и просто её применить полностью на своих данных тут естественно возникает сразу неудобство неудобство заключается буквально в том что модель может быть обычна на каком-то одном датасете и А у нас данные там у нас может быть датасет который является вот ну частью датасета какого-то большого на котором были обучены модели которые для Выложи оказывается пото что если

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

в этом в этой модели то есть нам не нужно чтобы она умела классифицировать корабли самолёты людей у нас там конкретная задача Мы хотим по входящему изображению определить код к нам пришёл или пёс поэтому применение в чистом виде чьих-то чужих моделей - это не очень популярная вещь Хотя сейчас она некоторую новую жизнь обретает потому что сейчас все такие ой да пофигу возьмём там 20 баксов заплатим openi и будем просто gpd отправлять запросы Вот она будет отвечать то что она хочет мы потом

openi и будем просто gpd отправлять запросы Вот она будет отвечать то что она хочет мы потом что-нибудь придумаем для того чтобы с этими ответами как-то поработать дополнительно и что-нибудь э что-нибудь как-нибудь улучшить Вот но естественно это всё происходит за день а и довольно часто приходится брать какую-нибудь модель и э немного её изменять и пытаться собственно на своих данных эту штуку применить и такой способ обычно называется термином тюнинг То есть у нас есть какая-то модель которая

и такой способ обычно называется термином тюнинг То есть у нас есть какая-то модель которая [музыка] и немножечко настраиваем то есть мы как бы берём все веса модели которые у неё были и будем настраивать только те веса которые вот связаны с нашей модификацией мы сегодня это будем делать и в коде в том числе бывает ситуации когда у нас не очень хорошо даже в таком случае работает модель то есть мы можем взять какую-то большую хорошую классную модель предо на датасете вот там 1 мл картинок

мы можем взять какую-то большую хорошую классную модель предо на датасете вот там 1 мл картинок классов при этом это датасет очень общего назначения то есть там есть как я уже говорил коты собаки слоны самолёты корабли люди деревья и оказывается что если мы например попробуем такую модель применить на какой-то узко специализированной теме например мы там захотим классифицировать какие-нибудь рентгеновские снимки то собственно говоря не очень понятно Как знание модели о том как выглядят корабль

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

мы не будем обучать всю эту модель а возьмём просто несколько слоёв и эти несколько слоёв мы будем подстраивать Под свою задачу такой способ называется африн мы сейчас это всё посмотрим и в коде и на схемах отдельно то есть мы немножечко расширяем предыдущий подход здесь мы будем модифицировать только то что здесь мы будем обучать только то что мы модифицировать А здесь мы будем обучать то что мы модифицировать и ещё чуть-чуть того что сделали за нас и пару слов я скажу Потом про тита это не

мы модифицировать и ещё чуть-чуть того что сделали за нас и пару слов я скажу Потом про тита это не очень популярная штука но при этом она такая интерес про своей идее мы сегодня рассматривать Ну вы вряд ли с ней встретитесь это просто прикольный трюк значит первый способ дано У нас есть модель э модель обычна на Большом датасете У нас есть какая-то задача и мы хотим решить с помощью предобрый модели скачиваем веса этой модели И говорим что у нас есть какие-то данные мы эти данные м например

модели скачиваем веса этой модели И говорим что у нас есть какие-то данные мы эти данные м например классифицировать есть очень большое количество разных моделей особенно среди текстовых моделей мы это посмотрим на через неделю вот которые обучены заранее на какую-то общую задачу например модель может быть обучена на общую задачу там различения там по собак по породам и всё хорошо Ровно до тех пор пока в нашем в наших данных не появляются какие-то новые объекты Ну я не знаю там не было

тех пор пока в нашем в наших данных не появляются какие-то новые объекты Ну я не знаю там не было каких-нибудь Прости Господи шпицов в датасете на котором модель предобзор данных не было определённого класса мы будем ей этого шпица на вход подавать она как модель классификации будет вынуждена отнести его к какому-то классу потому что ну у нас ограниченное количество выходов То есть как куда-то она к какому-то классу э собаку отнесёт но мы будем понимать что это всё время будет ошибкой потому

она к какому-то классу э собаку отнесёт но мы будем понимать что это всё время будет ошибкой потому что у модели изначально нет такого класса мы ей на вход подаём этот объект у неё выхода другого нет просто потому что должна пройти какая-то последовательность там матричных операций и какой-то выход у модели в любом случае будет И у нас э возникает ситуация в которой собственно Мы вроде как взяли предо модель но при этом какие-то данные которые у нас появились новые Они уже не удовлетворяют этой

модель но при этом какие-то данные которые у нас появились новые Они уже не удовлетворяют этой модели потому что она Таких данных не знает в таком случае вместо того чтобы брать полностью готовую модель и заниматься Как раз-таки вот этим трансфер ленго Да надеяться на то что Хорошая большая модель решит за нас всю нашу задачу мы можем воспользоваться Чуть более сложным подходом который называется Файн тюнинг идея Файн тюнинга заключается в том что вот у нас был вот здесь вот в первом случае

Файн тюнинг идея Файн тюнинга заключается в том что вот у нас был вот здесь вот в первом случае например какая-нибудь там модель котора фива у нас на 40 классов породы собак теперь у нас появились какие-то новые породы и у нас нету возможности использовать предыдущий вариант модели поэтому что мы будем делать мы скажем модели Хорошо если у нас появились новые данные при этом как бы в целом нас модель удовлетворяет Но вот данные стали другие давайте сделаем так возьмём последни классификационную

удовлетворяет Но вот данные стали другие давайте сделаем так возьмём последни классификационную часть этой модели отрежем её у модели и вместо неё поставим сюда какую-нибудь классификационную часть которая теперь будет классифицировать нам не на 40 пород как это было в предыдущей задаче а выход у неё будет 40 + 1 то есть 41 вместо предыдущих 40 и обучим эту модель только обучим эту модель на наших новых данных то есть теперь у нас 41 класс Мы прекрасно можем построить полносвязный слой который

новых данных то есть теперь у нас 41 класс Мы прекрасно можем построить полносвязный слой который будет классифицировать на ла и будем обучать только вот этот вот полносвязный слой то есть вся предыдущая модель все слои которые были до вот этого классификационного мы будем использовать те те веса которые были получены когда мы эту модель скачивали Почему мы так делаем потому что Ну в целом мы понимаем что модель обучена на профильных для нас данных поэтому Даже если мы попробуем вот таким вот

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

нужно считать частные производные корректировать параметры опять считать частные производные опять корректировать параметры Поэтому наши данные будут проходить через всю Вот эту вот модель с использованием которые нам даны просто потому что кто-то нам передал такую модель А вот эта вот часть будет обучаться в процессе обычного градиентного спуска То есть все эти параметры будут неизменные такие которые и были изначально а ту часть которую мы сюда вставим будет обучаться на наших данных и будет

и были изначально а ту часть которую мы сюда вставим будет обучаться на наших данных и будет минимизировать Ту же самую функцию потерь в данном случае категориальная энтропия и никаких никаких проблем в общем-то возник должно идея такого подхода понятна Давайте по вопросам Саша да вот у меня вопрос на картинке отображено что Fly connected слой - это обучаемая часть Ну ли connected слои Вот но чая часть здесь обозначена вот так вот и она только вот здесь а а всё увидел да не так посмотрел Угу

часть здесь обозначена вот так вот и она только вот здесь а а всё увидел да не так посмотрел Угу коч А у меня сложилось ощущение что логика работы будет такой модель хорошо работает СК классами знает как их находить А вот нашего шпица будет определять по принципу если ни к какому из сока не подходит то это шпиц Это так или это не так нет для этого мы бы вынуждены были делать более сложную архитектуру и обычной категориальной энтропии мы бы не справились для таких задач если нам нужно Короче

и обычной категориальной энтропии мы бы не справились для таких задач если нам нужно Короче если у нас есть какой-то контрпример для имеющихся классов на самом деле тоже возникает то в таком случае мы бы должны были обучать модель передавая ей на вход такие Контр пары То есть у нас была бы какая-нибудь картинка где условно изображена там какая-то собака а потом бы мы подавали вот по другой ветке мы бы подавали на вход модель картинки с Контр примерами То есть то что ну условно Сейчас скажем что

бы подавали на вход модель картинки с Контр примерами То есть то что ну условно Сейчас скажем что не является вообще собакой в целом и мы бы модель обучали примерно по такой технологии тут много есть подходов но общий вид будет примерно такой мы передаём в модель значит две вот эти картинки в данный момент как бы это то что модель должна знать это контрпример который она должна Ну как бы определять как не имеющие отношение к нам и вот здесь вот у нас был Был Таргет что Для такой пары картинок

как не имеющие отношение к нам и вот здесь вот у нас был Был Таргет что Для такой пары картинок например Таргет мину о потому что они не являются парами потом мы бы подавали на вход модели не как бы пару например хороших не пару пример контрпример а передали бы ей собаку и передали бы ей другую собаку и для такой пары Таргет бы был плюс один и таким образом как бы мы говорили модели что вот эти вот картинки нужно в условном пространстве раздвинуть с Контр примером потому что они не являются

вот картинки нужно в условном пространстве раздвинуть с Контр примером потому что они не являются нужными для нас а когда к нам приходят объекты нужные мы наоборот их как бы сдвигаем мы говорим что они близко должны находиться к друг другу вот а поэтому тут наша модель в данном случае она просто переобучить ну как бы О'кей ещё один класс для ещё одного класса есть Таргет считаем обычную кросс энтропию и всё будет О'кей Саша а мы получается не можем да навешивать новые ле connected слои Или

энтропию и всё будет О'кей Саша а мы получается не можем да навешивать новые ле connected слои Или можем всё-таки А смотри мы можем навешивать новые ли connected слои но тут проблема в том что изначально вот у этой модели этот слой он уже за ну как бы создан и обучен именно классифицировать могли ли мы вот сюда вот добавить например ещ один слой и сказать что вот сюда пришло на вход например 40 да потому что было здесь 40 выходов А вот здесь вот у нас слой Будет отдавать нам 41 в целом мы могли

потому что было здесь 40 выходов А вот здесь вот у нас слой Будет отдавать нам 41 в целом мы могли так сделать Но обычно так не делают потому что А всё равно вот этот слой придётся переобучить просто потому что он обучен как бы вообще на другую с другой целью он уже обучен выдавать нам вероятности принадлежности вот поэтому обычно так не делают Обычно говорят окей это нам не подходит Значит мы сюда присобачить а этот просто удаляем вообще а то есть мы не можем да до жёлтого добавить свои фулика

присобачить а этот просто удаляем вообще а то есть мы не можем да до жёлтого добавить свои фулика и оставить жёлтый просто свить между ними вот сюда Да да можем Но это тоже Так не делается потому что тебе Тогда придётся этот слой тебе всё равно придётся переобуть ещё и те которые ты туда добавишь то есть ну это много да ресурсов просто я не понимаю ну у нас же есть обученная полностью архитектура Ну предо обученная и по идее Ну наверное немного там требуется чтобы обучить ещё условно два слоя и

Ну предо обученная и по идее Ну наверное немного там требуется чтобы обучить ещё условно два слоя и вот последний выходной не так технически так можно сделать просто это будет намного дольше обучаться чем Ты уберёшь вот этот слой и просто добавишь сюда новый вот и всё просто я не понимаю в ках временных раках говори ко дольше обуча меше обу ставить Что хочеш сделать ты че взять Вот эту модель и вот сюда вот например вставить ещё слой Да окей а что делать вот с этим вот когда у тебя модель

и вот сюда вот например вставить ещё слой Да окей а что делать вот с этим вот когда у тебя модель отдаёт 40 классов А тебе нужен 4 лас сказа остался прежним как это решает проб Ну сказать не знаю ошибочка уменьшить не Ну просто ты же говоришь На самом деле тоже самое всё равно твоя логика приводит к тому что зачем нам сюда добавлять сразу слой давайте мы сначала вот этот слой поменяем попробуем обучить будет плохо работать дальше будем думать ну короче белай вот на 41 поменять просто а потом

обучить будет плохо работать дальше будем думать ну короче белай вот на 41 поменять просто а потом уже Мы сес про это поговорим Я в эту сторону примерно пойду просто там будет не про добавление слов без пром вообще Ну просто вот вчера что чем больше слов тем конечно ошибочка падает Но это больше ресурсов Вот Но у давление типа нескольких слов тоже не особо влияет потому что там происходит как бы добавление новых слов по идее должно быть тоже соп конем его придется реализовывать чтобы сохранить

добавление новых слов по идее должно быть тоже соп конем его придется реализовывать чтобы сохранить Ну я понял да спасибо луба вопрос получается итогу то что часть классификации типа Можно не удалять а просто чуть-чуть поменять И всё да Окей хорошо значит Идём в сторону который уже Обозначил Саша представляем то что наша модель мы поменяли тот слой который Нам нужен всё отлично здесь у нас теперь то количество классов которое мы хотим 41 но что-то всё равно не так ну то есть не очень Нас

теперь то количество классов которое мы хотим 41 но что-то всё равно не так ну то есть не очень Нас устраивает например качество Мы вроде видим что модель справляется но метрику хотелось бы побольше что мы можем сделать в таком случае в таком случае обычно используется техника которая называется африн то есть мы сейчас находимся на этапе Когда у нас здесь 41 слой мы вот этот вот слой пооб Метрика не очень хотим в предыдущем подходе вся вот эта вот часть модели была с готовыми параметрами мы их

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

который ему предшествуют тоже сделаем обучаемым то есть мы скажем что теперь не вот это вот всё заморожено как было в предыдущем примере А теперь у нас заморожена например будет только вот эта вот часть а обучать мы будем то что мы сюда сами при собачи и е какие-то готовые веса которые уже были в этой модели мы просто их немножечко по Ну подр на э на предмет более низкой функции потерь по отношению к нашим новым данным И тут на самом деле уже начинается такая как бы э фантазия да то есть Можем

к нашим новым данным И тут на самом деле уже начинается такая как бы э фантазия да то есть Можем ли мы например разморозить ещё и вот здесь вот параметры можем число обучаемых параметров возрастёт считаться будет конечно подольше но при этом мы понимаем что если у нас теперь обучается не только вот этот один слой А ещё вот этот слой А ещё вот этот слой то тогда как бы мы ожидаем что наша Метрика подрастёт Ну и как бы самый Хардкорный вариант когда мы понимаем что у нас ничего не работает тогда

подрастёт Ну и как бы самый Хардкорный вариант когда мы понимаем что у нас ничего не работает тогда давайте сделаем так возьмём всю вот эту модель везде разморозить практически с нуля Вот ну как бы здесь имеется в виду не совсем с нуля Потому что всё-таки какие-то предо обученные значения у параметров вот здесь вот есть то есть мы стартуем не со случайных значений Как это бы когда мы создам экземпляр модели А мы стартуем вс-таки с каких-то значений которые уже были получены на при каком-то

модели А мы стартуем вс-таки с каких-то значений которые уже были получены на при каком-то предыдущем этапе обучения но при этом мы скажем что теперь у нас новые данные всё работает плохо поэтому эти параметры обучаем эти параметры обучаем эти обучаем эти обучаем Ну в общем полностью обучаем нашу модель никакие параметры у нас не сохраняют те значения которые мы изначально скачали для того чтобы попытаться решить свою задачу и такая техника называется африн мы размораживаем параметры модели и

попытаться решить свою задачу и такая техника называется африн мы размораживаем параметры модели и начинаем Их бы добавлять в процесс на процесс обучения вот я правильно понимаю что При таком переобучения Там многие веса уже вроде как сформированы и меняться видимо в меньшей степени чем если бы случайным образом задавались но всё равно на скорость переобучения никак не будет влиять потому что равно частные производные считать поэтому Даже несмотря на то что ну там буквально если ваш параметр

частные производные считать поэтому Даже несмотря на то что ну там буквально если ваш параметр меняется на 1000 на количество операции с плавающей точкой это никак не влияет он же меняется на 1 тысячную Значит мы складываем значит мы умножаем Значит мы там коэффициенты добавляем то есть в любом случае считать придётся Да компьютеру собственно умножить на од целую Ну там на 0,1 и на 1 миллионную Это для него две одинаковые операции потому что ну как бы это умножение да и всё да Ну давайте тогда

для него две одинаковые операции потому что ну как бы это умножение да и всё да Ну давайте тогда значит мимас проф lear все очень любят ф потому что самому ничего толком обучать не надо вот берём что-то хорошее что-то готово пытаемся это натаскать на свою задачу на самом деле на следующей неделе у нас будет 2 дня где мы будем уже брать готовые модели и продолжать их просто обучать на своих данных на неделе с текстом у нас так будет собственно один день но он будет такой Там будет большой Спектр

на неделе с текстом у нас так будет собственно один день но он будет такой Там будет большой Спектр модели и таким подходом пользуются практически все то есть э вряд ли будет какая-то задача Ну там которая имеет какую-то там серьёзное серьёзный масштаб данных в которых вы бы не стали использовать а модели предобзор очень сильно отличается от того датасета на котором модель была предо обучена всё равно даже вот [музыка] он приведёт к более быстрому результату хорошему чем если бы вы

обучена всё равно даже вот [музыка] он приведёт к более быстрому результату хорошему чем если бы вы инициализировать эту модель Прямо просто с нуля и начали бы обучать на своих данных вот а это такое как бы не сильно изученное явление но оно в общем-то сохраняется и для текстов да то есть модель обученная на английском языке требует гораздо меньше там ну как бы э гораздо меньших усилий для переобучения на русский язык чем модель которая инициализирована полностью с нуля потому что вс-таки

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

проще Но это как правило как минимум с этого не начинают то есть обычно стараются взять что-нибудь найти что-нибудь предобработка мульта Learning называется у нас такая идея что О'кей если у нас есть какая-то больно умная модель которая там была обучена на миллионах изображений Да и мы вот хотим например использовать эту модель в рамках Ну например Просто такого как сказать ну универсального добывали признаков Да универсального фир экстракта давайте мы попробуем через нашу модель прогонять

добывали признаков Да универсального фир экстракта давайте мы попробуем через нашу модель прогонять например два датасета которые могут быть между собой собственно особенно и не связаны то есть мы будем там я не знаю Здесь у нас будет какой-нибудь датасет там Dog да а здесь у нас будет датасет который Ну не знаю что-нибудь Дикое придумать типа там номера Я не знаю с номера там Европейского Союза да и номера там какого-нибудь не знаю каких-нибудь автомобилей Северной Северной Кореи например вот

да и номера там какого-нибудь не знаю каких-нибудь автомобилей Северной Северной Кореи например вот и оказывается что если даже на Таких данных обучать то в целом можно использовать одну модель но в процессе обучения мы просто должны будем выходы этой модели это не классификационная часть а вот с отрезанной классификационной башкой мы будем просто отправлять в две классификационные головы и э головы будут нам говорить что здесь у нас будет какой-нибудь там собака кошка да классы А вот это вот

будут нам говорить что здесь у нас будет какой-нибудь там собака кошка да классы А вот это вот классификационная часть Будет нам говорить что это у нас там номера Европейского Союза это номера Кореи и так далее и в таком способе тоже можно обучать модели тут вопрос в том как бы насколько эти два датта между собой имеют какую-то Ну хотя бы на сколько-то общую природу но в целом получается что у нас есть две абсолютно задачи задачи в смысле того что с одной стороны у нас классификация животных с

есть две абсолютно задачи задачи в смысле того что с одной стороны у нас классификация животных с другой стороны у нас классификация каких-то номеров автомобильных но при этом у нас есть возможность так сделать пожалуйста у нас будет в нашем случае два Лоса один Лос Будет нам говорить про то что где как мы ошибаемся называя собаку котом а другой Лос нам будет говорить что насколько мы ошибаемся когда мы классифицируй там номера какие-то автомобильные и то и то то есть и этот Лос и этот Лос это

мы классифицируй там номера какие-то автомобильные и то и то то есть и этот Лос и этот Лос это будет как какая-то энтропия в моём случае в обоих примерах это будет бинарная энтропия А после этого мы будем просто складывать два значения этих лоссов и обычным крм обучать модель то есть будем обучать веса здесь здесь и здесь Но вот эти вот веса они как бы будут стараться подстроиться и сюда и сюда одновременно в случае если как бы Наша задача В каком-то смысле такая искусственная как приме прие

одновременно в случае если как бы Наша задача В каком-то смысле такая искусственная как приме прие можно с точки зрения того как вы делаете дата Лоры датасеты потому что вам нужно добавлять специальные метки что если к Вам пришёл Пришли данные из определённого датасета Значит вам нужно использовать вот эту голову для классификации если из этого датасета значит сюда данные отправлять не надо надо отправлять сюда но в целом если покопаться в принципе это ну главное понять как это устроено с точки

сюда но в целом если покопаться в принципе это ну главное понять как это устроено с точки зрения кода это не очень сложно это не то чтобы популярный подход Это скорее такая ну трюк который показывает что нейросети имеют очень широкие способности к обобщению и даже находясь как бы в рамках каких-то данных которые между собой не связаны они способны строить репрезентации этих данных которые будут решать какую-то задачу дальнейшую Но в данном случае под дальнейшая задачи я подразумеваю что есть

решать какую-то задачу дальнейшую Но в данном случае под дальнейшая задачи я подразумеваю что есть два маленьких классификационных блока которые умеют с выходами этой сети правильно работать и правильно решать задачу вот мы это делать не будем это вряд ли вам когда-то пригодится но такой это просто интересные интересный трюк вот а давайте вопросы по тому что было сейчас сказано Ну по всему тому что было сказано потому что у нас теперь код [музыка] Люба Ну вот мы сейчас говорим про перенос

что было сказано потому что у нас теперь код [музыка] Люба Ну вот мы сейчас говорим про перенос знаний с моделей которые были обучены кем-то не нами А вопрос простой где брать эти модели есть какие-то хранилище моделей есть да и сегодня мы посмотрим одно из хранилищ Угу спасибо луба вот где мы размораживать из и типа размораживать вот эти отсеки можно ли типа не ф коннекто часть размораживать А например типа часть свёртывания и типа А всё остальное замороженное оставить и классификацию тоже

А например типа часть свёртывания и типа А всё остальное замороженное оставить и классификацию тоже разморозить ты имеешь в виду например разморозить вот здесь вот А всё вот это оставить замороженным А здесь тоже разморозить а типа такого Но обычно так не делают потому что это относительно бессмысленно смотри у тебя вот Ну например если мы считаем что вот эта вот часть у нас заморожена Да у тебя она имеет параметры которые напрямую зависит от того что отдаёт тебе вот этот слой если в этом слое

она имеет параметры которые напрямую зависит от того что отдаёт тебе вот этот слой если в этом слое ты параметры разморозить давать те результаты к которым вот этот вот слой привык Поэтому у тебя поменяются выходные данные вот этот слой уже не очень будет понимать как их обрабатывать Поэтому если мы данные размораживаем слои размораживаем мы это делаем только начиная с головы модели И постепенно двигаясь назад иначе говоря если разморозить вот этот слой А всё вот это оставить замороженным

двигаясь назад иначе говоря если разморозить вот этот слой А всё вот это оставить замороженным результата хорошего Ты не добьёшься ну либо добьёшься но через период времени да которые тебе не А если ти полностью ть ли connected замороженное то же самое будет то же самое у тебя в любом случае эти ли connected были В процессе обучения подстроено под выходы вот этого выходы как бы вот этот слой был подстроено вот это всё оставить замороженное это значит То что как бы использовать те слои и модель

подстроено вот это всё оставить замороженное это значит То что как бы использовать те слои и модель знает как между этими слоями распределяются данные и потом немножечко эти данные о понял А вот тогда вопрос если например мы новый датасет даём типа Ну плюс-минус похоже просто надо выводить вот как до этого было сказано 41 то есть вот вся часть до классификации Она же была обучена на том что типа вводить 40 нам нужно 41 то есть оно как-то оно же вообще не будет меняться если там оно будет заро

вводить 40 нам нужно 41 то есть оно как-то оно же вообще не будет меняться если там оно будет заро вот этой части собственно Абсолютно без разни тея классов зде А здесь без разниц она вот эта часть модели она просто обрабатывает признаки она пытается найти признаки сколько там классов ей без разницы абсолютно хоть Можно ли так обобщить что допустим в начале модели мы получаем общие знания которые как бы имеют общую ценность а ближе к концу модемы получаем спето призна коню зада это вот первый

как бы имеют общую ценность а ближе к концу модемы получаем спето призна коню зада это вот первый вопрос то есть Верно ли это да что от начала к концу идёт вот такой как трансформацию смо от общих признаков которые ценны в принципе по своей сути как выделение самих признаков к тому что в конце именно идёт научение на признаки которые нужны нам именно мы отбираем то что нам нужно из общего это первая часть это верно Да можно так говорить И тогда такой вопрос связано ли это с тем что есть некое

часть это верно Да можно так говорить И тогда такой вопрос связано ли это с тем что есть некое как бы условно говоря затухание обратного распространения ошиб то есть оно больше действует на те свои которые ближе к концу и дальше ВС Меньше меньше меньше действует на дальние свои из Ну смотри В целом это верно на самом деле в любом случае ну как бы е хоть вы обложить там Всё скип конек Да всё равно просто по физическим причинам перемножения Да ну правила частной производной точнее производной

просто по физическим причинам перемножения Да ну правила частной производной точнее производной сложной функции но просто физически эти значения в конце будут меньше с умножением по дела Так оно работает 01 на 01 будет давать со со никуда от этого не деться вот поэтому Да с этим это тоже связано Но обычно стараются соблюдать всё-таки некоторые балансы Вот то есть баланс в плане того что стараются вот архитектуры про которую вы вчера смотрели Там в особенности resnet в целом resnet позволяет до

вот архитектуры про которую вы вчера смотрели Там в особенности resnet в целом resnet позволяет до 150 слоёв сделать так чтобы с градиентом всё было более-менее нормально дальше начинаются проблемы То есть вот самый большой resnet - это resnet в котором 152 слоя пробовали сделать resnet больше Но даже с учётом скип коннекшн уже затухающие градиенты Поэтому когда даже и мы применяем вот такую модель на своей задаче Нам очень эффективно размораживать вот здесь вот какие-то значения потому что вот

на своей задаче Нам очень эффективно размораживать вот здесь вот какие-то значения потому что вот они Да Градиент припёрся к ним буквально из функции потери но при этом Чем мы дальше начинаем как бы вот эту вот штуку тем меньше и меньшее влияние это будет оказывать на наше значение и тут ещ важно понимать что когда мы обучаем например только вот этот слой мы можем это сделать вот мы сегодня увидим там на третьей эпохе будет всё отлично уже Почему Потому что здесь очень мало параметров нам нужно

там на третьей эпохе будет всё отлично уже Почему Потому что здесь очень мало параметров нам нужно если параметров мало нам нужно мало данных чтобы модель натаскать чем больше параметров Мы размораживаем тем большее количество данных нам нужно потому больше нужно измениться для того чтобы прийти в какой-то минимум нам не хватит уже Там п картинок В каждом классе Вот и по этим же причинам если мы размораживаем всё то Извольте датасет на миллионы картинок на дата мы уже ничего не получим хорошего

всё то Извольте датасет на миллионы картинок на дата мы уже ничего не получим хорошего Спасибо Ой Тогда вопрос код сразу смотрим или перерыв делаем Мне без разницы если что давайте перерыв я завтрака хочу погреть О'кей Давайте тогда в 1036 встречаемся Давайте здесь же я сегодня не очень длинная поэтому обработает всё быстро Поэтому в 1036 встречаемся тут Спасибо Окей значит мы сейчас посмотрим как собственно взять обычные модели первое применить их просто на каких-нибудь картиночка посмотреть

собственно взять обычные модели первое применить их просто на каких-нибудь картиночка посмотреть как это происходит второе возьмём от этой модели отдели тот слой который там был и при собачи туда свой слой чтобы решить собственную задачу И третье посмотрим как размораживать веса на случай если у нас всё будет работать не очень хороо я уже здесь запу Установи по поводу импорт у нас новый такой модуль Input output это модуль tch вина с помощью которого удобно читать картинки с диска чтобы Ну

модуль Input output это модуль tch вина с помощью которого удобно читать картинки с диска чтобы Ну прочитать картинку с диска в общем много разных способов я использую сразу torch Vision потому что он читает данные в тенре вот можно это прочитать там из помощью библиотеки но потом придётся это всё переводить в нзр В общем я больше привык использовать tch Vision Но это не обязательно А импортируют для чего он сейчас нужен он мне нужен будет для того чтобы я мог конвертировать индекс класса в

для чего он сейчас нужен он мне нужен будет для того чтобы я мог конвертировать индекс класса в нормальное название человеческое класса а остальное в общем-то вам уже всё известно я сразу подключаюсь к видеокарте чтобы особенно не страдать и здесь я скачиваю Файлик этот Файлик содержит в себе собственно сопоставление а индекса класса и название класса из датасета imagnet я напоминаю dataset imagnet больше 17 млн изображений тысячи классов на нём предо обучаются большие модели которые вот были

больше 17 млн изображений тысячи классов на нём предо обучаются большие модели которые вот были которые создавались для задачи классификации картинок кстати говоря спойлер задачи классификации картинок в Ленинг решается точнее считается полностью решённый и сейчас с нуля эти модели никто не разрабатывает потому что они лет 15 назад превзошли человека в качестве определения классов и собственно сейчас эта задача решённая Никто над ней отдельно не работает но модели которые а о которых мы говорим

эта задача решённая Никто над ней отдельно не работает но модели которые а о которых мы говорим Сегодня мы будем использовать они используются в качестве таких строительных кирпичиков Для более сложных задач компьютер вина о которых мы будем говорить на следующей неделе посмотрим что в этом джейсоне мы видим что этот ДСО это фактически просто такой как бы питонов ский словарик Да у нас есть класс ноль у него есть кодовое обозначение и есть нормальное название класс 1 тоже какой-то его шифр есть

ноль у него есть кодовое обозначение и есть нормальное название класс 1 тоже какой-то его шифр есть название Ну в общем нам он понадобится для того чтобы понять что поэтому J мы будем сюда передавать индекс класса и доставать вот это вот человеческое описание которое для того чтобы понять что всё всё действительно Окей загружаем J я пишу коротенькую лямда функцию она будет приходить в переменную Lab То есть фактически вот в этот вот словарь а будет Оттуда будет превращать индекс класса число в

Lab То есть фактически вот в этот вот словарь а будет Оттуда будет превращать индекс класса число в строку потому что ключи в этом словаре - это строки и доставать первый элемент то есть вот этот вот элемент списка эта функция она Ну собственно на вход просто принимает integer то есть индекс класса и будет распечатывать нам нормальное название теперь загрузим модель в torch Vision есть такой модуль models и в нём хранятся архитектуры сетей и веса которые э-э можно скачать оттуда же вы можете

models и в нём хранятся архитектуры сетей и веса которые э-э можно скачать оттуда же вы можете здесь ткнуть на вот эту вот ссылочку прийти Вот сюда здесь есть пример того как загружаются эти модели и дальше есть такой э список моделей которые реализованы уже готовые которые можно скачать и применить в вашей задаче из того что вам здесь может быть известно здесь есть resnet здесь есть VG здесь есть alnet здесь есть dnet здесь есть Google Net который вчера Сергей писал Ну в общем готовые предо

alnet здесь есть dnet здесь есть Google Net который вчера Сергей писал Ну в общем готовые предо модель А я импортируют такой обращения к её весам и говорю что моя модель будет архитектура Con next тайни и веса conn тай тай - Это означает что это модель маленькая модели бывают по архитектуре как бы единообразный но среди них может быть маленькая модель может быть средняя модель может быть большая модель это можно сравнить с тем как вы вчера разрабатывали свои три модели а первая была совсем

модель это можно сравнить с тем как вы вчера разрабатывали свои три модели а первая была совсем маленькая вторая была чуть побольше третья была ещё больше вот у моделей которые предобработка но при этом иногда скорость важнее Я здесь загружаю модель тайне потому что мне нужно чтобы она быстро работала чтобы просто не тратить на время на её А ну как бы на на этот пример но в целом можно загрузить совершенно любую модель у нас скачалось 109 МБ весов то есть видите это Файлик pth в этом файли pth

совершенно любую модель у нас скачалось 109 МБ весов то есть видите это Файлик pth в этом файли pth находятся веса моей модели сам её класс задан вот этим а веса которые скачались Они здесь присутствуют вот в качестве 109 Мб мо на девайс эту модель на самом деле Можно также абсолютно распечатать как вы это делали когда пользовались своими сейчас давайте что у нас тут есть у нас есть свёртка перестановка каналов леер нормализация полносвязный слой функция активации полносвязный слой Ну то есть

каналов леер нормализация полносвязный слой функция активации полносвязный слой Ну то есть они все в принципе да мы не использовали перестановку каналов Но это вот тако Вот такая деталь Интересная у некста вот модель довольно большая Несмотря на то что оно тайне заканчивается она классификационным блоком ну нас сейчас это не особенно интересует главное что вот она есть всё всё с ней хорошо значит передаём модель на девайс я делаю фейковый батч у меня будет здесь четыре элемента в баче три

передаём модель на девайс я делаю фейковый батч у меня будет здесь четыре элемента в баче три канала и преимущественно эти картин эти модели обучены на размерах изображений либо 224 на 224 либо 299 на 299 Ну так стандарт просто сложился никаких там других объяснений этому Нет все привыкли реса картинки к определённому размеру я генерируют 224 на 224 из четырёх картинок цветных и отправляю всё это дело в Get Model summary вот Get Model summary мне собственно распечатывает сколько у меня где

это дело в Get Model summary вот Get Model summary мне собственно распечатывает сколько у меня где параметров мы здесь можем увидеть прекрасно что самый прож как всегда у нас полносвязный слой в НМ 38000 параметров и прямо за ним следует слой полносвязный в котором 2 милна параметров Ну вот такие вот они нехорошие полно связанные слои 28 млн параметров всего в этой модели все они как бы на данный момент предполагаются что они будут обучаться ност это будем отключать ние применения этой модели в

момент предполагаются что они будут обучаться ност это будем отключать ние применения этой модели в разархивировать вся модель как бы со всеми весами весит гигабайт то есть для того чтобы эту модель применить Вам нужен как минимум гигабайт оперативной памяти вот естественно те модели которые я не знаю кто-то Слышал сейчас вот Лама вышла на 405 млрд параметров вот там естественно нужно типа Аля четыре видеокарты для того чтобы эту модель вообще засунуть как бы чтобы она хотя бы запустилась Не

четыре видеокарты для того чтобы эту модель вообще засунуть как бы чтобы она хотя бы запустилась Не говоря уже о том чтобы её обучить скачиваем две картинки я подготавливаю сразу функцию resize это просто из torch Vision transforms буду рейзи 224 на 224 и читаю эти картинки с диска вот да функцию res я не запустил картинка Я указываю к ней путь картинки У меня скачались просто вот сюда у меня есть раз и есть два это попугай какой-то вот а я эти картинки с помощью метода read а Image Читаю а и

раз и есть два это попугай какой-то вот а я эти картинки с помощью метода read а Image Читаю а и делю сразу на 255 на 255 я делю потому что read Image будет читать их сразу как бы в измерении пикселей от ля до 255 мне это не подходит потому что у меня должно быть всё масштабирования я сразу делю их здесь на 255 теперь мне нужно эти картинки как бы распечатать потому что я хочу увидеть их в свом ноутбуке тут есть такая деталь опять Спасибо большое всем тем кто делает отдельные библиотеки так как

тут есть такая деталь опять Спасибо большое всем тем кто делает отдельные библиотеки так как им нравится чтобы распечатать цветную картинку ждёт вот такой вот последовательность то есть сначала высота картинки потом ширина картинки а потом Сколько у этой картинки каналов в Тор сначала стоит число каналов а потом ширина и высота соответственно чтобы этот тензор привести в вид который понимает МАПП нам надо вот эту вот троечку переместить на последнюю позицию чтобы был формат вот такой это можно

нам надо вот эту вот троечку переместить на последнюю позицию чтобы был формат вот такой это можно сделать с помощью операции м м принимает на вход тензор в котором мы должны сделать перемещение А в качестве второго аргумента типа В какой последовательности нам нужно новые каналы обустроить то есть создаём объект в котором будем рисовать картинку иш как вчера я вызываю говори Возьми мне первую картинку Вот эту вот и сделай так чтобы вот это у меня индексы как бы измерений 12 2 то есть 0 1 2 и в

Вот эту вот и сделай так чтобы вот это у меня индексы как бы измерений 12 2 то есть 0 1 2 и в юте Я указываю что тепер Навой позиции у менять измерение следующей позиции должно быть Вот это измерение А вот эта тройка которая под нулевым индексом должна оказаться в конце то есть я просто взял и переставил измерение которое касается числа каналов в конец После этого я могу без проблем распечатать собственно Что будет если этого не сделать Ну мы можем прямо вот этот м отсюда попытаться удалить и

собственно Что будет если этого не сделать Ну мы можем прямо вот этот м отсюда попытаться удалить и запустить так вот это тоже надо удалить всё plp plp Image пишет нам что invid Shape for Image Data поэтому это приходится делать отлично распечатали Сина и какой-то пернатый Дружба Сан сквизи вчера уже развлекались значит Давайте попробуем получить предсказание тут относительно такая видите сложная конструкция давайте мы её разберём прямо по шагам Значит первое что мне нужно сделать это отправить

конструкция давайте мы её разберём прямо по шагам Значит первое что мне нужно сделать это отправить те данные на которых я буду классифицировать на девайс То есть у меня в конце вот этого тензора должно быть написано девайс куда потому что моя модель на девайсе Я хочу пользоваться видеокартой теперь я хочу вот это отправить на вход модели но я помню что моя модель обучалась на четырёхмерный число каналов высота ширина чтобы на первоначальную пози постави изображения я должен здесь вызвать

число каналов высота ширина чтобы на первоначальную пози постави изображения я должен здесь вызвать операцию и на нулевую позицию поставить единичку смотрим на Супер получили Теперь вот это я имею возможность отправить в модель стираем пишем мо мне отдаёт сся предсказаний модель обучена Нате об каждому из классов я должен отсюда Найти максимальное значение а точнее его индекс потому что мне нужно понять Под каким индексом у меня стоит Максимум для этого я использую пишем 235 то есть моя модель

понять Под каким индексом у меня стоит Максимум для этого я использую пишем 235 то есть моя модель отнесла эту картинку к 235 классу чтобы вот этон из одного в Я записываю сюда ам получаю просто 235 Ну и я помню что 235 класс мне сильно ни о чём не говорит но вспоминаем что у меня есть функция которая будет декодировать мне индекс класса в нормальное его название поэтому здесь я могу Дописать декод это название моей функции и отлично Я понимаю что моя первая картинка - это немецкая овчарка Ну

это название моей функции и отлично Я понимаю что моя первая картинка - это немецкая овчарка Ну там было сложно ошибиться собственно говоря Теперь я понял как получать нормальное название класса поэтому я переношу ну Помните я Дед поэтому Model Dev пишу в каждой ячейке где подозреваю что это может быть полезно модель в режим валидации показываю картинку отрубают неё [музыка] оси это когда я модель применяю не Обучаю не Лидию применяю и делаю заголовок который будет доставать мне нормальное

применяю не Обучаю не Лидию применяю и делаю заголовок который будет доставать мне нормальное название класса пожалуйста моя картинка модель её обработала и я получил вот такое предсказание Костя у меня сложилось впечатление с прошлых лекций что и EV это одно и тоже Ну да здесь просто нося и Это то же самое что Model Evil И что там torch да да да да всё понял вот ну там какие-то внутри технические отличия есть они на самом деле что-то толком нигде вменяемое Но идея всегда такая Model Train

отличия есть они на самом деле что-то толком нигде вменяемое Но идея всегда такая Model Train когда мы модель обучаем Model AV п with torch noad когда мы модель Валиди когда вот всё Мы модель просто используем это with torch inference Mode вот такой логики можно придерживаться и всё будет О'кей Давайте вопросы вот по текущему луба если например у нас не одна и не две картинки а там их много закидываем то Придётся типа каждую менять в плане там где выше в коде было и Ну да получается гдето

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

это не бесит Что работает чуть дольше чем там привыкли то пожалуйста я не против хорошо идём дальше теперь хотим сделать следующее хотим взять предо модель и вместо того чтобы она нам на 1000 классов классифицировал будем решать задачу бинарной классификации сварим с 18 легендарная компактная модель работает Быстро качество вполне хорошее вот создаю новую модель resnet 18 веса resnet 18 default сразу отправляю на девайс Ну и естественно как всегда ещё 10 раз внизу тоже отправлю на девайс

сразу отправляю на девайс Ну и естественно как всегда ещё 10 раз внизу тоже отправлю на девайс отправляю туда фейковый батч вот моя модель resnet 18 значит 11 млн параметров почти в три раза меньше чем в предыдущей модели А и всё всё с ней в общем-то хорошо можем её распечатать и обычным способом просто написать модул и обратить внимание на то что мы собственно сейчас будем от неё отрезать вот эти все свёрточные блоки мы трогать здесь не будем мы должны прийти в самый конец и увидеть что в

эти все свёрточные блоки мы трогать здесь не будем мы должны прийти в самый конец и увидеть что в самом конце есть слой который называется FC Connect и что этот слой FC на вход принимает 512 а на выходе отдаёт 1000 мы вообще говоря сейчас будем решать задачу бинарной классификации поэтому э 1.000 нам совершенно ни к чему давайте мы попробуем к этому слою обратиться отдельно просто как к атрибуту модели запускаем видим пожалуйста модул точ FC вот он на вход 512 на выходе 1.000 А теперь давайте

модели запускаем видим пожалуйста модул точ FC вот он на вход 512 на выходе 1.000 А теперь давайте возьмём этот FC перепишем мы скажем что он был вот такой А теперь мы скажем что модуль FC равен NN line 512 на1 и ещ раз распечатаем на Один потому что бинарная классификация У меня сейчас будет распечатываем и видим на вход 512 на выходе 1000 всё отлично Всё ровно так как я хотел но вот в этой во всей сети сейчас параметры предоброе слое параметры случайным образом появились то есть там сечас

всей сети сейчас параметры предоброе слое параметры случайным образом появились то есть там сечас небные параметры Я его просто туда ВХЛ он ирова случай как мне сделать так чтобы в процессе обучения вот эти все параметры и выше были фиксированы а те параметры которые мне нужны нужны я буду обучать только вот это вот Короче у параметров есть такой такое свойство которое называется requ мы можем прорив ра равен это фактически в переводе на человеческий язык обучается ли конкретный слой вот сейчас

ра равен это фактически в переводе на человеческий язык обучается ли конкретный слой вот сейчас у меня все слои обучаются потому что у них поле равно но мы договорились что я хочу обучать только вот этот вот слой только последний все остальные должны оставаться неизменными поэтому я пробегаю вновь по всем свом параметрам и уж паме [музыка] теперь я сразу видите распечатываю Теперь у меня все параметры заморожены но мне нужно разморозить только те параметры которые должны участвовать в обучении

заморожены но мне нужно разморозить только те параметры которые должны участвовать в обучении я делаю Это очень простым способом так это уже даже не смешно это тот слой который я туда при собачи ве ра и FC requ ра То есть сейчас я параметры слоя которые я сам туда добавил сделал обучаемыми то есть запускаем эту ячейку и распечатываем ещё раз поле среди наших всех параметров тепер у менять кроме последних двух строк только последние две строки должны обладать свойством ра запускаем пожалуйста

последних двух строк только последние две строки должны обладать свойством ра запускаем пожалуйста параметры всех свёрточные слоёв заморожены параметры моего слоя который я туда добавил сам размороженный то есть теперь моя модель полностью готова Но мы сделаем этос в виде ласса мы это разобрали по шагам и объединим это поно в видела создаю класс myn конструктор говорю что моя S - Это мой сюда Это подгружается с слоем на 1000 классов с обучаемыми параметрами и так далее Я говорю Self Mod FC на

подгружается с слоем на 1000 классов с обучаемыми параметрами и так далее Я говорю Self Mod FC на тот слой который мне нужен пробегаю по всем параметрам замораживаю у него у них поле requ и жива только последние д СС и веса и теперь вот вот это вот это означает ровно тоже самое что мы сделали выше просто мы это делали с распечатывания каждого шага А здесь это делается прямо внутри конструктора класса и как моя модель будет работать Да очень просто ко мне будет приходить бач картинок я их буду

и как моя модель будет работать Да очень просто ко мне будет приходить бач картинок я их буду пропускать через свою модель и возвращать результат всё запустим также просто распечатать пожалуйста в конце должен быть line 5121 line 5121 это параметры будут обучаемый Костя чуть-чуть выше можем поднять код в класс там где мы погружаем модель и указываем веса точка Def это просто запомнить что это применяет по умолчанию к модели и вот эти веса скачанные это применяет к модели последнюю версию весов

по умолчанию к модели и вот эти веса скачанные это применяет к модели последнюю версию весов которая была опубликована на Ну в пайтор угу вот там просто когда модели выкладывают там иногда что-нибудь типа обучат а потом такие о Мы ещё обучили 10 эпох старые веса неактуальные Ну хотим добавить новые поэтому сделаю такое версионирование А когда вы пишете точка дефолт это всегда самые последние веса которые были опубликован Так ну всё отли модель есть теперь нам нужны данные я скачиваю датасет с

которые были опубликован Так ну всё отли модель есть теперь нам нужны данные я скачиваю датасет с котами и собаками дата с помощью Апа распаковываю мы это кстати довольно часто будем делать поэтому пару команд wget и unzip рекомендую изучить трансформации делаю для своего датасета буду всё рейзи и переводить в нзр то есть никаких аргументации делать не буду Хотя в целом как бы можно делать это не запрещено И теперь я вижу что у меня вот здесь вот появилась Папочка Cats and Dogs У меня есть

не запрещено И теперь я вижу что у меня вот здесь вот появилась Папочка Cats and Dogs У меня есть папка Train здесь есть Cats И док Ну можем какого-нибудь там что-нибудь посмотреть значит код прекрасно Заходим в dox Ну какую-нибудь вот эту вот Ну тоже вполне себе вроде собака теперь я хочу на этих данных обучить свои свою модель когда Мы работали во вторник и в среду у наве бы готовы мы сами ничего не делали для того чтобы они были готовы мы их Просто писали что у нас там если у нас картинки

не делали для того чтобы они были готовы мы их Просто писали что у нас там если у нас картинки собственные то и они уже находятся в подходящем формате то есть вот у нас есть папка с дасе Есть папка здесь по папкам классы распределены Есть папка validation здесь по папкам классы распределены если у нас в таком в такой Фоме в такой кре директори присутствуют дан иф мы ему указываем путь к папке внутри вот этой вот папки должен быть перечень директорий где каждая директория обозначает какой-то

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

как эти датасеты работают Вот с датасета в целом у людей возникают проблемы поэтому морально нужно быть к этому готовым что мы будем писать собственный датасет а но пока у нас всё в приемлемом как бы виде да то есть Рен validation всё по директория всё О'кей то есть мы тут как бы пользуемся встроенными встроенными благами pytorch Здесь тоже указываем transforms все наши картинки будут преобразованы к размеру и переведены в Тен можем распечатать этот Train dataset у меня 2.000 объектов Значит

к размеру и переведены в Тен можем распечатать этот Train dataset у меня 2.000 объектов Значит тут пишутся трансформации Кост а compose принимает на вход папку всегда нет папку с объектами как compose Да ну то есть смотри мы передаём здесь в ко для рейза инзера папку ему получается директорию ссылку Да путь к папки нет в compose мы передаём список трансформации вот а Image Fold принимает на вход путь вот путь Image Fold путь и что Что сделать с файлами лежащими в этом пути да да Угу Да всё

путь вот путь Image Fold путь и что Что сделать с файлами лежащими в этом пути да да Угу Да всё правильно ну там по типа по документации понятно что вот Root Блин что же ты пропадаешь Root Doc что-то там что-то там что-то там какие-то файлы То есть первый аргумент иф - это Root где искать данные В какой папке искать данные угу Там есть какие-то ограничения по Как называется по расширениям по расширениям насколько я помню Нет вот но не Ну в смысле он искать-то будет только графические расширения

насколько я помню Нет вот но не Ну в смысле он искать-то будет только графические расширения Угу А так нет файл он не будет воспринимать понял ну то есть с разными расширениями одинаково пройдёт res и да [музыка] да Так у этого это автоматически потому что по структуре директории сгенерировал нужный нам словарь что kats - это класс нос по алфавиту стоит выше чем dox поэтому он получил класс но dox получили класс о потому что ABCD соответственно первый встретил Скет класс но dox класс 1 был бы

получили класс о потому что ABCD соответственно первый встретил Скет класс но dox класс 1 был бы третий была бы третья Папка по алфавиту там я не знаю Да был бы класс 2 и так далее То есть он здесь нам автоматически ещ вот этот Чинг сделал что тоже удобно иногда мы будем делать собственные словари потому что не будем пользоваться встроенными клас не будем пользоваться встроенным классом ид Фора здесь я словарик сделаю который собственно мне будет по индексу класса возвращать его название также

я словарик сделаю который собственно мне будет по индексу класса возвращать его название также как я делал с Джейсоном выше но там-то я скачивал готовое здесь я его делаю Сам дауры без изменений всё как обычно меня я выход из своей сети не активирую сигмоида поэтому использую binary Cross entropy но with lits L Если бы у меня в конце стояла сигмоида после полносвязная я бы просто использовал bce L но так как данные выход Я не активирую сигмоида поэтому я использую специальную функцию потерь она

но так как данные выход Я не активирую сигмоида поэтому я использую специальную функцию потерь она внутри у себя сигмоида сделает Нафига она мне в модели мне в модели она не очень нужна Пусть внутри функции Потер будет происходить Ну что модель есть Данные есть оптимизатор есть функция потерь есть настало время обучаться я не буду комментировать цикл обучения он никак не отличается от того что мы уже 25 раз делали Ну ладно не 25 три раза но всё равно всё тоже самое абсолютно Как видите

что мы уже 25 раз делали Ну ладно не 25 три раза но всё равно всё тоже самое абсолютно Как видите собственно Несмотря на то что Обучаю я ну на не очень большом количестве данных это в общем рано какое-то время у меня требует ноу на первой эпохе на Валида части выборки у меня уже качество 95% То есть за счёт того что я моя модель уже знает на самом деле кто такие коты и собаки Просто она знает о них в разрезе ещё 900 с лишним класса но при этом Она прекрасно знает кто такие коты и собаки одному

в разрезе ещё 900 с лишним класса но при этом Она прекрасно знает кто такие коты и собаки одному полносвязный Ну и в общем тут я думаю что здесь это ещ наверное вряд ли какое-то сильное переобучение но как вы видите за три эпохи мы достигли довольно хорошего качества тоже самое можно сделать попробовать с той самой собакой Да которая у нас была выше это собака dog dog я это получаю с помощью своей своего словаря idx Потому что здесь я получаю выходы модели выходы прогоняю через сигмой чтобы

своего словаря idx Потому что здесь я получаю выходы модели выходы прогоняю через сигмой чтобы получить вероятность округляют Да обычное значение integer и обращаюсь в словарик который мне предсказанный класс индекс класс конвертирует в свою в своё нормальное название вопросы первый вопрос это если бы Например Мы например определяли типа не собака скажем там машины автобусы то там уже готовая модель для этого отдельно типа есть надо отдельно типа Именно для этого модель загружать Нет там вот на

для этого отдельно типа есть надо отдельно типа Именно для этого модель загружать Нет там вот на пайтор опубликованы все модели они все обучены на дас imet Но если тебя конкретно автобусы интересуют то там они есть Окей понял второй вопрос-то Для чего нам нужен был йк патч Кто йк батч для чего нужен был А да просто проверить посмотреть сколько у нас параметров в модели и всё такое типа имею в виду почему он фейк Ну потому что это ба просто это Матрица случайных чисел она Это не картинки Это

виду почему он фейк Ну потому что это ба просто это Матрица случайных чисел она Это не картинки Это просто подходящие данные для того чтобы я их прогнал через сеть и ну посмотрел что всё О'кей всё работает Окей понял всё это то что мы регулярно в tch запихивают вынес Кост попробую сформулировать у меня вызывают некоторые проблемы понимание того что ты делаешь в пред класс вернее когда ты это комментирует Это понятно но вот смотри как мне например самостоятельно делая там какую-нибудь домашку

Это понятно но вот смотри как мне например самостоятельно делая там какую-нибудь домашку понять Какие нужны обработки для того чтобы вывести точно значение для словаря нужно понять что отдаёт мне прет В каком формате выходят данные и от этого устроить цепочку преобразований которые должны меня привести к конечному числу да Ну если хочешь давай мы сделаем это прямо ещё раз по шагам Ну можем коротко пробежаться просто чтобы я понял что вышло и что мы с этим сделали давайте так а берём нашу модель

пробежаться просто чтобы я понял что вышло и что мы с этим сделали давайте так а берём нашу модель и AMG у меня уже отрезе Да значит смотрим что наша модель будет возвращаться так AMG тоже надо отправить видите тоже ошибка которая говорит нам о том что на разных устройствах расположены данные и модель первое 4D Input соответственно нужно сделать асзи делаем кзи но супер модель отдаёт какое-то непонятное число что нам нужно понять для того чтобы выяснить Что значит это число идм в нашу моде Ну

число что нам нужно понять для того чтобы выяснить Что значит это число идм в нашу моде Ну бы вроде бинарной классификации на выходе 5,9 смотрим У нас последний слой полносвязный значит это полносвязный слой отдаёт нам то что называется гитом то есть шансом того что принадлежит к определённому классу Но логит - это величина безразмерная Мы не понимаем где 4 с по 5 -1 что это всё значит для того чтобы это это значение привести в какую-то вероятность нам хорошо бы применить к этому к этой штуке

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

чтобы это округлить мы можем просто Дописать функцию теперь у нас должна быть единичка класс первый то есть мы масштаби округлили получили класс о но вот это вот всё нам нафиг не нужно нам нужно нужна просто единичка если у нас тензор состоит из одного элемента мы можем просто Дописать сюда Дописать сюда Всё мы получили единичку эта единичка Нас устраивает это класс О как бы нам конвертировать Ну взять вот этот вот словарь и про тя Может ошибка будет Нет смотрите до ВС то есть на самом деле

Ну взять вот этот вот словарь и про тя Может ошибка будет Нет смотрите до ВС то есть на самом деле первое что нужно сделать всегда это Отправить данные в модели и посмотреть что за выход Вот был бы там сейчас Вектор из де я бы понял что этот Вектор - это Вектор латов для одного из де классов Да значит тогда у меня логика не такая что сигмой там и раунд если у меня в название класс да спасибо стало супер понятнее Единственное что наверное с айтем не до конца разобрался вот на последнем этапе Я

супер понятнее Единственное что наверное с айтем не до конца разобрался вот на последнем этапе Я видел это как кортеж из там нескольких значений какой у нас девайс что я бы вот наверно интуитивно доставал бы там нулевой элемент а ам - это именно метод тензора который достаёт значение Да это метод тензора содержащего в себе только одно значение которые позволяет тебе не индексировать а просто прям выдернуть его сразу это НЗ типа состоит не из одного значения то тогда не очень понятно что ты

прям выдернуть его сразу это НЗ типа состоит не из одного значения то тогда не очень понятно что ты хочешь Да потому что ну тебе вот этот выходной в таком случае нзр Куда в кортеж записывать в список или куда-то ещё А когда число одно всё вполне Ясно атим забрать один элемент Круто Спасибо большое Люба вопервых хотела спасибо сказать за вопрос ответ очень полезно было У меня вопрос такого практического плана если допустим мы хотим какую-то модель специализирующуюся на Ну допустим там

практического плана если допустим мы хотим какую-то модель специализирующуюся на Ну допустим там определение опухолей на МРТ или что-то такое довольно специфическое То есть я так понимаю есть модели бесплатные наверное есть модели платные и на каких ресурсах их искать Нам ну грубо говоря не нак оже их искать тут ВС Это зависит очень сильно от специфики Вот потому что есть организации которые там медицинские модели например обучают и не выкладывают их Нафига им они потратили кучу времени и денег

модели например обучают и не выкладывают их Нафига им они потратили кучу времени и денег на обучение этих моделей они не считают нужным их выкладывать потому что они их используют у себя есть организации которые там делают например какую-нибудь хорошую архитектуру и веса этой архитек выкладывает Хотя саму архитектуру говорят вот на класная архитектура мы е придумали это надо искать на профильных форумах на профильных сообществах То есть тут никакого Ответа нет прямо идти вот я не знаю

форумах на профильных сообществах То есть тут никакого Ответа нет прямо идти вот я не знаю медицинский работник forum.ru и там спрашивать всё по-другому никак обычно в открытый доступ выкладывают только модели общего назначения то есть обычные на каких-то датасета Вот таких абстрактных которые просто в индустрии приняты для того чтобы сравнивать разные разные модели А так только в профильных сообществах Больше нигде луба для критери bce это именно он работает только для бинарных Да окей Саша

Больше нигде луба для критери bce это именно он работает только для бинарных Да окей Саша спрашивает Это уже сегментация идёт или нет ну нет не обязательно классификация тоже вполне используется Ну и сегментация конечно тоже может быть применена так Ну смотрите Я сейчас покажу маленький пример с разморозкой потому что там принципиально ничего нового нет просто возьмём модель которая задана самой архитектурой именно в коде чуть сложнее это будет модель которая называется mobilenet в целом Я

архитектурой именно в коде чуть сложнее это будет модель которая называется mobilenet в целом Я рекомендую про неё прочитать такую небольшую заметку она была создана специально для работы на мобильных устройствах и там Ну прикольно что модель не очень большая но при этом быстрая и точная Вот она конечно не может конкурировать какими-то гигантскими моделями но достаточно прикольная я её скачал видите всего 10 Мб я Напоминаю что первая модель весила 109 Давайте эту модель распечатаем посмотрим

всего 10 Мб я Напоминаю что первая модель весила 109 Давайте эту модель распечатаем посмотрим как она задана видите здесь ну такая более сложная вложенная архитектура то есть там мы сразу обращались например в modc вроде было сде и у этого блока есть первый подб в нём три элемента у этого блока р есть второй подб дальше у него опять какой-то блок потом нулевой элемент три слоя потом какой-то ещё один первый элемент Опять пять слоёв Короче говоря уже более вложенная структура такая сложная но мы

первый элемент Опять пять слоёв Короче говоря уже более вложенная структура такая сложная но мы хотим Что сделать мы как всегда хотим разморозить что-нибудь Значит первое что мы делаем - Это приходим вот сюда в фаер ф состоит из нескольких элементов То есть раньше у нас вместо этого выше был то есть мы сразу к нему попадали в слой А теперь этот фа это у которого есть под определёнными индексами определённые слои Поэтому чтобы обратиться как бы к конкретному слою мы что делаем мы во-первых здесь

слои Поэтому чтобы обратиться как бы к конкретному слою мы что делаем мы во-первых здесь пишем [музыка] под этим индексом мы должны прийти в тот слой который нам нужен То есть мы говорим что хотим например вот этот слой поменять 3 распечатываем вот он соответственно он у нас будет равен на вход 124 потому что там в том слое так сделано на выходе единичка можем это сделать всё это дело морозим и теперь переходим к тому что я хочу разморозить например параметры вот этого слоя для этого я должен

теперь переходим к тому что я хочу разморозить например параметры вот этого слоя для этого я должен прийти мол classifier но теперь ноль потому что это слой как бы под индексом ноль в дропа ауте обучаемых слоёв нет Hard swish - это функция активация в необучаемых слоёв нет поэтому я прихожу сразу вот сюда и видите здесь я делаю то же самое во-первых я беру Model classifier 0 Wi and be разра вот это вот потом я прихожу 3 это вот это а нет вот этот вот вот этот вот слой то есть нулевой слой вот

это вот потом я прихожу 3 это вот это а нет вот этот вот вот этот вот слой то есть нулевой слой вот третий слой в рамках этого и к примеру хочу разморозить ещ что-нибудь вот здесь вот ну тако вот у меня есть такое у меня есть желание Я помню что вот эти вот все проиндексированы блоки они у меня расположены в модуле в модуле то есть вот здесь вот это самый верхнеуровневый для этой модели блок поэтому я прихожу Mod features 120 requ Что такое 120 12 это Fe 12 То есть я разморозил сейчас вот у

я прихожу Mod features 120 requ Что такое 120 12 это Fe 12 То есть я разморозил сейчас вот у этого блока дальше Model feat 121 видите тоже ands это параметры Барма Я вчера естественно немного налу кавил в бар есть два обучаемых параметры Вот они немножечко вот это вот усреднение они его подгоняют как бы в средним ко всем бам потому что это же ба нормализация она работает в рамках одного Бано смою параметров она как бы усдт вот это вот усреднение на все Бачи Вот это на самом деле не очень важно

параметров она как бы усдт вот это вот усреднение на все Бачи Вот это на самом деле не очень важно просто в бар есть два обучаемых параметра этого достаточно и в БАМе я их видите тоже разморозил тут возникает вопрос А почему вр я как бы разморозил параметр А вот в этом слое я разморозил только если мы посмотрим почему я так не сделала потому что здесь в этом слое не используется соответственно я не могу его обучить я могу вместо этого слоя добавить слой с басо но конкретно у этого слоя обучение

могу его обучить я могу вместо этого слоя добавить слой с басо но конкретно у этого слоя обучение баса я включить не могу потому что его просто нет в этом слое Вот иногда в сверточных слоях игнорируют наличие баса потому что даже вго не будет Я рекомендую эту формулировку просто запомнить потому что я могу её сейчас за полчаса объяснить ваша жизнь не поменяется ровным счётом никак вообще Костя запамятовал кажется в плано связанных слоях мы не я по крайней мере не писал вчера позавчера by это

запамятовал кажется в плано связанных слоях мы не я по крайней мере не писал вчера позавчера by это дефолтный всё понял ты можешь его принудительно отключить F а включать его не нужно Так ну что давайте Вот это запустим мы разморозили ещё один блок бло в котором у нас есть свёрточные и свёрточные слой Ну и дальше тут соответственно можем это всё проверить теперь у нас не просто последний слой размороженное с слов ещё Да Саш давай сначала вопрос тогда А да я вот заметил что в большинстве всех

с слов ещё Да Саш давай сначала вопрос тогда А да я вот заметил что в большинстве всех слоёв моделей B равняются Фолс его отключают с чем это связано и почему возможно возможно ты знаешь почему было принято такое решение его отключать И на что это влияет Ну подразумевается что вот эти два А смотри здесь э в свёртка bas fse стоит только там где следующий идёт барм то есть вот у нас есть свёрточные слой здесь B fse здесь стоит bchn идём на уровень выше здесь у нас раз свёрточные слой два

слой здесь B fse здесь стоит bchn идём на уровень выше здесь у нас раз свёрточные слой два свёрточные слой и здесь не стоит B fse здесь B по умолчанию True потому что нету барм а здесь B fse А дальше бам подразумевается что если у вас идёт пара свёрточные слой бам то функцию вот этого баса сможет без проблем На себя взять бас Барма потому что барм - это операция которая усреднять если она усреднять то как бы дополнительное смещение выше не нужно потому что у вас эту же операцию сделает барм

то как бы дополнительное смещение выше не нужно потому что у вас эту же операцию сделает барм просто и всё Вот Но при этом если Барма за свёртка не идёт то ээ бас ставится в Тру вот просто некоторое переложение ответственность скажем так Хорошо я понял спасибо в целом Если вы в свёртки сделаете B True ничего не изменится Просто такая сложившаяся Практика это не то чтобы убьёт вам обучение или сделает обучение длинным или наоборот сократит обучение это просто устоявшаяся практика не более О'кей

обучение длинным или наоборот сократит обучение это просто устоявшаяся практика не более О'кей Давайте Пару слов про сохранение моделей значит как модели сохраняются вот у меня архитектура моей модели без разницы что она не обучена как Будем считать что она обученная Я создаю экземпляр этой модели Обучаю Лидию тестирую у этой модели есть тако такой метод фактически он означает что словарь FC нижнее подчёркивание оди веса FC нижнее подчёркивание свободный член вот он мой слой FC То есть

FC нижнее подчёркивание оди веса FC нижнее подчёркивание свободный член вот он мой слой FC То есть фактически Я просто сечас вот этот словарь сохра ВХ вфа следующим образом то есть забираем всю вот эту ботву и относим её Файлик напоминаю Файлик не стоит открывать нет Можете открыть но не ждите там ничего информативного для себя Теперь у меня мы можем даже это вызвать увидеть что здесь появился вот он Виго даже пото что он не понимает как это открыть можно появился вот этот вот топ если я хочу

он Виго даже пото что он не понимает как это открыть можно появился вот этот вот топ если я хочу теперь взять свою модель и отнести её на Рим Lead Мне нужны две вещи Мне нужна первое архитектура модели второе Мне нужен Файлик с Весами моей модели предположим что я это сейчас делаю перешёл в Stream Lead Что я должен сделать я должен во-первых задать архитектуру класса своей модели после этого создать экземпляр моей модели названия должны быть ровно такими же потому что там всё хранится в словаре

экземпляр моей модели названия должны быть ровно такими же потому что там всё хранится в словаре Если я сейчас название слоя поменяю он придёт в словарь не найдёт такого названия и скажет я не знаю что делать с помощью модуля Точнее с помощью модели метода я гость Сай словари с помощью метода навешивают которые я получил в процессе обучения вижу заветную фразу Это значит что мои веса повесились на слои которые есть в модели и распечатываю это ровно тоже самое что было выше теперь давам я

на слои которые есть в модели и распечатываю это ровно тоже самое что было выше теперь давам я сохранил модель значит сохранил её веса теперь я пытаюсь её развернуть в стрите у меня не получается идём сюда вот у нас модель как бы для которой наши параметры Вот теперь предположим что я допускаю в своей модели ошибку говорю что у меня на вход приходит 32 а не не 33 задаю класс модели весело пытаюсь навеси получаю ошиб значит пытался скопировать из чекпоинта чекпоинт это ве са моей модели а не

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

только потому что где-то в процессе вы накосячили нужно просто проверять код на котором вы обучали и код который Вы пытаетесь куда-то добавить там в streamlit в Telegram неважно куда то есть это из разряда я подкинул мячик и мячик точно падает вверх потому что Гравитация работает везде вот здесь тоже самое веса не подходят к модели потому что Вы точно где-то допустили ошибку какой-то несоответствие Костя А чтобы этой ошибки избежать можно в коде сохранять также модель через Model и потом её в

Костя А чтобы этой ошибки избежать можно в коде сохранять также модель через Model и потом её в Рите не явно указывать а подгружать её Ну обычно такие штуки сохраняются просто В отдельной паа То есть ты делаеш прямо вот эту аите туда копие итом ко делаешь что-то где-то На Стрим лите Ты прямо пишешь из моего файла импортировать лас Model всё то есть обычно их не сохраняют в отдельные файлы а просто берут прямо в пай файл Хаят Угу Угу Понял луба же по сути Ctrl C Ctrl V правильно там вообще же

берут прямо в пай файл Хаят Угу Угу Понял луба же по сути Ctrl C Ctrl V правильно там вообще же ничего менять не надо да по сути Ctrl C ctr V не то что ничего менять не надо а ни в коем случае ничего менять не нужно Окей то есть на самом деле Вот вот это же самая хрень то есть загрузка весов на модель это же абсолютно тоже самое что происходит под капотом вот здесь вот mobilenet V3 Small - это класс модели просто Он написан Так что мы можем здесь указать путь к весам и сразу загрузить веса

класс модели просто Он написан Так что мы можем здесь указать путь к весам и сразу загрузить веса потому что это модуль пайтор но происходит здесь всё ровно то откуда взять пти файл с Весами и так далее Это ВС одно и тоже просто там мы делаем руками потому что мы не разработчики пайтор А здесь это делается потому что это уже реализовано и всё так Ладно хватит лирики Что у нас сегодня по заданию По заданию собственном распаковать только последний слой Ну модифицировать модель под имеющиеся

По заданию собственном распаковать только последний слой Ну модифицировать модель под имеющиеся датасеты зафиксировать только для обучения последний слой потренироваться С распечаткой картинок и предсказанием как бы нормального класса над ней потому что у вас завтра проект и у вас завтра будет собственно постоянная эта задача вот картинка Картинку показать отправить в модель написать класс который модель отражает вот разморозить сравнить с тем как Т лучше размороженная модель или модель даже у

модель отражает вот разморозить сравнить с тем как Т лучше размороженная модель или модель даже у которой просто один слой обучается вот написать функцию Get prediction Ну это собственно то о чём я сейчас сказал и поскидали по А как сравнить качество модели с замороженное или нет Если мы будем проверяться просто на картинках там скорее всего и та и та модель будет говорить тебе да это со Ну у тебя в процессе обучения же метрики печатаются имеется в виду по меткам Да Дада по Метрика в процессе

в процессе обучения же метрики печатаются имеется в виду по меткам Да Дада по Метрика в процессе обучения так-то конечно ну не прогонять же там не Можно конечно в цикле всё прогнать Но это то же самое что у тебя в процессе обучения происходит Поэтому да Сравни имеется в виду по Метрика там и Лоса в процессе обучения У меня всё спасибо большое Давайте успехов будете получать картиночки сразу кидайте а то что скучно живём так боль вопрос у нас модель Дана какая-то уже с которой изначально

кидайте а то что скучно живём так боль вопрос у нас модель Дана какая-то уже с которой изначально работать нет модель не дана Я бы ну здесь написано можно взять любую из Я рекомендую как бы чтобы немножечко отточить всю всю вот эту штуку для хотите можете брать просто любую которую вот здесь найдёте но Я рекомендую всё-таки использовать что-то более-менее вменяемое потому что вот есть например Vision transform Это довольно большая модель она даже в маленьком варианте объёмная и обучаться будет

transform Это довольно большая модель она даже в маленьком варианте объёмная и обучаться будет долго то есть э среди того что можно попробовать использовать resnet а не знаю что тут можно dnet попробовать можно vdg попробовать вот ну то есть просто что-то не очень большое Видите вот у меня в примере resnet 18 А здесь есть ещё resnet 50 18 - это 18 слоёв 50 50 слоёв чтобы понять какие веса подгружать видите здесь есть прям такой ну как бы список да то есть вот у нас есть resnet у ренета Есть

видите здесь есть прям такой ну как бы список да то есть вот у нас есть resnet у ренета Есть какие варианты Ой а что 101 слой 152 слоя 18 слоёв 34 слоя 50 и так далее Вот то есть Выбирайте что-нибудь более-менее вменяемое по скорости отклика особенно тем если если кто-то планирует работать локально берите самые маленькие модели сегодня цель как бы это всё запустить и понять Как это работает сражаться доблестно за метрики сегодня не нужно Ну всё тогда успехов до встречи Спасибо

Я сегодня сразу буду показывать на коллабе Ровно такой же ноутбук лежит в репозитории Я его просто сюда загрузил чтобы подключиться к видеокарте в принципе сегодня не обязательно работать на коллабе у вас нормально будет обучаться и локально может быть самая последняя модель большая относительно она будет не очень быстро обучаться поэтому локально Если что сегодня вы решите работать на Кола то после того как вы с помощью вот файл и где тут это после того как вы загрузите сюда задание вам нужно

того как вы с помощью вот файл и где тут это после того как вы загрузите сюда задание вам нужно обязательно перед тем как вы начнёте запускать ячейки зайти в ранта или среда выполнения если будет на русском выбрать CH R Type и вот здесь вот выбрать ГПУ Вот это будет означать что ваш Кола подключ к видеокарте плюс колаба у него есть видеокарта минус он вас отрут Если вы будете слишком сильно наглеть поэтому Я рекомендую сегодня не очень сильно как бы его насиловать потому что он понадобится нам

поэтому Я рекомендую сегодня не очень сильно как бы его насиловать потому что он понадобится нам завтра А если вы завтра будете на нём ещё заблокированы то Ну будет сложнее чем если сегодня вы поработает в целом тут где-то можно посмотреть вот и видит Ну то есть с видеокартой он мне сегодня 3 часа ещ даст поработать поэтому тут Выбирайте самостоятельно но в целом Будьте готовы к тому что два-три аккаунта на коллабе придётся иметь в любом случае Вот потому что вас будут банить вы будете

два-три аккаунта на коллабе придётся иметь в любом случае Вот потому что вас будут банить вы будете переключаться на другой аккаунт вас будут банить там вы перейдёте на третий аккаунт и всё такое вообще у уважающего себя человека должно быть пять аккаунтов на коллабе вот тогда вы не будете знать никаких бед Да быть логи аккан значит я установил здесь уже библиотеку её нету по умолчанию в Кала смотрим импорты которые у нас тут есть импорты импорты что здесь я буду показывать на на вчерашнем

смотрим импорты которые у нас тут есть импорты импорты что здесь я буду показывать на на вчерашнем поэтому тут ничего нового нет из torch Vision Я тоже импортируют но вчера мы е использовали только для того чтобы пере данные я е Некоторое количество оттуда аргументации разных возьму здесь по ссылке Можно перейти и посмотреть какие аргументации есть тут прямо написано что вот там рандомная какая-то перспектива Да ну или там давайте на каком-нибудь остановимся типа случайным образом преобразовать

перспектива Да ну или там давайте на каком-нибудь остановимся типа случайным образом преобразовать так чтобы Вот появилась в изображении какая-то перспектива вот мы смотрим оригинальная картинка вот рандомная перспективы с несколькими параметрами разными Вот поэтому Какие аугментации применять Я думаю что на сегодняшней задаче Ну у вас там в одном из заданий есть перечень потенциально полезных поэтому Если захотите что-то добавить Просто вот по этой ссылке Посмотрите и впишите их в нужное место

Если захотите что-то добавить Просто вот по этой ссылке Посмотрите и впишите их в нужное место мы посмотрим куда Ну дальше собственно я тут этот Сайбер панк тему не использую потому что её лень ставить на колаб она не настолько полезна чтобы на это тратить время теперь нам нужно убедиться что у нас присутствует видеокарта то есть помимо того что у нас она вот здесь есть е е должен видеть есть такая команда её надо запускать после того как вы им портировали не делаете Как я и она нам должна

такая команда её надо запускать после того как вы им портировали не делаете Как я и она нам должна показать это будет означать что так это он всё-таки Я его не установил этот должен Нам показать пока пос того вот э стано покажет сейчас Поэтому пока двинемся Дальше девайсу я сразу присваиваю куда это означает что теперь моё дефолтное устройство на которое я буду всё переносить - это видеокарта считать буду на видеокарте и всё в таком духе загружаем nist Папочка указываю Data Train True download

буду на видеокарте и всё в таком духе загружаем nist Папочка указываю Data Train True download также как и вчера И теперь у нас отличие в трансформациях Вчера у нас здесь Было просто написано а теперь у меня здесь вызван такой й называется и ему на вход приходит список трансформаций которую он будет применять к изображением находящимся в этом датасете У меня здесь Случайный поворот стоит по умолчанию там по-моему 90 градусов надо смотреть документации не помню случайная перспектива на которую

там по-моему 90 градусов надо смотреть документации не помню случайная перспектива на которую мы сейчас смотрели на сайте пайтор после того как эта картинка будет повёрнута и как-то там отражена в перспективу я применяю к ней трансформацию тензор чтобы эта картинка стала тензоров Матис делает Так что все мои значения В этой картинке в этой матрице становятся от нуля до единицы И теперь я эти значения ещё и нормируют было в нуле а стандартное отклонение было в единице вот эти вот значения

значения ещё и нормируют было в нуле а стандартное отклонение было в единице вот эти вот значения среднего и стандартного отклонения они по понятным причинам известны для ста пото что уже миллиард раз обсчитали Естественно они заранее известны для множества Даев эти значения можно просто найти в интернете написав название датасета и добавив туда мин пробел если нам нужно посчитать это Ну предположим у нас какой-то собственный датасет который мы собрали самками эния такую вот команду у нас Train

у нас какой-то собственный датасет который мы собрали самками эния такую вот команду у нас Train dataset Data float ищем среднее ищем стандартное отклонение у меня здесь записан кортеж То есть у меня есть одно значение среднего и одно стандартное отклонение этих значений по одному потому что мои картинки одноцветные у них один канал они чёрно-белые для цветных картинок здесь будет сначала средняя для красного канала потом будет средняя для канала зелёного потом будет среднее для канала синего

для красного канала потом будет средняя для канала зелёного потом будет среднее для канала синего тоже самое будет стандартном отклонении потому что каждый канал имеет своё среднее стандартное отклонение у вас сегодня в задании эти средние стандартные отклонения уже будут вписаны но бывает такое что их Иногда нужно считать самостоятельно так там установился да установилось Давайте е раз я за соответственно деда можем двигаться дальше И теперь ещ раз создадим датасеты Да вот он мне говорит что

деда можем двигаться дальше И теперь ещ раз создадим датасеты Да вот он мне говорит что пропущена одна позиция типа количество градусов на которое я буду применять Random rotation возможно убрали параметр по дефолту Ну давайте я здесь напишу 45 Пусть мои картинки будут случайным образом Некоторые из них будут случайным образом пону на 45 Обратите внимание части датасета Я только перевожу в тензор и только нормализуют аугментации на валидация аугментация не применяется вот а идём дальше дата

и только нормализуют аугментации на валидация аугментация не применяется вот а идём дальше дата Лоры никаких отличий всё как вчера функция отрисовки графиков всё как вчера переходим к модели у меня называется класс CNN делаем конструктор и у меня будет первый свёрточные Это буквально будет Вот такая вот штука то есть вот даже даже вот такая то есть в этом свто слое что у меня есть видите как я его объединяют как правило сразу идут пачкой со своими слоями которые Ну с которыми они типа условно

объединяют как правило сразу идут пачкой со своими слоями которые Ну с которыми они типа условно дружат то есть мы должны будем что-нибудь свернуть что-нибудь активировать и применить к этому ы нело конструкции NN конф 1 н рылу н пулинг и всё остальное я имею в виду с помощью селф я беру и сразу этот свёрточные блок называю layer 1 и говорю что мой р 1 - это вот такая последовательная штука в которой сначала есть свёрточные слой потом есть рылу и потом есть пулинг в свёрточные у нас были на

которой сначала есть свёрточные слой потом есть рылу и потом есть пулинг в свёрточные у нас были на лекции мои входящие картинки чёрно-белые поэтому на вход идёт один канал на выходе Я хочу четыре канала То есть у меня будет четыре фильтра Создано для входящей картинки л Сай у моего фильтра будет у моих фильтров будет пять страйт единичка динг будет равен двум дальше результат этой свёртки у меня пройдёт через рылу и после того как я активирую это лу я возьму пулинг сл Сайм 2 и со Радом 2 то

пройдёт через рылу и после того как я активирую это лу я возьму пулинг сл Сайм 2 и со Радом 2 то есть первая моя часть которая на схеме у нас выглядит Вот так вот она Я применил какую-то сврт вот тут она Да вот она convolution в этом же Колю Я можно сказать активировал и применил вот этот вот пулинг то есть первые мои три слоя объединённые в один блок с помощью sequential второй мой слой выглядит очень похоже это Self L 2 N sequential свёртка на вход который приходит четыре канала потому что

очень похоже это Self L 2 N sequential свёртка на вход который приходит четыре канала потому что здесь на выходе было четыре на выходе хочу вос каналов size 5 й единичка Дин 2 Можно какие-то другие значения задать у меня это просто от балды взято свёртка пулинг третий свёрточные слой у меня свёртка на вход во потому что здесь было во на выходе 10 на выходе 5 ед [музыка] с пунго собственно всё всё так давайте вот здесь вопросы какие круто Я тоже думаю что всё довольно просто луба я тебя спугнул

так давайте вот здесь вопросы какие круто Я тоже думаю что всё довольно просто луба я тебя спугнул А в моменте У меня вопрос был на секунду просто опять вспомнить ди Рав 2 Значит мы создаём два слоя с нулями Да всё соответственно три вот этих свёрточные мой параллель это будет Вот эта вот часть но у меня здесь их изображено два я использую себя в модели 3 то есть вот эта часть - Это мой фичер экстрактор теперь я должен сделать классификационную часть или х моей модели или башку моей модели у

теперь я должен сделать классификационную часть или х моей модели или башку моей модели у меня будет полносвязный слой который на вход принимает 90 на выходе 16 Откуда эти 90 взялись Сейчас я покажу Откуда это откуда я их здесь сюда вписал первый полносвязный слой на выходе отдаёт 16 дальше я применяю дальше полносвязный слой который принимает на вход 16 на выходе даёт мне 10 Потому что у меня 10 классов 10 цифр 0 2 3 до де второй метод который за этова между моими слоями на вход будет

меня 10 классов 10 цифр 0 2 3 до де второй метод который за этова между моими слоями на вход будет приходить ко мне X это тензор и он будет теперь Более сложный формы чем был вчера у меня будет бач сайз который на Первом как бы в Шей этого тензора на первом месте будет 512 Это мой батч сайз на втором месте будет число каналов в каждой картинке оно равно единице у вас в задани будет равно ТМ потому что вы будете работать с цветными картинками ширина 28 это ширина моей картинки высота 28 это

что вы будете работать с цветными картинками ширина 28 это ширина моей картинки высота 28 это высота моей картинки кстати говоря наверное правильно всё-таки вот так сначала высота а потом ширина вот значит в свёрточные сети принимают на вход четырёхмерный объект сегодня это не очень важно а завтра это будет принципиально жно тем кто ниче не Поня с завтра будет тяжеловато Мы ещё раз вспомним это всё равно завтра Окей пришёл на вход вот такой вот тензор четырёх из четырёх измерений Я пропускаю

всё равно завтра Окей пришёл на вход вот такой вот тензор четырёх из четырёх измерений Я пропускаю его через первый слой пропускаю его через второй слой пропускаю его через третий слой после этого когда у меня есть выход с моей этоже сае его так чтобы сохранить Первое измерение Первое измерение - это Ба я его никогда не трогаю у меня сколько элементов в баче пришло столько элементов у меня должно сохраниться в любом случае я не могу по мере обучения сети на ходу менять число объектов в баче

сохраниться в любом случае я не могу по мере обучения сети на ходу менять число объектов в баче Поэтому в реше Я говорю что у меня Первое измерение остано таким же пнуть и выпрямить их в вектор потому что полносвязный слои на вход принимают только вектора теперь я этот выход пропускаю через первый полносвязный слой активирую сигмоида применяю ДП и пропускаю через второй полносвязный слой теперь вернёмся к вопросу Откуда я знаю что здесь на вход пришло 90 значит это можно несколькими разными

вернёмся к вопросу Откуда я знаю что здесь на вход пришло 90 значит это можно несколькими разными способами выяснить первый способ это вот тут вот использовать формулу которую мы видели на слайде после этого пересчитать её вручную для этого слоя и пересчитать её ещё разок для этого слоя это если вы хотите немного преисполниться но в целом я не очень рекомендую это делать потому что в свёрточные и было бы довольно скучно считать это для каждого слоя руками поэтому представим что язна мне

и было бы довольно скучно считать это для каждого слоя руками поэтому представим что язна мне приходит на вход То есть я знаю что ко мне приходит 10 матриц но Какого размера эти 10 матриц после ТХ свёрток я не понимаю потому что там что-то на сворачивалось какие-то динги были какие-то райды и всё прочее первый способ которым я чаще всего пользуюсь я пишу сюда какое-нибудь число абсолютно любое создаю экземпляр модели тся пото пока никакие данные чере моде передаю сюда модель эту модель сразу

создаю экземпляр модели тся пото пока никакие данные чере моде передаю сюда модель эту модель сразу отправляю на девайс и генерирует четырёхмерный который подходит мне по формату о одноканальные картинки 28 на 28 и отправляю всё на видеокарту запускаю у меня естественно всё падает почему всё падает потому что вот сюда вот яю это Като ч поэтому я иду в ошибку и смотрю две матрицы не могут быть умноже это то что мне нужно первая Матрица размера 512 на 90 пришла А пытаюсь я её умножить на матрицу

это то что мне нужно первая Матрица размера 512 на 90 пришла А пытаюсь я её умножить на матрицу полносвязная размера 18 376 моё рандомное значение на 16 это собственно Матрица параметров вот этого слоя Вот она поэтому что я делаю Яни что 512 - Это мой батч сайз а 90 - это как раз-таки размер моих данных после латона То есть каждый объект из моего Бача из 512 объектов каждый из этих объектов теперь равен вектору равному 90 Поэтому вот это вот 18.3772 второй способ я могу здесь даже собственно

равен вектору равному 90 Поэтому вот это вот 18.3772 второй способ я могу здесь даже собственно ничего не менять могу вот это вот всё дело Ну или Давайте сюда опять впишем какую-нибудь ерунду но я могу это сделать по-другому у меня метод фвар выполняет когда через него Данные проходят Он выполняет всё что в этом методе написано Я не знаю размер вот этого аута после шейпа поэтому сюда Я просто пишу Print запускаю Get 512 на 90 отсюда Я понимаю что 90 это то сколько должно прийти на вход вот

пишу Print запускаю Get 512 на 90 отсюда Я понимаю что 90 это то сколько должно прийти на вход вот этому слою ставлю 90 и вот этот Шей убираю всё я нашёл тот размер который мне Ну третий способ посчитать Или точнее третий способ запустить модель не считая этого Сколько им придёт на вход Lazy ленивый соответственно Lazy linear ленивый полносвязный слой на выходе это в аргументах этого слоя Я указываю только число выходных параметров Сколько идёт на вход он выяснит сам но если я создам такую

только число выходных параметров Сколько идёт на вход он выяснит сам но если я создам такую модель и пропущу через неё что-нибудь У меня всё сработает О'кей никаких проблем но пайтор мне здесь напишет фразу которую я вижу уже несколько лет предупреждение пользователю ленивые слои Under Heavy development уже они не знаю сколько лет Under Heavy development Поэтому если они у вас не работают типа это не наши проблемы это ну делайте по-другому Значит я не разу не видел чтобы где-то в готовых

это не наши проблемы это ну делайте по-другому Значит я не разу не видел чтобы где-то в готовых каких-то моделях или в каких-то публикациях или в новых там ну каких-то вот запрограммированных моделях чтобы там использовались свои то есть для суровых чуваков и поэтому ленивыми слоями Я не видел чтобы кто-то пользуется но собственно говоря вот три варианта как это можно выяснить первый вариант провоцирую намеренно ошибку и просто подменяет второй вариант в методе Вар пишем и из этого шейпа

провоцирую намеренно ошибку и просто подменяет второй вариант в методе Вар пишем и из этого шейпа выясняем Какой должен быть вход у плано связанного слоя Трей вариант который Я рекомендую меньше всего но пожалуйте тра использовать свои по архитектуре есть вопросы отлично Ну тогда дальше дело техники что создаю Адам Крос энтропия функция обучения Дана буквально вчерашняя ничего про неё говорить не буду Давайте запустим на три натри там уже не работает класс Отлично что мы с этой ошибкой

не буду Давайте запустим на три натри там уже не работает класс Отлично что мы с этой ошибкой столкнулись смотрите это ошибка с которой вы будете часто сталкиваться по первости я смотрю Это означает что какието что-то у меня находится на не на видеокарте соответственно если у меня данные и модель находятся на разных устройствах я не могу их между собой никак соединить потому что они просто в разных пространствах находятся раскрываем где у нас есть эта штука Ну или можно тем кто на пике моды

пространствах находятся раскрываем где у нас есть эта штука Ну или можно тем кто на пике моды можно зайти в gem и он вам напишет что вы должны там что-то исправить вот мы не будем нагружать процессоры гу посмотрим это возникает это возникает при запуске функции идём дальше yp равно Model samples смотрим Что может быть не так значит А в тот момент когда я отправляю свои объекты в модель у меня возникает ошибка ошибка связанная с тем что данные Ну в общем что-то находится на разных устройствах

ошибка ошибка связанная с тем что данные Ну в общем что-то находится на разных устройствах идём сюда видим что в общем-то Ну будто бы сэмплы отправлены на девайс лейбл отправлен на девайс получается что-то не так наверно с моделью Правильно Потому что ну если на видеокарте мои данные но при этом ошибка здесь у меня здесь только данные и модель Давайте смотреть видим что сюда вот какая-то модель передаётся Давайте попробуем перед обучением поставить мол Да к нам сюда приходит на вход модель и

передаётся Давайте попробуем перед обучением поставить мол Да к нам сюда приходит на вход модель и скажем что эту функцию запустить Вуаля всё работает ну собственно всё мне больше-то особенно нечего сказать сегодня ко если бы мы использовали B normalization Где бы онл коде Ну я бы его поставил наверно вот сюда на вход ему приходило бы четыре потому что 4ре отдаёт свёрточные слой бачишь нормализацию сегодня тоже Попробуйте но как бы да одна строка Ну получается несколько в нескольких то есть бач

сегодня тоже Попробуйте но как бы да одна строка Ну получается несколько в нескольких то есть бач нормализация Тогда и здесь и здесь и здесь то есть во всех свёрточная луба вопрос насчёт типа он вообще вообще всегда он используется получается ну в общем-то да да окей Не ну если у тебя локально работает всё с нормальной скоростью тебя всё устраивает то никаких проблем ты можешь это не использовать Ну просто мы будем время ну как как время от времени мы фактически на каждой неделе будем

Ну просто мы будем время ну как как время от времени мы фактически на каждой неделе будем использовать какие-то предо обученные модели которые большие для локального исполнения Поэтому будем пользоваться колам есть видеокарта Почему бы нам это не использовать Окей понял Ну вот у меня там какое-то качество что-то там растёт Короче говоря Ладно тут остановим 62 Пусть будет так значит мы можем некоторым образом взять какую-нибудь картинку из нашего датта и попробовать эту картинку просто запихнуть

образом взять какую-нибудь картинку из нашего датта и попробовать эту картинку просто запихнуть в модель и получить предсказание я возьму Случайный ба из своего трейдера соответственно первая часть этого Бача - это картинки картинки их будет 512 и True Label - это 512 лейблов для моего для моих картинок что я что мне нужно сделать значит Я перевожу модель в режим валидации и если я её применяю даже давайте сделаем так мы напишем здесь модный контекст нче модный with torch inference Mode inf Mod

давайте сделаем так мы напишем здесь модный контекст нче модный with torch inference Mode inf Mod это когда вы хотите вашу модель применить То есть вы её не обучаема ете ифм иренс - это когда вы обучили модель отдали её мне а я её только применяю я ничего с ней не делаю не Обучаю не Лидию не проверяю Я просто её отправляю условно говоря в прокш вот этот такой способ использование мова который подразумевает что модель сейчас будет работать просто вот на предсказание Мы её не обучаем давайте мы

что модель сейчас будет работать просто вот на предсказание Мы её не обучаем давайте мы посмотрим что у нас в этом баче прежде чем отправлять в модель смотрим Image Shape отлично запустим IM Shape 512 объектов в баче одноканальных 28 на 28 Давайте отсюда возьмём первый элемент отлично одна картинка чёрно-белая 28 на 28 теперь вот этот и0 мы отправим в нашу модель то есть пишем Mod im0 и дальше у меня есть какая-то хрень написана UN но то скажет мне что такое кзи И зачем я здесь это делаю Ну мы

меня есть какая-то хрень написана UN но то скажет мне что такое кзи И зачем я здесь это делаю Ну мы добавим единично измерение одно потому что мы тренировались пачками что е одно измерение Да правильно смотрите наша модель обучалась на данных четырёхмерный бач сайз число каналов ширина высота если я в модель попытаюсь отправить вот такую вот картинку но интуиция подсказывает что типа раз у меня одна картинка значит модель мне по одной картинке же тоже должна предсказание выдавать Но если я это

картинка значит модель мне по одной картинке же тоже должна предсказание выдавать Но если я это запущу то у меня возникнет ошибка причём эта ошибка Она не очень-то понятная потому что здесь опять речь идт о том что нужно Ну что-то в матрицах не то но на самом деле эта ошибка связана с тем что ко мне на вход пришёл объект неправильной формы если я сюда допишу операцию и скажу что на нулевое измерение То есть как бы перед вот этими 1 28 вставить перед единий добавит измерение перед всеми ними То

То есть как бы перед вот этими 1 28 вставить перед единий добавит измерение перед всеми ними То есть у меня будет выглядеть результат с помощью анзи Вот так и теперь эти данные подходят для модели Один элемент в баче этот элемент одноканальный его размерность 28 на 28 поэтому я достаю одну картинку добавляю ей измерение и делаю вид что у меня бач из одного объекта и отправляю её на девайс получаю предсказание у предсказаний предсказания мои Давайте посмотрим пред это тензор в нём 10 элементов

предсказание у предсказаний предсказания мои Давайте посмотрим пред это тензор в нём 10 элементов мы можем это посмотреть 10 элементов 1 на 10 я должен из этого Преда выбрать максимальный элемент то есть максимальный логит максимальный шанс того что моя картинка принадлежит к какому-то классу Чтобы это сделать Я использую амак запускаем тензор но но если мы вернёмся вот сюда вот к шейпу мы увидим что по нулевому измерению это наверное всегда будет Вот эта единичка правильно Ну типа потому что

что по нулевому измерению это наверное всегда будет Вот эта единичка правильно Ну типа потому что по умолчанию Дим Дим равен на интересно давайте сейчас Дим равен ноль посмотрим что он скажет видите тензор из нулей такое может быть кто мне может объяснить вот этот выход что здесь произошло Почему у меня здесь 10 нулей ну ни какому классу не принадлежит неправильно Давайте тут распечатаем что сейчас произошло Почему здесь Ну наверно создалось 10 отдельных Ну отдельных массивов из одного элемента

произошло Почему здесь Ну наверно создалось 10 отдельных Ну отдельных массивов из одного элемента и он из каждого вытащил индекс максимального и это но и вытянул Вектор правильно когда я сюда написал Дим равно нулю он СРО это какой максимум среди вот этих вот элементов индекс максимального элемента среди вот этого одного элемента нулевой он там единственный он же и максимальный здесь нулевой он же единственный он же максимальный поэтому сюда я допишу ном точнее вместо нуля равно едини и теперь

единственный он же максимальный поэтому сюда я допишу ном точнее вместо нуля равно едини и теперь он мне говорит что среди все всего вот этого вот [музыка] этого отрицательный отрицательный маленький в сотых Ну короче мы действительно видим что первый элемент максимальный если мы хотим это привести в вероятность мы можем сделать вот так Soft Мам 1 пожалуйста 12 Ну у меня модель Там две эпохи обучила поэтому то что она не уверена как бы это Окей 12% того что этот объект принадлежит классу но

поэтому то что она не уверена как бы это Окей 12% того что этот объект принадлежит классу но чтобы убедиться что всё правильно можем здесь выз сум и увидить что сумма правда равна единице Как нам софт мак и завещал хорошо Значит теперь здесь я получил AR Ну давайте для общности сюда напишем AR единица А что делает кто помнит шма достаём ключ значения Не ну ладно item достаёт мне из тензора просто FL если я напишу вот так вот это будет какой-то тензор нафига он мне нужен он там на девайсе где-то

FL если я напишу вот так вот это будет какой-то тензор нафига он мне нужен он там на девайсе где-то и всё такое если я к тензо из одного элемента применяю операцию item он мне возвращает обычный питонов ский фут Ну в данном случае in как бы неважно Теперь мы рисуем нашу картинку у меня картинка - это in0 да Я для неё получил там какое-то предсказание я вызываю IMG но и теперь нас встречает следующая очень удобная особенность перехода между пачем и малим впт либе если мы рисуем чёрно-белую

очень удобная особенность перехода между пачем и малим впт либе если мы рисуем чёрно-белую картинку то есть мы сейчас хотим нарисовать Вот эту вот картинку вот она это какой-то нзр да размера 1 на на 28 если мне нужно в матплотлиб нарисовать одноканальная картинка должна быть без вот этого измерения Потому что если картинка чёрно-белую матплотлиб не нужно говорить что она чёрно-белая при этом если она цветная ему нужно говорить что она цветная Ну вот такое такое вот сомнительное удобство

если она цветная ему нужно говорить что она цветная Ну вот такое такое вот сомнительное удобство Поэтому вот эту единичку Я тоже Ну иначе говоря можно здесь спровоцировать ошибку говорит инвалид shap 1 28 на 28 не знаю что это такое убираем вот эту единичку то есть индексирует La 8 я достал потому что у меня выше сохранены значения таргетом но тут мне моде током об поэтому Она мне отдала четвёрку она думает что вот эта вот картинка содержит в себе четвёрку вот с визуализацией в целом Мы ещё

она думает что вот эта вот картинка содержит в себе четвёрку вот с визуализацией в целом Мы ещё завтра будем работать поэтому сегодня это запутано выглядит это и правда запутано потому что вот это вот если у вас чёрно-белая картинка то мне не нужно знать что у неё один канал если она цветная то передайте мне эти три канала короче это тоже такая шиза небольшая Вот Но этому надо привыкнуть к сожалению по-другому не получится мы ещё на следующей неделе будем работать с другой библиотекой которая

по-другому не получится мы ещё на следующей неделе будем работать с другой библиотекой которая вместо RGB делает blue green Red то есть в обратном порядке и мы будем там этими измерениями жонглировать туда-сюда вот поэтому вот это это ещё детский сад Ну и всё наверное у меня Давайте вопросы сегодня нам нужно попробовать создать несколько свёрточные слоёв потом их пропустить через полно связанные слои И как быда я сечас открою ещё покажу Угу давайте сейчас может ещё там какую-нибудь одну эпоху

слои И как быда я сечас открою ещё покажу Угу давайте сейчас может ещё там какую-нибудь одну эпоху обучиться и последнюю финти флюшку я продемонстрирую Ну давай хоть одну ну видите как Нет не сильно быстро получается но у меня Басай большой поэтому в целом может быть с этим связано Хотя наверно вряд ли Ладно остановим Короче говоря тут мы что-то попытались напечатать предсказани и всё такое в пайтор можно тоже распечатать что же у нас есть между этих слоёв вот смотрите ко мне пришла восьмёрка

можно тоже распечатать что же у нас есть между этих слоёв вот смотрите ко мне пришла восьмёрка первый результат после свёртки моя восьмёрка с четырёх разных фильтров ста вот такой один фильтр е обработал Вот так второй вот так трей чет вот так после того как я применил лу у меня вот такая вот картина возникла то есть всё что меньше единицы зану всё что больше осталось после пулин качество сущест Ну как бы наше качество воспринимаемое нашими глазами снизилось и получились вот такие вот

сущест Ну как бы наше качество воспринимаемое нашими глазами снизилось и получились вот такие вот абстрактные представления после второго слоя свёрток Вот моя модель после второго слоя свто содержащего рылу И пулинг вот так вот моя модель видит мои мою входящую восьмёрку то есть вот что-то вот что-то такое ей даёт понять что это объект принадлежащий к определённому классу Ну на самом деле конкретно этому слою это ничего не даёт понять но эта информация переходит дальше и дальше следующий слой

этому слою это ничего не даёт понять но эта информация переходит дальше и дальше следующий слой как-то её преобразует для того чтобы получить нужный результат Ну и не знаю тут установлен torch viw Нет ну короче говоря если вот этот torch viw а установить то можно вот с помощью такого простенько кода визуализировать нашу модель здесь будет написано что какой размер тензора к нам идёт на вход что у нас есть вот sequential Блок из трёх слоёв дальше есть второй потом Есть третий после этого есть

у нас есть вот sequential Блок из трёх слоёв дальше есть второй потом Есть третий после этого есть операция Шей которая те самые матрицы 10 матриц 3х 3 преобразует в вектор 90 Ну в общем Граф нашей модели по-другому сказать сложно Окей задание задание сегодняшнее оно простенькое вам дан датасет cfr 10 тоже такой легендарный датасет цветные картинки плохого качества завтра будут качества получше сегодня нужно поработать с тем что есть там очень своеобразный набор классов самолёт пна конь код Я

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

этой аугментации успеет обучить модель реализовать вот такую вот модельку одна из первых свёрточные давала хороший результат и начала побеждать человека не побеждать человека а показала побеждать человека другая начала показала принципиальную возможность применения свёрточные для распознавания изображений автор этой модели сейчас глава отделение искусственного интеллекта Мета вот Ну естественно делал это он в рамках диссертации в бородатые года вот вопросы успехов пока А можно вопрос по поводу

это он в рамках диссертации в бородатые года вот вопросы успехов пока А можно вопрос по поводу сегодняшнего а поводу ближайшего будущего В четверг пятницу как ут РОИ зати кци домашек и проек завтра будет всё тоже самое лекция задание послезавтра будет с утра проект созвонимся буквально на 5 минут ответим на вопросы и всё потом проект а проект индивидуальный или коллективный не индивидуальных Я не люблю индивидуальные Я люблю коллективные всё понятно спасибо Угу класс Всё Давайте успехов Спасибо

люблю индивидуальные Я люблю коллективные всё понятно спасибо Угу класс Всё Давайте успехов Спасибо L

начинаем у нас следующая тема собственно Сегодня мы познакомимся со свёрточные слоями и посмотрим как обрабатывать картинки Ну и в общем любые на самом деле матричные объекты с помощью нового вида слоёв тут есть хорошая новость что мы наконец-то начинаем обрабатывать картинки по-человечески есть плохая новость что теперь параметров у этих слоёв будет очень много и в них будет относительно легко запутаться Ну по крайней мере первое время вот а значит что можно сказать Ну да в плано связанном

запутаться Ну по крайней мере первое время вот а значит что можно сказать Ну да в плано связанном слове у нас в общем-то всё было довольно легко У нас что было у нас было количество входных объектов Да сколько к нам приходит на вход И сколько нейронов Мы хотим в слой сколько мы хотим на выходе собственно на этом все параметры свёрточная заного слоя они для нас заканчивались теперь придётся некоторое мозговое усилия совершить чтобы запомнить что значит каждый из параметров вот а и собственно

мозговое усилия совершить чтобы запомнить что значит каждый из параметров вот а и собственно закончится Сегодня у нас всё тем что мы построим сеть которая будет по-человечески классифицировать изображения они будут уже цветные Пусть и относительно шакальные э в плане того что они будут маленького размера и на них будет иногда сложно что-то определить Даже если ты человек а не просто нейросеть Но тем не менее Постепенно будем размер изображений увеличивать И на самом деле в итоге окажется что

тем не менее Постепенно будем размер изображений увеличивать И на самом деле в итоге окажется что сам размер картинки - это неважно то есть архитектура будет оставаться примерно той же просто нам нужно будет параметр слоёв подгонять под нужный нам размер картинки очень легко представить в виде матрицы у нас вчера были чёрно-белые изображения как правило чем у пикселя более выраженное значение тем этот цвет который он представляет ближе к Белому но в случае чёрно-белых во всяком случае

тем этот цвет который он представляет ближе к Белому но в случае чёрно-белых во всяком случае изображений То есть каждый пиксель ваем как элемент матрицы как правило у нас есть такая ну ограничение что значение пикселя может находиться либо в интервале от нуля до единицы либо в интервале от нуля до 255 но само собой для того чтобы отправить что-то в нейросеть мы в любом случае не будем пользоваться вот таким Вот представлением потому что оно для нас неудобно нейросети не любят большие значения

вот таким Вот представлением потому что оно для нас неудобно нейросети не любят большие значения мы будем масштабировать все наши данные двумя собственно простыми способами у нас первый способ - это масштабировать данные в масштаб от нуля до единицы соответственно для того чтобы это сделать нужно просто все значения пикселей то есть всю вот эту матрицу просто поделить на 255 тогда у нас все значения будут от нуля до единицы Либо мы будем пользоваться вторым способом а второй способ

все значения будут от нуля до единицы Либо мы будем пользоваться вторым способом а второй способ подразумевает то что мы используем обычный стандарт скер то есть из значение каждого пикселя вот здесь у нас значение 157 мы будем вычитать среднее всей вот этой вот матрицы и будем делить на стандартное отклонение всей вот этой вот матрицы то есть будем фактически осуществлять обычные масштабирование которое Вам известно с первой фазы если мы переходим от чёрно-белых изображений к цветным

которое Вам известно с первой фазы если мы переходим от чёрно-белых изображений к цветным собственно с которыми вам задани сегодня нужно будет работать у нас логика остаётся прежней но теперь наша картинка представляет из себя как бы три матрицы то есть ну своего рода такой как это называется параллелепипед Да ну в общем случае параллелепипед если картинка квадратная то это будет такой у нас как бы кубик в котором первая первая Матрица будет отвечать за цвет красный вторая Матрица будет

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

смешение трёх этих цветов даёт нам какой-то произвольный цвет который мы видим на картинке дальше вот эти вот как бы пространственные измерения да то есть как бы то что имеется в виду в глубину я буду называть не просто цветами а каналами так принято говорить в глубоком обучении что наша Матрица точнее наша картинка - это некоторая некоторый многоканальный объект строго говоря неважно есть другие цветовые схемы которые там вы могли видеть под например smik э есть ещё какие-то световые схемы Ну

цветовые схемы которые там вы могли видеть под например smik э есть ещё какие-то световые схемы Ну короче там Те кто с фотографией работают они могут наверное их назвать штук пять но строго говоря Это совершенно неважно потому что мы можем представлять картинку любым способом а нам главное точно знать какое количество каналов есть в нашей картинке остальное остаётся абсолютно в той же логике в буквальном смысле ничего не будет меняться а для того чтобы понять как работает свёрточные слой нужно

смысле ничего не будет меняться а для того чтобы понять как работает свёрточные слой нужно понять как работает обычная операция свёртки значит свёртка - это в целом математическая операция она к картинкам Собственно как к таковым особенного отношения не имеет потому что её придумали совершенно для других вещей но просто картинки настолько хорошо вписываются в общую логику представления численного объектов что на картинке это естественным совершенно образом распространяется но при этом сама

объектов что на картинке это естественным совершенно образом распространяется но при этом сама операция свёртки - это алгебраическая операция которая там придумана очень давно и совершенно не для картинк для того чтобы осуществить операцию свёртки нам нужно как минимум два объекта значит первый объект - Это собственно тот объект над которым мы будем осуществлять операцию свёртки и второй объект - Это Собственно сам как бы оператор этой свёртки он может называться двумя словами иногда говорят

- Это Собственно сам как бы оператор этой свёртки он может называться двумя словами иногда говорят что это свёрточные фильтр я буду пользоваться термином фильтр Но это взаимозаменяемые как бы штуки иногда говорят фильтр иногда говорят ядро иногда на английском говорят кернел то есть ну собственно что тоже означает ядро и собственно значение вот этого вот фильтра они могут могут быть разными и какие-то из этих фильтров не знаю если кто-нибудь когда-нибудь брил изображение например ну просто мы

из этих фильтров не знаю если кто-нибудь когда-нибудь брил изображение например ну просто мы фильтр какой-нибудь в Фотошопе выбираем что хотим заблюрить изображение всё это происходит абсолютно при помощи фильтра то есть наш фильтр обрабатывает входное изображение и таким образом там появляется бр различных видов фильтров много но мы об этом чуть позже ещё я скажу несколько слов чит как осуществляется операция свёртки У нас есть входной объект над которым хотим совершить эту операцию и

операция свёртки У нас есть входной объект над которым хотим совершить эту операцию и предположим что у нас есть вот какой-то свёрточные фильтр нам не очень важно что конкретно в этом случае означают значение которые в нём находятся нам важно понять саму механику работы а в данном случае у нас размер нашего фильтра или размер нашего ядра или размер нашего керла равен трём это означает то что у нас три строки в нашем фильтре и три столбца размер фильтра может быть 1х о размер фильтра может быть

три строки в нашем фильтре и три столбца размер фильтра может быть 1х о размер фильтра может быть 2х 2 3х 3 4 на4 5 на5 В общем это параметр который в зависимости от задачи может варьироваться и он не обязательно должен быть квадратный мы будем работать с квадратными но технически никакого ограничения на то чтобы он был прямоугольный Нет просто это не сильно принято конкретно в области машинного обучения Как работает свёрточные свёрточная операции У нас есть входной объект Есть фильтр с помощью

Как работает свёрточные свёрточная операции У нас есть входной объект Есть фильтр с помощью которого мы хотим осуществить эту операцию мы можем себе представить что этот фильтр Мы позиционирую в левый верхний угол нашего объекта А дальше начинаем осуществлять просто операцию по элементного умножения -1 умножаем на -3 получаем -3 дальше нолик умножаем на нолик соответственно П 0 0 умножаем на единицу + 0 дальше -1 у 4 -4 нолик умножаем на 2 будет 0 едини умножаем на 2 будет П 2 Ну соответственно

+ 0 дальше -1 у 4 -4 нолик умножаем на 2 будет 0 едини умножаем на 2 будет П 2 Ну соответственно здесь будет -1 на 1 -1 0 на 2 0 ени на 5 будет равно 5 да соответственно После этого мы все вот эти значения складываем таким образом что у нас получается -3 -4 -7 -5 -6 + 5 -1 первый шаг нашей это обычная Линейная операция в которой мы перемножают из нашего фильтра и суммируем на самом деле если кто-то вспомнит Как работает полносвязный слой полносвязный слой делает всё тоже самое он перемножаемых

вспомнит Как работает полносвязный слой полносвязный слой делает всё тоже самое он перемножаемых перед на как бы нашу такую воображаемую позицию нашей свёртки на шаг вправо и начинаем делать всю Ту же самую операцию то есть мы соответствующие элементы которые попались в нашем следующем регионе друг на друга перемножаемых далее после того как первую как бы строку мы свернули Мы возвращаемся опять в левый в левый край нашего изображения но на этот раз мы сдвигаем вниз на одну позицию и делаем всё

левый в левый край нашего изображения но на этот раз мы сдвигаем вниз на одну позицию и делаем всё тоже самое по элементной умножения всех наших значений которые как бы совпали соответствующие между собой пройдя по всему изображению все матри это Нева прод по все матри результат свёртки то есть вот эта вот штука она называется результатом свёртки и здесь мы получили как бы агрегированная то есть в зависимости от того какие у нас коэффициенты будут Вот в этой в этом [музыка] свёрток то есть что

в зависимости от того какие у нас коэффициенты будут Вот в этой в этом [музыка] свёрток то есть что означает вот эта вот минус единичка минус единичка означает что в процессе обработки вот этого региона изображения или вот этого региона матрицы наш свёрточные минус единиц если это грубо сформулировать в терминах свёрточные Это означает что вот здесь вот наш вот этот вот фильтр не нашл никакой информации которая была бы ему полезна потому что условно это очень условно и очень грубо мы считаем

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

что ну во-первых естественным образом будут влиять наши входные данные но второе что очень важно будут влиять знани вот этого вот фильтра пото от того какие здесь будут значения мы будем получать в результате свёртки какую-то разную информацию о том что здесь будут за значения чуть позже Сейчас вопрос понятно ли механически Как работает операция свёртки м можно да да то что сказала оно понятно просто вчера когда я смотрела на видео там было написано что всё-таки это не поэлементное умножение А

вчера когда я смотрела на видео там было написано что всё-таки это не поэлементное умножение А типа матричное умножение Это неправда что ли или что смысле там был использован терми А чем это отличается это и есть поэлементное умножение до это точка по точечное умножение Короче мы перемножили вот эти матриц 3 на друг на друга Это обычное матричное умножение или нет ну это не обычное матричное умножение это именно ного На вот эту строку а результа Мирова А здесь мы делаем не так мы говорим вот

это именно ного На вот эту строку а результа Мирова А здесь мы делаем не так мы говорим вот умножай вот таким вот образом Да а просто Я дума раже хо с у нас отпечатка там по идее у нас результирующей до [музыка] прижался Ну к девятой к девятому Ну как бы к девятому рисованию вот это вот этих квадратов я мог уже не я про для себя Всё тогда ладно я не то чтобы сказать ошиб я понимаю Хорошо что бросилось в глаза Хорошо понял вот значит ну Таким образом мы бы обработали картинку в том случае если

в глаза Хорошо понял вот значит ну Таким образом мы бы обработали картинку в том случае если бы она у нас была чёрно-белая а в свёрточные если мы говорим о том что к нам пришла картинка цветная значит если бы мы посмотрели что к нам приходит цветная картинка то эта картинка разложилась бы на три канала Ну как не то чтобы она разложилась она по большому счёту и так уже разложено по трём каналам просто технически в виде матрицы Она выглядит как трёхмерный объект и для каж вот этого канала у нас

технически в виде матрицы Она выглядит как трёхмерный объект и для каж вот этого канала у нас бы появились собственные фильтры и каждый канал который у нас вот здесь вот присутствует то есть вот этот вот фильтр пробежался бы по профильному для себя каналу вот этот вот фильтр пробежался бы по профильному для себя каналу и третий фильтр пробежался бы по профильному для себя каналу в результате мы получили бы ну быт результата СВТ то есть тах обработанных представления И после этого все эти три

получили бы ну быт результата СВТ то есть тах обработанных представления И после этого все эти три результата как мы видим вот эти вот размеры одинаковые правильно все понимают да Ну типа сгенерирована потому что это один свёрточные не может быть разного размера фильтров То есть если у нас есть размер фильтра в свто слое Значит все эти фильтры одинаковые по размера размеры вот этих вот обетов тоже естественным образом одинаковы это разе того же изображения в изображении не может быть так что

естественным образом одинаковы это разе того же изображения в изображении не может быть так что красный канал например 100х 10000 а зелёный канал 50 на 50 это невозможно Поэтому вот эти вот матрицы которые являются результатами свёрток они тоже одинакового размера и в случае свёрточная нарисую просто будто бы здесь результат 2х Д То есть вот этот результат складывается с этим результатом с этим результатом и тут мы получаем Ну какой-то там 3X вот этот результат складывается с соответствующими

результатом и тут мы получаем Ну какой-то там 3X вот этот результат складывается с соответствующими результатами отсюда мы суммируем получаем здесь вот результат как бы левого правого нижнего угла Ну и ко всему этому ещё добавляется свободный член то есть свободный член у нас во всех слоях есть мы его даже если мы его видим он есть хотя мы можем его принудительно вырубать Но это неважно Вот то есть получается что если к нам приходит цветная картинка то для каждой картинки будет создан Для

то есть получается что если к нам приходит цветная картинка то для каждой картинки будет создан Для каждого канала этой картинки будет создан свой профильный фильтр И самое главное что возвращаясь немного к тому о чём я сказал вот здесь вот значит я сказал то что результаты нашей вот этой вот свёртки они будут зависеть входные данные нам даны мы ничего с ними сделать не можем они просто по факту У нас есть мы с ними должны работать но значение вот этого вот фильтра они будут влиять на результат

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

То есть если мы использовали классический подход компьютер вина вот в классическом подходе Давайте я покажу вам например есть такой фильтр который называется фильтр собеля или собеля пирата мы можем увидеть что вот у нас есть какая-то входящая картинка был такой чувак которого звали и он придумал фт картинки достать грани объектов то есть видите здесь есть какая-то грань у Я не знаю что это такое но это какой-то двигатель Ну дай Бог я не против А и у этого двигателя есть какая-то граница И вот

но это какой-то двигатель Ну дай Бог я не против А и у этого двигателя есть какая-то граница И вот собель придумал такие значения нашёл такие значения которые позволяют у этого объекта выделить границу то есть как фильтр собеля пробежался абсолютно той же а по той же механике которую я объяснял вот по этой картинке и на выходе отдал вот такой вот результат Мы видим что здесь с разной степенью успешности но тем не менее выделены границы объекта и какие-то области здесь например чёрные почему вот

но тем не менее выделены границы объекта и какие-то области здесь например чёрные почему вот вот эта вот область является чёрной потому что фильтр соли выделяет грани А вот здесь никаких граней нет то есть ну это просто какая-то вот область которой фактически для фитра собе отсутствует какая-то информация Прим это как бы готовая штука Да он там где он там 3 на3 да надо наверное вот сюда Да что Видите вот есть типа фильтр собеля или собель Фельдмана неважно Вот у него есть вот такие вот значения

вот есть типа фильтр собеля или собель Фельдмана неважно Вот у него есть вот такие вот значения То есть он придумал такой фильтр который умеет выделять границы но мы понимаем что у нас в зависимости от задач могут быть достаточно разные подходы то есть в каких-то объектах нам Например нужно выделять границы это поможет решать нашу задачу классификации в каких-то объектах мы будем вынуждены не на границах А ну не не к границам привязываться А например к каким-то другим содержательным признакам

границах А ну не не к границам привязываться А например к каким-то другим содержательным признакам изображения Да я не знаю у кота например есть какие-нибудь усы вот мы хотим чтобы наш фильтр умел находить эти усы нам без разницы что у кота есть какая-то граница у него есть какие-то более там для нас прикольные призна Вот и оказывается что значения вот этих вот свёрток они не обязательно должны быть какие-то фиксированные которые когда-то кто-то придумал А мы можем сделать вот эту вот матрицу

быть какие-то фиксированные которые когда-то кто-то придумал А мы можем сделать вот эту вот матрицу матрицей параметров которое в процессе градиентного спуска будет оптимизировать и мы будем находить такие значения вот этого вот фильтра которые позволит нам решить какую-нибудь сложную задачу и для може интуитивно как это выглядит Вот здесь Да потому что здесь мы можем вот прямо посмотреть Ага ну окей фильтр выделил какие-то грани но в процессе обучение нейросети какие-нибудь фильтры могут

ну окей фильтр выделил какие-то грани но в процессе обучение нейросети какие-нибудь фильтры могут находить какие-то признаки которые для нас совершенно не важны но при этом для того чтобы сеть хорошо решила задачу классификации они могут быть очень важны и теперь вместо того чтобы использовать жёстко заданный заранее фильтр с какими-то фиксированными значениями мы сделаем так что вот этот вот фильтр будет о в процессе градиентного спуска и пусть в НМ будут такие значения которые при обработке

будет о в процессе градиентного спуска и пусть в НМ будут такие значения которые при обработке картинок будут доставлять минимум нашей функции потерь Вот такая идея понятна Сергей вот в этом примере это просто ну Случайный пример абсолютно мы с какой це не для какой-то цели вот эти значе т я не помню кого что-то он делает но что я не помню у то есть там как бы у нас будут как готовые фильтры для определённых задач если мы знаем что нам нужно сделать так и касто которые Можем сами сделать в

для определённых задач если мы знаем что нам нужно сделать так и касто которые Можем сами сделать в принципе как и как и всё как и всё здесь на этой да Ну мы будем использовать только те фильтры которые будут у нас получаться в процессе обучения нейросети но в целом этих готовых фильтров тьма можно просто погуглить типа фильтр там для выявления границ Пожалуйста У тебя будет прямо матри есть значения которые это умеют делать а в примере ниже Вот с цветной картинкой там мы получается это тоже

которые это умеют делать а в примере ниже Вот с цветной картинкой там мы получается это тоже автоматически было подобрано типа там методом определённым вот эти фильтры А сейчас я про это скажу мы сейчас я вот сюда вернусь и про это скажу лба У меня вопрос как правильно выбирать размер фильтра Типа если он слишком маленький то у нас нормально же типа данные не запишу Ну никак это параметр обучаешься [музыка] тяжело можно но очень тяжело в целом какие-то значения типа от двух там до шести они

[музыка] тяжело можно но очень тяжело в целом какие-то значения типа от двух там до шести они скорее всего будут почти всегда тебе давать хорошие результ Окей Дима Вот как раз по карти которая на экране получается там исходное изображение Ну условно говоря трёхслойные там ЖБ да А результат О однослойный да но сейчас про это Я тоже ещё отдельно скажу Саш Да у нас получается вот мы инициализирует Ну они инициали ини инициали как со случайными значениями Вот как вот и такой вопрос как как оно

Ну они инициали ини инициали как со случайными значениями Вот как вот и такой вопрос как как оно знает Ну что вот условно нам нужно на изображении кота найти усы и как оно знает что нам нужно найти именно эту область Где усы кота как она будет ди Сложи Тае что она просто реагирует на усы то есть сама неть она собственно не знает что ей нужны какие-то усы но в определённый момент она пробежит по региону изображения в котором будут усы этого кота и в этот момент окажется что значение функции

по региону изображения в котором будут усы этого кота и в этот момент окажется что значение функции потерь серьёзно снизилось потому что мы перестали фильтру станет намного меньше то есть его значения не очень сильно поменяются и в процессе обучения просто са само собой так сложится что вот если фильтр раз нашёл какие-то усы для этого объекта значение функции потери оказалось маленьким Если значение функции потерь маленькое значит Градиент маленький если Градиент маленький значит параметры

функции потерь маленькое значит Градиент маленький если Градиент маленький значит параметры будут меняться очень мало их кое реагируют конкретно на онный призна Тони нужна какая-то всё равно разметка усов на предыдущих картинках Ну да Мы конечно прям усы не будем разме но в целом скатами с собаками мы да будем работать Хорошо Окей значит вот в таком случае смотрите у нас Что произошло у нас появилась некоторая картинка эта картинка естественным образом распалась на каналы и для каждого канала

некоторая картинка эта картинка естественным образом распалась на каналы и для каждого канала оден фильт В результате мы после получения результатов свёртки все их сложили добавили свободный член Получили один результат вот такой такая схема обработки будет в том случае если мы скажем что у нас есть NN в 2D это собственно ко 2D Почему 2D потому что фильтр имеет какие-то строки и Столбцы иначе говоря это Матрица мы сказали что на вход к нам приходит три канала и мы всегда должны указывать

говоря это Матрица мы сказали что на вход к нам приходит три канала и мы всегда должны указывать сколько нам приходит на вход каналов то же самое как ифр в полносвязная мы не можем там не указывать сколько нам придёт на вход мы должны сказать сколько признаков будет идти на вход и на выходе конкретно вот у этой ситуации мы сказали что мы хотим на выходе Out channels равный единице вот этот out channels это и есть вот этот вот результат й в нашем случае равен двум вот он Да каждая из этих

out channels это и есть вот этот вот результат й в нашем случае равен двум вот он Да каждая из этих фильтров 2 над то есть независимо от того что мы сказали что на выходе Мы хотим один результат парч понял что к нам пришло многоканальное изображение поэтому для каждого канала сгенерировал свой фильтр но так как мы сказали что мы хотим на выходе о э и мы получили вот он out channels - это ровно вот то что написано у меня вот здесь значение Ну случайным образом инициализирован соответственно Вот

то что написано у меня вот здесь значение Ну случайным образом инициализирован соответственно Вот это значение у нас одного канала вот это вот значение у нас Ой не туда я стрелочку нарисовал вот эти значения - это значения вот этого фильтра вот эти значения - Это случайные значения вот этого фильтра ну и соответственно третья Матрица 2х 2 - это значение вот этого фильтра и у нас ещё есть несчастный бас который Здесь представлен просто Одним числом Теперь у меня [музыка] вопрос Если я вот здесь

бас который Здесь представлен просто Одним числом Теперь у меня [музыка] вопрос Если я вот здесь поменяю значение на два Какое количество у меня станет фильтров сть п вот так Ну про шесть я ещё гипотезу могу понять опять откуда могло взяться Я думал типа вот три верхних потом снизу как типа ДД ээ а нет ё-моё Да мне кажется не поменяется количество фильтров наверное ну смотрите говорю что хочу на выходе два результата да то есть хочу теперь получить вот этот вот chann хочу не один получить а два

два результата да то есть хочу теперь получить вот этот вот chann хочу не один получить а два Значит Давайте его сюда Нарисуем и сделаем ревер инженеринг Что произошло Как получился вот этот фильтр этот фильтр получился в результате ну этот канал точнее получился в результате сложение трёх обработанных покана карти каналов картинки значит здесь у меня тоже будет какой-то сложение и тоже будет три объекта Да потому что три канала Като матри какая-то матри какая-то матри мы получили эти матри вот

объекта Да потому что три канала Като матри какая-то матри какая-то матри мы получили эти матри вот в этом случае с помощью персональных фильтров для каждого канала Значит получается что у нас будет раз фильтр два фильтр три фильтр но каналы для этих фильтров они остаются теми же самыми то есть мы фактически сказали что мы хотим сгенерировать ещё какой-нибудь вж на что вот эф станут усы кота из нашей картинки как-то найдут А вот эти вот фильтры новые вот в этот результат нам запишут не усы кота

картинки как-то найдут А вот эти вот фильтры новые вот в этот результат нам запишут не усы кота Я не знаю какое-нибудь ухо кота потому что это тоже может быть для нас важной информация То есть если я увеличиваю количество выходных каналов количество фильтров у меня пропорционально увеличивается Вот это всем понятно Если я 10 сюда напишу сколько у меня будет фильтров 30 30 отлично хорошо да ко здесь вычисление Бут параллельные или последовательные параллельно эти фильтры они никак не зависят

здесь вычисление Бут параллельные или последовательные параллельно эти фильтры они никак не зависят друг от друга Поэтому нам никакого смысла последовательно их выполнять нет Люба поняла то есть мы делаем разметку нам нужно именно на этой области в этом регионе получить хороший хорошую метрику Да нет мы говорим что на картинке код А вот Какие нейросеть найдёт признаки у этого кота это уже её проблема Ну вот ты сейчас говоришь что у нас может быть два выхода на одном мы получаем хорошие усы а на

Ну вот ты сейчас говоришь что у нас может быть два выхода на одном мы получаем хорошие усы а на другом хороший хвост кота То есть получается мы всё равно первоначально задаём как цель вот что этот регион изображения должен быть хорош ещё раз мы говорим что на картинке есть код вот разметка класс картинки ноль который соответствует коту нейросеть в процессе обучения должна сама найти какие-то признаки усы хвост глаза лапы Я не знаю шерсть что-то е Что позволит ей минимизировать функцию потерь то

усы хвост глаза лапы Я не знаю шерсть что-то е Что позволит ей минимизировать функцию потерь то есть мы не говорим что в этом регионе изображение усы и вот Найди мне фильтр который будет эти усы обнаруживать и правильно классифицировать мы говорим что на этой картинке код вот в процессе обучения сама подбери такие значения параметров которые позволят тебе хорошо решать эту задачу найдёшь усы О'кей нас они устраивают функция потерь маленькая нашла усы прекрасно нам без разницы что-то нашла нам

нас они устраивают функция потерь маленькая нашла усы прекрасно нам без разницы что-то нашла нам важна Метрика Вот то есть мы говорим что на картинке что-то просто что-то есть А что она найдёт это уже как бы её её проблема Паша тогда можно пример Вот ты говоришь что на выходе если у нас два результата либо 10 Какие какие это могут быть два результата например Ребят давайте мы не будем усложнять вот смотрите вы пишете полносвязный слой ското прило на вход результаты вот в этом 32 есть это вопрос

смотрите вы пишете полносвязный слой ското прило на вход результаты вот в этом 32 есть это вопрос был мой Да ну вот 2 дня описали нейросети какие результаты вот в этих тридцати двух Давайте более простой вопрос есть бустинг да какой-нибудь Cut Boost в нём N estimators равно 100 какой результат На пятьдесят седьмом дереве Только Бог знает Ну сложен ответить на этот вопрос невозможно Как будто и не нужно Ну в плане бустинга да Это скорее всего даже ну близко по крайней мере к невозможно Но самое

нужно Ну в плане бустинга да Это скорее всего даже ну близко по крайней мере к невозможно Но самое главное что ну как бы что здесь важно что это не то что невозможно Это просто не нужно моде Если вы решаете уравнение регрессии прекрасно берём коэффициенти смотрим У коэффициенти значение близко к нулю значит к нему пришёл признак который неважен Потому что если мы неважный признак умножаем на ноль он в результирующую сумму нам даёт ноль круто всё очень интерпретируемый бустинг и говорим А что у

он в результирующую сумму нам даёт ноль круто всё очень интерпретируемый бустинг и говорим А что у нас в каком-то дереве Хрен его знает что в каком-то дереве но какое-то дерево построи так что [музыка] минимизировать получили вот здесь вот какой-то результат свёртки какой здесь результат свёртки который позволил минимизировать функцию потерь всё То есть он нашёл какие-то значения которые делают функцию потерь меньше нам этого достаточно то есть нас как бы Наша задача это классифицировать Кати

функцию потерь меньше нам этого достаточно то есть нас как бы Наша задача это классифицировать Кати три что будет конкретно вот здесь вот усы кота или какая-то абстрактная картина кота которая что-то там позволила сети выяснить Но это такой вопрос очень философский вот мы посмотрим сегодня Что находится у нас будет многослойная сеть мы посмотрим что находится между этими слоями Ну там будет абстрактная хрень кото не очень нам понят но она понят с точки зрения вход дан зрение той функции потери

хрень кото не очень нам понят но она понят с точки зрения вход дан зрение той функции потери которую мы применили вот так а О'кей значит а а сколько у меня кстати Вот в такой если у меня здесь количество каналов выходное равно двум сколько у меня параметров будет в этом слои 24 6 на де Ну и свободные члены ещё а и свободные члены 27 тогда 6 на 4 п 2 да ещ один бас будет вот здесь вот все понимают Да вот на четыре Почему не понимаю ну размер Чему равен нашего фильтра Да поэтому поэтому наче раз

Да вот на четыре Почему не понимаю ну размер Чему равен нашего фильтра Да поэтому поэтому наче раз 2 3 4 5 6 каждый из этих п так как канал выходных плюс д параметра вс хорошо идём дальше значит Бывает такое что у нас как бы может быть ситуация в которой мы бы хотели например более полно обработать изображение что имеется в виду вот у нас есть вхо вот эти вот параметры они никогда в жизни не соприкоснуться вот с этими значениями понятно почему Да просто чисто геометрически они не впиваются в

вот с этими значениями понятно почему Да просто чисто геометрически они не впиваются в нашу матрицу соответственно вот эти два параметра они никогда не взаимодействуют например вот с этими значениями Почему Потому что последняя позиция нашего фильтра будет находиться вот здесь вот поэтому два знания кото в верхней стке в жиз придут Вот сюда Бывает такое что на краях изображения Мы например можем у нас может быть такая гипотеза что на краях изображения может быть какая-то информация и нам бы

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

и на каждом из этих квадратов мы будем бы рассматривать его как ка но при этом если мы просто нарезаем на квадраты у нас же может быть какой-нибудь Объект который вот Ну заходит как бы на две картинки Да но мы так случайно разрезали что вот он попал на край одной и на край другой в этом случае нам бы хотелось чтобы фильтр как-то более подробно всё-таки края изображения обрабатывали потому что в такой постановке в этом может быть смысл он не всегда есть иногда картинки отдельные и по краям

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

динг и этот динг определённым образом дополняет нашу картинку какими-то значениями в самом простом случае это эти значения Это просто такая рамочка из нулей что она нам позволяет сделать Она позволяет нам сделать так чтобы теперь первая позиция нашего фильтра она находилась не вот здесь вот да как было в примере выше и вот эти вот коэффициенты никогда вот сюда вот не перемножать А теперь первая позиция нашего фильтра будет находиться вот здесь вот и таким образом те параметры которые в обычном

нашего фильтра будет находиться вот здесь вот и таким образом те параметры которые в обычном случае не смогли бы соприкоснуться вот с этим они будут с ними соприкасаться то есть теперь вот эти 0,1 среагировать на Вот это значение потом этот фильтр сдвинется у нас ноль придёт Вот сюда 01 обработает 5 то есть Таким образом мы как бы позволяем нашему фильтру обработать края изображения динг может быть разным то есть не обязательно это могут быть нули про то какой ещё динг бывает Вы можете почитать

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

краях изображения Ничего особенного такого важного не будет Ну и второе на что может влиять динг он естественным образом влияет на размер свёртки Почему Потому что вот у нанга Это означает что у как здесь позиционируется знание вернули получили вот эту штуку два значения свернули получили вот это третий этап повернули умножили точнее четвёртый соответственно если размер входного изображения меняется первая позиция у нас становится вот здесь и соответственно теперь результат нашей свёртки тоже

первая позиция у нас становится вот здесь и соответственно теперь результат нашей свёртки тоже увеличивается то есть увеличился входной размер нашего объекта увеличился результат свёртки мы сделали больше шагов по этой матри в целом Ну динг обычно там какой-нибудь небольшой можно применять Максимум что сделает вам динг он ничего не поменяет Ну то есть Типа если он будет полезен и действительно на краях картинок что-то будет окей он он может добавить в качестве если на краях изображения ничего

краях картинок что-то будет окей он он может добавить в качестве если на краях изображения ничего нет а динг вы всё равно сделали ничего не произойдёт просто как бы будут нолики втора на самом деле уже третий первый это был Si это параметр который называется сй Что такое сй мы понимаем что в обычном случае переходя по картиночки мы на самом деле довольно избыточно проводим операцию свёртки имеется в виду что вот мы обработали здесь вот эти вот объекты и получается что если мы делаем шаг вправо

в виду что вот мы обработали здесь вот эти вот объекты и получается что если мы делаем шаг вправо на оди пиксель то мы попадаем вот сюда и вот эти вот значения мы строго говоря уже вот здесь вот обработали Да может быть не конкретно теми же коэффициентами но в целом этот фильтр уже ну видел эти значения Поэтому иногда делают страйт а именно шаг перемещения больше чем единичка Это означает что в таком случае мы можем например указать что страйт у нас равен двум и теперь обработав вот эту область

случае мы можем например указать что страйт у нас равен двум и теперь обработав вот эту область Мы переместимся не на один пиксель вправо а сразу на два то есть вот это вот всё будет как бы уже за пределами нашего фильтра Таким образом мы как бы сокращаем вот эту избыточность обработки определенного региона изображение нашим целым фильтром но как бы При этом могут возникать проблемы проблемы могут возникать примерно следующего характера что если у нас изображение собственно вот как в этом

могут возникать примерно следующего характера что если у нас изображение собственно вот как в этом примере оно не ну как бы не кратно наше шагу име нашего ф то вот тут вот мы уже не можем сделать шаг вправо Почему Потому что если мы сделаем здесь шаг вправо на 3 Это означает что у нас часть фильтра выходит за пределы изображения а если он выходит за пределы изображения Пато сделает очень простую вещь он просто скажет что он не будет это считать Точнее он даже об этом не скажет он просто не

вещь он просто скажет что он не будет это считать Точнее он даже об этом не скажет он просто не будет это считать и всё в общем и лом если это встречается бы в рамках того что например один или два пикселя с картинки 224 на 224 Ну скорее всего в этих двух пикселях вряд ли была какая-то супер Решающая информация которая прям Бустан нашу метрику и мы прям будем рады то есть скорее всего там Ничего такого особенного не было Поэтому если размер фильтра и его страйт не кратно размеру картинки обычно

особенного не было Поэтому если размер фильтра и его страйт не кратно размеру картинки обычно с этим ничего не делают Ну не кратно и не кратно как бы ничего страшного если Это принципиально оказывается важным то у нас есть три параметра какой которыми мы можем оперировать чтобы сделать передвижение нашего фильтра полностью вот кратная размеру картинки Первый Первый параметр который мы можем настраивать это динг мы можем попробовать добавить динг какого-нибудь размера и сделать так что Наш

настраивать это динг мы можем попробовать добавить динг какого-нибудь размера и сделать так что Наш фильтр будет отлично вписываться в нашу картинку Пусть и с Динго второе мы можем выбрать другой Si Потому что если у нас там Si 3 ну Давайте попробуем сделать Si 2 может быть он тогда впишется третье - это собственно использовать другой страй зачем ещё применяют страй собственно его содержательный смысл он заключается в двух пунктах первый пункт мы избавляемся от избыточности в обработке

смысл он заключается в двух пунктах первый пункт мы избавляемся от избыточности в обработке изображения как в случае вот в этом да Когда у нас дублируется и вот это вот на самом деле и второй пункт страй очень сильно снижает размер выходного объекта Потому что если у нас высокий страйт мы меньшее количество шагов делаем по нашей картинке меньшее количество шагов обозначает меньшее количество результатов умножений и сложений меньшее количество этих результатов умножений и сложений означает что

умножений и сложений меньшее количество этих результатов умножений и сложений означает что результат нашей свёртки будет меньше результат свёртки меньше надежда на то что обработан входящий объект был хорошо ВС равно сохра меньше результат значит меньше данных значит сеть поменьше Значит она быстрее работает быстрее обучается и всё такое Люба а вот скажи пожалуйста если у нас действительно картинка большая не принципиально если мы потеряем несколько пикселей и мы страй поставим больше чем

большая не принципиально если мы потеряем несколько пикселей и мы страй поставим больше чем размер фильтра будет работать и нам эти полосы пикселей не принципиальные то есть рч упростит такие параметры или даст ошибка Я никогда в жизни не видел чтобы так делали поэтому Предлагаю это проверить Я не знаю правда Сергей Паш Смотри ты сказал что вот можно увеличить там добавить динг увеличить или уменьшить размер Si и увеличить страй а какой тактики вообще как как правило какую тактику выбирают

уменьшить размер Si и увеличить страй а какой тактики вообще как как правило какую тактику выбирают сначала более тяжёлую модель ставят чтобы она всё посчитала а потом смотрит если там увеличить какой-то параметр чтобы ну уменьшить скорость обработки как от этого меняется результат или наоборот сначала более лёгкую делают а потом утяжеляют как бы да в принципе и та и другая стратегия вполне вполне приемлема Ну как правило стат обычно сначала модель полегче потому нужно получить какой-то

вполне приемлема Ну как правило стат обычно сначала модель полегче потому нужно получить какой-то бейслайн вот поставили модель какую-нибудь Кривова лёгенькая и просто смотрят увеличивается ли качество то есть начинаем с простого белай и развиваем пробуем какие-то идеи дальше понял Спасибо хорошо значит страйд параметр который обозначает шаг перемещения нашего фильтра по картинке Значит понятно что размер выходной свёртки будет зависеть от параметров нашего свёрток драт - это размер нашей

что размер выходной свёртки будет зависеть от параметров нашего свёрток драт - это размер нашей картинки K - это carnal size то есть количество размер нашего фильтра P Ping S Как посчитать а какой будет выходной результат свёртки в том случае если нам известно известен размер входной картинки и известна известны все параметры нашего свто слоя есть такая формула которой мы задаём параметр входящего размера входящего объекта вычитаем из него прибавляем два динга если он у на делим на размер й и

размера входящего объекта вычитаем из него прибавляем два динга если он у на делим на размер й и приемни по этой формуле можно определить какое количество какой размер результата будет у вас на выходе и по причине того что мы видим что в знаменателе страй его увеличение на один пункт будет очень серьёзно снижать размер выходящего объекта потому что он просто в знаменателе разделить на оди и разделить на 2 это сонно [музыка] хре понимаю почему страйт знаменатель а а почему динг в числителе динг

на 2 это сонно [музыка] хре понимаю почему страйт знаменатель а а почему динг в числителе динг же по идее делает ширину рамки почему он не в знаменателе не понял Ну не ширину рамки динг задаёт рамку То есть это не информативные пиксели правильно которые нам не нужны мы сейчас про что говорим про информативные пиксели или размер мы говорим про размер матрицы выходной правильно думала что Дин его наличие уменьшает размер выходной матрицы Дин может уменьшать размер выходной матрицы Я же показывал

уменьшает размер выходной матрицы Дин может уменьшать размер выходной матрицы Я же показывал пример вот у нас есть объект без динга да 3 на3 фильтр 2 над результат 2 на2 добавляем динг единий и у нас размер становится уже 4 на4 уменьшать размер то есть динг я поняла значит он это не отбрасываемая информация а это как ещё дополнительный объект идёт Да ну а как же он может быть отбрасываемой мы же его сюда как бы пристыковать быть отбрасываемой он наоборот как бы увеличивает размер нашего объекта

сюда как бы пристыковать быть отбрасываемой он наоборот как бы увеличивает размер нашего объекта значит я там неправильно поняла тебя хорошо спасибо спасибо Вот смотрите хорошая новость в том что эту формулу легко выучить новость в том что иногда этот вопрос задают на собеседовании вот я эту формулу Ну я её никогда не учил Просто я её много раз видел поэтому Ну я её более-менее помню А мы естественно я как бы никогда не считаю потому что у меня компьютер есть типа он мне сам Ну я могу шейп

я как бы никогда не считаю потому что у меня компьютер есть типа он мне сам Ну я могу шейп Распечатать и посмотреть какой там размер а поэтому запоминать мне кажется эту формулу не надо вот но тем кто любит Ээ как бы решать в голове подобного рода задачки можно запомнить значит следующая операция это у нас будет слой Ну в смысле в можно имплементировать и как слой и как обычную функцию это операция линга значит операция линга очень простая к нам пришёл результат какой-нибудь свёртки мы

операция линга значит операция линга очень простая к нам пришёл результат какой-нибудь свёртки мы применяем к ней операцию например Макс линга операция Макс подразумевает [музыка] займе определённый страйд обычно в Операции Макс пунга размер керла равен размеру страйда Это означает что если у меня л Сай равен д и страй равен двум то я позиционирую сначала своё окошко вот здесь вот и если это операция Макс полинга забираю отсюда максимум интуиция у нас такая же если у нас где-то в регионе

операция Макс полинга забираю отсюда максимум интуиция у нас такая же если у нас где-то в регионе свёртки результат свёртки появилось высокое значение Это означает что там на что-то среагировал фильтр То есть он свернул определенную область входящего объекта и дал нам какой-то высокий результат мы этот высокий результат забираем страйт у меня равен двум перескакивая сюда позиционирую окно Вот здесь забираем отсюда матрицу максимальное значение позиционирую здесь забираем 05 отсюда поем здесь

забираем отсюда матрицу максимальное значение позиционирую здесь забираем 05 отсюда поем здесь забираем 07 отсюда ма операция понижение размерности очень тупая потому что она собственно просто забирает максимум и больше ни о чём не думает сама эта операция и как бы сам этот слой необучаемый Он у него нет обучаемых параметров он просто берёт максимум из тех регионов ну которые попадутся ему в зависимости от кернел сайза и страйда аналогом Макс пунга который иногда тоже используется есть такой

от кернел сайза и страйда аналогом Макс пунга который иногда тоже используется есть такой слой который называется пун соответственно н будет не забирать максимум отсюда а будет складывать все эти значения делить их на количество и просто забирать среднее ну аналогия здесь примерно такая если мы забираем максимум Окей у нас здесь максимум если у нас в целом регионе есть какие-то высокие значения Ну тогда сюда придёт какое-то усреднённый мыз наме вот такой вот да там 0 Я не знаю максимум будет

Ну тогда сюда придёт какое-то усреднённый мыз наме вот такой вот да там 0 Я не знаю максимум будет там да Ну тогда усредненное значение его эти сеь сох Ещё немного уменьшит потому что просто остальные нолики но интуиция та же из региона изображения то есть из результата свёртки забираем какие-то наиболее выдающиеся В каком-то смысле значения либо в смысле Максиму ли в смысле среднем это то есть маслин не нужен больше ни Для чего кроме понижения размерности иногда когда у нас на вход приходит не

не нужен больше ни Для чего кроме понижения размерности иногда когда у нас на вход приходит не один такой канал Да а множество Вот таких вот каналов то есть приходит после свёртки там сказали Channel там равен 128 Да к нам пришло 128 таких матриц иногда используется схема которая называется glob glob очень про вго чтобы бежать каким-то окошком обычным Макс буллингом мы говорим А давай-ка ты возьми всю Вот эту вот входящую матрицу и забери из неё например максимум соответственно Сколько пришло

всю Вот эту вот входящую матрицу и забери из неё например максимум соответственно Сколько пришло каналов на вход да то есть вот в данном случае у меня in channels равно 3 значит из каждого канала будет взят максимум на выходе я получу три максимальных значения Сегодня мы с этими с этим слоем не встретимся но завтра мы его Увидим в Чуть более сложных идея GL Манга и Global пунга абсолютно такая же как у Манга и пунга но только ма работают локально в рамках каналов а GL работают ну Простите

же как у Манга и пунга но только ма работают локально в рамках каналов а GL работают ну Простите глобально я т не могу по-другому объяснить идея та же понижаем размерность Так давайте посмотрим на видосик один и сейчас будем как всегда играть в Поле чудес для начала я выключу звук чтобы прекрасная грузинская реклама шла в тишине Сейчас мы посмотрим как работает визуально как бы свёрточные слой какие операции там внутри могут быть и параллельно я ещё буду спрашивать вас что делает тот или иной

операции там внутри могут быть и параллельно я ещё буду спрашивать вас что делает тот или иной фильтр Значит у нас есть буковка А на вход и бежит какой-то фильтр размера 3 на3 у меня сразу вопрос Ну сейчас мы будем смотреть что там э что там будет отражаться в качестве его результатов и по вот этому результату нужно выяснить А какие признаки из этой буквы а этот фильтр пытается достать тот кто у кого есть гипотеза можете прямо сразу включать микрофон и говорить поехали диагональная линия может

кого есть гипотеза можете прямо сразу включать микрофон и говорить поехали диагональная линия может быть горизонтальная я бы сказал я бы сказал что можно ещё пофантазировать ну замкнутую область внутри линий нет границ нет перепад яркости во с чего на чего Ну зелёным с тёмного на светлый а красным со светлого На тёмный правильно То есть получается что когда у нас изменение цвета происходит с тёмного на белый наш фильтр реагирует Так что даёт нам большие Ну относительно большие положительные ния

на белый наш фильтр реагирует Так что даёт нам большие Ну относительно большие положительные ния уложите с белого На тёмный он даёт нам отрицательные значение то же самое здесь встретили Вот эту вот область буквы а с тёмного на белый начало меняться потом начало меняться с белого На тёмный соответственно вся вот эта штука красная В итоге действительно мы нашли в общем-то диагональные линии но здесь более точный ответ - это как раз изменение цвета видите у буквы а есть вот эта вот ну Поперечная

более точный ответ - это как раз изменение цвета видите у буквы а есть вот эта вот ну Поперечная черта когда фильтр по ней жал ничего не происходило никакого изменения цвета не было поэтому здесь фильтр просто не реагировал он здесь не реагировал в этой белой области абсолютно Так же как он не реагировал Вот в этой области потому что нету изменений цвета второй фильтр он выделяет самые яркие области Ну типа либо максимум либо ноль либо один белого или чёрного Красная для чёрного Зелёная для

Ну типа либо максимум либо ноль либо один белого или чёрного Красная для чёрного Зелёная для белого Нет ну как-то сумбурно можешь сформулировать бо более человечески Ну вот у нас получается тут либо чёрный либо белый эти цвета там от нуля до одного ну скалирование что-то похожее на переходы Но это перекладина конечно слишком Зелёная Ну смотрите здесь как бы есть два элемента важных на который нужно обратить внимание что у нас вот здесь вот да концам буквы а соответствуют зелёные вот этой

нужно обратить внимание что у нас вот здесь вот да концам буквы а соответствуют зелёные вот этой поперечные штуки соответствуют зелёные Но вот здесь почему-то красные надо на эти элементы обратить внимание это горизонтальный переход Света теперь Ну типа по вниз с много на нарот Ну в общем-то да да то есть там где у нас есть горизонтальная область с некоторым постоянством цвета у нас вот здесь вот видно пожалуйста вот она Зелёная балка буквы а здесь у нас нету переходов цвета горизонтальных

вот видно пожалуйста вот она Зелёная балка буквы а здесь у нас нету переходов цвета горизонтальных здесь значение отрицательные Да ну вот тут конечно не очень понятно что произошла кажется он делал ровно тоже самое что и прошлый фильт только тот делал по иксу А это по игре Она смотрит переход цвета вниз Вниз идёт вот эта Зелёная большая плоскость это белый поменялся на чёрный вот ну вот где у нас прямо по центру картинки дада да вот и поэто вверху вон это переход всё не Ладно я запутался Ну

нас прямо по центру картинки дада да вот и поэто вверху вон это переход всё не Ладно я запутался Ну ладно правдоподобно давайте следующая операция Это что такое Это операция какая была то что это на данный момент наши выходы это да я Проглядел операцию как камеру просто Ну вот вот входящий объект в нашу некоторую операцию вот выходящий объект из нашей операции Что произошло зелёный только забрал Давайте ми Нейро заб это пра размерность меняет А тут они одинаковые по раз Градиент направление не

Давайте ми Нейро заб это пра размерность меняет А тут они одинаковые по раз Градиент направление не положительное значение забрал Ну тепло теперь в терминах нейросетей а произошло Правильно мы все отрицательные значения откинули оставили положи не поменялась мы просто сказали что мы берм максимум из нуля и икса по каждому вот этому элементу матрицы Да это что такое Ну теперь точно пулинг точно пулинг Да мы взяли и пулинг надр нам максимумы там с каким-то окном Это неважно Можно конечно это

пулинг Да мы взяли и пулинг надр нам максимумы там с каким-то окном Это неважно Можно конечно это посчитать но просто с каким-то окном он наделал нарга нам положительные значения Ну собственно дальше что мы делаем мы у нас теперь есть два выходящих объекта и мы начинаем обрабатывать их следующим свёрточные слоем эти свёрточные слои уже работают как бы поверх тех признаков которые достали нам предыдущие свёрточные слои Ну собственно также как полносвязный друг за другом идут и каждый работает на

свёрточные слои Ну собственно также как полносвязный друг за другом идут и каждый работает на основе того что сделал другой сло даль мы опять приме какую-то репрезентацию вот нашей входящей буквы а и здесь уже можно увидеть некоторым образом ответ на вопрос должны ли были свёрточные слои достать нам Ну условные усы кота нет они должны были достать какие-то признаки из нашей из нашей входящей буквы а которые помогут тически нашла какую-то репрезентацию входящего объекта и дальше мы будем сегодня

а которые помогут тически нашла какую-то репрезентацию входящего объекта и дальше мы будем сегодня делать немного по-другому у нас не будет Вот таких шаблонов сравнения Да вот но в процессе обучения происходит именно это наши свёрточные слои делают какую-то репрезентацию классов Да усреднённый репрезентация классов буквы а вот они там были какие-то разные была какая-то разная буква Б Но в среднем Вот они в процессе обучения стали Вот такими то есть на выходе с какого-то слоя они стали Вот

Вот они в процессе обучения стали Вот такими то есть на выходе с какого-то слоя они стали Вот такими и потом когда мы получаем какой-то входящий объект наши свёрточные слои это объект обрабатывают и начинают сравнивать а каков шанс что этот объект вот соответствует какому-то из паттернов которые были получены в процессе обучения вот А ну тогда возвращаемся собственно на Минуте 38 Что произошло или 27 так 38 или 27 27 либо 28 27 или 28 где-то там вот здесь не ещё чучуть раньше вот после после

или 27 так 38 или 27 27 либо 28 27 или 28 где-то там вот здесь не ещё чучуть раньше вот после после линга типа он вот здесь как он типа проходит Это следующий свёрточные слой а абсолютно такой же просто у нас теперь два канала к нам приходила буква из одного Кана но е обработали два фильтра поэтому было два результата потом у нас ИТ следующий слой ему на вход будет приходить уже не in Channel не один а два потому что предыдущий отдал два Окей понял Значит Ну тут есть ещё ссылочка на github где

один а два потому что предыдущий отдал два Окей понял Значит Ну тут есть ещё ссылочка на github где есть классные анимации того как это работает Вот можете в них потом полетать здесь есть и варианты с Динго и варианты дам Ну короче говоря можно по влить если будет желание идём дальше Э давайте такой вопрос здесь написано умная формулировка к вариантные сдвиг но давайте мы представим следующее что у нас вот это вот это обучающая выборка А вот это это валидация выборка Наша задача

следующее что у нас вот это вот это обучающая выборка А вот это это валидация выборка Наша задача классифицировать собственно розу от ней розы какая проблема вот в этих обучающих данных есть которая может помешать нашей модели нормально обучиться цвета цвета И что будет если мы на таком даете обучим Ну да тут понятно что и в самом даете есть проблема но мы тут видим ярко выраженно в обучающей выборке преобладание красного цвета над остальными цветами по отношению к другому классу это будет

выборке преобладание красного цвета над остальными цветами по отношению к другому классу это будет означать что в процессе обучения модель будет вя очень весело Вена будет горий цвет в прония без разни на стебель на форму цветка красный цвет есть он выражен ВС Роза само собой ро бывают не только красные и в этот момент может произойти как раз вот эта нехорошая ситуация что модель по большому счёту это будет переобучения на конкретный признак Да на присутствие красного цвета Поэтому в нейросетях

это будет переобучения на конкретный признак Да на присутствие красного цвета Поэтому в нейросетях часто используется в СХ Ису такая Котова представить что у нас есть какой-то один ярко выраженный цвет и два других цвета Да ну мы сейчас предполагаем что это просто в рамках картинки трёхцветной и два других цвета имеют Ну гораздо меньшую выраженность и так примерно как с красным На прошлом слайде Что делает бач нормализация она берёт вот эти вот самые каналы Да у нас в данном случае три канала и

делает бач нормализация она берёт вот эти вот самые каналы Да у нас в данном случае три канала и внутри каждого канала проводит нормализацию это значит То что распределение света в каждом канале становится в центре равно нулю со стандартным отклонением равным единице и таким образом Если наша модель начинает реагировать на определённый цвет Мы перед следующим свёрточные этот цвет с помощью ба нормализации приводим их распределение к одному к одной форме и как бы не дам модели ша реагировать на

приводим их распределение к одному к одной форме и как бы не дам модели ша реагировать на конкретное цветовое представление что у нас изначально приходит трёхцветная картинка Да мы можем сказать что вот после того как мы какой-нибудь свёрточные слой применим на выходе У нас например будет 64 канала то есть что 64 канала Это значит что у нас будет 64 Вот таких прямоугольника и в теории возможно такое что какой-то вот из этих каналов он тоже будет слишком ярко выраженный Ну так просто может

такое что какой-то вот из этих каналов он тоже будет слишком ярко выраженный Ну так просто может произойти по разным причинам поэтому прежде чем отправлять как бы вот эти вот каналы на следующий свёрточные тоже будем применять ба нормализацию то есть между свёрточные слоями мы будем вставлять Ба нормализацию и это будет как бы нам помогать не позволять модели переобучить на конкретный какой-то канал или если проще на конкретный цвет Барма устроена Так что если у вас и так прихо изображение с

канал или если проще на конкретный цвет Барма устроена Так что если у вас и так прихо изображение с определенными цветами то Если вы это нормальные цвета изображения нормируется Ну то есть если у ваших цветов и так всё в среднем в нуле с каким-то стандартным отклонением Если вы к таким данным примените нормализацию ничего не изменится то есть ба нормализация точно не может сделать хуже Но лучше иногда может сделать тут может быть вопрос Типа возникающий время от времени встав нормализацию

иногда может сделать тут может быть вопрос Типа возникающий время от времени встав нормализацию потому что наша типичная последовательность она может быть типа свёртка потом мы нормали зру и потом как-то активируем например с помощью обычной рылу и вот ставить бач нормализацию до активации или после активации Это вопрос потому что даже авторы этого слоя собственно Сначала делали одним способом потом начали делать другим способом обоснования эмпирического что это нужно делать до активации точнее

начали делать другим способом обоснования эмпирического что это нужно делать до активации точнее фундаментального какого-то обоснование нужно это делать до или после нормализации нет до или после активации кто-то делает так кто-то делает по-другому в общем непонятно лучше попробовать и так и так но это в простом случае это может даже Никаким образом не повлиять на результат выходящий вот поэтому тут надо поэкспериментировать барм барм 2D означает то что будет работать как раз-таки на канальчик

тут надо поэкспериментировать барм барм 2D означает то что будет работать как раз-таки на канальчик двумерных а принимает на вход количество каналов по которым он должен нормализовать иначе говоря то количество каналов который отдаёт нам свёрточные слой так последнее Значит у нас картинки имеют нехорошую особенность быть снятыми например или представлены разными ракурса мы можем конечно фотографировать Какой какой-нибудь объект с одного ракурса но после этого окажется что если обет немного

Какой какой-нибудь объект с одного ракурса но после этого окажется что если обет немного сдвинут Ну если сдвинут ещ Ладно если этот объект как-то повёрнут или у нас присутствует этот объект не полностью на картинке Хотя это класс тот который нам нужен и мы ожидаем от модели что он будет Именно таким у картинок большая вариативность представлений и поэтому используется такой подход который называется аугментация аугментация - это процесс такого случайного внесения изменений ВБ который помогает

аугментация аугментация - это процесс такого случайного внесения изменений ВБ который помогает сети как бы В каком-то смысле понимать что картинки могут быть очень разные Значит тут идея примерно следующая у нас может быть фотография одной одного объекта Да и в процессе обучения перед тем как это эту картинку отправлять на вход сети мы будем её например поворачивать будем из неё извлекать какой-то Случайный регион чтобы Наша сеть концентрировать как бы и на деталях и на полностью этой картинки

Случайный регион чтобы Наша сеть концентрировать как бы и на деталях и на полностью этой картинки потому что иногда аугментация может ну не сработать в плане того что если мы вносим изменения в нашей картинке случайно то в какой-то момент картинка на неё ничего не подействует она в первозданном виде уйдёт в нашу модель на следующей эпохе обучения может получиться Так что эта картинка повернётся например на 90 граду этот бите Но это можно описать примерно давайте сейчас посмотрим иллюстрацию это

на 90 граду этот бите Но это можно описать примерно давайте сейчас посмотрим иллюстрацию это можно описать примерно так у нас есть фотография псины И если мы эту фотографию псины будем Аугментин получать Вот примерно такой результат то есть окажется что в какой-то момент мы скажем сети а вот если картинка повёрнута у неё Класс всё равно дог То есть ты должна понимать что картинка может быть объект на картинке может быть повёрнут при этом иногда может быть такое что эту псину мы Фи не в центре

на картинке может быть повёрнут при этом иногда может быть такое что эту псину мы Фи не в центре кадра как это было Вот здесь а скажем что вот она может к нам в объектив заглянуть и откуда-нибудь сбоку и ты тоже должна понимать что это собака этих собак может быть несколько и они могут быть расположены вот таким вот образом И это тоже попрежнему тот же самый класс дог в процессе обучения мы будем это делать как правило без аугментации не обучается ни одна модель которая работает Ну хотя бы со

это делать как правило без аугментации не обучается ни одна модель которая работает Ну хотя бы со сколько-нибудь серьёзным датасета понятно что числа МСТ можно там не Аугментин поэтому аугментация там вряд ли поможет с другой стороны как раз-таки датасет ини очень хороший показатель того что если аугментация будет неподходящей для наших данных то мы можем попасть в очень нехорошую ситуацию в мсте У нас есть например число Теперь давайте представим что у нас есть какая-нибудь случайная

в мсте У нас есть например число Теперь давайте представим что у нас есть какая-нибудь случайная аугментация которая нам говорит что это будет у нас какой-нибудь Random rotation Да Случайный поворот и этот Random rotation будет у нас например на 180 что может произойти девятка получится у нас получится просто девятка но при этом в процессе обучения модели Таргет то здесь не меняется получается что если мы слишком агрессивно Аугментин по по отношению к нашим данным то модели на вход пойдёт

что если мы слишком агрессивно Аугментин по по отношению к нашим данным то модели на вход пойдёт фактически девятка а в таргете мы ей будем говорить что это шестёрка в таком случае модель скажет что-то я не очень понимаю да Таргет шестёрка выглядит как девятка куда там что минимизировать в какую сторону функцию потерь непонятно Поэтому с одной стороны аугментация очень полезна и чаще всего особенно на сложных датасета она увеличивает качество Но если переборщить агта то можно нарваться на

на сложных датасета она увеличивает качество Но если переборщить агта то можно нарваться на пробле модель будет обучаться плохо а в некоторых экстремальных случаях не будет обучаться вообще аугментация только на обучающих данных на тестовых данных на валидацию не применяем мы хотим усложнить модели процесс обучения но не хотим усложнять процесс валидации потому что она должна в процессе обучения понять что объекты могут быть как-то по-разному представлены в процессе валидации мы данные не ауру

понять что объекты могут быть как-то по-разному представлены в процессе валидации мы данные не ауру собственно что мы сегодня будем делать мы будем строить такую модель Ну примерно такую количество слоёв и всё остальное как всегда будет на усмотрение авторов на вход будет приходить какая-то картинка эту картинку мы будем как-то сворачивать чем-нибудь зде пропу Черен мерность дальше мы будем опять применять операцию свёртки с какой-нибудь активацией например с рылу дальше мы будем опять делать

применять операцию свёртки с какой-нибудь активацией например с рылу дальше мы будем опять делать пулинг который уменьшит размерность После этого мы возьмём все наши результаты с наших свёрточные слоёв с пулин гов и так далее отправим всё это в афлан иначе говоря сделаем Шей всё это дело прикрути к полносвязная у которого на выходе будет столько нейронов Сколько классов у нас имеется в датасете Обычно такие модели принято обозначать как бы двух составными У нас вот эта вот часть которая

Обычно такие модели принято обозначать как бы двух составными У нас вот эта вот часть которая касается именно обработки непосредственно самой картинки она называется частью илито можете произвольным образом перевести на русский но я не буду говорить добыва призна есть работает с картинками и умеет извлекать какие-то признаки из этих картинок и вторая часть этой модели это ну классификатор Или иногда это называют Да ну то есть башка нашей модели которая не будет обрабатывать признаки изначальной

это называют Да ну то есть башка нашей модели которая не будет обрабатывать признаки изначальной картинки которая заберёт на [музыка] и выдаст нам какой-то результат Сегодня мы будем эти слои писать самостоятельно А завтра вместо них мы будем использовать большие предобработки у меня всё значит Давайте пробежимся ещё раз хотя наверное это можно сделать в самом конце свёрточные слой у свёрток Первый параметр - это число входных каналов Если этот свёрточные слой первый - это то сколько каналов у

параметр - это число входных каналов Если этот свёрточные слой первый - это то сколько каналов у нас в изображении цветное три чёрно-белое Один если этот свёрточные слой откуда-то из середины смотрим на то что ему отдаёт предыдущий свёрточные слой сколько он ему отдаёт столько следующему будет идти на вход полная аналогия с полносвязный слоем второй параметр это Out Channel сколько мы хотим репрезентаций нашего входящего объекта чем больше этих репрезентаций тем больше будет фильтров чем больше

нашего входящего объекта чем больше этих репрезентаций тем больше будет фильтров чем больше будет фильтров тем больше будет параметров чем больше будет параметров тем сложнее будет наша модель тем дольше она будет обучаться тем с более сложным дам она сможет справиться инту следующий важный параметр без которого не запустится сный слой это размер фильтра Я рекомендую держаться где-то в интервале от д до 6 в качестве веселья можете поставить размер фильтра 10 можете поставить его 15 можете

от д до 6 в качестве веселья можете поставить размер фильтра 10 можете поставить его 15 можете поставить его 20 но от х от ДХ до это самые распространённые ниях боши используется для того чтобы позволить фильтрам обработать края изображения иногда его используют просто в качестве технической характеристики для того чтобы манипулировать выходным размером свёртки потому что добавление динга увеличивает выходной размер для каких-то целей это может быть нужно Ну просто хотим чтобы вот у нас

увеличивает выходной размер для каких-то целей это может быть нужно Ну просто хотим чтобы вот у нас выходной размер был побольше Като частные обст по входящему объекту чем больше страйт тем более прорезаны мы обрабатываем картинку как максимум страйт обычно ставится не больше размера фильтра то есть чтобы когда наша наш фильтр бежит по изображению не сложилось в такой ситуации что вот это мы обработали потом из-за слишком высокого страйда перескочили и вот эту вот область не обработали поэтому

потом из-за слишком высокого страйда перескочили и вот эту вот область не обработали поэтому Обычно он ставится не больше размера фильтра для того чтобы понизить размерность наших данных мы используем Мак или aage Ping ма Ping забирает из указанного региона с помощью л сайза и страйда забирает максимум aage Ping соответствующий регион усреднять это нужно для сокращения размерности иногда моделям помогает бач нормализация слишком выраженная слишком выраженный цвет или какой-то какое-то явление в

бач нормализация слишком выраженная слишком выраженный цвет или какой-то какое-то явление в наших входящих данных может приводить модель в недоумение и она будет переобуться На этом как правило бач нормализация её косвенная такая косвенный плюс что она часто делает обучение А быстрее и это происходит потому что в каких-то случаях модели самой приходится разбираться с тем что какой-то цвет слишком выраженный и Ей приходится как-то с ним справляться бармалин образом эту процедуру просто берём и

выраженный и Ей приходится как-то с ним справляться бармалин образом эту процедуру просто берём и значение каждой матрицы нормируемое что вы делали с помощью обычного Стандарт скеле в целом все свёрточные вот эти штуки могут применяться в очень многих областях как я в начале говорил что свёртки придумали вообще изначально не для картинок свёртки могут использоваться Вот есть такой слой который называется конф 1d конф 1d - это вот такой вот Вектор если у нас есть какой-нибудь временной ряд

называется конф 1d конф 1d - это вот такой вот Вектор если у нас есть какой-нибудь временной ряд который у нас вот так вот да как-то расположен мы можем пожалуйста давайте мы будем Вот так вот бежать по нашему временному ряду и делать операцию свёртки есть прекрасная задача классификации временных рядов в ней свёрточные слои довольно широко используются если мы Придумаем как представить текст в виде удобного для ски текст - это последовательность каких-то слов мы можем сделать так что у нас

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

оно сконцентрировано на изображениях всё Люба ну мне интуитивно непонятно зачем делать при свёртки области которые накладываются друг на друга Если хочешь можешь не отвечать Но может просто так надо я это приму не пони Что значит фильтр мы накладываем с шагом например один и одни и те же пиксели обрабатывают один одни и те же цифры в матрице изображения обрабатываю повторно этим же фильтром только другим его краем Ну смотри вот у нас есть вот у нас есть вот этот зелёненький фильтр да Вот его

другим его краем Ну смотри вот у нас есть вот у нас есть вот этот зелёненький фильтр да Вот его коэффициенты каждый коэффициент уникален то есть мы получается у нас в случае страйда 2 коэффициенты вот из этого столбика обработают лежащую под ним лежащие под ним цифры входящего входящей картинки когда мы сделаем страй 2 эти же цифры входящей картинки обработают другие коэффициенты из этого ф другие коэффициенты Что означает поэтому некоторое перекрытие вс-таки имет смыс С шагом оди Ну кажется

коэффициенты Что означает поэтому некоторое перекрытие вс-таки имет смыс С шагом оди Ну кажется что это избыточно правда потому что картинка большая вот ну тут тоже надо как бы некоторым образом представлять себе входные данные у нас могут быть входные данные очень сильно детализированные то есть прям ВФ г у нас там картинка 100 на 100 и на этой картинке по центру стоит я не знаю башня одна башня вот во всю картинку Есть ли смысл прям по пиксель обрабатывать если слева и справа от этой башни

вот во всю картинку Есть ли смысл прям по пиксель обрабатывать если слева и справа от этой башни например какое-нибудь небо которое ничего нам не даёт Ну наверное тогда можно страй сделать побольше А может быть ий можно сделать побольше чем меньше объекта у вас на изображени тем как бы более детальным доже должна быть его если у вас рожа собаки торчит по центру картинки Да делайте 5 на5 и 4 всё будет скорее всего хорошо у меня ещё вопрос Вот я из сегодняшней лекции сделала Вывод что в основном

скорее всего хорошо у меня ещё вопрос Вот я из сегодняшней лекции сделала Вывод что в основном удобно рабо не то что в основном а работают вообще с квадратными изображениями те изображения которые не являются квадратными их обрабатывают по квадратно Правильно ли я это поняла будем их принудительно реть квадратному и последний вопрос Скажи пожалуйста сегодняшнее задание домашнее это мы будем делать то что вообще происходит под капотом на работе такое не делают Да но я же не знаю куда вы пойдёте

то что вообще происходит под капотом на работе такое не делают Да но я же не знаю куда вы пойдёте работать делают Почему не делают хорошо Спасибо всё у меня вопросов нет больше ой тогда 10 минут перерыв 105 новой ссылки и продолжаем

Сегодня мы посмотрим на самом деле не сильно связан с лекцией сегодня будет код у вас задание будет связано с лекцией а то что я сейчас буду показывать Это скорее такие общие вещи Пато и в целом машинного обучения поэтому про Ну как вы видели Просто все эти оптимизаторы они собственно задаются одной строкой поэтому мне сложно придумать какое-то задание в которое Вам нужно будет менять одну строку на другую я приду задани это вам прид делать Вот а я расскажу немного другие вещи значит мы сегодня

на другую я приду задани это вам прид делать Вот а я расскажу немного другие вещи значит мы сегодня разберём задачу первая наша цель - это разобрать задачу многоквартирная с сегодняшнего дня и до конца этой фазы буду сдавать модели в в рамках класса а не в рамках того делали вчера с помощью N сегодня вам это не обязательно делать сегодня нужно просто понять что понять с чем придётся смириться даже если вам будет очень тяжело работать с этими классами тем не менее есть просто вещи вот с которыми

если вам будет очень тяжело работать с этими классами тем не менее есть просто вещи вот с которыми проще смириться и всё-таки их использовать чем этого не сделать вот но для начала задача мгок классификации Значит мы будем классифицировать картинки те самые чи писаны Но сегодня Мы это сделаем таким туповатая их в вектора Вот то есть вместо того чтобы оставлять картинку картинкой мы будем делать из картинки длинный длинный Вектор где каждый компонент будет соответствовать пикселю и на этих

из картинки длинный длинный Вектор где каждый компонент будет соответствовать пикселю и на этих данных попробуем решить эту задачу из нового Что здесь есть есть вот такой Ир это набор функций математических в Пато собственно здесь больше нечего сказать всякие Корни Я не знаю там нормализации всё такое есть вот в этом модуле Мы оттуда сегодня несколько функций днем вчера был был из библиотеки это библиотека которая содержит в себе Некоторое количество полезных тук для рабо с картинками мыру

это библиотека которая содержит в себе Некоторое количество полезных тук для рабо с картинками мыру datasets в нём есть готовый вариант вот этих самых чисел чтобы мы сами их там не скачивали по папкам не распределяли он уже есть реализованный в tch вине И из torchvision torchvision transforms мы импортируем такую штуку которая называется to tenser Вчера мы для того чтобы превратить наши данные в tenser использовали функцию torch tenser А сегодня мы будем использовать вот такой класс он будет

в tenser использовали функцию torch tenser А сегодня мы будем использовать вот такой класс он будет для нас все картинки сразу переводить в нзр чтобы мы не делали это вручную так как это делали вчера Ну и всякие графики это то что вчера уже тоже было значит я из datasets загружаю набор данных говорю что хранить его нужно в папке Data он у меня вот у меня здесь есть папка говорю что это у меня будет обучающая часть переменная поэтому Train говорю что среди трансформации мне сразу применить Кати

обучающая часть переменная поэтому Train говорю что среди трансформации мне сразу применить Кати сразу стали нзм чтобы я потом по очереди их не переделывал в нужный тип данных и говорю что если у меня этого набора данных в папки нет то его надо скачать он автоматически скачает Ну наверно Я не знаю есть ли на гитхабе у нас эти файлы Ну нет они у меня таким утопленным шрифтом значит серым цветом значит нет он у вас просто скачает их в нужную папку которую укажете вот нулин создаю переменную val

нет он у вас просто скачает их в нужную папку которую укажете вот нулин создаю переменную val dataset скачиваю туда же говорю Train fse потому что это валидация часть и transforms тоже T то есть преобразовывать все свои картинки в T эту штуку мы запускаем и можем здесь посмотреть на шейпы у меня 60.000 картинок в датасете каждая картинка 28 на 28 это обучающая часть в валидации 10.000 картинок каждая картинка 28 на2 One Example это 28 на 28 то есть вот у меня как бы форма моих данных с которыми

картинка 28 на2 One Example это 28 на 28 то есть вот у меня как бы форма моих данных с которыми я буду работать под который я буду пилить свою сеть можно распечатать Некоторое количество картинок вот у меня здесь они распечатанные сверху подписан л Ну я думаю что этос вы если и не у нас на первой фазе то уж где-то вы его видели это картинки популярно создаём dat Loader у меня будет 64 Trader перем сюда задам и перемешиваем То есть у меня теперь есть два дара эти два Дара я буду использовать в

сюда задам и перемешиваем То есть у меня теперь есть два дара эти два Дара я буду использовать в процессе обучения Теперь давайте посмотрим как будет выглядеть собственно мой процесс обучения У меня есть тут такая схема значит что мы будем делать первое что у нас будет приходить из нашего дара то есть мы вот здесь вот эту сть мы уже сделали У меня есть множество Картино приветствует какой-то лейбел каждая картинка размера 28 на 28 и dat Loader мне уже здесь Дан я буду брать пачку батч сайза у

каждая картинка размера 28 на 28 и dat Loader мне уже здесь Дан я буду брать пачку батч сайза у меня батч сайз там 64 я буду брать пачку картинок и мне нужно будет для того чтобы передать эти картинки в полносвязный слой сделать из этих картинок Вектор полносвязный слой не умеет работать с матрицами То есть если вы полносвязный что типа у вас что-то не так с головой потому что он умеет обрабатывать только входящие вектора поэтому все свои картинки Я буду с помощью шейпа и там любых в общем-то

только входящие вектора поэтому все свои картинки Я буду с помощью шейпа и там любых в общем-то операций которые там могут быть удобные или которые вы вспомните я буду переводить каждую картинку в вектор размера 784 то есть ко мне будет на вход приходить 64 64 картинки каждый из них это 28 на 28 А я с помощью операции шейпа буду говорить что возьми каждую картинку и выпрями её в вектор То есть получается что вот этот Вектор длиной 784 будет первой картинкой в баче вот этот Вектор длиной 784

получается что вот этот Вектор длиной 784 будет первой картинкой в баче вот этот Вектор длиной 784 второй картинкой в баче и так далее То есть каждая моя картинка будет просто вытянута в вектор если кто-то помнит в есть такая операция или есть операция которая выпрямляет всё в вектор вот с каждой картинкой я должен буду сделать тоже самое про то как более человеческим образом работать с картинками мы поговорим завтра А сегодня мы будем подгонять данные которые у нас есть под те знания которые у

мы поговорим завтра А сегодня мы будем подгонять данные которые у нас есть под те знания которые у нас есть после этого я буду брать вот эти вот выпрямленные вектора картинки отправлять их в какую-то свою модель Ну то есть у меня будет какой-то там последовательность каких-то полносвязный слоёв функции активации ДПТ неважно главное что у меня теперь подходящий н на выходе сколько будет у моей модели на выходе нейронов кто может сказать 10 10 Ну 10 классов у каждого класса своя вероятность

модели на выходе нейронов кто может сказать 10 10 Ну 10 классов у каждого класса своя вероятность конечно на выходе у меня будет из моей модели 10 нейронов каждый Нейрон Будет отдавать мне информацию о том каков шанс того что эта картинка принадлежит определённому классу первый Нейрон будет говорить Какой шанс того что картинка принадлежит классу но второй Нейрон классу о третий Нейрон классу 2 и так далее То есть на выходе я буду получать вот такую вот табличку Ну матрицу если быть более

2 и так далее То есть на выходе я буду получать вот такую вот табличку Ну матрицу если быть более точным и в этой матрице первая строка будет будет содержать в себе шансы того что объект принадлежит определённому классу то есть классу но классу 1 классу 2 и так до де соответственно вторая строка будет тоже самое обозначать для второй картинки третья строка для третьей картинки четвёртой и так далее соответственно сколько у меня элементов в баче столько модель мне Будет отдавать то есть для

далее соответственно сколько у меня элементов в баче столько модель мне Будет отдавать то есть для каждой картинки я буду получать Вектор из дети компонент где каждый компонент обозначает шанс того что картинка принадлежит определённому классу легко догадаться что если я сес говорю о шансах то для того чтобы получить предсказание Мне нужно выбрать с ша правильно Поня интересует максимальный Шанс есть где модель уверена больше всего что объект принадлежит определённому классу Чтобы это сделать Я

где модель уверена больше всего что объект принадлежит определённому классу Чтобы это сделать Я буду применять операцию AR в отличие от просто операции Макс возвращает мне не максимальное значение а индекс максимального значения то есть Ма знание стоит потому что э позиция и будет означать класс к которому моя модель отнесла объект если я вот к такой матрице примен операцию AR я увижу что здесь у меня индекс 2 то есть модель считает что первая картинка принадлежит классу 2 она мне это эту

у меня индекс 2 то есть модель считает что первая картинка принадлежит классу 2 она мне это эту двойку запишет здесь класс 4 то есть модель выберет здесь четвёртый индекс здесь класс 3 выберет вот этот вот индекс то есть вот это это мои собственно э как сказать Э это это мои классы то есть вот модель считает что к ней пришло там какое-то количество картинок и вот после арг Макса мы говорим что да первая картинка - это двойка вторая четвёрка третья тройка четвёртая восьмёрка и всё прочее Теперь

первая картинка - это двойка вторая четвёрка третья тройка четвёртая восьмёрка и всё прочее Теперь когда у меня есть предсказание модели Мне нужно сделать две вещи первая вещь - Это посчитать собственно функцию потерь потому что я получил предсказание следующий шаг получение значения функции второе - это вычисление метрики насколько моя модель хорошо предсказала У меня есть таргеты то есть эти таргеты я буду сравнивать с вектором предсказаний и Буду считать насколько модель хорошо справилась

таргеты я буду сравнивать с вектором предсказаний и Буду считать насколько модель хорошо справилась значит в функцию потерь я буду передавать не вот эти вот полученные классы а буду передавать пря сырой выход модели то есть вот эту вот туку Почему Потому что точ он ждёт туда не предсказание классов он ждёт Вот эту вот матрицу то есть матрицу в которой все шансы обозначены Вот эту вот штуку когда я уже выбрал из этой матрицы максимальные элементы и для меня это уже теперь просто предсказание я

я уже выбрал из этой матрицы максимальные элементы и для меня это уже теперь просто предсказание я буду отправлять в метрику а метрику я буду считать также пролетарски как мы это делали вчера никаких элёр метрик и всё всего такого будем брать Вектор наших предсказаний поэлементно его сравнивать с вектором таргета там где будет значение равно там будет True там где будет значение не равно будет fse соответственно дальше мы всё это суммируем делим на число попыток получаем E вот а значит что

fse соответственно дальше мы всё это суммируем делим на число попыток получаем E вот а значит что здесь важно понять Вообще во всей этой схеме мы будем с ней работать на самом деле часто и Завтра и послезавтра у нас отсюда операции будут встречаться но первое что мне нужно обязательно мои картинки зашей то есть сделать из каждой картинки вектор и второе что функцию потерь я отправляю вот это вот распределение предсказаний которое отдала мне моя модель то есть арг Максом я буду считать уже как

распределение предсказаний которое отдала мне моя модель то есть арг Максом я буду считать уже как бы всякие значения для своих для своих вычислений для метрики и так далее но функцию потерь я буду отправлять Таргет и буду отправлять вот эти вот сырые предсказания модели Костя а критерий не будет ругаться на разные шейпы нет у нас кстати какой будет критерий здесь энтропия энтропия Да Крос энтропия устроена Так что она ругаться не будет она ждёт прямо распределения шансов того что к разным

устроена Так что она ругаться не будет она ждёт прямо распределения шансов того что к разным объектам принадлежит наш к разным классам принадлежит наш объект Не будет она так устроена А вот если вы возм и вот это отправите в крою тогда вот Окей ну это картиночки картиночка давайте смотреть в коде у меня здесь есть функция которая как всегда рисует мне всякие кривые моя очень простая модель первый слой в моей модели - это флан если мы посмотрим на нашу картиночки превращение моих картинок Вот в

слой в моей модели - это флан если мы посмотрим на нашу картиночки превращение моих картинок Вот в это вот есть будет выпрямлять их в вектор поэтому у меня первый слой в модели ко мне будут приходить картинки А после этого латона они будут становиться векторами первый слой у меня принимает на вход 784 Почему Потому что одна картинка 28 на 28 если я её дальше у меня полносвязный слой на вход че потому что здесь Было четыре на выходе и на выходе с этого полносвязная 10 нейронов потому что 10

потому что здесь Было четыре на выходе и на выходе с этого полносвязная 10 нейронов потому что 10 классов и собственно всё то есть у меня сеть будет состоять буквально из двух слоёв фн опять Я его обычно за слой не называю потому что флан - это техническая операция это не слой он ничего не делает он не обучается он просто трансформирует данные [музыка] Саша да вот мы слоя мы получается называем всё И даже входной и выходной а скрытые слои Вот hidden layers это вобще отдельно сколько мы их

всё И даже входной и выходной а скрытые слои Вот hidden layers это вобще отдельно сколько мы их отдельно считаем а какие здесь скрытые слои Ну вот тут их нет да Ну тут фактически нет Тут есть один скрытый четыре Да четыре нейрона Ну типа да типа да Ну вот и это у нас по факту один слой но мы поговорим трих два потому что ну типа вот первый слой четыре выхода второй слой 10 но скрытых здесь нет потому что у меня есть первый и второй Он же входной и выходной Ну да я в целом на самом деле в

нет потому что у меня есть первый и второй Он же входной и выходной Ну да я в целом на самом деле в некотором смысле рекомендую отказаться от терминологии вот скрытый слой потому что это всё появлялось когда сети были очень простые и в общем история в том что параллельно появилось как бы несколько концепций Вот таких вот нейронных сетей и кто-то называл скрытым слоем Даже например вот этот вот слой Ну почему Ну потому что как бы первый слой - Это вроде тот который как бы ну вот сами данные к

слой Ну почему Ну потому что как бы первый слой - Это вроде тот который как бы ну вот сами данные к нам пришли Вот это вот считается что это уже у некоторых авторов считается что это уже первый слой Поэтому у каких-то авторов там считается что вроде как вот если бы здесь ещ один полносвязный был вот он бы был скрытым то есть вот это был бы там первым потом скрытый а потом выходной но в итоге оказывается что по крайней мере для меня тут выбирать вам но мне кажется что во все во всей этой

оказывается что по крайней мере для меня тут выбирать вам но мне кажется что во все во всей этой терминологии больше путаницы чем какого-то содержательного смысла Поэтому если мы видим что у нас есть несколько слоёв NN там что-нибудь и это слои с обучаемыми параметрами вот мы будем говорить что сколько этих обучаемых слоёв есть такого размера Наша сеть А вот это вот скрытая не скрытая Ну не знаю Я многого читал по нейронным сетям и там кто-то это так определяет кто-то по-другому определяет В

Я многого читал по нейронным сетям и там кто-то это так определяет кто-то по-другому определяет В итоге типа у тебя в башке каша ничего нового ты не узнал просто запутался и какой в этом смысл я так и не понял Угу Ну то есть в общем Нет разницы Как это называть я понял Ну мне кажется мне удобнее размышлять что у меня есть просто какое-то количество слоёв если у кого-то есть предпочтение какую-то часть из них называть скрытыми я не против но у меня такого желания нет Угу Хорошо спасибо это

часть из них называть скрытыми я не против но у меня такого желания нет Угу Хорошо спасибо это четвёрочка это у меня из головы ни откуда А просто тезиса что может быть любая циферка абсолютно абсолютно Сергей у меня такой вопросик может слишком рано задаю а как сечас тако сформулировать как мы поймём что номер класса выходного соответствует именно тому числу то биш номер клас число как это будет составля в будет составляться с самим наличием таргета То есть у нас будет например Давайте где

составля в будет составляться с самим наличием таргета То есть у нас будет например Давайте где куда-нибудь вот сюда Значит у нас будет какая-нибудь Вот у нас есть Давайте на примере трёх Да зададим вот у нас ой-ой-ой ненавижу стрелочки раз Нейрон два Нейрон ри Нейрон да давайте представим что у нас выдаётся здесь например вероятность 0,1 здесь и здесь будет 03 соответственно будет какой-нибудь Таргет Да к примеру мы скажем Ну давайте что у нас есть три класса ровно также как вчера было когда

Таргет Да к примеру мы скажем Ну давайте что у нас есть три класса ровно также как вчера было когда про Крос энтропию говорили код Сина и попугай к нам приходит в таргете например какой-нибудь объект у которого Таргет единичка все понимат Почему Да потому что количество классов у нас известно Поэтому если класс единица значит это будет Вот единица и теперь что происходит Мы начинаем считать кронт между этими предсказаниями Это означает что вот это будет составляться с этим будет ту у нас уход и

между этими предсказаниями Это означает что вот это будет составляться с этим будет ту у нас уход и таким образом модель в процессе обучения понимает что она должна была на месте вот этого 06 получить единичку Почему Потому что здесь была единичка на второй позиции относительно других то есть это происходит Просто по факту наличия таргета и того как он устроен в Крос энтропии поэтому ус всегда так будет чтом не знает что именно вот это это класс пёс она этого не знает но просто по факту вот

так будет чтом не знает что именно вот это это класс пёс она этого не знает но просто по факту вот этого вектора она будет вынуждена приблизить вот эти 06 вот к этой единице Это для нас вот этот второй выход это пёс а для неё это просто единичка которая она должна к этой единички подтянуть всё понял с са Да вот слева вероятности лас вот который ты скидывал там вопрос в том что слева вот сумма этих Рей должна быть один правильно но вчера в ресурсе который ты скидывал там на выходном слое вот

этих Рей должна быть один правильно но вчера в ресурсе который ты скидывал там на выходном слое вот этих картинок было не один Ну то есть там были 06 08 04 по-разному вообще смотрите это как раз к тому что у меня написано вот тут вот чтобы получить вот у нас есть полносвязный слой да который нам отдаёт три вот этих вероятности три Я поэтому и говорю шанса три значения вот эти значения после полносвязная обязаны быть в сумме равны единицей не да Или я не услышал Прости не Не ну если мы применим

обязаны быть в сумме равны единицей не да Или я не услышал Прости не Не ну если мы применим какую-то штуку типа то да Если не без неё то нет почему да то есть выход с полносвязный о чтобы выход с полносвязная превратился в вероятности мы должны вот к этим выходом применить функцию активации которая называется софт Мак после функции активации софт Мак вот этот Вектор будет равен в сумме единицы потому что софт Мак Так масштабируемые значит причина номер один Почему мы это не делаем потому что

потому что софт Мак Так масштабируемые значит причина номер один Почему мы это не делаем потому что энтропия пайтор ждт не результаты софт Макса а чистые выход из полносвязная коротко почему это нужно потому что так удобнее считать так быстрее считать поэтому придумали такую штуку второе Почему мы этого не делаем а функция софт Макс монотонная Кто помнит что значит монотонная ну постоянно постоянно возрастает Ну большему значению аргумент соответствует больше зна что же это значит Это значит

возрастает Ну большему значению аргумент соответствует больше зна что же это значит Это значит что если у на полносвязный слой в этом полносвязная нейрона 0,8 ми 0,12 и там плю 0,6 мне обязательно применять вот сюда вот софт Мак со знанием того что это функция монотонная чтобы понять К какому классу модель отнесла мой объект не обязательно я что я могу сделать я могу просто отсюда максимум выбрать значение софт Макса для 0 - 0,12 будет меньше чем для 0,6 значение софт Макса для 0,6 будет меньше

значение софт Макса для 0 - 0,12 будет меньше чем для 0,6 значение софт Макса для 0,6 будет меньше чем значение софт Макса для 0,8 то есть мне на самом деле это не нужно Я могу просто по взять максимум и этого мне будет достаточно и Ну получается мы не применяем вот этот сомакс на выходной слой и он применяется уже сам в Крос энтропии он в Крос энтропии будет посчитано Да всё понял тут Тут ещё как бы вопрос удобства если мне принципиально нужна нужны вероятности тогда я примен softmax

ещё как бы вопрос удобства если мне принципиально нужна нужны вероятности тогда я примен softmax пожалуйста можем же мы забрать предсказание И повесить на них функцию софт Макс если нам нужно Ну пожалуйста ну берите предсказания распечатывать их софт Максом никаких проблем просто зачем но если бы мы хотели эти вероятности узнать мы бы их узнали просто применили бы Soft и всё хорошо значит модель двухслойная штука на выходе 10 кро энтропия переменная history будет хранить логи обучения я её

двухслойная штука на выходе 10 кро энтропия переменная history будет хранить логи обучения я её создаю задаю просто нано и дальше у меня здесь есть такая штука с которой вы можете сегодня поэкспериментировать у меня здесь задан девайс перемен которая у меня задано как - это эппловский процессор ва есть видеокарта установлена куда вы можете сюда попробовать вставить куда если у вас нет Ни того ни другого вы можете Вот сюда просто написать CPU чуть подробнее про то как это будет работать завтра я

вы можете Вот сюда просто написать CPU чуть подробнее про то как это будет работать завтра я буду рассказывать поэтому сегодня просто можете сюда попробовать подставить что-нибудь Если у вас есть такая возможность Если нет то просто берёте меняете на CPU и чувствуете себя прекрасно Если я использую какое-то иное устройство то есть не Центральный процессор видека нужно все данные с которыми будет работать модель перенести на тот девайс на котором я хочу производить вычисления поэтому я отправляю

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

не запустил что ли теперь не может найти где ту если моя модель точнее либо модель либо данные давайте мы здесь напишем или вообще этот девайс отсюда уберём просто сделаем вид что мы забыли указать Где должен располагаться мой массив данных смотрите я сразу получаю ошибку ошибка у меня выглядит так placeholder storage has not been allocated on MPS Device Это означает что мои данные находятся на центральном процессоре а модель находится на процессоре MPS и не соы я не могу данные с одного

на центральном процессоре а модель находится на процессоре MPS и не соы я не могу данные с одного устройства прогнать через модель которая находится на другом устройстве поэтому мне обязательно нужно их приводить на одно и тоже устройство но у вас в принципе сегодня всё будет работать просто меняя вот эту переменную у вас всё будет дальше работать вот с ошибками мы будем бороться в этом смысле завтра ну моя модель очень простая 32 параметров в общем-то маленькая и всё у не хорошо давайте теперь

ну моя модель очень простая 32 параметров в общем-то маленькая и всё у не хорошо давайте теперь посмотрим НАК я сюда передаю модель количество эпох передаю сюда оптимизатор и передаю сюда переменную his если этой переменной нет соответственно Я создаю её Ну как бы просто делаю её такой пустой и дальше у меня есть вот такая штука которая написана переменная будет равна и вот таму слова есть яю ильва ту которая пришла ко мне на вход Если ко мне приходит переменная пустая то Я создаю вот такой вот

ту которая пришла ко мне на вход Если ко мне приходит переменная пустая то Я создаю вот такой вот словарь в этом словаре я буду хранить тоже самое что хранили мы вчера лосы на обучени валидации метрики на обучени валидации нужно Это для того чтобы Если я например хочу продолжить обучить модель Я бы передал чуть обу моде ива ВФ созда бы новую а досы бы так да Люб это как раз про тот случай когда мы повторно запускаем ячейку после обучения да да когда мы раз обучили и потом говорим себе хотим ещё

повторно запускаем ячейку после обучения да да когда мы раз обучили и потом говорим себе хотим ещё раз обучить вот если мы бы пользовались вчерашним циклом то мы бы сохранили только ту информацию которая от второго эта обучения к старым данным просто начать дописывать новые вот второй раз мы захотели обучить мы взяли старые данные и начинаем просто туда дописывать новые цифры Так значит ну здесь эпохи эпохи эпохи идём получаем сэмплы лейблы и редера см переносим Нава потому что у меня модель на

эпохи эпохи идём получаем сэмплы лейблы и редера см переносим Нава потому что у меня модель на другом устройстве тут отправляем наши сэмплы в модель получаем предсказание дальше считаем значение функции потерь оптимайз зеро то про что я вчера хотел сказать Значит в пайтор по умолчанию сделано так что после того как вы вычисляется loss backward у вас в оптимизаторы появляются градиенты Ну то есть частные производные Если вы не сделаете вот этот вот шаг то оптимизатор на следующем шаге как бы

частные производные Если вы не сделаете вот этот вот шаг то оптимизатор на следующем шаге как бы сложит текущие посчитает с теми которые были на предыдущее итерации Ну то есть он их не обнули А как бы начнёт просто складывать для наших задач это не нужно Мы хотим использовать только те градиенты которые на данном этапе мы посчитали Поэтому всегда перед вызовом мы должны ще шага вычисляем новые градиенты делаем оптимизационный шаг потом когда мы опять придём вот сюда мы опять сотрём все

новые градиенты делаем оптимизационный шаг потом когда мы опять придём вот сюда мы опять сотрём все градиенты с предыдущего шага вычислим новые сделаем оптимизационный шаг почему так происходит потому что так устроен точка Больше никаких нет вот в библиотеке реализовано это что с этим делать Просто привыкнуть вчера Вот короче gpt почему-то когда пишет он пишет в другом порядке после после ставит после этих двух шагов ставит это его ошибка или нет не какая разница но смотри вот мы идём по этому

после этих двух шагов ставит это его ошибка или нет не какая разница но смотри вот мы идём по этому циклу посчитали функцию потерь обнулили градиенты посчитали новые сделали оптимизационный шамы можем зде в конце итерации А тут мы это делаем в начале итерации то есть это это неважно главное чтобы oss короче Главное чтобы эти две строки не были вместе потому что тогда получится Ты посчитала градиенты градиенты обнулила и оптимайз СП ничего уже не сделает а делать это именно Ну типа в таком вот

градиенты обнулила и оптимайз СП ничего уже не сделает а делать это именно Ну типа в таком вот порядке или вот в таком порядке Это неважно главное не в таком так Ну тут в общем-то ничего особенно Больше интересного нет берём предсказание арг Максом считаем индекс максимального элемента сравниваем с лейбла а на всякий случай пишем CPU если у нас всё считалось на другом устройстве то есть вот этот Вектор фолсом на обратно на Центральный процессор переводим в най считаем среднее в этой строке

Вектор фолсом на обратно на Центральный процессор переводим в най считаем среднее в этой строке довольно часто у всех бывают ошибки поэтому когда вы будете это делать Я рекомендую просто это делать Прямо пошагово сначала сделали argmax распечатали посмотрели что там потом сделали дописали сравнение labs посмотрели что там перенесли на CPU посмотрели что там перевели в най посмотрели нашли среднее посмотрели Вот это такая цепочек использовать часто в валион ничего нового нет даже не буду ничего

посмотрели Вот это такая цепочек использовать часто в валион ничего нового нет даже не буду ничего комментировать Давайте запустим обучение я выбираю оптимизатор ам У меня обычно в блокнотах всё 10 раз переносится на девайс потому что меня очень бесят ошибки когда всё на разных устройствах не меньше чем вас будут бесить поэтому у меня всё просто несколько раз за ноутбук может быть одно и тоже написано потому что я как дед забываю писал я это в начале или нет обучаем модель простая но данных

написано потому что я как дед забываю писал я это в начале или нет обучаем модель простая но данных довольно много там 7 картинок поэтому какое-то время это займ Пусть это пока шляпа обучается а мы перейдём к классу в Пато модели как правило сдаются классами это такой общий и общепринятый подход мы будем пользоваться и вчерашним подходом Ну то есть или тем которые у меня сегодня вот тоже В верху им и лаем нам могут понадобиться разные штуки значит Я создаю класс и на следую от класса NN модуль

им и лаем нам могут понадобиться разные штуки значит Я создаю класс и на следую от класса NN модуль NN модуль - это Центральный класс пайтор через который работают все нейросети все оптимизаторы все функции потерь Короче говоря как Ну даже в нампа наверное нет такого класса по аналогии Ну в общем это строительный блок пайтор вот с помощью модуль делается в пайтор ВС создаю конструктор в конструкторе я пишу очень простую штуку Я говорю что у меня будет три слоя у меня будет Connect 1 conn 2 conn

я пишу очень простую штуку Я говорю что у меня будет три слоя у меня будет Connect 1 conn 2 conn 3 это будет три полносвязный я их называю Просто sfc То есть это у меня будут экземпляры такие переменные внутри моего класса Первый слой будет на вход принимать 784 на выходе 32 второ принимает на вход 321 нейронов здесь я их могу располагать в любом порядке потому что здесь я фактически просто объявляю об их существовании вот тут вот можно как угодно всё перемешать как угодно всё называть Потому

об их существовании вот тут вот можно как угодно всё перемешать как угодно всё называть Потому что здесь я просто говорю Из каких строительных блоков будет состоять моя сеть у меня ещё тут есть это конструктор в конструкторе я должен указать из нужно реализовать это метод for метод for определяет проход моих данных по тем слоям которые Я указал вот здесь вот то есть в методе фвар мы объявляем что он принадлежит классу в котором Он написан на вход приходит X и дальше что я должен сделать когда

он принадлежит классу в котором Он написан на вход приходит X и дальше что я должен сделать когда ко мне приходят данные возвращаемся к картинке Что я должен сделать с этими данными Для начала я должен превратить эти данные выпрямить их в вектора мы это выше мы это делали слоем Флам второй способ и более привычный способ для пайтор это сделать это использовать функцию VI функция VI - это по большому счёту просто Шей то есть ко мне приходит X у этого икса формат bch size 28 на 28 я применяю к

счёту просто Шей то есть ко мне приходит X у этого икса формат bch size 28 на 28 я применяю к этому иксу функцию VI и говорю что вот X то Si 0 это ба нужно Сохранить то есть у меня количество объектов в баче не должно меняться ко мне пришло 64 значит в рамках Бача 64 и должно остаться А вот этот второй аргумент ми1 говорит мне о том что всё что идёт вот после вот этого все измерения я должен просто выпрямить Вектор то есть вот этот X будет для вот эту а 28 на 28 превратим просто в 784 тут можно

выпрямить Вектор то есть вот этот X будет для вот эту а 28 на 28 превратим просто в 784 тут можно было бы написать ше тоже бы всё работало вообще в пайтор придумали чтобы ну нытики которые приходят из нампа они пугались и для них придумали псевдоним чтобы они типа не путались с вот этими методами вот собственно тут можно было бы это ВНО для тех жеков придумали можно на самом де и вызвать в пайтор вот ну собственно это как бы я грубовато сказал на самом деле это действительно сделали для того

вот ну собственно это как бы я грубовато сказал на самом деле это действительно сделали для того чтобы люди которые переходят с одной библиотеки на другую могли пользоваться командами которые более привычные но в пайтор всё-таки более привычна вю поэтому Я рекомендую её запомнить но мы завтра будем ей пользоваться послезавтра будем ей пользоваться и в общем часто будем ей пользоваться Поэтому если вы е не Пойте то Простите уж точно Т первый шаг мыли вектора То есть фактически что мы сделали Мы

вы е не Пойте то Простите уж точно Т первый шаг мыли вектора То есть фактически что мы сделали Мы перешли от вот такого представления наших данных вот в такое дальше я применяю первый слой connected 1 к нашему иксу у меня Connect 1 принимает на вход 784 на выходе отдаёт 32 и видите здесь я применил этот слой К входящим данным и сразу применил к нему функцию активации То есть я сказа что от выхода зачем я так сделал и мог ли я вот здесь вот написать что у меня будет например Self R равно NN лу и

зачем я так сделал и мог ли я вот здесь вот написать что у меня будет например Self R равно NN лу и соответственно вместо того чтобы писать Вот такой странной конструкции написал бы просто вот так Self R мог ли я так сделать мог Ну просто вроде как функция активации - Это не совсем не совсем слои Поэтому я здесь не стал их писать в Конструктор а просто сказал что у меня будет Вот такая вот из модуля с функциями pytorch я возьму лу и примен потому что лу У меня всё равно не обучается как бы у

с функциями pytorch я возьму лу и примен потому что лу У меня всё равно не обучается как бы у неё нет параметров это просто обычная функция И тут я её применяю Саша лу сейчас применяется к вот-то этим 784 признакам объекта нет она применяется к выходу в 32 у меня лу применяется к тому что выходит с А всё всё понял понял значит X это то что у меня отдаёт вот этот слой который я активирую дальше X - это выход с этого второго слоя я к нему тоже видите применяю Self fc2 Connect 2 к выходу из

X - это выход с этого второго слоя я к нему тоже видите применяю Self fc2 Connect 2 к выходу из первого слоя применяю к нему и применяю к нед мо моде Con 3 вот он который я применяю к выходу с предыдущего слоя и всё я его ничем не активирую потому что мне выход с моей сети активировать Не нужно мне эти данные отправлять в функцию потерь называю X Final и xal это гораздо более многословный способ создания модели чем например N sequential но уже завтра вы поймёте что не всегда можно всё сделать

создания модели чем например N sequential но уже завтра вы поймёте что не всегда можно всё сделать секм и иногда Наша сеть становится такого размера что N sequential превращается вот в такое Полотно последовательности слоёв в которые очень легко запутаться вот поэтому мы будем делать Так и ещё раз если сейчас это не очень понятно и завтра и послезавтра и в понедельник на следующей неделе и особенно на неделе текста мы будем с этим работать поэтому вы привыкнете Костя А дрота нет в библиотеке

на неделе текста мы будем с этим работать поэтому вы привыкнете Костя А дрота нет в библиотеке вот F чтобы также на самом деле есть оп и всё и вверху тоже можно не указывать Да цеху тоже можно его удалить вообще без проблем Угу То есть в принципе как бы Можем ли мы здесь вообще всё остальное написать Да никаких проблем пишите сюда слоёв сколько хотите но опять же вроде как кажется что вот такая конструкция выглядит менее нагруженной чем вот я сюда е начну дописывать этот рылу вот тут дело вкуса

выглядит менее нагруженной чем вот я сюда е начну дописывать этот рылу вот тут дело вкуса я бы не сказал что что здесь есть какой-то единый подход многие пишут именно вот таким способом кто-то предпочитает сделать здесь там блок activations and dropout типа и отдельно перечислить эти функции Делайте как вам удобнее Ну давайте что запустим а создаём модель переносим на девайс Get Model summary отправляем туда новую модель значит аэ генерируем девайс и пожалуйста 25.000 25.000 параметров модель

туда новую модель значит аэ генерируем девайс и пожалуйста 25.000 25.000 параметров модель помощнее предыдущей и Давайте запустим обучение и вернёмся к той которая там что-то нам уже сделала ну вот видите тут какой-то там Аля Аля 0,86 на валидации Ну в принципе неплохой результат то есть для такой маленькой модели нормально вполне сойдёт вот сейчас посмотрим как у нас обучится вот эта модель тоже сколько у меня там будет эпох а 30 эпох ну 30 эпох Конечно мы Ждать не будем это бессмысленно Вот

сколько у меня там будет эпох а 30 эпох ну 30 эпох Конечно мы Ждать не будем это бессмысленно Вот она уже там даёт где-то 75% качества это Окей давайте вопросы Саш Ну скорее всего это просто Вопрос не сегодняшнего дня но реть изображени не надо вскрывать эту тему ты молодой Ну и я понял Нет на самом деле мы как раз-таки решете многоканальные изображения не будем Ну вот то есть есть какой-то инструмент который делает это за нас мы будем на самом деле мы будем решетько их размер то есть Представь

который делает это за нас мы будем на самом деле мы будем решетько их размер то есть Представь что вот у тебя сегодня есть чёрно-белая картинка Да 28 на 28 ты её зашел 700 84 Ну в принципе нормально многовато уже конечно столбцов но нормально а теперь представь что у тебя картинка 28 на 28 но она трёх канальная это 784 у на 3 как бы уже не очень весело выглядит Да потому что ну просто много это там будет там больше 2000 колонок вот поэтому мы завтра посмотрим на то как работать с картинками

там будет там больше 2000 колонок вот поэтому мы завтра посмотрим на то как работать с картинками более человеческим образом Как из картинки достать признаки и только после этого её зать как раз таки чтобы не делать Вот эти хорошо СВ или что-то другое круче круче так 83 Ну и ладно чёрт с ней Пусть она останется в таком состоянии вот тут у меня ещё есть блок со всяким шейм Флам и всем остальным Но тут уже такамори будут какие-то проблемы на самом деле у меня здесь даже уже есть закомментировать

тут уже такамори будут какие-то проблемы на самом деле у меня здесь даже уже есть закомментировать со какие-то проблемы делаем без проблем слой м после этого Вот этот закомментировать функцию а не функцию Но это дело вкуса так У меня вопрос по поводу конструктора и для чего мы там использовали супер Я помню в принципе че он делает но не вижу чтобы мы дальше как-то его использовали а просто если мы его не используем то в таком случае как бы он не надут методы которые него есть есть вот это

мы его не используем то в таком случае как бы он не надут методы которые него есть есть вот это забрать из того метода вот поэтому мы должны обязательно Вот это да мы его здесь на самом деле не используем потому что фактически Нам нужен только ИТ ивар А какие-то другие методы нам из него не нужны поэтому мы этот супер используем просто по религиозным причинам потому что в питоне так принято ещ вот эта конструкция у нас вообще не будет меняться вот это вот у нас всегда так будет каждый класс Мы

эта конструкция у нас вообще не будет меняться вот это вот у нас всегда так будет каждый класс Мы будем пря Вот и так далее буде постоянно луба вот то что вчера ссылки скидывали например метод обратного распространения он типа в домашке будет или А ты хочешь руками написать Я думал тебе хватило На первой фазе Да не не нет просто интересно было Нет нет не будет Ты можешь зайти и короче вот этот метод бакр который у Лоса есть ты можешь туда зайти и преисполниться тем что там э находится вот понял

бакр который у Лоса есть ты можешь туда зайти и преисполниться тем что там э находится вот понял надо ты видишь нам скинули чисто для понимания того что под капотом происходит да да да ну просто это не как как сказать это такая штука Но если вы можете её написать круто как бы классно да вы разобрались и всё такое но скорее всего будет будет первый и последний раз в жизни когда вы это сделаете Ну это интересно в рамках такой э Мозгового усилия и упражнения Вот ваша жизнь вряд ли как-то

Ну это интересно в рамках такой э Мозгового усилия и упражнения Вот ваша жизнь вряд ли как-то поменяется потому что ну люди специально придумали этот квод чтобы мы не делали это руками Да что мы хотим решить задачу классификации картинок мы не хотим сидеть писать градиентный спуск Пусть математики пишут градиентный спуск это их работа мы не математики нужно другую задачу решить на первой Фае попросили написать поэтому вино Пронь мой много времени много усилий Вот вы может быть даже в какой-то

написать поэтому вино Пронь мой много времени много усилий Вот вы может быть даже в какой-то момент засияет но через год вы забудете что вы это делали И самое главное не будет Понятно зачем Слушай а можно тоже вопрос из серии Тупой вопрос который нужно один раз в жизни задать вот сейчас нас в этих моделях Э мы датасет у нас там в начале определяется датасет Да мы подтягиваем данные ля-ля-ля вот эта переменная она потом ну короче где она у нас используется какая я просто смотрю в код как бы

эта переменная она потом ну короче где она у нас используется какая я просто смотрю в код как бы запуталась Ну допустим Если начала посмотреть то мы сами данные Короче мы сначала их определяем например потом мы там ещё какое-то второе определение есть смотри вот у нас есть TR и это наши данные мы эти данные должны отправить в загрузчик данных потому что наш загрузчик данных будет из вот этих Даев доставать Бача наши данные вот это дата Loader который будет копаться в нашем датасете и Бача

Даев доставать Бача наши данные вот это дата Loader который будет копаться в нашем датасете и Бача возвращать нам перемешанные картинки дальше этот Train Loader используется у нас уже в обучающем цикле потому что именно по лору Вот и мы идём samples Label Train Loader Угу то есть идея такая что у нас есть датасет наши данные мы подключаем к нашим данным даур он знает как и забирать оттуда пачки и эти пачки забираем в оя теперь то есть вот он один раз используется модельке вот тут в этом месте

и эти пачки забираем в оя теперь то есть вот он один раз используется модельке вот тут в этом месте Ага Окей спасибо Люба У меня вопрос немножко может быть не совсем по теме сегодняшней лекции Ну вот он мне покоя не даёт Я посмотрела вакансии и где-то написано что значит дата Санти нужен но только не ноутбуки А что вне ноутбуков есть жизнь какая-то дантистов и какие-то инструменты можно сейчас узнать я не очень понял что что имеется в виду кроме ноутбуков дата S ещё в каких-то инструментах

узнать я не очень понял что что имеется в виду кроме ноутбуков дата S ещё в каких-то инструментах работает Если да то в каких Ну вот пожалуйста создаём создаём файл питона и поехали может они имели в виду не Юпитер а ноутбук в смысле что мы работаем на стационарных компьютерах Ну не знаю нет естественно там это будет то о чём я буду вам говорить на во время выполнения всех проектов как бы всем без разницы что у вас в ноутбуке есть что вы успели обучить модель что эта модель очень хорошо

всем без разницы что у вас в ноутбуке есть что вы успели обучить модель что эта модель очень хорошо работает мне вот когда у нас будут проекты мне вообще будет без разницы Какое качество у вашей модели если ваша модель в ноутбуке я не хочу смотреть код Я хочу зайти на смд потыкать и увидеть что это работает и когда во всяких там требованиях Вы видите что ну там типа Желательно чтобы умел что-то за пределам Юпитер ноутбука это ровно об этом и речь какому-нибудь менеджеру который будет с вами

за пределам Юпитер ноутбука это ровно об этом и речь какому-нибудь менеджеру который будет с вами работать ему наплевать что у вас там какой-то код какой-то пайтор какие-то обучающие циклы какой-то Юпитер ноутбук он не хочет с этим работать Он знать не знает этот питон и в гробу Видал вообще всё программирование ему нужна одна вещь он хочет зайти на сайт или я не знаю там в Telegram бот или в мобильное приложение и увидеть что работа если вы ему скажете Ну вот у меня как бы вот модель есть

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

мы будем делать в ноутбуках просто потому что нужно построчно разбираться в том как всё работает а часть Проектная у вас вся будет полностью связана со Стрим лита с питонов скими скриптами с там ста скриптами и со всем остальным если позволишь Одно маленькое как бы заметки на полях вот по поводу менеджера на работе Я полностью с тобой согласна по поводу того что мы сейчас учимся я бы например хотела иметь возможность и э не только рассчитывать на то что ты готовый Стрим Лид посмотришь а и

хотела иметь возможность и э не только рассчитывать на то что ты готовый Стрим Лид посмотришь а и загляну в ноутбуки и на какую-то помощь если она потребуется смотрите заглядывать в ноутбуки на проектах я не буду это абсолютно Точно Вот заглядывать в код ваших Стрим литов и всего остального я буду но в ноутбуках на проектных ваших заданиях Я даже близко не буду смотреть все проекты которые вы будете делать проверять я их буду только одним способом я буду вас ску на этой ски на ВОМ должен иметь

делать проверять я их буду только одним способом я буду вас ску на этой ски на ВОМ должен иметь возможность клонировать ваш репозиторий запустить его локально и увидеть в ЧМ будет проблема архивы распаковывать какую-то ещё там я не знаю какие-то разгребать ноутбуки нет репозиторий на гитхабе я этот репозиторий клонируют Какая ошибка говорю вам в чём может быть проблема Вот в ноутбуках на проектах Я нет сорян ну не проблема репозитории с удовольствием Настя к стрем лету возвращаюсь к вопросу о

Я нет сорян ну не проблема репозитории с удовольствием Настя к стрем лету возвращаюсь к вопросу о требованиях на работе на глобальном рынке если рассматривать не АФ компании а на глобальном рынке то Ну мли - это дефолт решение или не дефолт решение что тогда другое ну для быстрого прототипа Да на глобальном Я бы даже сказал что его гораздо больше используют чем на рынке в России но так просто более сложные инструменты флас и Ну да наверно фс мы будем два проходить у вас Стрим попроще поэтому мы

сложные инструменты флас и Ну да наверно фс мы будем два проходить у вас Стрим попроще поэтому мы как бы с него начнём А на третьей фазе у нас будет денёк сфа но в принципе там обычно проблем не возникает это Более сложный инструмент более взрослый инструмент Мы тоже посмотрим как с ним работать Я просто спрашиваю чтобы быть бы готовым чтобы резюме на этапе собеседования говорить что Ягу СГУ м показать в таких-то инструментах чтобы это им сердеч попало соотвественно вопро просто это знаете

м показать в таких-то инструментах чтобы это им сердеч попало соотвественно вопро просто это знаете навык работы в лите вот в таком в среднем смысле это навык того что вы умеете печатать Ну СМТ - это не программирование Ну будем честны но ST точечка Button Да ну здесь нет программирования Ну то есть это просто вы умеете набрать нужную команду на клавиатуре знаете где точка на клавиатуре где скобочка и такое вот всё поэтому в общем и целом это не разработка мли это такое типа для таких как

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

см это Это отличный способ быстрого прототипа того что вы такие Да вот смотрите мы тыкаем на кнопочку У нас вот здесь модель там вот здесь картинка здесь текст Вот Но в общем и целом когда вы будете страдать Очень из-за Стрим лита то относитесь к этому спокойнее просто помните что возможно всё намного проще чем вы пытаетесь как бы ну закопать римлинг по Стрим литу - это вот такой Талмуд в котором есть всё подключение к базам данных сессии авторизация Ну короче можно на нём написать При желании

есть всё подключение к базам данных сессии авторизация Ну короче можно на нём написать При желании что-то большое и классное но это вс-таки не совсем профильный инструмент для этого а быстрый прототип который говорит что да вот мы обучили модель мы её взяли раскатистый на там интервью что вот я вам буду показывать результаты там-то Это вот какие Ну я бы сказал что наверное фа мы будем подключать к поэтому там будет возможность сказать что вы и то и то это будет вы максимально взрослая штука то

к поэтому там будет возможность сказать что вы и то и то это будет вы максимально взрослая штука то есть на ней работают пря настоящие вот системы там промышленного применения всяких моделей Мы тоже будем проходить её СБО Так давайте посмотрим задание сегодня всё просто у вас загрузка картинок уже здесь Дана также по аналогии с тем что у меня сделано вша башмаками там фуфайка и всем остальным 10 классов нужно решить такую же задачу которая у меня в демо решена многоквартирный секл ничего

10 классов нужно решить такую же задачу которая у меня в демо решена многоквартирный секл ничего страшного не сегодня так завтра не завтра Так послезавтра всё всё получится вот тут что функции функции обучения и вам нужно в общем после того как вы немного с классами разберётесь вам нужно получить примерно такую картинку берёте классную какую-нибудь модель которая у вас показал лучшее качество и обучайте её с несколькими оптимизатора у меня здесь для примера взяты стохастический градиентный

и обучайте её с несколькими оптимизатора у меня здесь для примера взяты стохастический градиентный спуск rms AD AD все эти каждую модель я обучал с нуля новым оптимизатора и у меня получился вот такой вот график Да что вот а Дельта медленно обучается Адам вот он там прекрасно показывает какой-то хороший результат потому что он прямо стартует с маленьких значений и дальше потихонечку ещё минимизирует ваша задача взять какую-нибудь модель и тремя четырьмя пятью двумя разными оптимизатора обучить

ваша задача взять какую-нибудь модель и тремя четырьмя пятью двумя разными оптимизатора обучить и посмотреть чем эти оптимизаторы друг от друга отличаются какой быстрее сходится какой помедленнее какой В итоге хорошее качество показывает Какое не очень хорошее качество картинка должна быть примерно такой естественно у вас будет там другая модель по сравнению с тем на какой получена эта диаграмма но что-то очень похожее должно быть то есть тенденция будет у всех примерно одинаковые но при этом

но что-то очень похожее должно быть то есть тенденция будет у всех примерно одинаковые но при этом могут быть какие-то Ну какие-то отклонения к этому надо нормально относиться модели разные поэтому это возможно Ну и тем кто тем кто дойдёт есть вот такое задание с хитрой связью её можно реализовать только с помощью класса Это после того как получите результат из задания выше вот Настя м про вот эти Да как раз оптимизаторы как на практике профессионалы поступают они типа все запускают или они не

Да как раз оптимизаторы как на практике профессионалы поступают они типа все запускают или они не берут адом и и отдыхаю и берут адом и вперёд Да если с Адамом какие-то проблемы значит что-то начинают выдумывать но в целом берут Адам И отдыхают так всё тогда успехов решите вопросы пока Всем пока

Давайте начнём мы сегодня Поговорим немного про детали всякие которые связаны с оптимизацией нейронных сетей посмотрим на популярные алгоритмы собственно градиентных спусков которые используются для того чтобы сети обучались более стабильно чтобы было меньше проблем при обучении Ну и в общем всякие трки из этой срам вже некоторые такие начальные сведения там про какие-то базовые слои про функции активации мы поговорили про функции потерь немножечко но собственно для нас сегодня в большей части

активации мы поговорили про функции потерь немножечко но собственно для нас сегодня в большей части будет интересовать функции потерь потому что независимо от того Какого размера сеть независимо от того какие в ней слои используются градиентный спуск он везде градиентный спуск так или иначе поэтому мы будем в основном чаще Я буду сегодня говорить про функцию потерь значит любая задача которую мы решаем Ну в общем-то если это задача классификации регрессии или это задача там какого-то обучения

решаем Ну в общем-то если это задача классификации регрессии или это задача там какого-то обучения без учителя мы всегда имеем дело с какой-то функции которую мы хотим оптимизировать то есть мы хотим найти какое-то определённое значение этой функции мы это значение с самого начала не знаем Мы просто знаем что оно например должно быть либо максимальным либо минимальным Ну если мы говорим о задачах обучения с учителем обычно у нас эта функция всё-таки должна иметь какой-то минимум потому что эта

обучения с учителем обычно у нас эта функция всё-таки должна иметь какой-то минимум потому что эта функция у нас измеряет то насколько мы далеко от правильных ответов И если это значение очень большое Значит мы далеко от правильных ответов если это значение маленькое то мы близко к нашим настоящим правильным ответам но в общем и целом это на самом деле совершенно необязательно есть куча задач в математике где целевую функцию Да её не минимизирует а что у ва Может быть задача максимизации

в математике где целевую функцию Да её не минимизирует а что у ва Может быть задача максимизации прибыли там я не знаю максимизации товара на складе и всего такого то есть мы находимся в рамках там машинного обучения поэтому здесь как правило функции минимизируют Вот Но это совершенно не Обязательно должно быть Совершенно не обязательно должно быть единственным способом то есть мы можем стараться функцию вести в какое-то конкретное знание ма мы пользуемся какими-то методами Вот и Один из таких

функцию вести в какое-то конкретное знание ма мы пользуемся какими-то методами Вот и Один из таких методов это соответственно градиентный спуск значит градиентный спуск его можно просто очень сформулировать У нас есть какие-то начальные значения параметров мы эти начальные значения забираем из какого-нибудь распределения это может быть равномерное распределение нормальное распределение это случайным образом инициализирован значения каждо из этих значений каким-то обм влияет на нашу функцию

образом инициализирован значения каждо из этих значений каким-то обм влияет на нашу функцию потеряно её значение соответственно если мы будем изменять эти значения то мы будем двигаться в какую-то сторону мы будем функцию потери либо уменьшать либо увеличивать и для того чтобы понять В какую сторону нам нужно изменить эти значения мы будем пользоваться обычным градиентным спуском то есть из текущих значений параметров мы будем Вычитать произведение частной производной он же Градиент Ире до тех

значений параметров мы будем Вычитать произведение частной производной он же Градиент Ире до тех пор пока у нас не наступит какое-нибудь условие останов Да это может быть просто количество итераций обучения это может быть какой-то илинг что если у нас там пять итераций не меняется значение функции потерь Значит возможно что мы пришли уже в какой-то минимум и модель уже ничего не может нового нам сказать но общая его идея именно такая что есть начальные значения и итеративный процедурой мы идём

сказать но общая его идея именно такая что есть начальные значения и итеративный процедурой мы идём идём идём идём и добиваемся какого-то минимума обычного градиентного СПУ самом поми того что он может приводить нас на самом деле не всегда в какой-то минимум который нам нужен Ну иначе говоря у функции может быть какой-то глобальный минимум Ну то есть супер идеальная какая-то ситуация а может быть локальный минимум Но на самом деле Для нас это не очень большая проблема потому что даже если мы

локальный минимум Но на самом деле Для нас это не очень большая проблема потому что даже если мы например в какой-то функции приходим в локальный минимум для заре минимум или локальный минимум нам в общем-то не очень важно потому что мы здесь ищем не какое-то супер там минимальное из всех минимальных значений А мы всё-таки ориентируемся на какие-то метрики То есть если мы понимаем что задача решается хорошо нам без разницы Локальный это был минимум глобально Это был минимум или ещё если бы

решается хорошо нам без разницы Локальный это был минимум глобально Это был минимум или ещё если бы может мы 25 эпох получили бы то минимум стал бы ещё меньше нам это как правило не очень важно то есть мы просто понимаем что если Окей Метрика Нас устраивает там скорость работа Нас устраивает Значит мы можем считать что задачу Мы решили хорошо но тем не менее бывают такие плохие так скажем локальные минимумы когда мы застревая буквально например в самом начале обучения и кажется что ну мы прям

минимумы когда мы застревая буквально например в самом начале обучения и кажется что ну мы прям совершенно Метрика плохая и мы застряли в каком-то локальном минимуме и не можем оттуда никуда сдвинуться тоже самое может быть и с каким-то локальным максимумом да то есть мы можем например попасть какую-нибудь вот такую и в этой точке производная равна Ну потому что у нас значение по и здесь не меняется Да и получается что если производная равна нулю то наша любимая формула там и Омега П 1 равно

Да и получается что если производная равна нулю то наша любимая формула там и Омега П 1 равно Омега и мину на Ну я просто напишу таким вот образом что это у нас будет треугольник если у вот э вот Тука будет Рав на Learning Rate всё вот это становится нулём И здесь тоже из этого значения мы ничего не вычитаем то есть получается что если мы попадаем в какую-то точку пространства где производная равна нулю то наша модель фактически перестаёт обучаться это происходит с обычным градиентным спуском

нулю то наша модель фактически перестаёт обучаться это происходит с обычным градиентным спуском довольно часто он может куда-нибудь там прийти увидеть что производная равна нулю всё эта формула у нас морозится и дальше мы никакие параметры не изменяем никакой минимум не ищем долго пытались Ну не то чтобы прям супер Долго но довольно какое-то такое вменяемое время ощутимое пытались понять как собственно с этой проблемой справиться и на самом деле сразу несколько таких вариантов есть у нас

собственно с этой проблемой справиться и на самом деле сразу несколько таких вариантов есть у нас поверхность функции потери может быть очень сложной Поэтому нам бы хорошо чтобы у нас было такие сложились для нас два обстоятельства чтобы первое обстоятельство мы инициализировав хорошей точке Ну условно говоря если мы там решаем какую-нибудь задачу да нам бы хотелось чтобы мы в рамках инициализации попали изначально не вот сюда Вот потому что это очень далеко от минимума и ну собственно здесь

попали изначально не вот сюда Вот потому что это очень далеко от минимума и ну собственно здесь вообще и производные ещё равны нулю потому что это просто плоскость с одной стороны попали бы в какую-то удачную точку из которой нам бы было удобно спуститься вот туда вот в этот вот минимум а с другой стороны чтобы мы ещё вот такие вот не очень понятные э ландшафты могли тоже преодолеть потому что там тоже где-то есть минимум если мы пользуемся обычным градиентным спуском он в этом минимуме

что там тоже где-то есть минимум если мы пользуемся обычным градиентным спуском он в этом минимуме собственно просто возьмёт и застрянет есть несколько способов справиться с этим они довольно простые на самом деле и интуитивно должны быть понятны если кто-то помнит что такое инерция сама по себе просто как в бытовом смысле то нам сегодня это поможет Ну и проблема срем на самом деле вторая проблема которая может влиять на обучение это проблема непонятного выбора То есть у нас есть какие-то такие

которая может влиять на обучение это проблема непонятного выбора То есть у нас есть какие-то такие эмпирические данные о том что вот если у нас например там Ося да Или пся или может быть о со то оказывается что в общем-то Это скорее всего будет работать может быть в каких-то частных случаях это будет не самым оптимальным значением но вроде это работает становится ясно что обучение моделей в которых очень много параметров обучаемых с одним и тем жем это тоже не самая лучшая идея потому что у нас

очень много параметров обучаемых с одним и тем жем это тоже не самая лучшая идея потому что у нас есть могут быть какие-то значения параметров которые очень сильно влияют на функцию потерь а могут быть какие-то параметры которые собственно на значение функции потерь совершенно не влияют Ну то есть есть какая-то избыточность в нашей модели поэтому некоторая параметров она собственно просто её меняй не меняй она никак не приближает нас к правильному ответу такая ситуация тоже Вполне может

её меняй не меняй она никак не приближает нас к правильному ответу такая ситуация тоже Вполне может возникнуть и с этим тоже нужно что-то уметь делать Вот сегодня мы посмотрим как ещё и можно в некотором смысле автоматически подбирать Learning для конкретных конкретных групп параметров значит у различных видов градиентного спуска довольно странные названия но в целом Ну разных модификаций градиентного спуска наверное Ну есть порядка там п-6 вариантов вот может быть даже больше просто есть очень

спуска наверное Ну есть порядка там п-6 вариантов вот может быть даже больше просто есть очень большое количество методов которые были использованы там только в какой-нибудь одной задаче и больше особенно нигде не использовались а самые популярные из них реализованные в библиотеках типа пайтор и в любых других и в пайтор в том числе они все находятся в модуле атим который мы вчера уже разбирали Ну не разбирали а использовали точнее Вот и о некоторых из вот этих вот алгоритмов мы сегодня

Ну не разбирали а использовали точнее Вот и о некоторых из вот этих вот алгоритмов мы сегодня чуть-чуть поговорим но на самом деле сегодня важно просто чтобы было понятно концептуально две идеи первое Как можно некоторым образом ускорять обучение или пытаться выбраться из локальных минимумов и второе как автоматическим образом регулировать в принципе После сегодняшнего станет ясно что есть один алгоритм оптимизации которую очень часто рекомендует использовать для старта Ну то есть понятно что

алгоритм оптимизации которую очень часто рекомендует использовать для старта Ну то есть понятно что если у вас 30 вариантов вы не очень понимаете С какого варианта начать вот сегодня мы как раз придём к тому что есть алгоритм с которого если вы с него начнёте скорее всего у вас всё будет нормально Вот это не значит что другие пробовать не надо но он такой относительно универсальный значит Давайте вспомним обычный градиентный спуск что у нас есть у нас есть новое значение параметра У нас есть

вспомним обычный градиентный спуск что у нас есть у нас есть новое значение параметра У нас есть какое-то текущее значение Мет У нас есть Градиент функции по этому параметру и есть lear соответственно если мы писали Это просто в каком-то Ну в каком-то коде Да мы бы посчитали частную производную она бы у нас была равна какому-то градиенту и вот по такой формуле просто в цикле какое-то количество итерации Шли шли шли шли и ожидали бы что мы постепенно приходим к минимуму там или максимуму нашей

итерации Шли шли шли шли и ожидали бы что мы постепенно приходим к минимуму там или максимуму нашей функции то есть в ито бы вот эта вот концепция она доминирует в везде то есть градиентный спуск это по большому счёту Ну в индустрии единственный способ обучения моделей есть некоторые вариации всякие там какие-то Аля новые открытия Как обучать нейросети но в итоге Никакая из них даже близко по популярности не подобралась к градиентного спуску Вот это с одной стороны очень круто потому что у нас

не подобралась к градиентного спуску Вот это с одной стороны очень круто потому что у нас есть какой-то проверенный хороший вариант того это ВС работает с другой стороны это видится некоторым ограничением Ну довольно стрёмно если мы придумаем какую-нибудь нейросетью которую мы уже не сможем обучать градиентным спуском и что нам тогда делать собственно у нас даже никакого варианта выбора нету и всего такого Тут нужно вспомнить что вчера когда мы говорили о том что у нас есть некоторые эпохи и у

такого Тут нужно вспомнить что вчера когда мы говорили о том что у нас есть некоторые эпохи и у нас есть какие-то загрузчики данных мы говорили что будем эти данные брать то что называется бами Да ну то есть такими маленькими пачками будем пропускать их через сеть и вот в рамках одной эпохи будем по очереди отправлять наши наши данные в сеть на самом деле к этому пришли не сразу и раньше когда обучали нейросети не было такого деления что вот мы в рамках одной эпохи делим все наши данные на и

обучали нейросети не было такого деления что вот мы в рамках одной эпохи делим все наши данные на и вот таким вот по очереди их отправляем в моде и обуча обучения отсутствовал и присутствовал обычный бач Градиент ба градиентный спуск или пакетный градиентный спуск когда мы берём все наши обучающие данные то есть буквально всю нашу выборку которая состоит вот от X1 до xn ну и соответственно для таргета всё это дело отправляли в какую-нибудь модель И после этого про когда считали часте

для таргета всё это дело отправляли в какую-нибудь модель И после этого про когда считали часте производные по как бы всем объектам по всем параметрам И после этого все градиенты просто усреднять В какую сторону нам двигаться Ну взять и усреднить просто да Тогда мы найдём какое-то среднее направление в сторону минимума но как я вчера говорил в определённый момент данных стало очень мало и стало ясно что мы не можем выборку там из полумиллиона каких-нибудь картинок одновременно запихнуть в нашу

что мы не можем выборку там из полумиллиона каких-нибудь картинок одновременно запихнуть в нашу модель поэтому фактически на данный момент вот такой способ градиентного спуска когда мы все наши данные разом отправляем в нейронную сеть Сейчас такого уже практически нет ну то есть это можно встретить на каких-то прям таких учебных учебных примерах но в целом все отправить все данные в нашу модель это уже Мы Ну типа не в том веке чтобы это работало хорошо вот знат потом ко ясно что невозможно

это уже Мы Ну типа не в том веке чтобы это работало хорошо вот знат потом ко ясно что невозможно отправить все данные разом в нашу модель а придумали такой как бы вид градиентного спуска который называется Стаха ский градиентный спуск Стаха градиентный спуск делает совершенно то же самое что и бач градиентный спуск но с одним отличием теперь мы идём по по какому-то количеству итераций но вместо того чтобы брать все данные и отправлять их модель мы случайным образом выбираем из наших нашей

того чтобы брать все данные и отправлять их модель мы случайным образом выбираем из наших нашей выборки какой-нибудь объект то есть вместо того чтобы брать всю матрицу признаков и отправлять в модель давайте мы будем брать какой-нибудь Случайный объект отправлять его в модель считать функцию потерь Градиент корректировать параметры Потом возьмём другой Случайный элемент из нашей выборки Потом возьмём третий Случайный элемент четвёртый пятый и так далее То есть получается что от того чтобы

возьмём третий Случайный элемент четвёртый пятый и так далее То есть получается что от того чтобы отправить все данные в нашу модель перешли к тому что памяти мало поэтому Давайте будем брать случайные объекты из нашей выборки и когда все объекты пройдут через нашу модель мы будем считать что одна Эпоха закончилась то есть вот этот шаг Да который случайным образом из наших данных достаёт какой-то экземпляр он будет происходить столько раз сколько у нас объектов в выборке тут вроде как идея

экземпляр он будет происходить столько раз сколько у нас объектов в выборке тут вроде как идея понятна не можем запихнуть все наши данные в сеть одновременно Так давайте брать случайные какие-то их представителей наших данных случайных представителей обучающей выборки и будем просто вот так вот итеративности по всем нашим объектам тут интуиция такая что мы очень сильно будем экономить память потому что теперь нам нету смысла обрабатывать всю нашу выборку за один шаг Теперь мы берём просто

потому что теперь нам нету смысла обрабатывать всю нашу выборку за один шаг Теперь мы берём просто Случайный объект и на одном объекте естественно мы будем считать намного быстрее чем на всей выборке одновременно Но кажется что иногда это тоже излишнее То есть если наши ресурсы позволяют нам обрабатывать за один шаг сразу например там какой-то батч объектов Ну типа 128 объектов Да пусть у нас все данные Не влезают но вроде как если у нас может влезать там не знаю 128 объектов из выборки зачем

данные Не влезают но вроде как если у нас может влезать там не знаю 128 объектов из выборки зачем мы тогда берём из наших данных по одному объекту то есть пользуемся вот Стаха Ским градиентным спуском Стаха - это Случайный собственно с греческого поэтому Ну Случайный Почему Потому что мы просто берём случайные объекты из выбор вот а то есть нужен какой-то компромисс между тем чтобы отправлять все данные за раз и между тем чтобы брать по одному объекту и таким образом просто ресурсы наши В

все данные за раз и между тем чтобы брать по одному объекту и таким образом просто ресурсы наши В каком-то смысле будут простаивать Ну и придумали тот алгоритм которым мы на самом деле уже даже вчера пользовались он называется мини бач градиентный спуск все наши данные делятся на мини Бачи То есть у нас вчера это был который возвращал нам пачками объекты мы смотрели что Да действительно у нас за раз там 128 каких-нибудь объектов обработала мы получили 128 предсказаний и таким образом мы просто

раз там 128 каких-нибудь объектов обработала мы получили 128 предсказаний и таким образом мы просто находили баланс что у нас есть с одной стороны все данные отправить мы не можем в модель с другой стороны по одному объекту тоже довольно глупо что-то доставать поэтому мы будем брать какой-нибудь батч то есть какой-то пакет данных и на этом пакете данных делать всё абсолютно то же самое что и было у нас вчера Ну и собственно в градиентного спуске всё одинаково будет считаться Костя да я помню

у нас вчера Ну и собственно в градиентного спуске всё одинаково будет считаться Костя да я помню что мы вчера поделили выборку на Бачи но использовали стохастические вс-таки градиентный спуск Ну это стохастический градиентный спуск он там тоже работает именно на мини Бача он называется стохастический градиентный спуск потому что это самый базовый градиентный спуск который есть Вот то есть все остальные алгоритмы они там имеют некоторые детали а стохастический тный спуск он работает вот таким

алгоритмы они там имеют некоторые детали а стохастический тный спуск он работает вот таким вот образом но без всяких наворотов То есть просто Градиент и вс вот поэтому Да тут некоторое Ну как бы некоторая некон систентки а работает всё равно на чах Но это такой метод почётный очень старый поэтому его Решили как почётного президента оставить под тем названием который кото у него изначально было чеки Насколько я понял ВС равно перебирает все элементы так или иначе в конечном итоге Зачем какой

чеки Насколько я понял ВС равно перебирает все элементы так или иначе в конечном итоге Зачем какой смысл чно элемен потому что он делает это В случайном В случайном порядке У тебя если у тебя любая модель обучается стохастическим градиентным спуском и у тебя данные берутся не случайным образом А по порядку то если у тебя встретится например 10 объектов ласса тво мо предсказывать класс она практически равна нулю Потому что если твои данные не перемешаны и у тебя например сначала весь класс но

равна нулю Потому что если твои данные не перемешаны и у тебя например сначала весь класс но потом весь класс о то Если мы будем идти по порядку мы не сможем обучить модель модель будет постоянно всё предсказывать классом ноль поэтому данные обязательно нужно перемешивать всегда размер этого будем это не обязательно делать но просто так-то сложилось что этоко число которое всем радует глаз какой размер Бача ставить ставить ровно тот который позволяет вам обрабатывать ваша вычислительная штука

размер Бача ставить ставить ровно тот который позволяет вам обрабатывать ваша вычислительная штука То есть если вы понимаете что вы поставили например 512 запихнули ваши данные в моде сокращаем размер Бача вот если вы не знаю поставили размер Бача 256 и видите что у вас опять всё упало значит ещё сокращаем размер Бача Вот то есть есть некоторые в некоторых моделях некоторые рекомендации о том какой размер бач сайза нужно использовать потому что это может приводить к у каких-то больших и очень

размер бач сайза нужно использовать потому что это может приводить к у каких-то больших и очень специфических моделей это может приводить к проблемам в обучении там всяким нехорошим явлениям но в целом как бы те модели которые мы будем обучать они более-менее ну как бы устойчивы к размеру ча Поэтому нам об этом думать не особенно нужно но довольно там часто в публикациях можно увидеть то что мы обучали там обязательно с размером Бача 512 Потому что если ставить 256 происходит то Если ставить

обучали там обязательно с размером Бача 512 Потому что если ставить 256 происходит то Если ставить там 800 происходит другое А вот 512 - это как бы размер который там в конкретной задаче оказался приемлемым вот но у нас будут как бы те те модели о которых я говорю это модели которые там обучают всякие Гуглы и так далее поэтому у нас это обычно будет обходить стороной Вот соответственно мини бач градиентный спуск - это тот та механика на которой обучаются модели в pytorch в tensorflow в кафе где

спуск - это тот та механика на которой обучаются модели в pytorch в tensorflow в кафе где угодно то есть все все э нынешние фреймворки они обучают модели на мини bch градиентного спуске соответственно если я в дата лоде поставлю а Басай равный единице то к чему я приду к тому что это будет обычный стохастический градиентный спуск классический то есть Басай равен единице Значит мы автоматически приходим вот сюда вот тогда у меня количество бачей будет равно объёму выборки и я сделаю столько

приходим вот сюда вот тогда у меня количество бачей будет равно объёму выборки и я сделаю столько итераций сколько у меня данных в моей выборке Ну сколько объектов значит в чём ещ есть некоторая Ну проблема наверное обычного ческого градиентного спуска который работает на одном объекте ввиду того что у нас каждый объект как бы у нас есть вот минимум какой-то функции потерь да и этот минимум функции потерь он собственно говоря как бы намекает нам о том что это значение функции потерь минимальное

потерь он собственно говоря как бы намекает нам о том что это значение функции потерь минимальное для обоих классов ну к примеру если это задача классификации да бинарной то есть это минимум функции потерь который мы можем достигнуть Анализируя и прогоняю через нашу модель представителей обоих классов но при этом если мы например подставляем в нашу модель какой-нибудь объект например класса ноль у как бы его направление движение да то есть то куда он хочет увести нашу ну наше Вот это

ноль у как бы его направление движение да то есть то куда он хочет увести нашу ну наше Вот это Путешествие к минимуму оно может на самом деле очень отличаться Ну типа если это у нас для класса ноль а минимум для класса ноль и один то естественно тот у как бы у кого класс но он нас отправляет не совсем в ту сторону потому что его условно говоря задача сделать так чтобы ему было хорошо он такой я класс но поэтому минимум у меня будет где-то вот там вот у тех у кого класс о могут отправлять нас

класс но поэтому минимум у меня будет где-то вот там вот у тех у кого класс о могут отправлять нас совершенно в другую сторону но нам-то интересна усредненная картина всего этого да нам не нужно конкретно найти минимум для класса ноль или конкретно для класса о Мы хотим найти какой-то усреднённый минимум который позволит нам и класс но и класс о каким-то образом успешно классифицировать поэтому че Градиент спус оден СС То есть у нас вот эти вот бы направления путешествий они очень разрозненные

Градиент спус оден СС То есть у нас вот эти вот бы направления путешествий они очень разрозненные Мы в итоге ВС равно перебрав все элементы мы придём как бы туда куда хотим Но мы сделаем как бы достаточно много шагов и эти шаги будут такие ну довольно истеричные и не совсем будут указывать на в нужном направлении При этом если мы используем минич градиентный спуск изза того что вот этот шаг делается на одном баче есть с одной стоны объекты класса но увели в какую-то сторону с другой стороны

на одном баче есть с одной стоны объекты класса но увели в какую-то сторону с другой стороны объекты класса о увели в каком-то другом направлении но если мы это всё усредни то получится что мы Ну примерно движемся туда куда нужно вот поэтому ми градиентный спуск он является таким достаточно популярным и хорошим способом обучения моделей какм изгони локального минимума или вообще преодолеть какой-нибудь не очень хороший не очень хороший участок поверхности функции потерь У нас есть очень простая

не очень хороший не очень хороший участок поверхности функции потерь У нас есть очень простая идея что если мы например движемся в определённом направлении Ну то есть мы понимаем что как вот вы на параболе например рисовали градиентный спуск вы там говорили что вот у вас есть какие-то шажочки эти шажочки приводит вас какой-то минимум но при это кажется обм старли откуда-нибудь вот отсюда Ну случайно же инициализирует да может какое-то значение которое прямо далеко от минимума выпасть и вы

случайно же инициализирует да может какое-то значение которое прямо далеко от минимума выпасть и вы делали бы довольно большое количество шагов потому что шаг то у вас фиксированный Да Learning Rate у вас задан определённым образом и кажется что если у нас есть вот какая-нибудь подобная задача то мы бы попав куда-нибудь вот сюда при инициализации сделали бы раз шаг сделали бы два шаг и сделали бы три шаг а потом бы посмотрели что если мы три шага делаем в одном и том же направлении и может быть

три шаг а потом бы посмотрели что если мы три шага делаем в одном и том же направлении и может быть нам есть смысл как бы скану чуть побольше Но потому что если у нас вся история показывает что мы движемся прямо в одном и том же направлении вроде как интуиция подсказывает что если у нас есть какая-то история движения И если это направление не меняется то может быть скану посильнее и таким образом сделать меньше шагов но при этом прийти уже в какую-то точку минимума Вот такая идея называется

сделать меньше шагов но при этом прийти уже в какую-то точку минимума Вот такая идея называется Моментум или собственно Ну я не знаю инерцией я обычно Моментум называю А значит в чём идея у нас по-прежнему остаётся вычисление частной производной А И у нас по-прежнему остаётся общая формула где мы из предыдущих значений вычитаем текущие Но вот это вот текущее значение которое у нас в обычном градиентной спуске было просто градиентом мы будем Немного более сложно Вычитать У нас вот это вот ро это

спуске было просто градиентом мы будем Немного более сложно Вычитать У нас вот это вот ро это будет какой-нибудь число которое будет изменяться измеряться от нуля до единицы И что мы будем говорить мы будем говорить следующее давайте мы посчитаем частную производную после этого умножим вот этот коэффициент ро на предыдущее значение вот этой вот шту Ну соответственно если уме на бы предыдущего значения нет Значит у нас тут просто будет сам Градиент обычный и получается что мы будем как бы

значения нет Значит у нас тут просто будет сам Градиент обычный и получается что мы будем как бы учитывать движение С предыдущей итерации то есть вот тут может быть в коде будет поудобнее понять вычисляем частную производную берём коэффициент моменту или коэффициент инерции умножаем его на предыдущее значение оно в самом пом не будет равно нулю и добавляем туда наш Градиент новое значение параметра будет считаться как Омега С предыдущей итерации Learning Rate умноженное на вот это вот V а V в

будет считаться как Омега С предыдущей итерации Learning Rate умноженное на вот это вот V а V в свою очередь с учётом коэфицент будет как бы смотреть на наше направление движения на предыдущих шагах то есть в таком случае получится что если вот у нас вот на Первом шаге да то есть если у нас самая первая итерация то у нас ро там равно например 0,9 V У нас нет оно равно нулю поэтому у нас тут просто частная производная потом когда мы когда наша Вот это V станет частной производной с предыдущего

частная производная потом когда мы когда наша Вот это V станет частной производной с предыдущего шага То коэффициентом ро мы будем как бы этот предыдущий шаг взвешивать То есть если у нас вот это вот ро будет равно например 0,9 то что будет происходить Мы будем вот это вот умножать на предыдущее значение градиента и аналогия ну как бы не аналогия а Интуиция здесь такая что если мы вот здесь вот какой-то шаг сделали да то на втором шаге если у нас ро достаточно высокий мы будто бы в два раза шаг

шаг сделали да то на втором шаге если у нас ро достаточно высокий мы будто бы в два раза шаг увеличим потому что мы добавим и предыдущее значение частной производной и текущее значение частной производ и из вот этого значения мы уже вым умноженный на как бы почти удвоенное значение частной производ это очень легко себе как бы представить Если вы ну там представите себе какую-нибудь чашу типа трёхмерную параболу и отпустите со стенки этой чаши какой-нибудь металлический шарик этот металлический

параболу и отпустите со стенки этой чаши какой-нибудь металлический шарик этот металлический шарик сначала будет очень медленно спускаться Ну по как бы относительно но при этом Чем он будет ид ближе вни одно этой темт Почему Потому что он накапливает инерцию у него в процессе спуска есть инерция он эту инерцию будет накапливать вот А Костя идея полностью понятна непонятна только лишь Почему при ро равном 0,9 мы шагнёшь бы мы уменьшаем член Наоборот а не увеличиваем его Ну я имею в виду шагнёшь

равном 0,9 мы шагнёшь бы мы уменьшаем член Наоборот а не увеличиваем его Ну я имею в виду шагнёшь потому что мы слишком сильно её зану низким коэффициентом я тут имею в виду в рамках конкретно от нуля до единицы а не не в общем луба А мы ро сами выбираем или конечно конечно ти вообще любое значение между нулём и единицей да да А и то что типа мы шаги большие большие делаем а если мы типа перег это тоже учитывается Да если мы перег сами дураки а окей Ну естественно Здесь такая штука тоже может

тоже учитывается Да если мы перег сами дураки а окей Ну естественно Здесь такая штука тоже может случиться то есть Казалось бы всё очень хорошо а теперь Представьте что мы вот здесь вот идём идём идём накапливая инерцию и потом раз перескакивая просто минимум Вот но смотрите если мы этот минимум перескакивая то что у нас вот здесь происходит то есть давайте мы представим что мы взяли и наме минимум Что значит перескочили минимум значит знак вот этого градиента поменяется с Ну поменяется

минимум Что значит перескочили минимум значит знак вот этого градиента поменяется с Ну поменяется Правильно Потому что мы сначала шли в одну сторону перескочили на другую ветвь параболы Это значит что нам теперь надо в обратную сторону значит знак у нас частной производной поменялся Вот соответственно если у нас вот этот знак меняется то есть мы можем там представить себе что он например был плюс просто Ради такой ну как бы простоты потом в какой-то момент мы перева нашу наш минимум вот этот

просто Ради такой ну как бы простоты потом в какой-то момент мы перева нашу наш минимум вот этот вот знак меняется на минус но соответственно у нас фактически Вот это в становится достаточно маленьким почему Ну то есть мы как бы Замира как будто бы потому что предыдущее значение здесь резко знак поменялся А вот это было положительным мы договорились об этом что сначала был положительный знак соответственно V становится очень маленьким Learning умножаем на в становится маленьким значит в

соответственно V становится очень маленьким Learning умножаем на в становится маленьким значит в какой-то момент мы просто как бы зависаем в одной точке как будто бы но уже на следующем шаге мы сделаем в нужную сторону перемещения вот значит любой э все алгоритмы о которых мы будем дальше говорить они на самом деле призваны тому чтобы каких-то от каких-то проблем нас избавлять вот но есть как всегда нюанс если что-то появляется Чуть более сложное но обещаю нам избавление от какого-то количества

нюанс если что-то появляется Чуть более сложное но обещаю нам избавление от какого-то количества проблем если он с одной стороны нас от проблем избавляет с другой стороны проблем оно добавляет потому что коэффициент ро мы вынуждены задавать сами вот хотим хорошей жизни Значит надо немножечко поэкспериментировать иначе не получится Вот А собственно Моментум вот этот вот в большинстве библиотек включается буквально одним аргументом в самом оптимизаторы то есть вы можете написать там например

включается буквально одним аргументом в самом оптимизаторы то есть вы можете написать там например оптим sgd да какая-то там написать что будет какая-то модель у этой модели какие-то параметры будет у вас оптимизировать и потом Пите просто Моментум и 0 там 9 или 08 То есть это уже реализованная техника его просто нужно включить в оптимизатор некоторые усложнения моменту - это такой так называемый Неди Ну или моментов Моментум с использованием некоторого другого подхода я его объяснять особенно

Неди Ну или моментов Моментум с использованием некоторого другого подхода я его объяснять особенно буду приме но он просто имеет другой вариант вычисления вот он работает чуть получше чем обычный Моментум Но на самом деле чтобы его включить в оптимизаторы просто нужно передать аргумент не если не будет считаться всё вот таким способом если не будет считаться Чуть более совершенным вариантом этого алгоритма вотт с другой стороны выползать из каких-то локальных минимумов или не очень хороших

алгоритма вотт с другой стороны выползать из каких-то локальных минимумов или не очень хороших областей Но может нас и немножечко запутать потому что из-за моменту как бы наш процедуру Может некоторая в некотором смысле заносить на поворотах на всяких но в целом Моментум почти всегда используется и показывает себя довольно хорошо Значит теперь у меня философский вопрос который написан на слайде если у нас в процессе обучения даже обычной линейной регрессии это неважно В общем в процессе

если у нас в процессе обучения даже обычной линейной регрессии это неважно В общем в процессе обучения какой-то модели мы понимаем что у нас какие-то параметры в процессе обучения слишком сильно меняют свои значения Ну то есть какая-то Омега она то положительная то отрицательная то МИД то плюс полтора и всё такое насколько это хорошо или плохо и почему это хорошо или плохо Кто может вращать барабан Да Кость Ну могу предположить представив опять же параболу что мы начинаем м слишком быстро

барабан Да Кость Ну могу предположить представив опять же параболу что мы начинаем м слишком быстро шагать и постоянно прыгаем между между вернее по обе стороны от нашего минимума и я бы сказал итогово что это плохо Ну просто предположение Ну принято Сергей да плюс-минус то же самое ну у меня просто то же самое было когда слишком большой Рей меня там туда-сюда относит и в плохом случае вообще начинаю Улетать в небеса угу вот Скорее Скорее всего проблема с ретом ну Да проблема с Le рейм на самом

Улетать в небеса угу вот Скорее Скорее всего проблема с ретом ну Да проблема с Le рейм на самом деле проблема-то с параметрами потому что это параметры как-то Странно себя ведут но единственный способ что-то сделать с параметрами у нас это по большому счёту изменить Learning Rate потому что ничего другого мы сделать не можем частная производная она как бы нам Ну по большому счёту она нам дана то есть пото мы никак не можем на неё повлиять Да у нас есть данные У нас есть функция потерь частные

есть пото мы никак не можем на неё повлиять Да у нас есть данные У нас есть функция потерь частные производные от этих штук зависит мы не от данных не можем избавиться ни от функции потерь не можем избавиться поэтому единственный способ на это повлиять - это собственно каким-то образом манипулировать и есть такое направление скажем так или класс алгоритмов в градиентной спуске которые носят общее название адаптивный Градиент и чаще всего их чаще всего их названия начинаются со слов Ада ну то

название адаптивный Градиент и чаще всего их чаще всего их названия начинаются со слов Ада ну то есть если вы видите что какой-то алгоритм оптимизации начинается с букв а это значит что в м каким-то образом есть адаптация диен смотрите давайте мы будем сохранять частную производную в переменную GT и будем квадраты этих частных производных просто добавлять как бы в Ну в такую в переменную аккумулирующий переменной то есть Прямо будем туда добавлять добавлять добавлять добавлять И после этого мы

переменной то есть Прямо будем туда добавлять добавлять добавлять добавлять И после этого мы будем использовать обычную формулу градиентного спуска но Learning Rate вот здесь вот будем делить на корень квадратный из накопленной суммы квадратов градиентов что в таком случае будет происходить ничего не будет происходить Ну очевидно что он будет меняться потому что нижня частно Да уменьшаться потому что накопленная сумма большая Ну соответственно если у нас будет какой-то параметр у которого

что накопленная сумма большая Ну соответственно если у нас будет какой-то параметр у которого квадраты частных производных будут очень-очень большие что это будет означать это будет означать что вот это вот G большая будет каким-то большим числом если мы из этого числа даже будем извлекать корень у здесь ВС рано будет значение больше ме параметр в процессе обучения и тогда для этого параметра мы будем использовать не оригинальный А как бы делённый на историю того как этот параметр в процессе

будем использовать не оригинальный А как бы делённый на историю того как этот параметр в процессе обучения бесился То есть фактически мы будем говорить что мы должны не просто использовать масштабированных очень сильно изменялся мы Learning Rate для этого параметра ещё больше Уменьши для того чтобы нормализовать обучение чтобы у нас не было такого что какой-то параметр ведёт себя нормально а какой-то скачет туда-сюда с огромной дисперсией изменений и таким образом мешает фактически всей модели

скачет туда-сюда с огромной дисперсией изменений и таким образом мешает фактически всей модели обучиться Вот А этот алгоритм называется аград и собственно он тоже вполне себе может использоваться они не самым таким Ну то есть для для того чтобы прийти к тому чтобы этот алгоритм обучать этим алгоритмом обучать как правило нужно там всё-таки провести некоторый анализ внутренний Да понять что это действительно вам нужно что у вас есть правда какие-то проблемные параметры но в целом

что это действительно вам нужно что у вас есть правда какие-то проблемные параметры но в целом поэкспериментировать с ним можно и без этого Но идея у этого алгоритма очень простая если есть какие-то параметры которые себя плохо ведут при обучении плохо ведут равно слишком волатильны и слишком с большими абсолютными значениями изменяются Значит мы будем для просто нормировать ещ сильнее чем это подразумевает Просто обычное его значение в чём может быть проблему этого алгоритма может замедлять

подразумевает Просто обычное его значение в чём может быть проблему этого алгоритма может замедлять решение Ну замедлять наверное да да но это не самая главная её проблема что будет происходить с параметрами там через много много много много эпох обучения зану наверное будут Нет почему Ну зану будут но только не они А вот вопрос что будет зану lear шаг Learning Rate будет зану то есть Представьте что у нас есть какой-нибудь параметр который Ну даже Пусть он нормально обучался но мы-то здесь

что у нас есть какой-нибудь параметр который Ну даже Пусть он нормально обучался но мы-то здесь накапливая квадраты Да грустно после там нескольких там сотен эпох это значение будет очень большим мы будем который и так будет какой-нибудь Ося делить на Пусть и корень но всё равно из какого-то числа lear будет ещё уменьшаться мы будем умножать его на частную производную и в итоге вот чтобы получить новое значение Мы из предыдущего будем Вычитать там какой-нибудь 0 Это означает что мы фактически

новое значение Мы из предыдущего будем Вычитать там какой-нибудь 0 Это означает что мы фактически Не обучаемся потому что слишком медленно всё это происходит Саша Да я вот не особою среди буквенных обозначений что где вот слева то есть GT это просто Градиент GT Чаво вот это вот Градиент функции потери снизу у большая G это у нас ну это переменный аккумулятор Ну вот у нас GT типа начальное значение там условно сум равно но и вот но п и так сум плю равно да да вот и получается GT к просто к НТА и

там условно сум равно но и вот но п и так сум плю равно да да вот и получается GT к просто к НТА и потом шаг А что такое СИ Снизу Ой не си Сигма маленькая или что это корень из нуля вспоминаю вчера же мы разговаривали А всё всё всё шум просто Дада корень из нуля не весело извлекать поэтому нет корень из нуля то весело извлекать Но не тогда когда он в знаменателе Угу Да всё понял спасибо Так ну как предлагаете исправлять собственно проблему то рано или поздно всё придёт к тому что Le Rate супер

предлагаете исправлять собственно проблему то рано или поздно всё придёт к тому что Le Rate супер уменьшится и мы фактически остановимся в обучении потому что вот это выражение через большое количество эпох но оно всё равно станет очень маленьким то есть мы перестанем обучаться как бы из этой ситуации мы можем аккумулировать типа щим окном что у нас не все градиенты аккумулируются какие-то он забывает какие-то прибавляет у нас сумма никогда не станет огромной Окей принято Костя ну фантазирую

какие-то прибавляет у нас сумма никогда не станет огромной Окей принято Костя ну фантазирую раз несколько эпох обнулять накопленную производную да на самом деле ближе был Сергей тут очень простая идея есть алгоритм который называется возникает вопрос Если у нас складывается такая ситуация что например Ну действительно если мы обучаем там 1000 эпох Нафига нам знать какая частная производная была у параметра на первой эпохи Да ну нелогично это было супер давно как бы ну пусть даже сначала там по

параметра на первой эпохи Да ну нелогично это было супер давно как бы ну пусть даже сначала там по каким-то причинам он слишком сильно менялся и вёл себя не очень хорошо Но это было слишком давно и кажется что то что было прям в самом самом начале нас для текущего там тысячного или двухтысячного шага не особенно должно волновать поэтому придумали алгоритм который фактически ВС то что он делает это экспоненциально сглаживать вспоминайте временные ряды экспоненциально сглаживает историю

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

называется rms про собственно очень тоже такой популярный алгоритм его даже обычно Вот все вот эти алгоритмы оптимизации их-то прямо публикуют доказывают теоремы что там всё это работает вот так и работает хорошо потому что и работает плохо потому что А rms про если кто-то слышал может быть Джеффри хинтон есть такой чувак он просто его где-то во время лекции студентам рассказал и ничего не доказывал просто сказал ну типа если вам не нравится он не использу Ду использовать и потом только спустя

просто сказал ну типа если вам не нравится он не использу Ду использовать и потом только спустя несколько лет там какие-то китайские упоротые студенты доказали все теоремы и вс остальное Вот но нетипичная история появления собственно Да прон потому что на самом деле Здесь тоже Root потому что корень квадратный здесь есть но как-то вот они так более-менее Независимо друг от друга появились в общем это два алгоритма которые аград ИС - это два алгоритма которые пытаются регулировать Learning Rate

это два алгоритма которые аград ИС - это два алгоритма которые пытаются регулировать Learning Rate в зависимости от того как себя параметр ведёт во время обучения это не единственные представители то есть есть ещё несколько есть а дельта А мак и всё такое во всех этих алгоритмах самый главный вопрос собственно то Как посчитать вот этот вот знаменатель всё остальное остатся прежним но разные варианты вычисления вот этого знаменателя в принципе там все эти алгоритмы естественно знать не нужно и

вычисления вот этого знаменателя в принципе там все эти алгоритмы естественно знать не нужно и все эти формулы тем более не нужно помнить главное просто запомнить две идеи что есть первая идея - Это идея импульса когда мы абсолютно как бы логично предполагаем что да если мы делаем множество шагов в каком-то направлении возможно нам нужно перепрыгнуть чуть больше чем было на Первом шаге и это помогает В каком-то смысле и ускоряет обучение и помогает из минимумов выбираться но в проблема там не

В каком-то смысле и ускоряет обучение и помогает из минимумов выбираться но в проблема там не только может быть скорости обучения А ещё и в том как ведут себя конкретные параметры поэтому здесь ходит как бы вторая генеральная идея методов оптимизации - это адаптивный Learning Rate что все параметры имеют разное влияние на функцию потерь какие-то параметры могут очень сильно изменяться и вносить некоторую нестабильность в обучение а какие-то параметры могут вести себя хорошо как бы нам не

некоторую нестабильность в обучение а какие-то параметры могут вести себя хорошо как бы нам не применяя конкретных преобразований к конкретным параметрам Выдумать схему по которой Learning Rate для раз Груп параметров будет вести себя немного по-разному и все эти алгоритмы они просто так и называются это концепция адаптивного Le Ну и как обычно если есть две классных идеи Что делают пнги а давайте не будем думать и соединим их обе в одном потому что это вроде как кажется такие из двух разных

не будем думать и соединим их обе в одном потому что это вроде как кажется такие из двух разных как бы с двух разных сторон смотрят на проблему обучения эти две концепции импульс адаптивного приду алгоритм который называется AD значит это adaptive M adaptive mation Ну то есть здесь есть и Моментум и есть и адаптивность градиента тут вычисляются две штуки мы подробно По формулам не будем это разбирать главное что используется то оба как бы оба подхода у нас с одной стороны считается определённым

главное что используется то оба как бы оба подхода у нас с одной стороны считается определённым образом бы вот это вот Импульс есть вот здесь вот и определенным образом считается знаменатель в котором мы регулируем lear Для различных параметров считаться он будет вот таким вот образом значит в алгоритме ам использованы обе концепции и адаптивного рейта и использование моменту так Ну тут кому интересно с потре как бы соединены два подхода поэтому появляется два параметра один параметр у нас

интересно с потре как бы соединены два подхода поэтому появляется два параметра один параметр у нас будет использоваться для бета 1 для того чтобы вычислить Моментум и второй параметр бета 2 будет использоваться для вычисления вот этого вот знаменателя в схеме регулирования значения lear А эти параметры по умолчанию 09 и 0999 есть такая байка что Андрей Карпаты который работал в Open и много всего сделал вообще для нга он когда-то шутки ради написал что нужно обучать модели Вот именно с такими

сделал вообще для нга он когда-то шутки ради написал что нужно обучать модели Вот именно с такими бета в этом алгоритме оптимизации и почему-то это стало типа дефолтов что типа в шутку написал И в итоге это всё перешло в официальную документацию пайтор но тем не менее это неплохие начальные значения с них можно начинать обучение ам - это алгоритм который Здесь всё уплыло вот ну короче говоря ам - это алгоритм который с которого рекомендуют очень часто начинать обучение Ну в плане того что у вас

это алгоритм который с которого рекомендуют очень часто начинать обучение Ну в плане того что у вас есть 25 алгоритмов градиентного спуска С какого бы начать Какой бы мне попробовать скорее всего если вы возьмёте ам всё будет нормально работать то есть в всё будет окей можете брать по дефолту Адам и всё будет классно вот у Адама есть недостатки в частности его недостаток в том что теперь нам нужно считать гораздо больше то есть на каждый шаг обучения мы должны считать и Моментум пересчитывать и

считать гораздо больше то есть на каждый шаг обучения мы должны считать и Моментум пересчитывать и адаптивность вот эту вычислять заново То есть это не самый быстрый алгоритм обучения и в некоторых задачах там там где Стаха ий градиентный спуск справится за 10 эпох адаму может понадобиться 20 эпох потому что он должен накопить какую-то информацию о процессе обучения Вот но в целом Это довольно популярный хороший алгоритм с него можно запросто начинать обучение и всё будет скорее всего всё будет

хороший алгоритм с него можно запросто начинать обучение и всё будет скорее всего всё будет хорошо вот значит Ну примерно так можно схему нарисовать что у нас есть какой-то вот градиентный спуск обычный две концепции Моментум и адаптивный Learning Моментум в свою очередь вылился вро accel градин то есть модификация моменту вот а дала рождение двум другим алгоритмам Дельта Сюда можно ещё 25 наверное Дописать каких-то вариантов разных но они все очень похожи друг на друга МС проб там и аград

Дописать каких-то вариантов разных но они все очень похожи друг на друга МС проб там и аград этого в принципе достаточно Хотя бы даже просто как таких буквенных конструкций в голове после того как они появились собственно возникла идея что надо бы объединить Моментум и идею адаптивности появился Адам потом подумали что если есть обычный Моментум и он используется водами давайте мы сделаем алгоритм который называется N Адам и в нём будем вместо обычного момента использовать Нестерово вариант и

который называется N Адам и в нём будем вместо обычного момента использовать Нестерово вариант и потом пошло сейчас одних Адамов наверное штук шесть разных есть Везде они там чем-то какими-то деталями отличаются но это уже как бы такое исследования ради исследований собственно Вот например Адам там и Адам V - это два супер популярных которые повсеместно сейчас используется Вот давайте вопросы Окей тогда здесь по ссылочки есть классная статья на хабре Но конечно же интересна она нам не из-за

Окей тогда здесь по ссылочки есть классная статья на хабре Но конечно же интересна она нам не из-за скучных формул а из-за классных гифок смотрите здесь есть гифки про то как наме ние моменту влияет градиентного спуска собственно мы можем увидеть что вот синяя линия да давайте тут она будет мельтешить Вот синяя линия это Моментум со значением Нет давайте возьмём самую маленькую Зелёная нев Моментум 025 то есть Что это значит Это значит что инерцию мы условно говоря используем наче ВИМ вот Рива

025 то есть Что это значит Это значит что инерцию мы условно говоря используем наче ВИМ вот Рива в минимум Да у неё нету никаких волатильности она просто идёт в сторону минимума и вот мы видим Нестеров Моментум 0975 то есть Ма просто моментом прям э включаем на полную и видите как себя ведёт при очень высоком моменту То есть он накапливает инерцию и потом понимает что вроде надо разворачиваться разворачивается вновь накапливает инерцию его опять заносит И опять он как бы вот таким образом

разворачивается вновь накапливает инерцию его опять заносит И опять он как бы вот таким образом путешествует вот а то есть влияние Моментум оно на самом деле достаточно велико то есть в итоге всё равно и то и то придёт в минимум тут вопрос просто Сколько для этого потребуется итерации для того чтобы Мы оказались в минимуме А есть всякие тут картиночки Ну давайте какую-нибудь да давайте вот здесь вот смотрите А вот есть э тоже минимум видите ада Дельта представитель адаптивного градиента не

вот смотрите А вот есть э тоже минимум видите ада Дельта представитель адаптивного градиента не может вот здесь вот спуститься в минимум То есть просто прыгает по стенкам как бы вот этой вот чаши и не может достигнуть минимум Ну тут опять же тут надо помнить мы решаем задачу не до тех пор пока мы нашли минимальные из всех минимальных минимальний значения мы решаем задачу до тех пор пока у нас не будет удовлетворительного значения метрики какой там был минимум для нас рого говоря не очень важно

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

вот у неё такая вот особенность есть тут где-то есть ээ Ну вот да ещё одна видите опять а Дельта прыгает вот так вот туда-сюда и не понимает Ну это надо сказать что это специальные функции типа которые сделаны для того чтобы мы могли проверить а функцию оптимизации То есть это на самом деле очень сложные функции и не очень большой процент методов оптимизации могут действительно найти минимум то есть они тут функция сама по себе с очень интересным рельефом или ландшафтом я не знаю как это

то есть они тут функция сама по себе с очень интересным рельефом или ландшафтом я не знаю как это правильно говорится Ну вот есть типа для поклонников Адама можете всегда вот эту гифку проводить начинают все методы откуда-то вот отсюда все в итоге останавливаются и не могут найти выход с какого-то плато просто потому что ну бы учак такой сложный пожалуста прекрасно приходит в минимум Так что если вы хотите рассказать что Адам самый классный алгоритм всегда показывайте вот эту картинку вот и ну

вы хотите рассказать что Адам самый классный алгоритм всегда показывайте вот эту картинку вот и ну Есть ещё такие штуки которые прямо так и называются Bit или плохая инициализация пожалуйста инициализирована плоский участок поверхности функции потерь участок плоский частные производные равны Ну какие бы вы включали моменту адаптивные градиенты и вс такое частная производная равна нулю значит Никуда мы нифига оттуда не выберемся вот поэтому должны были оказаться вот здесь случайным образом

Никуда мы нифига оттуда не выберемся вот поэтому должны были оказаться вот здесь случайным образом инициализировать чёрт знает где в какой-то неудачной точке всё встали в одном месте Ничего работать не будет Вот поэтому иногда очень полезно даже если вы видите что что-то как-то странно ваша модель обучается А вы Возьмите пере Создайте её Ну просто вот низи и заново обучите Шан очень мал но вки это занимает долю секунды и запустить обучение заново ничего не мешает предыдущем можно единствен

это занимает долю секунды и запустить обучение заново ничего не мешает предыдущем можно единствен красивы показал вот на уровне интуиции там что именно формуле в подходе Адама было другое что накопил какой-то хороший хорошую инерцию потому что видишь с одной стороны как бы как себя повёл например э например Нестеров То есть у Нестеров Здесь тоже накопил какую-то инерцию но при этом вот он как-то вернулся обратно Да потому что очевидно что там какой-то подъём который он преодолеть не смог а Адам

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

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

бы уже перескочил эту область но всё равно вернулся туда Ага а второй вопросик когда ты сказал пере инициализируется модель да типа последней фразой то сейчас Это имеется в виду что ну что-то изменить параметрах или просто пере не просто пересоздать модель вот как мол равно и запустить ячейку заново Угу в момент создания модели у неё инициализируется случайные параметры То есть фактически что вот мы можем представить что у меня есть нейросеть из двух параметров да то есть или я не знаю Линейная

мы можем представить что у меня есть нейросеть из двух параметров да то есть или я не знаю Линейная регрессия Да у меня есть где два коэффициента есть вот если у меня два коэффициента один например инициализирован 4 вот по этой оси вот случайным образом У меня два коэффициента приобрели в начальной инициализации вот такое значение Вот я и попал в эту плохую точку к тому что если я пере создам то тогда у меня может оказаться такое что у меня значение параметров будет 0,5 и например -1 и я

то тогда у меня может оказаться такое что у меня значение параметров будет 0,5 и например -1 и я стартануть только начали кодить поэтому я не помню где это в коде Это где-то автоматом как бы при создании модели когда ты пишешь модул равно и дальше слои вот это вот в этот момент инициализируется параметры Ага ну в смысле Они под капотом они как бы даже не видны их значения Ага О'кей спасибо ещё вопросы а можно вопросик ещё про Да никто там руку не держит а про м этот перескок да с минимума вот

а можно вопросик ещё про Да никто там руку не держит а про м этот перескок да с минимума вот опять же на уровне как бы фидбека когда мы пишем код и когда мы короче чтобы этот перескок скажем так заметить нам нужно на какие-то цифры смотреть или там автоматом он видит что Градиент стал поменял как бы м короче на производную О как бы сам смотрит или нам нужно это как-то предусмотреть нене не вам не нужно он сам всё это видит но там же это происходит он он собственно даже не то чтобы это видит там

нужно он сам всё это видит но там же это происходит он он собственно даже не то чтобы это видит там же фиксированная формула вычисления Поэтому ему даже смотреть Особо не надо как только плюсик на минуси изменился у тебя раньше складывалось а стало вычи Вот то есть это вам за этим следить не нужно но в целом надо просто помнить что как бы значение функции потерь очень Просто многие Переживают что если у них появляется какой-нибудь график типа при обучении не такой Гладкий и красивый как значит

если у них появляется какой-нибудь график типа при обучении не такой Гладкий и красивый как значит ну как вот привыкли все видеть значит во время обучения ВС может быть очень-очень нестабильно некоторые сети как бы обучаются так что у них может быть Вот такие вот дисперсии там да в значениях функции потерь функция потерь может выглядеть вот так может выглядеть Вот так это нормально То есть то что вы вчера получали на рафинированные задачи как бы такие гладенький [музыка] поэто Вполне возможно

вы вчера получали на рафинированные задачи как бы такие гладенький [музыка] поэто Вполне возможно что у вас там будут какие-то вот такие вот штуки если у вас функция потери выглядит вот так скорее всего что-то не очень хорошо идёт Мы всё-таки хотим чтобы она уменьшалась это просто для специфической сети функции потери там одна должна увеличиваться но в целом вот это вот колебание это нормально То есть это Окей вполне Так и должно быть этим ничего сделать може може поть [музыка] некоторое время

есть это Окей вполне Так и должно быть этим ничего сделать може може поть [музыка] некоторое время Саша да такой вопрос то есть у нас при решении какой-либо задачи мы использовали ам Вот и мы затекли то что он не находит минимум то следующее действия это просто перебирать из всех Существую методов поиска минимума а как ты определил что он не находит минимум ты Как ты вычислил этот минимум пользу Ну найдя все частные производные приравняли Ну условно да да А если в целом нет Если у тебя такая

Ну найдя все частные производные приравняли Ну условно да да А если в целом нет Если у тебя такая ситуация возникает здесь два варианты либо ты не подобрал неправильную функцию потерь второй вариант - это то что твои данные просто не ну как бы их невозможно решить Да невозможно на них решить ту задачу которую ты хочешь решить то есть условно на Адама Нет вообще резона гнать то есть это универсальная Панацея такая которая и вот это проблемы которые предшествуют я понял если у тебя Адам не

Панацея такая которая и вот это проблемы которые предшествуют я понял если у тебя Адам не находит минимум процентов 95 что проблема в твоих данных или в тебе проблема во мне да а не в нём я понял Спасибо всё тогда давайте в 10 с там встречаемся по новой ссылке тут я поставлю обрабатываться чтобы всё было побыстрее будем смотреть код

Так что можно сказать про репозитории Ну на самом деле ничего всё в репозитории тоже самое ссылки на дни в днях есть материалы ссылки на слайды на демо на задания иногда демо и задания будут в одном файле иногда в разных иногда Вам нужно будет взять файл и самостоятельно его создать просто по текстовому описанию то есть никаких заготовок там и всего прочего не будет В общем по мере усложнения будем будем разбираться отдельно у нас сегодня 0801 демо восьмая неделя и задачку я покажу решение

будем будем разбираться отдельно у нас сегодня 0801 демо восьмая неделя и задачку я покажу решение задачи очень простой это будет фактически Просто такая Логистическая регрессия на искусственно созданных данных импортируем точ Не забудьте выбрать то окружение где у вас Тор установлен потому что чтобы не устанавливать его там во все окружения подряд вот у меня ПТ называется окружение P torch и у меня здесь установлен торчи и много всего остального устанавливаю ему Man SE это как Random SE в

у меня здесь установлен торчи и много всего остального устанавливаю ему Man SE это как Random SE в нампа просто фиксирую генератор случайных чисел импортируют будут доставать слои для того чтобы задать модель импортируемые градиентные спуски в разных вариантах и из имю T dataset dater это тот самый который будет мне бами отдавать данные и romit это только нарвском языке значит T вот эта вот штука нам будет периодически нужна На самом деле мы фактически завтра уже будем пользоваться другим но

нам будет периодически нужна На самом деле мы фактически завтра уже будем пользоваться другим но она важна с другой точки зрения работает с типом данных который называется без разни на най массивы на панс на ВС остальное у него один тип данных который называется НР Поэтому если мы хотим передать что-то модели которая реализована на пайтор мы всё это переводим в нзр всё остальное пайтор он будет говорить что он не понимает что от него хотят И что это вообще за нам массив Зачем он нужен он ничего

что он не понимает что от него хотят И что это вообще за нам массив Зачем он нужен он ничего с ним сделать не сможет тип данных ну это классическая как бы штука то есть есть какая-то библиотека для созданы свои типы данных про всё остальное она не знает созданы они просто потому что с ними удобнее работать например тензоры в отличие от най массивах можно хранить на видеокарте и использовать и считать обсчитывают о существовании видеокарт вот поэтому сегодня мы возьмём датасет и превратим этот

обсчитывают о существовании видеокарт вот поэтому сегодня мы возьмём датасет и превратим этот датасет в Tor датасет то есть соответственно это будет тип данных который подходит пайтор Костя сори у меня отоп вопрос но короткий если мы заговорили про видеокарту просто мне нужно понимание реально ли имее там рядом ПК с маком сделать его типа сервером и на его видюхе всё считать на этой фазе Ну Стоит ли заморачиваться этим и вообще не без проблем Я бы так сказал потому что у Маков процессор в

Стоит ли заморачиваться этим и вообще не без проблем Я бы так сказал потому что у Маков процессор в принципе можно считать на маковском процессоре Я не знаю насколько полностью под него написаны все слои то есть те которые мы будем проходить на этой неделе Ну наверное большинство можно считать вот что будет дальше Мне сложно сказать но в целом Да на маковском процессоре можно считать те нужно установить Питер сервер на ма они у тебя будут в одной локальной сети и ты с другого компьютера сможешь

Питер сервер на ма они у тебя будут в одной локальной сети и ты с другого компьютера сможешь подключаться к нему и использовать его мощности Вот про то как бы как конкретно уже делать на видеокарте Я буду рассказывать скоре всего вре будут картинки и профильные слои для картинок и вот тогда я показывать буду на коллабе вот а вы можете либо Кола выбрать либо если у кого-то видеокарта есть Можете попробовать локально это использовать Окей спасибо вот значит T дас чтобы превратить наш дасе в НР

попробовать локально это использовать Окей спасибо вот значит T дас чтобы превратить наш дасе в НР который будет понимать pch я ещё импортируются для того чтобы мы могли не запуская обучение модели сразу понять что по крайней мере наша модель уже Рабочая то есть мы будем прогонять через нашу модель данные а будет нам распечатывать говорить какие у нас слои есть сколько в них параметров Ну в общем такая справочная информация по нашей модели дальше цветовой схемой можете Вот это закомментировать

такая справочная информация по нашей модели дальше цветовой схемой можете Вот это закомментировать если вам красота неинтересная можете оставить Если захотите установить будут оцтовой с графи они в общем довольно часто Нам будут нуж потому что в пансе удобнее более привы для нас всякие усреднения считать и вс остальное вот АНС просто сегодня для визуализации тут есть неведомая ячейка в которой написано сделаем датасет для Вот почему для Я не знаю возможно у меня было какое-то помутнение Короче

сделаем датасет для Вот почему для Я не знаю возможно у меня было какое-то помутнение Короче говоря мы просто читаем табличные данные наш Таргет То есть если мы вот здесь распечатаем Я создаю X и Y соответственно все до последние колонки это мои признаки последняя колонка - Это мой Таргет Ну Таргет у нас выглядит просто как нолики нолики и единички то есть вот последовательность ноликов и едини у меня 100.000 объектов 15 признаков в обучающей выборке и 100.000 для решения этой задачи значит

у меня 100.000 объектов 15 признаков в обучающей выборке и 100.000 для решения этой задачи значит давайте вот сюда перейдём у меня задача бинарной классификации То есть у меня просто в таргете нолик или единица Я понимаю что э задача бинарной классификации Я наверное могу решить с помощью обычной логистической регрессии Ну по крайней мере сделать из этого какой-то белайн самую простую модель использовать и понять Какое качество даёт самая простая модель чтобы было от чего отталкиваться что знат

и понять Какое качество даёт самая простая модель чтобы было от чего отталкиваться что знат Логистическая регрессия в термина в терминах Пато это один полносвязный слой и применён к его выходу сигмоида То есть у меня есть Вектор коэффициентов эти коэффициенты я перемножают признаки на выходе одно значение потому что для каждого объекта я прогнозируют либо ноль либо единица Ну понятно от нуля до единицы дальше уже там как-то округляют это полносвязный слой на вход к нему будет приходить N А у

единицы дальше уже там как-то округляют это полносвязный слой на вход к нему будет приходить N А у меня это 15 Почему Потому что у меня 15 признаков в моём датасете на выходе так как я хочу для каждого объекта прогнозировать только одно значение стоит единичка результат Вот этого я буду отправлять в сигмоида Ровно так же как это происходит в логистической регрессии поэтому следующий мой слой следующая моя функция - это просто сигмоида Элементарная модель собственно короче её можно было бы

следующая моя функция - это просто сигмоида Элементарная модель собственно короче её можно было бы записать в эрне Но где теперь элёр где мы значит теперь я использую Ту самую утилиту и у неё вызываю метод Get на вход эта функция принимает сначала модель я передаю туда модель и дальше вторым аргументом я ти знаю каже документаци вот втом для моде и в данном случае нам неважно наши это данные или не наши нам важно чтобы формат этих данных был тот который модель ожидает на вход поэтому я вот

или не наши нам важно чтобы формат этих данных был тот который модель ожидает на вход поэтому я вот здесь вот генерируют табличка в которой будет 32 объекта и каждый объект будет описан вектором из компонент есть это самом де тоже самое И 15 признаков Просто у меня 100.000 объектов в выборке А здесь я говорю мне 100.000 не нужны я возьму 32 и я генерируют такую матрицу абсолютно случайных чисел из нормального распределения Normal 32 объекта 15 колонок 15 колонок - это для меня самое важное

из нормального распределения Normal 32 объекта 15 колонок 15 колонок - это для меня самое важное Потому что моей модели пофигу сколько у меня строк в датасете ей важно сколько у меня колонок в датасете пото что от этого зат Все вычисления я модель и просто генерирует 32 будет генерируют случайных чисел но эта Матрица очень похожа на мои данные и отправляю в модель тут я вижу отчёт что у меня есть первый слой его ядро - это типа как бы Матрица с помощью которой мои входные данные будут

меня есть первый слой его ядро - это типа как бы Матрица с помощью которой мои входные данные будут преобразовываться то есть это параметры моей модели у не коэ ро из точнее 15 строк Да по одному значению в каждой Вот то есть у меня 15 коэффициентов в моей модели Люба Ну поскольку мы с Димой по объективным причинам начало пропустили Ты не мог бы в двух словах сказать важное чтобы нам было проще давайте Вы посмотрите видеозапись мы должны были закончить вместе с сером 40 минут назад а мы до сих

Вы посмотрите видеозапись мы должны были закончить вместе с сером 40 минут назад а мы до сих пор е это Разбираем смотрите начало запись идёт а как в следующий раз подключаться чтобы не через Костю получать ссылку на Zoom А ну у нас сегодня в дискорде в дискорде ссылка есть я отправил её сразу после того как мы закончили предыдущую трансляцию Спасибо в дискорде же все все все есть уже я видел что там много людей Ну просто утром ходили по сваку поэтому и ждали в слаке Окей Ну не давайте в с мы

там много людей Ну просто утром ходили по сваку поэтому и ждали в слаке Окей Ну не давайте в с мы для тех у кого какие-то проблемы как бы есть вот поэтому Давайте переходите в discord вот у вас там есть группа Я уже там скинул ссылку на плейлист на юбе поэтому Давайте все на discord ориентируйтесь только один вопрос в дискорде есть как бы наша группа там отдельно создано какое-то ответвление потому что у меня нет такой вот Ваша группа у меня такой нет просто А как туда вступить как куда

потому что у меня нет такой вот Ваша группа у меня такой нет просто А как туда вступить как куда вступить прошлую неделю Вика отправляла ссылки на вход вот я вступил тут просто общий Эльбрус А вот к именно Плутона Нет ну давайте я ещё раз скину СЛК Попробуйте Спасибо Паш напишите мне потом получится или не получится чтобы не было больше такой ситуации так а продолжаем соответственно у меня есть Матрица Матрица состоит из 15 коэффициентов это понятно почему их 15 потому что у меня 15 входных

Матрица Матрица состоит из 15 коэффициентов это понятно почему их 15 потому что у меня 15 входных признаков и выход для каждого из тридцати двух объектов первое число - это всегда количество объектов для каждого из три двух объектов я генерируют Ту самую Но вот здесь параметров у меня всего 16 все понимают Почему почему здесь 15 коэффициентов но параметров всего в слое 16 свободный член свободный член То есть если мы посмотрим на схему это будет у нас буквально вот это вот вот она 15

свободный член То есть если мы посмотрим на схему это будет у нас буквально вот это вот вот она 15 коэффициентов потому что 15 признаков плюс один свободный параметр Ну и FL ти сколько мне нужно значений для того чтобы этот сло Это количество с плавающей токо соответственно у меня отсюда выходит какое-то число оно не обязано быть в пределах от нуля до едини потому что это выход полносвязная теперь я применяю второй свой слой сигмой она у меня вторая вот она видите у сигмоида прочерк стоит

теперь я применяю второй свой слой сигмой она у меня вторая вот она видите у сигмоида прочерк стоит Почему Потому что сигмоида не обучается а Её задача перевести всё от нуля до единицы всё тока больше она ничего не делает поэтому неде параметров расть симода не обучается она просто масштаби данные ну и соответственно теперь выход с полносвязная для ри двух объектов один выход и с помощью сигмоида мы для ри двух объектов Превращаем выход полносвязная в то что мы будем называть вероятностью то

мы для ри двух объектов Превращаем выход полносвязная в то что мы будем называть вероятностью то есть сиг Будет отдавать нам вероятность что ваша модель подходит под ваши данные Потому что если я здесь например напишу Ну ошибусь скажу что у меня признаков например 989 и запущу видите у меня сразу ошибка Почему две матрицы не могут быть умноже ко мне пришло 32 объекта размером каждый 989 длинной А на вход она ждт что признаков будет 15 а не 98 поэтому здесь я сразу понимаю что у меня либо в

А на вход она ждт что признаков будет 15 а не 98 поэтому здесь я сразу понимаю что у меня либо в данных ошибка либо ошибка в модели поэтому здесь я ставлю N кого-то вопрос был отпал всё хорошо отлично Вот ну тут значит можно много всего посмотреть всякие общее число параметров число обучаемых параметров мы будем смотреть чем это отличается в четвер но пока нам главное что вот эта вот штука распечатала Мы видим что наши данные пусть даже случайные числа нужного нам формата вполне через модель

Мы видим что наши данные пусть даже случайные числа нужного нам формата вполне через модель проход это мы задали обычную логистическую регрессию теперь нам нужно превратить данные в те тот формат который у нас pch ожидает значит смотрим У нас есть X - это наши наша Матрица с признаками Y - это наш Таргет правильно Отто для об И теперь мы делаем следующую штуку мы говорим дае возьми на вход первое превратив нзр наш X это на данный момент у нас это на массив мы говорим преврати X в тип данных

превратив нзр наш X это на данный момент у нас это на массив мы говорим преврати X в тип данных парча и сделай его числом с плавающей точкой то есть точ то есть преврати ВНР Y и тоже сделай его флотом теперь на вход дасе пришло два тензора один из них - это Матрица признаков второй - это Вектор ответов Вектор таргетом нам типе данных Когда мы будем работать скамить Попроще будет в проходить Но сегодня мы прочитали пандем Да Frame значит мы должны этот Дай как-то перевести в нзр поэтому мы

Но сегодня мы прочитали пандем Да Frame значит мы должны этот Дай как-то перевести в нзр поэтому мы пользуемся этой штукой Вот значит нзр - это структура данных pch pch работает только с тензора и больше ни с чем в математике нзр - это многомерная Матрица Вот они взяли это название и просто назвали тип данных библиотеки нзм вот он на самом деле в математике это многомерный массив но строго говоря нзм может быть даже одно число именно типом данных нзр то есть я могу здесь написать tch НР и

нзм может быть даже одно число именно типом данных нзр то есть я могу здесь написать tch НР и сказать единичка пожалуйста вот оно одно число но это уже нзр вот в математическом смысле это не нзр Но в смысле пайтор как библиотеки которая воспринимает только тип данных TZ это тоже TZ Окей данные есть Значит теперь у нас dataset - это класс tenser dataset где-то он там в оперативной памяти у нас хранится нам нужно его разбить на две части для этого используем НМ спт передаём туда датасет 70%

хранится нам нужно его разбить на две части для этого используем НМ спт передаём туда датасет 70% оставляем на обучение 30% оставляем на валидацию мы можем распечатать у него там даже какие-то могут быть дата вот можно какие-то у него там методы посмотреть ters Вот видите dataset T это наши данные А это наши таргеты то есть он как бы их ранит м таким прям соответственно для вот этой вот первой строки у нас класс ноль для второй строки класс но и так далее теперь нам нужно сделать так чтобы вот

у нас класс ноль для второй строки класс но и так далее теперь нам нужно сделать так чтобы вот эти вот датасеты были разбиты на Бачи Потому что если они будут очень большие мы их не сможем на них не сможем ничего обучить поэтому мы берём переменные которые содержат себе датасеты и создам два загрузчика данных он для для нного это в него передам просим перемешать наши данные и указываем что размер одного Бача будет равен 128 тоже самое мы делаем с валидацию для Валида части отдельный дар

размер одного Бача будет равен 128 тоже самое мы делаем с валидацию для Валида части отдельный дар передаём туда валидация равно ба ра 128 есть собственно и вот этот вот лиций р вот Мы создали их Вот они так сам или Load это обычный генератор то есть мы можем можем его вот здесь распечатать Да но для начала его создать нужно распечатаем можем его с видите и можем его превратить в Точнее не превратить а достать оттуда один батч наших данных вот он один батч 128 строк 128 тарг то есть в датасете

а достать оттуда один батч наших данных вот он один батч 128 строк 128 тарг то есть в датасете у нас все данные в одном баче который мы можем вот таким образом распечатать из дара у на обе их ВС Значит у нас есть модель у нас теперь есть два загрузчика данных и в целом мы можем постепенно двигаться дальше так там какой-то вопрос был про Почему размер выборки не должен быть равен потому что у нас когда будет там я не знаю 100.000 объектов мы не сможем их впихнуть в модель потому что они в

у нас когда будет там я не знаю 100.000 объектов мы не сможем их впихнуть в модель потому что они в оперативной памяти не уместятся Почему ожен быть кран потом подст по точно количество об нас там будет я не знаю 52 целых Бача по 128 А в оставшемся пачке Ну останется там 30 элементов Ну то есть последний бач будет Не кратен мы возьмём максимально по столько по сколько у нас влезает а оставшиеся просто будет неполноценный бач Но этим будет заниматься дата лодер нам пофигу это он делает как бы

просто будет неполноценный бач Но этим будет заниматься дата лодер нам пофигу это он делает как бы если мы хотим чтобы у нас всё супер кратно было то мы можем здесь например написать Dr тогда у нас возьмётся столько бачей вот сколько кратно ровно по 12 но какая-то сть данных останется за пределами Но типа пусть там в каком-то баче будет 50 объектов Ну ой Пусть там будет 50 объекта во всех по 128 у нас будет в последнем 50 ничего страшного Так значит эту функцию я комментировать не буду она

128 у нас будет в последнем 50 ничего страшного Так значит эту функцию я комментировать не буду она будет рисовать просто кривые нам это обычный тут Ника [музыка] таким обм по ним [музыка] пробежаться распечатаем Да пожалуйста у нас 15 коэффициентов и один свободный член у них у всех есть поле означает что поля что эти параметры будут обучаться то есть для этих параметров мы будем считать градиенты в четверг мы будем в некоторых штуках отключать э диеты будем вкд ВС Моть всех параметров будет

в четверг мы будем в некоторых штуках отключать э диеты будем вкд ВС Моть всех параметров будет равен теперь Какие параметры будет оптимизировать наш наш оптимизатор мы создаём оптимайз модуль sgd GD здесь обозначает градиентный спуск а S обозначает хасти стохастический градиентный спуск Что это такое Я расскажу завтра главное здесь этот самы дит СПУ указать Какие параметры он будет оптимизировать то есть мы говорим хасти градиентный спуск будет оптимизировать вот эти параметры параметры нашей

то есть мы говорим хасти градиентный спуск будет оптимизировать вот эти параметры параметры нашей модели то есть вот здесь и обеспечивается связь между тем что модель нам что-то предсказывает Мы считаем какой-то Лос а оптимизатор нам эти параметры корректирует потому что оптимизаторы мы передали параметры модели с которыми он будет работать и указываем ему аргумент Learning Rate 5 в моём случае можно это параметр как всегда можно побольше Можно поменьше обычно у них есть дефолтные значения вот

это параметр как всегда можно побольше Можно поменьше обычно у них есть дефолтные значения вот с которых во всяком случае можно начать и попробовать приступить к обучению Ну дальше уже соответственно выбирать под свои нужды у меня по умолчанию стоит п вполне неплохой вариант для старта наша функция потери Так почему Можно указать не все параметры Да можно указать не все об этом будем говорить завтра откуда конкретные параметры модели Да случайным образом инициализирован мы ещё ничего с ними не

откуда конкретные параметры модели Да случайным образом инициализирован мы ещё ничего с ними не делали вот мы вот в этот момент когда а модель задали у неё автоматически инициализировать параметры эти параметры Я вот тут вот распечатал это случайные числа просто обычные случайные числа Теперь у нас есть модель есть Данные есть оптимизатор осталось нам сделать две вещи первое задать функцию потерь это бинарная энтропия NN binary cross entropy L ровно то что было написано на слайде с помощью неё

это бинарная энтропия NN binary cross entropy L ровно то что было написано на слайде с помощью неё мы будем считать то насколько наша модель ошибается на наших данных Была бы у нас другая задача например регрессии Как у вас сегодня вы бы использовали NN mse L а не B Cross и нам нужно написать вторая вещь которую нам нужно сделать это собственно написать обучающий цикл в котором у нас всё будет в одном соединено все наши данные модели оптимизатор функция потерь Я создаю четыре списка значит я

в одном соединено все наши данные модели оптимизатор функция потерь Я создаю четыре списка значит я вот эти комментарии читать не буду это то что я сейчас буду словами объяснять но для вас они здесь оставлены на вход точнее Давайте сначала само вам моя модель принимает моя функция Fit Mod принимает модель на вход и количество эпох собственно сколько эпох я буду обучаться Я создаю четыре списка и буду в процессе обучения мониторить две вещи это значение функции потерь на обучении на вали и

и буду в процессе обучения мониторить две вещи это значение функции потерь на обучении на вали и значение метрики на обучени и на валидации эти списки будут хранить значение этих характеристик по эпохам то есть не по чам А по эпохам задаю списки открываю первый цикл буду обучаться столько эпох Сколько пришло ко мне из Извне в мою функцию Сколько было передано ставлю модель в режиме обучения это говорит Том обучаться и в модели нужно будет вычислять градиенты создаю два списка это Лос и Метрика

Том обучаться и в модели нужно будет вычислять градиенты создаю два списка это Лос и Метрика на каждом баче То есть как бы внутри одной эпохи много бачей эту информацию Я тоже буду собирать далее бежим по обучающемуся проб Давайте Точнее я сделаю сейчас вот так вот пока никакой проблемы нет а потом будет даже не вот так а вот так получил предсказания эти предсказания Я отправляю в функцию потери То есть мне модель чтото предсказывала теперь я эти предсказания должен сравнить с таргетом какой-то

есть мне модель чтото предсказывала теперь я эти предсказания должен сравнить с таргетом какой-то функции потерь моя функция потерь это теперь выполняю те три самые пункта которые нужны для обучения обнуляю значение градиентов подробно об этом завтра Вычисляю частные производные отип применяю к тем параметрам модели которые переданы в оптимизатор градиентный шаг то есть корректирую знание параметров моде то пред предсказание сравнили с лами получили функцию поте обнулили градиенты посчитали

моде то пред предсказание сравнили с лами получили функцию поте обнулили градиенты посчитали частные производные сделали шаг корректировки параметров дальше У меня очень всё просто беру список в него записываю значит Почему у Лоса вдруг появился какой-то метод это изго конструкци информации чем просто число о значение функции потери Это сложный объект пайтор Если захотите можете в нём покопаться но мне оттуда нужна только одна штука мне из этого Лоса нужно только значение функции потерь чтобы

но мне оттуда нужна только одна штука мне из этого Лоса нужно только значение функции потерь чтобы достать из этого Лоса значение функции потерь я применяю к нему АТЕМ После этого мне просто возвращается обычный фут на сколько я ошибся в своей функции потерь и этот значение функции Я добавляю в свой список который будет хранить по Чам значение функции Потер теперь мне нужно посчитать метрику я называю переменную э и прошу вращать кого-нибудь барабан что у меня происходит Вот в этой строке прямо

переменную э и прошу вращать кого-нибудь барабан что у меня происходит Вот в этой строке прямо по шагам давайте давайте вот нуля и единицы предикты наши вероятности Ну чтобы с Ну аруси она считает не по вероятности по классу точно совпадение классов так вот мы округлили наши вероятности то есть не не целые числа не но и о то 0 и о в нижнюю сторону Я конечно не знаю По какому там это трешхолд это сделано но наверное по 05 всё так дальше Вот вот с в результате Вот это и получили список получили

сделано но наверное по 05 всё так дальше Вот вот с в результате Вот это и получили список получили список от потом мы просуммировать пония нашей штучки в яблочко формально не процент долю есть это выход модели вот этот у модели последний слой сигмоида Это значит что все предсказания будут в интервале от нуля до счи считали бы тогда вероятно поэтому мы говорим округли мне сначала всё чтобы все числа от нуля до единицы стали либо нулями либо единицами теперь Сравни два вот этих вот вектора там

от нуля до единицы стали либо нулями либо единицами теперь Сравни два вот этих вот вектора там где класс совпал где было но и 0 или о и о будет там где было 0 или 1 0 будет просуммировать знат значит но получили какую-то долю совпадений И после этого долю точнее получили какое-то количество совпадений вот этим суммированием и разделили на общее число попыток То есть фактически мы посчитали обычную э в па так часто бывает что метрики считаются ручками не Можно ли конвертировать это вни

обычную э в па так часто бывает что метрики считаются ручками не Можно ли конвертировать это вни импортировать э аы применим нужно его сча вы импортировать потом изн перевести в а потом только посчитать точность сорян я слишком ленивый я лучше напишу одной строкой и буду спокойно себя чувствовать вопрос Почему в такой умной библиотеке нету как слр номерными массивами в определённый момент оказалось что если есть автоматическое дифференцирование Давайте сети на НМ писать Ну а уж метрики сорян

что если есть автоматическое дифференцирование Давайте сети на НМ писать Ну а уж метрики сорян как бы в нампа же тоже нет метрик правильно тоже ВС руками вы считали вот тут аналогия скорее такая Но мы потом найдём библиотеку в которой будут метрики подходящие вот эпи этой части вопросы вот если отсюда Удалить Все честно говоря комментарии не больно-то здесь будет всё и сложно и много костюм Ну вопрос из этих из плохо формулирует как мы передали именно логистическую регрессию в качестве модели

из этих из плохо формулирует как мы передали именно логистическую регрессию в качестве модели то есть мы её как готовым модулем как это было раньше не передали по факту написали её сами да да А куда передали Ну у меня было ощущение что мы когда будем писать конструктор со слоями скажем те Вот тебе первый слой полносвязный и вот такая-то модель но по факту нет Вот же мы модель задали где она вот она Мы же модель задали Просто сразу последовательностью слоёв а потом е в обучающем цикле

она вот она Мы же модель задали Просто сразу последовательностью слоёв а потом е в обучающем цикле использовали написали прота функцию Да как вот руками бы в нампа могли мы написать логистическую регрессию Да тоже могли просто там было бы типа x x собачка на коэффициенты плюс B вот это вот а тут у нас такие более высокоуровневые обозначения Саша м да у меня вот вопрос Почему э у нас слой состоит из 151 А не количество объектов в баче один потому что у нас вот один объект - Это же наверное один

из 151 А не количество объектов в баче один потому что у нас вот один объект - Это же наверное один объект - Это же вот Вектор признаков нас очень сильно интересует сколько у нас объектов может нас больше интересует сколько у нас признаков Ну вот просто я не особо понимаю как как у нас пройдёт 128 объектов через слой Но у тебя будет Матрица 128 на 15 правильно 128 объектов будет Вектор коэффициентов м будет 15 значений мы можем Матрицу на Вектор умножать Всё я понял точно Да да спасибо то есть

м будет 15 значений мы можем Матрицу на Вектор умножать Всё я понял точно Да да спасибо то есть было бы у нас нам тут вот Прямая аналогия С линейной алгеброй Как мы можем 2 умножить ну две матрицы друг на друга нам нужно чтобы число колонок первой бы было равно числу строк второй при этом про число строк в первой нам вообще без разницы сколько там будет строк 10 Ну я я понял аналогию что вот у нас есть как и в линейной регрессии Матрица объект признак и мы как бы перемножаемых валидации перед

есть как и в линейной регрессии Матрица объект признак и мы как бы перемножаемых валидации перед началом валидации по ходу обучения и используем with torch неправильно with torch No про то что такое inference Mode я скажу ближе к проекту вам это понадобится там больше чем сейчас with torch так же как у меня в слайдах вот здесь вот используем ничего не оптимизируем всё О'кей всё просто предсказание этот функция потерь функцию потерь добавили точность посчитали А запихнули в список значит и

этот функция потерь функцию потерь добавили точность посчитали А запихнули в список значит и дальше у меня Просто усреднение теперь у меня в Train loss E А есть список с с Лоса по Чам усреднять получаем лосы на а эпохе тоже самое в Валида лосы усреднённый Лос по эпохе здесь аналогия только с обучающей частью а не [музыка] валидацию итерацию печатать или может быть там раз во сколько-то итераций печатать Лог обучения и ввиду того что фун обу во то есть я говорю вот моя модель обуча 20 эпох а

печатать Лог обучения и ввиду того что фун обу во то есть я говорю вот моя модель обуча 20 эпох а четыре списка помести Мне вот в распакованные распакуй помести мне в нужные переменные но сейчас мы запустим и всё упадёт ну для начала мы запустим вот эту ячейку и всё упадёт потому что первое мы не задали критерии Ну не мы а я не задал критерий запускаем эту ячейку возвращаемся е раз функцию в ячейку запу отлично смотрим где ошибка значит ошибка тридцать четвёртая строка это очевидная ошибка из

запу отлично смотрим где ошибка значит ошибка тридцать четвёртая строка это очевидная ошибка из обучающего блока Criterion то есть пытаемся посчитать функцию потерь передаём prediction labels пока всё выглядит супер логично содержательно мы правы идём Дальше Ну дальше будет написано не очень понятное на первой взгляд штука но нам важно понять В какой строке мы ошиблись а то как там пайтор что-то уже внутри вызывает особенно информации никакой не даст и смотрим что здесь написано значит

что-то уже внутри вызывает особенно информации никакой не даст и смотрим что здесь написано значит использование размера таргета просто 128 и оно отличается от входных данных то есть от предсказаний потому что у входных данных Сай 128 на1 не совпадают наши форматы не может посчитать нах раз разме векторах знание функции поте у нас здесь есть два выхода первый выход сделать так чтобы в наших лейбла было не 128 а 128 за второй выход это сделать так чтобы у нас в наших предсказаниях было не 1281 а

было не 128 а 128 за второй выход это сделать так чтобы у нас в наших предсказаниях было не 1281 а просто 128 Выбирайте сами что вам больше нравится но эво возникает то перед функцией в которой У нас есть ошибка мы делаем следующую штуку мы пишем Print Target size и пишем здесь Lab можно можно написать Попай торский сайз А можно Давайте здесь напишем S можно написать по-старому по привычному вам predictions Точнее они называются у меня predictions обновляем функцию запускаем вот он наш Принт

predictions Точнее они называются у меня predictions обновляем функцию запускаем вот он наш Принт собственно то же самое что и написано на самом деле в моём в моей ошибке ниже в предсказаниях есть лишнее измерение оно мне не нужно я его могу удалить очень простой функцие методом точнее который называется с Я ставлю точку и с мину Почему ми потому что у меня единичка как бы последний индекс эту единичку Я хочу убрать этот метод называется скзи смотрим в принте Всё окей то есть я понимаю что я

единичку Я хочу убрать этот метод называется скзи смотрим в принте Всё окей то есть я понимаю что я привёл их к нужному размеру едем дальше значит этот Принт мне больше не нужен Я говорю prediction с -1 То есть я убираю эту единичку и дальше уже без единички вот этой лишней передаю свои данные функцию потерь Саша это типа шейпа сквизи - это значит убери единичку которая ничего не значит сквизи работает только с единий То есть если бы у меня было например 1282 то скзи я бы не мог использовать

работает только с единий То есть если бы у меня было например 1282 то скзи я бы не мог использовать там уже либо й либо ну То есть это просто типа вектор вектор столбец Вектор строку перевести Да да да А Костя спрашивает если наоборот то вю А давайте я отвечу Так не стоит сегодня вскрывать эту тему вы ещё молодые Вам всё легко вот э Мы про Вью поговорим буквально Завтра вот э поэтому Давайте оставим это на завтра сегодня мы не решейп мы просто убираем вот эту бесполезную единичку вот а про то

это на завтра сегодня мы не решейп мы просто убираем вот эту бесполезную единичку вот а про то как работает viw - Это фактический решейп но но вызывает некоторый страх мы поговорим завтра и в среду и в четверг про это будем говорить Ну использовать это будем Значит чтобы вот эту штуку не дить на самом деле можно фактически сделать это прямо Вот здесь то есть никакой разницы не будет тоже самое пришли убрали единичку и отправляет ВС э функцию потерь обязательно следите вот как бы очень часто

пришли убрали единичку и отправляет ВС э функцию потерь обязательно следите вот как бы очень часто такая ошибка возникает либо похожая тоже с размерностей просто шейп и посмотрите что у вас там по-другому к сожалению нельзя ничего решить Окей значит тут у меня в Валида цикле точнее Валида шаге у меня в принципе всё хорошо поэтому мы можем ещ раз обновить и попробовать Ну да Теперь я оптимизатор не не задал в ячейке выше но хочу заметить что оптимизатор у меня ниже Поэтому вот эта вот штука уже

не задал в ячейке выше но хочу заметить что оптимизатор у меня ниже Поэтому вот эта вот штука уже вся прошла то есть всё окей Всё отработал Просто он не нашёл в пространстве имён оптимизатор задаём оптимизатор и ещё раз запускаем Ну всё моя Махина работает фунте донного момента и на валидации на обучении но как мы видим 20 эпох будто бы многовато Да примерно эпохи с д уже ничего интересного не происходит то есть моя модель фактически нашла какой-то минимум который могла найти учитывая данные и

то есть моя модель фактически нашла какой-то минимум который могла найти учитывая данные и учитывая её возможности распечатаем Что у нас там происходит сейчас Да я случайно А кстати говоря випу Это то есть ну в нашем случае продолжила ничего не делать скажем так потому что она уже не обучается в отличие от Эрна пай торский модели можно пять эпох обучить посмотреть что как потом ещё пять эпох обучить опять посмотреть что как то есть их можно обучать просто вот в несколько этапов вот если мы

обучить опять посмотреть что как то есть их можно обучать просто вот в несколько этапов вот если мы хотим сбросить нашу модель то мы должны первое что сделать это переливать эту модель раз задали новую модель и второе что очень важно делать о ЧМ нельзя забывать особенно Завтра вы будете с этим веселиться отдельно заново создать оптимизатор Потому что если я модель обновил А в оптимизаторы лежат старые параметры у меня ничего не будет обучаться Обновили модель Обновили оптимизатор функцию потерь

параметры у меня ничего не будет обучаться Обновили модель Обновили оптимизатор функцию потерь можно Не обновлять она ни от чего не зависит она просто считает разницу и поэтому е Пустим обучение что о построен на переобулась Поэтому вот мы задали у нас также примерно с д трина эпохи ничего не происходит рисуем Ну в общем пожалуйста лосы падают растёт задача естественно Элементарная искусственная поэтому здесь всё относительно хорошо Костя А почемуже эхо зафиксирован изначально был я думаю что

поэтому здесь всё относительно хорошо Костя А почемуже эхо зафиксирован изначально был я думаю что это скорее вопрос округления потому что где-то там в каких-то числах после запятой может быть что-то выпало другое вот но тут у меня вот они 3 F где-то Пятёрочка превратилась из за округления в шестёрочка соответственно так получилось Окей вот Ну и не надо забывать что параметры А ну да здесь Random сит ты правильно сказал Сергей знае ты начал куда-то идти тебя стало плохо слышно не знаю Связаны

сит ты правильно сказал Сергей знае ты начал куда-то идти тебя стало плохо слышно не знаю Связаны ли эти два события так сечас должно быть лучше имеет смысл нам тут реализовывать наа о чтобы мы Ну тили эпох если у нас уменьшение функции ото порога ре ня смыс ид Даше э штуки и сре просто сюда и добавляешь И если что-то то брейк пожалуйста продолжаю идти к знания Да так хорошо ну здесь мы обучили понятно всё окей можем посмотреть на новые знания параметров ониче интм на самом деле видите при

понятно всё окей можем посмотреть на новые знания параметров ониче интм на самом деле видите при некоторых признаках коэффициенты большие больше больше единицы в абсолютном измерени а при некоторых например о со Это означает что какие-то признаки модель автоматически Ну как в обычной логистической регрессии правильно чем больше признак тем больший вклад он коэффициент перед признаком тем больший вклад он вносит в финальное Решение вот здесь это у нас сработало тоже в принципе достаточно

вклад он вносит в финальное Решение вот здесь это у нас сработало тоже в принципе достаточно автоматически вот Ну значит давайте сделаем модель больше просто последовательность слоёв сигмоида с дротом это похоже на то что у меня было в лекция создадим новый оптимизатор потому что у нас новая модель и запустим обучение Увидим что функция потерь падает обучается Ну по скорости может быть чуть-чуть побыстрее но не генерально вс-таки это совсем Элементарные штуки и всё относительно номы видим сри

побыстрее но не генерально вс-таки это совсем Элементарные штуки и всё относительно номы видим сри чтоб [музыка] туда куда пришла вот эта вот например модель Да смотрите она здесь в Сой ушла а здесь она Ну находится ещё в десятых тут вопрос почему Да очень просто параметров стало намного больше соответственно пространство поиска минимума стало намного больше И пока мы обсчитать ПВО ши сложнее потому что коэффициентов больше но при этом мы видим что Метрика в общем-то может быть нам и не нужно

что коэффициентов больше но при этом мы видим что Метрика в общем-то может быть нам и не нужно там гаситься до какого-то минимума прям да Супер минимума у нас Метрика уже если Нас устраивает то Окей ну как бы всё хорошо Метрика высокая значит задача решена какое там абсолютное значение Лоса если Нас устраивает Метрика пофигу какое там абсолютное значение Лоса Саша да вот сейчас упомянул больше пространства стало Это я пропустил момен ты сейчас прогнал модель через всю все данные а не через Бачи

стало Это я пропустил момен ты сейчас прогнал модель через всю все данные а не через Бачи правильно через все данные да Всё то есть я видите Я вызвал Ту же самую функцию я просто в неё новую модель передал и всё вот обучается дольше Лос не такой приятный но в общем-то Мы видим что на самом деле на валидации О да вот у меня какой вопрос всё никак понять не могу а почему у меня вот здесь такой большой Лос А здесь смотрите сопоставимый на валидации модель и мы видим что действительно валидация вот

Лос А здесь смотрите сопоставимый на валидации модель и мы видим что действительно валидация вот здесь намного ниже А обучение Ну прям больше в 10 раз как минимум что у нас тут такого происходит-то ДПТ Ну дропаут вот он дропаут Да давайте Ну как бы дропаут табличка - это скажем так верный указатель к правильному ответу тут надо все веса Ну не подгоняется под определённые веса наверное которые больше всего влияют Ну да как это связано с валидации Ну что он хорошо обобщает все параметры наверное

всего влияют Ну да как это связано с валидации Ну что он хорошо обобщает все параметры наверное Ну функция потерь всё-таки в 10 прямо раз ниже прямо существенный такой отрыв скажем давайте у нас есть шаг обучения шаг валидации есть ДТ и почему-то на валидации всё лучше чем на обучении отип не знаю смотрите - это метод регуляризации Когда вы обучили линейную регрессию Ну да регуляризации когда вы её применяете линейную регрессию у вас вот это дополнительны функци г используется Если вы

когда вы её применяете линейную регрессию у вас вот это дополнительны функци г используется Если вы применяете модель вот к вам прил объект У вас есть обычная Линейная регрессия она была обучена С2 регуляризации к Вам пришёл объект в обученную линейную регрессию что происходит вот с этим коэффициентом регуляризации лямбда или я не помню как он с называе он используется где не используется потому прини при при вычислении функции поте больше то есть при применении модели коэффициент регуляризации

при при вычислении функции поте больше то есть при применении модели коэффициент регуляризации не используется Ему просто некуда там использовать потому что у вас есть просто коэффициенты вы перемножили входящий объект и всё пожалуйста вот ответ вот с дротом происходит тоже самое д включается только на обучении То есть когда вот здесь вот стоит модель понимает что надо использовать когда мы модель переводим в режим EV дропауты перестают использоваться Почему Потому что дроу - это регуляризация

переводим в режим EV дропауты перестают использоваться Почему Потому что дроу - это регуляризация обучение Когда наша модель применяется когда мы её проверяем нам не нужно никакие нам и так как бы плоховато Да все модели ошибаются А если мы ещё какие-то признаки из входящего объекта будем удалять с помощью дроу Ну зану фактически то модели будет просто сложнее это сделать То есть когда мы модель применяем когда мы Валиди мы не используем dropout dropout отключается в режиме валидации то есть мы

когда мы Валиди мы не используем dropout dropout отключается в режиме валидации то есть мы хотим модели процесс обучение усложнить но когда мы её проверяем мы даём данные в том виде в котором они изначально У нас есть без всякого там зануления признаков именно с этим связано то что и здесь ну здесь очень в меньшей степени потому что у нас как бы шаг валидации всегда за шагом обучения поэтому на валидации у нас метрики будут Ну типа такие могут быть повыше ти Видите вот здесь вот Мы начинали как

у нас метрики будут Ну типа такие могут быть повыше ти Видите вот здесь вот Мы начинали как бы с какой-то относительно низкой метрики А первое вычисление эси на валидации уже высокая потому что модель уже чему-то научилась но эта разница Она обычно Ну не такая большая мы здесь всё-таки видим 96% и там 99 Ну не Бог веси это какие-то там сотые Но вот здесь вот такая разница между обучающим лом И валидация обу с дротом а на шае валидации дроу нет и намного легче предсказать поэтому на валидации

валидация обу с дротом а на шае валидации дроу нет и намного легче предсказать поэтому на валидации Бывает такое что на валидации Лос ниже чем на обучении это нормально и происходит это как раз-таки из-за дропаут Ну именно та настолько выражено из дропаутов а какие-то мелкие такие отклонения они могут происходить по причине того что валидация всегда за обучением то есть модель что-то Уже выучила О'кей это вторая модель долгая по качеству вроде тоже хорошая но вроде обучается ещё больше а

О'кей это вторая модель долгая по качеству вроде тоже хорошая но вроде обучается ещё больше а давайте сделаем модель в которой будет сколько у нас получается 189000 параметров Абсолютно нерационально для датасета из 100000 объектов и 15 колонок но так как всё это делаем комплюктер то можем просто посмотреть как это всё выглядит значит модель обучается Лос мы видим тоже довольно высокий с самого начала был но потом она явно нашла какое-то направление минимума Поэтому вот тут вот у нас произо

начала был но потом она явно нашла какое-то направление минимума Поэтому вот тут вот у нас произо перелом бы 066 сразу 1 со вот а но обучается как мы видим Некоторое количество времени превышающая то что было выше 17 Ну сейчас посмотрим что она там последняя видите параметров много на первых эпохах она не очень понимает В какую сторону искать этот минимум просто Потому что слишком большое большая размерность пространства в котором мы вынуждены найти какой-то спуск значению минимума Но как

размерность пространства в котором мы вынуждены найти какой-то спуск значению минимума Но как только она его находит бинарная энтропия прекрасная функция потерь по ней так классно путешествовать и искать минимум она очень похожа на параболу выглядит Ну с некоторыми поправками А в параболе парабола функция выпуклая поэтому там всё нашл куда идти и катись собственно куда хочешь куда тебе нужно резко Лос падает потому что модель нашла в какую сторону нужно с которая в маленьком пространстве сразу

Лос падает потому что модель нашла в какую сторону нужно с которая в маленьком пространстве сразу поняла куда надо идти но 15 параметров это вполне себе Вполне себе удобное количество измерений вот у меня всё по коду Давайте вопросы так много инф после кани во неделька она будет насыщенная потом будет больше практики чуть меньше нового но больше практики новые слои будут у нас примерно примерно каждую неделю Но сегодня день такой А да любовь а ну вот я мы все увидели что когда ты повторно

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

модель пересоздать чтобы инициализировать новые случайные значения прямо берём тыкаем запустили всё второе Что нужно сделать обязательно это пересоздать оптимизатор вот у меня оптимизатор сейчас к оптимизаторы прикреплены старые параметры модель у меня обновилась Поэтому обновляем заново оптимизатор Всё теперь наша модель сбросилась мы обучаем её заново задание взять pricing максимально предобработки провести Илин или что-то ещё не надо на это время тратить берите Ту самую рабочую рабочий

провести Илин или что-то ещё не надо на это время тратить берите Ту самую рабочую рабочий датасет и Используйте его здесь у меня некоторые комментарии есть есть некоторые значит пояснения по поводу того Какую модель создать и собственном модифицировать буквально сегодня задачу регрессии которая у вас есть вот что что важно Помните о том чем задача классификации отличается от задачи регрессии и Помните о том что иногда в размерностей что вам пишет если понятно что для вас Эти ошибки все новые Но

о том что иногда в размерностей что вам пишет если понятно что для вас Эти ошибки все новые Но рано самый отличный способ как бы разобраться в том что происходит внутри вот произошла у вас там ошибка не знаю где-то вот как у меня было на вычислении лосса Лос зависит от двух вещей от этого И от этого сделайте Принт посмотрите что там потому что иногда Вы можете что-нибудь пропустить и вы рассчитываете что там что-то одно содержательно а там вообще какая какая-то чушь просто написана поэтому

что там что-то одно содержательно а там вообще какая какая-то чушь просто написана поэтому распечатайте лишний раз загляните в свои переменный и посмотрите что там хранится вот если у вас что-то не работает значит Антон хороший полицейский Я плохой полицейский А если вы присылаете мне скриншот кода и говорите у меня не работает Я даже этот скриншот открывать не буду не то что там какие-то реакции стоить или что-то такое если у вас что-то не работает я жду фрагмент кода в котором это не работает

стоить или что-то такое если у вас что-то не работает я жду фрагмент кода в котором это не работает а потом жду пункт номер один я посмотрел что у меня содержится в этих переменных там то то Я посмотрел в Гугле в Гугле посоветовали сделать это я это сделал у меня вот то-то получилось Я зашёл в документацию У меня получилось то-то Я спросил уча gpt он мне сказал то-то если под вашим вопросом нету нескольких пунктов того как вы хотели это решить Я не буду на него не то что отвечать даже открывать

пунктов того как вы хотели это решить Я не буду на него не то что отвечать даже открывать его не буду вот ну тут всё справедливо Если вы не тратите время на решение собственной проблемы а я в отсутствие телепатически и всяких остальных сверх возможностей должен как-то понять что у вас происходит внутри это очень сложно поэтому потратьте 15 минут распечатайте погуглить Посмотрите И после этого скажите мне что вы попытались сделать А я скажу В чём может быть ещё проблема 98% проблем с которыми вы

мне что вы попытались сделать А я скажу В чём может быть ещё проблема 98% проблем с которыми вы будете встречаться - это проблемы с которыми встречаются все кто начинает изучать пай точ в интернете куча просто всего и ик оверфлоу и сам форум пайтор где бедный чувак даже получил на одной из конференций премию за то что он там на какие-то сотни тысяч вопросов ответил Я думаю что если вы туда будете натыкаться вы его Аватор быстро запомните вот а поэтому вряд ли у вас будут какие-то супер

будете натыкаться вы его Аватор быстро запомните вот а поэтому вряд ли у вас будут какие-то супер уникальные проблемы но всегда жду э перечень того что вы попытались сделать для того чтобы свою ошибку исправить если этого перечня Нет нету моего ответа на вопрос вот а ну а так что всё пора пора пытаться писать и программировать собственно Всё тогда в бой Спасибо успехов у нас вечером будет встреча какая-то или давайте мы договоримся на этой неделе мы будем созваниваться понедельник вторник и

какая-то или давайте мы договоримся на этой неделе мы будем созваниваться понедельник вторник и среда в 17:00 потому что количество вопросов Может чуть превышать там какие-то полчаса вот поэтому мы будем созваниваться в 17:00 в четверт вас вечерком часов в 5 заберут от меня но в четверг относительно лёгкая тема Я не думаю что там будут какие-то вопросы вот а на следующей неделе уже отдельно в понедельник договоримся вот на этой неделе Давайте на 17:00 ориентироваться а по сложности задания

понедельник договоримся вот на этой неделе Давайте на 17:00 ориентироваться а по сложности задания недели как распределены Ну мне кажется что наверное самое сложное в среду Угу Не ну сае сложно в пятницу потому что в пятницу нужно будет сделать проект А так по сложности восприятия это технически самые сложные пятница интуитивно Мне кажется самая сложная среда класс успехов Давайте помните что вы не первые проходите этот путь всё получится даже если сегодня кажется по-другому СБО L

чем мы будем заниматься мы будем изучать нейронные сети для нас главные две вещи это собственно сами по себе нейронные сети и способ их реализации мы будем пользоваться библиотекой pch есть библиотеки проще есть библиотеки сложнее пайтор фактически стандарт индустрии поэтому мы будем заниматься с использованием его но в целом Если вы нормально освоите то ни с одной другой библиотекой проблем не будет все довольно похоже устроены у них может быть где-то разный синтаксис там или что-то отличаться

все довольно похоже устроены у них может быть где-то разный синтаксис там или что-то отличаться какие-то методы может быть названия классов Но логика везде будет одна и та же поэтому зная P torch в общем как минимум прочитать всё остальное А При желании и что-то реализовать на другой на другом фреймворке тоже получится у нас всего будет 4 недели Значит на этой неделе мы посмотрим про то вообще как выглядит сам pch и про то как можно с помощью него построить самые простые сети Ну они будут такие

выглядит сам pch и про то как можно с помощью него построить самые простые сети Ну они будут такие условно самые простые потому что уже завтра послезавтра и в четверг мы будем заниматься картинками к четвергу вы будете уже знать о моделях довольно больших по объёму как бы по своему составу и по прочему Вот и мы уже даже на этой неделе будем использовать предо обученные модели то есть мы какую-то часть обучим сами какую-то часть будем использовать об а для какой-то части моделей мы будем

часть обучим сами какую-то часть будем использовать об а для какой-то части моделей мы будем использовать такую как бы будем брать готовую модель и немного её подпиливать под свои данные все 4 недели будут заканчиваться командными проектами все командные проекты - это что-то сделанное на Стрим лите куда можно зайти потыкать и соответственно показать это сво своей Бабуш своему коту или кому-то ето связа с картинками такая содержательность мы будем заниматься несколькими задачами связанными с

ето связа с картинками такая содержательность мы будем заниматься несколькими задачами связанными с обнаружения объектов сегментации объектов и в общем со всем тем что относится не просто к какой-то классификации картинок ну такой довольно общей простой уже решенной задачи а немного усложненной так скажем версии третья неделя у на вся будет посвящена текста на проекте вы вспомните и классические подходы ML к обработке текста а мы затронем то как собственно сейчас задачи связанные с текстом

подходы ML к обработке текста а мы затронем то как собственно сейчас задачи связанные с текстом решаются спойлер сразу никаких Т gpt ничего такого мы не сделаем потому что доча gpt есть громадный плас того Как развивался развивались вообще подходы к обработке текста Вот и принципиального понимания Ни о каких gpt ровно никак невозможно получить если не понимать как э устроено то из чего состоит чат gpt а этим мы как раз займёмся четвёртая неделя она собственно будет относительно простой будет э

gpt а этим мы как раз займёмся четвёртая неделя она собственно будет относительно простой будет э 2 дня рекомендательных систем один из которых даже не будет ней рости вым будет совершенно обычным а таким пандесон аналитическим и но уже как бы позволяющим какую-то простенькую рекомендатель ную систему построить второй день будет связан с не росте выми рекомендациями и потом будет большой проект по парсингу поиску нейросетям в общем будет такой относительно полноценный продукт который будет

по парсингу поиску нейросетям в общем будет такой относительно полноценный продукт который будет состоять из нескольких компонентов вот может быть вопросы какие-то по тому что я сейчас сказал Окей значит Сегодня мы посмотрим что такое вообще глубокое обучение Ну собственно это фактически равно нейросети Потому что сейчас уже такие простые нейросети Не используют у них довольно ограниченная сфера применения Ну и вообще довольно много всего сложилось и появление фреймворков и появление видеокарт

применения Ну и вообще довольно много всего сложилось и появление фреймворков и появление видеокарт и разработка всяких математических штук которые собственно показали что чем в нейросети больше слоёв тем лучше это не всегда так и У всего есть предел но в целом как бы обучение глубокое потому что все поняли что А давайте мы сделаем очень-очень-очень большую сеть и посмотрим что она нам ответит на какой-нибудь вопрос поэтому глубокое обучение фактически на данный момент равно нейронной сети а и

какой-нибудь вопрос поэтому глубокое обучение фактически на данный момент равно нейронной сети а и вспомним несколько элементов часть из которых вам уже известно вроде как там функции потерь что-то связанное с регрессия что-то связанное там с какими-то энтропия посмотрим на несколько функций активации которые часть из которых вам тоже уже известно Ну как минимум скажем так одна известна Вот и посмотрим что нужно как бы в какой по какой схеме это нужно всё объединить для того чтобы получить

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

мы говорим что у нас есть определённые данные у нас к этим данным есть определённые ответы и мы хотим подстроить какой-то алгоритм и сделать так чтобы в как бы в обмен на данные которые мы в этот алгоритм отдаём алгоритм отдавал нам какой-то ответ то есть это такая классическая постановка обучения с учителем Да мы не хотим сами выискивать никакие правила в наше Да мы хотим просто сказать какому-нибудь алгоритму что вот смотри у меня есть вот такая вот квартира у этой квартиры есть такая площадь

алгоритму что вот смотри у меня есть вот такая вот квартира у этой квартиры есть такая площадь у это э квартира расположена вот на таком этаже и стоит она вот столько давай-ка ты скомбинированы этаж удалённость от метро и всё такое вот каким-нибудь образом [музыка] скомбинированы Вот то есть мы сами не сидим и не анализируем Что ага вот если я там увеличу Стоимость площадь квартиры настолько На сколько увеличится цена и всё такое мы говорим что у нас есть алгоритм неважно нейросеть бустинг

На сколько увеличится цена и всё такое мы говорим что у нас есть алгоритм неважно нейросеть бустинг Линейная регрессия Случайный лес мы ему говорим вот тебе данные вот ответы придумай мне какую-нибудь схему по которой в ответ на данные ты будешь давать мне точные ответы это уб сния особенно не надо Да ну есть у нас таблички взял бустинг поехали Ну уж что-нибудь он точно посчитает А дальше разберёмся атюн на него навешали там что-нибудь ещё придумаем Ну в общем он нам что-нибудь ответит скорее

атюн на него навешали там что-нибудь ещё придумаем Ну в общем он нам что-нибудь ответит скорее всего вот а но у алгоритмов которые работают с табличными данными есть некоторые неудобства Они не умеют работать с другими модальностей - Это значит что у нас есть текст картинки звук Я не знаю Там есть много моделей которые там измеряют глубину э обстановки Да ну то есть там у нас стоит два человека Один вдалеке другой близко и никакой бустинг не сможет нам сказать как бы какой расстояние между

Один вдалеке другой близко и никакой бустинг не сможет нам сказать как бы какой расстояние между этими двумя людьми а довольно сложные нейросети это умеют делать и в этом как бы с одной стороны их преимущества Я имею в виду что они могут решать задачи связанные не только с табличными данными с другой стороны в этом э одновременно с этим их недостаток в том что фактически для Ну никакие модели не приблизились к результатам а к хорошим результатам на табличных данных к бустинга Ну то есть они

не приблизились к результатам а к хорошим результатам на табличных данных к бустинга Ну то есть они приблизились но потом начинаются детальки бустинг отрабатывает там за полсекунды нейросеть которая даёт такой же результат отрабатывает за полторы минуты Да и нафига тогда нам это Нера сеть нужна если она делает то же самое но намного дольше и учить её дольше и видеокарты нам нужны ну в общем просто вопросы начинаются уже как бы с другой стороны потому что не результатом единым есть довольно

вопросы начинаются уже как бы с другой стороны потому что не результатом единым есть довольно большое количество разных ограничивающих критериев которые может быть Нейро где-то и отлично справляется но проблема в том что нет для неё нужны там видеокарты скорость и всё такое это не всегда возможно себя обустроить в той мере в которой хотелось бы вот а Поэтому собственно мы будем концентрироваться на таких моделях И для нас в общем-то метрики на этой фазе они Ну в каком-то смысле уйдут на второй

на таких моделях И для нас в общем-то метрики на этой фазе они Ну в каком-то смысле уйдут на второй план потому что Ну будет много других проблем как бы если модель заработает Это уже хорошо пусть она будет работать не очень хорошо В плане будет не очень высокое качество Вот но концентрироваться мы будем как бы на реализации этих моделей в виде сервисов на просто понимании того как это устроено потому что в общем и целом Ну окей есть у вас Метрика Я не знаю там точности 70% если модель работает

что в общем и целом Ну окей есть у вас Метрика Я не знаю там точности 70% если модель работает нам этого достаточно понятное дело Если бы у нас было полгода и 10 видеокарт мы бы эту точность довели до 90% но это уже дело техники оно не сильно имеет отношение к какой-то содержательному пониманию того что происходит внутри а Для нас это важнее чем какие-то показатели а нейросети ввиду того что работают с большим количеством разных модальностей и в целом являются таким в определённом смысле

работают с большим количеством разных модальностей и в целом являются таким в определённом смысле конструктором чем у нас больше Свободы в том как построить модель тем у нас больше различных параметров которые придётся держать в голове и которые придётся постоянно настраивать для того чтобы наш результат улу как минимум не ухуд А может быть при какой-то неудачной архитектуре ещ и ухуд мы будем сами практически Ну на этой неделе По большей части мы будем сами определять то из каких составных

сами практически Ну на этой неделе По большей части мы будем сами определять то из каких составных частей будет наша нейросеть состоять То есть у нейросетей Есть множество разных слоёв и комбинации этих слоёв могут очень сильно влиять на результат то какие это будут слои для на собственно от на вопрос А сколько мне слов и какие использовать для того чтобы что-нибудь не существует То есть если бы все знали какие слои нужно использовать В какой последовательности В общем знали все гиперпараметры

все знали какие слои нужно использовать В какой последовательности В общем знали все гиперпараметры то никто бы этим не занимался написали бы две книжки берите Вот это берите Вот это берите Вот это и собственно все бы этим пользовались никакого вопрос А что будет если я вот сюда добавлю какой-нибудь слой Я на такие вопросы не отвечаю компьютер перед вами добавили слой посмотрели Что случилось Вот я не телепат не как бы не обладаю никакими экстрасенсорные способностями вот поэтому хотите

Вот я не телепат не как бы не обладаю никакими экстрасенсорные способностями вот поэтому хотите поэкспериментировать хотите что-то куда-то добавить что-то откуда-то убрать берёте делаете Это и запускаете Вот и потом как бы после Я не знаю 100 запущенных нейросетей у вас появится какая-то интуиция потому что когда-то вы что-то делали у вас когда-то что-то сработало вы это вспомните и как бы Попробуйте применить уже в какой-то другой ситуации Вот но поначалу это будет вводить в некоторый ступор

применить уже в какой-то другой ситуации Вот но поначалу это будет вводить в некоторый ступор потому что действительно довольно много разных как бы переменных которые мы сами должны настроить и это сложно Мы ещё завтра отдельно посмотрим на такие штуки которые называются оптимизатора нам сегодня это не очень важно но по большому с то что вы писали на первой фазе когда писали свой собственный градиентный спуск Ну вот оказывается что у этого градиентного спуска есть несколько десятков разных

градиентный спуск Ну вот оказывается что у этого градиентного спуска есть несколько десятков разных вариаций чем они отличаются чем они полезны конкретно в нейросетях мы об этом поговорим завтра сегодня мы просто Будем иметь в виду что оптимизатор - это какой-то алгоритм градиентного спуска для нас неважно какой об этом завтра просто есть какая-то штука которая умеет подгонять значение наших параметров так чтобы наша функция была получше То есть была уменьшалась со временем и всё такое ну

параметров так чтобы наша функция была получше То есть была уменьшалась со временем и всё такое ну собственно функция потерь Кто помнит что такое категориальная кросс этрог ошибка тому будет попроще кто не помнит тому будет посложнее и сегодня ещё пару слов я скажу про инициализацию весов Потому что когда вы писали свой собственный градиентный спуск Кстати кто помнит как вы изначальное значение весов инициализировать случайно случайно Ну какими-то случайными небольшими значениями Вот

значение весов инициализировать случайно случайно Ну какими-то случайными небольшими значениями Вот оказывается что если ваша модель довольно сложная Сложная Я имею в виду большая сложность нейросети - это фактически количество параметров который Ну в пространстве которых нам нужно найти какой-то минимум функции потерь Вот оказывается что Если наша модель неважно нейросеть или что-то ещё довольно сложная То есть она оперирует большим количеством параметров разные способы инициализации на самом

сложная То есть она оперирует большим количеством параметров разные способы инициализации на самом деле ВС это будет делаться автоматически то есть мы не будем видеть как происходит инициализация мы просто вот как будем создавать модель и веса в ней будут автоматически инициализировать Вот Но такую общую логику посмотрим Это довольно сложная математическая штука потому что там всё это доказывается через всякие теоремы и всё прочее вот но мы просто посмотрим такую общую концепцию того как бы что

через всякие теоремы и всё прочее вот но мы просто посмотрим такую общую концепцию того как бы что на что влияет при инициализации достаточно Это вряд ли тот вопрос который Вас в жизни будет сильно интересовать или будет сильно полезен Так вопросы вопросы отлично идём дальше значит структура одного нейрона на самом деле очень очень очень простая фактически один Нейрон если мы возьмём чисто Вот его такой представление классическое это обычная Линейная регрессия то есть X1 X2 xn - это всё

Вот его такой представление классическое это обычная Линейная регрессия то есть X1 X2 xn - это всё значение наших признаков каждому признаку соответствует какой-то вес собственно именно вот эти веса в самом начале будут инициализировать случайно именно эти веса в процессе обучения мы захотим подобрать так чтобы что-то Да ну как правило функция потерь была минимально Но там понятно что в зависимости от задач может быть всё что угодно каждое значение признака будет умножаться на соответствующие

от задач может быть всё что угодно каждое значение признака будет умножаться на соответствующие ему вес дальше ВС это дело будет суммировать будет добавляться свободный член который вы могли называть на нулевой фазе Омега 0 или w0 или что-то такое Ну в общем в Нейро сетях он обычно называется Б от слова Вот то есть свободный член теперь для вас не Омега нолик а соответственно после того как мыли вот это вот произведение каждого призна Наго Проф Сурова добавили свободный член и применили

мыли вот это вот произведение каждого призна Наго Проф Сурова добавили свободный член и применили какую-нибудь функцию у нас собственно Вот такая вот штука и называется одним Нейрон То есть получается что генерально мы остаёмся абсолютно всё в том же уравнении всё в том же уравнении как бы обычной регрессии и ничего совершенно не меняется есть Вектор коэффициентов есть Вектор признаков да са пожалуйста пошире презентацию открыть Нет это вы можете раздвинуть окошечко в Зуме и приблизить тот тот

пошире презентацию открыть Нет это вы можете раздвинуть окошечко в Зуме и приблизить тот тот Как сказать участок который Вам нужен Угу я могу вот так вот сделать максимум дальше у меня всё сделай пожалуйста сделай ещё шире пожалуйста Потому что есть пробле у меня тоже с этим я не могу сделать шире Если бы я мог сделать шире бы сде шире Если я сделаю шире то у меня часть презентации будет не видна А если она мне будет не видна то то что она будет видна вам тоже особенно Не будет никакого вы

А если она мне будет не видна то то что она будет видна вам тоже особенно Не будет никакого вы просто по Зум то есть там же можно вот растянуть если вдруг что-то не видно оно хорошо видно просто ну растягивается Вы же можете в Зуме приблизить то что вам нужно Прямо просто Наведите на демонстрирует раздвиньте и всё можно приблизить Любой любой участок у меня колечко увеличивается там любой ЗМ в браузере колечко плюсик всё всё это так работает Вот соответственно что у нас есть вот здесь вот вот

колечко плюсик всё всё это так работает Вот соответственно что у нас есть вот здесь вот вот здесь вот у нас есть обычное уравнение регрессии список входных данных Вектор наших коэффициентов пох ноем и это обычная Линейная регрессия но обычная Линейная регрессия плоховато подходит для того чтобы делать её условно говоря многослойной Потому что если мы несколько подряд линейных функций к друг другу применим то результат тоже будет линейным Ну то есть как бы есть например какая-нибудь там

другу применим то результат тоже будет линейным Ну то есть как бы есть например какая-нибудь там Логистическая регрессия которую умеет линейно раздели данные классифицировать и оказывается что если много раз линейную функцию будем применять то у нас как бы модель как была линейной так и останется линейно Это значит что она сможет какие-то вот такие вот данные разделить Но если эти данные у нас будут сильно перемешаны Она никогда не сможет нарисовать вот такую какую-нибудь разделяющую плоскость

сильно перемешаны Она никогда не сможет нарисовать вот такую какую-нибудь разделяющую плоскость соответственно особенного смысла в этом никакого нет то есть делать 25 линейных моделей подряд да как оно кроется в том что у нас есть такая штука которая называется функцие или функция активация собственно функция активации она у нас будет фигурировать всегда то есть без функции активации ни одна нейросеть не работает и основная её идея в том что вот эта вот функция активации у нас всегда будет

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

в общем ничего работать не будет соответственно вот это вот это один Нейрон если мы представим что нейронов может быть несколько то мы на самом деле будем Давайте аэ Ну ладно да давайте вот сюда если нейронов бы у нас было несколько то что бы происходило в таком случае в таком случае у нас бы была здесь вторая Вот такая вот штучка и собственно всё то же самое оставалось бы да то есть у нас всякие были бы там произведения на э произведение коэффициентов на входные данные но теперь у этого X1 был

были бы там произведения на э произведение коэффициентов на входные данные но теперь у этого X1 был бы не просто его один персональный вес а как бы был бы второй вес Да и он бы у нас там назывался V например 21 у этого X2 был бы не только вот этот вот W1 который у нас уходит вот сюда или омега-1 не знаю как вам привычнее у него бы был Ещё и второй коэффициент и у третьего Ну у энного в моём случае нейрона Здесь тоже был бы V2 потому что это второй Нейрон два Да ну три в таком случае то есть

нейрона Здесь тоже был бы V2 потому что это второй Нейрон два Да ну три в таком случае то есть получается что для того чтобы сделать несколько нейронов мне фактически нужно просто дублировать вот такую вот штуку если у меня Нейрон о то моя как бы моя сеть Да очень маленькая но всё же уже нейросеть выглядит вот таким образом если я понимаю что мне хочется сделать так чтобы моя модель стала сложнее сложнее равно увеличить количество параметров обучаемых в ней то я могу сделать столько нейронов

сложнее равно увеличить количество параметров обучаемых в ней то я могу сделать столько нейронов сколько захочется и соответственно у меня для вот этого нейрона векто коэффициентов для вот этого в данном случае вот этого нейрона будет Вектор коэффициентов для вот этого нейрона будет Вектор коэффициент и все эти вектора коэффициентов будут разные То есть у меня в одном нейроне у меня было бы столько коэффициентов сколько признаков плюс один свободный член в четыр нейронах у меня будет в четыре

коэффициентов сколько признаков плюс один свободный член в четыр нейронах у меня будет в четыре раза больше обучаемых параметров уже говорил но здесь вот интересный такой вопрос что если вот это вот F я как бы выберу как сигмоида то во что вот это вот превратится что это станет вероятность Да вероятность какое-то значение от нуля до единицы Да какое-то значение от нуля до единицы А с точки зрения модели что это будет за модель если я вот к этой штуке примен сигмоида Логистическая регрессия

модели что это будет за модель если я вот к этой штуке примен сигмоида Логистическая регрессия обычная Логистическая регрессия и собственно что здесь очень интересно что фактически такая нейросеть состоящая из простых слоёв с функции активации сигмоида по большому счёту является стен логистических регрессий давайте мы много много много логистических регрессий друг за другом соединим им что Логистическая регрессия Вот вы на прошлой фазе помните что любые там какие-то методы можно объединять их

регрессия Вот вы на прошлой фазе помните что любые там какие-то методы можно объединять их можно объединять с помощью там гинга да если у нас базовая модель там какая-нибудь какое-нибудь дерево то это у нас получится Случайный лес вот их можно объединять с помощью вонга Давайте обучим три модели а потом каким-то образом агрегирующие модель и получим стейкинг да то есть у нас как бы метамодель мы не будем сами выбирать что нам делать с предсказаниями базовых моделей а просто ещё одну модель на

не будем сами выбирать что нам делать с предсказаниями базовых моделей а просто ещё одну модель на них натра И тогда она уже сама выяснит Какие как нужно [музыка] [музыка] регресси обучается по-другому алгоритму к ближайших соседей вообще не обучается он просто координаты точек запоминает и потом считает расстояние то есть получается что из-за того что все модели обучаются по-разному у нас нам нужно просто фактически либо самим писать какую-то какой-то класс который будет по очереди все эти

нужно просто фактически либо самим писать какую-то какой-то класс который будет по очереди все эти модели обучать потом присобачить к ним какую-то метамодель если это стекинг в нейронных сетях есть способ обучения собственно это обратно ошибки абсолютно тот же самый градиентный спуск но так скажем на стероидах и оказывается что нам нет необходимости по отдельности обучать все эти слои потому что у нас есть алгоритмы которые это будут делать за нас в классическом машинном обучении таких

что у нас есть алгоритмы которые это будут делать за нас в классическом машинном обучении таких алгоритмов нет хотя там просто нету единого алгоритма обучения для всего в нейронных сетях доминирует алгоритм обучения построенный на Градиент спуске но по большому счёту множество логистических регрессий Объединённых как бы в одну цепочку это уже Вполне себе неть если мы будем применять к вот такой вот линейной комбинации не функцию активации сигмоида это конечно безусловно потеряет аналогию но

вот линейной комбинации не функцию активации сигмоида это конечно безусловно потеряет аналогию но сигмоида мы будем применять очень часто и она очень часто в принципе на самом деле применяется поэтому Для нас это важно скорее просто как аналогия на что можно заменить сигмоида мы в процессе обучения будем разные новые функции активации проходить но в целом Тут надо просто понять что у них примерно одна и та же логика у всех Значит у нас есть сигмоида сигмоида у нас от нуля до единицы измеряется

одна и та же логика у всех Значит у нас есть сигмоида сигмоида у нас от нуля до единицы измеряется соответственно Какое бы значение не пришло в функцию в качестве икса Выход будет всегда от нуля до единиц это не всегда удобно потому что есть всякие а ситуации в которых нам для нас поведение сигмоида не очень нас удовлетворяет мы об этом чуть подробнее поговорим на неделе текста поэтому существует функция активации которая называется гиперболический тангенс у неё там тоже и в числителе и в

функция активации которая называется гиперболический тангенс у неё там тоже и в числителе и в знаменателе экспоненты и в общем Она вся такая гладкая и хорошая у неё есть два отличия второе нам сегодня не важно а первое важно а первое заключается в том что область значений гиперболического тангенса она от минус единицы до единицы То есть это очень похожая по форме на сигмой функции но у неё другой Другая область значений с тангенсом мы будем периодически встречаться и на неделе текста я Отдельно

Другая область значений с тангенсом мы будем периодически встречаться и на неделе текста я Отдельно ещё расскажу почему тангенс на самом деле часто бывает более полезен чем сигмой сегодня на это можно не обращать внимания существует функция активации рылу функция активация лу - это такая прикольная функция которая если к ней приходит значение меньше нуля она возвращает ноль а если приходит больше нуля она просто возвращает то значение которое ей пришло на вход мы с этой функци будем работать в

нуля она просто возвращает то значение которое ей пришло на вход мы с этой функци будем работать в среду хотя и сегодня Она тоже вам может быть полезна потому что она во-первых хочет простая во-вторых очень хорошо как бы работает в плане того что эта функция активации У неё очень лёгкая производная а градиентный спуск требует вычисления производной соответственно если от сигмоида там надо единица Минус Там квадрат и всё такое В общем это какие-то вычисления всё равно уже присутствуют то у

Минус Там квадрат и всё такое В общем это какие-то вычисления всё равно уже присутствуют то у отличная производная она собственно либо но либо о То есть тут если число больше нуля значит но если число больше нуля значит производная единичка если число меньше нуля значит ноль То есть фактически ничего считать не нужно о И вам отдаёт уже всю информацию Но для обучения не всегда хорошо когда частная производная нулю равна и вы могли это замечать когда писали свой градиентный спуск Поэтому вместо

производная нулю равна и вы могли это замечать когда писали свой градиентный спуск Поэтому вместо того чтобы использовать обычную [музыка] некоторые вариации это Например ки у которых вот здесь маленькая маленькая производная но вс-таки она сохраняется Или например такую функцию активации как Да у кото которая выглядит очень похожа но у неё просто вот здесь вот Гладкий гладкая такая ямка чтобы не было точки прокола Да как в нуле в которой не существует производно влом функци акции мода и

не было точки прокола Да как в нуле в которой не существует производно влом функци акции мода и функция активации рылу Если кто-то хочет Выучить все функции активации я могу лишь пожелать удачи я думаю что их примерно где-то 300 разных присутствует существует А есть некоторые которые ещё зависят от параметров Поэтому запаситесь в таком случае терпением Вот лучше самый хороший способ как бы изучить функции активации и понять Какие чаще всего применяются это просто что-то читать и если вы видите

функции активации и понять Какие чаще всего применяются это просто что-то читать и если вы видите что используется какая-то функция активации которую вы не знаете вы гуглите видите е график и уже что-то о ней Знаете ну как бы сегодня может быть вы вам это не очень поможет Но в целом в процессе мы будем много разных функций активации видеть и будем по ходу просто смотреть чем Она хороша И почему в конкретной задаче вот там какие-то разработчики выбрали именно такую обычно об этом прямо пишут в

в конкретной задаче вот там какие-то разработчики выбрали именно такую обычно об этом прямо пишут в публикациях если используют какую-то нетривиальную функцию активации они говорят о мы увидели что вот если мы используем эту функцию активации то у нас обучается всё на 10 минут быстрее потому что это функция активации лёгкое вычисление производной соответственно обучение не требует дополнительных вычислений и всё то есть тут всё обычно довольно довольно просто вот а сегодня возьмём сигмоида и лу

и всё то есть тут всё обычно довольно довольно просто вот а сегодня возьмём сигмоида и лу и так сказать поставим их на карандаш значит если у нас есть какой-то Нейрон Да ну собственно вот такой с какой-нибудь функцией активации мы уже говорили о том что у нас на самом деле может быть несколько этих нейронов но мы говорили о том что нейронов может быть несколько и я говорил что их можно объединять в какие-то последовательности вот вот это объединение оно очень часто происходит по принципу каждый

в какие-то последовательности вот вот это объединение оно очень часто происходит по принципу каждый вход связан с каждым Нейрон Это означает что если у меня вот здесь вот есть какие-то какие-то входные данные вот они X1 X2 то у X1 есть там какой-то 1 коэфициент в коэффициент Да вот это у нас будет V1 2 ну и там какой-нибудь v13 и у этого входа тоже будут какие-то свои коэффициенты и получается что здесь как бы каждый вход связан с каждым нейроном вот в этом вот слое Когда у нас осуществляется

здесь как бы каждый вход связан с каждым нейроном вот в этом вот слое Когда у нас осуществляется Вот такая вот связь слои которые этот такую СЗ зава бури либо полносвязный слой Это обычное название русскоязычное его везде можно встретить либо это может называться слой conn полный перевод просто слово полносвязный на английский язык у нас в пайтор это будет называться линер поэтому ещё чаще чем полносвязный я буду говорить линейный слой а линейный он потому что он делает обычную операцию

чем полносвязный я буду говорить линейный слой а линейный он потому что он делает обычную операцию умножения входных данных на коэффициенты это Матрица ум матри в некоторых фреймворка этот слой называется де что в общем тоже является аналогий полносвязный потому что ну типа он плотный Да у него Прям каждый связан с каждым вот такой способ соединения как бы входных данных с нейронами называется полносвязный соответственно Если бы я хотел задать какой-нибудь вот такой вот один слой Да состоящий

соответственно Если бы я хотел задать какой-нибудь вот такой вот один слой Да состоящий из трх нейронов Я бы в пайтор написал NN это модуль в котором есть классы различных слоёв написал бы потому что вот такой слой называется line и сказал бы сколько признаков ко мне приходит на вход И сколько я хочу на выходе вот это вот сколько я хочу на выходе это и есть количество нейронов То есть у меня приходит два признака на вход когда я эти признаки обю своми коэффициентами то что у меня получится у

два признака на вход когда я эти признаки обю своми коэффициентами то что у меня получится у меня будет раз выход у меня будет два выход и у меня будет три выход то есть вот и если бы я конкретно Вот эту вот часть нейросети задавал входе Я бы написал потому что хочу полносвязный слой количество входных фичей равно двум вот О2 количество выходных че этот неронов в моём слое у меня в данном случае нейрона три вот он первый вот он второй вот он третий иногда Точнее не иногда А в большей части

нейрона три вот он первый вот он второй вот он третий иногда Точнее не иногда А в большей части случаев вы будете видеть что вот эти вот слои рисуют не Вот такими кружочками Потому что если у Вас например будет полносвязный слой в котором будет 248 нейронов рисовать 248 кружочков Это довольно странное занятие при любом раскладе и ваших жизненных убеждениях религиозных и прочих поэтому довольно часто полносвязный слои вот таким образом визуализирует просто говорят что есть какой-то вход дальше

полносвязный слои вот таким образом визуализирует просто говорят что есть какой-то вход дальше есть какой-то нейросетевой блок в нашем случае это полносвязный слой и здесь будет ну где-нибудь на схеме будет написано что здесь на вход 2 на выходе 3 Вот то есть Ну просто чтобы не визуализировать вот это вот не разводить вот это вот кружочком моде будет некоторая последовательность полносвязный следовал ещ один полносвязный слой то я могу написать здесь ещё один N лир но сколько у меня будет

следовал ещ один полносвязный слой то я могу написать здесь ещё один N лир но сколько у меня будет приходить на вход и почему Ну собственно здесь уже это написано Почему рито мы вернёмся вот на эту картинку то почему у меня вот этот вот слой задавался бы как линер Да я просто напишу Лин 3 2 потому что к нему как бы на вход приходит три значения потому что на предыдущем слое три значения выходило Поэтому ему на вход приходит три Вот они первое значение второе значение третье значение а на выходе

ему на вход приходит три Вот они первое значение второе значение третье значение а на выходе будет два Почему раздва И вот это это уже двухслойная была бы нейросеть ну естественно если я захотел бы впихнуть туда ещё и третий слой Я бы написал там Line на вход два потому что на выходе вот здесь вот было два и на выходе здесь будет единичка соответственно Если бы я такую модель хотел бы записать ещё добавив туда функции активации Я бы написал Довольно простой фрагмент кода то есть вот эти две

ещё добавив туда функции активации Я бы написал Довольно простой фрагмент кода то есть вот эти две модели соответствуют вот такой вот за Я говорю что у меня будет переменный мо означает что как бы мои данные просто вот так вот пройдут через список вот этих слоёв завтра мы посмотрим как можно делать намного хитрее сегодня нам достаточно вот этого значит что у меня на вход два признака на выходе ри нейрона активирую сигмоида второй слой на вход три нейрона потому что здесь Было на выходе нейрона

нейрона активирую сигмоида второй слой на вход три нейрона потому что здесь Было на выходе нейрона на выхо функци вот эти перекликаются здесь на вход два потому что здесь на выходе было два на выходе один и активируем сигд собственно вот Элементарная модель состоящая только из полносвязный вот таким вот образом что здесь важно и с чем тоже может быть Некоторое количество там непонимания связано в первое время фактически сигмоида она здесь участвует как слой но сама по себе сигмоида не содержит

первое время фактически сигмоида она здесь участвует как слой но сама по себе сигмоида не содержит обучающих параметров то есть сигмоида - Это просто функция к ней приходит любое значение она масштабируется его в интервал от нуля до единицы всё она не обучается у неё нет никаких обучаемых параметров она она строго говоря как бы на сложность модели сигмоида не влияет просто потому что у неё нет обучающих параметров она выполняет техническую ро что угодно нахо марут до Часто при перечислении

обучающих параметров она выполняет техническую ро что угодно нахо марут до Часто при перечислении слоёв не буду указывать в их числе функции активации потому что функция активации - это просто Техническая функция она не обучается в процессе Она просто вот как долдон одно и тоже делает что-то пришло на вход масштабируемые вот Давайте про полносвязный слои Какие вопросы есть напоминаю на вопросы сколько я не отвечаю Не знаю ско Я сам не знаю сколько любовь ну тогда первый вопрос Сколько на выходе

я не отвечаю Не знаю ско Я сам не знаю сколько любовь ну тогда первый вопрос Сколько на выходе всегда единица Или об этом мы сейчас будем говорить Нет не всегда но там будет более-менее понятно это простой вопрос просто надо сразу перейти там к другой части я пока пока не будем торопиться са то есть условно если у нас там при метод который выключает определённое количество нейронов на слоя вот ну на следую то это уже не то это уже не полно связано он на следующем слайде я сейчас отвечу на твой

на следую то это уже не то это уже не полно связано он на следующем слайде я сейчас отвечу на твой вопрос он всё равно будет полносвязный это неважно он он полносвязный просто потому что мы его так хотим и мы его так назвали вот если мы не хотим чтобы он был полносвязный то нам нужно сейчас быстро телепортироваться в среду а у нас пока нет этого в планах Окей значит в чём В целом проблема у полносвязная собственно у всех слоёв есть проблемы их Поэтому так много Потому что так много разных

полносвязная собственно у всех слоёв есть проблемы их Поэтому так много Потому что так много разных потому что у всех у них есть свои плюсы и свои минусы плюсы полносвязная заключается в том что это очень-очень мощный компонент сети без полносвязная сейчас не работает Ну я не знаю я не смогу вспомнить ни одной современной архитектуры которая работала бы без повязано слоя сло который был в нейросетях придуман вообще как в буквально с тем же в тот же момент когда придумали термин нейросети по

придуман вообще как в буквально с тем же в тот же момент когда придумали термин нейросети по отношению к математическим моделям и без полносвязный не работает ничего Вообще то есть это фундаментальный слой который используется везде Ну наверное я не знаю можно придумать какую-то архитектуру где его не будет но это скорее будет конради конт а-то Промышленная какая-то Принимая но у полносвязная есть две проблемы проблема номер один У этого полносвязная очень-очень много параметров обучаемых и мы

две проблемы проблема номер один У этого полносвязная очень-очень много параметров обучаемых и мы можем даже это эту зависимость увидеть вот здесь смотрите у нас на вход идёт два признака А эти два признака подключаясь к одному нейрону они уже имеют Омега 1 Омега 1 2 и то есть раз коэффициент при одном признаке коэффициент при втором признаке свободный член соответственно если у нас есть ещё один Нейрон у нас сразу появляется v21 V2 2 + B2 А это пусть будет B1 то есть вот он V 21 v22 плюс ещё

Нейрон у нас сразу появляется v21 V2 2 + B2 А это пусть будет B1 то есть вот он V 21 v22 плюс ещё B2 добавляем ещё один Нейрон у нас появляется ещё одна тройка параметров и получается плю о Нейрон сразу плют параметра эти слои очень-очень сильно прожорливые вот этих вот коэффициентов придётся искать частные производное тем кто как бы на первой фазе писал градиентный спуск помнит что больше не смеётся над этими серьёзными вещами полносвязный слои очень прожорливые потому что в них много

не смеётся над этими серьёзными вещами полносвязный слои очень прожорливые потому что в них много параметров для всех из них нужно искать какой-то оптимальное значение а значит мы будем это делать долго потому что параметров много почитает для них для каждого градиента это проблема номер один Ну это не то что проблема Да всё как обычно измеряется количеством денег Если у вас есть 10 видеокарт это перестаёт быть проблемой вторая проблема что полносвязный слои за счёт как раз-таки того что у них

перестаёт быть проблемой вторая проблема что полносвязный слои за счёт как раз-таки того что у них очень большое количество параметров они очень-очень сильно любят переобуться То есть нейросетям вмм можно переу это сде Нея всегда очень важно следить за процессом обучения особенно за валион показателем функции потерь чтобы он не начинал расти что автоматически означает переобучение Но помимо того чтобы просто погрустить На этот счёт существует такая техника работы в нейст которая называется если

просто погрустить На этот счёт существует такая техника работы в нейст которая называется если мы возьмём посмотрим на обычный полносвязный слой он будет у нам Обе нейроны связаны со всеми То есть это пря обычный мы можем после или между какими-нибудь полносвязный который называется у есть такой параметр по умолчанию этот параметр равен у нас 05 и эти 0 нейронов в слое например вот здесь вот будут просто отключены То есть фактически что будет происходить вот у нас есть какой-то да какой-то

будут просто отключены То есть фактически что будет происходить вот у нас есть какой-то да какой-то признак к нам сюда пришёл там какой-нибудь X2 но на определённой итерации обучения наш дропаут говорит Вот это и вот это сейчас в обучении использоваться не будет есть Вотс возм из а вот эти вот значения использовать не будем То есть получается что из условно пяти признаков которые у нас здесь есть X1 2 3 4 5 в какую-нибудь итерацию обучения мы выключим например какие-нибудь два признака то есть

X1 2 3 4 5 в какую-нибудь итерацию обучения мы выключим например какие-нибудь два признака то есть случайным образом в процессе обучения Мы специально в нейросети вырубаем какие-то нейроны для того чтобы эта сеть не переобулась на Т Какой пример мы можем сказать что и мы можем это делать как бы на слоях произвольных да то есть там где мы захотим это сделать Мы это сделаем очень простой пример предположим что у нас вот здесь вот идёт площадь квартиры Да в качестве первого признака все заходит

что у нас вот здесь вот идёт площадь квартиры Да в качестве первого признака все заходит площадь квартиры что сделает любая сложная модель когда увидит пару площадь квартиры цена она скажет всё понятно Значит чем больше площадь тем выше цена пофигу на этаж пофигу на район пофигу на ВС остальное я увидела что у меня есть очень хорошая взаимосвязь и что как только я вот здесь вот коэффициент перед ценой немножечко корректирую в процессе градиентного спуска функция потерь которую мы считаем между

ценой немножечко корректирую в процессе градиентного спуска функция потерь которую мы считаем между таргетом и предсказанием резко снижается это и означает переобучение нейросеть поняла что используя вот этот коэффи можно очень сильно уменьшить значение функции потерь и начинает на этот признак просто переобуться она начинает игнорировать всё остальное и говорит Вот Всё зависит от площади А когда мы включаем ДП на какой-нибудь итерации у нас получится Так что к нам приходит цена А дропаут нам

мы включаем ДП на какой-нибудь итерации у нас получится Так что к нам приходит цена А дропаут нам говорит а вот сейчас попробуй-ка ты мне уменьшить функцию потерь без использования этой цены потому что окей мы поняли на цену ты классно реагируешь цена классно уменьшает значение функции потерь но у нас нам вообще-то хотелось бы ещё учитывать признаки удалённость от метро и рове загрязнения воздуха уровень шума наличие грузового лифта Ну и кучу каких-то других е признаков и оказывается что такой

уровень шума наличие грузового лифта Ну и кучу каких-то других е признаков и оказывается что такой способ он Ну наверное его можно в какой-то степени по популярности сравнить с полносвязный слоем без дроу я не знаю какие сейчас модели обучаются они есть в общем-то Везде где есть в первую очередь надо сказать где есть слое слое причине того что они мощные в них много параметров они могут извлекать сложные закономерности они очень любят переобуться давайте мы возьмём от полносвязный слоёв только

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

акро помимо тех которые являются очевидными или становятся очевидными для не в процессе обучения [музыка] Сергей ты говоришь случайно то есть там нет никакой закономерности просто вот на каком-то этапе на какой-то итерации было решено выключить этот признак Нет вообще никакой закономерности будет выключаться на каждой итерации но просто кажды подставляем себя с другой стороны в том смысле что если мы самостоятельно хотим отключать какие-то признаки то получается что мы уже слишком сильно

если мы самостоятельно хотим отключать какие-то признаки то получается что мы уже слишком сильно вмешиваемся в процесс обучения то есть процесс обучения теперь в таком случае зависит не только от данных а ещё зависит от какой-то нашей логики А наша логика может быть Ну не всегда успешна я просто смотрю вот тут получается крайне Правый ряд он вообще не выключался получается ну [музыка] из п агит Спасибо про 05 правильно услышал что это половина признаков которые отключается случайно на каждой

Спасибо про 05 правильно услышал что это половина признаков которые отключается случайно на каждой рации Да у каж фактически у каждого нейрона вероятность отключения 05 а вероятность отключения понял кото читать то вот здесь есть ссылка на яндексовский учебник там всё с формулами вот я не знаю поменяется ли ваша жизнь после того как вы это прочтёте Но если интересно то можно на это потратить время на самом деле если очень-очень хорошо подумать и вспомнить с чем же может быть всё-таки дропаут

на самом деле если очень-очень хорошо подумать и вспомнить с чем же может быть всё-таки дропаут какую-то аналогию провести с тем что вы изучали на первой фазе на самом деле если вспомнить то Как строятся случайные деревья в бенге деревя приняти в бенге помимо того что вы берте Бурова выборку из своего датасета вы ещ и берте случайное под множеству признаков А что такое случайное подмножество признаков это значит что какие-то признаки конкретное дерево не учитывает и это очень такая большая

признаков это значит что какие-то признаки конкретное дерево не учитывает и это очень такая большая аналогия к дроу Это означает что в какой-то момент у нас фактически на каждой итерации обучения будто быть которая использует какое-то подмножество призна не все признаки разом а какое-то подмножество на каждой итерации Это подмножество разное благодаря тому что у нас случайным образом нейроны выключаются но по характеру своей работы дропаут очень похож на бенг потому что в бенге тоже для дерева

но по характеру своей работы дропаут очень похож на бенг потому что в бенге тоже для дерева взяли там корень из N признаков вот одно дерево на таком множестве обучили другое на таком третье на таком И в чём идея в том что разные признаки можно каким-то разным образом объединить чтобы получить какой-то хороший результат а в целом такой способ регуляризации называется метод методами структурной регуляризации Почему Потому что набор признаков для дерева влияет на то каким это дерево будет какой

Почему Потому что набор признаков для дерева влияет на то каким это дерево будет какой оно признак будет выбирать в качестве следующего то есть одинаковых деревьев случайном лесе в идеале быть не должно в нейросетях дропаут - это тоже метод структурной регуляризации потому что мы просто берём и вырубаем какую-то часть нашей сети то есть у нас в каком-то смысле структура меняется на самом деле чтобы ну не думать что это какое-то волшебство и типа непонятно как это работает фактически к вам

чтобы ну не думать что это какое-то волшебство и типа непонятно как это работает фактически к вам приходит э как бы какой-то Вектор признаков да и этот Вектор признаков Вы должны умножить на Вектор коэффициентов как зану какие-то признаки Да просто сделать Вектор случайных значений из нулей и единиц Вектор из биномиального распределение где шанс единички 0,5 вот у вас будет какой-то там вектор и вы вот этот Вектор сначала умножается те признаки которые попали под ноль вот здесь вот и потом

и вы вот этот Вектор сначала умножается те признаки которые попали под ноль вот здесь вот и потом домново вопрос смотри если мы используем получается у нас модель Ну полегче и быстрее работает А насколько точно количество параметров не меняется а она не легче Ну просто быстрее быстрее срабатывает Ну нет это же всё-таки дополнительная операция умножения она срабатывает примерно таким же образом Ну по времени это будет то же самое Угу А что мы выигрываем по точности или может быть в чём модель Не

по времени это будет то же самое Угу А что мы выигрываем по точности или может быть в чём модель Не переобулась потому что могут быть признаки которые будут очень сильно влиять А мы говорим а сейчас-то без этого признака обучить Посмотри на другие признаки Всё спасибо Окей Ну значит та же модель с дропа аутом у нас выглядела бы примерно вот так полносвязный слой дропаут сигмоида полносвязный дропаут сигмоида полносвязный сигмоида если с дропа аутом пере переборщить сеть обучаться не будет вы на

сигмоида полносвязный сигмоида если с дропа аутом пере переборщить сеть обучаться не будет вы на выключайте признаки Так что она ничего не поймёт если дропауты совсем игнорировать есть шанс того что сеть переобуться Может ли быть такое что без дроу сеть не переобуться Вполне может быть Но если сеть быстро переобувается надо попробовать использовать ДПА 100% ли это поможет нет не 100% это поможет Нужно ли это пробовать Да нужно Саша у нас Dr применятся К слою 32 первый первому да Угу Ну то есть

Нужно ли это пробовать Да нужно Саша у нас Dr применятся К слою 32 первый первому да Угу Ну то есть он всегда будет между слоями и применять он будет к тому который перед ним стоит потому что собственно именно вот здесь вот будет Вектор из нуле и единиц на который мы будем входные данные перемножать спасибо Так значит теперь возвращаемся к вопросу Любы собственно Всегда ли у нас вот здесь на выходе будет один Нет не всегда у нас всё будет зависеть от того какую задачу мы решаем когда выре зада

будет один Нет не всегда у нас всё будет зависеть от того какую задачу мы решаем когда выре зада классификации вот на экзамене у вас была бинарная классификация для одного объекта вы прогнозировали одно значение число от нуля до единиц принадлежит либо классу ноль либо классу о То есть получается что на вход к вашей модели приходит объект на выходе модель отдаёт одно число вероятность того что этот объект принадлежит классу оди вероятность 0,2 округляем до Ну вероятность 0,7 там округляем до

этот объект принадлежит классу оди вероятность 0,2 округляем до Ну вероятность 0,7 там округляем до единицы либо выбираем порог по року там или почему-то ещ в нейронных сетях ситуация такая что вот это вот значение мы будем задавать сами потому что может ли у нас быть Задача в которой мы будем классифицировать например между дею классами Может тогда для каждого из этих классов у нас будет свой выход из сети если у нас зада бием для футе энтропия это собственно та функция потерь которая

свой выход из сети если у нас зада бием для футе энтропия это собственно та функция потерь которая используется в логистической регрессии Те кто не помнит можете вернуться к лекции Антона на выходе у задачи бинарной классификации независимо от того что находится внутри всей нашей большой модели на выходе У этой задачи один выходной Нейрон потому что мы говорим что вот отсюда у из одного нейрона пос воно связанного слоя пройдёт через сигмой и к нам пришёл объект А мы говорим с какой вероятностью

воно связанного слоя пройдёт через сигмой и к нам пришёл объект А мы говорим с какой вероятностью 0,2 0,8 0,51 0 там 489 то есть один объект приходит для него Мы ждём одно значение вероятность принадлежности к какому-то классу Поэтому в бинарной кросс этра точнее в бинарной классификации мы используем функцию потери бинарной кросс-т ровно ту же которую вы использовали несколько недель назад на реализации класса логистической регрессии вот Сергей Спрашивает ли это другими словами Да бинарная

реализации класса логистической регрессии вот Сергей Спрашивает ли это другими словами Да бинарная Крос Троя такая ну с точки зрения количества её обозначений паршивая штука потому что её называют глос логистической функцией потерь бинарной кронт кронт на двух классах Короче у не много названий но нам Мы будем чаще всего использовать потому что - это соответственно Крос Ну и е энтропия вот мы будем в качестве функции потерь в задаче бинарной классификации использовать бинарную Крос энтропию

будем в качестве функции потерь в задаче бинарной классификации использовать бинарную Крос энтропию функции как потери Бывает такое что Наша задача подразумевает несколько классов то есть у на может быть наме 10Е рукописных хотим от Ну де классифицировать что так вот это с вашего позволения я пока пропущу это вам не нужно мы потом с этим столк это на примере проще объяснить значит давайте вот здесь двух если у меня задача бинарная то есть класса всего два я могу прогнозировать одно значение

здесь двух если у меня задача бинарная то есть класса всего два я могу прогнозировать одно значение Почему Потому что это одно значение в зависимости от порога будет мне объект относить либо к классу ноль либо единица Ну типа если объект относится к классу Ну мне модель отдаёт 0,2 как мне определить Какова вероятность класса но ну едини - 0,2 у меня выбора только два как бы либо туда либо сюда поэтому мне в бинарной классификации достаточно одного значения чтобы оценить вероятности к классу о и

мне в бинарной классификации достаточно одного значения чтобы оценить вероятности к классу о и к классу Но если у меня классов Больше чем два то моя задача становится многокнопочная общий вид кросс энтропии когда у меня классов больше двух она выглядит очень похоже там тоже есть как бы этот логарифм просто это обобщение как бы бинарной кросс энтропии на множество классов соответственно если моя задача например вот здесь вот была бы задачей классификации к примеру на 10 классов Да вот у меня

задача например вот здесь вот была бы задачей классификации к примеру на 10 классов Да вот у меня есть 10 фр рукописных я чу определить какому Каму картин Значит у меня вот здесь была бы не единица А стояло бы 10 и это 10 отдавала бы мне 10 шансов того что входящий объект относится к одному из класс то есть вот тут были бы какие-то значения и по этим значениям я бы уже определял если вот это вот значение максимальное значит я иду и говорю а это у меня там двоечка потому что лас но лас ланосо

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

до бесконечности это правда тут Хотя не всегда но в общем в общем случае да один а если я для одного объекта не только цену условно прогнозируют равно количеству может один тоже Ну количество прогнозируемых признаков равно тогда ну количество прогнозируемых лучше говорить таргетом или характеристик потому что признаков они к нам на вход всё-таки а на самом деле Да вот сегодня вам предстоит решить задачу В которою у вас прогнозируемая величина будет одна да потому что вы возьмёте сегодня датасет

задачу В которою у вас прогнозируемая величина будет одна да потому что вы возьмёте сегодня датасет ваш любимый прайн будет шанс вернуться к нему с другой стороны Вот а если мы для одного входящего объекта в регрессии прогнозируем одну величину то как сегодня у вас будет Мы будем использовать на выходе один Нейрон и этот Нейрон мы будем собственно предсказание этого нейрона будем использовать уже в дальнейших вычислениях например функции потерь А кто мне скажет А если у меня есть например

уже в дальнейших вычислениях например функции потерь А кто мне скажет А если у меня есть например абсолютно Вот такая же модель Я прогнозируют в этой модели не так вроде одна штука всё правильно Так и должно быть А что не так здесь сигмой Да наверно так а что мне делать если Ну правильно сигмой Почему сигмой Да ну потому что она возвращает от нуля до единицы значение и что мне в таком случае делать неть ГМО лу взять хороший вариант правильно можно взять лу Ну а если я прогнозируют лу мне

делать неть ГМО лу взять хороший вариант правильно можно взять лу Ну а если я прогнозируют лу мне отрицатель непрогнозируемыми вообще ничего не использовать вообще ничего не Конечно если у меня складывается такая ситуация что я прогнозируют выходят за пределы области значений каких-то функций активации которые я использую Ну о которых я знаю и мне ничего не подходит так ничего мы не делаем мы просто говорим убираем отсюда сигмой вот какое значение отсюда выйдет тако забира Почему нам удобно

просто говорим убираем отсюда сигмой вот какое значение отсюда выйдет тако забира Почему нам удобно сигмоида потому что сигмоида Дат нам интерпретируемые значение это вероятность мы рассматриваем выход сигмоида как вероятность нам удобно просто так потому что мы хотим видеть 07 02 08 если нам в общем-то Ну как бы сигмоида не подходит И вот ни одна из перечисленных вами не подходит то окей уберём Просто отсюда функцию активации будем забирать Вот это знание ировать его как ответ вот на самом

Просто отсюда функцию активации будем забирать Вот это знание ировать его как ответ вот на самом деле реальность такова что Нейро конечно не любят прогнозировать и не любят в целом работать с числами которые выходят там за интервал плюс-минус п даже вот поэтому мы всё равно всё это будем нормировать и потом будем всякими костылями пытаться это привести к нормальному значению Вот Но логика у васня моде скажет что нет сорян я вот с таким я работать не буду ввиду как бы линейности внутренних слоёв

моде скажет что нет сорян я вот с таким я работать не буду ввиду как бы линейности внутренних слоёв ввиду ограничений у большинства функций активации Ну не у большинства у большой части функции активации ограничение на область значений выходных принято делать Так что Нейро приводить примерно к такому масштабу Вот Но сегодня на табличных данных как бы у вас что тамр и погнали то есть ничего выдумывать не надо всё это вам уже известно вот а как дальше с этим работать на других модальностей потерь

не надо всё это вам уже известно вот а как дальше с этим работать на других модальностей потерь будет использовать бинарную рою выход нейронов выход число нейронов на выходе будет равно единички И что в регрессии у нас будет количество выходных нейронов равно количеству прогнозируемых характеристик В сегодняшней задаче это будет один Нейрон на выходе а функцию потерь Ничего нового не придумали среднеквадратическая ошибка mse L1 Лос - это средняя абсолютная ошибка тоже вам прекрасно известная Ну

ошибка mse L1 Лос - это средняя абсолютная ошибка тоже вам прекрасно известная Ну типа ничего нового нет функции потерь они везде куда бы Вы заглянули в какой учебник по математике везде функция потерь будет какой-то такой вот для численных методов всё нормально работает хорошо Ну тут коротко про функцию потерь бинарной Крос энтропии Да у нас есть какой-то и и он соответственно может быть либо ноль либо единица из остаётся какое-то одно слагаемое Потому что если y1 равен у нас нулю то уберётся

либо единица из остаётся какое-то одно слагаемое Потому что если y1 равен у нас нулю то уберётся вот это потому что Y будет умножен на неважно на что если у нас класс равен нулю то если класс равен единички то уберётся вот это вот потому что единичка - 0 как бы обнулить Вот эту вот штуку Ну и всё в таком духе соответственно мы это всё э эти значения прогнозы P с крышечкой мы будем получать из функции сигмоида Да функция сигмоида отдаёт нам от нуля до единицы ну и соответственно мы это будем

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

предсказание но теперь показатель класса у нас это не просто какое-то число ноль или один а это Вектор мы можем предположить что у нас есть коты э собаки и попугаи к нам приходит какой-то объект и на этом объекте например изображён попугай значит это не кот Это не собака это попугай подставляем это прогноз наше модели ввиду того что у нас мультикласс или Y и y всё нам этого достаточно потому что либо то либо другое тут будет работать немного сложнее то есть мы прямо будем Ну мы не будем это

либо то либо другое тут будет работать немного сложнее то есть мы прямо будем Ну мы не будем это делать но внутри это делается прямо по компонентном первую пару значит но умножить на логарифм предсказание того что это код 0,1 вторая пара это у нас не код у нас Таргет вот он не собака точнее тоже логарифм ум 0,2 третья пара уло 07 уходит уходит с чем остаёмся с произведением метки принадлежности классу на логарифм предсказанное вероятности соответственно единичку эту мы тоже можем убирать

классу на логарифм предсказанное вероятности соответственно единичку эту мы тоже можем убирать логарифм нашего истинного класса логарифм нуля Чему равен единица ноль ноль но соответственно у нас Видите вот от этого логарифма зависит значение функции потерь если мы предсказываем вообще не то функция потерь будет равна единице максимально в данном случае если мы прямо предсказали ровно то что нужно у нас Таргет был единичка и здесь единичка функция Потер равна нулю всё Значит мы попали ровно туда

у нас Таргет был единичка и здесь единичка функция Потер равна нулю всё Значит мы попали ровно туда куда хо Люба я прошу прощения но я не уловила Почему у нас два две вероятности одна 01 а вторая Ну либо но 01 и с правой столбец 1 2 7 вопрос не ясен пришли откуда пришли два этих столбца с вероятностями Вот это наш Таргет А вот это прогнозы нашей модели А это при известных данных да Ну да конечно конечно предположим что у нас есть объект у которого Таргет вот такой а модель нам отдала вот такие

конечно предположим что у нас есть объект у которого Таргет вот такой а модель нам отдала вот такие предсказания хорошо спасибо Сергей а я правильно понимаю что мы по сути дела обнуляем за нулям всё кроме нашего таргета и смотрим ошибка разниц от единицы предсказаний и вот всё что мы делаем всё понял Саш Да вот я как-то не уловил момент как здесь мы можем проглядеть мультикласс ую классификацию если вот у нас собака ноль код ноль и только попугай один так это вот вероятность Да от нуля до

если вот у нас собака ноль код ноль и только попугай один так это вот вероятность Да от нуля до одного Ну вот это Это наш Таргет Угу на картинке не код не собака Да попугай единичка ходин над таргетом Угу Да и второй момент про логарифм Почему логарифм от нуля - это О да да почему почему логарифм от Ну - это о потому что се ну в Какую степень возвести число чтобы получить ноль это оди но смотри начнём с того что логарифма нуля не существует Но так как хотим это использовать для того чтобы

начнём с того что логарифма нуля не существует Но так как хотим это использовать для того чтобы оптимизировать модели нам нужно как-то выкручиваться из этого дела а этоже не минус бесконечность это будет минус бесконечность дадада Вот Но мы мы-то хотим всё равно как-то это использовать производную Это от минус бесконечности мы не посчитаем правильно Ну от логарифма нуля мы не посчитаем производную Поэтому нам приходится как-то выкручиваться из этого вот так как категориальная кронт это очень

Поэтому нам приходится как-то выкручиваться из этого вот так как категориальная кронт это очень хороший метод который В смысле это очень подходящ функция потерь для классификации многосна долгая тема кому интересно метод максимального правдоподобия мульти распределение вот всё раскладывается и оказывается что категориальная россэн пия натуральным образом соответствует задачам многокнопочная Мы у нас есть два выхода либо вот это вот значение Выдумать какое-нибудь которое нас будет устраивать Ну

нас есть два выхода либо вот это вот значение Выдумать какое-нибудь которое нас будет устраивать Ну не нулевое естественно потому что это ошибка вот Либо мы будем говорить что к любому предсказанию которое у нас например А я не знаю Ну если у нас предсказание например какое-нибудь там P с крышечкой равно нулю Тогда мы говорим что вот в этот вот логарифм мы не P с крышечкой равно нулю будем передавать а P с крышечкой плюс какой-нибудь си чтобы это нулю равно не было а логарифм очень маленького

а P с крышечкой плюс какой-нибудь си чтобы это нулю равно не было а логарифм очень маленького числа ком будет сиси будет какое-то большое число а большое число в данном случае будет обозначать высокое значение функции потерь то есть мы ошиблись мы должны были сюда единичку написать написали нолик получили большое значение функции Потер Ясно спасибо нас будет периодически такое встречаться потому что добавим н ну ну типа что мы будем сейчас плясать вокруг отсутствия возможности деления на ноль

что добавим н ну ну типа что мы будем сейчас плясать вокруг отсутствия возможности деления на ноль кому это интересно нам нужно решить задачу классификации Да что там где логарифму какое он там Значение это ну не работа то есть вот вчера скидывал Антон видео и там автор При рассмотрении функции активации сказал что вот в локте не определена Да производная и мы получается её заменяем на своё подходящее нам число правильно если мы попадаем в этот локоть это вот то же самое Да да да Всё я понял

нам число правильно если мы попадаем в этот локоть это вот то же самое Да да да Всё я понял добавим одну десятитысячная ли что-то сломается с учётом того что у нас и так вся модель как бы обучается градиентным спуском что-то вряд ли сломается Зато обучаться сможем Сергей Блин а я забыл что хотел спросить пока слушал нуй А сейчас я я я всё всё мы только в частном случае с нум ставим единицу в логарифме но не получится ли у нас тогда что сейчас как бы это сформулировать то что если у нас там не

но не получится ли у нас тогда что сейчас как бы это сформулировать то что если у нас там не но ус 0 у нас равно должно быть какое-то большое число гораздо больше единицы и получится то что ошибка будет больше чем в случае совсем нуля Я ничего не понял блин сформулировать пока пока воз ПАЗ нони си у нас ль никогда не будет подан Судя по тому что у на мы просто добавляем так пока Беру паузу Так значит смотрите Ну сегодня Да сегодня на регрессии сконцентрируйтесь Это так просто напоминание как бы

смотрите Ну сегодня Да сегодня на регрессии сконцентрируйтесь Это так просто напоминание как бы того регрессию я надеюсь средне квадратическую ошибку не надо разбирать все помнят как о устроено Окей значит область которую мы абсолютно не будем как бы повторять и изучать Как обучается нейросеть методом обратного распространения ошибки нейросеть - Это очень большая математическая функция в которой FX Ну точнее скажем не FX а что-то вроде F1 от x Да F2 от F1 от x F3 от F1 от F2 от F и так далее

FX Ну точнее скажем не FX а что-то вроде F1 от x Да F2 от F1 от x F3 от F1 от F2 от F и так далее Можем ли мы с помощью правила цепочки найти производную здесь по параметру можем если мы очень этого хотим мы можем написать большой нейросеть и выписать все частные производные руками вот это очень хорошая тренировка Непонятно чего поэтому люди придумали специальные алгоритмы и собственно модули которые умеют делать это за нас собственно pch чем он отличается от нампа в первую очередь тем что в

умеют делать это за нас собственно pch чем он отличается от нампа в первую очередь тем что в нём есть модуль автоматического дифференцирования умные люди сказали что лень выписывать производные самостоятельно хотя мы понимаем что по сути если компоненты у нас одни и те же то и схема частных производных будет одна и та же то есть ну как как в регрессии Да у нас производные всех коэффициентов при признаках они одинаковые Ну за исключением индекса так всё остальное Там просто повторяется вот ну и

они одинаковые Ну за исключением индекса так всё остальное Там просто повторяется вот ну и собственно здесь происходит тоже самое поэтому различные библиотеки в которых есть механизмы автоматического дифференцирования это принципиальное различие между нам паям и пай торм между какими-то там ещё другими библиотеками работы с массивами Вот спасибо чувака из пай торча прям очень весело Классно очень много всего и очень интересно Можно сконцентрироваться не на поиске частных производных А на

очень много всего и очень интересно Можно сконцентрироваться не на поиске частных производных А на решении более высоко уровневых задач за нас все эти производные будут считать в пайтор одна строчка нас это очень хорошо устраивает очень нравится что так хорошо придумали и сделали значит чуть-чуть про инициализацию случайных параметров здесь можно не очень на это обращать внимание Просто нужно общую логику понять что у нас в зависимости от того насколько Наша сеть большая масштаб инициализирует

логику понять что у нас в зависимости от того насколько Наша сеть большая масштаб инициализирует будет отличаться как правилом памет тем инициализирует немножечко меньше Есть статьи в которых это доказывается большими формулами я прочитал ничего не понял и не очень интересно было Честно говоря Вот но общая логика примерно такая значит для разных слоёв есть разные схемы инициализации то есть мы вот здесь можем увидеть что у нас есть нормальное распределение с центром в нуле и дисперсии

мы вот здесь можем увидеть что у нас есть нормальное распределение с центром в нуле и дисперсии вычисляемое вот по такой формуле то есть д денно на количество входящих Нейро на количество входящих связей и количество исходящих связей соответственно если у нас очень большой датасет в котором очень много признаков и очень много нейронов в первом слое в этом слое будут инициализирован довольно маленькими значениями наши веса потом начали как бы Выдумывать что Ага вот есть какие-то схемы сетей в

значениями наши веса потом начали как бы Выдумывать что Ага вот есть какие-то схемы сетей в которых из нормального распределения не очень весело брать данные будем брать из равномерного распределения там от нуля до вот такого показателя который будет вычисляться очень похожим образом то есть здесь тоже будут вот эти показатели числа входящих и исходящих связей Но немного по другой схеме Ага это там привело к тому что модель начала например быстрее обучаться потому что вот точка инициализации в

привело к тому что модель начала например быстрее обучаться потому что вот точка инициализации в пространстве параметров оказалась Ну чуть более успешный чем если мы инициализирует у нас есть акции которая отличается от сигмоида и отличается от тангенса который были сигд танген это одни из первых функций активации которые придумали очень давно потом пришли мужики с лу и сказали смотрите лу Класс вообще производная моментально ищется Ну там проблемки есть в нуле но ничего как-то мы их решим у

вообще производная моментально ищется Ну там проблемки есть в нуле но ничего как-то мы их решим у нас же есть который можно хну Везде где угодно и всё будет работать вот начали изучать отч как-то всё рано с не оче хорошо обучается а пришёл мужик которого зовут хе можете его погуглить Он много разных публикаций в плрн сделал и сказал а я вот экспериментировал экспериментировал и оказалось что если у нас есть функция активации рылу то мы возьмём нормальное распределение с центром в нуле но не

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

обучает дало нам какой-то там возможность что-нибудь получше внутри сети проанализировать или запятая и что-то ещё в целом для всех слоёв которые есть в пайтор присутствует механизм автоматической инициализации пайтор увидит Какой это слой Какое у него количество входов Какое количество выходов и инициализирует веса сам но общая логика такая что чем Наша сеть больше тем масштаб изначально инициализируется процедура градиентного спуска будет меньше чем у нас сеть более компактная тем у

инициализируется процедура градиентного спуска будет меньше чем у нас сеть более компактная тем у первоначальных параметров значения будут больше тут можно небольшое посмотреть демо вот по ссылке в слайдах значит вощеного всего вся если я илию свои параметры нулями Кто знает что произойдет в целом Почему так Почему вы например так не делали хотя вы кстати могли так делать но это не очень хорошо почему я так делал на сработало так кажется проблемы с градиентом могут каждый Нейрон это Линейная

почему я так делал на сработало так кажется проблемы с градиентом могут каждый Нейрон это Линейная регрессия обр в сиг и у нас по факту будет оставаться только но там в нейроне Ну в общем-то Да ну вот видите смотрите Я у меня задача бинарной классификации То есть я должен разделить вот эти две плоскости с точками я инициализирован потерь она про не меняется ничего не происходит Али см больши что будет очень долго обучаться будет Ну да в данном примере будет обучаться довольно долго но

что будет очень долго обучаться будет Ну да в данном примере будет обучаться довольно долго но реальность такова что скорее всего функция потерь вылетит с нано в результате потому что не сможет посчитать просто ну переполнение произойдёт не влезет туда то значение которое будет получено А если слишком маленькими Давайте вращайте барабан кто-нибудь чение может произойти маловероятно переобучение оно не изза инициализации происходит А из того что модель слишком сильна для наших данных данные

оно не изза инициализации происходит А из того что модель слишком сильна для наших данных данные простые модель сложная она моментально схватывает и ты с ней не делай уже без разницы качками Ну скачками так икая Сая ответ в правильную сторону но не совсем верный Ну что-то близкое к нулю получается пока что картин картинка похожа на то что было в нуле Ну картинка Да похожа но тут мы сейчас время время тратить особо не будем короче говоря будет обучаться но просто Видите сколько времени это

время тратить особо не будем короче говоря будет обучаться но просто Видите сколько времени это заняло Элементарная задача вообще просто Элементарная мето опорных векторов справился бы я не знаю за 10 секунд вот там ядром э но как бы долго именно Поэтому собственно вот такие размышления и привели к тому Видите вот подходящими собственно Ну условно подходящими я не знаю что там внутри как бы как это внутри работает но инициализировать подходящими вот прекрасно поехали сразу всё хорошо

бы как это внутри работает но инициализировать подходящими вот прекрасно поехали сразу всё хорошо классифицировал Сергей а с мелкими весами долго училось из-за того что Градиент был мелкий типа изначальной он очень долго всё Ну там как бы Градиент маленький и ты из маленького изначального значения пытаешься вычесть очень маленький Градиент А он ещё умножен на Learning Rate помните ваша переменная была скорость обучения Да и получается что вы начинаете оперировать очень маленькими числами они

была скорость обучения Да и получается что вы начинаете оперировать очень маленькими числами они меняются но они очень медленно это делают вот ну в общем тут вообще в целом по этой ссылочки можно позалипать здесь любителям форму есть где разгуляться и любителям картинок есть тоже г разгуляться хорошо Значит теперь собственно про обучение у нас что есть у нас есть некоторое количество слоёв они будут нашу модель составлять У нас есть какое-то количество функций потерь которые мы будем

они будут нашу модель составлять У нас есть какое-то количество функций потерь которые мы будем оптимизировать то есть будем добиваться их минимума и у нас есть некоторый градиентный спуск сегодня это некоторый градиентный спуск неважно какой завтра будет чуть важнее какой В общем ди спуск который будет все эти частные производные для нас искать значит из чего выглядит собственно наш процесс обучения значит чтобы взять и запустить процесс обучения нам помимо модели функции потери оптимизатора

значит чтобы взять и запустить процесс обучения нам помимо модели функции потери оптимизатора то есть градиентного спуска какого-то нужны данные данные мы будем забирать из наших данных они по-разному у нас в зависимости от недели будут представлены но смысл в том что мы почти всегда будем находиться в рамках обучения с учителем Это значит что у нас для каждого объекта будет какой-то правильный ответ именно к этому правильному ответу мы будем подгонять нашу модель а нейронные сети обучаются так

именно к этому правильному ответу мы будем подгонять нашу модель а нейронные сети обучаются так называемыми Бача если сейчас это будет не очень понятно то завтра я про это буду ещё раз говорить а ввиду того что сети мощные для их обучения нужно большое количество данных То есть никто нейросетями логистическую регрессию на двух признаках не обучает Потому что это не имеет смысла данных очень ма признаков мало закономерности скорее всего очень простые поэтому нен Там просто нечего делать но это

мало закономерности скорее всего очень простые поэтому нен Там просто нечего делать но это как на вертолёте в пятёрочку решать ходить Можно ли обучить на датасете ирисов большую нейросеть можно просто непонятно зачем это делать данных должно быть много если данных много то не все данные единоразово мы можем отправить в нашу Сеть Почему Ну потому что если у нас 8 ГБ оперативной памяти данных в и впихнуть в сеть просто потому что это ВС должно храни в оперативке поэтому данные делят на Бачи ба

впихнуть в сеть просто потому что это ВС должно храни в оперативке поэтому данные делят на Бачи ба это пачка данных и объектов и таргетом итеративности обучение есть когда все вот эти Бачи пропустим один раз через нашу модель это называется Эпоха То есть у нас есть все наши данные мы данные разделили на пачки когда все эти пачки через модель прошли закончилась одна Эпоха обучения нейросети обучаются эпохами Эпоха - это фактически просто итера ише прекрасно понимаем и вы это часто видели что у

эпохами Эпоха - это фактически просто итера ише прекрасно понимаем и вы это часто видели что у вас какой-нибудь там в кат бусте может быть Примерно вот такая вот картина да то есть сначала значение функции Лоса падает падает Потом оно Просто постоянно всё что сеть могла выучить она выучила дальше непонятно ничего не происходит Просто тратим время в процессе обучения мы будем собирать много информации и вообще тот самый мифический Фит о котором вы постоянно слышали на первой фазе теперь этот Фит

и вообще тот самый мифический Фит о котором вы постоянно слышали на первой фазе теперь этот Фит будем писать самостоятельно прямо по шагам в нём будет строк 60 80 10010 кода и мы будем это всё делать сами Значит на Первом шаге мы берём из нашего из наших данных берём какую-то пачку объектов соответственно в пачке объектов должны быть наши объекты и таргеты которые им соответствуют это мы будем делать Пользуясь загрузчиком данных это специальный класс в pch он у нас почти никогда не будет

делать Пользуясь загрузчиком данных это специальный класс в pch он у нас почти никогда не будет меняться он просто делает одно и тоже мы ему будем говорить Где наши данные лежат А он эти данные пачками будет для нас доставать вот в таком вот цикле соответственно размер вот этого Бача Ну сегодня я бы сконцентрировался где-то на 32 или 64 Мы в коде это отдельно посмотрим забираем из нашего загрузчика батч данных батч объектов дальше нам нужно сделать то что называется прямым проходом или варсом

батч данных батч объектов дальше нам нужно сделать то что называется прямым проходом или варсом очень красивое слово но по факту мы просто отправляем наши данные в нашу модель и получаем предсказание то есть теперь для каждого сэмпла вот здесь вот samples да таргеты нам в модели не нужны таргеты лежат отдельно а отправляем наши сэмплы в модель получаем предсказание после того как мы получили предсказание Нам необходимо а вычислить значение функции потерь функция потерь Вот она Она обычно

предсказание Нам необходимо а вычислить значение функции потерь функция потерь Вот она Она обычно называется в пайтор критери в зависимости от того какой мы выберем Сегодня вы будете выбирать средне квадратическую ошибку например функцию потерь будем передавать предсказания и будем сравнивать эти предсказания с таргетом будем получать Лос Лос - Это сложный объект пай торча но в котором в том числе присутствуют э сами показатели того насколько мы неправы насколько модель неправа после того как

присутствуют э сами показатели того насколько мы неправы насколько модель неправа после того как мы вычислили значение функции потерь и получили там всю остальную информацию порча мы вызываем пока функцию оптимайз Град что в ней происходит неважно просто сегодня её нужно вызывать что в ней происходит Я завтра расскажу и после того как мы вот эту команду пока магическую вызвали мы вызываем следующую команду которая вычисляет частные производные у наших параметров то есть мы получили строкой выше

команду которая вычисляет частные производные у наших параметров то есть мы получили строкой выше вот здесь вот получили значение функции потерь Теперь мы хотим продифференцировать все параметры в нашей модели чтобы Понять насколько каждый параметр нужно изменить чтобы это значение функции потерь стало меньше то есть для того чтобы устремиться это значение к минимуму и всё это будет делать для нас замечательная функция которая называется Back прямо у объекта мы вызываем метод Back и он

для нас замечательная функция которая называется Back прямо у объекта мы вызываем метод Back и он вычисляет нам все частные произво это об он только вычисляет эти частные производные чтобы скорректировать значение параметров то есть чтобы сделать шаг именно обучения мы должны у оптимайз вызвать метод п то есть на самом деле логика здесь абсолютно та же самая которой вы пользовались на первой фазе получаем какие-то предсказания вычисляем функцию потерь сте производные корректируем у ва были

фазе получаем какие-то предсказания вычисляем функцию потерь сте производные корректируем у ва были Просто теперь эти шаги обша новым синтаксисом есть хорошая новость обучающий цикл у нас не будет меняться практически никогда Мы его будем там подпиливать под задачу Но вот это вот вот эти вот три строки они будут с нами вот начиная с сегодняшнего дня и заканчивая вторником четвёртой недели когда мы последний раз запустим обучение нерока О вы это первый раз видите нормально вам это глаза на

мы последний раз запустим обучение нерока О вы это первый раз видите нормально вам это глаза на мозолят так что потом ночью будете вставать и писать с закрытыми глазами на клавиатуре вот к этому нужно просто привыкнуть значит что получается на одной пачке данных мы получили предсказание вычислили частные производные и скорректировали значение параметров нашей модели То есть получается взяв некоторую часть объектов из выборки мы собственно этом подмножеств образом беря пачку за пачкой из нашего

часть объектов из выборки мы собственно этом подмножеств образом беря пачку за пачкой из нашего датасета наши данные мы будем на каждой пачке немного корректировать значение параметра Ну и дальше мы будем естественно в процессе обучения собирать значение функции Потер ам будет доставать для нас вот значение просто выражения бинарной Крос энтропии что угодно то есть значение функции поте будем это просто добавлять в список какую-нибудь метрику Ну Метрика будет зависеть от задачи это может быть

просто добавлять в список какую-нибудь метрику Ну Метрика будет зависеть от задачи это может быть роук я не знаю среднеквадратическая ошибка что угодно обще какую метрику выберем такую и будем использовать Давайте Вот по этому блоку вопрос да по А значит на каждом баче модель уже обучается она не просто записала параметры запомнила их она сразу обучила и на следующей итерации уже переу ну ещ раз а да Угу обучается дальше то есть мы берём прямо и просто по пачем идём могли ли мы типа сохранять

а да Угу обучается дальше то есть мы берём прямо и просто по пачем идём могли ли мы типа сохранять все вот эти например значения частных производных и всего такого в целом могли и даже есть некоторые случаи обучения очень больших моделей Когда это делают вот в наших задачах Это вряд ли будет ээ важно И самое главное вряд ли это будет эффективно то есть мы можем это всё накопить И потом один раз сделать оптимайз СТП то есть вот этот который корректирует параметры модели но вроде как Ну если у

сделать оптимайз СТП то есть вот этот который корректирует параметры модели но вроде как Ну если у нас есть возможность корректировать прямо на лету в рамках одной эпохи Так давайте это делать Мы быстрее получим результат нам не нужно будет создавать отдельные объекты для хранения всех этих штук то есть в целом Да можно поступить по-другому но нас и так будет устраивать вполне А Саша Так у нас тут балос барик и все остальные объекты это необходимо так их называть для правильной работы это

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

переменными Но для того чтобы соблюдать как бы некоторую консистентность Да чтобы любой другой человек который знает pch посмотрел на ваш код и он такой Ага вот Лос вот там оптимайз всё ну типа всё как принято Ну то есть это подругому но не рекомендуется А вот эти вот бало bmc - это то что мы сами собираем эти списки как угодно Называйте но просто тут тоже кажется логичным это значение функции потерь на Бах Давайте назовём ба будет значение функции на эпох будем называть Элос например просто

потерь на Бах Давайте назовём ба будет значение функции на эпох будем называть Элос например просто чтобы не запутаться всё хорошо спасибо луба что упустил момент для чего мы делаем вычисляем частные производные в нашей модели Окей любовь Вопрос такой вот на чах модель независима обучается получает свои веса потом А вот от эпохи к эпохе там ну какое идёт наследование вот этого обучение нуно у нас параметры же в модели одни и те же мы постоянно эти параметры изменяем то есть на одни и те же

нас параметры же в модели одни и те же мы постоянно эти параметры изменяем то есть на одни и те же параметры мы корректируем потому что у каждого слоя есть свои параметры они ну как бы как их структура не меняется то есть вот у нас есть параметры мы одну эпоху прогнали эти параметры эпохи будет то же самое мы будем эти же параметры корректировать хорошо А значит да Саш Да вот последний вопрос у нас э количество объектов в баче это будет количество объектов э ипу в первый слой всё Угу помимо

у нас э количество объектов в баче это будет количество объектов э ипу в первый слой всё Угу помимо того что мы хотели бы что-нибудь понимать о нашем обучении а как мы будем понимать мы будем это собирать значение функции потерь и значение метрики Ну логично Да как нам понять модель хорошо работает или плохо следить за тем что уменьшается Метрика там в зависимости от того какая она тоже увеличивается или уменьшается мы бы хотели ещё прямо внутри ну в процессе обучения хотели бы ещ и проверять

или уменьшается мы бы хотели ещё прямо внутри ну в процессе обучения хотели бы ещ и проверять как модель работает на тех данных которых она ви То есть как она вет себя на Валида или тестовых данных я буду называть их Валида но знаете что это в общем Ате спт Поэтому после того как у нас выполнится вот этот вот Блок Мы будем дописывать это обучающий шаг Да после того как у нас выполнится этот Блок Мы будем прямо на литу проверять нашу модель то есть мы будем брать вторую сть котора будет связана

Мы будем прямо на литу проверять нашу модель то есть мы будем брать вторую сть котора будет связана с валион загрузчиком будем оттуда забирать наши сэмплы и таргеты абсолютно также это будет такой же загрузчик просто работать он будет на другой пачке наших данных будем переводить модель в режим валидации это делается с помощью Мо но мы это в коде ещ увидим я прокомментируй значит почему здесь написано Град потому что в процессе проверки модели мы не будем е обучать нам не нужны никакие

написано Град потому что в процессе проверки модели мы не будем е обучать нам не нужны никакие градиенты мы ничего никакие частные производные ничего такого у нас не будет Мы будем брать модель и работать с ней просто предсказываю то есть в валидация а просто проверяем как эта модель вет себя на те данных которых было в обучающей выбор формулировку провести какая у нашей модели обобщающая способность То есть как она может к новым данным адаптироваться получается что здесь мы делаем на самом

То есть как она может к новым данным адаптироваться получается что здесь мы делаем на самом деле тоже самое но с отключённым градиентами получаем предсказание на валидацию функцию потерь но теперь ввиду того что мы модель не обучаем нам не нужно ни обнулять градиенты ни вычислять частные производные ни корректировать То есть тут мы просто говорим о Теперь мы тебе дам валион данные предскажи на них что-нибудь мы посчитаем на тебе Лос и всё дальше мы добавляем значение Лоса в список значение

них что-нибудь мы посчитаем на тебе Лос и всё дальше мы добавляем значение Лоса в список значение метрики тоже в список но никакого обучения здесь не происходит то есть Прям просто берём другую часть данных отправляем её Смотрим как модель что-то прем обм первые Бачи точнее все Бачи из обучающих данных прошли через нашу сеть мы переходим после этого к Валида части также чами из валидация все наши объекты но не обучаемся на них а просто предсказываем делаем предсказание и смотрим Приводит ли к

объекты но не обучаемся на них а просто предсказываем делаем предсказание и смотрим Приводит ли к чему-то наше обучение вообще потому что бывает такое что обучение вроде как идёт а мы даже не понимаем там всё окей или как вообще или там может мы переобулись уже давно поэтому обучающий шаг - валидация Эпоха обучающий шаг - валидация Эпоха обучающий шаг валидация шаг валидация шаг тоже У нас никогда не будет меняться Особенно это всё будет одно и то же значит в цикле э если чисто кодом это вы

не будет меняться Особенно это всё будет одно и то же значит в цикле э если чисто кодом это вы выглядело бы ну собственно абсолютно та таким же образом Да говорим будем обучать сколько-нибудь эпох это кстати ещё один а вопрос на который ответа У меня нет а на сколько эпох ставить обучаться не знаю даже не спрашивайте бежим по эпохам сколько раз мы выполним обучающий валидация данные Таргет предсказание считаем Лос обнуляем градиенты частные производные корректируем параметры данные собрали

считаем Лос обнуляем градиенты частные производные корректируем параметры данные собрали теперь так уре уред вот э информация у нас на Бах Давайте теперь мы сквозь Бачи ВС это усредни с помощью обычного Намин и получим данные теперь уже по эпохам то есть вот первая Эпоха прошла усреднённый Лос по всем Чам усредненная Метрика по всем Чам хотим проваливать ещё проще обнуляем то что утопление здесь кстати говоря ошибка здесь отступа не должно быть переводим модель в режим валидации бежим по

здесь кстати говоря ошибка здесь отступа не должно быть переводим модель в режим валидации бежим по другому дата лору предсказание Лос записали усредни тоже самое абсолютно Окей значит на коде пока Давайте Останавливаться не будем если какие-то вопросы есть Я сейчас в демо отвечу на них Вот потому что тут понятно много всего и последовательность там может некоторым образом путать но при все привыкали и вы привык значит самая большая сложность в том что нейронные сети супер гибкие а вся эта

и вы привык значит самая большая сложность в том что нейронные сети супер гибкие а вся эта гибкость это с одной стороны очень большое удобство Да пофигу что картинки текст а давайте и картинки и текст а Давайте ещё звук туда какие у него будут выходы А сколько будет нейронов А сколько будет слоёв А какую функцию активации использовать а Подходит ли здесь вот такой Лос или не подходит короче говоря проблем стало намного больше чем было когда вы сделали табличку и заполнили пропущенные значени

проблем стало намного больше чем было когда вы сделали табличку и заполнили пропущенные значени импортировались открывает то есть теперь как бы если вы увидите какой-то датасет который состоит вообще из Непонятно чего там из каких-нибудь спектрограммы разговоров пользователей по телефону в принципе накопившиеся можно запихнуть в сеть а Даше делайте сколько угодно слов любые функции активации почитайте что люди использовали до этого Попробуйте повторить это и либо Используйте что-то предо вот

что люди использовали до этого Попробуйте повторить это и либо Используйте что-то предо вот поэтому с одной стороны мы много всего будем доливать сами с другой стороны мы будем параллельно знакомиться с предо моделями которые уже прям созданы для того их с и Зачем нам долго самим экспериментировать если есть специально обученные люди которые которым за это платят деньги они бесплатно Нам всё это отдают почему бы и не воспользоваться этим вот к чему надо быть сразу готовым к тому что кода будет

отдают почему бы и не воспользоваться этим вот к чему надо быть сразу готовым к тому что кода будет намного больше намного больше будет кода потому что и обучающий цикл один сам по себе и то сколько всего нам придётся визуализировать когда это будут картинки а потом поверх этих картинок будем рисовать прямоугольники а потом мы в тексте будем выбирать Главные слова и всё это придётся писать Руми Такова жизнь вот программировать может быть кому-то не очень весело но к сожалению нужно Ну и на

Такова жизнь вот программировать может быть кому-то не очень весело но к сожалению нужно Ну и на сегодня наверное по теории у меня всё Давайте заключительные по лекции вопросы 10 минут будем делать перерыв и пойдём в код Сергей Да у тебя вопрос тот ещё давай ги Ели у вас есть какой-то вопрос который вы не знаете как сформулировать и потом Возможно даже забыли забейте на него придёт ситуация в которой он всплывёт вот тогда Возможно вы уже даже Спустя время сами на него ответите Давай тогда

в которой он всплывёт вот тогда Возможно вы уже даже Спустя время сами на него ответите Давай тогда следующий у меня по Чам вопрос я на самом деле чуть-чуть Отвлёкся буквально на минуту с курьером Яндекса воевал у нас одна Эпоха это один бач всего прое или у нас или у нас по аналогии с валидации у нас делится на какое-то количество чов В итоге всё по Чам пройдёт через эпоху одна Эпоха - это все Бачи прошедшие через модель Ага всё А всё понял Всё тогда всё вопроса Нет окей Ну что тогда наверное

прошедшие через модель Ага всё А всё понял Всё тогда всё вопроса Нет окей Ну что тогда наверное Всё Давайте в 111 скину ссылку Ну в смысле в 111 встречаемся ссылку Сейчас скину Я остановлю тю быстрее обработала потому что потом это всё 3 часа будет рендерится и на юту вы это увидите только часам к четырём вот поэтому сделаем две отдельные трансляции Давайте Будьте готовы в 11:15 заскочить

на следующий раздел который уже можно сказать Чуть более универсальный чем суперсет это собственно планирование процессов в целом и рассмотрим мы его на примере использование airflow сегодня тоже простое задание такое ознакомительное завтра будет Ещё одно задание тоже связанное с airflow Ну собственно Откуда это всё взялось нам нужно понять что такое etl [музыка] Это довольно частое сочетание такое В вакансиях бывает где это можно использовать и Собственно сам суперсет значит э сам по себе etl -

В вакансиях бывает где это можно использовать и Собственно сам суперсет значит э сам по себе etl - это такое сокращение от процесса обработки данных которые расшифровывается как экстракт transform и Load на самом деле здесь Всё достаточно э прозрачно то есть у нас есть какой-то сырой источник данных это может быть вообще всё что угодно вплоть до того что вы парси какой-нибудь сайт то есть неважно это база сайт Я не знаю чат с сообщениями прогноз погоды всё что угодно на первой стадии нам нужно

это база сайт Я не знаю чат с сообщениями прогноз погоды всё что угодно на первой стадии нам нужно обратиться к этому к этому источнику и собственно данные каким-то образом оттуда извлечь вы сами знаете что даже после того как данные откуда-то извлечены на самом деле может понадобится некоторая количество промежуточных шагов для того чтобы подготовить эти данные там для обучения какой-нибудь модели за это отвечает второй этап который называется трансформацией то есть после того как вы с помощью

за это отвечает второй этап который называется трансформацией то есть после того как вы с помощью там какого-нибудь запроса Я не знаю извлекли данные у вас всегда есть этап создания новых признаков там удаления может быть признаков которые как-то попали в результирующую выборку заполнение пропусков в какие-то любые трансформации которые могут быть Вам полезны для дальнейшего использования и третий этап это собственно загрузка под загрузкой данных Может подразумеваться в общем перемещение их

этап это собственно загрузка под загрузкой данных Может подразумеваться в общем перемещение их куда-то в какое-то хранилище которое из которого уже можно будет эти данные прочитать для того чтобы создать вот как вчера дашборд какой-нибудь супер сеете по какому-нибудь там триггеру или условию обучить модель заново потому естественно всегда добутку момент поэтому мы должны свою модель время от времени переобуть то есть обучать её заново не в смысле орфи а в смысле обучить заново а соответственно

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

вот сервис собирает там я не знаю какие-нибудь клики в мобильном приложении эти клики в мобильном приложении можно использовать для например проведения какого-нибудь исследования там я не знаю эффективности ваших экранов в мобильном приложении и для того чтобы их вести я не знаю кто этим ксеры наверно какие-нибудь занимаются их задача получить эти данные в каком-то более-менее удобоваримый Мы из всего нашего там какого-нибудь кликхаус например заберём все данные о кликах пользователей потом эти

нашего там какого-нибудь кликхаус например заберём все данные о кликах пользователей потом эти данные каким-то образом обработаем И после этого загрузим их туда Откуда их уже заберут потребителя То есть это может быть справедливо и для моде машинного обучения и для которые строят дашборды и для маркетологов которые могут требовать какие-нибудь там месячные репрезентации каких-нибудь ОТВ и в общем такой зонтичный термин Для всего этого это etl Trans для на самом деле этот etl можно построить

такой зонтичный термин Для всего этого это etl Trans для на самом деле этот etl можно построить абсолютно Ну как бы собственной разработкой Ну то есть вы можете разработать какие-то скрипты которые будут выполняться там по какому-то расписанию иб тоже самое большое количество разных утилит для этого появилось потому что стало ясно что это в общем-то Ну такая для тех компаний которые собирают данные это абсолютно неотъемлемая часть работы поэтому появились инструменты которые позволяют эту

данные это абсолютно неотъемлемая часть работы поэтому появились инструменты которые позволяют эту работу оптимизировать как-то визуализировать Может быть там какие-то элементы удобства добавить и всё прочее Т также как и во вчерашнем нашем Суете На самом деле не обязательно чтобы был например какой-нибудь этап трансформации то есть само по себе извлечение данных из какого-то источника и например их трансформация прямо на этапе извлечения Ну то есть например в SQL запросе и отправка этих данных

их трансформация прямо на этапе извлечения Ну то есть например в SQL запросе и отправка этих данных в какое-то другое хранилище более понятное для там Дато саентистом или для ещё кого-то это в общем-то тоже etl просто это такой зонтичный термин для множества этапов Но на самом деле они не всегда обязаны прямо присутствовать да В некоторых случаях нам можно эти данные к примеру никуда не загружать а прямо после трансформации отправить в модель и обучить её это тоже вполне допустимо когда говорят

а прямо после трансформации отправить в модель и обучить её это тоже вполне допустимо когда говорят о еле собственно есть некоторая заданная последовательность то есть подразумевается что мы Ну не можем данные никакие загрузить если они например не трансформированные в виду что вот этот этап он как минимум зависит там от предыдущего этапа и соответственно этап трансформации тоже должен быть построен только после того как мы эти данные откуда-то достали а абсолютно это будет логично даже в том

только после того как мы эти данные откуда-то достали а абсолютно это будет логично даже в том случае если у нас например нет этапа трансформации загрузить какие-то данные мы тоже можем только после того как эти данные откуда-то были Ну экстрактивные и загружено И это всё приводит нас к некоторой модели которая э часто используется в представлении вот этих вот etl процессов у нас может быть несколько источников это могут быть какие-то базы данных мы можем эти данные оттуда доставать каким-то

источников это могут быть какие-то базы данных мы можем эти данные оттуда доставать каким-то образом там параллельно обрабатывать объединять потом агрегировать группировать э я не знаю окном каким-нибудь пробежаться и всё прочее и отправить в модель Ну и здесь ещё больше Ясно что никакой агрегации не может быть до того как мы данные не объединили объединить мы можем только те данные которые мы очистили и так мы опять приходим к тому что это некоторый направленный процесс То есть у нас здесь нет

и так мы опять приходим к тому что это некоторый направленный процесс То есть у нас здесь нет циклов мы не можем там например объединить данные потом вернуться вот сюда опять что-нибудь очистить опять объединить такой подход называется направленным ациклическим графом или Гра или Дак более известный как Дак и это термин который употреб все даже в русскоязычном поле что такой граф сам по себе Граф - это у него на самом деле не очень-то и строгое определение это множество каких-то вершин которые

- это у него на самом деле не очень-то и строгое определение это множество каких-то вершин которые соединены какими-то рёбрами то есть мы понимаем что там в качестве графа можно представить себе там например связи в социальных сетях да кто с кем связан вчера в общем-то тоже с помощью графа я во время лекции показывал как города связаны друг с другом Сколько вылетов из Москвы в какие города и и всё прочее а обычный Граф не подходит для репрезентации Вот таких вот процессов потому что мы

и и всё прочее а обычный Граф не подходит для репрезентации Вот таких вот процессов потому что мы договорились в том что этот процесс должен быть направленный и направленные э графы тоже естественно существуют направленным Граф считается тогда когда у него есть некоторое направление то есть мы знаем что из вершины например А можно попасть ээ Пусть это будет перевёрнуто из вершины А можно попасть в Вершину Б Но при этом мы видим что из вершины Б обратно стрелочка отсутствует то есть мы не можем

в Вершину Б Но при этом мы видим что из вершины Б обратно стрелочка отсутствует то есть мы не можем по определению нашего графа Мы из вершины B в Вершину а попасть никак не можем и это уже чуть ближе к тому что нам нужно то есть мы понимаем что у нас там может быть какой-нибудь я не знаю мы достали какие-нибудь данные отправили категориальные данные для того чтобы сделать какой-нибудь хо энкодинг числовые данные отправили там сразу куда-нибудь и здесь у нас этап рнга то есть мы берём наши

числовые данные отправили там сразу куда-нибудь и здесь у нас этап рнга то есть мы берём наши законные данные и Соединяем их с нашими данными с нашими данными числовыми последнее свойство которое для таких процессов важно - Это собственно ациклического так вот бродить по каким-то вершинам то есть мы можем из этой вершины прийти в эту вершину из этой вершины прийти в эту вершину То есть у нас всегда есть какая-то точка старта или несколько точек старта Это тоже может такое быть и в из этой точке

есть какая-то точка старта или несколько точек старта Это тоже может такое быть и в из этой точке старта Мы всегда обязаны прийти в какую-то конечную точку финиша без возможности вернуться назад потому что возможность вернуться назад для нас означает наличие цикла если у нас есть цикл это значит То что мы имеем возможность попасть вот в такую бесконечное выполнение одних и тех же операций собственно вот эти самые а именно такая Это вроде как расшифровка просто направленный ациклический Граф Но

вот эти самые а именно такая Это вроде как расшифровка просто направленный ациклический Граф Но на самом деле это является центральным понятием airflow и ещё множество таких утилит которые позволяют собственно такие процессы строить значит Дак - это по совместительству помимо того что это там какой-то Граф у которого нет циклов и всего остального Это центральная сущность airf которая объединяет некоторое множество задач единый пайплайн и мы знаем всегда что в этом пайплайн какой-то этап зависит

множество задач единый пайплайн и мы знаем всегда что в этом пайплайн какой-то этап зависит от какого-то предыдущего он может зависеть даже просто в смысле того что он выполняется после какого-то Это совершенно неважно у нас может быть этап что когда мы ага данные мы собрали и такие отправляем там условный сигнал что данные собраны выполняем следующий этап Но на самом деле даже просто задачи стоящие друг за другом это уже в определённом смысле Дак потому что они распределены каким-то образом во

друг за другом это уже в определённом смысле Дак потому что они распределены каким-то образом во времени у узлы как бы такого графа это просто обычные задачи они называются workflow Тами у нас может быть таск например создать файл или директорию после того как мы там я не знаю какой-нибудь файл или директорию создали мы можем обратиться к какому-то источнику данных мы можем очистить какие-то данные и так далее в airflow вот эти все таски то есть Элементарные операции или на самом деле просто

и так далее в airflow вот эти все таски то есть Элементарные операции или на самом деле просто узлы вот этого самого графа это какие-то операции которые чаще Ну во-первых все  написаны на питоне в airflow и все задачи которые в этих дагах могут появляться это на самом деле обычные питонов ские или бар скрипты то есть мы с помощью airflow даже не то чтобы пишем Какой Ну какой-то Даг мы пишем его фактически на чистом питоне Ну там с некоторыми исключениями И после этого с помощью airflow мы все

фактически на чистом питоне Ну там с некоторыми исключениями И после этого с помощью airflow мы все эти скрипты объединяем в какой-то определённый Даг но чаще всего это просто обычные питонов ские скрипты которые позволят ну которые как бы нам известно можем использовать там любые библиотеки которые нам Важны и pch всё что угодно всё будет работать потому что это обычный питон значит вот эти вот самые таски это и есть узлы того самого графа существует такая штука которая называется операторами

самые таски это и есть узлы того самого графа существует такая штука которая называется операторами значит оператор - Это концепция которая описывает то как выполнить конкретный таск то есть таск - это определённая задача а оператор - Это собственно то с помощью чего мы можем выполнить этот таск вот в данном примере мы потом конечно код посмотрим ещё не сильно подробнее но тем не менее что фактически происходит вот в этом Так называемом даге у меня есть создат C фа то есть она буквально Берт

происходит вот в этом Так называемом даге у меня есть создат C фа то есть она буквально Берт открывает контекстный контекстный оператор открывает какой-то файл с помощью CSV записывает туда этот файл Ну и какие-то колонки туда добавляет да то есть просто добавляет строку в какой-то CSV фай дальше у меня есть перего эту функцию в том числе эту функцию Мы можем написать так который говорит нам что мы его называем у него может быть какое-то описание у него могут быть какие-то дефолтные Аргументы и

его называем у него может быть какое-то описание у него могут быть какие-то дефолтные Аргументы и я с помощью тоже такого контекстного подхода объединяют сделать в О да первый у меня в баше Ну папке создаются Я просто пишу дир path да то есть по какому пути мне создать директорию То есть первый первый мой оператор - Это Баш оператор у него есть некоторое обозначение идентификатор Что должен сделать этот ш оператор Он должен с помощью выполнить Вот эту вот команду и с помощью - P создать

сделать этот ш оператор Он должен с помощью выполнить Вот эту вот команду и с помощью - P создать какую-то директорию Что должен сделать второй мой оператор второй мой оператор Он будет называться Create CSV это будет Python оператор у него будет тоже какой-то идентификатор и у него есть аргумент который называется Python callable Это значит что сюда Я должен передать название функции которую я буду исполнять У меня есть функция которая называется Create CSV соответственно после того как моя

буду исполнять У меня есть функция которая называется Create CSV соответственно после того как моя папка создастся у меня то есть выполнится ш оператор я перехожу к следующему оператору Python оператор и этот Python оператор должен Дописать мне в CSV файл какую-то строку и дальше Вот с помощью вот такого странного синтаксиса Ну это синтак airflow уже а не просто питона я объединяют дальше создай а CSV файла А у дагов существуют такие э штуки как аргументы один из самых полезных по крайней мере

а CSV файла А у дагов существуют такие э штуки как аргументы один из самых полезных по крайней мере на начальном этапе для вас аргументов - это aer мы сегодня посмотрим где этот aer в интерфейсе airflow присутствует но просто э Если у вас есть какой-нибудь airflow то у доступ к этому airflow может быть очень у многих потому что это тоже веб-сервер куда Вы заходите Там смотрите внутренности и вс прочее и вы можете в качестве Аура вписывать сюда например какой-то свой ник или какое-то своё имя и

и вы можете в качестве Аура вписывать сюда например какой-то свой ник или какое-то своё имя и таким образом всегда понимать Какие  написаны конкретно вами дальше у дагов есть такая штука которая называется Start Date соответственно есть и end Date это собственно дата начала исполнения вот здесь у меня Если у меня вот этот вот Дак запустить то он посмотрит что теку текущий момент времени больше ть третьего года значит он его должен запустить прямо сейчас если бы у меня здесь стоял 2025 год то он

третьего года значит он его должен запустить прямо сейчас если бы у меня здесь стоял 2025 год то он бы посмотрел на вот эту дату и сказал бы я не могу запустить этот Дак потому что он ну типа не соответствует интервалу времени в который я его Пытаюсь запустить Но со временем особенно работать не будем у вас там только в одном задании это есть но тем не менее что люди ставили сюда там я не знаю 1995 и говорят а почему у меня 3 часа уже Дак исполняется Я говорю потому что он должен столько раз

1995 и говорят а почему у меня 3 часа уже Дак исполняется Я говорю потому что он должен столько раз его исполнить сколько вот лет До сегодняшнего момента прошло вот а и среди аргументов там на самом деле много разных аргументов под конкретную задачу нужно искать свои например есть ещё ретрай то есть если у него не получится создать там CSV файл или создать папку он пере попробует ещё раз столько сколько у вас написано вот в этом й но как бы главное что из этого примера нужно понять что у нас

сколько у вас написано вот в этом й но как бы главное что из этого примера нужно понять что у нас есть два как бы две функции эти две функции представлены двумя операторами это сущности airflow мы их будем импортировать и в одном случае мы просто исполняем какую-то Баш команду в другом случае мы исполняем Python функцию и с помощью такого синтаксиса их объединяем то есть вот эти операторы перечень вот этих вот операторов это собственно описание того как выполнить конкретный таск то есть один

вот этих вот операторов это собственно описание того как выполнить конкретный таск то есть один таск он состоит из оператора таск - это не то чтобы должно быть что-то прям Элементарная вот функция которая выполняется оператором вот эта функция должна быть элементарной Ну тут особенного простора и нет то есть у нас есть баш оператор Это просто какая-то команда STR и есть Python оператор Это просто какая-то какая-то функция среди операторов на самом деле много разных есть то есть есть и Simple

какая-то какая-то функция среди операторов на самом деле много разных есть то есть есть и Simple там http оператор Это из разряда отправить запрос Get или пост Потому что часто мы данные получаем из интернета с помощью каких-то запросов или отправляем в интернетах с помощью запросов существует постгрес оператор и в целом если вот по ссылке перейти там будет прямо большое количество операторов и каждый оператор он как бы под свою задачу Да есть операторы которые кладут в базу mysql есть в есть

каждый оператор он как бы под свою задачу Да есть операторы которые кладут в базу mysql есть в есть которые в M db в общем будут операторы такие достаточно специфические и Это довольно удобно просто потому что это очень сильно повышает читаемость кода Потому что когда вы делаете там я не знаю у себя где-нибудь какой-нибудь request Get там и всё остальное Тут ещё допеть надо куда вы хотите что отправить Когда у вас есть какой-то там более такой конкретный класс что вот это http оператор который

Когда у вас есть какой-то там более такой конкретный класс что вот это http оператор который мы знаем какие функции исполняет это выглядит понятней но ничего не мешает вам отправлять и с помощью к потому что это вновь это просто новский скрипт ещё один тип такая Концепция wfl - это Сенсор сенсор - Это вид операторов который запускается по каком-то времени на самом деле у любой фактически любой Дак можно запускать например каждый час Вы просто передаёте в аргументах что у нас есть расписание Мы

можно запускать например каждый час Вы просто передаёте в аргументах что у нас есть расписание Мы хотим запускать это Дак каждый час это на самом деле очень удобная штука Потому что если у вас есть хотя бы какая-то периодичность исполнения в вашей системе А естественно эти периодичности есть во всех больших проектах в которых собираются данные Давайте раз в сутки Я не знаю пересчитывать там какие-нибудь очки у участников чего-нибудь Давайте раз в сутки считать Какой средний чек был у нас

какие-нибудь очки у участников чего-нибудь Давайте раз в сутки считать Какой средний чек был у нас сегодня Давайте раз в неделю будем обновлять нашу базу посмотрим там я не знаю наиболее тив пользователе и вот эта периодичность Она довольно легко задаётся в самом airf и В каком-то смысле вот если кто-то знает или может быть слышал что такое крон это такая утилита в линуксе которая позволяет скриптами башев скими запускать с некоторым интервалом или по каким-то правим запускать другие скрип и в

башев скими запускать с некоторым интервалом или по каким-то правим запускать другие скрип и в оден смы такое расширение вот этого сирона или крона То есть он предоставляет просто более больше возможностей и удобно но люди которые привыкли работать с кроно это отдельный особенный тип людей вот то есть сенсоры позволяют на самом деле просто такие Ага данные пришли значит идём туда Ага время пришло как кот который смотрит в меме на часы и поворачиваясь говорит пора Вот то же самое airflow смотрит

как кот который смотрит в меме на часы и поворачиваясь говорит пора Вот то же самое airflow смотрит и говорит пора запустить что-нибудь а отдельный немножечко компонент Дага с которым который мы будем просто запускать никак их не будем никак не будем его не настраивать ничего это просто отдельная сущность это так называемый планировщик планировщик - это на самом деле служба которая в общем-то считывает все смотрит когда эти  нужно выполнить И вообще говоря просто эти исполняет мы его мы будем

все смотрит когда эти  нужно выполнить И вообще говоря просто эти исполняет мы его мы будем запускать airflow чтобы запустить веб-интерфейс и вот этот планировщик просто в отдельном терминале то есть А эти эти планировщики они Точнее он один Просто многопоточный он смотрит Какие таски и есть как только пришло время какой-то таск исполнить он достаёт а экземпляр который называется Task instance это происходит внутри нам это внутренности этого планировщика не нужны а создаёт Task instance

это происходит внутри нам это внутренности этого планировщика не нужны а создаёт Task instance обращается конкретные таски и пытается её исполнить исполняются все таски в воркера Ну это уже типа знаете такая штука из многопоточного там программирования что вот у нас есть множество каких-то задач мы эту каждую задачу должны там выполнять в отдельном потоке и всё прочее прочее прочее мы внутрь этого заходить даже близко не будем то есть мы этот планировщик просто будем запускать поэтому сюда

этого заходить даже близко не будем то есть мы этот планировщик просто будем запускать поэтому сюда можно особенно внимание своё не акцентировать Ну и Эктор - это собственно сердце этого планировщика Давайте на схему сразу посмотрим э Значит у нас есть пользователь этот пользователь будет э как бы анализировать то что он сделал Какие  он написал с помощью веб-сервера airflow это будет открываться просто в браузере а с другой стороны для того чтобы написать какой-то Дак этот пользователь должен

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

скрипты будут у нас находиться в специальной папке и эту папку будет читать время от времени вот конечно раздражает многих по использования вот Это какой-нибудь скрипт сюда это не значит что он через секунду появится у вас в веб-сервере Если бы так происходило то ваш бы компьютер нагревался очень быстро потому что это просто постоянный мониторинг и апдейт содержимого одной и той же папки поэтому там будет происходить некоторая задержка обычно э задержка не больше там пары минут поэтому вполне

там будет происходить некоторая задержка обычно э задержка не больше там пары минут поэтому вполне Терпи как только здесь что-то появится планировщик airf прочитает данные которые в этой папке есть проанализирует что все корректны И после этого посмотрит на их расписание и создаст некоторую очередь то есть очередь - Это буквально как бы что и зачем ему нужно будет выполнять далее когда эта очередь есть начнут вызываться воркеры airflow они будут отрабатывать и сохранять результаты в базу данных

есть начнут вызываться воркеры airflow они будут отрабатывать и сохранять результаты в базу данных в базу данных результатов который является частью airflow Она прямо так и называется это база в которую сохраняются результаты мы сегодня увидим интерфейс к этой базе то есть там прям будет я запустил вот этот вот Дак то дата попробовал столько раз у меня получилось или не получилось или я ещё исполняю В общем там несколько вариантов исполнения есть все результаты исполнения будут обратно

исполняю В общем там несколько вариантов исполнения есть все результаты исполнения будут обратно пользователю в этом веб-сервере отражены результаты имеется в виду исход то есть что выполнило успешно выполняется на данный не смогло выполниться это просто статусы и там будет чем больше красных квадратиков вы сегодня увидите И чем большее количество раз условно говоря у вас сегодня не получится что-то сделать тем большее количество нецензурной лексики из вас выльется но тем больше вы поймёте как

сделать тем большее количество нецензурной лексики из вас выльется но тем больше вы поймёте как бы об особенностях работы таких систем в целом не только вот и мы на самом деле будем фактически находиться вть и завтрашнее занятия мы фактически будем находиться только вот в этой Вот части то есть мы будем находиться в части нашей папочки с Дага куда мы их самостоятельно будем писать И вот это вот airflow Web сервера к которому мы будем просто обращаться всё вот это будет делать за нас airflow

airflow Web сервера к которому мы будем просто обращаться всё вот это будет делать за нас airflow Хотя опять же могли ли мы это написать самостоятельно или если нам нужно я не знаю раз в день например парсить какой-нибудь сат может возникнуть вопрос а нужно ли мне тащить за собой лый комба для того чтобы раз в сутки запускать какой-нибудь скрипти который пробегает по сайту и забирает Там пять последних новостей Это большой вопрос но когда компания достаточно большая и вы ну как бы Когда у вас

новостей Это большой вопрос но когда компания достаточно большая и вы ну как бы Когда у вас количество процессов становится довольно большим вот эти обра дан м каждый день или каждую неделю что-то нужно и писать Для этого такие самописный костыли не всегда бывает удобно в любой момент всё переходит в то что уже нужно использовать для этого специализированные инструменты Вот давайте вопросы пока там без итогов Какие вопросы появились может быть да Сергей скажи вот эти все инструменты которые мы

без итогов Какие вопросы появились может быть да Сергей скажи вот эти все инструменты которые мы на этой неделе проходим это больше ну ближе к аналитике и какой-то дата инженерии чем я бы не сказал что airf используется очень много где то есть если вчерашний суперсет наверное можно сказать что он скорее больше к аналитике airf я бы не сказал Это буквально инструмент автоматизации автоматизации там в аналитике или в Дат сансе А если вам нужно я не знаю раз в 2 дня модель заново обучать руками

там в аналитике или в Дат сансе А если вам нужно я не знаю раз в 2 дня модель заново обучать руками будете это делать или может быть стоит написать какой-нибудь пайплайн который это будет сам всё делать и показывать вам результаты вот Ну так вот не сказал бы что это ближе к аналитике пока какая-то картина целостная не выстроилась сижу смотрю и думаю куда это ближе понял спасибо не надо думать куда это ближе надо просто сделать задание и если Ну просто смотрите airflow мы добавили после того как

это ближе надо просто сделать задание и если Ну просто смотрите airflow мы добавили после того как там из 20 выпускников которых мы опрашивать 17 сказали что у них либо на собеседовании спрашивали Что такое airflow Либо они используют это в работе то есть я добавил airflow в программу Не потому что я влюблён в airflow и считаю что все должны любить airflow Вот это просто обычная статистика не более Да Окей значит Ну что в целом вот эти процессы etl они свойственны любой большой более-менее

более Да Окей значит Ну что в целом вот эти процессы etl они свойственны любой большой более-менее большой компании то есть это если это какой-то бигтех это 100% вообще без вариантов там будет огромное количество Вот таких вот пайплайн похожа нам что-то откуда-то надо достать с эти бы сделать И куда-нибудь это загрузить и если у нас есть компоненты этого пайплайф объединить эти компоненты в Ну такой настоящий пайплайн и этот пайплайн мы будем использовать мы можем это pel написать в wfl мы

такой настоящий пайплайн и этот пайплайн мы будем использовать мы можем это pel написать в wfl мы можем его написать руками просто написать большой класс и связать там какие-то его методы друг Между другом для того чтобы нам было удобне но оказывается что если такая работа становится регулярной то проще использовать какие-то профильные инструменты значит airflow он состоит из множества компонент на самом деле там всё это Мета даты exec Work в принципе там на первоначальном этапе на это можно не

самом деле там всё это Мета даты exec Work в принципе там на первоначальном этапе на это можно не обращать внимание потому что ну это какая-то внутренняя штука airflow она есть Она работает Наша задача сделать и написать Да так чтобы этот да был исполним чтобы он соответствовал правилам airf чтобы airflow мог его запустить то есть генерально для нас две главные компоненты airflow Как с точки зрения пользователя Да airflow это собственно сами и второе - это веб-сервер с помощью которого мы всё

пользователя Да airflow это собственно сами и второе - это веб-сервер с помощью которого мы всё это дело запускаем и проверяем результаты вот а ну почему собственно мы используем airflow а не что-нибудь другое тут как всегда аргументы простые потому что это Python потому что это Open Source и потому что это очень гибкий инструмент он не без багов он может вызывать впечатление такого тормозну того но как бы как вчера я ответил это Open Source ничего с этим не поделать ээ Зато бесплатно можно

но как бы как вчера я ответил это Open Source ничего с этим не поделать ээ Зато бесплатно можно использовать и Вполне себе это практикуется значит среди того что ещё есть есть внутренний даже у Ача более-менее конкурент Ну там они немного могут отличаться это apch nfi а существует avs Step function То есть если там инфраструктура хранения обработки данных в АВС то допили как бы airflow к своей инфраструктуре может оказаться избыточным потому что тогда проще использовать встроенный но опять же

может оказаться избыточным потому что тогда проще использовать встроенный но опять же это работает только тогда когда у вас А когда у вас вся инфраструктура в Ас Когда у вас что-то лежит там что-то лежит здесь что-то исполняется тут здесь АС Step function могут помочь но при этом вряд ли будут какие-то решающие преимущества по сравнению с airflow есть инструмент prefect prefect.io сайт тоже аналогия полная airflow есть инструмент daxer это тоже инструмент такого построения Вот таких вот

аналогия полная airflow есть инструмент daxer это тоже инструмент такого построения Вот таких вот пайплайн и управления ими здесь по ссылке можно прочитать про отличия в целом если у вас получится там в какой-то момент 20 минут не ну не ругать airflow Вы можете считать что со всеми остальными инструментами подобного рода вы уже справились потому что они как правило являются более простыми Ну также как там Power например или табло красивее удобнее чем сусе Потому что Power Bi и табло стоят денег

как там Power например или табло красивее удобнее чем сусе Потому что Power Bi и табло стоят денег сусе бесплатный но в общем это логика осор и не Самого простого погружения в некоторые продукты она сохраняется Окей давайте тогда смотреть код у меня в в принципе всё проверил и всё работает Давайте посмотрим во-первых инструкция я эту инструкцию не буду пояснять здесь я вчера полностью всё это проделал всё это работает вам нужно сегодня работаем локально Попробуйте Сначала сделать так чтобы это

всё это работает вам нужно сегодня работаем локально Попробуйте Сначала сделать так чтобы это работало локально Значит мы создаём окружение устанавливаем туда airflow Это команда из документации инициализирует какой-то пользователь который будет у нас там первым airflow Web Север открываем наш веб-сервер запускаем и в соседней консоли вот здесь написано В отдельной консоли активируем созданное окружение и запускаем планировщик airflow то есть сам airflow веер и планировщик запускаются двумя

окружение и запускаем планировщик airflow то есть сам airflow веер и планировщик запускаются двумя отдельными командами и смотрите после того как вы это сделаете после того как вы Установите airflow и всё прочее у вас в домашней папке давайте мы прямо напишем LS домашняя папка у вас должен появиться должна появиться папка которая называется airflow вот она если мы посмотрим в эту папку LS airflow мы увидим что здесь есть такая конфигурация файл конфигурации который называется airflow cfg значит

мы увидим что здесь есть такая конфигурация файл конфигурации который называется airflow cfg значит давайте мы этот airflow cg распечатаем [музыка] так это большой фай с конфигурация airf нам обязательно нужно из этого Из этой папки нам нужна вот эта вот строка папка dax Fold должна вести в ту папку в которой вы работаете с airflow видите у меня users Doc airflow dax именно в этой папке будет airflow проверять наличие обновление измене всех дагов есть пори сечас в конфигурации у вас Обязательно

проверять наличие обновление измене всех дагов есть пори сечас в конфигурации у вас Обязательно должна быть указана путь вот к этой вот папке Если вы написали 25 дагов и вы говорите он Они не появляются у меня это значит То что у вас не задано вот это вот папка То есть Вам нужно зайти и прям путь к ней указать вручную если мне память не изменяет по умолчанию эта папка будет прямо Вот здесь но не помню потому что я давно поменял это и с тех пор airflow не переустанавливаю это очень важный момент

потому что я давно поменял это и с тех пор airflow не переустанавливаю это очень важный момент а соответственно после того как Вы всё Установите вам нужно обязательно эту папку пере переназначить Давайте теперь посмотрим что что у нас есть в самом airflow у меня здесь есть очень очень простой пример А значит я из airflow импортируют Python operator импортируют Class импортируют этот вот dax Folder - это тот самый путь к Папке то есть он э то что сейчас мы видели в настройках в config файле

- это тот самый путь к Папке то есть он э то что сейчас мы видели в настройках в config файле дальше я говорю что мои дефолтные аргументы это владелец То есть я и исполнение то есть начиная с сегодняшнего дня Я рекомендую вот этот Старт дей оставить у вас в заданиях без изменений чтобы просто не путаться чтобы на Ну то мало ли вы запустите какой-нибудь Дак который должен запускаться каждый час с 2023 года Вот он сколько часов прошло с 2023 года Он столько раз его исполнит то есть вот это

час с 2023 года Вот он сколько часов прошло с 2023 года Он столько раз его исполнит то есть вот это Поменяйте здесь аура и Аура тоже обязательно ставьте своего когда мы откроем веб-интерфейс будет ясно почему это намного удобнее дальше Я создаю папку с которой сейчас буду работать то есть это папка в которой я буду сохранять результаты а результаты своих данных это будет у меня очень простая функция которая называется Create directory OS Make dears создаю Вот эту вот папку testar и если она

которая называется Create directory OS Make dears создаю Вот эту вот папку testar и если она есть ничего не делаю просто Элементарная функция который создаёт папку вторая моя функция - это Create File и здесь я говорю что я должен открыть а файл SF который находится Ну файл Test txt который будет находиться вот в директории Я хочу открыть файл Test txt и написать туда Ой просто записать какую-то информацию теперь собственно мой Дак также как и в примере слайдах Я говорю with D вот эту

какую-то информацию теперь собственно мой Дак также как и в примере слайдах Я говорю with D вот эту конструкцию Я в смысле вот эту сущность Я импортировала из airflow задаю Дак идентификатор Create DIR передаю дефолтные Аргументы и говорю что интервал работы N То есть я должен выполнить этот Даг только один раз мне не нужно его повторять ни ежедневно не ежечасно ни как-то иначе S и дальше я говорю что у меня есть Task Create directory Task чтобы этот TAS выполнить я должен взять Python оператор

что у меня есть Task Create directory Task чтобы этот TAS выполнить я должен взять Python оператор который я называю Create Test и говорю что он должен выполнить этот Python оператор Вот эту вот функцию вот она второе - это Create Test F Task Это мой Python оператор Task ID тоже можно задавать какой-то произвольный и у есть py этоже вторая функция То есть фактически что в этом даге должно произойти у меня в директории в домашней должен должна создаться та папка Test DIR в ней должен создаться

у меня в директории в домашней должен должна создаться та папка Test DIR в ней должен создаться файл Text txt с текстом ой и дальше вот здесь вот я соединяю две этих таски между собой то есть я говорю сначала создай директорию после этого создай файл Вот по этому коду Какие вопросы есть Хорошо Давайте тогда давайте тогда я даже наверное перезапустят он вот так вот запускается говорит что он будет listening как всегда слушаю на каком-то адресе переходим по этому адресу и что мы здесь видим Мы

listening как всегда слушаю на каком-то адресе переходим по этому адресу и что мы здесь видим Мы здесь видим такую штуку у меня смотрите если какие-то он не может импортировать это равно в этих дагах есть какая-то ошибка он вам покажет что Broken Даг это у меня psql D дальше exch в общем какие-то е у меня сломаны повод на них обратить внимание потому что корректность дагов он проверяет прямо на литу То есть он говорит что что-то сломано но нам сейчас нужен конкретный Даг и этот конкретный Даг у

То есть он говорит что что-то сломано но нам сейчас нужен конкретный Даг и этот конкретный Даг у меня называется Create DIR вот он и я его вижу Вот здесь airflow очень много разных примеров Поэтому если мы перейдём вот сюда в интерфейсе это всё вкладка просто Дак если мы перейдём вот сюда в интерфейсе Вот это всё это примеры То есть это да в кото Вы можете заглянуть и прямо посмотреть что к чему У меня активных дагов три и давайте мы прямо зайдём вот в этот вот Create DIR и посмотрим что здесь

У меня активных дагов три и давайте мы прямо зайдём вот в этот вот Create DIR и посмотрим что здесь есть Ну у меня здесь во-первых есть большое количество успешных запусков то есть вот как бы обозначение в целом вот э первая строка говорит нам о том сколько времени исполнялось и собственно итогов итог вообще успешны или неуспешно здесь мы видим что у меня тоже множество запусков Create Task Create F Task и тоже всё успешно мы можем зайти например прямо ткнуть вот в этот вот квадратик и увидеть

F Task и тоже всё успешно мы можем зайти например прямо ткнуть вот в этот вот квадратик и увидеть что у нас здесь есть у нас здесь есть Граф и видите этот Граф он у меня состоит такой простенький из двух операторов Python оператор сначала создаём папку потом создам Файлик мы можем здесь открыть диаграмму ганта знаете что такое диаграмма ганта такая водопадная диаграмма где пересечение всяких процессов можно увидеть но Давайте посмотрим [музыка] э ну типа вот типа вот такого вот открывайся То

можно увидеть но Давайте посмотрим [музыка] э ну типа вот типа вот такого вот открывайся То есть у нас есть какие-то этапы чего-то и мы видим как один этап следует за за другим какие этапы могут связа между собой и так далее это часто во всяких там управлении проектах в it использовалось или используется Я давно не видел Но есть приверженцы хорошая штука мы можем здесь посмотреть код нашего Дага и смотрите что здесь очень важно Вот это чтобы вы просто понимали как бы масштаб видите у меня вот

и смотрите что здесь очень важно Вот это чтобы вы просто понимали как бы масштаб видите у меня вот здесь есть пропущенная рока с пролом есть из моего файла если я вот сюда вот зайду эту пропущенную строку уберу нажму Command S то вот здесь вот как я вижу она остаётся Поэтому после того как вы Обновили какой-нибудь Дак не надо тыкать его запускать сразу потому что airflow ещё не просканировал этот файл он не знает что в этом файле есть изменения иногда это может занимать несколько минут э

этот файл он не знает что в этом файле есть изменения иногда это может занимать несколько минут э поэтому тут нужно некоторое философское спокойствие либо просто писать с первого раза правильно вот но писать с первого раза правильно вряд ли выйдет Почему Потому что Ну вот вы видите Да вчера у меня шесть провальных запусков и здесь восемь провальных запусков тоже когда-то это нормально Ты просто сидишь и делаешь делаешь делаешь делаешь вот всё никак а не это здесь есть автофреш чтобы не это

сидишь и делаешь делаешь делаешь делаешь вот всё никак а не это здесь есть автофреш чтобы не это неважно А мы можем кстати говоря этот Даг уже запустить и посмотреть как это будет выглядеть А мы можем зайти Вот сюда Триггер Даг это запуск Дага вручную то есть мы берём и просто его запускаем Смотрите вот она создалась ещё одна задача ручной запуск салатовое означает то что сейчас идёт процесс выполнения Зелёная выполнило All suc вторая Зелёная выполнила All Success Какие изменения у меня должны

Зелёная выполнило All suc вторая Зелёная выполнила All Success Какие изменения у меня должны произойти чтобы я увидел что всё действительно нормально В моей директории с Дага должна создаться папка и файл где весь код весь код вот тест DIR Я просил мой Дак создать тест DIR заходим тест txt Я просил создать тест txt должен туда записать фразу Окей открываем о то есть вот таким образом выполнился мой Дак мы в целом можем выполнить его ещ раз Почему Потому что у меня здесь стоит EX то есть Никакой

Дак мы в целом можем выполнить его ещ раз Почему Потому что у меня здесь стоит EX то есть Никакой ошибки не будет а вот здесь у меня стоит а то есть Дописать в существующий файл если его нет он создастся Если есть то он допи можем зайти поста е он Ося с периодичностью Вы можете посмотреть самостоятельно в документации вам фактически нужно сказать С какой периодичностью вы хотите запускать этот Дак в интервале вот что ещё может здесь быть важным да у вас Дак не обязательно будет активный вот

Дак в интервале вот что ещё может здесь быть важным да у вас Дак не обязательно будет активный вот этот вот самый Ар видите это тот самый которого вы переда в дефолтных аргументах способ отсортировать и сразу увидеть свои собственные если Даг нужно удалить Пожалуйста можете удалить его прям Delete Дак Delete Дак если Дак нужно запустить можете его запустить А давайте рассмотрим ещё один Дак или Давайте по этому вопросы может быть какие-то пока я тут Да Кость можно запускаться Как из питона

Давайте по этому вопросы может быть какие-то пока я тут Да Кость можно запускаться Как из питона просто запуском скрипта так и с интерфейса Да без разницы [музыка] смотри если ты его запустишь просто из питона он запустится как питонов ский скрипт но при этом питон например вот такого синтаксиса не знает то есть он тебе скажет я не понимаю что это за две стрелочки как бы я не в курсе Потому что чистый питон не в курсе вот а так это кстати отладить что-то написанное на питоне в питоне в 10 раз

чистый питон не в курсе вот а так это кстати отладить что-то написанное на питоне в питоне в 10 раз легче чем отладить это как-то по-другому у airf есть дебаггер я не понимаю зачем он нужен потому что он очень очень сильно не понятный если вам нужно отладить что-то написанное как бы в виде Дага Вы можете расставить Като функци вот в этот файл просто как Python пробел My First P в таком случае эти принты отработают Ну как бы здесь он либо выдаст ошибку либо просто знает Ну проигнорировать но вы

принты отработают Ну как бы здесь он либо выдаст ошибку либо просто знает Ну проигнорировать но вы хотя бы по принтам поймёте типа Где у вас какой-то переход неправильный то есть где у вас может какая-то не та информация передаётся но в целом это некоторая боль которая учит смирению потому что действительно вот там один Дак его можно даже очень простой его можно 10 раз переписать 12 постоянно жь пока он обновится и вс это в общем выглядит именно так но зато даёт потом даёт довольно сильную

жь пока он обновится и вс это в общем выглядит именно так но зато даёт потом даёт довольно сильную экономию времени потому что у меня даже личный airf есть котором я написал разных дагов и они делают за меня там некоторую работу Вот то есть в буквальном смысле когда-то были шутки что вот там программисты их наняли они автоматизировали идт в подвала чистый такой вариант вот Давайте ещё вопрос был ты сделал изменение в файле и сказал Ctrl S это чего захо Ctrl S Ну сохранить файл просто А всё окей

сделал изменение в файле и сказал Ctrl S это чего захо Ctrl S Ну сохранить файл просто А всё окей и ждём обновление Там на веб-сервере то есть сам веб-сервер перезапускать не нужно после каждого изменения он сам будет эти изменения подтягивать Просто он не сильно сообразительный вот сейчас если мы зайдём в код но он уже должен убрать да естественно сено он пудовый конечно обновил Вот то есть смотрите у него где-то вот в том самом файле с конфигом есть какая-то переменная типа Тайт или что-то

у него где-то вот в том самом файле с конфигом есть какая-то переменная типа Тайт или что-то рефреш Тай короче что-то такое Но тот кто ставил этот таймаут на какой-то короткий срок он же постоянно сканирует папку есть изменения Нет он сканирует сканирует сканирует сканирует и соответственно это ничем хорошим для температуры вашего компьютера Вот поэтому я предлагал бы просто бы философски к этому относиться тут можно можно подождать ничего страшного Так ну Давайте ещё один Дак посмотрим у меня

относиться тут можно можно подождать ничего страшного Так ну Давайте ещё один Дак посмотрим у меня здесь есть Дак который Ну примерно что-то такое Вам тоже понадобится смотрите простой Дак я имр зде в общем-то ничего ничего нового У меня вот здесь вот не используется поэтому можно его удалить Что здесь происходит Я прямо вне Дага создаю папочку J дальше делаю переменную к То есть это моя рабочая директория и говорю что у меня есть такая Задачка функция Down F то есть вот смою вот такой вот

директория и говорю что у меня есть такая Задачка функция Down F то есть вот смою вот такой вот команды я с помою об и говорю что я хочу этот CSV файл скачать и поместить его вот в эту директорию то есть ну это обычный Кул мы когда кулом А ну когда был Я показывал там Отправить файл Ну в общем это аналог гм это тоже можно сделать и тоже там мину о будет означать куда и Под каким именем сохранить види Эва это Python оператор называется Python и здесь у меня задача одна поэтому она просто

види Эва это Python оператор называется Python и здесь у меня задача одна поэтому она просто выглядит как Да у меня нету ничего после этого данда если бы я захотел этот Файлик например открыть и убрать все пропуски Я бы здесь написал какую-нибудь ещё функцию и потом обернул бы е в Python оператор и дописал бы вот сюда в порядок исполнения мым Попро ме с J Давайте удалим эту папку Значит у меня здесь что должно происходить должна созда папка J и с помощью кла должен скачаться Файлик CSV давайте

что должно происходить должна созда папка J и с помощью кла должен скачаться Файлик CSV давайте мы перейдём в и в Да активные и у меня он называется Давайте зайдём в будет может быть больше может быть меньше каких-то красных точек квадратиков в смысле вот но фраза Total FA 6 и всего 11 Она говорит о том что в общем можно на это потратить некоторое время Давайте запустим этот Дак у меня он должен быть простой он стартанул там одна функция и вроде всё закон пото Да вот то есть на самом деле в В

быть простой он стартанул там одна функция и вроде всё закон пото Да вот то есть на самом деле в В смысле airflow не столько сложно вот эти писать потому что если вы понимаете эту последовательность вообще говоря Всё достаточно прозрачно да давайте обратимся в базу сохраним какую-нибудь выборку оттуда прогоним через там какой-нибудь ПН Пусть это даже будет неважно потом эти данные пост процессинг после пост процессинга мы как-то сохраним вот сюрпризы здесь будут подкладывать airflow но поверьте

после пост процессинга мы как-то сохраним вот сюрпризы здесь будут подкладывать airflow но поверьте если вам скажут что типа Слушай а ты можешь мне раз в неделю Вот делать Вот такую выборку и присылать её мне Ну наверное первые 2 недели или 3 недели раз в неделю вы что-то будете делать руками но потом гордость должна взыграть и вы зададите себе вопрос да программист Я чёрт возьми или кто вот кость а в ЧМ косячки в основном в синтаксисе самого Дага или в ЧМ Где ждать под са часты заключаются в

а в ЧМ косячки в основном в синтаксисе самого Дага или в ЧМ Где ждать под са часты заключаются в том что вот например Казалось бы да почему я здесь не использовал например вполне понятно да Мы скачиваем какую-то информацию можно было бы использовать а оказывается что например на маках почему-то не рабо что вы например ставите какой-то интервал исполнения но при этом у вас сама последовательность дагов она выглядит так что как будто бы вы в середине Ну там предположим У вас три задачи какие-то

дагов она выглядит так что как будто бы вы в середине Ну там предположим У вас три задачи какие-то есть вы в середине исполняете какую-то функцию чаще чем слева и справа и airflow не понимает что значит я здесь я сделал Тут я должен как дурачок покрутиться и потом перейти дальше Вот на тут вот у airflow на самом деле такой вот есть разные такие подходы к изучению Да что там можно Например я не знаю когда мы там нейронные сети изучали Да там в общем-то всё одно и тоже но у нас есть полносвязный

когда мы там нейронные сети изучали Да там в общем-то всё одно и тоже но у нас есть полносвязный слой свёрточные мы просто вот как бы по сторонам Смотрим Да и начинаем под наши какие-то задачи просто дёргать новые слои но содержательно всё остаётся тем же самым данные на вход тагет на выходе и поехали дальше вотже бы такой подход к изучению что давайте мы начнём прям с одного Python оператора Вот Потом мы возьмём и перейдём например от Python оператора добавим в него ещё какой-нибудь там

Вот Потом мы возьмём и перейдём например от Python оператора добавим в него ещё какой-нибудь там постгрес оператор после того как у нас пост оператор есть мы попробуем данные между двумя задачами передать именно как некоторый объект Это вам завтра предстоит делать сегодня это не нужно делать Вот и его нужно изучать очень аккуратно потому что у него свои представления Том устроены у нас по первому в голове могут быть совершенно другие представления Вот но чаще всего сложности заключаются в том

в голове могут быть совершенно другие представления Вот но чаще всего сложности заключаются в том что у ну не очень корректно заданы время задано время исполнения но у него естественно есть некоторые логи То есть если давайте мы какую-нибудь неудачную возьмём вот возьмём например провален какую-нибудь и зайдём в логи большая часть здесь абсолютно непонятна это airflow пишет для себя что что он делает и там какие-то непонятные штуки ну вот смотрите здесь есть вот такая штука видите Error Fail to

и там какие-то непонятные штуки ну вот смотрите здесь есть вот такая штука видите Error Fail to execute Job 149 это 149 нам ни о чём не говорит это как какой-то номер задачи внутри airflow но он говорит нам что BH Command failed Command Return in nonzero Exit CDE nonzero - это значит То что мы вышли с ошибкой он выкинул какую-то ошибку Но из этого мы хотя бы понимаем что это какой-то Баш команда значит это какой-то Баш оператор то есть не то чтобы там какой-то совершенно безнадёжная ошибка в

значит это какой-то Баш оператор то есть не то чтобы там какой-то совершенно безнадёжная ошибка в которой ничего невозможно понять но не очень бывает Понятно ну или вот например да Значит у меня должен быть какой-то файл CSV его нет нет пото папка с Дага точно есть Я в ней работаю Вот какие ещё бывают Ну наверное это не то чтобы ваша ошибка А некоторые проблемы в работе здесь сейчас короче много вот это рнв написано что типа не Используйте там в продакшене Используйте это одна из самых лёгких

вот это рнв написано что типа не Используйте там в продакшене Используйте это одна из самых лёгких баз данных для может исполь Это вас это не сегодня не завтра волновать не должно потому что предполагается что это вообще уже должно быть кем-то настроен нормально вы это делаете ради тренировки на что здесь надо смотреть вот если вы видите Вот в этих б Да название Дага с которым вы работаете Значит нужно сделать две вещи первая вещь - Это пару минут подождать может быть он ещё не подтянул

Значит нужно сделать две вещи первая вещь - Это пару минут подождать может быть он ещё не подтянул сохранённые изменения вторая веь вернуться обратно в Дак и смотреть в ЧМ может быть проблема если вот здесь появляется что есть какая-то ошибка проблема именно в синтаксисе не в том что он airflow попытался что-то сделать и у него не получилось а проблема в том что он этот Даг проанализировал и сразу понял что там ошибка второе Что бывает у вас может вот здесь вот возникнуть давайте я прямо это

понял что там ошибка второе Что бывает у вас может вот здесь вот возникнуть давайте я прямо это покажу мы напоминаю по сравнению Ну как бы по параллельно с самим веб-сервера запускали ещё и планировщик он у меня запущен вот здесь В отдельной консоли давайте мы попробуем этот планировщик просто убить нажимаем ctr планировщик означает что ваш планировщик отвалился Поэтому чтобы сколько бы вы здесь не обновляли сколько бы вы здесь не переходили по разным штукам вам нужно вернуться в консоль с

не обновляли сколько бы вы здесь не переходили по разным штукам вам нужно вернуться в консоль с планировщиком Скорее всего он будет с какой-то ошибкой или с чем-то ещё поэтому вы просто нажимаете вверх в консоли airf и всё теперь он запущен если мы сес видите пропало предупреждение о планировке значит Ну что здесь есть какие-то датасеты они тренировочные тоже для ну для обучения типа суету сети я сам никогда не настраивал и не было такой нужды Это тоже не вы будете делать Вот что тут ещё можно

сам никогда не настраивал и не было такой нужды Это тоже не вы будете делать Вот что тут ещё можно список всех дагов которые можно Кокше ко всему просто чему угодно psql mysql Microsoft SQL В общем тоже можно куда-то настроить без проблем вот ну и CL Activity - это типа такой дашборди который показывает вам какие статусы в общем Что упало что запущено и всё прочее Ну для нас по сути самое главное это вот э вот часть которую мы можем там разные разные туки Вот видите даже календарь есть вообще

это вот э вот часть которую мы можем там разные разные туки Вот видите даже календарь есть вообще довольно супер подобно кажется что там много подр для дашбордов всякой штуки У меня всё Давайте задание посмотрим первое задание установка второе задание значит простенький Да который повторяет то что у меня вмо Т второй Да который будет ска ирисами применять карновский скейлер К признакам и сохранять в файл Iris scaled дальше Дак который будет классифицировать и записывать confusion Matrix в

в файл Iris scaled дальше Дак который будет классифицировать и записывать confusion Matrix в results TXT и соответственно Дак который будет обращаться вот к этому Вот AP давайте мы посмотрим что оно работает Это dem AP Да оно возвращает нам пользователя рандомного типа пол имя фамилия там какие-то номера короче это всё автоматически генерируется это не существующие люди и нам вам нужно написать скрипт который будет Раз в час подключаться к этому AP и вот в такую вот табличку сохранять данные из

который будет Раз в час подключаться к этому AP и вот в такую вот табличку сохранять данные из того самого I результаты вам нужно поместить в папочку sxp 1 и сделать Pull request Прямо просто питонов ские файлы в эту папку запихивает их на гитхабе кость всё в один файл питанов ский можно сделать или разбить на разные А лучше разбить на разные здесь вот написано это Simple Dock будет это будет с это буде Ну тут это какой-нибудь classification dck и это там Regular D и users он долже называться

это буде Ну тут это какой-нибудь classification dck и это там Regular D и users он долже называться О'кей вопрос а в настоящей жизни это всё тоже естественно работает не локально А как там происходит если например отваливается планировщик airf самого перезапускает ну там обычно за этим следят специально обученные люди собственно по всяким а мониторингом штукам Вот но естественно если там планировщик например упал то автоматически сразу отсылается сигнал планировщик поднимается заново То есть

например упал то автоматически сразу отсылается сигнал планировщик поднимается заново То есть это моментально автоматически всё происходит Ну это девопс девопс не дают скучать Ну это как бы тут надо всегда всё равно всегда помнить что падает всё у всех всегда нет компании у которой бы не было какого-то крупного сбоя это нормально так вот устроено Чем более высокоуровневым мы тем больше количество проблем у нас может быть когда у вас между двумя домами прокинуть провод и вы разговариваете друг с

проблем у нас может быть когда у вас между двумя домами прокинуть провод и вы разговариваете друг с другом по телефону тоже всё супер надёжно вряд ли этот провод возьмёт и куда-нибудь улетит вверх или вниз он вас соединяет как только у вас инфраструктура становится сложнее она становится более тоньше и более уязвимые к каким-то непредвиденным штукам на любом этапе это нормально поэтому Когда у вас что-то падает когда что-то подтормаживает это часть инфраструктуры с этим ничего поделать нельзя

что-то падает когда что-то подтормаживает это часть инфраструктуры с этим ничего поделать нельзя вот поэтому тут лучше не паниковать Ну всё тогда жду пол реквест от вас до встречи Да спасибо спасибо спасибо

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

э ничего сложного нет ничего такого чтобы прямо ввело в ступор Сегодня мы посмотрим на то что такое apch суперсет завтра послезавтра у нас будет э apch airflow причём послезавтра будет очень лёгкое задание которое можно будет прямо выполнить буквально там за пару часов и в четверг будет ну такой проект на который мы обычно там не делим не на команды Ну если хотите объединяйтесь команда Если не хотите не объединяйтесь в котором нужно будет соединить три сущности собственно суперсет который будет

не объединяйтесь в котором нужно будет соединить три сущности собственно суперсет который будет сегодня airflow который будет завтра и постгрес который у нас тянется с прошлой недели вот нужно будет три этих компонента попытаться в одно объединить надо сказать что это не у всех получается но в целом Тут даже сам факт и какого-то количества времени потраченного вот на Ну бы использование всяких таких терминальных команд и всего остального это тоже довольно полезная штука Вот потому что я знаю

таких терминальных команд и всего остального это тоже довольно полезная штука Вот потому что я знаю что терминал многих пугает тем что не очень понятно как он устроен поэтому к нему нужно относим долж работать вот ну ладно Значит сегодня у нас суперсет значит что что это вообще такой Откуда это взялось пара слов надо сказать что шанс того что вы будете работать с суперсеты Это скорее зависит от того В какую сторону вы будете развиваться потому что суперсет конечно больше инструмент с которым

того В какую сторону вы будете развиваться потому что суперсет конечно больше инструмент с которым взаимодействуют аналитики вот при этом у него из-за того что он такой достаточно простой по своей идее как и многие другие подоб штуки у него есть возможность к большому количеству разных вещей его прикручивать в том числе вы буквально можете через суперсет следить за графиками например обучения моделей Это не самое мягко говоря профильная его предназначение но тем не менее возможности у суперсет

Это не самое мягко говоря профильная его предназначение но тем не менее возможности у суперсет за счёт того что он очень простой много и использовать его можно очень по-разному ну и мы так кратенько я расскажу о том что это вообще зале инструментов и потом мы посмотрим какие ключевые элементы есть в сусе и после виртуальная машина pog сут и собственно Погружение в сам сует значит сует относится к классу инструментов который называются B инструментами или Bus intelligence инструментами это

к классу инструментов который называются B инструментами или Bus intelligence инструментами это основной основной инструмент работы аналитиков потому что задача аналитиков как правило это собственно давать бизнесу в каком-то непрерывном режиме информацию на основе которой бизнес может принимать какие-то решения это может быть что угодно ежедневные отчёты еженедельные отчёты отслеживание каких-нибудь метрик в а тестировании или там в чём-то ещё вот То есть фактически все данные точнее любые

метрик в а тестировании или там в чём-то ещё вот То есть фактически все данные точнее любые данные на которые вы или которые ваша компания хранит можно тем или иным способом использовать в бизнесе если их можно использовать вне значит для этого нужен какой-то инструмент который будет визуализировать эти данные для специалистов которые занимаются бизнесом а не данными да то есть у вас может быть менеджер который ничерта не понимает что такое SQL там и какие-то ваши сложные технические названия

менеджер который ничерта не понимает что такое SQL там и какие-то ваши сложные технические названия ему нужен какой-то отчёт этот отчёт должен быть в каком-то графическом виде представлен в каком-то ещё виде и так далее а и за такое вот такую трансформацию данных из какого-то сырого представление в довольно часто графическое которая позволяет делать вывод не специалистам отвечают инструмент их в общем-то задача заключается в том чтобы подключаться там к каким-то источникам данных это там это

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

вот понять даже не понимая что у нас там в этой базе лежит эти инструменты умеют там генерировать всякие отчёты Да собственно вот эта B система мы сегодня будем находиться конкретно Вот вот здесь вот у нас будет какая-то база мы к этой базе будем подключаться Ну и дальше уже всё что угодно у нас будет браузер в качестве точки выхода да то есть мы будем взаимодействовать с результатами своей работы в браузере Вот Но так это могут быть естественно и мобильные приложения и всё что угодно то есть

в браузере Вот Но так это могут быть естественно и мобильные приложения и всё что угодно то есть Наша задача превратить сырые таблицы в какой-то в какое-то представление которое будет удобно для восприятия среди таких инструментов Ну наверно один из самых популярных это собственно Microsoft который является частью инфраструктуры микрофтальм инструмент это табло табло соответственно один из самых наверное Ну из тех которые я с Power один раз очень недолго работал [музыка] и ничего не могу про

наверное Ну из тех которые я с Power один раз очень недолго работал [музыка] и ничего не могу про него сказать прикольный один из самых удобных наверное и приятных инструментов для подобных задач но табло тоже сказал до свидания Поэтому мы вынуждены были от него отказаться вот а ну есть ещё реш естественно у Гугла есть своя штука есть своя штука у Яндекса если мне память не изменяет она называется Яндек Data Lens И самое главное что идея в общем-то у всех одна давайте мы подключимся к

называется Яндек Data Lens И самое главное что идея в общем-то у всех одна давайте мы подключимся к какому-нибудь источнику информации и попробуем с помощью SQL запросов либо визуального какого-то программирования попробуем представить наши данные в графическом виде А мы будем конкретно пользоваться суперсет Ну мы с прошлой недели находимся в инфраструктуре Ача В каком-то смысле Да у нас был и что-то связанное со спарко и всё такое и у apch есть собственно для вот построения вот такого Bi тоже

связанное со спарко и всё такое и у apch есть собственно для вот построения вот такого Bi тоже некоторый стек который может быть удобен А значит суперсет собственно значит среди задач суперсет - это в первую очередь построение визуальных представлений данных и Объединение этих визуальных представлений в то что называется дашборда у меня есть друг который в крупной фармкомпании в России работает и он нам 2 года короче когда он начинает объяснять Чем он занимается Мы обычно с друзьями говорим всё

он нам 2 года короче когда он начинает объяснять Чем он занимается Мы обычно с друзьями говорим всё понятно сейчас это на 2 часа непонятных объяснений потому что очень сложно сказать из-за того что ты действительно занимаешься очень многими специалисту бывает непонятно что ты пытаешься объяснить Вот и значит объединение вот этих вот визуальных элементов в так называемые дашборды Да если там В вакансиях вы может быть видели либо дашборды либо это называется ещё витрины данных иногда это

В вакансиях вы может быть видели либо дашборды либо это называется ещё витрины данных иногда это собственно оно и есть да мы берём некоторый процесс визуально представляем различные его аспекты и объединяем это в дашборд как правило дашборд он там может следить например за дневным чем-нибудь дневным чеком средним дневным количеством пользователей Ну и так далее и так далее и так далее суперсет удобен тем что он позволяет так как это веб приложение да то есть это сервер который запущен к нему

удобен тем что он позволяет так как это веб приложение да то есть это сервер который запущен к нему можно подключиться там по IP адресу Он позволяет работать совместно то есть условно говоря у вас может быть там 10 юзеров Да 10 аналитиков каждый из них делает какой-то сво свой дашборд один там какой-нибудь продуктовый аналитик другой отвечает за какую-нибудь там нагрузку на сервисы и всё такое а для того чтобы суперсет настроить конкретно для совместной работы нужно будет воспользоваться какой

для того чтобы суперсет настроить конкретно для совместной работы нужно будет воспользоваться какой инструкции более расширенной чем у нас Наша задача сегодня не командная работа а индивидуальная нужно понять Как его установить понять что в нём можно использовать и на этом всё а потому что если вы будете работать суперсет то скорее всего вам выдадут логин и пароль скажут вот по такому адресу висит сует вот Туда заходи и там работай вот в суете тоже можно планировать и соответственно задавать то

сует вот Туда заходи и там работай вот в суете тоже можно планировать и соответственно задавать то какие отчёты будут генерироваться до этого мы не дойдём но будет ясно сегодня когда вы зайдёте в суперсет что в общем-то это такая платформа для людей даже не очень технического склада Там как бы всё довольно дружелюбно Ну и есть ещё такое преимущество что суперсет ввиду того что оный он является более сложной версией чем свои его платные коллеги Вот то есть разобравшись в суперсет в целом потом

сложной версией чем свои его платные коллеги Вот то есть разобравшись в суперсет в целом потом вникнуть в Power Bi или табло это просто будет сказка и Рай по сравнению с тем что может иногда в какую ситуацию может ставить суперсет значит он по большому счёту является последним элементом в таком пайплайн обработки данных да то есть у нас может быть какой-то источник данных дальше завтра мы посмотрим что с этим источником данных можно делать мы завтра будем смотреть Как устроен airf но вкратце мы

что с этим источником данных можно делать мы завтра будем смотреть Как устроен airf но вкратце мы Обращаемся К какому-то источнику какие-то данные оттуда забираем для того чтобы дальше использовать их уже в каких-то визуализация получается что данные мы каким-то образом подготавливаем дальше Вот тут у меня на картинке написано что это bigquery но опять же это может быть всё что угодно пост bigquery ха неважно Это зависит от конкретной компании и после этого уже визуализирую то есть мы на самом

ха неважно Это зависит от конкретной компании и после этого уже визуализирую то есть мы на самом деле этот стек В каком-то смысле будем рассматривать вот с такой последовательности суперсет просто легче чем airflow airflow для понедельника может оказаться несколько шокирующим вот а и собственно после того как все данные предобработки там-то образом вот к этим данным Мы из сусе Обращаемся сразу к источнику данных может быть такое что у нас нету вот этой вот части например мы не Обращаемся Ну

к источнику данных может быть такое что у нас нету вот этой вот части например мы не Обращаемся Ну точнее как бы не складируют сформированные данные в какой-то отдельный источник мы можем говорить что вот у нас есть там какой-нибудь источник давайте мы к нему обратимся вот так вот с мечем данные и потом сразу их визуализирую то есть эти компоненты в зависимости от сложности вот этого пайплайн они могут Очень отличаться В некоторых случаях Просто берут пря подключают суперсет к базе в которую

могут Очень отличаться В некоторых случаях Просто берут пря подключают суперсет к базе в которую там складируют все данные о каких-нибудь продажах и всё это прекрасно работает то есть это не значит то что как же мы будем использовать суперсет если мы там например ещё не знаем шаг airflow Да очень просто мы его будем использовать то есть в этом нету какого-то непреодолимо железного барьера основные компоненты в суете это собственно SQL оболочка этого сусе в кото мы буде писать запросы к нашим

компоненты в суете это собственно SQL оболочка этого сусе в кото мы буде писать запросы к нашим данным это у нас график и это собственно дашборд значит интерфейс SQL оболочки достаточно такой уже наверное в каком-то смысле привычный у нас есть редактор кода У нас есть результаты наших запросов У нас есть перечень Ну точнее куда мы подключаемся мы сегодня это будем сами всё настраивать и у нас есть перечень таблиц в данных ну то есть это вот это это наша база данных а вот это перечень её

нас есть перечень таблиц в данных ну то есть это вот это это наша база данных а вот это перечень её табличек собственно здесь мы будем писать запросы эти запросы будут нам возвращать какие-то данные если эти данные удовлетворяют тому что мы хотим сделать мы эти данные можем Сохранить то есть мы их сохраняем просто как бы как отдельную такую сущность Это теперь не табличка в нашей базе данных и не просто какой-то запрос а прямо датасет который мы хотим сохранить суперсет ввиду того что он

и не просто какой-то запрос а прямо датасет который мы хотим сохранить суперсет ввиду того что он используется иногда как прослойка между базой и сохранить фа C То есть это ВС тот па которому вы тее ввиду Панса за спиной да давайте мы что-нибудь уже сохраним наконец C и напишем чтобы со всем остальным не мучиться Вот то есть это довольно такой простой и элементарный элементарное устройство этого SQ просто пишем Зато вот этот график это какой-то один экземпляр графического представления данных

SQ просто пишем Зато вот этот график это какой-то один экземпляр графического представления данных то есть здесь мы говорим что вот у нас есть какой-то источник источником может быть отдельная таблица или что намного чаще какой-то конкретный запрос то есть ну результат какого-то запроса к которому мы Обращаемся и конструируем график очень удобно Ну тут опять есть два типа людей Да очень удобно что здесь в общем-то для того чтобы Като график не нужно писать код вы будете тыкать хочу гистограмму

здесь в общем-то для того чтобы Като график не нужно писать код вы будете тыкать хочу гистограмму вот колонка вот здесь вот нарисуй мне гистограмм это то что обычно людей после мап восхищает то есть ну не надо писать как у тебя будут подписаны оси задавать как-то самому цвета что там хочу чтобы это был Сиреневый и так далее вот сго коде изю становится ясно что это либо сделать невозможно либо количество времени и усилий которые Вы вынуждены будете на это потратить просто не сопоставимы с тем

времени и усилий которые Вы вынуждены будете на это потратить просто не сопоставимы с тем того с тем результатом которого вы хотите добиться вот Я рекомендую Ну как бы за основу и за такою начальную работу брать те я не знаю цветовые схемы шрифты и всё остальное всё то что есть по умолчанию в суете там это довольно симпатично выглядит на мой проле Поэтому просто не думайте о том что там как-то можно что-то поменять потому что что-то там поменять очень легко а что-то поменять нужно лезть внутри

что-то поменять потому что что-то там поменять очень легко а что-то поменять нужно лезть внутри в CSS стили которые возвращают вам вот эти вот графики вот собственно вот этот график - это такая основная единица суперсеты да давайте мы возьмём какой-нибудь источник данных и построим по этому источнику данных какой-нибудь график и Объединение собственно вот этих вот графиков это и есть дашборд или витрина данных которая нам даёт понимание о каком-то внутреннем процессе то есть э мы берём

или витрина данных которая нам даёт понимание о каком-то внутреннем процессе то есть э мы берём несколько графиков эти несколько графиков объединяются в дашборд и по этому дашборд мы можем там э понять А что-нибудь да ну здесь у нас вот какая-то бизнес там э прибыль вовлечённость Да мы можем увидеть Из каких стран мы можем увидеть Какое количество у нас аккаунтов соотношение там э типа по размеру компании значит какой-то ещ здесь график Вот и собственно такой вот такое представление это то что

компании значит какой-то ещ здесь график Вот и собственно такой вот такое представление это то что очень часто используется для такого непрерывного и быстрого анализа данных для принятия какого-нибудь решения ну и соответственно генерация отчётов Да нас могут просить сделать дашборд который будет описывать Вот то то то за месяц Что произошло с нашим сервисам за месяц там с какой-нибудь точки зрения Вот и вотр финальной такой точкой работы да то есть после того это дашборд сделан мы отдам его

Вот и вотр финальной такой точкой работы да то есть после того это дашборд сделан мы отдам его тем пользователям тем заказчикам которые будут его принимать во внимание и на этом наша работа будет закончена но Понятное дело что как бы мы видим вот здесь вот какие-то четыре Да не самых сложных для восприятия графика но надо понимать что за этим может и будет скоре всего какойто нетривиальный что естествено эти графики они получаются не из воздуха мы сами должны написать запрос который сформирует

эти графики они получаются не из воздуха мы сами должны написать запрос который сформирует ту тот датасет Да из которого будет построен такой вот график значит почему мы собственно будем работать с суперм суперм мы будем работать потому что он тоже имеет возможность подключения к различным иним Дан из ля туда можно закидывать CSV работать с CSV подключаться Google sheets Google sheets очень многие используют для хранения данных ну то есть когда когда вы ещё не настолько большие чтобы вам нужен

используют для хранения данных ну то есть когда когда вы ещё не настолько большие чтобы вам нужен был постгрес но уже и не настолько маленькие чтобы хранить всё это все с файлах локально А вот и большое преимущество суперсет в том что он является открытым программным обеспечением то есть на на основе него даже можно Ну его можно абсолютно бесплатно скачивать использовать и освоив его всё остальное покажется уже более лёгким для использования а более лёгким но при этом с более широким спектром

покажется уже более лёгким для использования а более лёгким но при этом с более широким спектром возможностей но там как бы и цены соответствующие у всяких Power биев и прочих его собратьев А ну по теории это собственно Всё может вопросы какие-нибудь есть Окей тогда отправляемся настраивать Так а что нам здесь нужно Ну у меня тут я уже открыл создание нового сервера ээ что мне здесь я выберу 24 на всякий случай или хотя нет ДТИ мне сегодня хватит 22 процессора 20 ГБ оперативной памяти а

24 на всякий случай или хотя нет ДТИ мне сегодня хватит 22 процессора 20 ГБ оперативной памяти а побольше возьму места для локального хранилище потому что сегодня мне нужно будет запустить два докер контейнера в каждом из которых будет постс и в другом будет суперсет Вот так как докер контейнеры вот Серёжа знает что они могут весить довольно много мы перестрахуйся Мне кажется что вот такого такого соотношения должно быть достаточно всё остальное я не меняю собственно вс всё то же самое у меня

соотношения должно быть достаточно всё остальное я не меняю собственно вс всё то же самое у меня здесь и остаётся создаём сервис и пока там всё создаётся Давайте перейдём вот я э [музыка] только недавно обновил смотрите значит здесь У вас есть ссылка установка настройка контейнеров и у меня э ссылка ведёт на вот такое представление инструкции более человеческое А у вас эта ссылка будет вести вот на такое представление это одно и тоже просто вплоть до там всех всех команд но чтобы к нормальному

на такое представление это одно и тоже просто вплоть до там всех всех команд но чтобы к нормальному представлению вернуться Найдите у себя в папке вот 13ка и pog Super файл называется вот здесь вот просто более удобная инструкция на самом деле по сути вся эта инструкция - это просто SH файл который должен запускаться вот как скрипт просто мы берём его запускаем нас всё автоматически поднимается он здесь специально разбит по шагам чтобы просто некоторые комментарии я мог по ходу дела давать вот

здесь специально разбит по шагам чтобы просто некоторые комментарии я мог по ходу дела давать вот поэтому сегодня когда будете устанавливать pog suet то MD Тринадцатая неделя и папка A у нас запустился запустился виртуальный виртуальная машина поднялась Давайте скору и соответственно перейдём Так это что-то у меня тут осталось Давайте перейдём и подключимся к ней значит всё как обычно соглашаемся пароль пароль пароль я его где-то скопировал Да вот пароль отлично Т мы находимся меня виртуальная

пароль пароль пароль я его где-то скопировал Да вот пароль отлично Т мы находимся меня виртуальная машина называется S из-под пользователя Root я работал и первое что нам нужно сделать - это установить докер потому что по умолчанию этого Докера на виртуальной машине нет эта процедура достаточно Зануды брусе делаем такие занудные инструкции это так принято делать каждый шаг с кнопочкой копия А ну собственно что докер докер и докер надо просто подождать там кстати говоря если я сегодня вам вышлю

собственно что докер докер и докер надо просто подождать там кстати говоря если я сегодня вам вышлю промокоды на sel там их тоже можно применить И вам даст по-моему 3.000 3.000 руб на работу Поэтому если Если будут какие-то вопросы типа с тем как развернуть Если будут ошибки или что-то такое Как развернуть там доке на Яндекс то можете перейти на и всё будет окей потому что я вот только что прям всё это сделал так у нас последний шаг сейчас будет нам нужно проверить что докер запущен докер есть

это сделал так у нас последний шаг сейчас будет нам нужно проверить что докер запущен докер есть значит это та же самая команда если помните мы постгрес так проверяли только вместо Докера был постгрес тем у кого тот кто будет работать на Яндекс клауде то вам нужен будет Вот здесь второй пункт вам ещё нужно будет второй пункт из инструкции установить То есть я вот здесь пробежался и выполнил только степ о а Вам нужно будет дойти до степ 2 и тоже на всякий не на всякий случай а его выполнить

степ о а Вам нужно будет дойти до степ 2 и тоже на всякий не на всякий случай а его выполнить потому что вы работаете из под пользователя Вот то есть второй шаг тоже прямо копируем и делаем если лень можно просто перейти на selectel Значит первое что нам нужно сделать у нас и постгрес и сует будут расположены в докер контейнерах поэтому первое что нам нужно сделать - это собственно создать сеть в которую эти два контейнера будут объединены это сеть - это фактически внутренняя докер сеть то есть

которую эти два контейнера будут объединены это сеть - это фактически внутренняя докер сеть то есть мы можем несколько контейнеров на одной машине запускать и внутри Докера чтобы как бы не ходить в обход внутри Докера они будут между собой связаны меня название этого этой сети будет upnet создаётся Элементарно do Network Create upnet создаём у нас будет выведено Вот такой вот там какой-то хэш или я не знаю что это такое дальше нам нужно будет создать Vol для поса значит Vol - это такая как бы

я не знаю что это такое дальше нам нужно будет создать Vol для поса значит Vol - это такая как бы как будто виртуальный диск который будет подсоединён к нашему контейнеру мы можем это сделать с помощью do и название Нашего Нашего Во мы сейчас название вот этого как бы хранилища даровского будем указывать при поднятии пост контейнер пост сегодня будем использовать не так как использовали На прошлой недели а будем его дёргать прямо с Доха что в этой команде происходит давайте пока он Мы хотим

недели а будем его дёргать прямо с Доха что в этой команде происходит давайте пока он Мы хотим запустить с помощью Докера и мину D - это значит после запуска как бы освободить консоль чтобы она не в докере была а у нас просто вот как обычная значит доке Run - D дальше называем имя контейнера постс 1 ми E - это первое переменное окружение то есть мы говорим что мы должны в этом контейнере задать имя пользователя постс пос имя пользователя может быть любым Но просто по умолчанию Оно обычно пост

имя пользователя постс пос имя пользователя может быть любым Но просто по умолчанию Оно обычно пост потому что мы первые пользователи этого контейнера вторая переменная минус е - это ну типа environ то есть переменное окружение вторая переменная - это пароль этот пароль тоже может быть любым но нам его обязательно надо запомнить потому что мы будем подключаться с помощью постс 1 3 к этому Ну как бы к этому контейнеру третья переменная нам при инициализации контейнера Нужно обязательно создать

бы к этому контейнеру третья переменная нам при инициализации контейнера Нужно обязательно создать какую-то базу данных мы говорим что э база данных у нас будет Test на самом деле мы ниже возьмём Ту самую базу данных демо и туда доки но просто при инициализации пост нам надо задать какую-то базу поэтому мы говорим пусть она называется СТ она всё равно пустая она не Занимает место и так далее и дальше мы говорим мину V это мы говорим что этот будет по адресу ничего не напоминает этот адрес на

дальше мы говорим мину V это мы говорим что этот будет по адресу ничего не напоминает этот адрес на прошлой неделе мы собственно по этому адресу и скидывали файл с базой данных чтобы его чтобы её видел постс Вот то есть мы сказали фактически что как бы вот это вот наименование вома оно у нас будет просто соответствовать этому пути Ну и по 15 на прошлой неделе у нас было 16 но ниче нам не ограничивает в использовании там на одну версию старше ничего страшного Окей значит после того как я здесь

в использовании там на одну версию старше ничего страшного Окей значит после того как я здесь вызвал команду доке Run он нам сказал что в докере локально он не нашл никакого образа постгрес если он не находит его локально он отправляется на dockerhub и начинает его скачивать есть у Докера такая логика если япишу какой-то мне контейнер он сначала анализирует локальное хранилище если ничего не находит идёт на dockerhub и скачивает если это там есть либо говорит на докер хабе тоже нет я не понимаю

идёт на dockerhub и скачивает если это там есть либо говорит на докер хабе тоже нет я не понимаю что ты хочешь от меня чтобы я запустил вот делает он переход с локального поиска на dockerhub автоматически Отлично Теперь нам нужно запустить контейнер суперсеты значит запускаем А значит что у нас вот здесь происходит Давайте тут посмотрим здесь у нас происходит следующее до мину означает что когда я точнее когда и если я этот контейнер остановлю он автоматически у меня удалится вот этот ключ м он

точнее когда и если я этот контейнер остановлю он автоматически у меня удалится вот этот ключ м он помогает отлаживать контейнеры Когда вы например запускаете контейнер вы его что-нибудь в м работаете понимаете что-то надо исправить Если вы его останавливает остановленный контейнер и если вы при запуске добавляете вот это вот мину он при остановки сам удаляется Вы бы могли это делать вручную каждый раз сами контейнер остановили Чтобы исправить какую-то ошибку исправили Заново там собрали идж

раз сами контейнер остановили Чтобы исправить какую-то ошибку исправили Заново там собрали идж запустили у вас он как бы запустился ещё один а если мы пишем м у нас старый удаляется остановке экономию команду в командной ке освободить консоль чтобы мы могли дальше работать пор Это означает что у нас будет Мы будем заходить по порту 8080 а внутри контейнера суперсет будет работать на порту 8088 То есть как бы мы придём Вот по этому порту и докер перекинется контейнер он будет использовать вот

То есть как бы мы придём Вот по этому порту и докер перекинется контейнер он будет использовать вот этот вот ключ значит минус е - это сгенерировать секретный ключ собственно тут можно вообще всё без изменений оставить он при запуске первом его сгенерирует этого нам достаточно больше мы с этим не столкнётся локально поэтому я пошл делать пул с дорба и тоже всё он нам здесь СПУ Теперь нужно запустить суперсет и настроить в отличие от постгрес суперсет Нужно настраивать в несколько этапов теперь

суперсет и настроить в отличие от постгрес суперсет Нужно настраивать в несколько этапов теперь что у нас есть вот в этой команде давайте я её сначала скопирую запущу пока она будет выполня и расскажу что в ней значит что происходит здесь для того чтобы суперсет запустился Нам его нужно инициализировать здесь происходит следующее docker EX означает что я хочу выполнить какое-то количество команд в В контейнере в самом то есть Dock EX - it говорит что Выполни в интерактивном режиме команды в

в В контейнере в самом то есть Dock EX - it говорит что Выполни в интерактивном режиме команды в контейнере су и эти команды у меня здесь на самом деле просто перечислены то есть вот начиная с когда докер вот это вот выполняет он как бы заходит в командную строку внутри контейнера и говорит что это команда которой Мне нужно создать администратора Я говорю что у администратора будет имя пользователя админ First name Last name можете задать самостоятельно Если хотите это просто обязательные поля

админ First name Last name можете задать самостоятельно Если хотите это просто обязательные поля То есть это требование суета не моё First name Last name mail это обязательные поля и пароль мне отсюда Нужно запомнить только вот эти вот две строки пароль может быть любым рй Обычно по соглашению всегда первого создают под ником админ Ну мы первые люди которые туда зашли очевидно что мы администраторы а не кто-то ещё А у меня всё это запущено и Да тут надо понимать что это как бы взято из

а не кто-то ещё А у меня всё это запущено и Да тут надо понимать что это как бы взято из инструкции установки суперсеты Это не я с закрытыми глазами печатал проверяя себя на знани запуска я зашёл в инструкцию и взял оттуда эту последовательность я её выполнил Здесь вроде как всё поднялось то есть всё А всё распознано админ User Create всё О'кей хорошо следующий Шаг в суперсет - это инициализация внутренней базы данных потому что суперсет хранит в себе сохранённые запросы файлы там дасе дашборды

базы данных потому что суперсет хранит в себе сохранённые запросы файлы там дасе дашборды и всё такое это происходит всё внутри аэ в ба с внутренней базой данных мы говорим что мы хотим эту базу данных типа обновить И после этого запускаем сам суперсет это тоже часть инструкции Если вы зайдёте на сайт суета Там будет написано ровно то же самое просто э комментарии будут даны на английском языке сейчас происходит как бы момент инициализации базы данных а теперь мы говорим что мы хотим зайти в

сейчас происходит как бы момент инициализации базы данных а теперь мы говорим что мы хотим зайти в контейнер сует и набрать там команду Сус init Что означает стартуй мне стартани мне сервис сусе Ну кажется что кажется что всё О'кей это какое-то время занимает всё А что произошло только что мы запустили два контейнера в одном из которых крутится пос в другом крутится суперсет Я не помню по-моему называется Dock PS Да Dock PS команда посмотреть какие контейнеры У меня есть у меня есть контейнер

называется Dock PS Да Dock PS команда посмотреть какие контейнеры У меня есть у меня есть контейнер ID у меня есть ид один ид - это AP Super второй и pog 15 внутри это какие-то команды которые запускали эти контейнеры чтобы сервисы внутри старта Мы видим что это у нас прокинуть порты То есть если кто-то придёт на виртуальную машину по такому адресу он переадресувати контейнеров сут pog Ну а здесь 5432 как вы помните это адреса которые закреплены за пост плюсом эти контейнеры сейчас крутятся

5432 как вы помните это адреса которые закреплены за пост плюсом эти контейнеры сейчас крутятся Независимо друг от друга то есть мы э они не связаны никак между собой но Мы помним что у нас есть сеть которая может объединять несколько контейнеров чтобы в эту сеть добавить эти контейнеры мы можем выполнить вот такие вот команды они на самом деле очень простые доке Network но у нас было Create upn А сейчас мы скажем Connect присоедини мне в сеть upnet по о контейнер это собственно Вот его

upn А сейчас мы скажем Connect присоедини мне в сеть upnet по о контейнер это собственно Вот его название оно здесь вы у меня зам отлично И сейчас мы их соединили в одну в один в одну сеть Мы можем написать такую команду она у меня ниже там в инструкции Дана Давайте её посмотрим прям точно чтобы она до ива такую штуку она нам на самом деле ещё дальше понадобится и что мы здесь можем увидем мы можем увидеть что у нас есть какая-то сеть upnet у неё есть идентификатор В общем всякая лабуда которая

увидеть что у нас есть какая-то сеть upnet у неё есть идентификатор В общем всякая лабуда которая касается того что это за сеть нас больше всего интересует то что в этой сети есть какие контейнеры здесь есть здесь есть специальный ключ containers и мы видим что первый контейнер - это суперсет второй контейнер - это постс То есть сейчас эти два контейнера в одной сети идём дальше следующий шаг нам нужно стянуть базу данных демо и закинуть её в контейнер с пост здесь у меня представлено два

нам нужно стянуть базу данных демо и закинуть её в контейнер с пост здесь у меня представлено два варианта как это можно сделать есть очень быстрый способ я покажу Чуть более подробный способ чтобы было понятно что происходит смотрите первое как мы делали На прошлой неделе Мы заходили на виртуальную машину скачивали это архив устанавливали БФА добавляли его в базу вот сечас мы сделаем Тоже самое я пишу в интерактивном режиме зайти в контейнер по 1 и запустить там Баш то есть вот эта команда do

я пишу в интерактивном режиме зайти в контейнер по 1 и запустить там Баш то есть вот эта команда do в интерактивном режиме зайти в по вызвать там ш с каким-то идентификатором Ну давай давай отлично чтобы было красиво я сейчас нахожусь прямо в контейнере То есть у меня вот как бы я через два уровня Прошёл первый уровень подключения у меня это виртуальная машина вне есть контейнер я захожу в контейнер делаю простую вещь первое перехожу по [музыка] адресу Дальше я должен установить свои для того

делаю простую вещь первое перехожу по [музыка] адресу Дальше я должен установить свои для того чтобы иметь возможность скачать сейчас он это всё он пока обновляет сейчас будет устанавливать То есть это всё происходит то же самое что на прошлой неделе мы делали Просто в виртуальной машине вызываем vget и enzip сейчас должна скачаться и распаковать база проверяем dem и Medium SQL есть отлично После этого мне нужно залогиниться под пользователем постс на прошлой неделе мы это тоже делали отлично

этого мне нужно залогиниться под пользователем постс на прошлой неделе мы это тоже делали отлично появился пользователь pog теперь пишем psql - F добавить нашу базу данных Файлик dem Medium 2017 Вот это 0815 SQL ми U по То есть я сейчас вот эту вот команду с инструкции запускаем знакомая распаковка базы данных в пос и проверим сейчас прямо сразу подключение после того как это произойдёт может вопросы какие-нибудь есть пока тут процедура кость да с прошлой недели остался вопрос а запускал

вопросы какие-нибудь есть пока тут процедура кость да с прошлой недели остался вопрос а запускал контейнер на не контейнер просто запускали виртуальную машину сервер на ней после работы я его остановил Ну там интерфейсе но он продолжал вписывать Бабки там каждый день получается что нужно сделать чтобы это не происходило там ещё есть возможность его заморозить Да возможность заморозить есть я честно говоря не знаю снимаются там деньги или не снимаются в этот момент наверное какие-то минимальные

говоря не знаю снимаются там деньги или не снимаются в этот момент наверное какие-то минимальные снимаются когда ты его просто останавливаешься Теда что контейнер заморожен Но ты же место аренду сре поэтому он остатся вот помоему заморозка более эффективна чем Ну в плане меньше денег е чем остановка Я честно говоря Не берусь сказать насколько ла если не хоче чтобы снимались деньги удалить [музыка] каким-то я файлом в котором прописывал всё вот это это всё можно также через типа терминал просто

каким-то я файлом в котором прописывал всё вот это это всё можно также через типа терминал просто прописать такую сеть закинуть это Аналогично Да там у тебя do comp он как бы по сути объединяет вот то что мы сейчас делаем ты можешь до композе сказать что ты хочешь сеть там upnet да у тебя до возьмёт сеть названия которое ты в композе указал допит к ней N и возьмёт эту сеть То есть это будет тоже самое ти те же самые докер инструкции кото это просто объединение вот всех этих последовательно

самое ти те же самые докер инструкции кото это просто объединение вот всех этих последовательно команд во что-то одно Вот Но как правило это делают уже после того как точно известно Какие внутренние переменные Как называется сеть в общем всё вот это то есть ко это прям самый последний уровень ча это приходится делать руками потому что ну ти ты один раз запускаете просто потому что ты больше не будешь это запускать но иногда те кто ру онис Да они естественно все эти комз пишут левой пят вот а

будешь это запускать но иногда те кто ру онис Да они естественно все эти комз пишут левой пят вот а так это тоже самое Так у нас разархивировать база данных пробуем запускаем psq мимо мину должна быть большая отлично база данных демо внутри Всё круто значит СШ Q и собственно нене не не так га точнее Вот так Exit Всё теперь нужно прокинуть как обычно наши порты значит эту штуку я копируем переходим во внутреннюю консоль во внутреннюю консоль локальную нашей машины не в Докера не на виртуальную

во внутреннюю консоль во внутреннюю консоль локальную нашей машины не в Докера не на виртуальную машину и пишем Root И какой-то у меня там был далеко как как далеко Вот мой IP адрес и сейчас ещё также далеко будет пароль Ладно пароль мы возьмём селектел так Заходим в selectel консоль и копируем пароль отлично будто бы всё сработало Так ну переходим туда куда нас просят отлично р - это суперсет этот суперсет запущен на виртуальной машине более того он в докер контейнере крутится и какой мы там

суперсет запущен на виртуальной машине более того он в докер контейнере крутится и какой мы там юзернейм задавали давайте это можно прямо здесь посмотреть рй админ пароль админ у вас сегодня последний день когда вы сда пароль Амина также как звёздочка в посте открылся суперсет Но нам нужно ещ сделать вторую штуку нам нужно собственно добавить Откуда мы будем забирать наши данные здесь по умолчанию есть Connect Database и Connect Google sheets Нам нужен Connect Database остальное там нужно

есть Connect Database и Connect Google sheets Нам нужен Connect Database остальное там нужно разрешать в настройках потому что соответственно если у вас какие-то пользователи имеют возможность загружать какие-то файлы это не всегда может быть безопасно да то есть если вы находитесь там в какой-то подключаетесь к какой-то базе ну он там селекты наделает ничего страшного не будет А вот если вам файлы может загружать это уже некоторая ээ Ну условная угроза поэтому мы подключаемся к Database

файлы может загружать это уже некоторая ээ Ну условная угроза поэтому мы подключаемся к Database выбираем здесь здесь видите их несколько есть выбираем постгрес забираем наш аэ адрес это айпишник моей виртуальной машины пор 5432 [музыка] Ну ладно будем по мере поступления проблем Может может он пока не понимает что я от него хочу US возвращаемся в запуск контейнера по это будет по и может быть какой-то другой Display name Ну давайте на нажмём ava и попробуем подключиться непонятно почему Port

другой Display name Ну давайте на нажмём ava и попробуем подключиться непонятно почему Port closed Да пор действительно Check your Connection settings Сейчас будем разбираться что там не так какой-то какой-то пор cled так [музыка] серверы Может быть я забыл какую-то команду там ввести Хотя вроде не похоже так здесь 87 228 1728 здесь [музыка] Окей так отлично Ну значит глим су cled как будто я здесь уже когда-то был так Inter А ну да надо же наверно инструкцию до конца дочитать Для начала да

здесь уже когда-то был так Inter А ну да надо же наверно инструкцию до конца дочитать Для начала да смотрите значит что сейчас произошло я решил подключиться к посту использую виртуальную машину номы помним что для того чтобы туда под со своего компа к постгрес в Облаке Мне нужно во-первых там задать в конфигах Listen addresses вот это вот всё но сейчас-то я подключаюсь туда из суперсет А суперсет с постгрес сом у меня объединены в одну сеть поэтому я захожу в тот самый Э доке inspect так lout

с постгрес сом у меня объединены в одну сеть поэтому я захожу в тот самый Э доке inspect так lout так как-то там надо как там надо выйти Окей давайте докер докер Exit О класс Ctrl C можно было и догадаться но не работает Да я сейчас нахожусь в контейнере и примерно как из вима не понимаю как оттуда выйти Ctrl p q [музыка] Окей не работает кто знает как из докер контейнера выйти я не знаю почему ему все пишут Как зайти туда в докер контейнер десь мне Google сказал Ctrl D но не факт Угу не может

все пишут Как зайти туда в докер контейнер десь мне Google сказал Ctrl D но не факт Угу не может быть там просто выходы типа есть разных видов я вот Ctrl C попробовал а там ещё Ой я случайно закрыл неудобно вышло Короче говоря я я вышел Просто закрыв терминал поэтому не ну своего рода Это только подход Ну окей так Пароль Ну вот сейчас надо только ещё посмотреть что всё работает всё работает Ну Вот вы заодно узнали Как можно выйти из докер контейнера просто выходишь из терминала и вс отлично

Вот вы заодно узнали Как можно выйти из докер контейнера просто выходишь из терминала и вс отлично точнее и вмн об из суета в постс поэтому когда мой суперсет обращается в постгрес он должен обращаться к нему ровно Вот по этому адресу то есть это внутренний адрес сети когда я сейчас долбил с помощью виртуальной машины Ну по адресу виртуальной машины естественно порт там закрыт был потому что я его и не настраивал чтобы он слушал внешне подключения он должен у [музыка] меня коем этот адрес ещ

его и не настраивал чтобы он слушал внешне подключения он должен у [музыка] меня коем этот адрес ещ раз это доке ИКТ моя сеть копируем адрес возвращаемся в суперсет Ну давай обновись или может быть ты просто не очень умный Да ну видите суперсет не очень умный поэтому поэтому не так Con FA там же по-моему пор 16 или нет Сейчас посмотрим н по идее аспекте не это вот это это не порт это короче подсеть но вам вам это не нужно А зачем я скопировал у меня там 02 02 И где это так 543 5432 и 172 1802

но вам вам это не нужно А зачем я скопировал у меня там 02 02 И где это так 543 5432 и 172 1802 Давайте зайдём ГС 1 не Можно конечно с под сетью ему указать мне кажется что это не совсем правильно Деп Окей давайте прямо так попробуем ещё раз что там какой-то пропустил пунктик Да нет вроде всё особенно здесь Я подозреваю что суперсет Ну да Понятно А ещё раз прокиды воем порт Возможно мы отвалились окей да после отличного Как сказать грациозно выхода из докер контейнера путём убивания терминал У

окей да после отличного Как сказать грациозно выхода из докер контейнера путём убивания терминал У меня просто отвалилось подключение забираем вот эту штуку ещё раз пробуем 5432 демо пог 1 2 3 ну параметры дополнительные мне не нужны ой-ой-ой Какой кошмар всё подключилось вот так вот это полезно будет вам всякие ошибочка в подключении Но если вы будете по-человечески выходить из докер контейнера Я думаю что этого не должно возникнуть Ну что-то он как-то долго подключается Ате с во ко Ну на

Я думаю что этого не должно возникнуть Ну что-то он как-то долго подключается Ате с во ко Ну на коммерческих проектах он используется Да ну то есть ну это прямо промышленный инструмент да Угу О'кей я поняла Просто я сталкивалась Ну точнее не сталкивалась А в основном читала про то что ты раньше упоминала про Power B и Microsoft А эту штуку Ну да Ну они просто стоят очень дорого как бы не каждая компания себе позволить может Поэтому нет Ну да это понятно но тут конечно с настройкой тоже придётся

себе позволить может Поэтому нет Ну да это понятно но тут конечно с настройкой тоже придётся повозиться ну вам-то Это для тренировки вот ну и в целом на самом деле если бы я вот эту вот инструкцию пробежался просто копируя это заняло бы у меня минут 6 наверное то есть ничего особенного нет то что я вот затупил и не вышел из Докера ну как бы это исключительно моя проблема вот дава это моё имя booking это собственно та та самая содержимое мое база Ну и Давайте возьмём не знаю какой-нибудь flights

это собственно та та самая содержимое мое база Ну и Давайте возьмём не знаю какой-нибудь flights V что Что здесь может Давайте прямо в SQL сразу пойдём SQL Lab Ну конечно здесь так названо SQL Lab будто это что-то прямо такое это поле для ввода SQL запроса и выбора таблички не то чтобы прям какая-то лаборатория Так что у нас в табличке RS таблички RS У нас вот такая вот штука Давайте попробуем отсюда достать пары городов отправления и городов прибытия например значит Select ure Cal тоже си Нам

достать пары городов отправления и городов прибытия например значит Select ure Cal тоже си Нам [музыка] нужен City From RS Окей Ну предположим что вот есть у нас вот такой вот запрос Давайте его сохраним ко Да это будет просто expl у нас он перекидывает там куда-то и у нас открывается вот такой вот конструктор значит в этом конструк в конструкторе можно как бы что-то погру можно что-то пороть ВМ пря Когда вы какую-то выборку взяли и начали в ней копаться здесь вот у нас всего две колонки Ну

ВМ пря Когда вы какую-то выборку взяли и начали в ней копаться здесь вот у нас всего две колонки Ну соответственно здесь можно добавить ещё колонки если бы они у нас в целом были Я сейчас взял конкретно датасет из двух колонок Вот и всякие здесь можно что-то погреть и всё прочее прочее прочее мы можем Что сделать давайте мы попробуем создать новый график график я возьму сразу может быть не самый тривиальный это график он по-моему у нас Flow называется Ну да вот диаграмма хорда или можно СН Так

тривиальный это график он по-моему у нас Flow называется Ну да вот диаграмма хорда или можно СН Так у меня пол экрана занято значит нажимаем dataset после того как выбрали диаграмму вызываем схема у нас booking и что здесь датасет нельзя что ли добавить Почему почему у меня нет датасета Ну ладно давай Давайте добавим сюда табличку та самая табличка опять Ну окей я довольно упорный поэтому Всё у нас booking Roads табличка берм колонки Rival City это у нас будет вторая departure City интересно он

booking Roads табличка берм колонки Rival City это у нас будет вторая departure City интересно он такие умеет строить знаете да сценки диаграммы типа кто откуда перет или нет Вот так вот они выглядят типа видите они в общем некоторый переход откуда-то куда-то визуализирует Вот мы сейчас посмотрим Умеет ли Умеет ли суперсет строить это как бы как перелёты То есть откуда Так ну фактически Мы хотим посмотреть Какое количество из одного города по каким другим городам летала в нашем датасете дава

посмотреть Какое количество из одного города по каким другим городам летала в нашем датасете дава бакан Архангельск что надо-то непонятно ри какое-то я дерево должен ему дать Ну кстати я у каждой группы пробую построить Вот это ценки у меня никогда не получается Короче ладно ещё раз я опозорился [музыка] тьм тогда FL она [музыка] есть и выбирать будем работать с ней dats возьмём CS и Create New Chart Так откуда едем едем из departure City в таргете у нас RAL [музыка] City Отлично откуда куда и

Так откуда едем едем из departure City в таргете у нас RAL [музыка] City Отлично откуда куда и Метрика Ну у нас Метрика простая coun будем использовать её можно свою написать если хотите То есть тут как бы не не устраивает встроенная возможность пожалуйста переходим сюда пишем прямо свою часть фактически что вот это всё такое это на самом деле конструктор запроса визуальный То есть вы добавляете метрику он делает каут вы добавляете условия он дописывает Where Ничего здесь нет Э такого давайте

метрику он делает каут вы добавляете условия он дописывает Where Ничего здесь нет Э такого давайте сделаем поменьше например 100 Я сказал 100 фантастика Хорошо пусть будет 500 и создаём Ну вот такой конечно не сильно красиво Вот Но мы здесь можем увидеть наводим курсор из Москвы в Тюмень у нас дев рейсов наводим сюда Это у нас санкт-петербург наводим сюда Это из Новосибирска в том числе в Москву Короче говоря вот такой вот такой вот способ отображения естественно здесь можно было бы там каунт

Короче говоря вот такой вот такой вот способ отображения естественно здесь можно было бы там каунт отфильтровать так чтобы он показывал ему только там где больше десяти например рейсов потому что здесь есть всякие штуки где у нас там из Новокузнецка 10 рейсов 10 разных городов и это просто ниточки такие вот собственно Вот такой Вот чарт если мы хотим не знаю что-нибудь Здесь поменять Я не знаю здесь например сделали 10 Да мы можем нажать видите тогда он нам строит вот такие вот штуки и тут

здесь например сделали 10 Да мы можем нажать видите тогда он нам строит вот такие вот штуки и тут фактически что это такое Это видимо топ-1 городов Ну как-то можно это так написать топ-1 городов куда вот можно улететь там из между Москвой и остальными городами Хотя напрямую то что между Москвой это не очень видно Скорее это вот по количеству парных перев внутри конст SQL запрос и всё то есть вот этот график - это результат подставления SQL запроса в движок суперсеты который умеет рисовать

вот этот график - это результат подставления SQL запроса в движок суперсеты который умеет рисовать графики которые мы ему а Скажем мы можем этот график сохранить сказать ему что это как он там называется for for C и добавить какой-нибудь дашборд Давайте мы его пока просто сохраним просто скажем Save и перейдём врд намм дашборд и попробуем сюда какой-нибудь график добавить Значит у меня есть добавляем пожалуйста Он у нас появляется вот в таком в такой вот области он в принципе са довольно

добавляем пожалуйста Он у нас появляется вот в таком в такой вот области он в принципе са довольно неплохо размеры подбирает но иногда здесь нужно там его сделать поменьше побольше и так даде вот так вот перетаскивая сформировать из них дашборд вот а ну что ещё Что ещё ну здесь просто особенно показать больше нечего видите здесь четыре пункта меню типа дашборды графики SQL и датс сохранённые сохранённые дасе просто такие как бы наборы данных которые побыстрее будут использоваться э ну за счёт

дасе просто такие как бы наборы данных которые побыстрее будут использоваться э ну за счёт того что они сохранены То есть если вы какой-нибудь запрос написали Вы можете этот датасет сохранить и потом на основе этого датасета сделать множество сразу диаграмм Это довольно удобно Вот ну у меня в общем-то всё о запрос можно сохранять Ну так себе наверно Давайте вопросы что в домашке делать домашке Элементарно ВС подключить и настроить Ну как обычно всё подключить и настроить и давайте сейчас тут

Элементарно ВС подключить и настроить Ну как обычно всё подключить и настроить и давайте сейчас тут второй второй пункт с понедельник опасно маленькая количество лекций конечно осталось построение дашборда просто четыре четыре графика Аа разные метрики по датасет А ну то есть мы всё то же самое что ты сделал должны сделать Да и нарисовать просто другие графи [музыка] глянул получается это не обязательно для некоторых можно писать не не насчёт домашки в целом то что а просто типа закинуть

обязательно для некоторых можно писать не не насчёт домашки в целом то что а просто типа закинуть таблицу и там он сам даёт выбирать аре не всегда то что можно написать кодом получается сделать визуально но в целом Даня Кость я Может портился на выходных но такой у меня вопрос глупый А зачем в принципе прослойка доке контейнера здесь виртуальной машине если можно поднимать без [музыка] Докера Ну с лока Вы можете локально сделать собственно без разницы честно говоря Угу Как как хотите как хотите

лока Вы можете локально сделать собственно без разницы честно говоря Угу Как как хотите как хотите Ну это всё без таблиц же не работает да без чего без таблиц Ну да ес если нет таблиц то не Почему строить графики Печально А как что ты хотел сделать в супер сеете без таблиц Нет я к тому что типа придётся таблицы [музыка] делать Нет по жизни а по жизни Ну слушай это слишком философский вопрос Что ждёт вас по жизни поэтому давай представим что тебя по жизни ждёт датабаза авиаперевозок и на этом

ждёт вас по жизни поэтому давай представим что тебя по жизни ждёт датабаза авиаперевозок и на этом пока остановимся график с картой там есть координаты прикольно и есть способ выбрать диаграмму которая связана с картой Они в отдельном разделе Map сделайте какую-нибудь прикольную карту что вы просто надо распарсить столбец вот тот с этим с двумя координатами Мне кажется должно получиться красиво но если не будет получаться тогда не делайте вот ну то есть жизнь на этот класс не стоит Ну всё тогда

если не будет получаться тогда не делайте вот ну то есть жизнь на этот класс не стоит Ну всё тогда успехов Если два раза не получится установить на виртуальной машине Попробуйте установить локально но соответственно докер всё равно должен быть установлен вот промокоды сейчас в течение там какого-то времени буду вам рассылать мне их сначала тоже нужно получить Окей спасибо До связи у нас сегодня Саша новости читает напоминаю А Саша же последний Да дальше расписания Нету ничего Я сделаю Окей не

Саша новости читает напоминаю А Саша же последний Да дальше расписания Нету ничего Я сделаю Окей не проблема Окей Пока Спасибо за лекцию Всё пока пока-пока

вот эту инструкцию вам нужно брать из Центрального репозитория то есть не из своего форка потому что она обновлена буквально несколько минут назад 9 минут назад вот значит у спарка есть такая особенность странная я до сих пор её не очень понимаю что во время установки Вы тоже скачиваете архив с этим самым с архив конкретной версии и Бывает такое что вы обращаетесь например к инструкции которая была написана там месяц назад а оказывается что вот этого вот файла 352 там уже нет то есть они удалили

написана там месяц назад а оказывается что вот этого вот файла 352 там уже нет то есть они удалили файл 352 потому что теперь там лежит файл под версией 353 при этом Почему они удаляют Это я не понимаю уже много месяцев потому пропадает какая-то Ну такая более-менее простая схема автоматической установки когда ты говоришь Скачай файл распакуй Установи вот поэтому обязательно берите инструкцию вот из основного репозитория от которого вы делали форк там по большому счёту два изменения первое

вот из основного репозитория от которого вы делали форк там по большому счёту два изменения первое изменение касается вот установки спарка в связи с его версией второе изменение касается того что сегодня мы работаем на двадцатой убунте не на двадцать второй на ро можно тоже ВС это поднять но там будут будет проблема с установкой питона эта проблема тоже решаема но зачем нам её решать если это не собственно не наша цель того что мы хотим сегодня сделать вот значит виртуальная машина у меня

не собственно не наша цель того что мы хотим сегодня сделать вот значит виртуальная машина у меня сегодня побольше ресурсов чем вчера у меня 20 ГБ оперативной памяти Свободного не очень влиять Но вот виртуальных процессора и 20 гиб оперативки скорее всего могут чуть-чуть ускорить то что вы сегодня будете делать поэтому тоже обратите будет работать и со вчерашней конфигурацией но Я рекомендую чуть-чуть увеличить значит вот этот шаг который здесь первая установка spk Ив Доша шаста актуальной

чуть-чуть увеличить значит вот этот шаг который здесь первая установка spk Ив Доша шаста актуальной машине сделал эта инструкция проверена только что я это делал прямо вот-вот сейчас Поэтому в ней проблем нет Ну вот как как обычно если какие-то проблемы будут значит вы напишите В чём а мы перейдём сразу к установке Юпитер ноутбука Значит у нас на виртуальной машине удалённо будет установлен Юпитер это будет по большому счёту наш тёплый ламповый Google colab только не Google а просто колаб и не

это будет по большому счёту наш тёплый ламповый Google colab только не Google а просто колаб и не колаб а просто Питер то Удан чтобы его установить нам сначала нужно установить менеджер пакетов питонов он там он наверняка уже кстати есть или может быть его нет ну короче он быстро скачивается после этого когда пип установлен мы устанавливаем те laab И после этого нам нужно будет задать пароль тер La для того чтобы мы могли подключаться Извне раньше можно было просто он мог торчать на весь

тер La для того чтобы мы могли подключаться Извне раньше можно было просто он мог торчать на весь интернет мо зайти Теперь только по паролю это можно делать здесь есть важное отличие значит тем кто работает из на Яндекс клауде и будет создавать машину на Яндекс клауде Вы должны воспользоваться вот этой вот командой Я работаю на этой машине из-под Рута то есть из суперпользователя поэтому у меня здесь для тех кто работает на есть второй вариант который м нужно использовать ри умолчанию второй

здесь для тех кто работает на есть второй вариант который м нужно использовать ри умолчанию второй вариант копируем команду и у нас должна появиться строка ввода пароля пароль этот соответственно как и вчера вам тоже нужно запомнить Если вы его не запомните вам придётся опять заходить это пароль переделывать менять В смысле установлен пароль и теперь нам нужно это Юпитер запустить второй пункт отличий Если вы работаете на Яндекс клауде вы пользуетесь вот этой вот дефолтной командой если вы

отличий Если вы работаете на Яндекс клауде вы пользуетесь вот этой вот дефолтной командой если вы работаете так как я на селекте или в общем из-под Рута вы запускаете вот этой вот командой значит В чём отличие Почему здесь Две таких разных команд Когда вы работаете не позволяет по [музыка] умолчанию работать из-под Рута То есть вы там если кто регистрировался Вы помните что вы там задаёте Логин себе и под этим логином вы тоже администратор но не Когда вы устанавливаете Питер ноутбук из-под

себе и под этим логином вы тоже администратор но не Когда вы устанавливаете Питер ноутбук из-под пользователя он устанавливается как бы в вашу домашнюю директорию польва видере [музыка] Ува устава паку все систе поэтому тут тут всё тоже самое просто отличаются пути того куда устанавливается Питер В зависимости от пользователя Здесь тоже самое отличаются пути но чтобы запустить Питер из-под Рута нужно дать чтобы мой а Юпитер был прямо запущен из-под Рута значит почему ээ такая команда отдельно

нужно дать чтобы мой а Юпитер был прямо запущен из-под Рута значит почему ээ такая команда отдельно здесь Дана Потому что если у вас из-под Рута запущен Юпитер Вы можете в ячейке Юпитера написать мрф СШ иначе говоря удалить все файлы системы То есть у вас Юпитер как бы работает Так что он может удалить всё что угодно Вы можете из-под этого Юпитера установить что-нибудь Удалить что-нибудь Короче говоря сделать всё что захотите Вот Но также как и вчера с adress звёздочка Вот это это последний раз

сделать всё что захотите Вот Но также как и вчера с adress звёздочка Вот это это последний раз когда вы должны это делать своей жизни Ну типа делать так чтобы у вас был настолько открытый Юпитер Окей Юпитер запущен значит для того чтобы консоль не блокировала можно вот такую утилиту использовать UB но Я рекомендую консоль оставлять открытый потому что по этой консоли вы просто сможете понять что у вас что-то не работает Юпитер будет в логе это писать открываете консоли такие так что-то здесь

у вас что-то не работает Юпитер будет в логе это писать открываете консоли такие так что-то здесь пошло не так но в целом Мы видим что здесь всё тоже самое нало Хосте порт 8888 запущен J теперь мне нужно сделать так чтобы я из своего локального компьютера мог к этому юпитеру подключиться для этого я копирую Вот эту вот команду прокиды ию это внимание новой консоли не в той которая подключена у меня к к виртуальной машине открываю новую вставляем эту команду и IP адрес сервера меняем на тот IP

к к виртуальной машине открываю новую вставляем эту команду и IP адрес сервера меняем на тот IP адрес который у меня который мне выдал там Cloud selectel неважно так этот IP адрес у меня вот значит смотрите э я нажимаю Enter всё должно заработать ввожу пароль ввожу пароль от виртуальной машины не от Юпитера потому что сейчас я пока просто пытаюсь подключиться к виртуальной машине ввожу пароль Нажимаю Enter У меня написано perm в таком случае я останавливаю это Ctrl C и иду Вот в это вот

Нажимаю Enter У меня написано perm в таком случае я останавливаю это Ctrl C и иду Вот в это вот замечание значит иногда при подключении Это зависит настрое Облачно ф Это я делал а е и указать имя пользователя под которым вы будете подключаться то есть в моём случае это в вашем случае то имя пользователя которое вы в Яндекс клауде ввели несколько лишних строк скопировала запускаем и делаем тоже самое Мне кстати ещ надо пароль проверить вот здесь вот это означает что я подключился Root имя

самое Мне кстати ещ надо пароль проверить вот здесь вот это означает что я подключился Root имя пользователя вот там вот где-то в Облаке СК - это Имя моей виртуальной машины идём дальше в инструкцию теперь мне нужно проверить что мой upit laab доступен копируем А ну и я не знаю можно Давайте тогда сейчас вставляем и видим то что я подключился к юпитеру теперь я ввожу тот пароль который я вводил при задании пароля Питер Lab нажимаем Enter и пожалуйста у нас открывается upit laab здесь могут быть

задании пароля Питер Lab нажимаем Enter и пожалуйста у нас открывается upit laab здесь могут быть какие-то временные файлы их может не быть это не суть сути не меняет Если вы оказались в Питер лабе то мои поздравления теперь у вас есть персональный Google Кола А здесь можно делать всё то же самое что вы делаете У себя в компьютере просто в компьютере у вас когда локально он установлен он это тот же самый сервер Просто он прямо у вас установлен А здесь он установлен удалённо то есть Теперь мы

же самый сервер Просто он прямо у вас установлен А здесь он установлен удалённо то есть Теперь мы можем здесь создать какой-нибудь ноутбук А так это Launcher New Notebook а выбираем Python 3 ну там собственно вариантов других по идее не должно быть Ну может там какой-нибудь ещё будет Но неважно главное что па есть спускаемся дальше по инструкции и для того чтобы убедиться что у нас всё работает копируем вот такую вот команду эта команда просто тестовая нам моментально вываливается ошибка что

копируем вот такую вот команду эта команда просто тестовая нам моментально вываливается ошибка что нет модуля find Spark мы я сейчас объясню что этот модуль делает но здесь как всегда [музыка] Install устанавливаем и ещё раз запускаем это всё окей так так и должно быть наверно да Ну в смысле какие-то он всегда там логи выдаёт просто до тех пор пока всё работает можно на эти логи не обращать внимания всё соответственно Мы дошли до конца инструкции Юпитер установлен Спарк установлен и теперь

всё соответственно Мы дошли до конца инструкции Юпитер установлен Спарк установлен и теперь самое время перейти к самому спарку а точнее Давайте вопросы вот по этой части может кто-то кого-то появилось хорошо Саш а вот пароль от Яндекс клауда я не помню В какой момент мы его вводили задавали точнее э пароль вы задавали Ну при создании по идее при создании возможно возможно Ну сегодня Я рекомендую создать новую машину чтобы просто ещё раз этот путь пройти поэтому там обратите на это внимание Угу

создать новую машину чтобы просто ещё раз этот путь пройти поэтому там обратите на это внимание Угу Насть Да не хватило как бы обзора Спарк например Это что такое зачем и так далее но мы ещё к этому не перешли мы пока установили просто Юпитер и всё не к тому что Ну в смысле ты расскажешь попозже да Или да мы сейчас дем будем смотреть па Угу толубай а в селекте это пароль Рута самого Да просто который при создании Да смотрите но в селекте это можно найти прямо в интерфейсе вы тыкается на вашу

при создании Да смотрите но в селекте это можно найти прямо в интерфейсе вы тыкается на вашу виртуальную машину переходите в консоль кстати говоря соответственно всё это можно сделать прямо из консоли отсюда Ну просто веб консоли Это как Вот 10 лет назад Это была какая-то ну такая подтупливает А пароль се вот пожалуйста Заходите в свою виртуальную машину консоль вот пароль Сергей по идее же если через Яндек убирать с ссш публичный ключ там никого пароля не будет он или А ну Ещё ещё проще тогда

через Яндек убирать с ссш публичный ключ там никого пароля не будет он или А ну Ещё ещё проще тогда потому что он обратиться в этот в Саши и сразу подключиться что а кстати а в рамках логического перерыва Сергей у нас квиз будет завтра или что Или как Блин я про него забыл но он готовый Если есть желание у людей поучаствовать м просто придётся пару часов потратить на подготовку я с радостью вот так что надо голосовалку делать в Хорошо я закину закину в чатик и хорошо окей а то рекламная

вот так что надо голосовалку делать в Хорошо я закину закину в чатик и хорошо окей а то рекламная кампания в прошлую среду прошла в пятницу Окей давайте тогда поедем дальше все все конечно понимают что КС мы устраиваем только для того чтобы Саша законно попил Пиво потому что ЕС он целую неделю уже мучается в пролы раз он так страдальческом собственно нотбук который нам нужно загрузить Он лежит в репозитории Называется он dems Spark SQL Что нужно сделать чтобы загрузить ноутбук нужно нажать вот

репозитории Называется он dems Spark SQL Что нужно сделать чтобы загрузить ноутбук нужно нажать вот эту кнопочку перейти в репозиторий найти этот ноутбук и где он у нас здесь dem Spark squ память мне не изменяет Это должен быть он отлично он появился всё супер теперь нам это не нужно останемся вот тут значит Спарк А я буду по этому ноутбуку идти смотрите этот ноутбук он как бы демо в ещё более привычном смысле чем было у нас до этого То есть я его до конца проходить не буду его специально

привычном смысле чем было у нас до этого То есть я его до конца проходить не буду его специально обученный человек делал и этот ноутбук - это фактически такой обзор основных возможностей и его нужно использовать не только в качестве ознакомительного но ещё и в качестве там потенциальной подготовки для собеседования потому что здесь очень много комментариев много примеров применения разных функций и всего такого поэтому по прям базовым основным вещам я пройдусь остальные части вы Изучите если

и всего такого поэтому по прям базовым основным вещам я пройдусь остальные части вы Изучите если во-первых Вам нужно будет идти на собеседование либо если вам это интересно просто если вы будете идти на собеседование ещё не факт что вам будет это интересно Но придётся Вот и соответственно отдельная часть которую я прокомментируй Позже это то что вам понадобится для выполнения сегодняшнее тире завтрашнего задания Что такое Spark Spark - это система обработки данных и её отличает от какого-нибудь

задания Что такое Spark Spark - это система обработки данных и её отличает от какого-нибудь Панса тем что с умеет работать с гораздо больше количеством данных чем мы привыкли он умеет обращаться к распределенным серверам То есть у вас может быть несколько серверов на которых вы храните свои данные по понятным причинам это может быть географически обусловлено это может быть обусловлено с точки зрения ресурсов что когда у нас просто на одну машину всё не вмещается и СРК - это как бы такая

зрения ресурсов что когда у нас просто на одну машину всё не вмещается и СРК - это как бы такая платформа которая [музыка] позволяет как бы агрегировать все эти данные но при этом делать очень-очень быстро с написан наве то что мы сегодня будем смотреть это собственно это фактически просто драйвер к движку спарка который позволяет использовать питонов ский синтаксис для исполнения команд самого спар Почему Спарк популярен потому что огромное количество данных хранятся в табличном формате сонос

Почему Спарк популярен потому что огромное количество данных хранятся в табличном формате сонос они хра в табличном формате в каком-то виде похожем на то о ЧМ мы с вами говорили во вторник То есть это SQL подобные какие-то вещи и всё в таком духе Спарк используется в том числе потому что он как бы ну сегодня может быть может показаться что он очень сложный Но на самом деле это просто дело привычки он в некоторых вещах Очень сильно похож на панс в некоторых вещах он очень сильно похож на SQL и

он в некоторых вещах Очень сильно похож на панс в некоторых вещах он очень сильно похож на SQL и фактически если так вот какую-то построить такую систему координат Spark по именно синтаксису окажется где-то между чистым сэлем и между каким-то высокоуровневым пандусом или чем-то подобным Вот потому что у него очень много от скэ с другой стороны мы можем работать в Юпитер ноутбуке и использовать питон поэтому он тоже как-то довольно близок к пандусу Ну в смысле концепции вот и всё для чего нужен

поэтому он тоже как-то довольно близок к пандусу Ну в смысле концепции вот и всё для чего нужен Спарк - это построение таких э пайплайн обработки умеем быстро умеет быстро агрегировать умеет быстро собирать работает в таком псевдо потоковом режиме но часто этого достаточно то есть с это не прямо реальный такой способ обрабатывать данные в режиме вот прям онлайн да в режиме реального времени но он очень близок к этому и поэтому он пользуется популярностью ВТО с или там на инженера каких-нибудь

очень близок к этому и поэтому он пользуется популярностью ВТО с или там на инженера каких-нибудь баз данных то вероятнее всего настраивать Спарк поверх там нескольких кластеров или там каких-то серверов вам не понадобится потому что обычно его используют в таких как бы в в прикладных вещах то есть естественно есть люди которые весят Кэн делают Но это дата инженеры вам если вы будете в области там машинного обучения то скорее вам понадобится он для э просто понимания того Какие данные вытащить

машинного обучения то скорее вам понадобится он для э просто понимания того Какие данные вытащить как их вытащить Может быть как их агрегировать Какую предобработка сделать базовую и э всё в таком духе а Spark является частью большой экосистемы Ача если просто даже в Гугле написать так сейчас в Гугле написать ач ecosystem а Ну там мне вот эта вот картинка нравится значит почему он ещё популярен потому что на самом деле предоставляет целую инфраструктуру у у него своя файловая система которая

потому что на самом деле предоставляет целую инфраструктуру у у него своя файловая система которая предназначена для работы с данными у него свои механики обработки данных вроде спарка у него есть своя библиотека для алгоритмов машинного обучени называтся которой м при поработать всякие платформы оркестрация сервисов Когда у вас много сервисов нужно понять кто кому что отдаёт в какой последовательности Какие данные и так далее он предоставляет много всяких возможностей аналитики Мне кажется что

Какие данные и так далее он предоставляет много всяких возможностей аналитики Мне кажется что самыми ну по моему опыту двумя Самыми популярными как бы такими концепциями Ача которыми все пользуются это Спарк и кавка Спарк нужен для обработки данных кавка нужна для того чтобы потоковые данные распределять между потреби э данных ну то есть вы можете представить что у вас есть какое-нибудь мобильное приложение в котором Миллионы людей просто постоянно Я не знаю переключают треки лайкают добавляют

приложение в котором Миллионы людей просто постоянно Я не знаю переключают треки лайкают добавляют в плейлист удаляют шерт отправляют друзьям и все эти клики нужно собирать фактически как бы нужно понять что куда и кому отправлять что там все лайки мы отправляем этому сервису он их Собирает все там клики на такую кнопку отправляем сюда вот поэтому кавка тоже довольно популярна но в целом можно постро всю инфраструктуру хранения и обработки данных на А у этого там есть сторонники есть противники

всю инфраструктуру хранения и обработки данных на А у этого там есть сторонники есть противники но так или иначе такие возможности просто сами по себе присутствуют Давайте переходить собственно к как бы к тому с чем мы работаем У спарка есть такие три уровня хранения данных нас больше всего интересует уровень хранения который называется потому что это очень физического уровня концепция вообще взятая там по большому счёту из джавы датасет нам не понадобится потому что он работает только в языках

там по большому счёту из джавы датасет нам не понадобится потому что он работает только в языках SC и Java А вот dataframe - это такой промежуточный уровень который вроде как и удобно хранить а вроде как ещё другие языки с ним тоже успешно работают в определённом смысле к этому дата фрейму можно относиться полностью как к дата фрейму который у вас был в пансе Вот это какая-то табличка у этой таблички есть какие-то колонки у неё есть строки какая-то информация и всё про Давайте этот Спарк

таблички есть какие-то колонки у неё есть строки какая-то информация и всё про Давайте этот Спарк импортируем Точнее ну он у меня уже установлен поэтому мы просто нажимаем ир для запуска спарка часто нужно как бы довольно много всяких сопроводительных штук сделать указывать пути какие файлы кто откуда что где берёт поэтому добрые люди которые работают спарм написали красную утилиту которая называется для того чтобы она пробежалась и сама ВС настроила то есть мы этого не делали самостоятельно вы

для того чтобы она пробежалась и сама ВС настроила то есть мы этого не делали самостоятельно вы будете фактически в любом примере использование вы будете видеть то что первое что происходит это и это очень удобно спак работает в режиме сессии сессия как бы она получается что у нас когда вы работаете вноутбуке же в оден смыс пото може сно я оставить его потом верну к нему оно будет функционировать и как бы вот этот вот Юпитер он тоже в определённом роде сессия и вот SP это как бы похожая штука

и как бы вот этот вот Юпитер он тоже в определённом роде сессия и вот SP это как бы похожая штука мы говорим спарку что сейчас мы начинаем работать и то что мы работаем конкретно из Юпитер ноутбука самой Спарк сессии без раз создам экземпляр этого класса говорим что сделай мне сессию сессия будет называться и если эта сессия есть Найди её и Верни нам Если такой сессии Под таким именем нет значит создай её она будет у нас Нова Ну и тоже это запускаем будет периодически на всякие [музыка] туру К

создай её она будет у нас Нова Ну и тоже это запускаем будет периодически на всякие [музыка] туру К вам У нас Спарк установлен всё О'кей давайте к датафрейм перейдём значит датафрейм можно создать разными способами простой способ создания датафрейма это соответственно се почивает это просто создание абсолютно такое же создание которое можно себе представить в питоне в пансе в пансе мы тоже можем сделать список списков и сказать Теперь у нас это PD dataframe пожалуйста вот табличка А тут мы

сделать список списков и сказать Теперь у нас это PD dataframe пожалуйста вот табличка А тут мы можем увидеть то что если мы создаём какой-нибудь datame это можно сделать SP Frame другие способы и чтения файлов и всего остального мы посмотрим ниже если мы возьмём и просто распечатаем мы увидим что он нам немного в непривычном формате выводит вот эти вот штуки И сейчас я буду чуть позже объяснять почему номы видим что это что у него есть КАТО коло это у нас дальше вторая колонка действительно он

номы видим что это что у него есть КАТО коло это у нас дальше вторая колонка действительно он понял что это дальше Big integer Big integer dou Ну соответственно две колонки индро и число с плавающей точкой то есть типы насколько он мог он определил хорошо Саш а мы при инициализации колонки с числами можем сразу указать там позже сможем Угу вот а Вот то то как он сейчас определил наши типы это такой Ну так называемый Type inference То есть он посмотрел на эту колонку и предположил что ага вроде

Ну так называемый Type inference То есть он посмотрел на эту колонку и предположил что ага вроде бы все все колонки в этом точнее все значение в этом столбце одного типа значит я выберу ему тип данных вот такой А кто помнит в пандас самый плохой тип данных с точки зрения хранения какой Ну то есть в а да в пансе на самом деле вы тоже можете задавать типы колонок если у вас какая-то колонка например состоит только из ноликов и единиц вы её можете сделать булевой да ну либо ноль либо единица если

состоит только из ноликов и единиц вы её можете сделать булевой да ну либо ноль либо единица если у вас где-то колонка только с текстом Вы можете сказать что эта колонка содержит только текст только стринг и если ва в вашей колонке пансу не получилось Определить тип он скажет э кожи об типа данных по большому счёту тип данных object - это два варианта когда панс не смог понять что вы там храните и второй вариант Когда у вас в одной колонке и числа и словари и какие-нибудь там числа с плавающей

и второй вариант Когда у вас в одной колонке и числа и словари и какие-нибудь там числа с плавающей точкой и списки и всё подряд тогда он говорит я не понял что у тебя там хранится Пусть этот тип колонки будет об почему это бывает важно потому даже вот здесь Уже немного ошибся потому что мы видим что вот здесь вот действительно Big integer да то есть здесь какие-то большие числа а вот в этой колонке в общем-то У нас всё в тип данных и 16 уместилось бы то есть это какие-то числа там от

этой колонке в общем-то У нас всё в тип данных и 16 уместилось бы то есть это какие-то числа там от нескольких сотен плюс до нескольких сотен минус но здесь наш Спарк не смог определить и воткнул ему почему это бывает важно потому что в зависимости от того какой тип данных у вас хранится в конкретной колонке у вас разное количество памяти они занимают в в оперативке если у вас все типы данных - это какой-нибудь float 64 который ну здесь это дабл то в памяти они занимают много места А если вы

это какой-нибудь float 64 который ну здесь это дабл то в памяти они занимают много места А если вы видите что у вас в какой-то колонке те же самые фосы в памяти они занимают намного меньше место Поэтому вот с таким автоматическим ти выводом типов нужно быть аккуратным то есть Бывает такое и часто даже можно встретить что из-за того что Панда сохранит все данные в оперативной памяти то есть выф загрузили он такой во 8 ГБ из оперативки я забрал Спасибо но если вы каждую колонку приведёте к

выф загрузили он такой во 8 ГБ из оперативки я забрал Спасибо но если вы каждую колонку приведёте к правильному типу данных у вас 8 ГБ могут абсолютно не иронично как бы прийти в 4 гиб просто потому что теперь Вы храните нужные данных и знает под требовать пам здесь мы а создали можем подробнее с помощью метода Принт схема вывести Какие типы данных здесь используются А и здесь в общем-то всё тоже самое написано но здесь появляется Чуть более расширенное Nal True на lel True означает то что

тоже самое написано но здесь появляется Чуть более расширенное Nal True на lel True означает то что потенциально в конкретной колонке могут быть А ну нулы да то есть отсутствующие пропущенные значения есть колонки в которых таких пропущенных значений быть не может Например если У вас есть база в которой есть идентификаторы айдини шник пропущен быть не может Поэтому здесь бы стоял Ну это можно естественно менять Там под конкретную область в спарке Даже если мы Надеемся на автоматический вывод

менять Там под конкретную область в спарке Даже если мы Надеемся на автоматический вывод данных у нас может быть Вот такая вот ситуация мы создаём но при этом в первой колонке у сложный Дан это пото чтоэто какая-то коллекция объек и здесь мы видим что действительно мы можем создать дата с конкретными колонками с конкретными значениями и Спарк поймёт что Первая колонка у нас содержит массив этот массив состоит из элементов Long - Это целочисленный тип данных ин не содержит пропущенных значений

массив состоит из элементов Long - Это целочисленный тип данных ин не содержит пропущенных значений есть ОТС бы сказал чувак извини это об Я не понимаю что у тебя там хранится здесь Он сказал что это массив массив состоящий из целых чисел это бывает довольно удобно Если мы просто распечатаем схему нашего датафрейма мы увидим что она намного сложнее выглядит каждое поле в датафрейме спарка оно задаётся классом STR Field struct Field колонка называется вот так содержит в себе string на True

задаётся классом STR Field struct Field колонка называется вот так содержит в себе string на True дальше Вторая второй объект - Это тоже STR Field колонка 2 AMP True Ну и так далее То есть пос как бы отдельные колонки в спарке - это на самом деле объекты типа ST Field И если мы хотим несколько объектов этого типа воссоединить в целую табличку да в схему хранения да то тогда мы их объединяем с помощью STR Type сейчас пока это нужно со звёздочкой себе в голове отложить ниже мы будем их создавать

STR Type сейчас пока это нужно со звёздочкой себе в голове отложить ниже мы будем их создавать и говорить спарку какие объекты и как мы хотим хранить в пансе такого не было потому что панс на самом деле Ну объект датафрейм Панса - это фактически обычный словарь просто немного на стероидах Именно поэтому в пансе Вы можете обращаться к своим колонкам Вот так Вот потому что объект датафрейма Панса это словарь ну понятно на стероидах но всё равно но здесь вот можно вспомнить приятное и с помощью of

словарь ну понятно на стероидах но всё равно но здесь вот можно вспомнить приятное и с помощью of cols вывести название колонок которое у нас есть значит если мы хотим навесить на нашу табличку собственные типы данных то есть Прямо указать спарку где и что будет храни и Под каким именем Мы можем с помою и последовательности фи ему Прямо сказать что наша схема это ty последовательность вот этих STR Field можем задать те названия колонок которые нам нужны то есть они уже не будут автоматически

STR Field можем задать те названия колонок которые нам нужны то есть они уже не будут автоматически индексироваться задать какие-то конкретные типы то есть там у нас например Был Была одна колонка А мы говорим это на самом деле не про большой чем по интервалу Ну в смысле там это можно конечно отдельно проверить но смысл в том что у вас есть там integer Long integer B integer в зависимости от того какой тип вы хотите Точнее какой какую какие числа хранить здесь просто говорим integer а здесь

какой тип вы хотите Точнее какой какую какие числа хранить здесь просто говорим integer а здесь говорим dou потому что там числа с плавающей точкой говорим в этим в каждом аргументе для STR Field говорим что пропущенных значений быть не может Мы создали схему и теперь мы можем вызвать тот же самый метод Create datame и сказать ему что вот из этих данных я Напоминаю что это дата это просто список списков питонов ский вот э вот дата и схема то есть теперь вот эта схема будет повешена на те данные

питонов ский вот э вот дата и схема то есть теперь вот эта схема будет повешена на те данные которые мы хотим обернуть в дай если мы ещ раз это сделаем распечатаем схему Теперь мы увидим что у нас появились названия колонок и типы проставить те которые нам нужны Это довольно важная штука но опять же если памяти хватает И всего хватает то без проблем можно пользоваться и обычным инфе сом типов то есть загрузили Какие типы он определил отлично нас это устраивает там может и не будет никаких

то есть загрузили Какие типы он определил отлично нас это устраивает там может и не будет никаких проблем если нет там всяких пропущенных значений всего остального спар как правило более-менее вме обрабатывает автоматический вывод Али мы задули и указали неправильный тип ну нечаянно Или специально он это подсветить или пропустит так нет он скажет тебе что что ты не прав Да мы можем это проверить сделать давайте мы создадим создание новой схемы и прямо попробуем сделать то же самое скажем что

сделать давайте мы создадим создание новой схемы и прямо попробуем сделать то же самое скажем что это у нас дата Error и здесь например скажем что у нас ми1 и пусть это ещё ифт будет значит задаём схему задаём новые данные подставляем сюда Data Error всё P Spark Type Error ошибки в общем-то читать особенного смысла нет в спарке потому что они как правило Ну они все идут из джавы поэтому он вам мало информации даст но он скажет что can Accept object in Type ST Type ми 100 Ну такую да такую

мало информации даст но он скажет что can Accept object in Type ST Type ми 100 Ну такую да такую Наверно он более-менее выдаёт вот поэтому Да если будет ошибка он скажет сам дурак из-за того что в Джаве строгая типизация Это означает что мы должны обязательно Указать тип переменной если мы не указываем это как в питоне нун там сам как-то выберет подходящее что-нибудь А вве так не пройдёт вот поэтому быстрее Ну в том из при [музыка] програми Саша да А вот если мы задали параметр и условно

поэтому быстрее Ну в том из при [музыка] програми Саша да А вот если мы задали параметр и условно каким-нибудь методом или вот ответ на твой вопрос Всё спасибо да соответственно если мы пытаемся добавить или даже продать ини сразу вернётся can Вот то есть он будет за этим следить Ну это довольно просто опять же если вот такие вопросы периодически задают на собеседованиях но редко всё-таки мы не не совсем профиль для этого но тем не менее всегда можно говорить Что что ну типа Какие свойства Там

совсем профиль для этого но тем не менее всегда можно говорить Что что ну типа Какие свойства Там могут быть у какого-нибудь поля У какого-нибудь Поля может быть свойство тип Да У этого поля может быть свойство нал или не Нал вопрос А какое поле не может быть поле на не может быть там идентификатор например да Или сумма которую пользователь оплатил Не может быть такого чтобы транзакция прошла а он а поле суммы пропущено То есть тут Просто из обычной жизни даже много примеров можно привести луба

а поле суммы пропущено То есть тут Просто из обычной жизни даже много примеров можно привести луба чтото проморгал момент наб За что отвечает Ну я вот сейчас об этом говорил за что может отвечать на сохранение типа данных нет у тебя пример прямо перед глазами за что может отвечать на за Столбцы ты можешь даже 30 секунд подумать Просто если ты будешь перечислять все слова которые приходят Тебе в голову ты рано или поздно добьёшься результа вот сма данных которы Мы хотим туда поместить вот ошибка

ты рано или поздно добьёшься результа вот сма данных которы Мы хотим туда поместить вот ошибка За что отвечает нал за тип данных [музыка] нет Вот мы пытаемся пропущенное значения вставить в колонку вот в эту и у нас почему-то это не получается внимание вопрос За что отвечает Набу непринятие пропусков Ну да может ли конкретная колонка содержать пропущенные значения А если Т сделаем тогда может да если тру он тогда не будет этого проверять просто понял Сергей Паша скажи а вот мы получается чаще

если тру он тогда не будет этого проверять просто понял Сергей Паша скажи а вот мы получается чаще всего перед тем как начать работать настра там это называлось ти маску Вот эту вот наших данных схе Да чтобы просто всё это было быстрее то есть потом чтобы мы не тратили больше времени на вычислений для чего мы это делаем Ну да да на самом деле как сказать порочная привычка плевать на типы данных она во многом обза библиотека созданная для языка который может до определённой степени вот эти типы

во многом обза библиотека созданная для языка который может до определённой степени вот эти типы данных выводить самостоятельно Это не очень хорошо если даже посмотреть Чуть более сложные библиотеки по отношению к пандусу у пандус много там конкурентов и всего прочего то там довольно часто это является Ну если не обязательным то очень сильно желательным потому что нам Ну надо дать понять системе данные Какого типа мы храним в колонках это это бывает важно потому что иногда ты можешь взять одну

данные Какого типа мы храним в колонках это это бывает важно потому что иногда ты можешь взять одну колонку например поделить на Ну вот смотри классический пример у вас есть какой-нибудь панс dataframe потом в этом датафрейме есть какая-нибудь колонка с числами где-то там есть пропущенные значения хотя их быть не должно Ну вот так я не знаю проверили Вы что-то у вас не получилось или там вместо числа где-нибудь слово оказалось какое-нибудь и есть вторая колонка с числами вы хотите я не знаю

числа где-нибудь слово оказалось какое-нибудь и есть вторая колонка с числами вы хотите я не знаю найти среднее вот по или там какую-то арифметическую операцию произвести разделить одну колонку на другую вы говорите DF - одна колонка разделить на DF другая колонка у вас вылезает ошибка вылезает ошибка потому что он не может поделить вы в этот момент думаете а почему он не может поделить начинаете проверять тип смотрите что у вас тип одной из колонок Это object понятное дело что панс не может

проверять тип смотрите что у вас тип одной из колонок Это object понятное дело что панс не может поделить object на что-то потому что это вообще не пойми что за тип какой-то абстрактный общий а когда у вас чётко задано как бы то какой тип данных у вас хранится в колонке у вас не может быть ситуации в которой в этой колонке окажется слово просто потому что у вас задан тип данных число и в этом смысле панс очень сильно ускоряет работу а с другой стороны может приводить к странным проблемам вроде

панс очень сильно ускоряет работу а с другой стороны может приводить к странным проблемам вроде таких вот банальных вещей вот поэтому в целом выяснять типа данных и приводить коло Ну типу данных это Роша тика поет избежать ошибок что как сказать спарке это ближе к понятию необходимость чем в пансе в пансе можно легонько пролететь с этим без проблем Окей значит нам тут создание новой схемы нам прекрасно распечатает дан Пролетарском виде нежели панс потому что панс - это всё в Юпитере в htm

прекрасно распечатает дан Пролетарском виде нежели панс потому что панс - это всё в Юпитере в htm оборачивается отсюда всякие подсвечивающая [музыка] будет Вот такая вот штука То есть он будет печатать как бы название колонок в столбик и можно просто увидеть что там колонок много какие они данные содержат и так далее иногда если у нас есть какая-нибудь колонка с длинным названием она будет вводиться естественно абсолютно также как в пансе вот со значением точнее длинным с многоточием но и этого

естественно абсолютно также как в пансе вот со значением точнее длинным с многоточием но и этого можно избежать можно уза и то будет чатам обм е где-то кто-то когда-то пользовался PD options и дальше там показываем мне все колонки и так далее Это похоже на Ну один из компонентов который напоминает в этом смысле панс Давайте перейдём к чтению файлов Здесь тоже есть некоторая интересная деталь значит чтобы записать Дай мы можем воспользоваться такой конструкции мы говорим что мы создадим объект

чтобы записать Дай мы можем воспользоваться такой конструкции мы говорим что мы создадим объект писателя да то есть говорим что пока это просто происходит как бы для объяснения этапов можно это в одну строку записывать создаём объект писателя wr дальше пишем wr паркет И говорим что сохраним в tmp дате я сохраняю именно сюда потому что у меня видите домашняя директория T то есть вот вот эта вот папка это содержимое паму меня не поэтому я сохраню свой датафрейм этот Райтер он привязан к моему

папка это содержимое паму меня не поэтому я сохраню свой датафрейм этот Райтер он привязан к моему дата фрейму йте паркет и сохраню вот сюда про паркет я сейчас скажу обновляем штуку здесь появилась переменная а папка Data Test Day он мне значит сохранился вот в таком прекрасном виде А почему здесь несколько файлов значит здесь я вот есть как это в втором виде записать более привычным то есть мы можем на самом деле прям DF формат указываем паркет мо Over Потому что потому что там уже эти данные

на самом деле прям DF формат указываем паркет мо Over Потому что потому что там уже эти данные были и Save в какую папку вот этих вот модов вместо Over можно сказать Дописать в конец Да удобный был бы метод если бы он в пансе был когда выбирали А может он там уже есть я не знаю переть знат если такие данные уже есть Усть сй если данных нет то просто проигнорировать ничего не сделать значит почему данные сохраняются в паркет что это за формат паркет - это формат сохранения данных который

почему данные сохраняются в паркет что это за формат паркет - это формат сохранения данных который обладает несколькими преимуществами вот здесь у нас после того как мы сохранили в общем-то небольшой датафрейм у нас появилось сразу четыре файла эти четыре файла СР по какой-то своей внутренней логи я об этой логике ничего не зна сохрани это датафрейм на несколько частей как эта логика внутри работает никогда в жизни не читал но это как бы его такая особенность теперь как мы можем собственно

никогда в жизни не читал но это как бы его такая особенность теперь как мы можем собственно взять и изменить сохранение этой логики То есть как можем поменять может быть мы хотим сохранить определённым образом не так как этого хочет сделать Спарк сам по себе мы можем для этого для начала прочитать данные которые у нас вот здесь хни это можно сделать с помощью Spark формат паркет схема если она у нас есть мы указываем ту которую мы задавали выше T собственно то куда я свои данные сохранил можем

нас есть мы указываем ту которую мы задавали выше T собственно то куда я свои данные сохранил можем их прочитать и распечатать то есть мы сохранили выше здесь просто их заново загрузили я скажу чуть позже Давайте вот сюда в один фа а неско файлов и как этим можно управлять Давайте создадим простой он будет состоять у нас буквально из двух записей и если мы его обычным образом сохраняли мы бы примерно так написали Но что если мы хотим сохранить с разделением по каким-то параметрам здесь я был

так написали Но что если мы хотим сохранить с разделением по каким-то параметрам здесь я был перед глазами три колонки две записи давайте мы попробуем сохранить Вот этот датафрейм и укажем спарку что мы хотим сделать par by 1 нажимаем смотрим Что у нас здесь появился df2 заходим сюда и видим что у меня вот здесь вот сохранись под теми датами У меня есть в Мом датасете что сейчас произошло сейчас когда Я указал спарку Разбей мне файлы по первой колонке он все те данные которые принадлежат одной

когда Я указал спарку Разбей мне файлы по первой колонке он все те данные которые принадлежат одной дате сохранил в одну папку все те данные которые принадлежат другой дате сохранил в другую папку такой способ сохранения позволяет во-первых хранить ваши данные на разных серверах то есть мы вот это партицирование мы говорим что у нас у нас же как бы это датасет оди но мы можем одну часть данных хранить На одном сервере другую на другом сервере как обычно вот этой маршрутизацией занимаются как

хранить На одном сервере другую на другом сервере как обычно вот этой маршрутизацией занимаются как раз спар инженеры В каких случаях нам как пользователям это может быть Полезно если мы сохраняем данные в таком формате то Представьте что у вас есть список транзакций пользователей не знаю Ну например за несколько месяцев с ум того список транзакций Ну банковских к примеру с ум того сколько люди пользуются банками и с учётом того как это легко это будут миллиарды записей потому что каждый день

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

спарку а ты прочитай-ка вот эту отдельное подмножество потому что оно мне важно если мы хотим получить например данные только пользователей которые там осуществляли транзакции в Москве и у нас есть какая-то геометка и данные сохранены с партицирование по этой геомет то мы тоже можем это это очень удобно в том числе Когда вы например занимаетесь Я не знаю Ну такой может быть немного накрученный пример но Представьте что вы занимаетесь парсингом страниц сайта и у вас на каждой страничке есть там

но Представьте что вы занимаетесь парсингом страниц сайта и у вас на каждой страничке есть там по 100 объектов Если вы в итоге потом сохраните это всё в CS у вас какая логика будет обработки вы сначала дано вам страни в спарке Если вы сохраните это с партицирование вы потом можете сказать мне вс не нужно прочитай-ка мне только отдельный какой-то набор который меня интересует там вот эта страница вот эта страница и вот эта страница и таким образом СР как бы он не будет сначала грузить весь ваш

вот эта страница и вот эта страница и таким образом СР как бы он не будет сначала грузить весь ваш датафрейм а потом возвращать вам что-то что вам нужно и вот это оче унсу вся Вы можете попросить там своего какого-нибудь дата инженера на работе сказать Слушай а Сохрани сохраняй вот этот датасет Пока мы там что-нибудь собираем какие-нибудь данные сохраняя его с партицирование там по времени по юзера по географии по источникам каким-то и так далее Вот и вот это партицирование это очень очень

юзера по географии по источникам каким-то и так далее Вот и вот это партицирование это очень очень очень мощная штука прям замечательно подходит особенно когда дело касается прав больших данных потому донго с какого-то момента такая возможность проецирование Понятно Давай кость Понятно полностью а сам паркет делает почему там несколько записей получается который вот здесь вот а здесь одна запись а вот где был тестовый первый что о там унито сло у ноно ну то есть если мы будем открывать файлики

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

либо давайте что может быть поне тоже используется давайте мы будем забьём этот датафрейм так чтобы все его части были примерно одинаковые по размеру Вот честно говоря не знаю какой по умолчанию вот а ну тут что можно ещё сказать что на самом деле Можно даже партицирование пройдёт по одной колонке после того как там данные разделятся можно указать вторую колонку и он тиций по второй колонке Таким образом мы можем даже хранить иерархическую структуру что типа сначала партию по а внутри каждого

образом мы можем даже хранить иерархическую структуру что типа сначала партию по а внутри каждого месяца Скажи что у меня есть Премиум пользователи и обычные пользователи и распор их ещ и там по вот этому признаку и тогда чтобы найти всех не Премиум польз или там всех тех кто у нас стал Премиум пользователям в феврале мы можем просто обратиться к одной части датафрейма и при этом не грузить всю эту информацию вот ну таким образом соответственно читать при указании пути тоже можно читать только

информацию вот ну таким образом соответственно читать при указании пути тоже можно читать только конкретную какую-то часть которая нам интересна Ну в общем здесь можно ещё будет протыкать партицирование его Достаточно знать Вот на этом уровне просто на уровне логики и того как Ну а на уровне там чтения тоже самое просто путь откуда читать Кость я это наверное уложу себе как группировка при сохранении Ну типа что-то такое по большему счёту и у меня вопрос а можно ли сохранить только например вот

Ну типа что-то такое по большему счёту и у меня вопрос а можно ли сохранить только например вот мы говорили там про оплаты за февраль только их сохранить то есть разбить по ним И только их вытащить смотри тогда насколько э Я видел это работает всё-таки с помощью фильтрации То есть ты берёшь если у тебя уже весь этот датафрейм есть ты его просто фильтрует дельно сохраняешь только февраль вот а то есть указывать э Partition by он берёт в любом случае как бы всё Поэтому в этом смысле он не будет

есть указывать э Partition by он берёт в любом случае как бы всё Поэтому в этом смысле он не будет иметь ээ Ну такой управляющей логики То есть если тебе конкретно сохранить нужно что-то одно тогда это уже самостоятельная фильтрация так Ну по поводу того что может читать Spark СРК может читать очень много всего Собственно как мы вчера видели эти deb может подключаться к базе который вы ему скажете У него много всего Спарк тоже может читать жены текст обычный CSV orc это его формат парке тоже

У него много всего Спарк тоже может читать жены текст обычный CSV orc это его формат парке тоже апачев ский формат Дельта не знаю чей формат общем ВС что вы захотите вот ну паркет наверно такая самая самая популярная вот в машин штука сохранение так это здесь тоже самое здесь это чтение запись тоже про партицирование дава перем [музыка] э обрат S запрос чит мы можем предположить е раз Надо наверно вывести чтобы он был перед глазами нас всё тотже самый с помощью обычного метода мы можем

наверно вывести чтобы он был перед глазами нас всё тотже самый с помощью обычного метода мы можем распечатать первые три строки того что он нам возвращает да то есть берём юзера и говорим поста коло обычный мето здесь есть некоторая такая штука что если я напишу вот так вот то он мне скажет то есть не выведу Шо он мне скажет Ну окей пожалуйста вот значит в спарке принято не принято а в общем так и есть спарке используются такие хто действий с арее с фильтрацией с чем-то е не будет ниче делать

и есть спарке используются такие хто действий с арее с фильтрацией с чем-то е не будет ниче делать то есть он вот здесь вот мы сказали но при этом мы не сказали что мы хотим с этими данными делать Поэтому с просто нам показывает что результатом этой операции будет дай из двух колонок Что будет в этом датафрейме он даже туда ещ не заглядывал он посмотрел что мы к нему об выпот са простой спосо потре что в о вы не ошиблись в сикси вот здесь это естественно метод В каком-то смысле это не очень

потре что в о вы не ошиблись в сикси вот здесь это естественно метод В каком-то смысле это не очень удобно именно для вот такой интерактивной обработки ВН вы там Пите вам выводит сразу пи он вам выводит но Что есть то есть можно обращаться види ЕС мы обратимся конкретной колонке у нас здесь будет написано вот у объекта datame есть атрибут который является объектом типа колонка и название этой колонки мы можем без проблем применять те же самые Алисы которые были и в обычном мы можем сказать

колонки мы можем без проблем применять те же самые Алисы которые были и в обычном мы можем сказать Сразу говорим авило названием и он нам это сделает если мы урм он нам скажет это состоящий из одной колонки под названием содержащий в себе текстовый То есть тут всё довольно логично в спарке также как и Ну кто-то может быть ближайшую аналогию вспомнит Это был модуль который просто содержит в себе дофига функций оттуда можно было доставать вообще всё что душе угодно и чаще всего это там было в

дофига функций оттуда можно было доставать вообще всё что душе угодно и чаще всего это там было в спарке есть такая же штука и Spice spk SQL можно импортировать модуль functions тоже его принято импортировать SF и у него довольно много возможностей то есть видите мы можем даже вот этот вот алиас который мы выше делали немного другим способом можем сделать совершенно по-другому и говорим возьми-ка мне из функций функцию col функция col обращается по имени к определённой колонке А дальше сделаю

мне из функций функцию col функция col обращается по имени к определённой колонке А дальше сделаю тоже самое более привычны мне по крайней мере кажется вот такой синтаксис но по опыту используют Ну собственно Что быстрее сработает То есть если вам нужно например обратиться Если вы потом этот где-то ещ используете кажется что вот это встречается чаще Так давайте мы вот это пока пропустим и не пока точнее а пропустим потому что здесь это сложно объяснить значит смотрите у нас есть такой Ну

пока точнее а пропустим потому что здесь это сложно объяснить значит смотрите у нас есть такой Ну давайте прямо Пока без эксплей сейчас к этому вернёмся просто это тоже очень классная веь за которую можно полюбить что мы делаем в этом запросе Т что мы сделали в этом запросе мы фактически переименовали колонку User и выбрали только её и попросили наш SP показать давайте мы попробуем вот к этому запросу который переименовывает данные вывести exp проо и что написано вот здесь значит с когда

запросу который переименовывает данные вывести exp проо и что написано вот здесь значит с когда выполняет запросы точнее когда вы просите его какие-нибудь запросы сделать он проходит несколько этапов первый этап здесь написано lal детально можно на всякие там индексы не смотреть тут это будет от Базы к к базе отличаться и Вам ни о м не скажет ине собствени ом не говорит хотя со срм о работаю не прям как супе инженер Но вот в таком в роли пользователя значит здесь написано а ну как распарье User

как супе инженер Но вот в таком в роли пользователя значит здесь написано а ну как распарье User As New name и он говорит над чем мы это будем делать он говорит что это будет отношение я напоминаю что в сэй логике есть сущности и связи А всё любой обект который мы получаем после запроса он называется отношением Ну такие они Зануды Для нас это таблица для них это отношение на хабре если некоторые статьи в комментариях почитать Там просто прям войны происходят Да говорите таблицы Нет с точки

статьи в комментариях почитать Там просто прям войны происходят Да говорите таблицы Нет с точки зрения реляционной алгебры это отношения с он был построен Ну короче я буду говорить таблице и типа мы будем это делать над табличкой которая содержит себе вот эти колонки то есть вся табличка и она у нас в паркете где-то записана дальше у нас э вот распарсить что как бы э Спарк понял вообще что происходит то есть как бы он увидел что Да что там нужно сделать какой-то объект для того чтобы над ним

то есть как бы он увидел что Да что там нужно сделать какой-то объект для того чтобы над ним совершить операции есть и всё О'кей то есть этот объект присутствует всё нормально дальше у нас проанализированные логический план вот в этом проанализирован логическом плане а Спарк не просто смотрит на то что вроде все объекты есть и с ними у них есть ти и с ними что-то можно сделать он начинает анализировать как бы что конкретно происходит вот здесь вот он сказал что у нас есть какой-то проект что мы

как бы что конкретно происходит вот здесь вот он сказал что у нас есть какой-то проект что мы хотим переименовать юзера как New name А вот здесь он уже понял что значит наше поле New name будет стрингов тип New name к стрин он понял что это стринг То есть он как бы теперь проанализировал чуть глубже следующее оптимизированный логический план а в оптимизированной логическом плане Ну по сравнению вот с этими двумя здесь отличий нет потому что как бы ничего тут особенно не поменялось мы ниже

вот с этими двумя здесь отличий нет потому что как бы ничего тут особенно не поменялось мы ниже Сейчас посмотрим где они будут оптимизированный логический план это когда компонент спарка И вообще компонент опача который называется каталист посмотрел А можно ли выполнить этот план может быть не так как написал пользователь но в результате получить тоже самое поменяв какие-нибудь операции местами То есть он оптимизировали Мы можем написать очень кривой запрос и потом типа получить какой-нибудь

То есть он оптимизировали Мы можем написать очень кривой запрос и потом типа получить какой-нибудь результат а Спарк поймёт что он проанализирует этот запрос поймёт что мы хотим в результате и в оптимизированной логическом плане скажет Окей А давайте мы вот это там штуки местами поменяем Таким образом мы меньше файлов прочитаем меньше вычислений результат будет тот же вот конкретно сейчас этого не видно мы сейчас ещё один пример разберём и физический план это собственно уже туда видите какие

не видно мы сейчас ещё один пример разберём и физический план это собственно уже туда видите какие файлы будут сканировать короче чами или не чами и будут ли там что-то поменяно местами короче физический план это вот уже к инженерам полностью я на него редко обращаю внимание концептуально понятно что происходит сначала анализируется корректность в целом запроса как обращение к спарку потом анализируется что в этом вопросе запросе нужно сделать и дальше в ой logical Plan показывается Можно ли

что в этом вопросе запросе нужно сделать и дальше в ой logical Plan показывается Можно ли сделать как-то так чтобы результат получился тем же но вычисления произошли эффектив Давайте вот здесь сейчас обратим внимание на то что у нас может присутствовать Order by такой метод Он про него особенно сказать нечего это упорядочивание по конкретной колонке вот поэтому мы сейчас перейдём сразу дальше ну здесь понятно Order by product ID либо DF Select звёздочка тоже самое выбрать всё то есть по

ну здесь понятно Order by product ID либо DF Select звёздочка тоже самое выбрать всё то есть по умолчанию выберется всё и Select звёздочку тоже выберется всё А можно вызвать это как метод конкретной колонки Order by DF product ID desk по умолчанию desk Ask тоже самое что в SQL вот И теперь мы перейдём сейчас к фильтрам и на фильтрах ещё раз посмотрим на вот эти вот планы значит для меня кстати открытием было что оказывается в пансе тоже есть метод фильтр Вот какая-то одна из групп мне сказала

было что оказывается в пансе тоже есть метод фильтр Вот какая-то одна из групп мне сказала об этом а я как дед уже и не успеваю затем Как там всё развивается значит фильтр это что-то очень похожее на вли похо на квадратные скобочки и их Некоторое количество в пае мы можем очень легко отфильтровать и логично по стоимости А да больше 100 пожалуйста смотрим payment больше 100 а хотим чтобы вывелось больше пожалуйста выведется всё что больше 100 А значит здесь тоже самое можем это записать другим

больше пожалуйста выведется всё что больше 100 А значит здесь тоже самое можем это записать другим способом а DF Where ровно то же самое что в SQ Where а DF payment больше 100 тут как бы есть как два лагеря да кто-то говорит что я не понимаю все эти ваши кавычки скобочки и всё остальное кто-то говорит то что по-моему в кавычках Понятно Потому что ясно видно сразу куда ты обращаешься что ты хочешь У тебя просто сама подсветка код за это говорит поэтому тут Выбирайте как говорится сами В каком

У тебя просто сама подсветка код за это говорит поэтому тут Выбирайте как говорится сами В каком синтаксисе печатать и то и то будет работать но тут интереснее вернуться КНУ значит Ну мы можем Давайте сразу поставим и рассмотрим вот такой запрос Что происходит в этом запросе мы говорим что мы хотим выбрать р и и выбрать только то что больше 100 вызываем В смысле чтобы посмотреть что происходит значит рас парный Я не знаю просто Как по-другому перевести это слово потому что я могу говорить

значит рас парный Я не знаю просто Как по-другому перевести это слово потому что я могу говорить проанализирован но этоже вот здесь заня Поэтому если кто-то знает аналог слова распай более благозвучное я буду рад заменить его значит что у нас на первом этапе Что понял Спарк нужно отфильтровать колонка будет payment должна быть больше 100 значит хотим получить в итоге User и payment всё это дело будем производить над вот этим вот объектом паркета дальше проанализированы надо как бы подробнее

будем производить над вот этим вот объектом паркета дальше проанализированы надо как бы подробнее понять что будет происходить User - это string payment - это Double А у нас тут больше 100 - это integer видите что происходит Дальше фильтр говорит что этот пеймент должен быть больше 100 но так как у нас в пейте payment - Это тип данных Double то он говорит больше 100 Но эти 100 Нужно привести S dou то есть раз колонка имеет один тип данных а то с чем мы св [музыка] тж э это целочисленное

S dou то есть раз колонка имеет один тип данных а то с чем мы св [музыка] тж э это целочисленное значение привести значению с плавающей точко так работает собственно самава для начала и то есть здесь он подробнее понял что как минимум нужно будет сделать ВС вот здесь всё тоже самое смотрим дальше оптимизирован логический пла фильтр нужно будет проверить что в payment нет пропущенных значений и что эти пеймент будут больше 100 вопрос Зачем нужно проверять что в пейте не будет пропущенных

и что эти пеймент будут больше 100 вопрос Зачем нужно проверять что в пейте не будет пропущенных значений кто может сказать А может он выт ошибку при сравнении пропуска Иста Да аргумент чуть Чуть более глубокий аргумент Кто ещё подумать может тоже похожий на этот типа ничего не может быть больше чем 100 Ну в таком случае как Сергей сказал мы просто выбрасываем ошибку и да то есть несравнимо тип данных первое операции нельзя делать Нани Ну это тоже самое ну здесь ответ может показаться

тип данных первое операции нельзя делать Нани Ну это тоже самое ну здесь ответ может показаться сложновато и не очень понятным Но зачем нам сравнивать даже если у нас там будет например какая-нибудь Ну предположим такую ситуацию А зачем нам сравнивать если там нет значений в целом то есть давайте мы сначала возьмём не пустые значения а потом будем сравнивать Правильно Потому что если у нас три значения в миллионом датафрейме а остальные какие-то там не знаю не удовлетворяющие но здесь это из Ну

в миллионом датафрейме а остальные какие-то там не знаю не удовлетворяющие но здесь это из Ну Но на самом деле там можно просто Давайте возьмём все значения которые не равны нулю и нормальному нулю не пропущенному а нулю Так может мы тогда сначала понятна логика типа из более Дея операция чем сравнени буквально ткнули в память это бинарная операция Вот и как бы СР Это для себя понял ну в физическом плане Я как могу объясню но просто это никогда не в область моих интересов не входило поэто в

плане Я как могу объясню но просто это никогда не в область моих интересов не входило поэто в общем-то Всё остатся тем же самым Просто у нас остался Ну стал теперь расширенный фильтр Который наш Спарк понял по оптимизации и дальше он говорит что мы будем сканировать паркет значит здесь будут видите Дафи это у нас первоя из фильтр он первый стоит на месте потому что сначала не нужны нулевые а потом боль 100 даль там всякие э фа лежат и Вот видите как бы filters это те фильтры которые наш сказать

боль 100 даль там всякие э фа лежат и Вот видите как бы filters это те фильтры которые наш сказать Спарк как бы ну вот здесь хорошая фраза написано фильтр проталкивает как можно ближе к источнику данных Что это значит Это означает что мы не сначала все данные читаем А потом фильтруем а мы сразу стараемся читать те данные которые у на отфильтровали какой-то там был бы какой-нибудь большой паркет который там часть из него содержала бы нал а вторая часть не содержало бы N то Спарк бы посмотрел Ага

там часть из него содержала бы нал а вторая часть не содержало бы N то Спарк бы посмотрел Ага в этом паркете одни налы его вообще не читаем А вот здесь not N поэтому мы его забираем и вот этот эксплейнер он помогает собственно оптимизировать запросы на самом деле для Эля тоже есть вот эти как они профилировщик запросов Да которые вы смотрите Где у вас что-то дольше всего выполняется начинаете думать как это можно исправить чтобы это было быстрее вот в спарке благодаря модулю каталист это

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

же для того чтобы тся взглянуть как налоги и посмотреть почему там что-то происходит да дадада вот тут как бы Казалось бы работает-то всё равно Всё ну уже по оптимизированного плану Нафига нам тогда знать ну написали и написали в целом как бы да каталист у можно в этом плане доверять потому что на самом деле это сложно но это очень такая детерминированная штука у тебя одна операция быстрее чем другая или они равны по стоимости но в чём здесь заключается смысл если у нас в процессе оптимизации

или они равны по стоимости но в чём здесь заключается смысл если у нас в процессе оптимизации тратится много времени А если мы всё сделали Прямо супер на оборот значит Спарк потратит время на оптимизацию выполнит то он всё равно оптимизированную версию но потратит какое-то время на оптимизацию А если наш Спарк понимает что Ого у меня есть проанализированные план пробегает по этому плану и видит то что оптимизированный план оптимизировать больше некуда то он сразу выполняет его потому что он Ну

что оптимизированный план оптимизировать больше некуда то он сразу выполняет его потому что он Ну как бы идеален с точки зрения спарка И вот во во многих вакансиях довольно часто можно видеть там а ускорение там работы базы данных оптимизация запросов Вот это ровно оно и есть И на самом деле Довольно интересно бывает с этим э работать Но как правило довольно быстро Ну как бы при нашем уровне прикосновения довольно быстро вот такое чтение оно становится уже ну то есть вы уже всё поняли Поэтому

довольно быстро вот такое чтение оно становится уже ну то есть вы уже всё поняли Поэтому чтобы расти дальше вам уже нужно профильное какое-то обучение потому что там это реально как бы одна из такая ну довольно сложившаяся отдельная область собственно оптимизация вот работы с данными Вот но Спарк классный в этом плане вот Ну давайте тогда у нас чуть-чуть осталось времени и материала сечас тто глючит немного значит считает это ВС равно что н от в пансе Ну то есть количество строк Значит стинт

немного значит считает это ВС равно что н от в пансе Ну то есть количество строк Значит стинт также у нас выбирает только уникальные значение обращаться можно как бы ну в смысле можно видеть то что там у нас всего строк 13 Даниль вде возвращаться Кстати кто помнит как в пан только уникальные строки вернуть из датафрейма то это он уникальные строки вернёт прям да да количество Мне казалось это работает только на уровне сиса одной колонки Ну кстати может да Ну да вот я у меня в голове был про

работает только на уровне сиса одной колонки Ну кстати может да Ну да вот я у меня в голове был про если нужно указание колонки Ну вроде нельзя с указанием колонки Ну дай Бог Ну Жаль конечно что нельзя Ну что теперь поделать так да тут ещё вот бывает такая смотрить пому я вызвать у него очевидным образом у нет никакого метода как бы Зачем выхода среди медов здесь не буде просто у Динк как будет он искать фильтрованное значения вот ну искать будет по хэширования история так ленивое ленивое

он искать фильтрованное значения вот ну искать будет по хэширования история так ленивое ленивое исполнение я в принципе сказал что сами трансформации То есть то что у нас ничего не возвращает это будут вот такие операции То есть он скажет окей какой-то датафрейм будет на выходе до тех пор пока мы к этим операциям не добавим кау Save или Show или explain действия выполнены не будут Вот то есть тут надо просто помнить что если вы хотите посмотреть на данные вам нужно обязательно вызвать Ну как

надо просто помнить что если вы хотите посмотреть на данные вам нужно обязательно вызвать Ну как минимум шоу чтобы увидеть что всё там нормально прошло так и кажется нам теперь нужен датасет который мы погрузим из репозитория это собственно будет последняя часть моей речи он находится в Data Airport codes всё он у нас тут появился можем закрывать Давайте посмотрим а мне нужно LS Data Отлично вот появился нам нужный нам датасет Мы можем его прям путь к нему сменить та вот здесь надо написать

появился нам нужный нам датасет Мы можем его прям путь к нему сменить та вот здесь надо написать дата Как прочитать CSV Spark read а первая опция header True У меня есть заголовки в моём C файлы вторая опция а самостоятельно понять схему которая схему данных которые там есть то есть я сам её вручную указывать здесь не буду и говорю что читаю и CSV путь к файлу Вы можете очень часто увидеть это и в пансе уже начинает довольно много где применяться вот такую вот э запись Когда у вас как бы каждый

пансе уже начинает довольно много где применяться вот такую вот э запись Когда у вас как бы каждый метод начинается с новой строки Это называется что-то там когда у вас есть сложный запрос его удобнее писать таким образом потому что он у вас рано или поздно начнёт уходить как бы за пределы там миде символов или вообще куда-нибудь в ячейку улетит которую горизонтально надо прокручивать поэтому часто используют такое написание Я бы к нему Ну как бы стремился бы уже даже сейчас поне мне кажется

используют такое написание Я бы к нему Ну как бы стремился бы уже даже сейчас поне мне кажется ничего сложного нет но довольно наглядно Так давайте мы вот это с сохранением пропустим потому что здесь Мне кроме того что уже было нечего будет сказать и прочитаем наш файл значит он прочитал Всё у нас у нас здесь есть данные об аэропортах значит всяких типах кодов расположения этих аэропортов значит каких-то муниципалитетах GPS координатах и прочее в этом здесь нет дубликатов дальше понадобится я

каких-то муниципалитетах GPS координатах и прочее в этом здесь нет дубликатов дальше понадобится я сразу здесь переделаю ра значит можем вызвать нету дубликатов полных строк пото э то есть вызываем о м сейчас Саша выдвигал гипотезу можем сказать что Верни мне только те где не повторяются вот эти вот значения и можем вызвать здесь надо обратить внимание что это работает Аналогично пансу если я вызову здесь у меня сам объект не изменился я просто как бы посчитал сколько у меня там будет без

я вызову здесь у меня сам объект не изменился я просто как бы посчитал сколько у меня там будет без дубликат можно задавать более сложные запросы Значит мы можем сделать Drop dcat такой же а потом к нему применить где тип аэропорта Small аэропор и код региона международный US видите то есть я могу сразу как бы выкинуть дубликаты отфильтровать и потом что-то ещё сделать Ну это наверное больше похоже вс-таки на SQL Ну хотя и в пансе так тоже можно делать когда мы забираем Динк тамм только

похоже вс-таки на SQL Ну хотя и в пансе так тоже можно делать когда мы забираем Динк тамм только уникальные значения потом пишем Where потом что-то ещё объединяем условия совершенно без без проблем Так а здесь ну здесь кол цена ДП соответственно те убираем какие-то колонки которые содержат не колонки а строки в которых есть хотя бы одно пропущенное значение вот как вы видите у нас пропущенных значений много вот по если брать вообще все колонки в во многих ячейках будут пропущеные значения Вот

много вот по если брать вообще все колонки в во многих ячейках будут пропущеные значения Вот можно сказать то что давайте мы все пропущенные значения удалим но удалим их только те где вся строка пустая вот Прям вся строка состоит из нуло да Тогда мы можем воспользоваться [музыка] Так ну здесь в принципе ВС тоже самое это уже было так у меня осталась последняя вещь на самом деле потому что с группировки агрегации и всё остальное это уже на ваше усмотрение остаётся Давайте Так может перев кто-то

агрегации и всё остальное это уже на ваше усмотрение остаётся Давайте Так может перев кто-то ту вот можем сделать перерыв Если хотите Окей сколько 5 10 как удобно окей Все молчат мне удобно п поэтому Давайте 5 минут А давайте так значит как я упоминал спар есть некоторое количество функци мо импортировать они есть готовые их можно с удовольствием применять вторая вещь Это так называемый функции который пользователь задаёт сам это полная аналогия того что было в пансе но мы начнём с обычных

который пользователь задаёт сам это полная аналогия того что было в пансе но мы начнём с обычных функций давайте мы попробуем Да он плохо здесь выводится можем просто сделать вот так значит здесь есть какие-то множество колонок и одна из колонок Здесь нам е хорошо бы видеть одна из колонок это колонка коор э в текст классическая история у нас есть какой-то текстовый набор данных нам хотелось бы его там превратить во что-нибудь в данном случае в числа Как мы можем это сделать с помощью

бы его там превратить во что-нибудь в данном случае в числа Как мы можем это сделать с помощью встроенных функций Панса спарка мы можем создать переменную который будет называться spit и сказать что мы из будем забирать с функцию э функция будет примена коло КОО мы будем по запятой Там две координаты они разделены запятой широта и долгота и после того как мы это сделаем мы хотим назвать получившуюся Новую колонку именем если мы просто распечатаем этот объект видите spit что мы получили мы

Новую колонку именем если мы просто распечатаем этот объект видите spit что мы получили мы фактически получили какую-то колонку спарка которая будет называ содержит ещ какие-то там преобразования но главное что она будет называться И что это само по себе сейчас просто как бы как тип данных это колонка СР Теперь мы хотим применить собственно Вот эту вот штуку к колонке которую мы хотим разделять мы говорим celect name это название обычная колонка мы не меняем она у на в оригина а через запятую

мы говорим celect name это название обычная колонка мы не меняем она у на в оригина а через запятую как бы вызываем второй объект колонка который является вот этим А вот этот вот колон И вообще объект Split Cord в свою очередь является некоторой функцией и теперь если мы запишем результат в Новую в Новый объект и распечатаем мы увидим что даже можно сразу trate fse мы увидим что теперь у нас это объект который состоит из двух элементов То есть это теперь не просто какой-то текст который записан

который состоит из двух элементов То есть это теперь не просто какой-то текст который записан в колонке А первый элемент до запятой и второй элемент после запятой но там запятая была просто как символом в строке А здесь э запятая обозначает перечисление некоторых элементов и вот эту логику важно понять что довольно часто вам нужно что-то сделать в спарке и вы как бы зада как будто было этото преобразование которое будет возвращать вам колонку но само по себе это на самом деле набор функций если

которое будет возвращать вам колонку но само по себе это на самом деле набор функций если мы хотим сделать Ну теперь перевести всё вот это хотим например в радиа мы можем сделать так мы скажем то что теперь у нас который содержит себе две колонки [музыка] в нашем датасете мы называем И говорим что она должна состоять помните из примеров выше это будет структура которая будет состоять как бы вновь из двух функций Но которые как будто бы уже колонки мы говорим что в нашей новой колонке это

вновь из двух функций Но которые как будто бы уже колонки мы говорим что в нашей новой колонке это перевод в радианы колонки коор первого индекса то есть вот этого ну и так далее по всей колонке и мы назовём её L второй элемент - это переведённые в радианы из колонки р вторые элементы то есть вот эти вот и мы будем называть результатом результат результатом этой функции будет колонка которую мы назовём [музыка] Теперь если мы распечатаем нашу схему Ну во-первых мы видим что здесь они появились

[музыка] Теперь если мы распечатаем нашу схему Ну во-первых мы видим что здесь они появились Да они немного другим здесь обозначаются как бы символом что это уже не список это спарко ся штука Но что мы здесь видим имя текст Так оно и осталось координаты это те самые Сплин которые мы сплитом разделили на две это массив состоящий из двух элементов которые ВС ещ те Мы с ними там ничего не делали и последняя колонка которую мы вот здесь вот создали с помощю метода with это структура Мы мы не

и последняя колонка которую мы вот здесь вот создали с помощю метода with это структура Мы мы не сказали ей прям что это будет массив или что-то такое Это просто какая-то структура которая вот мы которую мы задали Да абстрактная и Она состоит из это FL и из Long это тоже dou чис с плавающей точкой Ну есть вот они вторый и вот таким вот способом это просто второй пример того что их можно на самом деле объединять и комбинировать довольно мощно а в целом мы могли сделать это с помощью такой штуки

деле объединять и комбинировать довольно мощно а в целом мы могли сделать это с помощью такой штуки как F Expression и сказать что у нас будет какая-то структура которая радиа ко 0 ди ко 1 asit но чтобы вот такой штукой воспользоваться вам нужно написать код на SQ и вновь Люди делятся на два типа да кому удобнее методами кому SQ Здесь всё на ваше усмотрение Ну если кто-то помнит в пансе тоже есть метод quy DF quy потом вы кавычки открываете и Можете написать там любой SQL Запрос который

есть метод quy DF quy потом вы кавычки открываете и Можете написать там любой SQL Запрос который относится к вашей табличке и он будет выполнен пандусом это просто работает чуть дольше чем встроенные методы так здесь тоже самое сейчас потерял Да вот А сюда смотрите а предположим что на первоначальном этапе с таким довольно сложно столкнуться но предположим что в спарке у нас отсутствует какая-нибудь функция которая нам нужна это на самом деле зависит там тоже можно и на первоначальном этапе с

функция которая нам нужна это на самом деле зависит там тоже можно и на первоначальном этапе с этим столкнуться конечно как всегда Всё зависит от задачи но предположим спарке или не можем сделать спар какую-то штуку которая будет нашу задачу решать в таком случае мы можем воспользоваться таким штукой под названием - это аббревиатура То есть это функция которая задана пользователем не и а пря вот пользователь должен задать эту функцию пра жим что мы предыдущую задачу хотим решить чисто на носком

должен задать эту функцию пра жим что мы предыдущую задачу хотим решить чисто на носком уровне не нашли мы там функцию диа не нашли наме мы импортируем дополнительные потому что нам теперь нужно будет вручную указывать что у нас будут за типы и пишем очень простую функцию функция называется перевод в радианы на в что мы возвращаем значит мы говорим что latitude - это FL от первого элемента списка умноженный на пи Ден на 180 второй элемент словаря longitude то же самое только проведённое над

умноженный на пи Ден на 180 второй элемент словаря longitude то же самое только проведённое над вторым элементом списка координат А теперь у нас есть функция которая делает по смыслу то что нам нужно но нам нужно задать ей тип точнее выходным данным тип там Мы работали со Спар он прекрасно понимал что будет какая-то колонка что там Может несколько элементов иметь он это делал потому что мы находились его бы поле функционирования здесь мы вручную должны задать Тип и мы говорим что это список из

его бы поле функционирования здесь мы вручную должны задать Тип и мы говорим что это список из двух фив это обычные как бы колонки и и это будут будем отправлять SP RF то есть радианы теперь через User это F udf специальный метод лямда C R от C то есть сюда будут приходить значения на списки которые содержат координаты и мы должны используя вот эту лямбду и используя вот этот вот выходной тип с помощью функции udf Ну как бы поместить в этот объект выше у нас спарко ский был объект А теперь у

помощью функции udf Ну как бы поместить в этот объект выше у нас спарко ский был объект А теперь у нас тоже объект спарв ский но часть которого написана вот эта вот функция RS на чистом питоне на обычном и делаем тоже самое name [музыка] with udf Можем написать будем применять функцию RF к координатам вот к этой колонке ну и применяем Но это мо любимое не запустить еку что получаем то есть мы получили тоже самое И вот в случаях когда не получается у вас спарм ле Или вы не нашли какую-то функцию

тоже самое И вот в случаях когда не получается у вас спарм ле Или вы не нашли какую-то функцию Вы можете е сделать своими собственными руками Но вы должны точно понимать что у вас будет на входе что у вас будет на выходе и так далее плюс таких функций в том что фактически зная питон Вы можете конструировать абсолютно любые функции которые с вашими данными будут делать всё что угодно минус Вы как и в случае в целом с двой должны гораздо более глубоко понимать Какие типы вам вернутся что это

как и в случае в целом с двой должны гораздо более глубоко понимать Какие типы вам вернутся что это будет массив одно значение и так далее И эти ти тоже обязательно задавать вот понятно про udf плюс ф в том что делаем Что хотим минус udf в том что эта функция пройдёт более длинный путь сначала эту функцию поймёт питон потом из питона она отправится в виртуальную машину Явы там с ней что-то произойдёт когда мы пишем не функцию а пользуемся чисто спарко встроенными функциями сразу виртуально Маши

когда мы пишем не функцию а пользуемся чисто спарко встроенными функциями сразу виртуально Маши Java и не происходит Вот этого моста Ну как выше в комментарии написано в Pon будут передавать данные между jav Vir машин и Python вот работает медленней возможностей больше пишем только с парком Ну возможно каких-то там способов чуть меньше Но работает быстрее Саш а у нас сейчас ко RF это да вот он всё вижу Да ну по теории у меня всё после udf обычно группировки все хорошо понимают и без меня буде

вижу Да ну по теории у меня всё после udf обычно группировки все хорошо понимают и без меня буде третий день owb разбирать вопросы Сергей возвращаюсь к стартом вопросу наст Ну в общем о пайс парке то есть это по сути смесь Панса и Эля в удобной оболочке плюс с элементами Java короче что-то очень сложное я пока что не понял то есть это вот нам нужно для того чтобы всё было в одном месте по сути правильно я Поня это это нужно для того когда у тебя количество данных становится промышленным если ты

я Поня это это нужно для того когда у тебя количество данных становится промышленным если ты попытаешься открыть Ну вот Представь что у тебя есть там не знаю гигабайт 40 каких-нибудь данных тебе на них нужно обучить модель где ты будешь открывать эти 40 ГБ Панда скажет до свидания если не Панда скажет до свидания твой компьютер скажет до свидания потому что Он панс попытается загрузить всё это в оперативную память А у тебя например 32 а не 40 не хватит пам пом Вот соответственно как это всё

в оперативную память А у тебя например 32 а не 40 не хватит пам пом Вот соответственно как это всё делать это делать фактически следующий шанс который нужно использовать - это Спарк для спарка 40 ГБ - это вообще ничто просто То есть он без проблем это сделает Но естественно За спарко тоже какие-то должны стоять мощности но он это сделает очень быстро потому что он специально для этого и разработан работает на более быстром языке Java он использует специальная файловую систему которую которая

работает на более быстром языке Java он использует специальная файловую систему которую которая начиналась как диссертация по компьютер Science одного из студентов Вот и в итоге выросла в целую экосистему вот просто это инструмент для обработки больших данных если у тебя дасе 1 ГБ Да пожалуйста грузи его к себе в память локально Используй панс но это не всегда так то есть как правило на каких-то больших проектах используется именно Да я думаю что если идти в какой-нибудь битех типа сбера

больших проектах используется именно Да я думаю что если идти в какой-нибудь битех типа сбера Яндекса и так далее там вряд ли кому-то будет сильно нужен Ну если идти конкретно в табличке Я имею в виду потому что там конечно это будет СР 90% того что вам встретится там Спарк понял спасибо Насть про виртуальную машину сегодня это не упоминалось и как-то сегодня она используется не используется Ну а у меня сейчас где всё у меня всё на виртуальной машине соотвественно Какие действия нужно совершить

у меня сейчас где всё у меня всё на виртуальной машине соотвественно Какие действия нужно совершить чтобы ну я просто иду по инструкции Я не понимаю на каком этапе Что сделать чтобы она использовалась Я правда не понимаю можно поконкретнее Вот у меня сейчас Питер ноутбук развёрнуты на виртуальной машине я подключён к ней она это не локально работает ниб делать то что мы делали вчера и позавчера чтобы как бы к ней подключиться и или не делать Ну первую часть лекции у нас провер поверх того что

чтобы как бы к ней подключиться и или не делать Ну первую часть лекции у нас провер поверх того что эти конечно короче то что в этих двух инструкциях это Ну достаточно или там что-то ещё нужно сделать в терминале Нет просто установку спар я выполнил до лекции но она рабочая вся та инструкция она позволит вам что сегодня нужно а ещ второй вопросик такой философский на тему Ну сам Прагматично на тему того что мы делаем сегодня и завтра и связки этого с и с интервью и с дальнейшей собственно

на тему того что мы делаем сегодня и завтра и связки этого с и с интервью и с дальнейшей собственно работой на работе Вот как сказать Я пытаюсь понять что из этого типа нужно прямо понимать глубоко и забота или скорее мы сегодня знакомимся потому что мы на работе этим будем занима это будет скорее всего мало обзорно Короче вопрос наверно про интервью типа что ожидать какого рода вопросы и так далее ожидать на интервью по этой теме Ну по спарку по статистике просто Обычно говорят там со спарко

ожидать на интервью по этой теме Ну по спарку по статистике просто Обычно говорят там со спарко работали говорит Ну да так знакомился работал Там какую-то простенькую модель обучал вот устанавливал работал видел как там да Но обычно прям как-то супер глубоко не сши что это вки инженерия данных это не не машинное обучение в первую очередь поэтому Я рекомендую к этому относиться к сегодня и завтра скорее как к ещё одному инструменту который кажется неудобным потому что он просто новый для вас и

скорее как к ещё одному инструменту который кажется неудобным потому что он просто новый для вас и потому что есть бэкграунд связанный со слёрм и пандусом вот но не лишним будет немножечко пострадать потому что ну это такая это правда популярная ве не то что вот есть что-то одно и есть другое там довольно часто между спарм и пандусом можно переключаться просто налету вот то есть если мы возьмём здесь напишем например п Install панс Да у нас этот пандас там установится и возьмём какой-нибудь DF

напишем например п Install панс Да у нас этот пандас там установится и возьмём какой-нибудь DF Ну всё всё фшу Да и мы можем вызвать такой метод который звучит как тунс пожалуйста мы вот это уже объект пандуса вот проблема только в том что если вы какой-то объект превратили в пандусов ский обратно в спарко ский его уже не превратить вот поэтому довольно частый такой пайплайн что типа вы в спарке там ну что-то какие-то агрегации большие строите Для чего пандас не тянет а потом когда вы получаете

ну что-то какие-то агрегации большие строите Для чего пандас не тянет а потом когда вы получаете какой-то более компактный объект вы говорите ту панс и потом в Mat plot лип это отправляете То есть как бы всё сильно вычислительное делает Спарк он для этого и придуман А потом когда вы получаете какой-то компактный вариант Вы можете его уже там отправлять в ма plot ну куда угодно В общем по своему пап Угу Серёж А обучение моделей внутри спарка мы сейчас Ещё обсудим по что это домашки бы это вы

пап Угу Серёж А обучение моделей внутри спарка мы сейчас Ещё обсудим по что это домашки бы это вы обут документации а Всё понял Ладно Окей значит Ну тогда не отходя далеко spk всё всё супер и слр подобно в плане алгоритмов и всего остального ку здесь зайти Давайте вот алгоритмы Да алгоритмы Ну куда Down есть Ну всё супер типа элёр подобно Просто непонятно куда нажать куда где ссылки [музыка] [музыка] документация А так это не этот это почему-то вот он наверное второй Да смотрите всё очень

[музыка] документация А так это не этот это почему-то вот он наверное второй Да смотрите всё очень просто есть пайплайн а пайплайн низа торы там логистические регрессии какие-то ещё Ну в общем это просто конкретные примеры пайплайн те самые пайплайн которые вы использовали в элёр дальше смотрим а а extracting transforming selecting tfidf word tow Count vectorizer feure hasher тайр полиномиальное что-то там не знаю что это такое кстати нормализация стандарт вс всё как вы любите можем прийти в

что-то там не знаю что это такое кстати нормализация стандарт вс всё как вы любите можем прийти в классификацию регрессию Логистическая регрессия заходим биномиальная Ну то есть иначе говоря классифицируют примера SC jav [музыка] что-то там читаем какой-то дае Логистическая регрессия ФМ распечатываем коэффициенты Это что Это что такое А это многова Логистическая регрессия у которой не биномиальное распределение в этом Ну неважно Корола коллаборативная фильтрация если кто-то помнит это было уже

распределение в этом Ну неважно Корола коллаборативная фильтрация если кто-то помнит это было уже почти в прошлой жизни Кто помнит что такое коллаборативная фильтрация не буду лукавить 122 Вот это так пом значит коллаборативная фильтрация - это один из методов рекомендательных систем когда мы используем одновременные оценки пользователей и векто которы Ну объекты как это представляют Вот соответственно сингулярное разложение например вот пример коллаборативный фильтрации Короче говоря здесь

сингулярное разложение например вот пример коллаборативный фильтрации Короче говоря здесь есть отличия и с этими с этими отличиями вам придётся столкнуться но придётся как-то их преодолеть а преодолеть их нужно будет для того чтобы решить задачу которое вам собст нужно решить за сегодня и за Завра которая у вас была на нулевой фазе Это задание по цину тому самому вот вам нужно обучить модель которая будет предсказывать вам цены на жильё на том же датасете который у вас был на нулевой фазе что я

будет предсказывать вам цены на жильё на том же датасете который у вас был на нулевой фазе что я сразу хочу сказать не надо рассматривать Спарк как инструмент такой эксплор торный как бы разведки да А давайте построим распределение а как нам пропуски оформить вот так или вот так СРК он больше настроен на то что мы данные взяли агрегировать там и построили модель поэтому когда вы будете брать датасет Возьмите вот здесь написано обработанные данные потому не надо тратить время на заполнение

датасет Возьмите вот здесь написано обработанные данные потому не надо тратить время на заполнение пропусков на всю Вот эту вот штуку это не цель сегодня а Возьмите обработанные данные и прочитайте их с парком по группируется Ну какую-то базовую такой штуку можете взять даже свой ноутбук с нулевой фазы и попробовать его переписать на спарке Вот и потом перейдите к обучению модели посмотрите как данные разделять на обучение валидацию Какие модели и как будут работать вот там это правда несложно

разделять на обучение валидацию Какие модели и как будут работать вот там это правда несложно с этим проблемам не возникает практически никогда ни у кого результат вашей работы - это метрики которые вы скинете завтра после обеда яче постараюсь метрики которые полу нафа там е это с нам не отрубил всё вот и просто сравним Какие метрики тогда получились слёрм Какие метрики сейчас получились с помощью спарка вот и всё Саш Завтра нет да лекций получается завтра лекций нет дасе [музыка] группировки

спарка вот и всё Саш Завтра нет да лекций получается завтра лекций нет дасе [музыка] группировки возьму готово я име без пропусков только пропуски или что я обрата меня готовы к модели Что именно делать врке не такое работай тода с Сколько времени может занять вот эта вот предобработка конкретно в спарке вот если если у вас обработанные это те которые уже нужно просто прочитать и отправить в модель там совершенно нечего делать то тогда берите конечно исходный дасе потому что ну так вы хоть

модель там совершенно нечего делать то тогда берите конечно исходный дасе потому что ну так вы хоть поймёте что там куда в Спарки нажимать Тош нужно оценить степень своего желания обрабатывать типа в спарке и взять что-то промежуточное Я бы на самом деле если кому-то поподробнее интересно Я бы попробовал шем ме по заполнять пропуски это не самая профильная штука для спарка и это бывает довольно больно Вот Но тут как бы у всех по-разному впечатления складываются вот конечная цель - это метрики

больно Вот Но тут как бы у всех по-разному впечатления складываются вот конечная цель - это метрики скажем так метрики на нескольких моделях тоже так же как вы делали А тогда вы только линейные регрессии делали насколько я помню вот спарке можно Каб установить в спарке есть свой собственный градиентный бустинг в спарке даже можно построить небольшую нейронную сеть там не св также как вот поэтому Т смотрите сами просто кто-то там час не может прочитать данные потому что какой-то шаг пропустил

Т смотрите сами просто кто-то там час не может прочитать данные потому что какой-то шаг пропустил там какой-то параметр не задал Да а у кого-то это получается сделать быстрее ещ Да У всех разные кто-нибудь там загрузит с одним пропущенным значением а у него там стоит Сима в МКАДе раз предобработки его типа в пандас опять обработать и потом тир закинуть Ну типа не полностью А вот заполнить пропуски и так далее а потом закину пропу больнее всего заполнять всё остальное там ход энкодеры всякие всё

и так далее а потом закину пропу больнее всего заполнять всё остальное там ход энкодеры всякие всё там это есть это не проблема Ну как обычно типа выбираем Столбцы типа которые мы считаем нужными и так далее да О'кей Ну у меня тогда всё у меня только один вопрос остался

Так ну у нас сегодня по плану собственно две две вещи это установка самой системы управления базой данных и подключение к ней с выполнением запросов я попутно расскажу Ну так об одной маленькой теоретической части о ней просто нужно знать о её существование ито сну оди Малей приме возник про то как подключиться к базе используя Pon вот там заодно если по нему пробежаться станет Ясно почему это не совсем такая профильная вещь для нас значит я буду создавать сервер на селекте в принципе всё тоже

совсем такая профильная вещь для нас значит я буду создавать сервер на селекте в принципе всё тоже самое будет на Яндекс клауде но на се вам придётся там рано или поздно перейти Поэтому я буду показывать на м На следующей неделе я скину вам промокоды уже на се Там тоже будет некоторый бесплатный доступ но Напоминаю что если вы какой-то машиной не пользуетесь её нужно удалять потому что она ест ваши деньги соответственно Каждые сутки какую-то сумму Если вы ничего там не делаете то держать её

ваши деньги соответственно Каждые сутки какую-то сумму Если вы ничего там не делаете то держать её никакого смысла нет я буду называть машину по в принципе там где она будет расположена не сильно важно Москва и кра Хотя здесь есть типа Найроби или там что-то такое но мы не будем пробовать мне в принципе двух виртуальных процессоров достаточно 16 ГБ оперативной памяти тоже нормально 60 гиба локальной памяти Ну можно В смысле жёсткого диска можно сделать побольше 20 хотя и на 16 тоже будет

локальной памяти Ну можно В смысле жёсткого диска можно сделать побольше 20 хотя и на 16 тоже будет работать ну в общем самые главные характеристики которые можно запомнить если будете делать такую же машину процессора 16Б оперативки 20Б SSD ВС остальное тут у меня плюс минус настроено но я скопирую пароль который здесь у меня есть у меня там получается цена в месяц также как в Яндекс клауде там можно перевести на цену в день чтобы представлять себе сколько это будет в целом есть и нажимаем

можно перевести на цену в день чтобы представлять себе сколько это будет в целом есть и нажимаем создать проходит Аналогично теперь Маши внешний IP по которому я должен буду залогиниться по SS и установить постгрес в виртуальной машине значит здесь от сегодняшнего дня есть ээ инструкция мы сейчас пока на неё перейдём собственно чтобы установить постгрес и подключиться к нему на самом деле нужно просто выполнить как бы некоторую последовательность команд у нас нет интерфейса в нашей виртуальной

выполнить как бы некоторую последовательность команд у нас нет интерфейса в нашей виртуальной машине я имею в виду графического поэтому всё то что мы там будем делать с использованием команд терминала Вот Но они в общем не сильно отличаются от того что вы так так или иначе уже видели вроде гето апов либо просто каких-то готовых скриптов которые мы забираем с сайта и устанавливаем даже особенно в них не вникая У меня появляется внешний IP который короче внешний не должен начинаться со 1928 ВС

в них не вникая У меня появляется внешний IP который короче внешний не должен начинаться со 1928 ВС остальное Если рядом вы видите IP который не начинается с него значит это то что вам нужно теперь мне нужно из терминала подключиться к этой виртуальной машине я это делаю той же самой командой которой вы это уже делали ssh Root или SS пробел имя пользователя на Яндексе логин который вы указывали А и Вставляю сюда IP адрес который у меня получен здесь мне задаст вопрос Всегда ли включаться там и

и Вставляю сюда IP адрес который у меня получен здесь мне задаст вопрос Всегда ли включаться там и добавить ли в в известное подключение я отвечаю Yes и Вставляю пароль Настя Да вопрос про имейлы на гитхабе один mail с с на Яндексе соответственно можно заменить яндексовский ме короче Важно ли фолти в один mail Ну например тот который используется на ги который наоборот лучше чтобы они были разные наши ключи Они под email адрес делаются Ну в том числе Да в том числе То есть у вас в идеале для

наши ключи Они под email адрес делаются Ну в том числе Да в том числе То есть у вас в идеале для каждого сервиса там Яндек Cloud один SS github другой SS ключ можно делать под одним потому что SS ключи они зависит от устройства То есть у вас с тем же ссш ключом с другого устройства вы зайти не сможете вот ну можно использовать у нас этих ссш ключей будет там я не знаю один для Яндекса один для гитхаба один для селекте для можно рекомендуешь делать отдель Ну в целом для каких-то чувствительных

один для селекте для можно рекомендуешь делать отдель Ну в целом для каких-то чувствительных задач лучше делать отдельно но это всё зависит от уровня вашей безопасности если у вас там к ноутбуку может 15 человек подходить то тогда лучше конечно делать уникальный ключ для каждого устройства и для каждого сервиса если это чисто ваше устройство то можете чуть меньше Заботиться об этом поды здесь что какая быть связа и не это тотже самый который Вы тотже самый можно лучше все делать то под которым

какая быть связа и не это тотже самый который Вы тотже самый можно лучше все делать то под которым вы зарегистрированы где угодно кото подключаетесь Спасибо значит мы залоги двумя способами есть способ очень простой но он скорее всего потребует дополнительных шагов Мы даже можем вот это вот АТ Ил попробовать скопировать вставить он скажет что нужно для этого сделать ещё что-то поэтому мы перейдём в раздел вот сюда в самый большой скрипт здесь есть кнопочка копировать и просто вставляем его

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

которые постгрес нужны ну короче просто всё в одном после того как мы установим этот постгрес мы скачаем базу данных с помощью Гета это учебный вариант такой она у скачается вфа льем мы пользовались и Вла Значит сразу получаем штуку которая нам говорит о том что никакого у нас нет поэтому мы этот сначала устанавливаем тоже его по дефолту нет внту и будем сейчас разархивировать можно просто набрать теперь он нам говорит что вот это какой-то пакет который тамми рхи вием в принципе этот процесс

теперь он нам говорит что вот это какой-то пакет который тамми рхи вием в принципе этот процесс быстрый А теперь если мы посмотрим на все наши файлы мы увидим что у нас здесь есть архив скачанный и есть SQL файл Да все базы Эля Ну SQ подобные хранятся просто в SQL файлах в которых есть большой скрипт который в реальном времени просто показывает я сейчас добавляю это это такую строку в такую таблицу и так далее есть способы импорта там из CSV из всякого такого То есть тут зависит от того какая у

и так далее есть способы импорта там из CSV из всякого такого То есть тут зависит от того какая у вас задача Что вы хотите теперь нам нужно скопировать этот файл в папку в который его сможет видеть пост для этого мы используем команду CP название файла здесь мы меняем на демо демо medum 2017 08l спирова нам нужно сде это две Теперь у нас есть файл который видит по нам нужно этот файл добавить в базу данных по чтобы работать с этой базой мы должны быть как бы пользователем который может

в базу данных по чтобы работать с этой базой мы должны быть как бы пользователем который может взаимодействовать с этой базой То есть сейчас я как бы суперпользователь администратор Root Но для работы с базой Мне нужно залогиниться под пользователем этот пользователь созда при установке базы данных есть про который умеет который имеет права работы с этой базой поэтому мы логине Теперь у меня имя пользователя изменилась на постгрес это означает то что я сейчас залогинен под этим пользователем и

пользователя изменилась на постгрес это означает то что я сейчас залогинен под этим пользователем и теперь с помощью уты psql я могу как бы зайти в этот в эту подключиться к постгрес и просто удостовериться что всё всё что у меня там ну что она у меня установилась и она у меня работает psql - Это консольный утилита работы с базами данных какие-то простые вещи можно делать с помощью неё но в целом а как бы с через неё даже можно писать запросы Почему этого никогда не делают потому что это

целом а как бы с через неё даже можно писать запросы Почему этого никогда не делают потому что это Представьте себе что вы пишете питонов ский скрипт в командной строке технически его можно написать без проблем пишем Python и начинаем писать свою программу ни подсветки кода ни автоматических отступов ни дополнений ничего нет поэтому технически такая возможность есть Но обычно вот этим psq делают просто какие-то системные вещии Мы в psq скажем что мину D - это означает ключ к какой базе

делают просто какие-то системные вещии Мы в psq скажем что мину D - это означает ключ к какой базе подключиться наша база называется демо и мину означает каким пользователем подключиться Мы подключаемся под пользователем пос этот пользователь Это теперь как бы имя пользователя внутри самой базы оно там всегда пользователь в базах всегда есть он там появляется по умолчанию теперь нам говорит что мы не можем этого сделать потому что у нас нету этой базы Ну на самом деле Да мы файл переместили

мы не можем этого сделать потому что у нас нету этой базы Ну на самом деле Да мы файл переместили туда где постр её видит но при этом пропустили шаг добавления чтобы добавить базу мы должны выбрать вызвать psql сказать что из файла ми п SQL мы должны с помощью пользователя pog добавить эту базу то есть вот на этом на этом шаге мы копировали как бы в системную папку постгрес А вот этой вот командой она в инструкции тоже есть вот она мы добавляем эту базу из файла ключом мину F в pog и вот такой

она в инструкции тоже есть вот она мы добавляем эту базу из файла ключом мину F в pog и вот такой процесс вы будете видеть Когда вы добавляете какой-то какую-то SQL базу в любую на самом деле базу данных mysql там mssql потому что фактически Это большой SQL скрипт который просто заполняет вашу базу он буквально бежит прямо по строкам и говорит какую таблицу создать Какую информацию в эту таблицу добавить и так ну в общем всё в таком духе это может в зависимости от объёма базы это может занимать

и так ну в общем всё в таком духе это может в зависимости от объёма базы это может занимать разное время то есть если у вас база огромная это может занять несколько суток просто потому что это выполнение как бы кода обычного вот всё закончилось тут не будет никаких там сделано Окей всё такое Просто если нет никаких ошибок значит всё прошло успешно и попробуем ещё раз подключиться к нашей базе мы напишем ми мину тоже [музыка] самое заходим пожалуста Вот это видите шестнадцатой версии postgres

напишем ми мину тоже [музыка] самое заходим пожалуста Вот это видите шестнадцатой версии postgres значит можно написать Help и на обозначение базы данных Вот это означает что мы сейчас находимся в нашей базе данных мы можем набрать команду например DT и увидеть какие у нас здесь есть таблички но в целом Если всё прошло ровно то О'кей вот этого достаточно Если Вы заходите и можете проверить с помощью ДТ список ваших э табличек всё классно можем набрать СШ Q если кто-то кроме сержи ещ работал

ДТ список ваших э табличек всё классно можем набрать СШ Q если кто-то кроме сержи ещ работал когда-то в виме то с там тоже вот все команды через СШ и видимо фанаты как-то связа ску выходим и всё теперь у нас есть сервер с установленный по Но к этому серверу мы не можем подключиться Извне потому что по умолчанию Когда вы постс устанавливаете у вас все входящие подключения с других адресов закры Извините дан е сделать открытой для внешних подключений нужно перейти к следующему этапу Давайте по

Извините дан е сделать открытой для внешних подключений нужно перейти к следующему этапу Давайте по этому шагу Какие вопросы луба если например назвать постс тогда в шестом седьмом и восьмом шаге там вместо поса что-то то что мы написали будет где вот тут шестой Да в плане Но постс - это имя моего пользователя а постс всё что стоит после собаки это Имя моей виртуальной машины я её просто тоже назвал постс Если вы назовёте Date то у вас будет здесь по собака ой Поня тут В некоторых случаях если

постс Если вы назовёте Date то у вас будет здесь по собака ой Поня тут В некоторых случаях если там бывают такие виды подключений у вас даже здесь может быть адрес не название машины а айпишник к которому Вы подключены Окей идём Дальше второе - это собственно настройка de это на самом деле не только в общем смысла в том что нам нужно сейчас для начала настроить постс чтобы этот постс мог принимать подключение из Извне вот что нам нужно сделать т вход информация нужно из PS То есть тут написано

подключение из Извне вот что нам нужно сделать т вход информация нужно из PS То есть тут написано пользователь по умолчанию для того чтобы задать ему там пароль и так далее мы должны залогиниться под этим пользователем су ми ми но тут я уже залогинен Да и потом зайти в psql То есть если бы у меня была ситуация Вот такая я про под рутом то я бы сначала написами дальше написал бы и теперь мне нужно с помощью команды по то есть задать пароль для пользователя постс задать ему пароль пишем мне

нужно с помощью команды по то есть задать пароль для пользователя постс задать ему пароль пишем мне приглашение типа задать ему пароль с запомните пароль который вы здесь вводите самое простое и самое быстрое Что может быть можно будет сделать - это просто удалить виртуальную машину и начать всё заново то есть этот пароль ниоткуда нельзя будет достать всё после этого СШ Q выходим пишем и выходим Exit выходим в обычного рука теперь мне нужно отредактировать системные файлы постгрес чтобы иметь

Exit выходим в обычного рука теперь мне нужно отредактировать системные файлы постгрес чтобы иметь возможность подключаться Извне Для этого мне нужно отредактировать Вот такой вот файл его можно отредактировать несколькими способами два самых популярных - это редактор Vim или встроенный редактор NAN я пользуюсь нано а просто более привычно исторически так сложилось А мне нужно найти в этом файле строку которая закомментировать как Listen addresses Local Host раскомментировать её вот вот эта

строку которая закомментировать как Listen addresses Local Host раскомментировать её вот вот эта строка Listen addresses и на данный момент у меня вот в такой конфигурации подключения принимаются только с этой же виртуальной машины больше ниоткуда но я сюда напишу звёздочку это означает то что подключения будут приниматься вообще со всех айпишник в идеале такого не будет когда вы будете работать Потому что если ваша база данных хранит какие-то чувствительные данные то соответственно у вас будет

что если ваша база данных хранит какие-то чувствительные данные то соответственно у вас будет какой-то пул адресов с которого можно подключаться настраивать это вам практически 100% не придётся потому что это делают безопасники разработчики БД и так далее Вот но просто на всякий случай знаете что это должна быть последняя звёздочка в этой строке в вашей жизни больше её скорее всего никогда быть не должно теперь этот файл не нужно сохранить для того чтобы его сохранить я должен нажать ctr У меня

должно теперь этот файл не нужно сохранить для того чтобы его сохранить я должен нажать ctr У меня появляется вопрос сохранить я нажимаю Y и нажимаю сохранить в этот же файл нажимаю enter то есть если вы редактирует Nano процесс сохранения выглядит из трёх шагов Ctrl X Yes то есть Y Enter сохранить в тот же файл Второй файл который мне нужно отредактировать это файл PG hba это тоже системный файл постгрес Заходим в него и мне нужно туда добавить вот такую вот штуку она мне позволяет там без

постгрес Заходим в него и мне нужно туда добавить вот такую вот штуку она мне позволяет там без шифрования принимать всякие соединения мы просто спускаемся в самый низ этого файла нажимаем давайте это скопирую а вставляем нажимаем Ctrl X Y Enter тоже самое Теперь у меня изменено два конфигурационных файла и также как это всегда происходит в убунте я после этого должен перезагрузить этот сервис я изменил его системные параметры поэтому я его должен перезагрузить суда из-под администратора System

его системные параметры поэтому я его должен перезагрузить суда из-под администратора System ctl - это ули System Control который управляет всеми процессами Ну всеми такими службами в унту рестарт пос запускаем и это очень быстро Должно рестартнуть всё то есть тот шаг который сечас мы сделали что мы сделали Мы задали пароль пользователю для чтобы иметь возможность подключаться Извне мы разрешили подключение Извне по айпишник и мы задали ещё второй пункт он связан с шифрованием Ну в общем ещё

подключение Извне по айпишник и мы задали ещё второй пункт он связан с шифрованием Ну в общем ещё раз разрешили подключаться всем Откуда бы то ни было после того как мы эти файлы отредактировали Мы рестартнуть всегда в унту Ну в общем много раз Вы видели в других операционных системах тоже самое перезагрузить после того как настройки какие-то глубокие поменялись вопрос по этой части есть вопрос такой есть чуйка что здесь много чего может пойти не так и возникнет Я не знаю в том числе депрессия

есть чуйка что здесь много чего может пойти не так и возникнет Я не знаю в том числе депрессия сегодня короче Чтобы избежать чтобы её избежать можно какие-то есть ли что-то ещё ну где ребята спотыкаются обычно да есть 100% ошибок в Ну как бы в настройке поднятии всего этого заключается в том что пропущен какой-то пункт Я говорю об этом что точно пропущен какой-то пункт мне в ответ говорят что нет 100% я уверен что я его выполнил вот не может быть других вариантов я чаще всего говорю что надо

100% я уверен что я его выполнил вот не может быть других вариантов я чаще всего говорю что надо удалить виртуальную машину и начать заново если второй раз это не работает мы созваниваемся А ну как бы как в детском саду мне шарят экран показывают как всё делают и чудесным образом это начинает работать Ну это естественно только потому что мы включили Зум и подключили меня никаких других причин не может быть Вот поэтому нет Если всё делать по инструкции работать Всё будет Ну как видите пока всё

может быть Вот поэтому нет Если всё делать по инструкции работать Всё будет Ну как видите пока всё работает Как это нужно сделать мем с тобой с кичем на эту тему не это Это всегда так действительно Ну как бы всем известно что ЗМ и как бы какой-то собеседник они всегда повышают шанс того что забо просто внимательность Нуж нужно Внимательно читать инструкцию по шагам её выполнять Ну и тем более у вас ещё плюс видео будет в котором всё тоже самое разобрано поскольку подвод короче это всё что имеет

ещё плюс видео будет в котором всё тоже самое разобрано поскольку подвод короче это всё что имеет смысл сказать в ответ на вопрос что может пойти не так или что-то ещ может быть есть Кроме слов [музыка] сложнее бывает зарегистрироваться где-нибудь на селекте людям которые там не в России или на Яндексе потому что у них эсэмэски там верификационный не всегда приходит вот а так тут проблем вообще я не помню чтобы на этом этапе у кого-то проблемы были Спасибо так Костя скажи пожалуйста если сразу

не помню чтобы на этом этапе у кого-то проблемы были Спасибо так Костя скажи пожалуйста если сразу по взрослому будем делать Вот например из telam бата обращаться в базу данных регулярно там Возможно даже в онлайн формате Что нужно взять айпишник вернее Так что нужно прописать вместо локал Хоста вместо локал Хоста там в вот этом файле по там есть прям перечень того что вы можете указать это может быть конкретные IP адреса через запятую это могут быть какие-то диапазоны IP адресов с которых

быть конкретные IP адреса через запятую это могут быть какие-то диапазоны IP адресов с которых будет осуществляться подключение в принципе там если у вас в одной экосистеме Я имею в Ви Яндекс либо sel расположены две машины в одной локальной сети то есть они как бы там внутри в Облаке в одной локальной сети то можно даже не открывать подключение Извне а просто сказать что вот в этой локальной сети ты принимаешь подключение потому что у меня на одном виртуальном сервере бот а на другом пост и

ты принимаешь подключение потому что у меня на одном виртуальном сервере бот а на другом пост и вот ты вот от этого Бота или вообще из этой локальной сети принимай подключение вот там нужно посмотреть как бы как конкретно эту конфигурацию локальной сети в постгрес указывать но тут как докумен гу будет просто за глаза примеров этих очень много о я что-то не подумал что они могут в одной плоскости лежать в принципе лежать удобства ВС Спасибо Сергей а ну я как раз и хотел спросить обычно делают

лежать в принципе лежать удобства ВС Спасибо Сергей а ну я как раз и хотел спросить обычно делают одна машина один сервис или можно на одну закинуть всё в контейнерах и оно там Пусть потому что здесь ещ вопрос масштабирования у тебя может быть база которая просто условно содержит справочную информацию она не разрастается да то есть она у тебя есть вот просто отдаёт что-то и отдаёт тогда в принципе можно держать и на одной виртуальной машине с там двумя контейнерами к примеру Вот Но если у тебя

можно держать и на одной виртуальной машине с там двумя контейнерами к примеру Вот Но если у тебя подразумевается что база которая постоянно разрастается то соответственно она должна быть расположена на каком-то сервере на котором ты не будешь сталкиваться с ограничением места потому е тея п то у тебя докер там с ума сойдёт как бы и сама виртуальная машина перестанет вмещать поэтому общего тут такого принципа нет зависит от зада понял Костя Вопрос такой тоже смертный А если мы масштабируемая а

принципа нет зависит от зада понял Костя Вопрос такой тоже смертный А если мы масштабируемая а по количеству запросов то есть по пользователям а то здесь что нам по факту нужно параметр оперативки увеличивать на сервере оперативка процессор Да окей так луй У меня походу рука не выругалась или это тот самый знак который должен точно зна так хорошо на самом деле мы в принципе-то уже всё сделали то есть у нас крутится постгрес он рестарта нулся Мы даже можем посмотреть syl статус или может быть

есть у нас крутится постгрес он рестарта нулся Мы даже можем посмотреть syl статус или может быть суда надо написать Нет он не хочет А вот он активный тут написано когда он стартанул где там его всякие файлы лежат Ну в общем всё окей он он работае теперь нам нужно подключить база доступна Извне я в принципе ну обычно не останавливаюсь на этом потому что ну просто Нафига мне psql просто ставить для теста Я могу тоже самое сделать в деби Вере просто нажать тест Connection без всяких куэй

для теста Я могу тоже самое сделать в деби Вере просто нажать тест Connection без всяких куэй установленных на всю систему поэтому мы попробуем это сделать сразу из де бивера здесь есть картиночка я сегодня обновил утром deiv не знаю что сейчас откроется может быть придётся сейчас думать самому но нет как хорошо комьюнити Эди не меняются ни по своей прекрасным интерфейсам ни по чему другому так да у меня у меня эти ошибки потому что у меня здесь висит подключение к старой базе которой от

так да у меня у меня эти ошибки потому что у меня здесь висит подключение к старой базе которой от предыдущей группы у вас таких ошибок не будет что мы делаем нужно создать новое подключение давайте мы сейчас сначала подключимся а потом я про пару слов скажу Хотя наверное сейчас это надо сделать значит Почему Потому что с базами данных можно работать также как и со всем остальным двумя способами можно использовать какие-то готовые утилиты для этого я имею в виду с графическим интерфейсом

можно использовать какие-то готовые утилиты для этого я имею в виду с графическим интерфейсом удобные и так далее к которым относится deiv и даже его Community Edition весьма неплохая второй вариант - это соответственно использовать какие-то либо профильные инструменты например Это инструмент PG Admin для постгрес Я не понимаю зачем люди добровольно работают в PG админе как бы по опыту с другими подобными платформами 5G Admin это просто лет 30 назад Вот такое было бы круто Вот Но наверно Может

подобными платформами 5G Admin это просто лет 30 назад Вот такое было бы круто Вот Но наверно Может быть там какие-то есть Киллер фичи Просто с которыми я не сталкивался В смысле наверняка они там должны быть потому что других причин я не могу назвать либо с базами можно работать полностью через консоль полностью через консоль можно работать если вам это очень нравится и вы готовы это делать мне это не не очень нравится Поэтому я буду показывать пример именно на деби вере его плюс в том что он

это не не очень нравится Поэтому я буду показывать пример именно на деби вере его плюс в том что он поддерживает много разных баз мы тут видим здесь есть базы которых я название которых я даже собственно не знаю и логотипов не видел например вот какая-то база есть до Я не знаю что это такое курит Я тоже не знаю что это такое но в общем смысл в том что он довольно универсальный Как вы видите он может подключаться к огромному количеству источников в том числе конечно же к постгрес Мы выбираем

может подключаться к огромному количеству источников в том числе конечно же к постгрес Мы выбираем подключение к постгрес нажимаем далее И у нас открывается вот такое вот окошко а сейчас я попробую масштабировать Мне кажется довольно плохо видно скрин [музыка] Reader он просто почему-то даже не даёт мне масштаб сделать побольше Ну мне мне например нормально видно Можно спросить у ребят Да всё норм можно Зуме увеличились что О'кей хорошо А значит у нас тут несколько вариантов подключения Э в

норм можно Зуме увеличились что О'кей хорошо А значит у нас тут несколько вариантов подключения Э в плане того что там хост или URL Ну мы выберем URL и вот сюда теперь вместо локал Хоста мы должны подставить тот айпишник который у нас был выдан виртуальной машиной То есть если мы придём вот сюда у меня пост крутится вот здесь значит этот айпишник я должен подставить в адрес дальше у меня через двоеточие указан порт все понимают что такое порт Или надо объяснить что такое порт лучше пояснить Ну

указан порт все понимают что такое порт Или надо объяснить что такое порт лучше пояснить Ну в общем смотрите у вас на одной виртуальной машине может крутиться несколько сервисов то есть мы например прямо сечас устано мы можем установить наме мы можем установить туда е один Мы можем поставить туда и всё это будет крутиться на одной машине но при этом если мы будем обращаться по ашку дальше нужно будет как-то понять вот если мы пришли по этому IP нам какой сервис должен ответить если аре должен

будет как-то понять вот если мы пришли по этому IP нам какой сервис должен ответить если аре должен отвечать используется штука которая называется порт потому что мы можем сказать Стрим литу что ты должен отвечать одному например Стрим литу мы говорим ты будешь отвечать только на те запросы которые приходят на порт 88.000 пи мы говорим ты будешь ты На том же самом айпишник крутишься Но будешь отвечать на запросы которые приходят например на порт 8080 и за некоторыми сервисами некоторые порты

на запросы которые приходят например на порт 8080 и за некоторыми сервисами некоторые порты закреплены Ну то есть постс - это огромная масштабная разработка Поэтому у неё как бы закреплён за ней порт 5432 то есть скорее всего если вы подключаетесь к постгрес вы будете подключаться к по порту 5432 потому что в знак уважения индустрия выделила постгрес порт 5432 и он является для неё дефолтным это не означает что мы не можем поменять порт и хотим подключаться например там по порту не знаю 6 541

не означает что мы не можем поменять порт и хотим подключаться например там по порту не знаю 6 541 мы можем это поменять но по дефолту постс всегда на порту 5432 Вот соответственно порты нужны для того чтобы иметь возможность маршрути Зро запросы внутри одного адреса пришёл запрос один сервис на таком порту слушает другой на таком третий на таком вот ну это можно там высокоуровневые аналогия что это как номер квартиры в доме у вас может быть какой-то многоквартирный дом и номер квартиры это

это как номер квартиры в доме у вас может быть какой-то многоквартирный дом и номер квартиры это порт в который Вам нужно прийти как бы адрес один но внутри ещё есть некоторая развилка А значит мы выбираем собственно что вставили IP адрес порт оставляем без изменений он дефолтный но наша база наша база будет называться демо потому что мы её туда самостоятельно добавили поэтому здесь мы заменяем по намо тут на самом деле там URL в принципе можно выбрать и то и то это просто для удобства сделано

намо тут на самом деле там URL в принципе можно выбрать и то и то это просто для удобства сделано насколько я вижу Потому что можно здесь тоже самое написать с учётом Хоста и видите адрес будет ровно тот же самый никаких изменений нет то есть тут просто если вы Ctrl C Ctrl V здесь если вы выводите информацию вручную А в этой в этой ссылке чего ещё можно объяснить jdbc Это собственно драйвер подключения к базе он может использу дра gbc чтобы подключиться к посту подключался бы я к mssql там было

к базе он может использу дра gbc чтобы подключиться к посту подключался бы я к mssql там было бы написано jbq просто разные движки баз данных переходим дальше У меня имя пользователя постс в моей базе и я должен ввести тот самый пароль который я вам гориго забывать Виго вво на довольно длинном интервале находится Поэтому лучше его записать либо сделать таким который Вы не забудете Ну и теперь собственно всё здесь есть кнопочка тест соединения И мы можем увидеть что тест соединение прошёл Окей

всё здесь есть кнопочка тест соединения И мы можем увидеть что тест соединение прошёл Окей После этого мы нажимаем Окей готово и у нас вот здесь появляется развёрнутая можем вот этон [музыка] Всё окей он подключился к базе данных демо мы можем зайти в схемы здесь очень много всего от того что вам вряд ли понадобится по крайней мере для устройства на работу потому что база данных - это отдельный огромный мир поэтому мы пробежимся на том что может быть полезным Ну если мы зайдём в схемы и вот это

мир поэтому мы пробежимся на том что может быть полезным Ну если мы зайдём в схемы и вот это наша база bings мы можем здесь увидеть диаграмму видите это собственно та же самая схема данных которую мы видели и вчера она здесь более сложная то есть ну потому что это такая база Она хоть и небольшая по объёму Но к реальности по структуре она ближе как бы ближе к такой промышленности эта база данных связана с перелёта бронирования билетов аэропортами значит вот очень похоже на то с чем вы вчера

связана с перелёта бронирования билетов аэропортами значит вот очень похоже на то с чем вы вчера работали только на ну чуть-чуть на стероидах она конечно не полностью соответствует тому что используется в аэропортах авиакомпаниях но всё равно близко А собственно Вот так эта база выглядит мы можем попытаться к этой базе написать какой-нибудь запрос чтобы этот запрос выполнить мы можем вот здесь нажать кнопочку SQL у нас откроется вот такой вот редактор Ну какую тут табличку есть давайте мы

нажать кнопочку SQL у нас откроется вот такой вот редактор Ну какую тут табличку есть давайте мы какую-нибудь табличку возьмём например aircrafts Data Костя вот эти точечки тут означают что это как вчера значит база данных у нас точнее табличка конкретная Давайте начнём писать видите здесь он мне не исправляет на ка поэтому тем кто у кого вчера мизинец устал держать shif тот сегодня можем Aircraft Data и видите он сразу добавляет мне АС автоматически Вот это довольно удобно Потому что если ваш

Data и видите он сразу добавляет мне АС автоматически Вот это довольно удобно Потому что если ваш таблички названы человеческими именами и понятно то эти псевдонимы они всегда будут отличаться друг от друга и он будет автоматически довольно неплохо их создавать Ctrl Enter запускаем и видим что вот так вот у меня выглядит aircrafts Data табличка код собственно судно его название в такой сложной структуре с которой вам кстати сегодня придётся немного поразрядно не очень интересен если мы

структуре с которой вам кстати сегодня придётся немного поразрядно не очень интересен если мы посмотрим на эту табличку в схеме мы увидим что здесь все те же самые поля три поля код судно модель и что бы он не означал А собственно всё вот тут как вы видите можно совершенно без проблем писать запросы их можно там я не знаю как-то изменять Вы можете этих редакторов открыть несколько Вы можете сказать что хочу новый скрипт открыть у вас будет ещё одно окошко открыто То есть тут это такой

сказать что хочу новый скрипт открыть у вас будет ещё одно окошко открыто То есть тут это такой полноценный инструмент написания запросов и вот такого анализа базы данных а что интересного на этой схеме ещё есть здесь есть вот такие вот таблички которые как бы не связаны между собой но на их Как сказать на их пиктограмма изображено нечто напоминающее глаз Это очень маленькая штука я а вот я их могу увеличить вот значит вот такая штука называется представлениями или материализованные что это

могу увеличить вот значит вот такая штука называется представлениями или материализованные что это такое довольно часто Когда вы работаете с базой данных у вас может возникнуть ситуация в которой вы например постоянно для запросов [музыка] джойтек могли с этим сталкиваться когда писали запросы Когда вы переходите к следующей задаче и такие тут опять тот же самый джойн который был в предыдущей задаче Понятное дело что каждый раз это считать это процедура накладная дорогая что там ну идентифика

Понятное дело что каждый раз это считать это процедура накладная дорогая что там ну идентифика из одной таблички что-то там пристыковать по услови отфильтровать и вс прочее Для таких случаев часто разработчики базы данных это никак не связано ни с машинным обучением вообще близко даже разработчики баз данных в таких случаях когда видят что по какая-то операция очень сто выполняется и нагружает эт и представление фактически эти представления это просто сохранный SQ запрос сохранённый результат

и представление фактически эти представления это просто сохранный SQ запрос сохранённый результат SQL запроса который раньше постоянно [музыка] нагружает SQL запрос и сохрани стамм представлению вам не нужно Джони а оно как бы у вас уже готово то есть тот самый условный джойн который вы и в предыдущие две задачи назад и три задачи назад использовали те теперь сохранён Но на самом деле буквально для вас как для пользователя как отдельная табличка и вот эти они довольно часто экономят просто как

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

маленькие будет очень мало связей но в таком случае обычно делают представления в целом как бы мой опыт работы с представлениями он был примерно такой была база из которой нужно было писать очень большой запрос иче РС мки для того чтобы оттуда достать тогда речь шла о Короче как сказать короче сетевой сетевом взаимодействии вот облачной структуры то есть Мы собирали данные по всем протоколам tcp http Короче всё подряд все там восем уровней но мы не все использовали мыше Ну неважно И всё это

http Короче всё подряд все там восем уровней но мы не все использовали мыше Ну неважно И всё это хранилось в базе и чтобы всё это снить А чтобы вы понимали там накопление Ну вот при сборе вот этой информации там типа гигабайт 8 накапливается минуты за три-четыре Вот и соответственно это нужно было всё как-то хранить и потом если вы хотели это всё Джони Ну понятно какой там какие вычисления и в итоге там тот кто отвечал за эту базу мы просто попросили можешь ты сделать представление в одной

в итоге там тот кто отвечал за эту базу мы просто попросили можешь ты сделать представление в одной табличке вот какая у неё должна быть структура Сохрани это представление Таким образом мы будем обращаться к этому представлению и не буде вот этой вот ба если мы к этому представлению обратимся Вот Обратите внимание оно здесь называется если мы к нему обратимся оно будет выглядеть для нас звёздочка То есть это такая же табличка видите это просто обычная табличка изм просто в рамках такого

То есть это такая же табличка видите это просто обычная табличка изм просто в рамках такого примера чтобы они были Ну вот тутка можем тоже посмотреть на него видите чем вот это представление отличается от оригинальной таблички в том что если бы я обращался к табличке у меня там нуже бы постоянно Я бы каждый раз должен был бы обращаться в этот словарь и доставать русский язык например Потому что я там для русскоязычной аудитории делаю Это и оказывается что можно сделать представление которое

я там для русскоязычной аудитории делаю Это и оказывается что можно сделать представление которое будет очень лёгким очень маленьким но зато моментально будет меня лишать целая операции зайти в словарь достать название на русском а если этих записей было бы там 2 милна то в таком случае 2 мл операций выдерни из словаря минус что довольно приятно вот собственно про представление на самом деле нужно знать что они существуют и существуют они для того чтобы Вы могли более оптимально

самом деле нужно знать что они существуют и существуют они для того чтобы Вы могли более оптимально взаимодействовать с базой данных в том числе не нагружая её для того чтобы сделать представление используется специальный запрос в базе данных который называется Create viw маловероятно вас допустят сразу к созданию представлений Я имею в виду на работе Вот потому ве нибудь написать не так и что-нибудь где-нибудь ут но в целом Это хороший и полезный инструмент То есть это прям такая штука которую

где-нибудь ут но в целом Это хороший и полезный инструмент То есть это прям такая штука которую можно и просить сделать и потом самому делать если вам это будет нужно вот а делается также и что вы хотите в этой табличке и поверу у меня на самом деле Наверно всё намс ну диаграм снм послед соответственно Если у вас есть такая возможность подключаться к этой базе и там я не знаю как отсюда например что-нибудь выгрузить вот удобство заключается в том в том числе что вы вот здесь вот нажимаете

что-нибудь выгрузить вот удобство заключается в том в том числе что вы вот здесь вот нажимаете экспорт данных и пожалуйста получили результат запроса всё он Нас устраивает CSV db Unit это X HTML SQL куда хо жа эти данные вот это очень удобно вы буквально как бы в таком в онлайн интерактивном можно сказать режиме пишете запрос потом понимаете что это датасет который Вам нужен всё О'кей он работает и загружаете его идёте в свой многоуважаемый любимый панс или куда-то ещё и работаете уже в той

и загружаете его идёте в свой многоуважаемый любимый панс или куда-то ещё и работаете уже в той инфраструктуре которая вам более близка Вот теперь точно поди биру всё уба автоматически убирает и както механически повтори пожалуйста я не услышал автоматически Просто когда команду это делаешь ти создать он сам вытаскивает не ты естественно ты вот в этом Create VI ты пишешь полноценный SQL запрос в том числе с вытаскивания из словарей Просто ты это делаешь Один раз сам-то он конечно не будет

в том числе с вытаскивания из словарей Просто ты это делаешь Один раз сам-то он конечно не будет делать он же не чат п я про на домашку сегодня воз до этого не дошли но вдруг дошли вот третья страничка где SQL там в конце написано сформируйте датасет Вот это всё мы сейчас будем проговаривать это да а а что там проговаривать давайте я я не делала такое мы не делали такое никогда сформировать датасет Но типа вам нужно написать SQL запрос типа по которому ну который будет отдавать те данные на

Но типа вам нужно написать SQL запрос типа по которому ну который будет отдавать те данные на которых можно обучить модель предсказания цены Ну просто смотрите вы сидите на работе вам говорят нам нужна модель которая будет оценивать склонность пользователя покупать Точнее я не знаю пользоваться например акциями У вас есть база данных вы приходите в эту базу данных будете дела какие-то признаки которые по вашему мнению помогут вам решить эту зада то здесь задача на уровне сделать или набор для

по вашему мнению помогут вам решить эту зада то здесь задача на уровне сделать или набор для создания таблички и сохранить CSV чтото такое Да конечно вы тут ничего запредельного нет Вы просто должны понять Какие признаки есть в этой базе которые я потом обработаю отправлю в модель она мне скажет А вот этот билет стоит 10.000 потому что это там са вот такой аром и вот такой Класс Класс билеты То есть Вам нужно обычно вы такие PS А теперь Вы должны посмотреть на этот дасе естественно я на нём

есть Вам нужно обычно вы такие PS А теперь Вы должны посмотреть на этот дасе естественно я на нём обучать модель не буду Вот мне просто я буду смотреть на то какие признаки вы добавите в этот дасе модель обучать на нём я не буду Вот то есть это задание просто на интуици настройка пост игры Вот это всё Насколько часто встречается на работе то есть мы прямо непосредственно будем с этим работать сами Вот это всё прописывать настраивать или у нас будет готовая уже там условно условно бивер в

сами Вот это всё прописывать настраивать или у нас будет готовая уже там условно условно бивер в котором всё это уже будет сделано Ну скорее всего будет готово если вы не стартап фаундер и не начали делать что-то своё Вот но в целом как бы это очень-очень такой опыт Ну во-первых полезный во-вторых Вот например то что мы там сегодня например арендовали машину установили постгрес добавили туда базу это такой навык как я люблю говорить из разряда уметь печатать то есть там думать не надо Ну вы

это такой навык как я люблю говорить из разряда уметь печатать то есть там думать не надо Ну вы берёте как бы вы понимаете что мне нужно установить постгрес идёте на сайт постгрес как на убунта установить постгрес потом у меня есть база как мне эту базу в постгрес добавить идёте в документацию по Как добавить SQL файл в базу Вот то есть это не не то что это прямо надо уметь и ночью вас разбудить чтобы вы там с закрытыми глазами всё напечатали но просто в этом нужно чувствовать себя довольно

чтобы вы там с закрытыми глазами всё напечатали но просто в этом нужно чувствовать себя довольно уверенно по крайней мере вот с точки зрения того что у вас какие-то инструкции документация это всё вам доступно вот наизусть это конечно знать не надо я Ну типа зачем это знать наизусть у вас е инструкция есть что зачем вам чито это тот кто с этим кажды вот пусть знает наизусть А вам это ни к чему ещё Вопрос вот ты говоришь э что если Ну Мы закончили работать мы удаляем всё это дело то есть мы

ещё Вопрос вот ты говоришь э что если Ну Мы закончили работать мы удаляем всё это дело то есть мы сегодня вот это сделаем допустим составим эту табличку CSV файл и можно сразу удалять это всё Ну да да а при регистрации там какое-то количество там вот этих вот виртуальных денег у нас будет чтобы мы могли типа пробный режим попользоваться да да понял спасибо на Яндекс это будет автоматически вам выдаваться а чтобы Нате это появилось нужно написать мне я пришлю промокод я рано или поздно его

выдаваться а чтобы Нате это появилось нужно написать мне я пришлю промокод я рано или поздно его пришлю всем вот просто там не у всех получилось на Яндексе зарегистрироваться на Яндек как бы на этой неделе там в понедельник не все доходят а во-вторых промокод на сете действует месяц и съесть его можно раньше чем за месяц Но идея такая что он вам потенциально ещё может понадобиться на финальном проекте Поэтому чем позже вы его активирует просто времени потестить это во время реализации

проекте Поэтому чем позже вы его активирует просто времени потестить это во время реализации финального проекта Поче мы к нему склоняем Да ничем Для нас это абсолютно одинаковые штуки сечас тоже можно Яндексе продолжать делать Да без проблем вообще просто см мы парм с Яндексом нет и всё финальный финальный проект точно там всё понял вот а так собственно изза того держим истк име сер с базой хранилище там что-то ещ то нам в принципе без разницы А так Google Cloud Янк Cloud Amazon вот этот webs

там что-то ещ то нам в принципе без разницы А так Google Cloud Янк Cloud Amazon вот этот webs cloud.ru это какой-то ВК или чей-то ещё это всё одно и тоже сделанное по подобию амазона вот просто азон уже он такой огромный динозавр там уже вообще ложи очень близкие штуки Насть вроде кость первый а ну Кость я уступлю короче прос как раз Хорошо пону есть ссылка нас материалах в репе туда заглянуть или может быть даже использовать их можно попробовать вот надо просто понять как у них называется

или может быть даже использовать их можно попробовать вот надо просто понять как у них называется виртуальная машина Вот потому что они в какой-то момент ребрендинг провели я не помню то есть там у них много разных сервисов надо вот просто обычный виртуальный сервер понять как он называется А всё остальное там будет тоже самое выберите сколько у вас будет оперативки выберите сколько у вас будет там SSD диска сколько виртуальных процессоров он выдаст внешней IP и всё тоже самое то есть там будет

SSD диска сколько виртуальных процессоров он выдаст внешней IP и всё тоже самое то есть там будет абсолютно такая же убунта которую вы сегодня видели а там деньги нужно будет платить Хороший вопрос Я не знаю Сейчас они дают Ну нет наверное у них какой-то там Грант должен быть вступительный бесплатный короче с учётом того что в будущем там вряд ли буду Яндексом и склом пользоваться Стоит ли сегодня фокусироваться на АС или наоборот поскольку там с ним относительно немного опыта у всех то не

фокусироваться на АС или наоборот поскольку там с ним относительно немного опыта у всех то не стоит Ну не знаю Мне кажется что это лучше короче сегодня сделать это там А Яндекс а потом просто чтобы было Ну короче привыкнуть лучше Там где ошибки более объяснимы а потом попробовать сделать например то же самое но уже на авсе но чтобы уже был какой-то бэкграунд и какие-то там какой-то опыт с тем что мы изучаем но естественно Если ты хочешь пойти на АВС там попробовать повторить это всё там сегодня

мы изучаем но естественно Если ты хочешь пойти на АВС там попробовать повторить это всё там сегодня я не могу по приковать никого в батарее Угу сть У меня просто было небольшое примечание ты сказал что вот Яндек и все подобные они там на основе на основе амазона так или иначе появлении российские Они как раз таки зачастую отказывались от работы с там с партнёрами изза того что сервера лежали на амазоне поэтому будто бы рели конечно ну то есть там это же такая как бы индустрия Поэтому да они

амазоне поэтому будто бы рели конечно ну то есть там это же такая как бы индустрия Поэтому да они делают своё тем более там в текущих реалиях когда там то докер отвалится то СЛК что-нибудь удалит где-то ну всем этим компаниям нужно держать инфраструктуру вот естественно у них там внутри Есть какие-то отличия Но на самом деле если можно сделать такую знаете табличку Как что-то называется в Яндекс клауде в амазоне и там где Ну в селекте или Google этот gcp Google Cloud платформ и мы увидим что у

клауде в амазоне и там где Ну в селекте или Google этот gcp Google Cloud платформ и мы увидим что у них брендовые названия разные а делают они то же самое вот то есть там то что там какой-нибудь vs типа виртуальный сервер Может это называться там в Яндексе да будет называться как-нибудь es2 в амазоне что это такое виртуальный сервер Просто у них так здесь так можно напоследок чтобы не долбать в личку и так далее про про Яндекс я не в понедельник не там не доктис утром сидела и там написано

в личку и так далее про про Яндекс я не в понедельник не там не доктис утром сидела и там написано инструкции у Ани цитата Public ssh копируем существующие чтобы не поломать связь с гитхаба вот эта цитата с учётом твоего там коммента чуть раньше про то что разные чки это важно тезис или Ну не опять же если у нас сегодня там полностью всякая учебная штука можно взять тотже Вот тут ситуация Какая Если вы смотрите вот вы генерик Да он сохраняется у вас буквально в текстовые файл Если вы возьмёте и

вы смотрите вот вы генерик Да он сохраняется у вас буквально в текстовые файл Если вы возьмёте и сгенерирует работать но из-за того что github знает о предыдущем ключе который вы генерировать ваше входящее подключение поэтому здесь два варианта либо создать новый SS ключ и Добавить его в Яндекс который никак не связан с хабом Либо второе не создавать новый SS ключ а скопировать тот который у вас есть и Добавить его в Яндекс тогда будет работать и Яндекс и github ну копирование работает только в

и Добавить его в Яндекс тогда будет работать и Яндекс и github ну копирование работает только в случае если имейлы на двух сервисах одинаковые стоят или нет не если ты прямо вот из существующего возьмёшь всё тоже будет работать в смысле емейлы должны быть одинаковые на двух сервисах Нет нет нет не обязательно в ссш ключи они должны быть одинаковые короче Насть копируй Как написано в инструкции и всё мы разговариваем сейчас о воздухе Вот хорошо что просто финальное на Яндексе у меня не не стоит

всё мы разговариваем сейчас о воздухе Вот хорошо что просто финальное на Яндексе у меня не не стоит email который стоит на гитхабе то просто Копировать Вот эту всю строчку ссш с имей гитхаба Ским и и всё Конец Да да да там всё Всё будет ок если будет не Ок тогда напиши мне так последнее что я хотел показать это просто этот файл я пришлю отдельно значит если вы хотите просто посмотреть как подключаться к базе из питона из обычного супер минимальный пример с подключением значит используется 2

к базе из питона из обычного супер минимальный пример с подключением значит используется 2 подключения все те же самые параметры вроде имя базы имя пользователя пароль IP порт создаётся здесь создаём штучку которая обычно называется курсор это собственно то что будет выполнять какие-то запросы дальше можем записать какой-нибудь запрос именно на SQ в переменную и потом написать конкретный запрос после того как это запрос выполнится его результаты можно достать с помощью метода fch и даже

после того как это запрос выполнится его результаты можно достать с помощью метода fch и даже превратить в dataframe вот в целом если говорить там о заданиях когда вам нужно просто что-то достать то мне видится что deb в этом плане намного удобнее потому что мне нам не нужно писать дополнительных команд я нажал Ctrl Enter у меня появился результат здесь мне нужно прям выполнить запрос забрать его результат и превратить это в пан dataframe и так далее Вот но просто как бы как супер минимальный

результат и превратить это в пан dataframe и так далее Вот но просто как бы как супер минимальный пример подключения пусть остаётся и второе это то о ЧМ вот Саша вчера говорил Если вы работаете с базой данных с точки зрения какого-то продукта да то есть там я не знаю У вас есть вот клиент который там хочет посмотреть список ваших заказов то есть вы разрабатываете какое-то приложение прям оно не вообще не про email ни про какую Вот эту вот штуку мобильное приложение или там какой-то сайт или

вообще не про email ни про какую Вот эту вот штуку мобильное приложение или там какой-то сайт или магазин [музыка] Ну не возможно Скорее всего будет удобнее работать с SQ в нотации питона потому что мы понимаем что у нас с одной стороны есть какой-то SQL который позволяет нам к базе обращаться с другой стороны мы разрабатываем там какое-нибудь наше приложение не на SQ А на питоне или на любом другом языке не суть то в таком случае можно использовать библиотеку которая называется SQL Алхимия так

языке не суть то в таком случае можно использовать библиотеку которая называется SQL Алхимия так и называют должны импортировать оттуда движок подключения сделать тоже самое пишем по П2 название нашего то есть IP нашего точнее Нет это будет имя пользователя двоеточия пароль IP и название базы ну здесь вот по примерам больше видно здесь есть примеры как подключаться к другим базам пос иния базовых штук что мы можем делать мы можем сказать что мы подключаемся к нашей базе и хотим из нашей базы

штук что мы можем делать мы можем сказать что мы подключаемся к нашей базе и хотим из нашей базы как бы провести мостик из наших таблиц провести мостик к нашим каким-то питонов Ским объектам для этого используется вот такое такая конструкция aap Когда у нас будет базовый класс нашей таблички и этот базовый класс Мы будем формировать на основе того какая у нас таблица лежит в базе то есть если вот это вот тут всё я не знаю можем быстро подключиться если хотите проверить чтобы может более Понятно

это вот тут всё я не знаю можем быстро подключиться если хотите проверить чтобы может более Понятно Будет О чём речь давайте это сделаем значит что у меня там pog SQL по-моему пароль IP так ещё надо найти Угу Так сейчас давайте по-другому Интересно так давайте подключимся а то может быть не сильно ясно Так а здесь pog pql помоему так да подключилось не подключиться должно вот тут значит это всё подключаем к нашей базе и Теперь смотрите Я говорю что у меня есть какая-то штука Base places

всё подключаем к нашей базе и Теперь смотрите Я говорю что у меня есть какая-то штука Base places airports Data Я обращаюсь к конкретной таблички запускаем и у меня появляется вот такой вот объект airs Data видите это объект вот этого вот SQL типа алхимии если я попробую распечатать методы этого объекта Видите Там есть и технические питонов ские методы вроде обычных там Dog и всё остальное но ниже у меня идут обычные колонки моей таблички То есть получается как бы у меня создался обект новский

у меня идут обычные колонки моей таблички То есть получается как бы у меня создался обект новский в котором есть питонов ские методы но есть ещё колонка Airport Code Airport name и так далее И теперь чтобы написать например к ней запрос просто обычный селективный Я импортируют говорю Select airports Data без всяких условий без всего просто обычная демо видите что он мне делает этот Select он фактически просто генерирует SQL запрос на основе того что вот у меня содержатся какие-то колонки в этой

просто генерирует SQL запрос на основе того что вот у меня содержатся какие-то колонки в этой табличке и Видите Там типа Выбери все колонки из таблички airports Data То есть я пишу как бы на питоне но он это превращает в SQL чтобы этот запрос выполнить Я просто его запускаю и вижу что у меня построчно возвращаются те же самые данные которые лежат в этой базе но теперь они мне возвращаются в видел строка словарь и всё остальное То есть если бы а мы разрабатывали какое-то приложение в котором у

строка словарь и всё остальное То есть если бы а мы разрабатывали какое-то приложение в котором у нас нету новых запросов Ну имеется в виду если у вас есть там интернет-магазин что можно позволить делать пользователям добавить корзину оплатить удалить из корзины добавить платёжный там э способ они не могут ничего больше делать у них ограниченный набор запросов который они могут обращать которым они могут отрисовывать к базе то тогда бы мы использовали вот такую штуку Вот Но Как видите

которым они могут отрисовывать к базе то тогда бы мы использовали вот такую штуку Вот Но Как видите количество подготовительных всяких шагов для того чтобы просто отправить запрос оно выше чем в том же самом диби Где вы IP имя пользователя пароль Connect Select и так далее вот ну тут у меня чуть ниже здесь есть ссылка соответственно запрос можно писать любого любого уровня сложности у меня обычный сек но там соответственно вы синтаксисом вот этой вот алхимии фактически делаете так чтобы она

сек но там соответственно вы синтаксисом вот этой вот алхимии фактически делаете так чтобы она умела конвертировать ваш питон в SQL вот такой вот как сказать ну это по большому счёту это Костыль конечно же Пусть Ну относительно удобный но сказать что это не Костыль тоже сложно вот у меня на этом всё у вас сегодня на самом деле относительно простое задание Вы берте у себя в рке ф вписывай вместо фы свой запрос который который показался вам правильным после этого все изменения Коти и отправляете

свой запрос который который показался вам правильным после этого все изменения Коти и отправляете я эти запросы проверю и помните что здесь даже я бы сказал что в большинстве заданий нету однозначно правильного ответа как как будет выглядеть ваш запрос и как результат и можно ли соотнести задачу с тем что появилось в результате Вот потому что на собеседованиях там с точки зрения Эля тоже далеко не всегда есть один и тот же правильный ответ единственный Я имею в виду Вот потому что запросы также

всегда есть один и тот же правильный ответ единственный Я имею в виду Вот потому что запросы также как и всё что угодно в пансе можно писать очень по-разному и получать одно и тоже вот поэтому тут не надо переживать просто правильно соотносится результат с вопросом в задании Окей вписываем его сохраняем и про десятое задание смотрите там есть любители делать датасет из вообще всех строк которые есть в самой большой таблице для того чтобы опять сфм не провоцировать сфм сделайте в зает 100

есть в самой большой таблице для того чтобы опять сфм не провоцировать сфм сделайте в зает 100 количество поэтому этот Файлик просто ограничьте чтобы он без проблем у вас заливался пусть там хоть 10 строк будет мне колонки важнее Сергей мы задание выполняем на своём сервере который мы поднимем можете подключиться конечно к моему я не против запуск это зания Ду к этому постепенно привыкать пото что это популярная штука У меня всё кость хотел попросить остаться на пару минуток Давай давай по

что это популярная штука У меня всё кость хотел попросить остаться на пару минуток Давай давай по вопросика Всё тогда всем всем До связи вот у нас сегодня сово вечером не планируется обычно потому что я проверяю пол реквесты собственно комментарии в попул реквест тоже буду оставлять Но если нужно будет то пишите вот я буду отвечать сегодня и завтра на ваши реквесты потому что э их нужно каждый проверить это занимает время всё тогда успехов будут проблемы пишите

Так ну мы сегодня и завтра будем немножечко разбираться с см Сегодня у нас будет такая вводная часть она не будет она будет связана конкретно с без всяких там установок чего-то и так далее вот А завтра мы посмотрим как можно установить систему управлени дан чтобы что-нибудь в ней поковырять что-нибудь в ней поделать Вот ну собственно Да с сэлем те кто там в табличных данных будет работать и в эту сторону пойдёт это 99 и9 что придётся так или иначе взаимодействовать вот может быть это окажется и

сторону пойдёт это 99 и9 что придётся так или иначе взаимодействовать вот может быть это окажется и не так вот ну по-разному по-разному бывает но так или иначе В общем сталкиваться с ним скорее всего при гораздо меньше там во всяких областях связанных с нейронными сетями Хотя тоже там такое замечание имеющее много опровержения вот чтобы понять Вообще зачем это всё появилось как бы само по себе нужно Взглянуть на вот эту вот табличку и ответить на вопрос что с этой табличкой не так что что в ней

Взглянуть на вот эту вот табличку и ответить на вопрос что с этой табличкой не так что что в ней можно было бы поправить оптимизировать не знаю что-то вот в таком формате придумать Ну несколько столбцов дублируются по сути Ну они схоже схожую информацию содержат вбе Ну не имена совпадает Но тутто это [музыка] студент имя курса Вот вот математика там как-то их сопоставить Угу номер записи ещё нет ну да номер записи вот мы видим что и на самом деле имена студентов тоже вот он Student ID о да и

ну да номер записи вот мы видим что и на самом деле имена студентов тоже вот он Student ID о да и какой-то там Иванов и он же здесь ещё раз повторяется Ну в общем на самом деле Да всё примерно так в определённый момент когда начали собирать очень много данных стало ясно что такой вот однотабличная ржать в одной таблице огромное количество повторяющейся информации и ну здесь вот у нас сколько там пять строк Да Представьте что у вас 5 млн строк и сколько всего у вас там будет дублировать

там пять строк Да Представьте что у вас 5 млн строк и сколько всего у вас там будет дублировать повторяться и в общем всё в таком духе поэтому Одним из главных таких движущих механизмов вот того чтобы привести хранение данных в какую-то другую систему и по какой-то другой механике их хранить потому что тогда как бы технический прогресс в отношении хранения данных он не был такой как сейчас Да вы можете там сколько вам надо 20 ГБ 100 ГБ 2 ТБ пожалуйста кнопку ткнули деньги дали вот вам сколько

можете там сколько вам надо 20 ГБ 100 ГБ 2 ТБ пожалуйста кнопку ткнули деньги дали вот вам сколько вам нужно вот тогда всё было намного более грустно в этом отношении поэтому стало ясно что нужно менять подход к тому Собственно как эти данные вообще хранятся и поэтому прили к такому понятию которое называется собственно построение реляционной базы данных реляционный - это такое сложное сложное слово на самом деле этот принцип хранения появился из области математики которая называется

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

избыточности то на самом деле мы можем эти таблички разделить на несколько таблиц И несмотря на то что у нас ну станет больше конкретно таблиц у нас при этом очень сильно сокращается та самая избыточность данных и называется нормализацией про нормализацию на нормализации я обычно не останавливаюсь потому что ну это врядли вам светит на каком-нибудь собеседовании но тем не менее материал по этой теме Я порекомендую Но идея заключается в том что вот у степени такого разбиения одной таблички на

теме Я порекомендую Но идея заключается в том что вот у степени такого разбиения одной таблички на несколько табличек может быть несколько разных уровней эти уров называтся мифо ВМ или во Последний раз я об этом слышал и использовал в институте и с тех пор никто как бы Особенно к этому не пристаёт потому что там довольно часто есть такой большой разрыв между тем что нам говорит Академическая часть говорит что надо Всё до восьмой нормальной формы и только тогда мы там чему-то удовлетворяем и

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

табличек И теперь мы видим что в этих табличках у нас на самом деле эта избыточность она в каком-то смысле пропала Теперь мы не храним пары идентификатор и имя и фамилия наших студентов У нас они дублировались предыдущее таблички здесь мы сделали одну табличку со студентами раздали этим Ну они на самом деле и в той табличке были и главное что у этих студентов есть какой-то идентификатор и у нас появилась вторая табличка которая содержит в себе собственно информацию о каких-то курсах это

у нас появилась вторая табличка которая содержит в себе собственно информацию о каких-то курсах это идентификатор курса это его человеческое какое-то название и фамилии тех кто эти курсы преподаёт и мы понимаем что эти две таблички они на самом деле между собой связаны Но если они на предыдущем слайде вот здесь вот были связаны просто фактически полным перебором того что у нас есть то теперь вместо того чтобы такой перебор делать Мы можем создать третью табличку и эта третья табличка Она будет

того чтобы такой перебор делать Мы можем создать третью табличку и эта третья табличка Она будет очень компактной с точки зрения хранения данных Почему Потому что мы здесь будем хранить вообще только пару идентификатор студента и идентификатор курса нам довольно часто В каких-то задачах не нужны имена и фамилии Но более того любая фраза которая говорит нам том что данные че нас как минимум избавляет от того что мы храним имена и фамилии нам довольно часто во многих задачах не нужны подробные Ну

от того что мы храним имена и фамилии нам довольно часто во многих задачах не нужны подробные Ну какие-то подробные данные которые касаются там я не знаю как вот в этой задаче например имён инструкторов и получается что вот эта вот табличка она как бы абсолютно В минимальном смысле хранит какой у нас студент посещает какой курс и в зависимости от того что нам нужно получить Какую информацию Мы хотим получить имена студентов названия этих курсов там названия имена преподавателей мы можем

Мы хотим получить имена студентов названия этих курсов там названия имена преподавателей мы можем собственно эту информацию благодаря вот этой вот табличке просто конструировать из вот этих вот двух табличек Соответственно что здесь важно что вот эти вот идентификаторы у нас естественно должны быть уникальными у нас не может появиться какой-нибудь курс 103 который у нас будет я не знаю по какому-нибудь там русскому языку Да с каким-нибудь там я не знаю преподавателем даже неважно Пусть он там

там русскому языку Да с каким-нибудь там я не знаю преподавателем даже неважно Пусть он там будет отличаться от всех остальных Почему Потому что идентификатор 103 у нас уже присутствует поэтому такого быть не может то есть этот идентификатор обязан быть уникальным ровно то же самое у нас свойство должно сохраняться для идентификаторов студентов и вот такие вот идентификаторы ну это чаще всего идентификаторы конечно можно найти какую-нибудь базу Где будут не конкретно ди что-нибудь ещё Но вот

конечно можно найти какую-нибудь базу Где будут не конкретно ди что-нибудь ещё Но вот такие вот идентификаторы они называются первичными ключами первичный ключ - это некоторый как бы столбец в нашей табличке и по значению которое находится в конкретном поле я полностью определяю как бы эту строку То есть у меня не может быть какого-то повторяющегося идентификатора такого что э у него Вот например как здесь 103 103 но здесь химия А здесь русский язык такого быть не может это достигается

например как здесь 103 103 но здесь химия А здесь русский язык такого быть не может это достигается абсолютно автоматическим образом чаще всего просто потому что у вас есть какое-то поле котором дишни каким-то образом генерируются и они становятся уникальными И если мы представим что у нас вот это вот это первичный ключ для таблички Ну понятно почему первичный ключ потому что это как бы основополагающий элемент по которому я могу определять всю строку то для таблички которая у нас содержит в

элемент по которому я могу определять всю строку то для таблички которая у нас содержит в себе вот эти вот идентификаторы уже конкретно студентов и идентификаторы курсов и вот э колонка Student ID и вот это вот колонка кур они являются внешними ключами Почему внешними Потому что собственно они к нам пришли на самом деле вот отсюда вот они пришли к нам из какой-то другой таблички поэтому они называются внешним то есть для вот этой вот маленькой таблички вторая Перч или можно часто встретить и

внешним то есть для вот этой вот маленькой таблички вторая Перч или можно часто встретить и просто сокращение вот здесь stent - это первичный Ключ Здесь кур ID первичный ключ А здесь stent ID это внешние ключи внешние ключи можно увидеть под названием или просто F э просто ПК такой способ построения как бы вообще механики хранения данных называется реляционный подходом Собственно как только этот реляционный подход придумали стало ясно что как-то нужно придумать какой-то инструмент с помощью

реляционный подход придумали стало ясно что как-то нужно придумать какой-то инструмент с помощью которого мы будем собственно и вот это связывание производить Понятно У нас теперь есть несколько таблиц эти таблиц могут быть както там друг к другу относиться Вот но теперь нужен инструмент для того чтобы мы могли эти таблички связывать между собой собственно этим инструментом и стал SQL придумали специальный язык который работает с конкретной системой хранения данных Если бы у нас была эта единая

язык который работает с конкретной системой хранения данных Если бы у нас была эта единая табличка мы могли бы говорить что у нас на есть электронная табличка xcel пожалуйста мы с ней работаем прекрасно фильтруем данные там всё всё что хотим с ними делаем если мы переходим к механике хранения которая подразумевает реляционный подход Это значит что мы практики S либо что-то подобное есть какие-нибудь вопросы по этому слайду Окей самым частым представлением этих таблиц точнее таких баз является

вопросы по этому слайду Окей самым частым представлением этих таблиц точнее таких баз является диаграмма которая Ну которую Иногда просто говорят что это какая-то реляционная модель Ино е называют диаграм слово то есть сущность а R отвечает за слово на русском языке эти диаграммы довольно часто называются диаграмма сущность связь потому что у нас есть сущности это какие-то таблички и есть связи то есть то как эти таблички между собой связаны вот у этих связей на самом деле может быть несколько

есть то как эти таблички между собой связаны вот у этих связей на самом деле может быть несколько вариантов они в принципе все достаточно простые Ну мы можем представить что у нас есть вот такая вот диаграмма и что у на хранит У нас есть табличка с пользователями у пользователей есть естественный идентификатор имя фамилия и email эти пользователи могут выставлять определённые рейтинги у каждого рейтинга есть свой идентификатор есть значение этого рейтинга есть идентификатор пользователя который

есть свой идентификатор есть значение этого рейтинга есть идентификатор пользователя который этот рейтинг поставил и есть идентификатор фильма которому пользователь поставил этот рейтинг соответственно идентификатор фильма у нас как бы забирается из этой таблички в табличке movies у нас хранятся идентификаторы названия и описание фильма то есть видите здесь та же самая логика мы не храним информацию о том что я не знаю там какой-нибудь Вася Петров у нас поставил вот такому количеству фильмов

о том что я не знаю там какой-нибудь Вася Петров у нас поставил вот такому количеству фильмов какие-то оценки мы просто говорим что у этого Вася Петрова есть какой-то идентификатор если нам сильно важно что это был именно Вась Петров мы приходим вот сюда вот и просто забираем отсюда эту информацию говорим что Вот найди мне всех пользователей с таким идентификатором и Распечатай их имена фамилии имейлы и так далее но при этом саму информацию об именах мы не храним в табличке с рейтингом и здесь

и так далее но при этом саму информацию об именах мы не храним в табличке с рейтингом и здесь можно увидеть что у связи двух табличек Ну я про users ин есть связь которая обозначена Так что здесь у нас есть какая-то единичка А здесь обозначена какая-то Здо Такой тип связи назвается или один ко многим и его логика очень простая один пользователь может посмотреть множество фильмов и поставить этому множеству какие-то оценки без проблем Поэтому у каждого рейтинга будет свой идентификатор но при

множеству какие-то оценки без проблем Поэтому у каждого рейтинга будет свой идентификатор но при этом вот этот р ID он в этой табличке может встречаться множество раз почему Ну пото что пользователь может посмотреть много фильмов и поставить этому много фильмов какие-то есть итор обязан быть уникальным потому что это первичный ключ для этой таблицы Но вот здесь вот идентификаторы могут повторяться потому что я могу посмотреть 10 фильмов поставить 10 оценок с другой стороны табличка связана с

потому что я могу посмотреть 10 фильмов поставить 10 оценок с другой стороны табличка связана с табличкой ре по такой же схеме один ко многим или почему так происходит потому что [музыка] одного фильма может быть множество оно то есть логика на самом деле достаточно простая Если эту логику перевести в какие-то более привычные сервисы у человека может быть несколько карт привязано в каком-нибудь там Маркете онлайн Может может быть привязано несколько адресов к адресов доставки без проблем Может

Маркете онлайн Может может быть привязано несколько адресов к адресов доставки без проблем Может может ли у пользова Като несколько заказов может быть неско зака но понятно храним в подобной базе данных значит это будет реализовываться связью один ко многим нук здесь примерно та же история Я не знаю нужно её пояснять вроде вроде тоже самое что и здесь просто слова другие связь один ко многим является самой популярной связью потому что ну так устроен мир что у на вот есть такие закономерности в

самой популярной связью потому что ну так устроен мир что у на вот есть такие закономерности в мире при этом существуют связи и более Ну они не то чтобы сложные или там какие-то ещё просто другие с другой стороны у нас может быть такое что если мы идентифицирую человека например на сайте по номеру телефона Может ли у одного пользователя в таком случае быть несколько номеров телефонов Ну вроде как индустрия Показывает что нет Если вы уж когда-то там эсэмэской подтвердили что это ваш номер

как индустрия Показывает что нет Если вы уж когда-то там эсэмэской подтвердили что это ваш номер телефона Скорее всего вы не можете добавить ещё пять номеров телефонов Да потому что как-то хотелось бы с вами связываться только по одному номеру телефона Поэтому соответственно есть связи которые называются один к одно когда одному как бы объекту вот из этой таблички может соответствовать только один объект из этой таблички это тоже довольно популярная связь Ну вот здесь у меня что у одной школы

объект из этой таблички это тоже довольно популярная связь Ну вот здесь у меня что у одной школы может быть только один директор поэтому мы будем хранить там какую-то табличку со школами какую-то табличку с директорами И если мы хотим получить Ну какую-то информацию о директоре то мы точно знаем что если мы придём вот сюда вот то мы найм только одну запись который будет этому соответствовать потому что у нас связь такая у нас не может быть по-другому и второй тип связи Это тип связи который не

что у нас связь такая у нас не может быть по-другому и второй тип связи Это тип связи который не очень любят потому что это означает что вот как у меня в примере здесь большому количеству разных каких-то Люде кото у меня вот здесь вот есть может соответствовать множеству уроков которые он посещает вроде как кажется логичным да ну в общем ничего в этом плохого нет что действительно там один и тот же человек или или даже множество людей могут посещать множество каких-то уроков это кажется

и тот же человек или или даже множество людей могут посещать множество каких-то уроков это кажется довольно логичным но в целом от такой связи довольно часто пытаются уйти потому что это вносит некоторую путаницу и вот когда вы обрабатываю базу и пишете к ней Запрос который есть вот э связь там иногда башка кипит потому что тяжеловато это воспринимается даже вот поэтому связи один к одному и один ко многим они являются более популярными Но конечно встречаются и связи или многие ко многи Ну и

ко многим они являются более популярными Но конечно встречаются и связи или многие ко многи Ну и Здесь вы можете увидеть вторую нотацию если на прошлой На прошлой диаграмме у нас были обозначение как один и звёздочка иногда они обозначаются едини как сечка а множество как вот такая лапа трёх палая Вот значит вот эти связи они в целом как бы ну предполагается вообще говоря в идеале Да что если вы решаете какую-то задачу связанную С обработкой там базы то предполагается что вот такая вот штука

решаете какую-то задачу связанную С обработкой там базы то предполагается что вот такая вот штука вам в любом случае предоставлена почему она предоставлена потому что ну как бы а как вы должны знать какие связи между табличками Ну то есть это же это схема по которой вы должны уметь работать Ну или хотя бы должны иметь её перед глазами вот а поэтому такая схема Она обычно даже автоматически может быть сгенерирована просто по описанию базы данных Вот но графически это самое частое представление

быть сгенерирована просто по описанию базы данных Вот но графически это самое частое представление какой-то SQL базы О'кей А есть вопросы по вот этому луба то есть нам не придётся типа самим строить эти таблицы и связи Ну я не могу отвечать за вашу будущую жизнь но вообще по идее нет обычно это задача даты инженеров это они должны понять как эти данные хранить Какие таблички должны быть как эти таблички должны быть разделены Какой тебе право доступа выдать чтобы ты какие-то запросы мог

эти таблички должны быть разделены Какой тебе право доступа выдать чтобы ты какие-то запросы мог исполнять это работа прямо чисто дата инженеров понял Ну понятное дело что ты можешь попасть туда где тебе скажут что даты инженер - это тоже ты вот просто так вот не было написано вакансии вот Хорошо тогда давайте ближе уже к запросам я общий вид запросов буду пропускать и буду в основном концентрироваться на том что Что означают каждые слова хорошая новость заключается в том что в сле в общем-то

на том что Что означают каждые слова хорошая новость заключается в том что в сле в общем-то довольно строгая последовательность операторов и функций которые вы можете применить их во-первых не очень много хотя есть там разные диалекты Эля И они довольно часто отличаются сильно Вот Но в общем и целом в как бы в сле есть довольно чётко заданная последовательность того как Вы должны подходить к вашему запросу это с одной стороны вас по этой причине SQL относительно несложно начать изучать по этой

запросу это с одной стороны вас по этой причине SQL относительно несложно начать изучать по этой же причине когда вам нужно написать что-то сложное вы уже будете находиться в каких-то рамках ограничивающих будет Маловато будто бы свобод Но это всё дело практики Значит все практически все операции выбора каких-то данных из базы в SQ начинаются со слова классическая это типа 90% SQ запросов которые вообще пишут То есть подразумевается что там в SQ довольно часто Ну запросы такие они селективные

вообще пишут То есть подразумевается что там в SQ довольно часто Ну запросы такие они селективные да Они вызываются часто и предположительно вам с ними на самом деле работать придётся чаще чем наоборот что-то добавлять в базу и эти запросы они все начинаются с ключевого слова дальше у вас может идти или не идти Тая которая называется дит у нас отвечает если дит есть за выбор только уникальных элементов То есть если мы напишем например Select distin там звёздочка - это выбрать все поля то есть

То есть если мы напишем например Select distin там звёздочка - это выбрать все поля то есть не указывать конкретную колонку а прямо вот всё что есть в таблице всё выбрать если мы напишем то мы выберем только уникальные строки из этой таблички Это довольно ча частая задача она и там в собеседованиях часто Ну то есть наличие Дин возвращает вам только уникальные строки если мы предположим что вот этого самого стинта здесь нет В таком случае sel звёздочка будет означать Что вы хотите выбрать все

этого самого стинта здесь нет В таком случае sel звёздочка будет означать Что вы хотите выбрать все колонки из таблички sales то есть фраза означает на человеческом языке а это самоя самый большой барьер перевести с человеческого языка на язык sqa она на человеческом языке означает возьми все строки из таблички продаж Select звёздочка From sales про то как там обращаться к конкретным колонкам мы дальше посмотрим но там секрета нет вы Обращайтесь к ним по имени у колонок есть имена довольно

мы дальше посмотрим но там секрета нет вы Обращайтесь к ним по имени у колонок есть имена довольно удобно к ним обращаться по имени также как вы это делали в пандусе значит вот эта вот часть она повторяется Практически везде то есть Select какой-то перечень полей From какая-то табличка или таблички дальше у нас может накладываться условие на фильтрацию по каким-то колонкам здесь у меня написано что S From sales ра То есть я хочу выбрать только теки из своей таблички sales в которых поле conf

что S From sales ра То есть я хочу выбрать только теки из своей таблички sales в которых поле conf равно единички Ну на русском языке это могло бы означае что там подтверждённый заказ например да Или подтверждённая продажа Если бы я здесь хотел Дописать какие-то условия Я не знаю там ра 1 и рано 1 то я бы здесь просто написа и сказа едини то есть операция она также как и в пансе и вообще в целом в языках программирования и так далее Всё это работает Ну мы будем дальше сейчас это тоже ещё увидим

языках программирования и так далее Всё это работает Ну мы будем дальше сейчас это тоже ещё увидим следующее шаг Я бы мог используя идентификатор заказа сгруппировать что-нибудь за это отвечает обычный оператор работает также вы долж указать в пан Я имею в виду вы должны указать По какому полю вы хотите что-то сгруппировать То есть в пансе Вы тоже пишете там что-нибудь там дальше какое-то поле и соответственно вам вернётся какой-то сгруппированный объект и дальше у нас есть такая хитрая штука

соответственно вам вернётся какой-то сгруппированный объект и дальше у нас есть такая хитрая штука котора буд бы означае тоже самое что но звучит как Прай больше тысячи Настя знает Наверно Чем отличается от от GR by Давай от не от на конкретны фильтрует А если мы что-то Сагирова наверху то вот эту агрегирующие параметры фильтрует Например если вли какую-нибудь среднюю среднюю сумму су Господи сумму заказов данного юзера то мы допустим в мы фильтруем тех юзеров у которых су Ну и строчки у нас

заказов данного юзера то мы допустим в мы фильтруем тех юзеров у которых су Ну и строчки у нас заказа то в мы фильтруем теров которых сумма их зака бы выше чем горя используется на не сгруппированных данных не агрегированных данных но если мы хотим отфильтровать наши данные ещё раз после группировки то мы уже не можем использовать мы будем использовать это очень частый вопрос на собеседованиях Почему есть два оператора которые фильтруют данные Чем отличается от Главное отличие то что работает

есть два оператора которые фильтруют данные Чем отличается от Главное отличие то что работает на не сгруппированных данных работает после какой-то агрегации агрегация - это соответственно Да что такое агрегация собрать вместе по какому-то признаку получатся если бы мы сделали сначала Гру а потом засунули бы Например в Price больше сся ра О это бы сработало да сработано Как сказать получается Работал бы изначально с большим количеством данных здесь Ты сначала данные отфильтровать меньше

Работал бы изначально с большим количеством данных здесь Ты сначала данные отфильтровать меньше информации потому что часть данных отпало потому что где-то был ко равен нулю Вот и в принципе можно было бы сгруппировать и потом отсортировать вра это бы ра запрос нам сначала удобнее отобрать только то что мы будем группировать а потом это группировать чем сначала попытаться сгруппировать всё а потом отобрать оттуда то что нам нужно группировка дорогая операция на самом деле Ну и тоже самое типа с

отобрать оттуда то что нам нужно группировка дорогая операция на самом деле Ну и тоже самое типа с можно было бы Например если бы группировки У нас не было бы мы бы вместо этого просто написали бы да да дас Ровки не было Просто написали ну ипра больше ди мавер Не понял эти этоже отдельный Кост таким названием или это что-то что агирова не это отдель какой А почему тогда на него не действует если просто написать не Почему мего р ID может быть например несколько строк У тебя же может быть в

если просто написать не Почему мего р ID может быть например несколько строк У тебя же может быть в заказе несколько товаров и в этих заказах может быть несколько товаров у которых цена больше тысячи А может быть у которых цена меньше тысячи Вот то есть ты сначала как бы забираешь какие-то заказы подтверждённые А после этого сгруппировав их фильтрует а Ну всё я понял то есть только по конкретной категории как бы да получается пой групе Всё спасибо и получается после того как мы груба сделаем

категории как бы да получается пой групе Всё спасибо и получается после того как мы груба сделаем нам типа всё время после этого придётся только вообще Не сработает ни разу Ну да да Ну как всё время писать подразумевается что ты как бы одной строкой справишься потом жиз пи только нет ну как бы ты должен Ну ты здесь можешь перечислить какие-то ещ фильтры просто уже Не сработает в таком случае да понял вот Но это такое сразу немного вас размять дальше Запроси будут сначала попроще поэтому не

да понял вот Но это такое сразу немного вас размять дальше Запроси будут сначала попроще поэтому не пугайтесь так кто-нибудь потрясающим рингом скат Что такое orderby сортировка сортировка Да значит сортировка А можно увидеть довольно часто и в целом Я рекомендую это делать э писать это явно здесь соответственно может быть написано Order by Total Ask либо desk Соответственно что у нас обозначает по возрастанию по убыванию вот а лимит 25 кто-нибудь может сказать что это такое 25 записей 25 типа

по возрастанию по убыванию вот а лимит 25 кто-нибудь может сказать что это такое 25 записей 25 типа да это аналог методу из Панса Вот Но у метода в пансе есть по умолчанию значение 10 а в SQ насколько мне известно нет то есть если вы просто напишете лимит то Ничего работать не будет Он скажет типа лимит должен быть каким-то ой Давайте Э давайте пойдём дальше сейчас мы к сложным запросам ещё вернёмся Сергей Паша ты вот про динг сказал что он как бы выбирает из таблицы уникальное значения что

Сергей Паша ты вот про динг сказал что он как бы выбирает из таблицы уникальное значения что здесь будет уникальным значением значение который встречается Только один раз в таблице нет Он возьмёт без дубликатов вернёт тебя в список а то есть это мы очищаем наш нашу таблицу от дубликатов если они имеются вот таким образом Да вернёт тебе данные без дубликатов Я просто подумал что условно если там есть несколько строчек с тысяче Ну допустим со значением тысячу он их не будет брать а если есть там

несколько строчек с тысяче Ну допустим со значением тысячу он их не будет брать а если есть там всего одна которая встречается 999 он её возьмёт понял только борьба с тут смотри у тебя дубликаты строк если у тебя вот здесь написаны все колонки то дубликаты подразумевается что во всех ячейках одинаковые значения вообще во всех ну то есть строка дубликат Ну строки две одинаковых когда во всех ячейках одинаковые значения Угу Понял Сергей а у меня такой вопрос грубая Просто насколько я помню в

одинаковые значения Угу Понял Сергей а у меня такой вопрос грубая Просто насколько я помню в пандусе там ещё нужно агрегирующие функцию выбрать чтобы он понимал что происходит А здесь он типа суммирует если ничего не указать так так оно работает Нет давайте мы дальше пойдём тут это это хорошее замечание просто мы до него дойдём Так значит давайте быстренько по операторам которые могут быть полезные и тут будет нелишним вспоминать в реальном времени Какие эти же функции и как называются в

полезные и тут будет нелишним вспоминать в реальном времени Какие эти же функции и как называются в пандусе значит если мы хотим использовать Такой оператор оператор очень полезный потому что позволяет нам например вот этот вот запрос он нам что Верт мы в этом запросе пишем то есть возьми все колонки из таблички какой-то и сделай так чтобы вернулись те только те строки где в колонке у нас строка есть быть в имени процент означает Что неважно сколько символов было после этого то есть всё то что

есть быть в имени процент означает Что неважно сколько символов было после этого то есть всё то что начинается на J Будет нам все строки где имя начинается на J Будет нам возвращено Кто помнит какой метод в пансе отвечает за это Ну даже не в пансе не только в пан Да with вот то есть мы в пансе можем сделать тоже самое только с помощью метода значит второй способ использования лайка когда мы говорим выберем Не все колонки из какой-то таблички там где mail тоже к процент неважно что было до

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

на заканчивается на и состоит только из шести букв Ну соответственно первая и последняя и четыре буквы в промежутке то есть оператор Он бывает очень удобен Когда вы работаете со строками И вам нужно эти строки как-то отфильтровать вот ну я не знаю по нему наверно вопросов вроде не должно быть да Довольно простой т [музыка] он на самом деле тоже Довольно простой мы можем забирать из колонки выбрать из колонки все выб Точнее из таблицы все колонки из таблицы где цена Unit Price 100 и 500

выбрать из колонки все выб Точнее из таблицы все колонки из таблицы где цена Unit Price 100 и 500 соответственно тоже самое может быть написано вот таким способом Ну также как и сниу битном и можно пользоваться у а то есть в общем-то особенных рекомендаций нет может быть в каких-то базах там я не знаю bwin работает медленнее чем W или наоборот там bwin работает быстрее чем W но строго говоря оператор bwin Он является довольно понятным просто даже по тому что как он выглядит сам по себе можно

bwin Он является довольно понятным просто даже по тому что как он выглядит сам по себе можно использовать и тот и другой вариант Так ну здесь оператор in если нам необходимо проверить что какое-то поле у нас имеет значение находящееся в определённом множестве мы можем это сделать следующим образом у нас есть Select тоже там Пусть это будут все колонки From члены семьи где статус либо отец либо мать тоже в питоне мы бы в пансе мы бы сделали это тем же самым способом там какая-то колонка и

мать тоже в питоне мы бы в пансе мы бы сделали это тем же самым способом там какая-то колонка и какой-то список в котором у на находится что-то Так значит по строкам очень похож на тоже позволяет сравнивать По логическому условию Но работает с числами и когда нужно проверить что-то находящееся во множестве чего-то справа давин берёт включительно Но это я бы в зависимости от того в какой вы в каком вы диалекте пишете проверил бы потому что в My это может быть одним способом в постгрес это может

вы диалекте пишете проверил бы потому что в My это может быть одним способом в постгрес это может быть другим способом SQL диалектов Ну порядка д разных Вот они все естественно очень похожи Но вот на такие детали Я бы обращал внимание обычно в документации это написано может работать одним способом в пост другим способом Вот Но тут это работать с документацией общее соображение оно как бы не не распространяется на какой-то конкретный S вот просто Да так получилось что после того как SQ появился

на какой-то конкретный S вот просто Да так получилось что после того как SQ появился очень многие компании начали разрабатывать У нас есть Oracle Microsoft есть по ещё 25 штук их разных есть которые занимаются практически 100% вы будете работать либо с постсоветское таймы на это время вылета или время прилёта самолёта всё ладно ну короче вытаскиваем город и время полёта из таблицы трип где город это Париж Ну вот у нас выведется две таблицы та 2 и FL Time где вот это тади будет содержаться и всё

Париж Ну вот у нас выведется две таблицы та 2 и FL Time где вот это тади будет содержаться и всё где город Париж Ну колон это звучит как в Google транслате куда я вставил этот запрос То есть это по словам перевод какой-то идёт и логика правильная но по-человечески можно вот вы вы меня просите найти что-нибудь в таблице Вы же не подходите ко мне не говорите ну там Time вот где From Париж ско вме сейчас ничего не было слышно потому что пром города расстояни наверное время полёта от Парижа А где

сейчас ничего не было слышно потому что пром города расстояни наверное время полёта от Парижа А где расстояние Париж врем полёта и какие-то города которые есть или рейсы из Парижа нужно сформулировать задачу по запросу или чего Да найди мне все Сколько времени занимает полёт из любого города в Париж Наоборот а а из Парижа в любой город да то есть За какое время и в какие города можно улететь из Парижа Вот так бы это звучало Если бы вы подошли ко мне и попросили вы мне сказа я в Париже Найди

Парижа Вот так бы это звучало Если бы вы подошли ко мне и попросили вы мне сказа я в Париже Найди пожалуйста За какое время и куда можно отсюда улететь Вот это неплохая тренировка для языка скажем [музыка] она собственно будет считать разницу и вернёт нам время в формате часы минуты и секунды Вот получается что та in - это время прибытия та out - это время отбытия мы можем посчитать какое-то количество времени А может вернуть нам в отрицательных значениях это там ну как бы это не это неважно

времени А может вернуть нам в отрицательных значениях это там ну как бы это не это неважно можно Ну в плане того что если вы примените функцию Apps это станет неважно Вот Но тут важно что работает конкретно со временем не работает то есть если у Вас например между двумя событиями прошло 3 года то разница в часах Вам бы наверно не очень хотело Ну она конечно полезно но не очень информативно если нам нужна разница в именно в датах то в таком случае похожу фун Котова у нас будет какой-то тайм 1

нам нужна разница в именно в датах то в таком случае похожу фун Котова у нас будет какой-то тайм 1 тайм 2 и он вернёт нам число дней между двумя датами соответственно если мы хотим какое-то количество лет Например получить в разных базах это уже делается по-разному в постс для этого есть свои инструменты но в целом мы можем могли бы это сделать даже просто разделив здесь например на 365 то есть ну получим тогда в годах если Для нас это интересно Но конечно вряд ли за годы что-то может быть

ну получим тогда в годах если Для нас это интересно Но конечно вряд ли за годы что-то может быть интересно именно в SQL базе но тем не менее значит Date div и Time div - это две функции которые позволяют вам считать разницу между двумя временными точками кто может сказать у нас тогда тип данных Какой должен быть соответственно если мы пытаемся между временем посчитать разницу есть в S есть привычные для вас типы данных это может быть целое число это может быть число с плавающей точкой это может

для вас типы данных это может быть целое число это может быть число с плавающей точкой это может быть символ Это символьный тип это может быть там абзац текста вот один из типов данных в SQ - это соответственно тайм Stamp Всё как всегда если поподробнее взглянуть кстати вот на эту табличку видите мы здесь можем увидеть что идентификатор Рейн User ID Movie ID это у нас всё индры здесь идентификатор - это индр это ну это текстовая переменная просто второй вид текстовой переменной в это собственно

- это индр это ну это текстовая переменная просто второй вид текстовой переменной в это собственно просто текст разница между чаром и текстом в количестве допустимом хранения символов это тоже вам вряд ли сильно нужно будет просто так что типа И если мы хотим работать со временем соответственно те поля между которыми мы считаем эту разницу во времени в данном случае та in Timeout должны обладать типом данных тайм Stamp ровно то же самое происходило и в пансе в пансе Если вы там попытаетесь

типом данных тайм Stamp ровно то же самое происходило и в пансе в пансе Если вы там попытаетесь посчитать какую-нибудь временную разницу между двумя строковыми полями ничего у вас не получится вот Time div и dat div полезные функции на них стоит обратить внимание Давайте теперь к Джой нам значит соединение таблиц в сле это собственно всё то есть джоны - это тоже один из постоянных вопросов на собеседования Почему Потому что соответственно начал я сегодня с того что таблички мы будем разделять

Почему Потому что соответственно начал я сегодня с того что таблички мы будем разделять для того чтобы не хранить избыточную информацию но когда мне нужна будет какая-то общая информация о какой-то там своей предметной области я эти таблички буду вынужден просто соединять как я это буду делать делать я буду это первый способ - это операция которая называется inner Join предположим что у меня есть э табличка А и есть табличка б в табличке а у меня есть три идентификатора первый второй и третий

э табличка А и есть табличка б в табличке а у меня есть три идентификатора первый второй и третий этим идентификатором соответствуют какие-то данные мы можем думать что это просто какая-то одна ячейка или что это целая строка каких-то какой-то информации это сейчас не в табличке У меня тоже есть какой-то внешний ключ и вот здесь вот я вижу что у меня совпадают как бы идентификаторы зелёный и вот здесь совпадает идентификатор жёлтый То есть получается что как бы у меня из этой таблички для

вот здесь совпадает идентификатор жёлтый То есть получается что как бы у меня из этой таблички для идентификатора 1 есть X1 А здесь для идентификатора 1 есть y1 есть бы вот этот обет который меня с таким идентификатором прое но бы ему соответству самому идентификатору есть этот обект оди и тот же просто в двух табличках мы храним разную информацию относительно этого объекта если я захочу построить функцию объединения а именно воспользоваться оператором in то врете таку соединены но в результате

функцию объединения а именно воспользоваться оператором in то врете таку соединены но в результате операции in я увижу что у меня осталась информация только о объекте под идентификатором о и объекте под идентификатором 2 Почему так получилось потому что in Jo забирает только те объекты которые содержатся в обеих табличках у меня здесь есть первый здесь есть первый здесь есть второй здесь есть второй рего табли чет нет в табличке а то есть если это человеческим языком выразить то это что будет

рего табли чет нет в табличке а то есть если это человеческим языком выразить то это что будет за операция Ну если на множествах Попро чение Да это будет пересечение я достану в результате операции in только те объекты которые содержатся в обеих табличках это Ну в селекте я перечислю какие-то там названия полей мы сейчас конкретно на конкретном примере с базой посмотрим ну с табличками с из начала слайдов Вот Но как выглядит синтаксис самого джоина значит я перечисляю какие-то Поля дальше

начала слайдов Вот Но как выглядит синтаксис самого джоина значит я перечисляю какие-то Поля дальше говорю что я буду это доставать из таблички А вот она табличка А и сделаю операцию на табличку и дальше я должен указать По какому полю я буду искать пересечение Я говорю что мне нужно сделать из таблички а объединив её с табличкой B он а то то есть вот это вот поле равно B то то есть вот это вот поле То есть я сначала перечисляю Какие таблички я буду объединять а потом перечисляю где мне

вот поле То есть я сначала перечисляю Какие таблички я буду объединять а потом перечисляю где мне собственно пересечение это Кай колонке мне это пересечение искать и in Jo Очень популярный способ объединения Давайте вопросы по нему луба А если типа к просто Столбцы местами поменяются Давай конкретно по и Join есть вопросы Сейчас мы просто можем запутаться Саша да вот у тебя в запросе написано From Table а а вот вторая А - это что-то значит или да Что это может значить имя таблицы Ну имя таблицы

Table а а вот вторая А - это что-то значит или да Что это может значить имя таблицы Ну имя таблицы - это ла псевдоним порядок ним Да псевдоним или альс таблички бывают названы достаточно Громо иннет ошибок Поэтому если мы хотим какую-то табличку задать Короче мы можем написать пробел её сокращенное название зав эти псевдонимы будут генерироваться автоматически просто в процессе написания запроса это такой известный механизм джоны может быть у тебя дальше это будет если будет то скажи не с

это такой известный механизм джоны может быть у тебя дальше это будет если будет то скажи не с последовательными Джой нами сами В смысле сегодня домашка да Ну конечно конечно Напомни Там просто там как бы просто или там есть какие-то подводные камни Не ну у нас будет пример с один пример с последовательными джоина сейчас позже позже Ага луба Можешь повторить когда они генерируются вот эти Алес они генерируются в некоторых штуках в которых которые предназначены для работы с базами данных

Алес они генерируются в некоторых штуках в которых которые предназначены для работы с базами данных специальными сегодня они не будут сами генерироваться Но вам сегодня это не сильно нужно у вас сегодня ну мы их видим да когда они генерирует Ну конечно ответ на вопрос что мы их мозгом генерируем Ну в смысле просто для удобства для своего не вы можете их генерировать сами то есть без проблем можно это делать самому то есть если тебе лень писать каждый раз Table А ты можешь написать From Table а

это делать самому то есть если тебе лень писать каждый раз Table А ты можешь написать From Table а назову её просто а большая и дальше буду использовать Вот это имя А большая а дальше можно его поменять Ну дальше Ну да можно просто зачем Т просто неинтересно А ну не Можно я не видел чтобы так делали наверное можно гибкая штука но я не видел чтобы так делал Окей значит in Join - это объединение пересечение Точнее не объединение кто скажет как работает Left Join ключи взяли из левой таблицы и

пересечение Точнее не объединение кто скажет как работает Left Join ключи взяли из левой таблицы и объединили взяли Ключи из левой таблицы и по ним объединили Угу То есть получается что у нас как бы есть табличка когда мы написали From Table A мы вновь забрали все вот э идентификаторы отсюда но теперь у нас написано Left Join Table B и так как Left Join как бы говорит нам фактически о том что левая табличка главная да мы фиксируем все идентификаторы которые есть вот здесь вот неважно

что левая табличка главная да мы фиксируем все идентификаторы которые есть вот здесь вот неважно присутствуют ли они в правой табличке Соединяем по такой же логике но теперь Мы видим что в результирующей табличке у нас должен быть для первого идентификатора X1 y1 есть для второго идентификатора X2 y2 есть для третьего идентификатора должен быть X3 А так как в правой табличке этого идентификатора нет Значит у нас появляется просто ну то есть мы сказали что нам этот третий интом Прим здесь будет

нет Значит у нас появляется просто ну то есть мы сказали что нам этот третий интом Прим здесь будет ну его в этой табличке не оказалось поэтому мы заполняем просто пропущенным значением Ну спойлер все наны и всё остальное в ваших датасета происходит ровно из-за этого потому что вы Ну как кто-то при создании датасета СМЛ это так что где-то появился Нан у вас человек мог как бы условно говоря заказать какой-нибудь кредит то есть быть уже в одобренных тех кто кредит Там в банке ему одобрили его

какой-нибудь кредит то есть быть уже в одобренных тех кто кредит Там в банке ему одобрили его получение но при этом его ещё нет в списке тех кому этот кредит уже выдан Таким образом у вас какая-нибудь дата одобрения будет а в поле того что он забрал этот кредит ничего не будет Ну в смысле забрал сумму Вот поэтому здесь будет просто нуль то есть в мы подразумеваем что таб у является первой Мы из неё забираем все идентификаторы в отличие от ина Когда в Ир Мы искали только те элементы которые

из неё забираем все идентификаторы в отличие от ина Когда в Ир Мы искали только те элементы которые находятся и там и там то есть только те которые обладают пересечения здесь же мы говорим что отсюда забираем все идентификаторы А если не оказалось совпадение Ну значит дописывай просто пропущенное значения Окей понятно как Чем й отличается от ирна хорошо следующий ревер Ирин А в чём смысл вче можем поменять местами таблицы использовать не ко мне вопрос я тоже самое хотела спросить Я всё время

поменять местами таблицы использовать не ко мне вопрос я тоже самое хотела спросить Я всё время когда раньше писала Я просто использовала Left Join просто Чтобы мозг не как бы не усложнять мозговую работу да ну в общем есть Right Join который берёт и делает просто наоборот мы пишем всё то же самое From Table A Right Join Table B но теперь из-за того что это Right Join у нас ну условно говоря правая табличка является главной поэтому мы ищем здесь совпадение есть здесь совпадение есть здесь это

табличка является главной поэтому мы ищем здесь совпадение есть здесь совпадение есть здесь это сейчас табличка главная поэтому идентификатор 4 мы ВС равно забираем не оказалось здесь для него значение Окей тогда x11 x22 y3 есть потому что э табличка главное пересечение не оказалось в табличке А значит мы ставим сюда пропущенное значение позволил се Вот но отличие соответственно в том какую табличку мы позиционирует примере значит вот у нас есть три таблички те же самые которые были в самом

мы позиционирует примере значит вот у нас есть три таблички те же самые которые были в самом начале мы можем из этих табличек вы коло довольно удобным способом мымре конкретным полям здесь мы говорим Select Students Student ID это вот эта вот колонка дальше Select Student Students name вот эта вот колонка после Select cses cse ID Вот она табличка курса с CS ID дальше cname instruct и всё такое в целом э как бы подразумевается что в хорошем запросе вы обычно чётко определяете те колонки которые

целом э как бы подразумевается что в хорошем запросе вы обычно чётко определяете те колонки которые вам нужны потому что как правило в табличках в базах колонок десятки могут быть сотни и так далее это скучно грустно перечислять всё это и всё такое но ничего ничего особенно не поделать с этим То есть вот такой способ обращения он такой достаточно понятный и является общим соглашением что да нам хорошо бы понять Из каких конкретно табличек Как какие поля мы забираем Поля это равно колонке А

хорошо бы понять Из каких конкретно табличек Как какие поля мы забираем Поля это равно колонке А дальше после того как мы перечислили мы можем здесь на самом деле написать просто одну из вот этих вот табличек Мы можем написать From Students и запятая но так как мы по именам здесь уже обратились мы можем не дописывать вторую табличку такой хук существует я бы тоже не рекомендовал его использовать потому что это усложняет чтение запроса а чтение запроса - это тоже достаточно важная штука поэтому

потому что это усложняет чтение запроса а чтение запроса - это тоже достаточно важная штука поэтому здесь как бы мы [музыка] допи то есть мы сечас обратились вот к этим вот и взяли из них все поля теперь смотрим дальше у нас есть операция Left то есть мы указали Students Да здесь и говорим Students Left Join записи на курс И говорим что там где у Students вот э вот колонка курс Student ID то есть вот эта вот колонка что из этого джоина у меня сразу становится ясным мы берём Ключи из таблицы

вот эта вот колонка что из этого джоина у меня сразу становится ясным мы берём Ключи из таблицы Students у колонки Students ID прис присваиваем их в таблицу записи на курс да ну у меня что-то точно могу сказать где у меня уже будет са Да почему его не нету в запи Значит у нас есть штука это вот вот эта колонка я с это из коло и здесь я вижу что здесь у меня есть четвёртый идентификатор А в этой колонке четвёртого идентификатора нет что это означает что я очевидно присоединюсь у меня будет

колонке четвёртого идентификатора нет что это означает что я очевидно присоединюсь у меня будет Иванов дальше у меня будет Петрова дальше у меня будет там какой-то а опять Иванов дальше у меня будет и да [музыка] Мет но при этом так как я к левой табличке присоединяют сюда вот у меня здесь есть ещё сидеров поэтому в результате у меня будет ещё одна строка в которой будет написано вот здесь вот сидеров а здесь что будет Ну пока нул Ну О'кей то есть мы сейчас дошли вот до этого момента Давайте

сидеров а здесь что будет Ну пока нул Ну О'кей то есть мы сейчас дошли вот до этого момента Давайте вопросы уба не до конца понял У нас же получается stud типа оно главное и записи на курс должно присоединяться к stud правильно да А типа А как А как курс ID типа ну как типа в одну строчку засни или типа как это произойдёт подожди я же сказал мы дошли Вот до сюда вот досюда сейчас Мы соединили вот эти вот две таблички мы обратились Пока к этим двум но мы в запросе ещё не дошли до этой таблички

эти вот две таблички мы обратились Пока к этим двум но мы в запросе ещё не дошли до этой таблички Окей Так значит мы выяснили что у нас в результирующей таблички должен быть сидеров но у него там где-то будет ну потому что этот сидеров у нас есть в юден но его нигде нету в записанных курсах Теперь мы говорим к той самой табличке где у меня там будет Иванов Петрова Иванов Смирнов и Петрова у меня вот сюда вот должно ещё присоединиться что записи на курс курс ID вот эта колонка там где а точнее

вот сюда вот должно ещё присоединиться что записи на курс курс ID вот эта колонка там где а точнее нет курс записи на курс Вот вот эта колонка это вот она а курс кур ID это вот эта вот колонка и что у меня в таком случае получится у меня будет здесь Ну да здесь я не дописал что здесь ещё будет от сидеров А что я беру я беру из записи на курс идентификаторы Вот они Они у меня здесь есть получается что математику я [музыка] дописываются математика математика а здесь что будет на точно или нет Ну

что математику я [музыка] дописываются математика математика а здесь что будет на точно или нет Ну вот у нас же курс ID нету а мы Соединяем по курс ID Ну да здесь ну Ну так что все согласны что ну или нет или что-то другое будет сейчас тут Мне кажется вс-таки есть ошибочка потому что у нас мы делаем Joint записи на курс значит записи на курс левая табличка правильно Так ну например вот и вот записи на курс она у нас ну здесь Нижняя просто здесь Видишь заголовки таблиц Они под таблицей короче

на курс она у нас ну здесь Нижняя просто здесь Видишь заголовки таблиц Они под таблицей короче записи на курс она Нижняя в Нижней табличке у нас ID от одного до ТХ там четвёртого нету вот поэтому наверно Ну тот пример который ты сейчас обсуждаешь наверно нужно тогда в запросе написать что не запи на кур Ну и дальше Всё как по запросу Согласно запрос меня вот Нуф записи на курс означает что мы из берём дишни и Students и присоединяем эту табличку Давай ещё раз вот сюда вот вот Table A это

мы из берём дишни и Students и присоединяем эту табличку Давай ещё раз вот сюда вот вот Table A это Students А да Table B - это соответственно которые у нас там записи на курс а О'кей вот поэтому из таблицы Students я забираю всех да Ну хорошо Да здесь понятно просто что-то глючил хорошо Не ну как бы эти джоны Это только люди с профессиональной деформацией хорошо воспринимают на слух особенно когда первый раз видит это ну или там давно это не видели короче получается да что мы всё время Ну

когда первый раз видит это ну или там давно это не видели короче получается да что мы всё время Ну короче левая левая табличка в дни это которая From Окей хорошо Да ну как бы если если даже я не запутался я как бы не отвечаю решение и не помню которое на следующем слайде А как у нас может быть в левая табличка Students в данном эта если у нас нету Students ID ключа stud ID но у нас же есть вот у нас после того как мы дошли Вот до сюда у нас есть вот такая вот табличка Да И вот тут уже есть ключ

после того как мы дошли Вот до сюда у нас есть вот такая вот табличка Да И вот тут уже есть ключ курс ID Да просто вот делаем да я это понимаю почему-то что вот у нас всегда левая табличка это табличка я вот этого момента не понял А ну видимо нем а предыдущая та которая у тебя есть Это та которая у тебя первая левая но сейчас-то мы когда запрос написали мы получается получили уже новый об получили готовую левую табличку да которую уже делаем то есть не значит что если у меня здесь было 10 Джов

готовую левую табличку да которую уже делаем то есть не значит что если у меня здесь было 10 Джов Это значит что ВС время был Я же к после того как я к что-то присоединил У меня теперь как бы объект вот этот я с этим объектом работаю и джойн к нему ещё даже интересно можно было бы так чтобы всегда одна табличка была главной Короче говоря Давайте здесь что будет ну за Ну отлично Будем считать что здесь Ну сейчас проверим Ну и дальше понятно что здесь ещё будет инструкторы Вот потому что мы этих

здесь Ну сейчас проверим Ну и дальше понятно что здесь ещё будет инструкторы Вот потому что мы этих инструкторов тоже доставали из вот этой таблички но инструкторов Я уже писать не буду самое главное здесь Что понять две вещи первое что так как мы начали со stud у нас этот четвёртый Пере Вот сюда исго собрали мы уже работаем с этим объектом как с базовым то есть мы уже не храним какой-то объект в памяти который там был до этого Давайте теперь сравним что у нас получилось Ну собственно Да там за

памяти который там был до этого Давайте теперь сравним что у нас получилось Ну собственно Да там за исключением порядка порядок Я не уверен Хотя вот этот запрос если у нас есть Student ID Student name кур ID кур Вот они все в этом же порядке здесь расположены порядок кстати говоря здесь такой ну какой в селекте будет порядок колонок такой в результирующей табличке будет порядок колонн То есть если бы я здесь Student переместил в самый конец то в результате Вот это тоже оказалось бы вот здесь

бы я здесь Student переместил в самый конец то в результате Вот это тоже оказалось бы вот здесь это может быть важно для там выполнения всяких автоматических тестов Потому что если у вас подразумевается что вы должны из базы взять какую-нибудь выборку э выборка должна соответствовать строгому формату коло может быть важным для того чтобы тест прол Так ну что луба ответил бы на вопрос почему здесь нулы столько типа сходу ну конечно прямо сейчас типа почему нуже это мы обсудили Ате вос к те СГ

нулы столько типа сходу ну конечно прямо сейчас типа почему нуже это мы обсудили Ате вос к те СГ сказа вот тако вот Почему как может возникнуть такая ситуация что вот здесь вот много лов что это означает Судя по вот этому запросу некоторые Student ID не содержат курс ID а из-за этого там ну в курс ID А дальше Ну дальше Потому что курс ID не содержит короче это цепочка какая-то Ну если бы мы знали что это такое мы не знаем На самом деле Да правильно здесь просто универсальный ответ почему у вас

что это такое мы не знаем На самом деле Да правильно здесь просто универсальный ответ почему у вас нулы появляются например в лейне он будет примерно такой что табличка с которой мы начинаем Джони содержит больше идентификаторов чем та табличка которую мы присоединяем и здесь это видно табличка с которой мы начинаем Джони содержит больше идентификаторов чем табличка к которой мы присоединяем кою мы присоединяем вот это в общем в определённом смысле универсальный на самом деле ответ Окей давайте

присоединяем вот это в общем в определённом смысле универсальный на самом деле ответ Окей давайте вопрос по вот этой части получается когда мы джом вот когда например вот у левой таблицы Типа она была меньше по размеру а правая была больше то есть когда мым на левую О как бы автоматом просто расширяет ти это ВНО происходит правильно не понял вот можешь на так таких та например Students там же только четыре количество строк записи на курс получается сколько там пять и когда мы присоединяем его

четыре количество строк записи на курс получается сколько там пять и когда мы присоединяем его то общая таблица Она просто сама по себе как бы ши Ну увели количество Ну куда расширяется в ширину или в высоту высоту Нет не обязательно Мы можем сказать что если бы у нас вот здесь вот был бы четвёртый Ну или я не знаю было бы у нас здесь 1Д идентификатор 3 идентификатор 4 А вот этой строки бы не было Если мы эти две таблички сли бы по Student ID у нас табличка осталась бы того же размера Это

было Если мы эти две таблички сли бы по Student ID у нас табличка осталась бы того же размера Это зависит от того какие Ну как бы что у тебя по структуре вот здесь за табличка что если она просто содержит все те же самые идентификаторы Да ещё и по одному разу то без проблем будет тот же самый размер Угу А если одни и те же тогда размер больше что Ну если изначально как было 1 2 1 3 2 типа тогда оно будет увеличиваться Ну она будет увеличиваться просто потому что у тебя идентификаторы здесь

оно будет увеличиваться Ну она будет увеличиваться просто потому что у тебя идентификаторы здесь единичка два раза содержится двойка два раза содержится просто из-за этого она будет увеличиваться что у тебя здесь несколько раз содержится идентификатор из этой таблички Окей понял кость хочу разобраться в кай какой момент табличка становится левой Значит мы выбираем определенные Столбцы колонки вернее из таблиц и говорим присоедини вот дословно присоедини записи на курс к и вот тут где после О мы

из таблиц и говорим присоедини вот дословно присоедини записи на курс к и вот тут где после О мы укажем таблицу первой та и будет являться левой правильно понимаю Ну да их можно поменять местами обычно так не делают потому что это ещё При наличии ещ [музыка] е записью на курс поэтому мы должны здесь указать что будет у нас левой и вторая вот э запись на курс она будет как бы правой условно можно писать по другому но это оче Это просто жутко читается и в целом является ошибкой понятно к чему это

по другому но это оче Это просто жутко читается и в целом является ошибкой понятно к чему это присоединить понял нормально хорошо нужны это ещё не все джоны как бы совершенно и 100% самые распространённые есть вот такой Давайте кто скажет это такое обединение самом то есть что мы делаем в мы говорим что у нас есть вот эти вот идентификаторы 1 2 3 есть вот эти идентификаторы 1 2 4 Значит мы Составляем табличку из объединения этих идентификаторов там где мы не нашли какой-то информации тройки

табличку из объединения этих идентификаторов там где мы не нашли какой-то информации тройки нету в табличке B поэтому здесь генерируется Ну вот связь Трой друм цветом вот связ тро с четки Нет наоборот в другом месте поэтому мы говорим что четвёрка здесь есть а здесь её нет поэтому здесь тоже Ну то есть тоже с огромной радостью вам на генерирует нанов Вот ещё лучше чаще всего чем ий ниг вживую не виде Нива когда мы генерируем каждый с каждым вот у нас есть идентификатор о этому идентификатору О

виде Нива когда мы генерируем каждый с каждым вот у нас есть идентификатор о этому идентификатору О мы говорим что он будет у нас скомбинированы с каждой строкой из другой таблички пожалуйста у него есть вот он 1 X1 1 X1 1 X1 и забираем все элементы из другой таблички вообще все строки дальше второй соответственно X2 X2 X2 А здесь опять перебор всех вариантов Ну и для тройки тоже самое здесь я не знаю наверное если oss есть его кто-то действительно где-то использует Я никогда его правда не

я не знаю наверное если oss есть его кто-то действительно где-то использует Я никогда его правда не видел в чтобы это присутствовало ну наверное где-то где-то это есть да а ещ появился вопрос по поводу селекта там которы там л которые мы выбираем они потом а остаются независимо от того что мы укажем From да да Угу то есть подтянутся только эти цы если ты э написал название таблицы и колонку то здесь Ты можешь не перечислять всё можешь перечислять можешь перечислять Вот Но как правило этого не

Ты можешь не перечислять всё можешь перечислять можешь перечислять Вот Но как правило этого не делают потому что это будет то же самое но ты здесь напишешь Students Students curses cses и потом здесь опять напишешь Students curses А ну как бы From просто с одной таблички работает нормально Угу А если написать м вообще там какую-нибудь звёздочку Не сработает не м звёздочка такого нет какая-то табличка как минимум должна быть указана дальше SQL разберётся что там да и другая табличка присутствует

как минимум должна быть указана дальше SQL разберётся что там да и другая табличка присутствует и всё такое но какая-то табличка должна быть указана Угу спасибо ну здесь тоже некоторая разница присутствует вот в mysql есть такое замечание что нету операции Full Join Вместо неё там используется операция Union Но это собственно то что сказала Настя это объединение просто Union - это объединение Вот и в целом в зависимости от того В каком диалекте вам предстоит что-то написать Я всегда очень

Вот и в целом в зависимости от того В каком диалекте вам предстоит что-то написать Я всегда очень рекомендую изучать документацию потому что где-то там вот как и здесь Где он Где он где-то дефолтный - это н на самом деле почти везде такой но на всякий случай то есть вот в как бы в базовом запросе Если вы делаете in Join Вы можете не писать слово и вы можете просто написать Jo Вот Но это такая оптимизация которая кроме размера запроса не на что не влияет и такие вещи я бы всегда рекомендовал

оптимизация которая кроме размера запроса не на что не влияет и такие вещи я бы всегда рекомендовал уточнять по документации то есть надо прямо найти вот мы пишем запрос в каком-нибудь оракле надо прийти и сказать что как сделать там в орак операцию Full Join он вас тоже скажет то что Full Join в этой базе делается через операцию Union вот Ну ничего не поделать Вот SQL такая штука где в каких-то не очень таких популярных операторах Есть некоторая разница вот ничего не поделать в питоне там 311

не очень таких популярных операторах Есть некоторая разница вот ничего не поделать в питоне там 311 есть этот моржовый оператор в питоне 3.8 нет Марго оператора или там 37 вот тако к этому нужно нормально относиться так ещё одна визуализация я по такой визуализации не умею объяснять про вот эти круги Там кого-то и так далее поэтому тут на на ваш выбор мне вот это кажется гораздо более понятным вот здесь есть ещё одна такая ну как сказать Типа подзона вот в принципе вот достаточно просто

вот здесь есть ещё одна такая ну как сказать Типа подзона вот в принципе вот достаточно просто представлять се Вот это чтобы нормально ответить на вопрос о том какие джоны вы знаете и чем один джойн отличается от другого на каком-нибудь собеседовании Вот то есть in Join Left Right это мы понимаем что это одно и тоже практически и это в целом будет достаточно иногда удобно конструировать запрос вот таким вот способом такой способ называется или вложенные запросы и Ну что тоже самое переводится

таким вот способом такой способ называется или вложенные запросы и Ну что тоже самое переводится как вложенный запрос а что происходит вот тут как можно человеческим языком описать что здесь ну найди нам юзера самого Я не знаю самого позднего который самый я не знаю что там confirmation Date Ну короче который совершил действия самый последней Ну да Но типа здесь мы выбираем из пользователя который был подтвержден последним как конструируется вложенный запрос Значит у нас есть какая-то

который был подтвержден последним как конструируется вложенный запрос Значит у нас есть какая-то классическая штука что-то откуда-то и дальше мы можем например как вот здесь в примере указано написать что где confirmation но вме того чтобы подставить кайто че например на слайдах выше Мы можем написать ещ один запрос вложенный и в таком случае что мы здесь говорим мы говорим что забери максимальное значение из поля [музыка] confirmation то есть достаём из таблички подтверждённых пользователей

значение из поля [музыка] confirmation то есть достаём из таблички подтверждённых пользователей самую последнюю дату и получается вот этот вот зареч этого Зато это даже фактически будет не табличка а какое-то одно значение но оно всё равно обязано быть представлено как табличка и мы говорим что в качестве это будет у нас таким входными данными для внешнего запроса который у нас будет искать дату подтверждения среди максимальной даты которую мы получим отсюда вот ложные запросы довольно сложная

подтверждения среди максимальной даты которую мы получим отсюда вот ложные запросы довольно сложная штука но при этом они тоже бывают Жона естественно но спрашивают на собеседованиях очень много из вложенных вопросов Можно вложенных запросов можно сделать с помощью или как-то ещё то есть вложенные запросы - это не что-то супер прям необходимое что без чего Невозможно работать но часто бывает что со вложенным запросом работать удобнее если перед вами вложенные запросы вам нужно понять от вас

со вложенным запросом работать удобнее если перед вами вложенные запросы вам нужно понять от вас хотят нужно искать самый внутренний запрос запроса И после этого понимать что этот внутренний запрос возвращает подставлять его результат во внешний запрос и после этого анализировать вот Сергей а у меня такой общий вопрос то что у нас в индексе с капсом написано это соглашение или это обязательно типа только так будет работать просто это почти везде соглашение Вот Но при этом далеко не во всех

типа только так будет работать просто это почти везде соглашение Вот Но при этом далеко не во всех редакторах SQL редакторах это будет делаться автоматически вот в целом можно писать и так и так но это сильно зависит от того как принято в конкретной компании есть редакторы которые автоматически тебе всё делают капсом есть редакторы которые на регистр не реагируют и ну как бы просто ты пишешь обычным каким-то там шрифтом тут Я рекомендую как бы придерживаться более классической штуки и писать

каким-то там шрифтом тут Я рекомендую как бы придерживаться более классической штуки и писать капсом но при этом обязательным это не является и так и так запрос будет выполнен Вот Но лучше писать заглавный Так ну с subqueries там можно поработать будет отдельно Я бы сейчас с него не рекомендовал начинать потому что он может быть сложен для понимания лучше сконцентрироваться на джоина и на ещё одной прекрасной штуки которая называется оконными функциями [музыка] Давайте ещё раз реверс инжениринг

прекрасной штуки которая называется оконными функциями [музыка] Давайте ещё раз реверс инжениринг У меня есть исходная табличка Вот такая вот а вот эта колоночки добавилась сюда в результате вот этого запроса Вот кто может объяснить что здесь происходит а но нет а но она проставляет ранг отсортировать всё по зарплате то она ранжиру ЕТ по колонке се выставляет Нет есть очень важная деталь о выставляет ранг не человеку а департаменту человека Да правильно То есть у нас получились Такие группы

ранг не человеку а департаменту человека Да правильно То есть у нас получились Такие группы здесь они отмечены как Personal Там sales и так далее и ранги стоят внутри этих групп но теперь давайте по-человечески как бы это звучало Ну сперва мы группирует спойлер Ну какая-то группировка хитрая Ну типа да ну Partition by - Это почему разделить Угу скажи Кто больше зарабатывает в каждом департаменте от ранжиру Да грейды мы фактически просто проставить ранги по зарплате сотрудникам которые находятся

ранжиру Да грейды мы фактически просто проставить ранги по зарплате сотрудникам которые находятся в разных отделах вот э смотрите как на самом деле это можно читать то есть здесь мы в селекте Понятно выбираем три колонки тут всё привычно дальше у нас идёт название оконной функции название этой оконной функции ран Это означает что мы должны проставить ранги все понимают что такое ранги первое место второе место третье место четвёртое пятое шестое как чуваки марафон прибегают так и вот Это их

второе место третье место четвёртое пятое шестое как чуваки марафон прибегают так и вот Это их ранги что происходит Дальше то есть мы должны будем проставить какие-то ранги то есть каким-то образом отсортировать наши строки дальше мы пишем ключевое слово оно означает что сес мы буде применять вот эту оконную функцию rang и нам нужно написать к чему Мы будем её применять здесь у меня указано Partition by dep name То есть я должен буду всю свою табличку разделить на а группы пользуюсь уникальными

by dep name То есть я должен буду всю свою табличку разделить на а группы пользуюсь уникальными значениями вот в этом вот столбце уникальные значение в этом столбце у меня либо девелоперы либо там какие-то какой-то персонал либо какие-то сейлы дальше у меня всё я разделил Я понял что они у меня здесь есть У меня получилось Три группы дальше я говорю упорядочил девелоперы и так далее упорядочите групп по зарплате по убыванию Теперь у меня девелопер первый 6000 девелопер второй 52 и так далее

групп по зарплате по убыванию Теперь у меня девелопер первый 6000 девелопер второй 52 и так далее дальше у меня идт персонал 3900 персонал какой-то там ещё 3500 sales 5000 и так далее То есть вот эта сортировка которая здесь указана как Order byk она работает только в конкретных группах Если бы я просто взял и бы это была бы обычная сортировка по колонке когда я использую Partition Buy и orderby это я сначала делю на группы а потом внутри этих групп сортирую но я не забываю что у меня здесь ещё

я сначала делю на группы а потом внутри этих групп сортирую но я не забываю что у меня здесь ещё проста Мне нужно ещё проставить ранг так как я разделил по департаменту и упорядочил по зарплате У меня теперь несмотря на всё остальное будут просто проставляться ранги девелопер он оказался здесь первый у него могло быть 12.000 150.000 но просто сам факт что он оказался здесь первый Я ставлю ему ранг один дальше я ставлю два ранга д все понимают Почему два ранга два но они типа Оба на втором месте

один дальше я ставлю два ранга д все понимают Почему два ранга два но они типа Оба на втором месте дальше я ставлю четыре все понимают Почему четыре или непонятно почему четыре Ну ладно сейчас понятно нелогично Ну типа такое соглашение просто да давайте пока скажем что пусть он четвёртый и так далее ну короче у персонала было два человека у этого больше у этого меньше поэтому тоже 1Д и у сейлз здесь ситуация похожая один и тоже 2Д То есть получается что я не осуществляю группировку разбил свою

ситуация похожая один и тоже 2Д То есть получается что я не осуществляю группировку разбил свою табличку на группы Я просто её как бы переставил строки в ней местами потом указа По какому полю Яри э групп хочу отсортировать и с помощью функции н проставить кость вопрос а соответственно функция rang - это что-то ну встроенный какой-то модуль встроеная функция которая известна А в селекте Мы выбираем Но для того чтобы она осталась просто в финальной таблице результирующей типа как важный параметр

Но для того чтобы она осталась просто в финальной таблице результирующей типа как важный параметр А - это просто название этой таблицы изначально да Угу Всё ясно Значит вот смотрите Чем отличается ранг точнее оконная функция от группировки в группировке я обязан применять какую-то агрегацию я должен посчитать среднее я должен максимум выбрать В общем всё что угодно представьте себе очень простой случай вы хотите в пансе найти сгруппировать по полу например да Если вы в пан просто напишете он

случай вы хотите в пансе найти сгруппировать по полу например да Если вы в пан просто напишете он вам Верт он вам Верт какой-то потому что вы должны к нему Дописать что я вот хочу найти средний рост к примеру и только после того как вы допишите что вы хотите написать средний рост он с группирует посчитает и вернёт вам этот объект вот в такая же штука если я хочу что-то сгруппировать зде просто переставил строки свое существующей таблиц местами каким-то образом эти строки упорядочил в данном

переставил строки свое существующей таблиц местами каким-то образом эти строки упорядочил в данном случае по зарплате внутри групп и потом добавил сюда какую-то колонку у меня как было сколько-то строк В этой табличке так и осталось у меня не возвращается объект в котором У меня три строки например максимум зарплаты девелоперов сейв там ещё кого-то я ничего не Груп я их переста местами ири эти ру новую информацию нал и главное отличие от оконных функций что оконные функции не агрегирующие

ру новую информацию нал и главное отличие от оконных функций что оконные функции не агрегирующие [музыка] ти по алфавиту бы его типа Где больше цела В общем Ещё раз повтори я не понял если Order сделать он типа по алфавиту выведет правильно то по алфавиту да А если by то что он делает типа Где где больше сумма или где больше чего типа По какому критерию если он тебе но смотри вопрос понятен ответ да по алфавиту Но на самом деле это совершенно неважно потому что у меня просто поменялись строки

да по алфавиту Но на самом деле это совершенно неважно потому что у меня просто поменялись строки местами у меня этот девелопер он у меня мог оказаться Ну предположим что он бы не сортированного первый блок например вот этот девелоперы оказался бы внизу чтобы что-нибудь поменялось бы нет ничего не поменялось бы то есть это на самом деле не принципиально абсолютно здесь Смысл в том что эти девелоперы внутри отсортированы по зарплате а находятся они выше сейлз выдачи или ниже сейв выдачи имеется

внутри отсортированы по зарплате а находятся они выше сейлз выдачи или ниже сейв выдачи имеется в виду в в самой табличке это не имеет значения главное что я по этим девелопера и там сем главное что я разделил по ним то есть использовал by по ним вот это важно А где они там в итоге оказались в этой табличке это не суть Понял и то что вот насчёт то что ты говорил оконного это вот всё что внутри Over это есть типа Конная ну вся вот эта вот функция то есть начиная с того что я хочу применить

Over это есть типа Конная ну вся вот эта вот функция то есть начиная с того что я хочу применить функцию ран функция ран - это оконная функция но я Этой функции должен с помощью о и вот этой конструкции сообщить где я и что буду этой оконной функцией считать она на самом деле Почему оконная потому что она пробегает по как бы вашей табличке и просто говорит что там вот в этом окне девелоперов я делаю Вот это Потом я иду дальше беру там следующих сейлз в ней я делаю тоже самое но только теперь на

Вот это Потом я иду дальше беру там следующих сейлз в ней я делаю тоже самое но только теперь на этом под множестве строк она как бы просто работает в определённом окне все если я работаю сейчас с девелопера все се Ил все уходят там куда мы их не ро потом я перехожу к Сезам делаю внутри этого окна тоже самое понял Сергей то есть правильно я понял у нет какого-то определённого принципа возможно просто там девелопер встретился раньше ну типа первый в этом списке был поэтому так и получилось он

просто там девелопер встретился раньше ну типа первый в этом списке был поэтому так и получилось он просто группирует не использу какой-то оден принцип ская я бы не сказал что он прямо группирует потому что всё-таки группировка в контексте там того с чем мы работаем имеет вполне определённое значение это сгруппировать И агрегировать вот он упорядочивает то есть всех перемещает девелоперов туда персону туда sales Туда Ну так интуитивно говоря конечно тоже для нас бы это можно называть

туда персону туда sales Туда Ну так интуитивно говоря конечно тоже для нас бы это можно называть группировкой да Просто смотря на это он сгруппированным областям таблички какие-то уникальные значения Вот но формально это не ру понял спасибо Так давайте про вот этот ранжирование значит в SQ существуют две функции ран Вот первая функция ран сейчас давайте к этому вернёмся ещё раз про ранг я сейчас скажу вот обычная функция ран добавляет ранг инран добавляет ранг Да ответ Ну типа с которым

сейчас скажу вот обычная функция ран добавляет ранг инран добавляет ранг Да ответ Ну типа с которым невозможно поспорить но есть деталь значит если у меня вот здесь у меня стоит обычная функция н и в таком случае что у меня два человека попали на второе место да Значит я им раздаю ранг 2 они оба находятся на одной и той же позиции но при этом следующий ранг Я ставлю четыре потому что именно позиции У меня всего занято три поэтому следующий у меня всего у меня слота занята три Пусть и два из них

У меня всего занято три поэтому следующий у меня всего у меня слота занята три Пусть и два из них оказались как бы на одном на одной позиции дальше я ставлю четыре то есть вот здесь вот я тройку пропускаю Если бы я использовал функцию вместо rang Den rang то есть вот здесь было бы написано де R то в таком случае здесь бы было проранжировать Вот это значение Ну тут нету ответа на вопрос когда использовать то когда это да это ну такая как бы зависит от конкретной задачи Вот если у вас там

использовать то когда это да это ну такая как бы зависит от конкретной задачи Вот если у вас там например Это какие-то спортивные соревнования и действительно два человека секунды в секунду пришли это же не значит что третье место должно быть пустым Правильно Потому что ну как ну типа кто-то же должен на третьей позиции оказаться на пьедестале вот Ну да двое разделили второе место это такое бывает в спорте вот поэтому тут это просто такая деталь всегда в общем-то у вот этого оконных функций

в спорте вот поэтому тут это просто такая деталь всегда в общем-то у вот этого оконных функций есть тоже достаточно Простой Простой синтак То есть вы всегда перечисляется в селекте потом вы указываете какое-то название функции потом вы говори ульм значениям те же самые сотрудники Я не знаю возрастная категория в спорте и так далее что мне нужно отсортировать и собственно какую вот по какому столбцу я буду делать количественную оценку Ну и дальше Вы можете сказать что вы например вот или Да это

я буду делать количественную оценку Ну и дальше Вы можете сказать что вы например вот или Да это вот такие два параметра которые мы бы сюда например добави [музыка] мы бы взяли первых трх вот отсюда дальше здесь Взяли бы всех и здесь Взяли бы всех Почему Потому что мы бы написали что мы хотим только в рамках первых трёх позиций это делать типичная задача Найдите там я не знаю самые дорогие товары по категориям топ три самых дорогих товара по категориям Я не знаю телевизоры смартфоны ноутбуки

по категориям топ три самых дорогих товара по категориям Я не знаю телевизоры смартфоны ноутбуки вот в рамках этих трх категорий Найдите самые дорогие товары сорти по убыванию цены ранжиру и Rose 3 скажет нам что мы работаем только в рамках трёх позиций видится что оконные функции могут путать Но на самом деле когда к ним привыкаешь становится достаточно ну в общем достаточно удобно работать с данными Вот потому что иногда кажется что группировка - Это чересчур такая [музыка] большого

с данными Вот потому что иногда кажется что группировка - Это чересчур такая [музыка] большого количества информации нас избавляет нам бы Вот хотелось бы что-то вот между группировкой и между просто и от сортирую мне по всем колонкам что-нибудь вот поэтому к оконным функциям рекомендую присмотреться это удобный способ и знание оконных функций Это хороший плюс тоже там для хорошего прохождения собеса так много значит есть функция R Number Ну тут несложно догадаться что она делает просто нумеруют

так много значит есть функция R Number Ну тут несложно догадаться что она делает просто нумеруют строки тоже может показаться как бы зачем но вот есть такая ранн поговорили это собственно ранг выраженный в процентах то есть мы можем говорить что это там человек первый человек второй ВМ считается вот по такой фор мым знание получил бы если бы была функция ран вычитаем её из единицу и делим на общее количество рангов -1 это нормировка на самом деле Чтобы мы находились не в рамках 1 2 4 5 10 а

количество рангов -1 это нормировка на самом деле Чтобы мы находились не в рамках 1 2 4 5 10 а чтобы мы находились в рамках долях относительно 100% вот а э ну вот это cumulative типа distribution это как в куда вы попадаете на там я не знаю какой-нибудь функции распределения да то есть вот вас можно вот так вот просуммировать вспоминаете статистику это оттуда вот просуммировать но не сильно часто используется на самом деле так по по опыту Хотя наверное может быть где-то часто вот я бы

часто используется на самом деле так по по опыту Хотя наверное может быть где-то часто вот я бы рекомендовал вот очень плотно на ра и остановиться и есть такая штука которая называется давайте у меня картинки здесь по ней нет Сейчас мы посмотрим что делает прямо по картиночки Давайте кто может к Может опять попробовать пофантазировать здесь на самом деле вс всё может быть даже проще Чем вам может показаться но просто так вот чтобы что он как будто бы здесь делает Сергей и в этом диапазоне

может показаться но просто так вот чтобы что он как будто бы здесь делает Сергей и в этом диапазоне присваивает Вот этот номер группы как это назвать Ну то есть до 399 это будет 1 там до 299 2 и дальше Всё что осталось он третьим определяет я так пони Ну да практически верно но на самом деле Ещё ещё проще у получается самом правильно сказа [музыка] ближе к тому что к тому что к истине В общем мы берм и говорим в этом запросе что мы выбираем какие-то колонки дальше 3 означает что мы хотим

мы берм и говорим в этом запросе что мы выбираем какие-то колонки дальше 3 означает что мы хотим разбить наши данные на три группы И после этого говорим что мы будем упорядочивать по прайсу и получается топче самых дорогих все они относятся к группе о топ 2 самых дорогих они относятся У нас в категорию 2 Ну именно 2 и как бы третья группа 2502 150 которая у нас относится к группе 3 то есть видите мы здесь не сказали вот тут В чём отличие от того что в реальности делает от того что ты сказа

мы здесь не сказали вот тут В чём отличие от того что в реальности делает от того что ты сказа здесь ложим раме но мы на самом деле эти числовые параметры сами не указываем мы просто ему говорим что вот у нас есть какой-то Ну там топ каких-то товаров Да с определённой ценой И топ этих товаров подели сам на три группы если у нас не кратное значение то Ну в первой группе будет просто выбрано такое значение которое сделает все остальные группы равными по Ну как сказать по количеству элементов Вот

значение которое сделает все остальные группы равными по Ну как сказать по количеству элементов Вот в общем й хороший способ тоже по категориям разбить наши объекты Когда у нас нету там какого-то ограничения Да мы хотим просто там вот всю нашу таблицу разбить там на несколько групп по какому-нибудь признаку Кост Ну тут в запросе ещё указано в квадратных скобках й кажется в примере с ранком не было такого что синтаксис я такой синтаксис не знаю Я предполагаю что это название колонки которые

было такого что синтаксис я такой синтаксис не знаю Я предполагаю что это название колонки которые здесь будет я я не уверен честно говоря А ну да это как Number видите здесь написано то есть просто он подставляет название этих колонок вот интересно конечно я не встречал такого псевдоним СКТ СКА я вот поэтому гово может в квадратных скобках чтобы он второй раз не заглючил Что типа это опять как будто бы какая-то оконная функция Вот в чём дело А ну это видимо потому ра равно методу равно

как будто бы какая-то оконная функция Вот в чём дело А ну это видимо потому ра равно методу равно название метода Поэтому нужно вернуть Да вопросик был про то что это же это выглядит как Ну когда мы ставим тройку это выглядит как как это к вентили называется ну в смысле он делит на три группы по Ну Согласно распределению Да но Согласно когда Ты делишь Согласно распределению тебе чтобы найти там например смотри когда ты делишь Согласно распределению тебе нужно вычислить медиану се пятые дцать

например смотри когда ты делишь Согласно распределению тебе нужно вычислить медиану се пятые дцать пятые и так далее какие-то квартили там или Персен неважно здесь мы это ну как бы не вычисляем то есть у нас здесь нету какой-то статистической он просто берёт топ Ну и пытается разбить его На три одинаковых групы Какой это квантиль окажется прямую здесь не указываем то чтобы чтобы по распределению разделить Тебе нужно выяснить какие-то меры тенденции этого распределения Например тебе нужна

разделить Тебе нужно выяснить какие-то меры тенденции этого распределения Например тебе нужна медиана чтобы понять где у тебя 50% здесь мы этого не делаем мы не выясняем где у нас 50% он как-то сам попытается это сделать в плане того что он просто будет разбивать это на какое-то количество групп но вычислять медиану он не будет Я кстати думаю что вычисления Ну вот более похожие на то что ты описала подход это вот эти вот две штуки то есть нран И дист там будут вычисляться параметры которые

подход это вот эти вот две штуки то есть нран И дист там будут вычисляться параметры которые связаны с с распределением А кто помнит что такое лак и Лик Давайте необходимо мозговое усилия с первой фазы по-моему на первой фазе то не было но лак - это сколько времени до до предыдущего алит - это до следующего или наоборот или наоборот вот ну видишь я в суме моё утверждение истины Ну нет Да я люблю такие невозможно поспорить Просто об Так ну у меня на самом деле всё собственно много хотели Что

такие невозможно поспорить Просто об Так ну у меня на самом деле всё собственно много хотели Что такое ли в с то что ты сказала лак сдвигаем вниз как во временных рядах Лид поднимаем наверх вот Ну в зависимости от того В какую сторону временной ряд конечно напра направлен вот ну временные ряды вспоминаете дифференцирование временного рядам сдвигаем вни вычитаем из другого смотрим значение изменений Ну вот так вот Вот оно всё проявилось сейчас так ну собственно всё на самом деле Вот что хочется

Ну вот так вот Вот оно всё проявилось сейчас так ну собственно всё на самом деле Вот что хочется сказать что от SQL Много и часто хотят уйти не сильно успешно прекрасно себя чувствует он огромное количество просто не знаю триллионы строк кода так или иначе связаны с см поэтому все пользуются вероятно ещё долго будут пользоваться поэтому опять же кто планирует идти в какие-то таблички 100% будет SQL в том или ином виде Вот но пугаться его не стоит SQL - это абсолютно такая же Техническая штука

SQL в том или ином виде Вот но пугаться его не стоит SQL - это абсолютно такая же Техническая штука как вот и решаем задачки на ковар вот если регулярно решать по нему задачи никаких совершенно проблем не будет сказать что вы знаете SQL можно когда вы эти задачи решаете потом проходит ме Когда вы его не видите в глаза и начинаются некоторые в мозге изменения дегенеративного характера которые начинают вас путать между разными операторами и всем таким поэтому хороший способ держать себя в форме

вас путать между разными операторами и всем таким поэтому хороший способ держать себя в форме по SQ это просто регулярно решать задачи SQL есть на код Варс если мне память не изменяет для SQL есть несколько тренажёров про которые я сейчас скажу там тоже без проблем можно решать пару задач в день и просто держать себя в тое вот в целом как бы Когда вы будете нам куда-то устраиваться и именно там ближе вот по тому о чём я уже говорил да по каким-то там табличным данным умение написать запрос в

ближе вот по тому о чём я уже говорил да по каким-то там табличным данным умение написать запрос в сле это как умение пользоваться клавиатурой То есть никто не говорит вам знание Эля будет плюсом нет нет Это скорее вот если вы его совсем не знаете тогда это существенно снижает ши шансы на общение к этому надо быть просто гото есть ещё время освоить SQL ровно на там уровне не очень сложных Джой и там какого-то простого и понятного применения оконных функций в целом кажется что если вы знаете что

какого-то простого и понятного применения оконных функций в целом кажется что если вы знаете что такое Джой и оконные функции это уже успех почти наверняка вот Понятное дело что эти запросы они так же как и любая там компютерная программа Да она может состоять из де строк кода может состоять из 3 млн строк кода с сэлем абсолютно та же самая история есть запросы и в 200 и в 300 и в 1000 строк кода на чистом SQ тут как бы всё зависит от задачи от того что нужно сделать и так далее Вот Но как

кода на чистом SQ тут как бы всё зависит от задачи от того что нужно сделать и так далее Вот Но как известно даже трёхмиллионный по темам одну темку мы не затронули это кото сами почитаете что там читать нужно там повторять готовиться перед собеса или скорее пофиг Я не слышал чтобы кого-то об этом спрашивали это не гарантирует что ра используется срм Судя по опыту как скать сло рво говорит я вот как на лекции SQ посмотрел больше его и не видел никогда вот кто-то наоборот говорит что я там

вот как на лекции SQ посмотрел больше его и не видел никогда вот кто-то наоборот говорит что я там столько использую это SQL что вот хорошо бы чтобы у нас там я не знаю месяц мы этот SQ изучали Ну как бы тут просто тут надо сказать что нереляционных баз данных тоже громадное количество вот просто так история как бы у все нереляционные базы данных практически все они намного моложе вот просто SQL древний все хорошо изучены для него эффективные движки есть но тот же самый фаис когда вот вы

SQL древний все хорошо изучены для него эффективные движки есть но тот же самый фаис когда вот вы использовали фаис - это тоже в общем-то векторная база данных она маленькая Да но она хранит вектора Если вы попробуете хранить Вектора в чистом постгрес это будет работать очень плохо потому что постгрес не для этого придуман А и тут ну Совершенно не обязательно что Если уж что-то хранить то обязательно в скле нет вообще нет куча есть разных баз данных есть графовые базы данных но у SQL целое

в скле нет вообще нет куча есть разных баз данных есть графовые базы данных но у SQL целое семейство баз данных э поэтому Ну вот это не не Элем единым Просто он самый популярный Судя по тому что сейчас происходит так давайте по сегодняшним э по сегодняшним значит штукам здесь есть ссылка на видео Оно такое обзорное в рамках того что я там сначала рассказывал чуть-чуть поподробнее Но это просто кому может быть общеобразовательные какие-то соображения будут интересны учебник по SQ это такой

кому может быть общеобразовательные какие-то соображения будут интересны учебник по SQ это такой интерактивный курс значит он отличается от того что рассказывал я тем что разбирали в теории А здесь можно Ну исключение дубликатов Да он более такой интерактивный потому что здесь пря вам будет предложено в какой-то момент написать свой собственный запрос но что самое хорошее вообще у этого ресурса в целом это наличие вот такой штуки которая называется тренажёр Здесь много разных задачек они

в целом это наличие вот такой штуки которая называется тренажёр Здесь много разных задачек они разделены на несколько предметных областей в плане гдето у на про семейные тре компании с пассажирами где-то ещ про что-то и разделены по сложности Ну вот лёгких задач 30 Если кто-то сегодня будет полностью начинать только с лёгких то Я рекомендую конечно ну двигаться только только по ним вот но оптимальное соотношение - это решить штук восем лёгких из любого Тут они лёгкие они все прям правда лёгкие

соотношение - это решить штук восем лёгких из любого Тут они лёгкие они все прям правда лёгкие вот решить штук во из лёгких переходить к средним если штук 5 из сред них получилось Можно перейти либо на сложное либо видите здесь есть задачи собеседований Вот задачи собеседований иногда примерно такой же сложности как лёгкие как средние или как сложные они там тоже разделены можете посмотреть значит я этот ресурс рекомендую э в целом держать как хорошую такую Ну образовательную штуку где можно и

я этот ресурс рекомендую э в целом держать как хорошую такую Ну образовательную штуку где можно и попрактиковаться и почитать теорию поэтому Запишите его себе в любом случае а так здесь Вот ссылка на это это тренаж такой от международной Вот это это такая штука которая стандартизацией занимается короче он такой босяцкий Очень популярный тоже можно к нему обратиться начинать ВС равно рекомендую с Какие ещё есть варианты есть наш тре Пролетарского [музыка] Где где вам покажется удобнее

с Какие ещё есть варианты есть наш тре Пролетарского [музыка] Где где вам покажется удобнее симпатичнее и так далее но здесь по симпатично намного лучше чем у w3 и третий вариант - это вот этот вот это такой как сказать тренажёр формата формата непрерывное печатание Т здесь есть информация но видите зде зания Вот вот такой вот штукой значит Вы прям читаете просто Tile Найдите там заголовок каждого фильма Да мы просто вписываем сюда tle он сразу переходит на следующую то есть вот это прям когда

фильма Да мы просто вписываем сюда tle он сразу переходит на следующую то есть вот это прям когда вы вот в эту область смотрите А вот здесь вот печатаете В чём как бы прикольно этого тренажёра в том что он такой вас в некоторый поток вводит просто где Вы реально просто вот печатаете чата и там в конце ещ есть пара штук о которых я не говорил про удаление таблиц и так далее как бы всё что нужно для выполнения вот этого блока задач описано всегда чуть выше вот здесь я его нашёл на каких-то

для выполнения вот этого блока задач описано всегда чуть выше вот здесь я его нашёл на каких-то новогодних праздниках и просто залип на полночи потому что ну типа прикольно что ты сидишь слушаешь музыку и просто фига по клавиатуре [музыка] вс-таки acy Ну либо как уже там вам понравится больше здесь есть ссылка ещ на нормальные формы про видео это как раз про то что я говорил с самого начала Зачем разбивать большую табличку на несколько маленьких что это может нам дать и собственно Каким образом

разбивать большую табличку на несколько маленьких что это может нам дать и собственно Каким образом это происходит здесь довольно много в этом видео сложной терминологии потому что Честно говоря нормальный человек не должен понимать вот этих вот странных конструкций кода там э какой-то с определённым идентификатором атрибут не приводимым как-то транс что-то там как-то от другого ключа Короче говоря можно начать смотреть остановиться в тот момент когда станет ясно что это бессмысленно вот и что

можно начать смотреть остановиться в тот момент когда станет ясно что это бессмысленно вот и что сегодня я собственно Ну я ожидаю что первые 10 задач лёгких решат все на SQL Academy если у вас не получается решить какую-то задачу скиньте тот вариант решения который вы как бы который вы на котором вы остановились и не сидите долго Вот это тоже самое как с какой-нибудь задачей на питоне можно 2 часа просидеть и просто в бестолку вот поэтому просто вот вы Выделите себе там 15-20 минут не могу

часа просидеть и просто в бестолку вот поэтому просто вот вы Выделите себе там 15-20 минут не могу решить скидывайте решение Говорите Не пойму в чём ошибка и идите дальше просто двигайтесь дальше Вот не надо концентрироваться нам-то одном что получается ВТО Коре так там кстати не дро дроп ничего плохого не делает как правило Ну это без без возвратного И у меня всё на этом [музыка] спасибо типа же в целом всё равно на вот эти таблички которые построены со связями или прямо на них всегда надо

же в целом всё равно на вот эти таблички которые построены со связями или прямо на них всегда надо как-то полагаться или что-то такое Так давай так ну просто вывести имена всех людей которые есть в базе авиакомпании значит и теперь мы делаем следующим образом я делаю минимальный размер вот этой вот схемы и пишешь запрос то есть вывести имена всех людей которые есть в базе данных авиакомпаний схемы нет понят логика не особо не особо Ну хорошо тогда какой мне запрос надо написать типа базова

схемы нет понят логика не особо не особо Ну хорошо тогда какой мне запрос надо написать типа базова наверно селе Ну короче здо а или выведите именно всех людей которые есть пози блин а из чего типа короче понял Ну а вот теперь ответ на твой вопрос смотрим на нашу базу нам нужно что найти имена всех людей которые есть в базе данных авиакомпании смотрим на таблички табличка трип идентификаторы компания ы компания имя идентификатор пассажир место и вот табличка Passenger которой есть имя поэтому

ы компания имя идентификатор пассажир место и вот табличка Passenger которой есть имя поэтому мы понимаем что в запросе мы должны написать пожалуйста понятно Для чего нужна эта схема Да теперь да ну схема может выглядеть там устрашающе или непонятно Но на самом деле к ней тоже просто нужно привыкнуть это очень полезная штука потом если много запросов писать вы потом будете смотря на эту схему просто у себя в голове уже этот запрос конструировать это полезная штука Окей тогда успехов прям

просто у себя в голове уже этот запрос конструировать это полезная штука Окей тогда успехов прям Маленький вопрос про завтра там завтра я так посмотрела на программа она такая простенькая что прави зани пи докт завтра будет время Ну как сказать мне кажется я бы не сказал что завтра прямо совсем просто с учётом того что завтра тоже с облаком работать Вот соответственно всё дистанционно настраивать поднимать базу подключаться к базе поэтому не знаю я бы я бы может быть это отправил лучше

поднимать базу подключаться к базе поэтому не знаю я бы я бы может быть это отправил лучше куда-нибудь на четверг на пятницу там проект там по крайней мере вы там в своём графике решите в какой момент вы хотите к этому хорошо спасибо Ладно всё Давайте Приятного знакомства или приятных воспоминаний Как наст если ты уже знаком Давайте до вечера хорошего дня

Значит у нас на этой неделе всего такие три темы Сегодня мы посмотрим на пи она очень удобна для того чтобы деплоить модели Ну на самом деле она удобна там для кучи разных других вещей но её очень часто используют для деплоя моделей и мы только вот этим контекстом о заботимся дальше завтра послезавтра SQL завтра просто введение в SQL послезавтра будем устанавливать виртуальную машину SQL Север и будем подключаться к нему со своей локальной машины и в четверг пятница В четверг будет лекция по

и будем подключаться к нему со своей локальной машины и в четверг пятница В четверг будет лекция по спарку это такой что-то среднее между Элем и пандам библиотека которая позволяет более эффективно работать когда у вас действительно большие данные Вот потому что панс он как бы такой он хорош Когда у вас мало данных а когда у вас их слишком много грустно себя вести вот поэтому В таких случаях очень часто используется спар и в четверг же начнётся индивидуальный проект Вам нужно будет решить

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

на ней строятся не только задачи связанные с машинным обучением она вообще появилась как бы изначально для другого но это такая большая сама по себе область построения AP значит само по себе AP - это собственно просто на самом деле такой набор правил по которым мы говорим как можно обращаться с нашим сервисом то есть до этого мы когда какие-то сервисы делали собственно для нас как бы мы пользователя ставили в какую-то ситуацию в которой У нас вот есть например или Telegram бот или какой-то там

ставили в какую-то ситуацию в которой У нас вот есть например или Telegram бот или какой-то там смд сервис Да и фактически вот правила взаимодействия они просто определялись самой платформой на которой этот пользователь которой этот пользователь пользуется чтобы к нам как-то обратиться но довольно часто разные сервис Так что нам в общем-то не очень должно быть важно откуда к нам пришёл пользователь с сайта из Telegram Бота из мобильного приложения Ну собственно это на самом деле неважно Потому

с сайта из Telegram Бота из мобильного приложения Ну собственно это на самом деле неважно Потому что если у нас есть сервис который там позволяет решать какую-то задачу классификации откуда к нам эти данные приходят нам чаще всего не очень важен Когда Вы подключались к там моделям например на фейсе собственно всё что вам нужно было передать фейсу это какой-то свой токен и самому Фес без разницы пришли вы из Стрим лита или вы какой-то скрипт на питоне пишете который вот у вас обращается к этому

вы из Стрим лита или вы какой-то скрипт на питоне пишете который вот у вас обращается к этому приложению Ну то есть он сказал вам что вот ты должен прислать мне токен обратиться вот по такому адресу Откуда ты это делаешь Мне без разницы У меня есть твой токен я его проверяю он работает всё Откуда ты пришёл Это не так важно и собственно мы вот окажемся сегодня на той ране которая как раз таки показывает по каким правилам мы должны взаимодействовать мы сами разработаем эти и сделаем сервис

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

задача то есть условно говоря у нас есть какой-то КД Да к которому подключаются какие-то сервисы клиентские и нам на самом деле - важно сделать так чтобы наш AP был каким-то там удобным понятным и так далее но это мы уже всё будем проектировать самостоятельно и в самом проектировании А есть несколько правил э нам на самом деле они не сильно важны поэтому я сконцентрируйтесь [музыка] и скажете чу наме работать свой I то вы должны будете это делать Вот как бы Принимая во внимание эти правила

чу наме работать свой I то вы должны будете это делать Вот как бы Принимая во внимание эти правила первый принцип который довольно понятен - Это отделение клиента от сервера То есть у нас есть сервер на котором развёрнутая модель к этому серверу могут подключаться какие-то другие клиенты которые пользуются языком программирования который пользуются каким-нибудь сайтом мобильным приложением на самом деле нужно просто сделать так чтобы вот наша модель отвечает там например за классификацию

на самом деле нужно просто сделать так чтобы вот наша модель отвечает там например за классификацию чего-нибудь и больше она ничего не делает Ну то есть вот да присылайте нам запрос с картинкой мы эту картинку проанализируем и дадим вам какой-то ответ мы считаем что мы находимся как бы в этой ситуации на серверной части А клиенты которые могут к нам подключаться они находятся вот на какой-то своей ликой стит зайни если этот запрос там по правилам по данным всё подходит то О'кей мы как бы им

ликой стит зайни если этот запрос там по правилам по данным всё подходит то О'кей мы как бы им возвращаем тот результат который они от нас просят Ну это такой принцип который как бы сам по себе появляется весь как бы мир информационных технологий он сейчас так работает что у вас есть какие-то сервисы и есть какие-то Клиенты в виде разных там мобильных приложений сайтов и всего прочего а второе это такая философская штука отсутствие записи состояния клиента на самом деле это можно воспринимать

такая философская штука отсутствие записи состояния клиента на самом деле это можно воспринимать очень просто мы фактически мы можем собирать какие-то логи что к нам например пришёл какой-то пользователь Да этот пользователь там что-нибудь нам Ну попросил нас что-нибудь там обработать какие-то что-нибудь спрогнозировать но по большому счёту что это за клиент нам не очень важно у него есть токен мы ему этот токен сами когда-то выдали поэтому мы ничего о нём хранить не будем Потому что мы знаем

мы ему этот токен сами когда-то выдали поэтому мы ничего о нём хранить не будем Потому что мы знаем что вот у нас этот токен может быть либо валидный либо невалидный Да если он валидный мы с этим клиентом работаем если не валидный то мы ничего ему просто отвечать не будем Вот и когда к нам приходит клиент он должен принести к нам в виде своих каких-то данных только то что необходимо для ответа То есть если у нас сервис классификации картинок Мы у себя в AP прописываем что вот нам нужна картинка

есть если у нас сервис классификации картинок Мы у себя в AP прописываем что вот нам нужна картинка и не знаю там что-нибудь ещё от пользователя но при этом мы совершенно никакую другую информацию от пользователя не тре есть какойто набор который необходим для того чтобы наш сервис сработал ВС остальное мы от клиента Не требуем ну у нас это будет автоматически просто получаться по причине того что мы не будем собирать никакую информацию о клиенте мы просто он к нам будет приходить мы ему Будем

мы не будем собирать никакую информацию о клиенте мы просто он к нам будет приходить мы ему Будем отдавать е отдавать то что должны если он пришёл к нам и попросил у нас что-то сделать по пра предоставление кода по запросу мы с ними никак не столкнётся [музыка] показаться философским что клиент знает только одну точку входа на сервер То есть получается что Если даже у нас есть какой-то сервер который умеет классифицировать текст умеет Я не знаю ть картинки отдавать какой-нибудь прогноз там по

умеет классифицировать текст умеет Я не знаю ть картинки отдавать какой-нибудь прогноз там по чему-нибудь то у нас клиент знает как бы вот какую-то точку входа что он к нам приходит а дальше мы уже сами как бы берём его запрос и начинаем этот запрос распределять по каким-то конкретным функциям которые у нас существуют То есть если к нам приходит пользователи по адресу говорит что я хочу классифицировать картинку мы ему говорим что вот классифицировать картинку ты можешь вот по этому конкретному

картинку мы ему говорим что вот классифицировать картинку ты можешь вот по этому конкретному адресу по другому адресу ты не можешь прийти попросить нас сделать то же самое то есть мы жёстко задаём как бы самостоятельно адреса по которым клиент Может к нам приходить и подключаться и он этот адрес знает всё то что как бы ему не нужно всё то что его не касается мы просто об этом ему даже не говорим но это тоже будет довольно явно видно из кода который мы посмотрим тоже сегодня а значит все вот эти

это тоже будет довольно явно видно из кода который мы посмотрим тоже сегодня а значит все вот эти запросы когда я говорю что пользователь приходит к нам с чем-то и мы это что-то должны взять и проверить то что что оно там валидно не валидно для нас а всё это будет происходить с помощью http запросов значит для нас самые главные два http запроса - это запросы типа Get и запросы типа Post а запросами Get вы уже пользователи пользовались когда парсли вот та самая строка request.get Да в коде она

Get вы уже пользователи пользовались когда парсли вот та самая строка request.get Да в коде она что делала Она фактически брала А ваш адрес который вы передаёте библиотеке requests приходила на сайт по по этому адресу и фактически тыкала палочка этот сайт и говорила вот я к тебе пришла Отдай мне ту информацию которую ты отдаёшь когда к тебе переходят по этой страничке и потом когда вы получали вот этот вот код странички Да вы уже сами в этом коде искали А где там у меня название фильма или

вот этот вот код странички Да вы уже сами в этом коде искали А где там у меня название фильма или книги А где у меня описание фильма или книги и в общем всё в таком духе то есть получается что как бы запрос Get это Запрос который приходит к какому-то сервису и говорит ему что ты отдаёшь когда я вот сюда пришёл Я пришёл там на yandex.ru yandex.ru отдал мне погоду там чтото какие-то блог с новостями что-то ещё и так далее и так далее То есть когда мы хотим получить какие-то данные от нашего

что-то ещё и так далее и так далее То есть когда мы хотим получить какие-то данные от нашего сервиса мы используем Ну не от нашего сервиса от какого-то к которому мы приходим мы используем запрос типа Get то есть мы пришли сказали А Отдай ко мне вот по этому адресу что у тебя там есть но довольно часто Нам нужно использовать э как бы не просьбу о том чтобы сервер нам что-нибудь отдал а просьбу для начала чтобы сервер что-нибудь от нас принял Потому что если мы отправляем например какой-нибудь

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

Когда вы приходите на какой-нибудь сайт который требует авторизации вы вписывается логин и пароль и этот логин и пароль собственно вы отправляете этому сервису для того чтобы он мог проверить правильно вы ну имеете ли вы доступ или не имеете и вот этот вот запрос пост Это собственно ну можно так и говорить что это на самом деле Запрос который отправляет какие-то данные вот сегодня мы будем писать сервис который будет принимать на вход например текст и возвращать класс этого текста Вот если мы

сервис который будет принимать на вход например текст и возвращать класс этого текста Вот если мы что-то хотим получить мы отправляем запрос Get А если нам нужно что-то отправить мы будем пользоваться запросом пост есть ещё разные методы типа Delete и так далее они тоже маловероятно вам понадобятся но тем не менее просто так типа что их есть несколько разных вот этих видов запросов Но это опять тема такая разработчика это не то чтобы имеет отношение какое-то к машинному обучению Т В итоге на

тема такая разработчика это не то чтобы имеет отношение какое-то к машинному обучению Т В итоге на сма будет выглядеть примерно Таким образом у нас мы сегодня будем разрабатывать на примере как бы двух звеньев вот этой схемы мы сами будем писать то что называется вот этим IP Gateway или IP шлюз и посмотрим как к этому AP можно подключиться с помощью Стрим лита а на самом деле можно это будет делать и с помощью телеграма и с помощью любого другого сервиса То есть вы можете взять любой сервис

и с помощью телеграма и с помощью любого другого сервиса То есть вы можете взять любой сервис который умеет что-то делать в интернете и подключиться к этому нашему а Но идея здесь состоит в том что вот если у нас есть набор каких-то моделей которые решают какие-то задачи и если бы мы делали это в парадигме которая была ну там всю предыдущую фазу Да вторую то как бы это выглядело это выглядело бы так что вот у нас есть Стрим этот Стрим в себе содержит какую-нибудь Там модель например да если бы

так что вот у нас есть Стрим этот Стрим в себе содержит какую-нибудь Там модель например да если бы мы захотели использовать эту же модель для того чтобы например подключиться к на через Telegram то мы бы сказали что окей Ну вот у нас есть такая связка с мли модель если мы хотим тоже самое делать в телеграме Значит нам нужно сделать новую связку Telegram и наше модели вот в той парадигме в которой мы находимся Сегодня мы будем говорить что у нас все вот эти вот модели есть и мы просто описываем

мы находимся Сегодня мы будем говорить что у нас все вот эти вот модели есть и мы просто описываем правила по которым сервисы могут к этим моделям подключаться А дальше если эти правила нам известны а они нам известны потому что мы их сами придумали говорить в стрите надо написать там адрес нашего вот этого а шлюза и отправлять туда какие-то данные хотим дополнить нашу работу с помощью какого-нибудь teleg Бота мы ничего не меняем у нас есть вот этот вот разработанный и мы просто говорим Окей

teleg Бота мы ничего не меняем у нас есть вот этот вот разработанный и мы просто говорим Окей тогда из телеграма отправляйте там Get или пост Запрос к этому же серверу по каким-то определённым правилам и получается что если бы кто-то захотел я не знаю сделать какое-нибудь мобильное приложение мы бы этому человеку сказали вот у на есть вот он расположен вот по такому адресу хочешь ты сделать там какое-нибудь мобильное приложение пожалуйста у тебя будет какое-то приложение обращайся к нашему I по

мобильное приложение пожалуйста у тебя будет какое-то приложение обращайся к нашему I по определённым правилам то есть видите у нас теперь получается как бы одна модель и какие-то правила взаимодействия с ней а дальше мы просто говорим то что ну хотите подключаться подключайтесь нам от вас нужно вот это вот это вот это и подключайтесь к нам Всё будет работать внутри вот этого собственно Аза мы будем сами распределять какие функции за что у нас отвечают То есть у нас может быть на самом деле

будем сами распределять какие функции за что у нас отвечают То есть у нас может быть на самом деле во-первых несколько каких-то моделей и мы будем говорить что если к нам приходит какой-нибудь пользователь из телеграма который хочет классифицировать текст мы ему скажем что ты должен отправить запрос типа пост по адресу IP по с классифицируй мне текст и сама эта функция clf T будет обращаться к какой-то модели которая будет этот текст классифицировать и она что-то будет возвращать если у нас

какой-то модели которая будет этот текст классифицировать и она что-то будет возвращать если у нас будет целый перечень моделей то мы можем говорить Что окей У нас есть какая-то ещё одна модель пусть она работает с изображениями если пользователь хочет воспользоваться этой моделью Пусть он отправляет запрос типа пост по адресу Ну какому-то адресу который там который у нас будет и дальше с clf Image и сама вот эта функция clf Image она знает что ей нужно обратиться к другой модели потому что она

и сама вот эта функция clf Image она знает что ей нужно обратиться к другой модели потому что она теперь должна классифи Кати и у нас Вот таких вот адресов иногда это называются маршрутами У нас их может быть множество То есть у нас может быть какой-то супер классный мощный сервер с видеокартой Да где мы используя видеокарту просто как бы разными моделями отдаём какие-то результаты которые наши модели умеют отдавать и в целом там может быть расположено всё что угодно мы можем сюда мы можем как

умеют отдавать и в целом там может быть расположено всё что угодно мы можем сюда мы можем как бы на этом сервере например хранить какую-нибудь базу данных Да подключаться к этой базе данных она будет у нас обращаться Ну по какой-то определённой функции мы будем данные получать и пользователю обратно возвращать и тут как бы дальше становится понятно что это вообще довольно универсальная штука мы говорим об этом в контексте того что там у нас есть какие-то модели которые что-то предсказывают А в

об этом в контексте того что там у нас есть какие-то модели которые что-то предсказывают А в каких-то серверах там другого характера Это мо могут быть я не знаю там вы приходите например к какому-нибудь по какому-нибудь адресу и говорите А покажи мне все мои заказы которые я в этом приложении делал мы приходим в какой-то AP это AP обращается к базе данных и возвращает нам список заказов то есть мы просто находимся в контексте машинного обучения Но на самом деле это абсолютно универсальная штука

просто находимся в контексте машинного обучения Но на самом деле это абсолютно универсальная штука на которой работает вообще весь интернет вот а давайте какие-нибудь вопросы Может что-то надо объяснить люна Ну вот ты сказал что гет запросы это мы получаем информацию Да а пост когда мы что-то меняем почему тогда когда мы пользуемся моделями Я просто здесь ожидала увидеть гет запрос Ну у тебя же модель что-то должна какие-то данные например классифицировать Угу если мы хотим чтобы модель наши

модель что-то должна какие-то данные например классифицировать Угу если мы хотим чтобы модель наши данные классифицировал мы должны эти данные отправить нашему сервису правильно Поэтому пост запрос здесь будет если мы хотели Я не знаю распечатать количество слоёв например каких-то которые у нас есть в этой модели Ну условно да Или просто описание этой модели мы бы там я не знаю сделали какой-нибудь там СШ там не знаю да и отправляли бы если мы хотим чтобы модель что-то нам классифицированные Мы

там СШ там не знаю да и отправляли бы если мы хотим чтобы модель что-то нам классифицированные Мы эти данные должны отправить поэтому там будет пост запрос так у кого-то ещё рука была дадада при этом сегодня эти модели будут работать локально у нас и мы будем к ним строить правила обращения или мы как-то их поднимем Ну как бы минимум чтобы они работали локально если кто-то успеет то конечно можно развернуть там у вас даже задание на Яндекс можно поднять виртуальную машину там даётся Грант на

развернуть там у вас даже задание на Яндекс можно поднять виртуальную машину там даётся Грант на сколько-то денег вот и можно просто будет слить из гитхаба вот эту штуку запустить её там и она будет торчать как бы публично на весь интернет понял окей Значит тут смотрите вот к этой теме надо очень утилитарно подойти потому что вообще разработка это определённом смысле даже специальность потому что это такая это инженерия вот поэтому вам нужно как бы уметь к этой теме относиться Так что это

что это такая это инженерия вот поэтому вам нужно как бы уметь к этой теме относиться Так что это определённого рода деплой но деплой такого более общего смысла то есть видите мы здесь не завязаны ни на каком Стрим лите или на чём-то ещё то есть мы просто делаем какую-то штуку которой кто угодно может прийти и получить результат Ну либо тех кто Нам нужен да вот в целом разработка о это прям отдельная штука Вы на это не учились вам как бы это особенно особенно не нужно вам представление может

штука Вы на это не учились вам как бы это особенно особенно не нужно вам представление может быть хорошо бы иметь об этом но так чтобы прям глубоко погружаться вряд ли Вот мы тем не менее эту тему проходим потому что фа - это на самом деле одна из самых простых библиотек то есть Несмотря на то что у неё очень большое количество возможностей она на самом деле очень простая вот Ну понятно что там если куда-то зако супер глубоко то просто уже будет но она в своём как бы классе она достаточно

там если куда-то зако супер глубоко то просто уже будет но она в своём как бы классе она достаточно достаточно проста а она собственно Да тут написано быстрая асинхронная понятная действительно у неё одна из самых лучших документаций то есть там вообще построчно просто разбираются всякие разные случаи того как это можно использовать и в общем Она довольно популярна Вот про неё Классная шутка была в Твиттере где чувак который её там несколько лет назад делать он искал Ну смотрел какие-то

была в Твиттере где чувак который её там несколько лет назад делать он искал Ну смотрел какие-то вакансии там по работе и в одной из в одном из описаний увидел что типа там было написано опыт работы там с фа 2 года Он говорит Как жаль что я её всего лишь полтора года делаю так бы конечно я хорошо бы было и 2 года опыт иметь Вот то есть да Она довольно молодая но при этом моментально прямо обрела популярность Хотя ели ктото сл такие слова как дн то в целом ВС то что можно сделать на па можно

популярность Хотя ели ктото сл такие слова как дн то в целом ВС то что можно сделать на па можно сделать и на фласке и на Джан но представляет что они такие Чуть более специфичные в том плане что джан - Это прям такой огромный комбайн на котором можно сделать всё начиная отпи заканчивая там супер классным внешним видом вашего сервиса к в этом смысле более легковесный и тоже на НМ можно написать как бы конкретно там какой-нибудь сервис и про и веб страницами со всем остальным вот Fast AP Он

как бы конкретно там какой-нибудь сервис и про и веб страницами со всем остальным вот Fast AP Он практически никогда не используется для того чтобы как-то визуализировать вашу работу то есть например сайт на нём написать можно просто это будет Костыль как бы не совсем специфичный для него вот а но при этом сам AP можно довольно легко спроектировать Значит тут есть ссылочка если кому-то будет интересно Тут прямо есть целая книга про то как а строить Вот она на самом деле есть и на русском языке

Тут прямо есть целая книга про то как а строить Вот она на самом деле есть и на русском языке вот можно здесь посмотреть как вы видите здесь довольно довольно много всего Вот Но это опять же это надо понимать что это отдельная отдельная [музыка] штука Давайте тогда что перерыв делаем или код сразу Смотрим Да код ой давать готов Ну всё ой Так значит этот код лежит по второй ссылке которую я скинул там значит какая у меня здесь структура Да у меня есть две папочки Одна называется вторая

я скинул там значит какая у меня здесь структура Да у меня есть две папочки Одна называется вторая называется Front Папочка содержит себе просто приложение мы к нему вем позже потому что для у меня собственно заключается вся основная логика того с чем мы будем Ну как бы на чём я покажу как это устроено мы начнём с папочки AP здесь у меня есть папка utils в этой папке utils у меня как всегда может быть уже Забытые вами штуки вроде ну там этих не алгоритмов а функции нормализации изображений по

быть уже Забытые вами штуки вроде ну там этих не алгоритмов а функции нормализации изображений по среднему стандартному отклонению загрузка файла с классами Lab J да то есть это классы инета 1000 штук я использую здесь модель rnet 18 для одной из функций вот здесь у меня функция перевода идентификатора класса в его название значит функция загрузки одной модели функция загрузки другой модели и функция преобразования картинок Короче говоря это просто вспомогательные функции которые нужны для того

преобразования картинок Короче говоря это просто вспомогательные функции которые нужны для того чтобы обработать какие-то объекты которые ко мне будут присылать дальше у меня есть папка wis Здесь всё просто веса логистической регрессии и веса Т 18 То есть это просто веса двух моделей которые я использую у себя в докер файл мы разбирать сегодня не будем сегодня нету цели до Ну как бы обернуть всё прям в доке если кто-то дойдёт то посмотрите что там внутри там Ничего нового нету всё то же что вы

прям в доке если кто-то дойдёт то посмотрите что там внутри там Ничего нового нету всё то же что вы уже видели много раз то есть простой дофа его кстати даже по-моему не я писал от gpt или что-то такое То есть я не то чтобы потратил на него время а для нас самый главный файл - это файл main.py А значит я здесь импортируют Random она там нужна просто для того чтобы одна заглушка работал и из контекст Либа импортируют maner эта штука Мне нужна будет для того чтобы я корректным образом загружал

Либа импортируют maner эта штука Мне нужна будет для того чтобы я корректным образом загружал модель мы к этому ещё вернёмся в определённый момент вот сейчас у новой версии AP поменялся один подход о котором я скажу типа подход к чему я скажу позже вот поэтому стало чуть-чуть сложнее но ничего тем не менее всё работает значит здесь я импортируйте которую будет собственно мой fastp сервис запускать она должна запустить его так чтобы он крутился непрерывно и ожидал входящие запросы Вот за это

она должна запустить его так чтобы он крутился непрерывно и ожидал входящие запросы Вот за это будет отвечать библиотека uic дальше из Fast AP я [музыка] импортируют ветственно эта картинка должна быть сюда загружена поэтому я этот класс использую из библиотеки piden я импортируют pent - это библиотека которая позволяет валидировать данные когда ко мне приходит пользователь с картинкой с текстом с чем-то ещё я должен как бы задать те правила по которым он мне будет присылать данные в сервис

с чем-то ещё я должен как бы задать те правила по которым он мне будет присылать данные в сервис где-то это может быть набор чисел где-то это может быть картинка где-то это может быть текст и для того чтобы входящий запрос пользователя я проверял то есть что там именно та информация которая я от него жду я буду самостоятельно разрабатывать то что называется моделями данных то есть пользователь пришёл и хочет классифицировать текст значит у него вот в таком-то поле словаря должен лежать объект и

и хочет классифицировать текст значит у него вот в таком-то поле словаря должен лежать объект и я должен сам буду это определить и Mod мне в этом поможет и остальные функции которые я имю это функции из моих вспомогательных файлов то есть собственно ручно написа сервис он на самом деле будет выглядеть примерно вот таким образом Значит у меня есть и у этого да у самого сервиса будет первая функция классификация изображения я буду принимать на вход изображени Это изображение пре процессинг над

классификация изображения я буду принимать на вход изображени Это изображение пре процессинг над ним делать отправлять его в модель и отправлять какой-то ответ Ну это в случае если пользователь действительно мне приет карти второй метод будет текст то есть пользователь с помощью запроса текст отправляет мне какой-то объект текстовый я этот текстовый объект классифицируют и третья возможность моего AP - это собственно clf Table имеется в виду классификация табличных данных пользователь мне будет

AP - это собственно clf Table имеется в виду классификация табличных данных пользователь мне будет присылать вот такой вот J в котором будет значение признака о и значение признака 2 я буду это эти данные прогонять через модель логистической регрессии тоже пользователю возвращать ответ то есть у меня будет всего три каких Ну Разно функции классификации Я буду работать с картинкой с текстом и с табличными данными Теперь давайте посмотрим на те модели данных которые у меня здесь будут

и с табличными данными Теперь давайте посмотрим на те модели данных которые у меня здесь будут использоваться значит первая модель данных - это это класс который я сам так называю он может быть назван как угодно и наследуется он вот этот класс будет определять ту структуру данных которую мой сервис будет возвращать пользователю после классификации и я здесь говорю что когда я буду пользователю отвечать на картинку я буду ему высылать название класса это будет текст и буду высылать ему ислас

отвечать на картинку я буду ему высылать название класса это будет текст и буду высылать ему ислас используя мой он будет в ответ получать словарь состоящий из двух элементов первый элемент - это название класса второй элемент - это индекс класса Если бы я хотел ему возвращать что-то ещё Я бы мог вот здесь вот написать например хочу возвращать вероятность и это будет так я помози Мне кажется да потерялся всё нормально О'кей значит э этот класс у меня называется Image response что я буду

да потерялся всё нормально О'кей значит э этот класс у меня называется Image response что я буду отвечать на картинку дальше э у меня будет класс который называется Text Input то есть пользователь должен мне будет для того чтобы я классифицировал текст присылать какой-то объект в котором текст будет содержаться в виде какого-то строкового параметра Если ко мне будет приходить како вместо КСТ Input какое-то число integer FL и так далее я пользователю буду говорить Я не понимаю что ты от меня

какое-то число integer FL и так далее я пользователю буду говорить Я не понимаю что ты от меня хочешь потому что ты мне прислал не то что требуется по моим правилам Ну и по аналогии У меня есть resp то есть я буду возвращать какой-то лейл и вероятность это будет соответственный текст и FL дальше у меня будет какой-то вход для модели классифицируй табличные данные это Table Input будет всего две переменные признак оди признак д И после этого у меня будет Table output это соответственно

две переменные признак оди признак д И после этого у меня будет Table output это соответственно prediction какой-то там класс единица или Ноль Ну то есть вот такого формата то есть вот здесь вот это на самом деле по-хорошему если бы у меня здесь там я не знаю ещё один или два Вот таких вот моделей было мне бы их надо было вынести в отдельный файл Ну чтобы они прямо здесь не как бы не занимали объём потому что по логике это то что я могу как раз откуда-то импортировать мне это прям в этом файле

потому что по логике это то что я могу как раз откуда-то импортировать мне это прям в этом файле не очень-то и нужно но так для обно пусть побут здесь дальше создаю две переменных это будет модель pch и модель Ир соответственно я эти переменные задаю потому что сейчас я буду их загружать Вот раньше в если вам нужно было что-то сделать например на старте вашего сервиса вы могли сделать например подгрузить какую-нибудь модель хорошо бы когда модель подгружается после не когда пользователь первый

какую-нибудь модель хорошо бы когда модель подгружается после не когда пользователь первый раз прил и мы такие Да сейчас мы 2 гиб будем качать А ты подожди пока поэтому мне какие-то вещии нужно делать Прямо со стартом приложения и раньше для того чтобы это сделать нужно было там буквально написать одну строку и такие типа загрузить модели вот как только я стартую сразу загрузить модель потом это некоторым образом поменялось и стало сложнее но тем неменее Вот это я буквально вя и изменил код из

некоторым образом поменялось и стало сложнее но тем неменее Вот это я буквально вя и изменил код из документации есть про модели машинного обучения значит я должен с помощью вот этого декоратора создать функцию которая Ну у них в документации называется lifespan то есть такой жизненный цикл и говорю то что Моё приложение это будет какой-то экземпляр приложения Fast то есть эта функция на вход принимает то где я буду сейчас эти модели загружать Я задаю две глобальных переменных дальше загружаю

то где я буду сейчас эти модели загружать Я задаю две глобальных переменных дальше загружаю первую модель из вспомогательного файла у меня там эта функция есть гию эту штуку дальше загружаю вторую модель Лёв вскую тоже на всякий случай пишу Ну что у меня всё всё отработала дальше оставляю вот это вот такой параметр как Ну что типа теперь в общем-то ничего не надо те пор пока сда при Като за том что надо завершить работу мы его сами останавливаем какая-то ошибка или что-то такое Я высвобождают

что надо завершить работу мы его сами останавливаем какая-то ошибка или что-то такое Я высвобождают модель значит это нужно на самом деле исключительно для того чтобы когда ваше приложение стартует чтобы какие-то затратные штуки были сразу загружены мы можем эти модели грузить прямо в функциях в которых у на есть без проблем Вот но Раз уж там такие изменения произошли то будем делать так как это нужно делать соответственно эта функция она просто загружает у меня модели перед тем как всё это

нужно делать соответственно эта функция она просто загружает у меня модели перед тем как всё это развернётся для пользователя следующая строка Я создаю переменную App говорю То есть видите я СКВО этим приложени Вот эту вот функцию то есть в момент старта моего приложения выполнится вот эта функция Ну всё наверное самая сложная часть позади теперь Я создаю с помощью декоратора вот такого собака App то есть название моего приложения Get и говорю что здесь будет просто СШ я должен когда

собака App то есть название моего приложения Get и говорю что здесь будет просто СШ я должен когда пользователь придёт ко мне вот по этому адресу То есть фактически так условно говоря заглянет ко мне на главную страничку то я ему просто верну вот такую вот штуку Hello давайте мы прямо сразу попробуем загрузить это у меня здесь есть э есть то как это можно запустить было было точнее сейчас давайте курлова все знают что такое курл или нет нет это короче это такая утилита которая позволяет

давайте курлова все знают что такое курл или нет нет это короче это такая утилита которая позволяет отправлять Get и пост запросы в сервисы из командной строки Вот Но мы к сожалению сейчас не сможем ей на самом деле воспользоваться потому что она у меня работает на картинки Давайте попробуем попробуем что сделать Давайте попробуем запустить значит я буду запускать буду запускать из этой папки тут кстати У меня сейчас потерял потерялась команда запуска с помощью Юкона а там она была некоторой

кстати У меня сейчас потерял потерялась команда запуска с помощью Юкона а там она была некоторой особенной Ну ладно давайте посмотрим значит н иму так вот сейчас нам нужно какую-нибудь ошибку А так uvicorn не хочет Давайте может быть Вот так emil надо идти в документацию я не помню как это загружается попи ран и там кстати была вторая штука Угу так но мы хотим через Юкон запустить Паш Мне показалось в докер файле у тебя лежала она там там прямо она была А это ком Ну давайте там это тоже самое А

в докер файле у тебя лежала она там там прямо она была А это ком Ну давайте там это тоже самое А да Вот она я просто команду путаю вообще постоянно она мне честно говоря не кажется понятной но я особенно то и не вникал так с [музыка] копируем что-то тоже не то там вот с этими видите с точкой и двоеточия постоянно какая-то Ну у них проблем Нет у меня с ними проблемы моду тебя называется Мне кажется в этом вода Да сейчас ну давай так но вот это уже ближе значит ну модуль э utils Может надо

кажется в этом вода Да сейчас ну давай так но вот это уже ближе значит ну модуль э utils Может надо перейти сюда и попробовать отлично стап failed но уже хотя бы что-то он говорит что он не может найти библиотеки типа AP winet То есть он не может вот в эту папку это на самом деле это на самом деле Правильно Потому что сечас на самом деле надо вот отсюда всё-таки запускать всё равно говорит что это вот очень частая ошибка потому что здесь Типа вы запускаете как бы на одном уровне а работает он

вот очень частая ошибка потому что здесь Типа вы запускаете как бы на одном уровне а работает он на другом уровне То есть получается что как бы вот мы мы должны Запустить вот этот Main па но при этом сделать так чтобы этот Main па прекрасно видел вот эти вот ы wis Вот а если мы ошибся типа с уровнем запуска то вот как сейчас происходит я пишу неправильно он говорит я не могу найти utils хотя мы же видим что вот он utils здесь есть Да Кость А почему ты пишешь через точку Up Main а не через СШ то

видим что вот он utils здесь есть Да Кость А почему ты пишешь через точку Up Main а не через СШ то есть а вот это Потому что uvicorn так ждёт а понял это Это его особенность Окей давайте тогда что там здесь код Up Окей давайте на пойдём может быть всё-таки таким путём так [музыка] Ну давай кстати вот так Я вообще никогда не запускал и нам нужно I вот здесь вот так дол боже мой какая красота м пум который должен работать но ладно я в мто ошибаюсь Ну отлично На самом деле тоже самое видите пришло

который должен работать но ладно я в мто ошибаюсь Ну отлично На самом деле тоже самое видите пришло то есть мы фактически пришли Вот по этому адресу просто СШ и мне он вернул То есть я вот здесь вот в этой функции просто сказал что Котто с Зато вопрос Get то написать ему Hello можем сюда что-нибудь добавить А сейчас Давайте ещё раз запустим я хочу запустить так чтобы было типа с этим чтобы он лоуд делал после каждого сохранения может быть это так и делается Ну кажется что да Так давайте пойдём

делал после каждого сохранения может быть это так и делается Ну кажется что да Так давайте пойдём до нам не нужны пока вот то есть типа я сам написал в той функции что хочу видеть и если у есть зарезервированный адрес который называется с здесь автоматически генерируется документация вашего а Видите вот у меня есть адрес могу при воа возвращается просто ну там у меня действительно строка обычная H если я хочу там классифицировать картинку у меня здесь нужен будет файл дальше обязательно нужно

H если я хочу там классифицировать картинку у меня здесь нужен будет файл дальше обязательно нужно будет Вот РТ данные То есть это будут какие-то данные которые я получаю и тут у меня генерируются даже там всякие Какой ответ Есть но это ладно это вы потом Посмотрите сами нам нужно по коду пройтись до конца Вот есть сейчас у меня есть функция которая в ответ на пользовательский визит пишет Ему H теперь я хочу от пользователя принимать картинку принимать картинку Это значит что пользователь

H теперь я хочу от пользователя принимать картинку принимать картинку Это значит что пользователь должен использовать запрос пост отправить мне какие-то данные и здесь в общем-то Всё остаётся прежним и довольно простым я пишу говорю ожен прис вот по такому адресу дальше я под этим декоратором пишу функцию классификации картинки на вход моей функции будет приходить какой-то загруженный файл Up файл я импортировала выше Ну и дальше Разбираем картинку с помощью pill открываем трансформируем её с

я импортировала выше Ну и дальше Разбираем картинку с помощью pill открываем трансформируем её с помощью функций которые есть в вспомогательных вот здесь файлах дальше гиру какой-нибудь шейп Потому что Ну мне надо понять Всё ли хорошо дальше tch inf Mode Это я предсказываю какой-то индекс конвертируются просто обычным обычной совершенно цепочкой там открыть отно что-то спрогнозировать сформировать ответ и отправить ответ у меня есть вот такой респонс вот в этой функции всё понятно Ну давайте

ответ и отправить ответ у меня есть вот такой респонс вот в этой функции всё понятно Ну давайте тогда попробуем всё-таки тем самым рло отправить он у меня тут с Мне кажется Можем даже Можно даже это сделать вот здесь нет нельзя detail not found а картинка где картинка картинка Вот А ну да у меня же наверное адрес-то другой сейчас там 128 00 так Ну да не непонятно что не работает http Стоп У меня называется clf Image А здесь я отправляю в classify Image неправильный адрес здесь вот я взял его

называется clf Image А здесь я отправляю в classify Image неправильный адрес здесь вот я взял его соответственно вот отсюда вот он name Golden ret CL Index 207 но тут сложно промахнуться Окей окей Так ну смотрите про clf Table Посмотрите сами Ничего здесь нет такого просто конверти в массив иди clf у меня здесь вообще заглушка я выбираю просто Позитив негатив и какую-то случайную вероятность генерируют поэтому тут самая сложная функция с картинкой остальное по аналогии вы разберётесь давайте

поэтому тут самая сложная функция с картинкой остальное по аналогии вы разберётесь давайте вопросы вот по этому файлу Люба Ну вот по файлу вот как запускать я не очень разобралась я вижу что ты Это что получается ты формирует запрос через командную строку или что Ну конкретно вот здесь вот да с помощью курла вот наа почитать как это делается Вот тут самая магия для меня не ну здесь это просто конкретный конкретный шаблон вам дан вы говорите что будете отправлять пост вот по такому адресу этот

конкретный шаблон вам дан вы говорите что будете отправлять пост вот по такому адресу этот адрес нужно будет уточнить в зависимости от того какие у вас будут функции Вот и остальное здесь в общем-то готово то есть ну здесь файл просто называется doc.jpg вот но я я Вы можете мы сейчас когда будем смд смотреть там можно через мли это делать Это здесь вот этим курлов это просто ещё один способ Вот кто как бы Вам нужно будет здесь заменить вот этот адрес на свой адрес который будет классифицировать

как бы Вам нужно будет здесь заменить вот этот адрес на свой адрес который будет классифицировать картинку и название файла на то название файла который вы хотите отправить у меня это файл док жпг Угу Ну так вроде бы понятно А у меня ещё вопрос или я не заметила Почему у тебя в асинхронной функции нет эйта какой А в асинхронной Вот в этой да на ничего не возвращает поэтому и нет а Ана в фоновом режиме работает для того чтобы я загрузил свои модели во время старта и потом чтобы эти модели были

режиме работает для того чтобы я загрузил свои модели во время старта и потом чтобы эти модели были удалены Она сама по себе ничего не возвращает потому что у меня переменные модели они тоже глобальные поэтому мне ничего возвращать от неё не нужно Спасибо большое У меня вопрос получается просто как типа ссылка на ко чтобы с разных сервисов можно былого использо Ну в том числе Да а и насчёт курла это просто мы типа говорим куда закинуть и откуда куда куда закинуть Каким методом что закинуть и

это просто мы типа говорим куда закинуть и откуда куда куда закинуть Каким методом что закинуть и какие ещё параметры передать Окей Люба Слушай ну получается что нам не обязательно Fast использовать мы можем в принципе на том же jav скрипте написать просто прописать эти роуты Да и таким образом наша программа будет взаимодействовать с этим сайтом Да не понял Ну просто на на жава скрипте прописать посте запросы Какие допустимы и спасибо Ну типа дальше у вас вот крутится вот эта штука она Там

посте запросы Какие допустимы и спасибо Ну типа дальше у вас вот крутится вот эта штука она Там написана на питоне На каком языке не при вожи запросов или какойто библиотеке то приходите с любыми библиотеками Это не так важно Окей Хорошо Давайте тогда посмотрим на Стрим в стрите на самом деле но я не знаю мне кажется его проще проще запустить потому [музыка] что ой вот у меня что здесь простая штука IM и Table то есть я могу взять и там я не знаю Давайте где тут этот взять выбрать эту картинку

IM и Table то есть я могу взять и там я не знаю Давайте где тут этот взять выбрать эту картинку пожалуйста он мне возвращает то же самое что он возвращал мне в командной кегу какой-нибудь текст отправить посмотрим он говорит что это позитивный там с какой-то случайной вероятностью это просто случайные данные вот и здесь какой-нибудь Взять 0 чи У меня такого единица значит То есть у меня фактически Здесь три элемента это поле для загрузки картинки поле для ввода текста и форма для ввода числовых

Здесь три элемента это поле для загрузки картинки поле для ввода текста и форма для ввода числовых признаков соответственно у меня есть три этих Эдем эту картинку загружаем формируем из неё какой-то Объект который будем отправлять это будет у меня вот такой словарь Где файл и Get И тут я пишу значит по конкретному адресу clf и передай туда fil ответ который мне вернёт сервис сразу став виде уб соответственно результат КСК Тоже самое я делаю с классификации текста Я говорю что у меня текст будет

результат КСК Тоже самое я делаю с классификации текста Я говорю что у меня текст будет каким-то текстом который ввёл пользователь да то есть это будет тоже вот такой объект сло словаря текст равно TT которое было введено пользователем и тоже с по конвертируются классификация и пишу то что мне вернул мой сервис Вот и собственно всё Как видите здесь нету вообще никакой речи ни вот именно в Римском файле вообще нет никакой речи Ни о какой модели У меня есть адрес и мне сказали что если я хочу

файле вообще нет никакой речи Ни о какой модели У меня есть адрес и мне сказали что если я хочу классифицировать картинку я должен прийти Вот по такому адресу и по такому по такому маршруту какая там модель формер что-то ещё вообще неважно И главное что я знаю как прийти в этот сервис и больше ни за что не отвечаю соответственно Если бы у меня был Telegram бот Я бы тоже в этом Telegram Боте совершенно не маялся бы с тем что мне там нужно какие-то картинки открывать там их трансформировать Я

не маялся бы с тем что мне там нужно какие-то картинки открывать там их трансформировать Я просто бы сказал О'кей также абсолютно получил бы результат в Telegram Боте и вместо того чтобы написать ST написал бы там Bot Answer или что-то такое чтобы вернуть пользователю результат вот а в самом AP я бы ничего не менял вообще то есть У меня просто есть модели которые вот делают то что они должны делать и всё Давайте вопросы убай получается мы всегда и везде будем просто ссылку давать Где хранится

и всё Давайте вопросы убай получается мы всегда и везде будем просто ссылку давать Где хранится типа пишка И всё да А И почему он типа 12700 а не 0 Ну это тоже самое вот он 00 это тоже самое что 127 00 но это тоже самое только тогда когда вы работаете локально Когда вы работаете на удалённой машине чтобы это было доступно Извне вы будете запускать 00 а локально это одно и тоже собственно также как здесь можно написать Кай 8.000 да то же самое попадаю туда же Давайте вопросы Сергей а потом мы по

здесь можно написать Кай 8.000 да то же самое попадаю туда же Давайте вопросы Сергей а потом мы по идее свою ошкуково и оно тогда работает уже дарё мы это будем изучать не будем изучать про у кого облако да Или это тривиальная Это я думаю что больше времени у тебя займёт установить гид на виртуальной машине вот собственно ты будешь делать там ровно тоже самое то есть ты как Как сделать так чтобы вот это же запустилась но на виртуальной машине вы подключаетесь к ней через консоль мы это будем

вот это же запустилась но на виртуальной машине вы подключаетесь к ней через консоль мы это будем делать после этого вы скачиваете код который у вас лежит на гитхабе Ну либо докер либо код там как по-разному делают И после этого пишете Ну запускаете свой сервис всё пишите там F Run что-то всё у вас всё работает понял Так ну давайте что по заданиям там в принципе всё всё просто Значит первое взять какую-нибудь данные какие-нибудь данные с второй модели точнее со второй фазы и решить задачу

взять какую-нибудь данные какие-нибудь данные с второй модели точнее со второй фазы и решить задачу классификации текста и классификации изображений после этого Попробуйте зарегистрироваться на Яндекс клауде и развернуть там это приложение вот собственно это первое задание Ну дальше уже там практики ради docker практики ра docker и отправка на dockerhub вот Ну первое задание Мне кажется вполне по силам всем Конечно можно использовать тот репозиторий с которого я сейчас показывал он для этого и

силам всем Конечно можно использовать тот репозиторий с которого я сейчас показывал он для этого и есть убай то есть модель можно любую взять какую мы делали до это абсолютно любую ну так просто как сказать экономии времени такого не профильного сегодня я конечно Не рекомендую брать какие-то громадные модели потому что ну просто это Вы [музыка] оттянешь такое просто чтобы не тратить на это время Ну а так по желанию может быть вы любите rnet 152 и не можете расстаться с ним а если что можно твою

а так по желанию может быть вы любите rnet 152 и не можете расстаться с ним а если что можно твою использовать да да пожалуйста она не моя её придумали умные мужики я её не придумал Окей Ну окей Тогда пишите вопросы если будут и обязательно не откажите себе в удовольствии породить немного по документации она очень дружелюбная Всё тогда До связи спасибо напе готовьтесь

всем привет меня зовут юрий яровиков и это первый из нашей серии с 4 видео где я буду рассказывать о линейной алгебре мы поговорим про самое базовое понятие такие как виктора матрицы линейное пространство и так далее но ровно в том объеме который нужен для будущего специалиста вот это сайнс и в частности для прохождения нашего курса по кругу обучения и так давайте начинать тему нашего первого видео это вектор и мы поговорим про то что такое вектор собственно какие на дикторами можно проделывать

это вектор и мы поговорим про то что такое вектор собственно какие на дикторами можно проделывать операции мы поговорим линейных пространствах не иных оболочках а также пролей на независимость векторов линейная зависимость векторов и столкнем с определение базиса выше наш прежде чем говорить подобный страх нужно понять что же такой вектор ab я говорю им так ну все наверно школе проходили вектора вообще вектором в каком-то n-мерном пространстве то есть врн называется некоторые просто

вектора вообще вектором в каком-то n-мерном пространстве то есть врн называется некоторые просто упорядоченный набор чисел то есть у нас просто есть m чисел в каком-то порядке мы записываем в строчку и вот такая упорядоченная последовательность чисел называется собственные ректором но часто мы записываем вектор не строчку а столбец вот так вот икс равно икс один тот алексин да и в целом в этом видео мы будем придерживаться никаких обозначений они будут нам удобные и впоследствии протяжении

видео мы будем придерживаться никаких обозначений они будут нам удобные и впоследствии протяжении всего курса ну помимо того что вектор это набор из n чисел мы все знаем что вектор это некоторый геометрический объект но частности вектор из двух чисел можно изобразить наказан плоскости вот если мы отметим наказан плоскость точку ноль и точку с координатами 2 3 по оси икс один мы отложим 2 по оси x дома и отложил 3 то мы можем рассмотреть такой вектор от 0 до точки два три и вот собственно такой

дома и отложил 3 то мы можем рассмотреть такой вектор от 0 до точки два три и вот собственно такой вот направленный отрезок будет соответствовать последовательности чисел 2 3 но можно например общительна случай несколько координат за 4 казино скажем и будет такой вектор 2242 здесь два раза 4 ну и в общем то в произвольном варианте мы имеем сделался нервным пространством понятно что картинка мира пространство мы ведь не можем но вот по каждой координате мы отступаем на по этой карте скажем мы

пространство мы ведь не можем но вот по каждой координате мы отступаем на по этой карте скажем мы ступаем на когда ты exit и и получаем какую-то точку в n-мерном пространстве и собственно вот направлен отрезок из нуля в эту точку мы будем называть эту и давайте поговорим о том какие операции мы можем приводить секторами эти операции это сложение векторов и умножения на скаляр ну первое наблюдение да давайте посмотрим как как вообще мы будем скоростью мужик на скаляр умножать на скаляр и мы

да давайте посмотрим как как вообще мы будем скоростью мужик на скаляр умножать на скаляр и мы будем поэлементно то есть скажем 3 умножить на вектор вот два минуса до 2 4 это соответственно вектор составлялись компоненты и умножить на 2 3 умножить на 2 3 умножить на 4 то есть 6 минус три вторых и минус и просто и и 12 но аналогично вот с этим вектором ну и складу сектора мы тоже можем по имени скажем 1 как zero то сумма будет равна 6 то есть и умножить на 2 плюс давно что инстинкта есть 4 ну и

1 как zero то сумма будет равна 6 то есть и умножить на 2 плюс давно что инстинкта есть 4 ну и остальные как зад определяется аналогично в общем-то правила сложения векторов и умножения метров на константу мы сами все проходивших вот но интересно наверно это как сложение векторов и умножения викторов на скаляр демонстрируется в геометрическом смысле ну вот так вот выглядит сложение на же не скаляр давайте поговорим сначала по сложение отложим яхты вектор x а тоже некий вектор y но и посмотрим

давайте поговорим сначала по сложение отложим яхты вектор x а тоже некий вектор y но и посмотрим как и складывать но оказывается нужно полить вектор y отложить его из точки x ну и результирующий вектор то есть направленный отрезок из нуля в точку x и y будет собственно результатами сложение двух векторов по определению логично с уважением на скаляр мы просто берём каждую как за ту домножаем скаляр или иными словами мы просто умножаем направленный отрезок ав равен отрезку мякоть константу скажем

или иными словами мы просто умножаем направленный отрезок ав равен отрезку мякоть константу скажем на 2 остановили тем же самым и получаем вектор 2 x ну и соответственно если речь идет о умножение на отрицательное число скажем на минус одну вторую то мы можем провести вектор в противоположную сторону да и получаем вот такой вот вектор соответственно длина этого отрезка на два раза меньше чем длина вот этого отрезка ну хорошо давайте пойдем дальше итак мы разобрались с векторами теперь давайте

вот этого отрезка ну хорошо давайте пойдем дальше итак мы разобрались с векторами теперь давайте вот сделаем такое наблюдение что оказывается векторное пространство скажем r2 и r3 или общем случае рэм оно замкнуто относительно операции сложения и умножения скаляр но в самом деле если мы сложим какие-то два векторы то мы получим снова вектор если мы домножим вектор на константа мы тоже получим вектор следственно можно говорить о том что уехали просто замкнутый то есть такие операции не выводит

следственно можно говорить о том что уехали просто замкнутый то есть такие операции не выводит нас за пределы нашего векторного пространства но давайте это вообще это общем да и там гудением итак мы вводим первое определение линейным или векторным как говорят пространством некоторых на пространство или ну скажем n равно там р-н или это r два или три называется множество ликторов м красивая то есть подмножество эль красиво которые замкнуто относительно наших операций сложения и умножения скаляр

подмножество эль красиво которые замкнуто относительно наших операций сложения и умножения скаляр ну этими словами если мы берем произвольный вектор из множества м то предложение на константу результат она снова лежит вам логично суммы двух векторов при сложении лежит вам хорошо да очень важное изменение на оболочке если у нас есть некоторые виктора в 1 трлн то мы можем подумать а как же построить линейное пространство в котором все наши векторы в 1 и так далее вен будут лежать вот оказывается

линейное пространство в котором все наши векторы в 1 и так далее вен будут лежать вот оказывается что минимальное такое линии вот пространство в котором лежат все наши векторы в 13 левин можно построить и она строится вот таким образом мы берем произвольные действительные числа альфа-1 the dolphin складываем виктора вы один туда левин с этими коэффициентами и получаем все возможные линейной комбинации наших авторов достигнем коэффициентами ну и вот оказывается такое множество всех таких

комбинации наших авторов достигнем коэффициентами ну и вот оказывается такое множество всех таких рекомендаций по всем возможным альфе и там это будет линейное пространство в общем-то не сложно это понять ясное дело что сумма любых двух таких векторов она также представляется таком виде и произведение этого вектора с какой-то константе тоже поставляется в таком виде вот но вот такое множество называется линейной оболочкой это наше случае определение как мы уже прокомментировали оболочка

называется линейной оболочкой это наше случае определение как мы уже прокомментировали оболочка является линейным пространством но скажем в раме если ректора изначальный были вариант хорошо да это утверждение которые мы с вами уже по сути дела объяснили кстати комментарии ко всему мы видео я как правило не буду доказывать утверждение буду объяснять доказательства или формальный проводить только для самых важных утверждений которые кроме того будут довольно просто доказываются рамках нашу видео

самых важных утверждений которые кроме того будут довольно просто доказываются рамках нашу видео ну про остальные утверждения я буду лишь иногда приводить какие-то комментарии по и доказательству но в целом для формальных доказательств необходимо конечно же смотреть какие-то курсы или алгебры и мы на формальности палата не претендуем да например линейной оболочки для двух векторов в трёхмерном пространстве и так у нас есть такое пространство который здесь нарисованы вот пусть z-ось и rikki six

и так у нас есть такое пространство который здесь нарисованы вот пусть z-ось и rikki six у нас есть два вектора x и y вектор x вот секторе века но мы можем рассмотреть произвольной рекомендации то есть домножаем y на какую-то константу b to do лажаем x на константу альфа и смотрим сумму alpha x плюс 5y нас получилось к зеленой . если можем какие-то другие альфа и бета воспользоваться какая другая изрядная . вы здесь да но и вот множество таких фильтров является данном случае дней оболочкой

изрядная . вы здесь да но и вот множество таких фильтров является данном случае дней оболочкой векторов и xxi века ну и видим до что естественно все такие alpha x плюс y при произвольных альфа и бета они образуют некую плоскость которая проходит через . 0 ну и конечно же такая плоскость является линейным пространством ну потому что если от любые говоря фриз плоскости то из ума и умножение одного верного секторов ты скаляр по-прежнему будет лежать на наши плоскость хорошо теперь давайте введем

верного секторов ты скаляр по-прежнему будет лежать на наши плоскость хорошо теперь давайте введем еще одно очень важное определение линейная зависимость векторов итак предположим что у вас есть некоторый вектор v 1 . и вот они называются независимыми если никакая не тривиальная рекомендации дикторов не равна нулю вектор ну вот в данном случае ними комбинация да и тут опять же такое такая сумма векторов с некоторыми коэффициентами то есть альфа в один альфу да вы двое террористов р-н ну вот они

с некоторыми коэффициентами то есть альфа в один альфу да вы двое террористов р-н ну вот они захватили независимыми если ни для каких orchid их действительных эта сумма не равняется 0 вектору но здесь я таким образом зачем его вектор это вектор с казаками 0 0 0 0 0 0 0 ну то есть да идеология такая что вот так мы не складывали между собой ношу виктора у нас соло 0 не получится то есть есть такая независимость метров до нацию это неформальный смысл день независимости хорошо давайте например

независимость метров до нацию это неформальный смысл день независимости хорошо давайте например рассмотрим вот такие векторов в трёхмерном пространстве это так и сами базисные вектора которые называются и 1 и 2 или 3 но иными словами и один этот вектор с координатами 100 едва это вектор сказал 010 ее 3 это рекса с казаками 00 этим ну и вот оказывается такие вектора образуют ли на независимую систему как ну давайте это поясним доказательство того что не независимо это кстати обозначается буквой

как ну давайте это поясним доказательство того что не независимо это кстати обозначается буквой л н д довольно часто линейно независимы соответственно линейная зависимость это когда у нас есть такой линейной комбинации который равна нулю обозначается буквами lc но так вот докажем независимость предположим что у нас есть такие коэффициенты альфа-1 так далее альфа 3 что сумма равна нулю ну тогда что из этого следует значит что сумма во-первых ординате рвал нулю знать что альфа 11 + альфа до

что из этого следует значит что сумма во-первых ординате рвал нулю знать что альфа 11 + альфа до умножить на 0 плюс эффективную что 0 равно нулю ну и следовательно просто альфа 1 равна нулю потому что она единственная умножалось ненулевую константу но аналогично альфа двора ловлю и альфа 3 равна нулю но и мы получили то что вас требуется следовательно действительно директор организации ну вот собственно такая технология она работает и для произвольного случая но сейчас мы на него не говорить не

такая технология она работает и для произвольного случая но сейчас мы на него не говорить не будем а в конце видео мы решим задачу которая иллюстрирует эту технику в более сложном случае итак следующее наше очень важное определение определение базиса предположим что у вас есть некоторое линейное пространство но до пример той самой плоскость до который мы рассматривали как лин оболочку 2 каких-то векторов в r 3 ну вот мы хотим подойти некоторые вектора в этом ли нам по пространству же

каких-то векторов в r 3 ну вот мы хотим подойти некоторые вектора в этом ли нам по пространству же абстрактном которые образуют то есть являются такие образующими витамин в этом единое пространство ну отсюда как бы и альтернативное название базиса это множество образующих не так бойцам в линейном пространстве м называется такая минимальная система векторов в 13 м для которой m равняется линейной оболочке в 1 и так далее ну давайте сделаем тени соблюдения права из во-первых мы сразу можем видеть

в 1 и так далее ну давайте сделаем тени соблюдения права из во-первых мы сразу можем видеть что если у нас какой-то вектор в базисе скажем военное выражается через линейную комбинацию в в 1 и так далее в минус 1 через все предыдущие то тогда эта система не минимальная потому что если вы им можно выразить то и любой вектор изображается через в азии так далее в.н. можно выразить через в единый королевы -1 ну это означает что собственно наши множество борисом не является потому что это систему нас

-1 ну это означает что собственно наши множество борисом не является потому что это систему нас не минимальное коснуться ну вот если другие свойства давайте сначала мы рассмотрим никакой примерчик not примерчик который мы уже с вами разбирали в предыдущем пункте у нас снова есть болезни виктора и 1 и 2 и 3 ну я называл их базисными собственно уже я проговорился да действительно эти вектора образуют базис в пространстве артрит но потому что они во-первых независимы как мы это уже проверили

базис в пространстве артрит но потому что они во-первых независимы как мы это уже проверили предыдущем пункте ну и во-вторых любой вектор из r3 понятное дело можно получить в виде линейной комбинации образующих но потому что можно просто в качестве коэффициента альфа это подходит просто координата этого вектора горняка когда от нашего вектора по и ты компоненте хорошие свойства бойцы посмотрим итак во-первых борись является независимой системы это мы с вами собственно же проверили второе

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

и получить что у нас есть время зависимость на векторах воедино тролльего то есть утверждение вполне понятно следующее утверждение любой линейно независимой системы можно дополнить до больницы то есть идея заключается в том что если мы берем в каком-то не на пространстве какие-то к скажем викторов которые являются независимыми то мы можем до кидать туда еще каких-то факторов из нашли но пространство чтобы получить и на независимую систему которая образует все нашим пространство ну доказывается

чтобы получить и на независимую систему которая образует все нашим пространство ну доказывается формально мы не будем я думаю что в принципе это вполне интуитивно очевидно из кредита геометрических соображений скажем vr3 вроде бы понятно да то есть у нас есть каких два вектора то мы можем рисовать 3 чтобы видели на комбинации получить все о множестве 3 ну и аналогично если у нас есть какая-то довольно большая система из скажем и образующих да то из этих образующих можно по очереди выкидывать

большая система из скажем и образующих да то из этих образующих можно по очереди выкидывать вектора и в конце концов таки выкидывание у нас получится боюсь можно так выкинуть некоторое подмножество наш факторов что получился базис если изначально из системообразующих то и в конце концов у нас получится минимальный системообразующего следующие свойства самое главное это такое свойство что любые два базис оказывается равна мощным то есть если в одном базисе у нас есть м ликторов 2 базисе есть

два базис оказывается равна мощным то есть если в одном базисе у нас есть м ликторов 2 базисе есть конвекторов то на самом деле n равно к если мы говорим об одном и том же время и пространство ну это вроде как понятно и вполне утверждение до скажем в трехмерном пространстве она поэтому из вас трехмерным потому что мы можем образовать его с помощью базиса из трех векторов если же мы возьмем кита 4 вектора в трехмерном пространстве то можно будет какой-то из них выкинуть чтобы остался базе с из

4 вектора в трехмерном пространстве то можно будет какой-то из них выкинуть чтобы остался базе с из трех элементов осталась с тем образующихся их элементов но аналогично если мы возьмем какие-то два вектора трехмерное пространство это понятное дело что все наше множество не образовывать не будут да поэтому мы с вами в общем-то корректно можем говорить о размерности и линейного пространства по определению это просто размер любого базиса в этом ней на пространство здесь стоит отметить что далеко

это просто размер любого базиса в этом ней на пространство здесь стоит отметить что далеко не любое не иное пространство является конечным мерным то есть конечной фазе существует не у всех или иных пространствах но в тех которые встречались на практике в обучении новых сетей конечно у нас будет конечно мерный базис и некие проблемы у нас не будет итак теперь давайте сформулируем важнейшую тему время алгебре которая гласит что любые n + 1 ну эти средства больше векторов в n-мерном пространстве

алгебре которая гласит что любые n + 1 ну эти средства больше векторов в n-мерном пространстве всегда линейно зависимы ну давайте докажем итак предположим что они не являются линейно зависимыми остается на не являются независимыми то есть у нас есть некоторые линейно независимой системы и по одному из утверждений с предыдущего слайда мы можем дополнить эту систему до позиции ну если мы получили базис то следовательно в этом базисе хотя бы n плюс один вид то есть либо мы добавили 0 викторов если

то следовательно в этом базисе хотя бы n плюс один вид то есть либо мы добавили 0 викторов если эти векторы уже юля с базисом либо мы добавили количестве 2 раз получилось еще больше факторов которые образуют базис ну поскольку в базисе не может быть больше чем n векторов то следовательно мы получили противоречие и система наказан ну вот эта тема недаром выделено на один слайд она является важнейшей для и линейной алгебре целом и для приложений гораздо легче их воспринимать на уровне интуиции

для и линейной алгебре целом и для приложений гораздо легче их воспринимать на уровне интуиции если знать об этом замечательном утверждение ну хорошо теперь давайте порешаем никто сдачи которые вас показаны на слайде ну вы можете ли вы про решать задачу самостоятельно затем свериться с моим решением либо следить за решением в режиме реального времени и так первая задача нужно доказать что некоторые векторы abcd которые указаны экране нее для ними независимо ну мы будем доказывать это

некоторые векторы abcd которые указаны экране нее для ними независимо ну мы будем доказывать это утверждение от противного предположим что существуют такие x y z tt что что противно вода существуют такие x y z и т для которых x умножить на а плюс y умножить на b плюс z умножить на c + d умножить на d равно 0 вектора но и при этом x y z это они не равны нулю одновременно ну давайте тогда запишемся это означает это означает что x на 3 минус 101 плюс y на 0 1 2 0 плюс z на 2012 + t на 10 минус 1

это означает это означает что x на 3 минус 101 плюс y на 0 1 2 0 плюс z на 2012 + t на 10 минус 1 минус 1 равняется на вектору но следовательно мы можем просто написать систему и иных уравнений то есть скажем взять первую координату и выписать что ты x плюс 2z + 3 равно нулю аналогичный цвет по 2 коржа типа трети как знаете почитали как знать и получить вот нашу систему или них уравнений которые мы уже будем решать давайте собственно выпишем что есть получается минус x плюс y равно нулю затем

мы уже будем решать давайте собственно выпишем что есть получается минус x плюс y равно нулю затем 2y + z минус t равна нулю и наконец последняя x плюс 2z минус 3 равно нулю вот ну и необходимо доказать что каждый из x y z и равно мы теперь давайте решать ну сразу можно заметить что x равно y это из второго уравнения и давайте подставим игрек равно икс во все такие уравнения на 2 получится где-то делать реальным поэтому останется просто 1 3 4 1 осталось без изменений в третьем игры заменяется

делать реальным поэтому останется просто 1 3 4 1 осталось без изменений в третьем игры заменяется на x 2 x плюс z минус 3 равняется нулю и наконец последним x плюс 2z минус 100 равняется ну и мы здесь заключаем что xun и хорошо теперь решаем эту систему ну например можно сложить первые 3 и учить никто результат из избавиться от и а также свои первые второе избавиться от и давайте это сделаем сумму 1 2 это 5 x плюс 3 z равняется нулю и сумма первые 3 это 4 x + 4 z равняется нулю ну и тогда из-за

1 2 это 5 x плюс 3 z равняется нулю и сумма первые 3 это 4 x + 4 z равняется нулю ну и тогда из-за системы мы уже ну понятное дело что здесь единственное решение кс у нас этому морю давайте как-нибудь объясним ну например можно домножить первую первое уравнение на 4 2 равнина 5 вычесть у нас получится что 4 умножить на 5 x плюс 3 z минус 5 на 4 x плюс 4 равняется нулю вот мы тогда эти слагаемые сокращаются и остается что 12z -20 z равняется нулю что означает что z равно нулю мы аналогичный вид

и остается что 12z -20 z равняется нулю что означает что z равно нулю мы аналогичный вид уравнений всунули вот ну а поскольку у нас есть выражение для тета c равно нулю ну и наконец или к нулю потому что x и y ну и мы получили действительно что x зтр мои грехом или ну и следовательно это противоречит нашего изначально предположению значит abcd сито является ними независимой векторами с дочерьми и так давайте решим задачу номер два в этой задачи необходимо найти базис в некотором линейным

и так давайте решим задачу номер два в этой задачи необходимо найти базис в некотором линейным подпространстве пространство f4 то есть перед нами есть четыре это множество векторов из четырех компонент ну и соответственно нас интересует виктора вида ну вернее виктора для которых выполняется такое условие что то есть виктор оскар dynamics газеты для которых x плюс 2y минус 3z плюс t равняется нулю ну и нам необходимо найти базис вот такого подпространстве то есть на самом деле это будет под

нулю ну и нам необходимо найти базис вот такого подпространстве то есть на самом деле это будет под пространством vr-4 вот ну давайте во-первых проверим что это подпространство действительно то есть нам нужно доказать что м замкнут относительно 2 операции сложения и умножения скаляр ну давайте проверим чтобы закрутить умножение например ну относительно сложение будет общем то же самое итак предположим что x y z т лежит множество м ну тогда это значит что x плюс 2y минус 3z плюс 3 равняется нулю

что x y z т лежит множество м ну тогда это значит что x плюс 2y минус 3z плюс 3 равняется нулю просто определение множество м но и затем можно это раньше домножить справа и слева на любое произвольное действительно альфа у нас получится что альфа на x плюс 2y минус 3z плюс 3 равняется нулю вот но и это можно раскрыться так что alpha x плюс 2 на альфа y минус 3 на альфа z + альфа т равняется нулю ну и следовательно вектор alpha x альфа y альфа z альфа т лежит вам ну и мы видим что alpha x альфа

ну и следовательно вектор alpha x альфа y альфа z альфа т лежит вам ну и мы видим что alpha x альфа y algo se . это в точности альф умножить на вектор x y z это но аналогично можно поступить суммы двух векторов собственно потали самые линейности можем раскрыть и у нас получится что сумму велиже твоим вот но поэтому действительно это множество является вот пространством то есть мы замкнуто относительно операции сложения и умножения на скаляр хорошо теперь давайте собственно идем боюсь в этом

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

будет борисом так чтобы эта система оставалась линии независимой но и если мы так будем делать то в конце концов мы дойдем до размерности пространства вернет размерности будут пространство и в этот момент у нас получится максимальный системообразующих и независимых то есть бойцы ну давайте собственно эти магнитом будем пользоваться найдем какую первую какой первый вектор который лежит в эту множество то есть ну что это значит да x плюс 2y минус 3z плюс 3 равняется нулю ну например подходит

то есть ну что это значит да x плюс 2y минус 3z плюс 3 равняется нулю ну например подходит вектор [музыка] 3010 он очевидно лежит в.м. но мы просто сравнили две координаты x и z и и подобрали вектор так чтобы все остальные когда ты y это были нулевыми а здесь у нас сходилось равенство x минус этому вот но аналогично можно поступить с парой как знать x и y и у нас получится что вот такой вектор 2 минус 100 тоже лежит вам ну и логично можно с парой xt поступить у нас получится что вектор 100

2 минус 100 тоже лежит вам ну и логично можно с парой xt поступить у нас получится что вектор 100 минус 1 также лежит вам вот но несложно убедиться что все эти вектора в совокупности являются независимыми ну потому что общем понятно да если у нас есть какая-то линейной зависимости коэффициентами скажем альфа знает вектор плюс b то на второй вектор плюс гамма на третий вектор равно нулевому вектору то тогда можно посмотреть по отдельности на 2 3 4 компоненты ну и если мы посмотрим на второй

то тогда можно посмотреть по отдельности на 2 3 4 компоненты ну и если мы посмотрим на второй компонент это получится чтобы и тронули есть посмотрим вот эти компоненты то получится что альфа руны морю расправьте вату компоненты получаем что гамма равно нулю и но и следовательно альфа-бета гамма равны нулю ну и это означает что действительно системой независимо вот мы теперь давайте поймем что то болит ну это в общем то уже вполне очевидно потому что какой размерность имеет множество м

что то болит ну это в общем то уже вполне очевидно потому что какой размерность имеет множество м максимально ну понятно что множество м она не совпадает совсем r4 следователь открытое пространство vr-4 который имеет при этом меньшую размерность ну значит размерность множество м она не превосходит 3 ну и вот есть такой значок дим который обозначает размерность дмм ну потому что die menschen до 1 м меньше на м3 ну а мы нашли и систему и независимых векторов из трех элементов следовательно по

1 м меньше на м3 ну а мы нашли и систему и независимых векторов из трех элементов следовательно по теореме о том что им посадил векторном пространстве и независим и мы получаем что 1-м просто равно трем ну и кроме того действительно эта система которые построили этот вектор скажем а b и c g c это борис ну и задачи на итак следующая задача последние в нашем списке необходимо вырезать вектор 322 -1 через боюсь директора которые найденную в прошлой задаче ну почему мы считаем что вообще говоря

-1 через боюсь директора которые найденную в прошлой задаче ну почему мы считаем что вообще говоря этот эффект можно выразить через наши базисный вектор а потому что для него как раз таки выполняется соотношение на x y z и те которые мы рассматривали когда говорили о просто подпространстве им вот но поэтому естественно поскольку это подпространство то любой вектор с него можно выразить через борис который мы собственно жилье вторая задача ну вот рядами тот базис давайте решать ну мы будем

борис который мы собственно жилье вторая задача ну вот рядами тот базис давайте решать ну мы будем решать эту задачу общем-то естественным образом мы пишем что это должно равняться альфы на 2 минус 100 плюс бета на 3010 plus hama на 100 минус 1 вот ну и на самом деле получается просто системных уравнений давайте выпишем получается 3 равно 2 альфа плюс 3 бета плюс гамма 2 равно минус альфа затем 2 равно бета и минус 1 равно минус дома вот но в общем то система ронни нет реальная у нас получается

равно бета и минус 1 равно минус дома вот но в общем то система ронни нет реальная у нас получается решение из последних трех гамма равно единице альфа равно минус двойки и в этом и дойки вот ну и давайте льна стих случай проверим что действительно с первым уравнением все хорошо но справа у нас получается минус 4 плюс 6 плюс 1 то есть три это за падает с левой частью но до следовательно действительно мы выразили наш вектор в виде линейной комбинации бай степ 2 что это ехалось защитишь но

мы выразили наш вектор в виде линейной комбинации бай степ 2 что это ехалось защитишь но спасибо за внимание в следующем видео мы поговорим про матрицы

всем привет мы продолжаем нашу цепочку ликбез of по линейной алгебре это второе видео на эту тему мы в этом видео поговорим про матрицы если вы не видели первые видео про векторы то пожалуйста возвращаетесь туда и смотрите его ссылку я оставлю в описании и так содержание этого видео первый пункт это определения что такое матрицы с чем их едят затем мы поговорим про не выразительности выражен из матриц и ранг матрицы поговорим про умножение матрицы на вектор а и в связи с этим вы видим матричный

и ранг матрицы поговорим про умножение матрицы на вектор а и в связи с этим вы видим матричный вид систем или иных уравнений ну и также приведем пример из машинного обучения а именно покажем как и линейная регрессия формализуется через матрицы ну что же давайте начинать итак прежде чем подобно говорить о матрицах давайте поймем что же такое матрица это таблица размера m на n m строчка с торцов ну где в каждой клетке этой таблице написано кита числа то есть у нас все получается m умножить на n 3

где в каждой клетке этой таблице написано кита числа то есть у нас все получается m умножить на n 3 кита произвольных может быть действительно может быть комплексных чисел вообще говоря можно ставить творили бы элементы там произвольно множество не только какие-то числа до но в итоге у нас есть такая таблица которой обладает некоторой такой структурой по 1 считай спаси строк и по второй оси пасе самцов ну вот оказывается что такая структура она очень удобна для различных приложений в том числе

самцов ну вот оказывается что такая структура она очень удобна для различных приложений в том числе и в анализе данных она постоянно используется но те не матрицы интересные сами по себе как такие математические объекты у них куча полезных свойств о которых мы в том числе узнаем ее в этом видео в последующих видео этого ли газа ну хорошо давайте теперь посмотрим на такое альтернативное представление матрицы если у нас есть м строчек в матрице то можно представлять матрицу как совокупность м

матрицы если у нас есть м строчек в матрице то можно представлять матрицу как совокупность м строчек каждой точке является вектором ну либо если посмотрите страны столбцов у нас есть n столбцов тогда матрица эта совокупность из n векторов столбцов то есть либо строчке мы кладем вот так ли бы столбцы мы кладем вот так и в каждом из случаев можно представить что это такая совокупность котором ну понятное дело что матрицы ресторане непосредственно между собой связаны и в этом видео мы собственно

дело что матрицы ресторане непосредственно между собой связаны и в этом видео мы собственно узнаем как они связаны вот но прежде чем какие-то свойства полезной матрицу выводить давайте посмотрим на какие-то совершенно таки базовые понятия вот например понятие выраженности матрицы ну раз матрица состоит из векторов то наверно полезно смотреть как эти вектора между собой взаимодействует как они взаимосвязаны но в предыдущем видео мы говорили про линейную независимости линейная зависимость

они взаимосвязаны но в предыдущем видео мы говорили про линейную независимости линейная зависимость векторов ну вот оказывается полезно будет такое определение квадратная матрица то есть матрица ндм называется вырожденной или не выраженный если ее строки линейно соответственно зависимая или независимая ну вот давайте разберем как например скажем первая матрица 3 на 3 масса числами 13 минус 10 минус 20 24 минус 2 ну вот нужно понять является ли она вы рождены или а является небылицами ну для

минус 20 24 минус 2 ну вот нужно понять является ли она вы рождены или а является небылицами ну для того чтобы понять это давайте посмотрим является ли строчки линейно независимыми но да вот мы можем на самом деле наблюдать что не являются потому что если мы домножим первую строчку на 2 нас получится 2 6 минус 2 до 1 . уже на 2 вторую строчку мы оставляем как есть и после этого складываем эти две строчки вы с такими коэффициентами с коэффициентом 2 с коэффициентом 1 но и у нас получается ровно

строчки вы с такими коэффициентами с коэффициентом 2 с коэффициентом 1 но и у нас получается ровно 3 строчка то есть 2 4 и минус 2 до все же слышь но следовательно у нас эти это и векторы линейно зависимы соответственно матрица не является ни вырезаны то есть она будет вырожденной хорошо второй пример здесь у нас точки вот такие ну и вот это стандартный пример из множества собственно пример не вырожденной матрицы то и здесь у нас есть четыре строчки 4 столбца ну это что эти строчки являются

вырожденной матрицы то и здесь у нас есть четыре строчки 4 столбца ну это что эти строчки являются независимыми на самом деле мы разбирали в одном из примеров в предыдущем видео но сейчас можно просто поверить что эти точки являются независимыми но я думаю что это каждый из вас может доказать просто решив соответствующую систему или иных уравнений и получив что единственно вариант когда эти точки в ней рекомендации дают ноль это случай когда все коэффициенты равны нулю ну хорошо это мы выяснили

в ней рекомендации дают ноль это случай когда все коэффициенты равны нулю ну хорошо это мы выяснили да вот и и есть оказывается такое утверждение что строки квадратной матрицы линейно независимы тогда и только тогда когда ее столбцы как векторы тоже являются линейно независимыми то есть ли на независимость по столбцам и по строкам это эквивалентные формировки ну давайте проверим это на нашем примере вот скажем для первого ты за посмотрим строки уже как мы выяснили является ли ними зависимыми

вот скажем для первого ты за посмотрим строки уже как мы выяснили является ли ними зависимыми посмотрим на столбцы но у нас есть столбец 1023 минус 2 4 и минус 10 минус 2 но ясно и совершенно видно что что эти два столбца первые 3 они просто отличаются умножением на константу разные минус единицы но а следовательно не конечно же являются линейно зависимыми ну и значит все три столбца тоже совокупности естественно независимыми ну и это соответствует и для независимость и строк ну а для второй

естественно независимыми ну и это соответствует и для независимость и строк ну а для второй матрицы в общем точно также решая системных уравнение можно убедиться что и столбцы будут и зрительными но это коми мы конечно делать не будем ну вот очень полезное определение очень полезно утверждение которое как бы говорит нам о том что или независимо строк это такое такая на самом деле характеристика матрица в целом но давайте эту характеристику немножко в общем в произвольном случае когда матрица у

в целом но давайте эту характеристику немножко в общем в произвольном случае когда матрица у нас не является квадратный можно выводить определение строчного и столбцов в рамках соответственно срочным ранга матрицы а называется размер наибольшего подмножество линейно независимых строк матрицы а то есть тут мы выбираем какие-то строки можно из них выбирать ними независимые и чем больше строк мы выбираем тем больше получается строчный ранг но аналогично придать столбцов и ранг то есть мы можем

выбираем тем больше получается строчный ранг но аналогично придать столбцов и ранг то есть мы можем выбрать скажем 10 столбцов в матрице а которые являются линейно независимыми то тогда у нас получается что ранг равен 10 вот но аналогом утверждение про линейная независимость в предыдущем пункте является утверждение про равенство строчными самцов в ранг но давайте посмотрим это утверждение на примере вот для такой матрицы этого за 3 на 5 3 строчки и пять столбцов ну давайте проверим какое у нее

вот для такой матрицы этого за 3 на 5 3 строчки и пять столбцов ну давайте проверим какое у нее будет срочную рамках скажем но мы видим что у нас три строки и видим что вот вот в этом в этом куске этой матрицей у нас стоит просто единичная матрица вот но то есть по диагонали нас единица здесь у нас 0 и вот но соответственно если у нас есть какая-то линейной комбинация этих трех строк которые дает 0 то тогда по 1 как заяц и смотрим у нас получается что коэффициент при первой строчке должен быть

0 то тогда по 1 как заяц и смотрим у нас получается что коэффициент при первой строчке должен быть равен нулю для того чтобы сумма была нулем аналогичные коэффициенты устройство очки равен нулю если мы посмотрим вторую координату и аналогично коэффициент в третьей строчке тоже нулю если посмотреть на третью координату здесь единичка 10 но следовательно строчки этой матрицы являются линейно независимыми и значит строчный ранг равен трем посмотрим стал новый ранг очевидно он не может быть больше

и значит строчный ранг равен трем посмотрим стал новый ранг очевидно он не может быть больше чем три потому что любые 4 столбца длину 3 является линейно зависимыми но ранг 3 очевидно достигается потому что вот эти три вектора 1000 1000 один они являются базисными векторами в трехмерном пространстве настоятельно столбцов враг также равен трем и мы получили равенство с точно высокого ранга ну и это соответствует общему утверждению о том что для любой вас есть за строчными с собой ранг просто

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

максимально возможным из тех пор без такого размера или они могут быть вырожденными то есть эта квадратной матрицы у которых ранг меньше чем размер этой матрицы но давай теперь поговорим о креста более так перекладных операциях вот скажем посмотрим как матрицу можно умножать на вектор как связаны матрицы и вектора ну очень просто если у вас есть такая матрица из иксов давайте обозначим буквой x ну и вот мы хотим эта матрица умножить на кого-нибудь сектор давайте обозначим скажем буквами этот

ну и вот мы хотим эта матрица умножить на кого-нибудь сектор давайте обозначим скажем буквами этот вектор буквами w1 и w2 тироль w карты ну вот здесь есть один очень важный принципиальный момент дело в том что матрицу вектора можно узнать только в том случае если количество столбцов матрицы равно количеству строк в наш век то есть дни нашего вектора но соответственно умножение корректно только в том случае если это число м то есть количество элементов длина строки равна здесь вот числу к то

в том случае если это число м то есть количество элементов длина строки равна здесь вот числу к то есть длине расширит только в этом случае умножение возможно но сейчас поймем почему но доказывается что это произведение но по определению просто равно вот такому вектору то есть получается дома матрица умножить на вектор и вектор и давайте посмотрим какие то вектор должны быть компоненты ну вот первый компонент этого вектора это будет 101 с . матрицы умножить скалярно на наш вектор-столбец то

первый компонент этого вектора это будет 101 с . матрицы умножить скалярно на наш вектор-столбец то есть скалярное прежде не я напомню это вот такая сумма до скаляр произведение вектора x составлены из компонент x 1 x 2 with alex and и вектор y составлен из компонент y1 так далее и рикон это просто сумма по парных произведений иксов и игреков ну и вот здесь у нас как раз таки стоит скалярное произведение этого вектора умножить на этот сектор ну то есть таким образом это просто x11 на w 1 плюс x

этого вектора умножить на этот сектор ну то есть таким образом это просто x11 на w 1 плюс x 12 на w 2 + так далее плюс x1 н-на w дубликаты дубли военная поскольку мы уже выяснили что k равно я аналогично чтобы найти значение 2 компонента получающегося вектора нужно домножить эту строчку вторую строчку на столбец опять же скалярным то есть получается просто схождение второй строчке на вектор w ну и так определяется все компонент нашего вектора то есть на этой позиции у нас будет скалярное

w ну и так определяется все компонент нашего вектора то есть на этой позиции у нас будет скалярное презрение и этой строчке и нашего столбца на которые мы умножаем ну вот здесь мы кстати видим такое хиты обозначения скажу сюда посмотрим x2 и после этого звездочка это означает что мы имеем дело со второй строкой матрицы но как-то запомнить смотрите вот x2 звездочка на место звездочки можно построить что угодно любое число ну и вот как раз это соответствуют элементам которые появились у нас во

что угодно любое число ну и вот как раз это соответствуют элементам которые появились у нас во второй строке x 21 x 22 x 2m и так далее ну вот такая вот операции умножения матрицы на вектор чуть позже мы поймем почему она весьма естественно но сейчас давайте просто поверим что операция уважением от стояка происходит именно так хорошо да собственно мотивировка того почему игра так как мы определяем произведение матрицы и вектора давайте посмотрим на какой-нибудь системы линейных уравнений это

произведение матрицы и вектора давайте посмотрим на какой-нибудь системы линейных уравнений это выглядит как то вот так ну соответственно у нее есть ли левая часть да это 111 x1 плюс 12 x 2 + и так далее 1 x n не равно d1 ну и так далее а м 1 x 1 плюс am2 x2 плюс x1 bmt эту систему уравнений относительно иксов здесь а и ты являются какими-то числами ибо и ты тоже являются какими-то чистым ну вот соответственно эту систему оказывается можно очень удобно записать в отличном виде а именно в таком

соответственно эту систему оказывается можно очень удобно записать в отличном виде а именно в таком виде а умножить на x равно b это stem или иных уравнение где а это матрица составленный из а и движет их но то есть матрица результате вот элементов из коэффициентов нашей системы но и б это строки столбец вектор-столбец из чисел в правой части то есть b1 b2 и так или bmp ну соответственно x это столбец из элементов x1 x2 и тогда алекс и но можно общем далеко проверить что действительно это

столбец из элементов x1 x2 и тогда алекс и но можно общем далеко проверить что действительно это соответствует нашего презрение умножения матрицы a на вектор x хорошо но тогда недаром наверное да мы вводили наше определение все про матрицы недаром использовали маточные маточные термины при определении систем линейных уравнений оказывается что если а это не вырожденная квадратная матрица то есть если строчки и столбцы этой матрицы линию независимо то тогда систему linux равнение а x равно b

если строчки и столбцы этой матрицы линию независимо то тогда систему linux равнение а x равно b имеет всегда единственное решение независимо от того как у нас будет устроена правой части как у вас будет устроен вектор b ну очень полезная теорема потому что она сразу позволяет сделать вывод о том есть решение систем линейных уравнений или нет ну продолжим наши рассуждения про системами уравнений соответственно если мы добавляем какие-то лишние условия в нашей системы иных уравнений то система

соответственно если мы добавляем какие-то лишние условия в нашей системы иных уравнений то система получается сложнее и какие-то решения которые не были невозможно уйдут ну и соответственно если мы выкинем какие-то условия нашей системе уравнений то система строится проще и решили никита могут появиться ну мы делаем вывод что если на 6 мне этих уравнений строчек то есть условий больше чем столбцов то есть больше чем переменных то эта система то есть скорее всего не будет иметь решения

столбцов то есть больше чем переменных то эта система то есть скорее всего не будет иметь решения соответственно если условий мало о переменных много то система будет иметь бесконечное количество решений как правило ну в принципе это вы соответствует нашему общему пониманию о том как решать систему electronic если у них много переменных то у нас много степеней свободы и мы можем идти к правил даже бесконечное количество решений если же переменных меньше чем условий то степеней свободы мало

даже бесконечное количество решений если же переменных меньше чем условий то степеней свободы мало слишком мало того что мы нашли решение и как правило решений просто не будет хорошо а теперь давайте те знания которые мы получили о матрицах и произведений матрицы и вектора применим для изучения сдачи линии регрессии 0 или грейси это такая классическая задача классическая модель машинного обучения давайте предположим что у нас есть м объектов ну скажем квартир каждый объект то есть каждая

давайте предположим что у нас есть м объектов ну скажем квартир каждый объект то есть каждая квартира описывается н признаками ну например площадь этаж количество комнат и так далее но вот признаки котова объекты мы будем обозначать вот таким образом x k1x к 2 и 3 алекс к.н. ну и вот обозначение x со звёздочкой это соответственно коты вектор-строка веточек а там объекту эффекта признаков ну и необходимо предсказать целевую переменную y коты то есть до котова объекта у нас есть некоторый

и необходимо предсказать целевую переменную y коты то есть до котова объекта у нас есть некоторый например стоимость квартиры которые равна y а там но и вот эту к стоимость нужно предсказать с помощью линейной зависимости то есть мы ищем закономерность между стоимостью и всеми этими признаками в линейном виде но вот например вот такого вида где w1 и w2 и так далее дубль в.н. это некоторые коэффициенты в нашей или иные модели но и не должно признаки после этого у нас получается результат y от и

в нашей или иные модели но и не должно признаки после этого у нас получается результат y от и и понятное дело что не всегда далеко не всегда у нас будет получаться такое строго равенство потому что естественно стоимость квартиры в общем случае не зависит линейно от площади этажа и количество комнат там какая-то более гораздо более сложную зависимость разные квартиры общее говоря при одинаковых наборов таких признаков могут стоить очень сильно по-разному вот но тем не менее в нашей модели мы

наборов таких признаков могут стоить очень сильно по-разному вот но тем не менее в нашей модели мы можем хотеть чтобы y а то и выражалось вот таком виде ну хорошо теперь давайте тогда запишем вот это выражение для всех к в каком-то более компактном виде а именно запишем его в матричном виде ну то есть если у нас есть закономерность такая для каждого кота давайте через x большое то есть через матрицу x обозначим вот эту матрицу как говорят объекты признаки то есть запишем наши векторы строки с

x обозначим вот эту матрицу как говорят объекты признаки то есть запишем наши векторы строки с признаками друг под другом для каждого объекта то есть скажем 1 . соответствует первому объекту вторая строчка 2 объекта и так далее and s . это признаки этого объекта соответственно w это вектор весов то есть w1 и w2 и думали военная вот они здесь написаны и y это правильный ответ это сектор правильных ответов составленный из ответов для всех наших объектов от 1 до n но вот ну и тогда если мы

ответов составленный из ответов для всех наших объектов от 1 до n но вот ну и тогда если мы посмотрим на вот такую запись x умножить на w равно y то это на самом деле компактная запись всех вот таких вот равенств для всех к давайте проверим скажем для первой строчке что y первое равно вот этому выражению brick равна 1 это в точности то что мы получаем выражение их с дублером ее миг но самом деле такой x умножить на w мы должны первую строчку домножить на наш столбец то есть получается x 11 w 1

такой x умножить на w мы должны первую строчку домножить на наш столбец то есть получается x 11 w 1 x 1 2 дубль два и так далее x 1м w м но это соответствует тому что написано здесь известно мы берем первую компоненту вектора y это y1 но это тест потому что написано здесь ну и так для произвольного к общего и получаем что совокупность этих равенств соответствует равенство просто вот x w равно y ну здорово то есть мы уже пока я имели какую-то пользу смотреть получили мы научились записывать

y ну здорово то есть мы уже пока я имели какую-то пользу смотреть получили мы научились записывать задачу в депрессии в таком us компактном виде всего четыре символа это очень здорово ну пока правда собой пользы выбрать вот этого не получили но вот сейчас получим смотрите лень регрессия как и любой другой вид машинного обучения очень чувствительна к количеству объектов в обучающей выборке и количеству признаков но вот до оказывается что если мы имеем такой ситуации что м то есть количество

признаков но вот до оказывается что если мы имеем такой ситуации что м то есть количество объектов равно n то есть количество признаков то тогда мы для любых признаков x и для любого вектора переменных y можем решить систему x до бульвара ну y ну конечно если матрица x является невыраженной ну потому что как мы выяснили в предана предыдущем слайде да это системных уравнении у нас в таком от что виде будет иметь единственное решение если махадев не вынуждены ну как правило махать у нас

от что виде будет иметь единственное решение если махадев не вынуждены ну как правило махать у нас получается не выжженная потому что вообще говоря я взять случайную матрицу то она конечно же получится не выраженный то есть вообще говоря то что в матрице ннн какие-то виктора оказались и независимыми это должно к это произойти и чудесное совпадение чтобы это произошло вот ну поэтому если n равно n то у нас найдется единственное решение скорее всего ну и соответственно если м больше чем and a

n то у нас найдется единственное решение скорее всего ну и соответственно если м больше чем and a решение скорее всего нет то есть если объектов слишком много признаков мало то точно в решении эту систему мы не получим ну и наконец если м меньше м то тогда решение этой системы скорее всего бесконечно много ну и получается что какие бы не были x и и как и какой бы ни был y мы сможем эти такой вектор w чтобы решить такую систему ну казалось бы получается что чем меньше объектов и чем больше

вектор w чтобы решить такую систему ну казалось бы получается что чем меньше объектов и чем больше признаков тем лучше но на самом деле конечно же это иллюзия потому что ну давайте представим что вот например как реализуется такой случай когда количество объектов она количество признаков то есть m равно n ну что это означает означает что вы просто получили каюта матрицу какую-то квадратную матрицу получили какой-то вектор ответов и мы для любой такой матрицы и любого вектора ответов сможем

получили какой-то вектор ответов и мы для любой такой матрицы и любого вектора ответов сможем найти такие коэффициенты что мы восстановим нашу линию зависимость ну а если линейной нашей зависимости нет то тогда ну то есть если если в реальности и 1 канделе нет в жизни как бы да если вы на других объектах которые мы не осматривать обучающей выборке такую закономерность получать не будем то тогда получается что в векторы дубль вы у нас появился какой-то мусор то есть мы решили жить как от систему

что в векторы дубль вы у нас появился какой-то мусор то есть мы решили жить как от систему до относительно w но эти решения вообще никто не гарантирует что они оказались правильными но зато а вот это суждение гарантируют там что решение найдется вот ну соответственно если у нас много объектов обучающей выборке и довольно мало признаков то конечно же точно в решении нашей системы мы найти не сможем но зато сможем найти приближенное решение и оно уже будет ну гораздо более стабильным да за счет

но зато сможем найти приближенное решение и оно уже будет ну гораздо более стабильным да за счет большого количества то есть вот объект в обучающей выборке чем решение системы при m равно им хорошо на этом мы заканчиваем собственно рассмотрение матриц на таком базовом уровне давайте я напомню чем мы в этом видео занимались мы рассказали поговорили о том что такое матрица мы поговорим о том что такое ранг матрицы и вырезали не выразили матрицы поняли что это довольно важно при решение систем

такое ранг матрицы и вырезали не выразили матрицы поняли что это довольно важно при решение систем линейных уравнений потому что если матрица квадратная и не выражена это решение систем или на хранение всегда существует единственное ну и поговорили о том как вот эти теоретические факты могут нам помочь в осознании принципов работы алгоритмов машина учения ну и следующем видео мы поймем как матрицы связаны с линейными операторами линейными преобразованиями и вообще говорили ну линейными

матрицы связаны с линейными операторами линейными преобразованиями и вообще говорили ну линейными функциями найти вы их простому и продолжим говорить про ними алгебру продолжим изучать всем спасибо большое за ней

Линейная алгебра для Data Science. Часть 3. Операции над матрицами

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

можно делать с матрицами с ними можно делать много всего разного можно их складывать между с тобой можно их умножать между собой можно мадриде транспонировать можно брать обратной матрицы можно считать определители матрицы вот все эти вещи мы научились сделать в этом видео ну что же давайте начинать итак первое прошло мы поговорим это самый естественно операции на 20 сами который наследуется еще из векторной алгебры это конечно же сложение ну и соответственно вычитание матриц ну как и в

еще из векторной алгебры это конечно же сложение ну и соответственно вычитание матриц ну как и в гектарах сложение и вычитание в матрицах происходит поэлементно ну и естественно мы можем применять сложению или что не только в том случае если две матрицы над которыми мы хотим довести нашу операцию имеет одинаковую форму ну то есть очень страны было бы если мы могли складыватель им на или вы читаете между собой две матрицы одна из которых скажем 5 на 7 а другая 6 на 8 не понят как это сделать мы

между собой две матрицы одна из которых скажем 5 на 7 а другая 6 на 8 не понят как это сделать мы требуем чтобы и количество строчек и кричит самцов двух матриц были одинаковые и вот тогда мы можем поэлементно провести эту операцию ну вот пример перед вами висит собственной берем две матрицы одинакового размера ну и поэлементно складываем то есть два минус 2 0 3 + 2 это 5 ну и так далее ну очень простая операция аналогично можно определить сочетание то есть как поэлементно и вычитание ну и так

простая операция аналогично можно определить сочетание то есть как поэлементно и вычитание ну и так или иначе весьма полезно это порой и делать кроме того матрицы можно не только станции читайте но и умножаете на какую-то константу но тогда тоже операции будет равняться элементы вот но я думаю что здесь все понятно и ничего нового особо нет ну просто можно говорить более подробно и чтобы больше интересует это умножение матриц между собой вот это жим что нас есть две матрицы 1 матрица от размера

это умножение матриц между собой вот это жим что нас есть две матрицы 1 матрица от размера m на k и другая матрица б размер окана н и вот мы хотим научиться вычитать маточной произведения но есть обратите внимание что параметры первой матрицы должны быть согласованы с параметрами второй матрицы а именно количество получается столбцов матрицы я должно быть равно количеству получается строк матрицы b и вот только в этом случае мы можем определить произведение матриц ну давайте это сделаем и так

b и вот только в этом случае мы можем определить произведение матриц ну давайте это сделаем и так вот на перед нами две матрицы но в них понятное дело согласуется все параметры то есть количество столбцов здесь то есть длина строки равна количество строк здесь то есть длине столбца ну вот посмотрим как эти матрицы умножать и так получится матрица размера m на n в данном случае это опять же 2 на 3 который значение будет вычитаться следующим образом вот и посмотрим на значение 3 здесь посмотра

3 который значение будет вычитаться следующим образом вот и посмотрим на значение 3 здесь посмотра вычисляется ну вот собственно вот такой формуле она читается мы берем первую строчку первый столбец но поскольку здесь первый с точки первый столбец и считаем вот такое вот сумму популярных произведений то есть иными словами скалярное произведение вектора 2 3 1 2 3 минус один на вектор -22 -1 но в итоге получается 3 и вот мы записывать свою тройку достаточно чтобы вычислить значение здесь

но в итоге получается 3 и вот мы записывать свою тройку достаточно чтобы вычислить значение здесь необходимо при множестве от вектор на уже следующий вектор ну и так далее мы отвезем вычисляем наши скалярное произведение попарные всех векторов и в итоге получаем вот такую матрицу ну да вот собственно мы определили умножение двух матриц значение в каждой строчке этом столбце произведение двух матриц равно просто скалярному произведению котова вектора первой матрицы на альты vector 2 матрицы ну

равно просто скалярному произведению котова вектора первой матрицы на альты vector 2 матрицы ну вернее к 300 тыс . ты столбец ну хорошо пока что ничего особенно в этом произвели в этом определении нет обратим только внимание на то что частный случай это произведение то есть предложение матрицы и вектора действует ровно по той же схеме которые мы выясняли в предыдущем видео то есть кроме мата предложили на вектор это был просто частные случаи более общего случая предложение матрицу ну и

предложили на вектор это был просто частные случаи более общего случая предложение матрицу ну и соответственно если еще раз посмотреть на это определение то здесь мы видим что вот скажем этот вектор 1 равен произведению этой матрицы на первый вектор-столбец соответственно второй вектор это произведения этой матрицы на 2 вектор-столбец и третий вектор произведения дима цена третий столбец но следовательно как бы произведение двух матриц просто в общении произведение матрицы и вектора но отлично

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

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

разорвать матрицы произведения матриц снова в этом потом итак давайте какие-то свойства произвели матриц первые свойства самое важное наверное это ассоциативность то есть мы можем как угодно оставить скобочки проведение матрицы если мы его написали а именно она bc равно обидно c но в обычном случае если мы говорим о произведении невский чисел это свойство очевидно но вот в случае произведения матриц она уже не так очевидна на самом деле вот подумайте почему во первых это не очевидно а во-вторых

она уже не так очевидна на самом деле вот подумайте почему во первых это не очевидно а во-вторых можете сами проверить что действительно это все-таки вверх есть такое свойство имеет место это можно просто поверить явном виде подставив в формулу для прежде не матрицу матрицы а бойцы в этом случае вот этом случае следующие свойства который у нас будет интересовать это дистрибутивность то есть можно раскрывать скобочки иными словами она b плюс c равно а b + a c ну и соответственно можно также

раскрывать скобочки иными словами она b плюс c равно а b + a c ну и соответственно можно также записать что обмена c равно a + b над северней равно а c + bc из той и с другой стороны дистрибутивность выполнять следующие свойства это существование нейтрального элемента по умножению вот такого е.н. но этот ментальный мент называется единичной матрицей но поскольку единица это нейтральный элемент по умножению в случае обычных чисел то соответственно случае матриц вот такой нейтральными предложения

умножению в случае обычных чисел то соответственно случае матриц вот такой нейтральными предложения то есть такой элемент что и n умножить на а равно а умножить на n равно а мы называем их тесно единичной матрицей выглядит это единичная матрица следующим образом то есть по главной диагонали у нас находится единицы и вот здесь у всех остальных клетках находится 0 соответственно для случая если матрица у нас имеет размер m на n или скажем m на n то тогда мы можем ее справа дам нажать на массу ген

у нас имеет размер m на n или скажем m на n то тогда мы можем ее справа дам нажать на массу ген и от эта матрица не изменится скажем матрица m на n 2а умножить на n это просто матрица но вот тремя словами вот такое равенство на спереди вот ну конечно же никто не элемент имеет довольно важное применение как в теории только на практике очень часто он используется ну хорошо давай пойдем дальше да вот хотелось бы конечно нам чтобы было коммутативностью в произведение матриц как и в случае чисел но

хотелось бы конечно нам чтобы было коммутативностью в произведение матриц как и в случае чисел но конечно это не верно бы не седана б.а. ну начнем с того что определение матрицу нас хочется нажать матрицу mdk на матрицу к на н но это просто не всегда можно сделать если переставить их местами но даже в случае если скажем а и b этой квадратной матрицы все равно коммутативностью не присутствует для произв не маются ну ничего страшного с этим живут ничего критичного этом нет следующие свойства если

не маются ну ничего страшного с этим живут ничего критичного этом нет следующие свойства если а это вырожденная матрица too b это также вырожденная матрица где а и b это квадратной матрицы давай тоже в размер то есть иными словами если у а скажем строчки или независимо или столбцы или независимо что одно и то же то у а б так же строчки и столбцы также будут ли мы зависим то есть вне зависимости переносится от матрицы а в матрицу а умножить на b но аналогично если матрица вырожденная матрица б

переносится от матрицы а в матрицу а умножить на b но аналогично если матрица вырожденная матрица б тоже конечно же будет собственный еще одно очень важное определение давайте введём это определение обратной матрицы она следующая пусть а это квадратная некоторой матрицы тогда ли если существует такая матрица а в минус 1 для которой выполняется вот такое равенство а на а в минус 1 равно а в минус 1 на а равно единичной матрице то а в минус 1 называется обратной матрицы к то есть это некоторая

1 на а равно единичной матрице то а в минус 1 называется обратной матрицы к то есть это некоторая операция аналогичное деление единицы на число то есть мы можем взять обратное число 1 делить на а а можем взять обратную матрицу а в минус 1 ну вот естественно не для любой матрицы можно взять обратную например если мы имеем дело с матрицей где в каждой клетки находится 0 и то естественно мы не сможем подобрать такой маркер сам в произведении получалось единичной матрице вот но да никто смотреть мы

подобрать такой маркер сам в произведении получалось единичной матрице вот но да никто смотреть мы так сделать можем и вот если можем то тогда это марте называется обратимой ну еще обратим внимание вот на то что если она а в минус 1 скажем равно е т е равно единичной матрице i то автоматически у нас будет а в минус 1 а тоже равняться е поэтому можно для определения обратной матрицы проверяется лишь одно из двух условий 2 будет выполняться автоматически давайте симулируем очень важное

лишь одно из двух условий 2 будет выполняться автоматически давайте симулируем очень важное утверждение пусть а это некоторых квадратной матрицы тогда если строчки столбцы либо с очки либо столбцы естеств да неважно что именно матрицы а линейно независимы то есть если марсиане вы рождены то тогда обратной марте существует и единственным ну соответственно если наоборот с точки или столбцы линейно зависима это обратной матрицы существовать не будет ну конечно это очень приятно что почти любой

зависима это обратной матрицы существовать не будет ну конечно это очень приятно что почти любой матрицы как мы с вами знаем почти все матрицы являются не выраженными остается на почти любой марсия можно вычислить обратно хорошо теперь давайте вот это наше определение обратной матрицы применим на практике вот скажем у нас есть некоторые системы линейных уравнений которые записаны в отличном виде x равно бы то есть данном случае а это давайте считать что нет квадратной матрицы x это вектор

виде x равно бы то есть данном случае а это давайте считать что нет квадратной матрицы x это вектор переменных то есть x1 x2 и так далее x н а б это некоторый вектор свободного члена то есть какие-то константы и мы хотим решить это уравнение относительно x а а и b это известные нам переменные какие-то вернее ну просто известный константы вот ну и тогда оказывается что если а это не вырожденная матрица то есть если существует а в минус 1 то тогда у системы имеет единственное решение но она в

матрица то есть если существует а в минус 1 то тогда у системы имеет единственное решение но она в общем то записывать весьма естественно это x равно а в минус 1 б ну давайте поймем почему так смотрите если мы домножим вот это равенство с обеих сторон на а в минус первой то есть здесь а в минус первой напишем и здесь тоже минус 1 напишем тогда а в минус 1 на а это будет единичная матрица если единичную матрицу домножить на x то у нас получится просто x может единичной матрице надо единичная что

матрицу домножить на x то у нас получится просто x может единичной матрице надо единичная что не влияет в негативном смысле на значение выражения но сказано здесь останется минус 1 б и у нас получается вот такое выражение для решения системы то есть получается что если мы имеем уме если мы умеем вычитать матрицы а в минус первой то мы умеем решать систему линейных уравнений но это очень здорово это очень удобно и отвечает на много вопросов как решать собственно системных равнения знаем возможно

очень удобно и отвечает на много вопросов как решать собственно системных равнения знаем возможно не в ска ментов мы знаем метод гаусса есть на решение систем линейных уравнений можно просто как бы ручками до выражайтесь переменные друг друг через друга и поставлять но вот оказывается можно записать систему в матричном виде посчитать а минус 1 и получить вот такое замечательное представление для решения ну конечно все это работает как в том случае если матрица a не выжить и давайте ещё про одну

ну конечно все это работает как в том случае если матрица a не выжить и давайте ещё про одну операцию поговорим транспонированная матрица это очень простая операция просто мы берем некоторых квадратную матрицу и отражаемые относительно главной диагонали но можно не взять на квадрат набрать можно брать произвольной прямоугольную тогда естественно мы просто ее перевернем вот так относительно мы уже не главной диагонали да просто вот отразим растить прямой y равно x ну и тогда у нас получается

уже не главной диагонали да просто вот отразим растить прямой y равно x ну и тогда у нас получается транспонированная матрица ну и пишут вот ну соответственно если у нас есть вектор строчка некоторые x то тогда он переходит вектор-столбец при транспонировании ну потому что голоса . стал столбец естественно если у нас был вектор-столбец то он приходит директор строчку ну поэтому если у нас есть два вектора столбца x и y то скалярное произведение x на y можно записать вот таким образом x

есть два вектора столбца x и y то скалярное произведение x на y можно записать вот таким образом x транспонированное y вот но и можете сами убедиться что действительно получиться сумма порно произведений то есть скалярное произведение то есть строчка умножить на ступицу хорошо следующая важная характеристика матрицы это ее определитель определитель можно брать только для квадратной матрицы как и многие из предыдущих определений работы только для квадратных матриц это некоторая числовая

как и многие из предыдущих определений работы только для квадратных матриц это некоторая числовая характеристика нашей матрицы которая может определяться рекурсивным определителем матрицы 1 на 1 является просто значение единственной клетки этой матрицы затем определитель матрицы 2 на 2 это вот такое произведение a d минус bc ну и дальше нам нужно определить определитель матрицы этой даты давайте общем случае н а м это будет стоящим выражение мы берем а 11 то есть вот это число и умножаем его на

случае н а м это будет стоящим выражение мы берем а 11 то есть вот это число и умножаем его на определитель так называемого минора дополняющего элемента 11 то есть вот на определителе вот такой матрицы естественно это слагаемое написано здесь затем мы берем элемент 12 умножаем его на соответствующий минор то есть вот на то что осталось здесь и здесь то есть вечерке в эту строчку эту строчку вернее этот столбец и берем определителя того что осталось берем его с минусом потому что это второй

этот столбец и берем определителя того что осталось берем его с минусом потому что это второй элемент ну и пишем такую знак чередующейся суммам по аналогии соответственно в последнем слагаем у нас будет стоять -1 степени n на определитель минора соответствующего вот последнему элементу в этой строчке вот но здесь написано что же такое наших минут в общем случае вот то есть мы поняли как вычислять определители матрицы а через матрицы меньшего размера но таким образом мы умеем вычислять

вычислять определители матрицы а через матрицы меньшего размера но таким образом мы умеем вычислять определители произвольной матрицы в одну и в этом видео мы еще потренируемся вычислить определитель самом конце и так теперь давайте обсудим некоторые свойства определителя ну вот первое свойство такое определитель на произведения оказывать равен произведению определителей в этом смысле определитель произведения а b равен 50 люба то есть в этом смысле коммутативностью к это что-то близко

произведения а b равен 50 люба то есть в этом смысле коммутативностью к это что-то близко коммутативности так присутствует следующее свойство оказывается что определитель равен нулю в том и только в том случае если матрица a является вынужденной вот но тогда в общем-то естественно до выводится из этого то утверждение о том что если матрица a вы рождены этой матрице а повреждены но понятно потому что up-rise ii произведения райан произведений определителей соответственно определитель матрицы а b

up-rise ii произведения райан произведений определителей соответственно определитель матрицы а b равен определитель она при себе но посылка позиций а если новорожденный равен нулю то и определитель а b равен тоже нулю прошу но очень полезное свойство потому что мы у нас не было раньше алгоритма как определить вылезаю из матрицы а теперь она у нас есть потому что мы умеем считать определительных как мы выясним на предыдущем слайде теперь давайте определим некоторые применение нашей техники

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

который называется методом крамера дана квадратная матрица а необходимо вычислить ее обратно ну первым делом вычислим определитель матрицы а это нам пригодится ну затем мы построим матрицу миноров причем не просто миноров а знака чередующихся миноров где под минором я подразумеваю определитель алгебраического дополнения к какому-то элемента матрицы ну то есть вы скажем вот здесь у нас быстро число а 22 это определитель матрицы а q который вычеркнуто вторая строчка и второй столбец но и здесь

а 22 это определитель матрицы а q который вычеркнуто вторая строчка и второй столбец но и здесь будет стоять знак плюс потому что два плюс два это четное число но скажем здесь у нас будет стоять определитель матрицы а с вычеркнутой первой строчкой и вторым столбцом а со знаком минус потому что 1 плюс 2 нечетное ну естественно форму для общего члена это будет -1 степени n плюс к вернее м м плюс к а победитель матрицы а mtk ты где м а м т.к. это это матрица а с вычеркнуто me i'm toy строчкой и

к а победитель матрицы а mtk ты где м а м т.к. это это матрица а с вычеркнуто me i'm toy строчкой и красным столбцом а м и к и то соответственно позиции на которых мы считаем наше наше число хорошо вот такая хитрая формула для вычисления к этой матрице но это пока что еще не обратная матрице а всего лишь заготовка для нее оказывается обратный мозес вычитается вот такой формуле а в минус 1 это аж 3 х транспонированное то есть перевернутая делить на определитель матрицы а вот такая замечательная

3 х транспонированное то есть перевернутая делить на определитель матрицы а вот такая замечательная довольно короткая формула ну конечно же вся сложность вычисления этой обратного ты закроется в том чтобы вычислить все эти громадные определители ну учитывать что и сами определитель довольно сложно читать получается такой довольно развести алгоритм который хоть и является не оптимальным с точки зрения вычислительной сложности с другой стороны его довольно просто запомнить вот но обосновывать

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

их вычитать между собой если них одинаковый размер можно умножать если количество столбцов первой матрицы равно количеству строчек 2 матрицы можно брать обратную матрицу если исходном растирается квадратный и не вы рождены можем а ты тут распланировать можно считать определитель и это помогает нам для вычисление обратной матрицы мы и вот оказывается что все эти операции так или иначе они конечно необходимый для технического построения менял говори матричной системе частности ну а больше часть

необходимый для технического построения менял говори матричной системе частности ну а больше часть операции мы будем использовать при построении неровной сетей ну скажем обратная матрице умножения матриц естественно сложение матриц транспонирование все это нам пригодится при работе с нейронными сетями ну а теперь давайте порешаем задачи и так давайте решим первую задачу необходимо найти определитель некоторый матрицей ты над ну пишем 30 минус 12 минус 2 3 минус 125 вот ну чтобы найти здесь

некоторый матрицей ты над ну пишем 30 минус 12 минус 2 3 минус 125 вот ну чтобы найти здесь необходимо пройтись по какой-либо строке например по 1 и посчитать произведение элемента скажем тройки на определитель минора но и просуммировать по всем элементам строке вот получается 3 на определитель минус 23 25 минус 0 на определитель но неважно чем давайте напишем 2 3 минус 15 минус 16 плюс минус 1 на определитель 2 минус 1 минус 22 но теперь считаем эти числа что у нас получается 3 умножить на что

определитель 2 минус 1 минус 22 но теперь считаем эти числа что у нас получается 3 умножить на что она минус 2 умножить на 5 минус 2 умножить на 3 то есть получается что нас получается минус 17х мир сам так далее минус 0 ну на что угодно будет 0 и минус 1 умножить на 2 умножить на 2 минус минус 2 ночная езда то есть просто 2 мы в итоге те получается минус 50 ну и задача решена и так следующая здача дано некоторой матрицы скажем ти на 3 и необходимый тип не обратно и но мы будем использовать

здача дано некоторой матрицы скажем ти на 3 и необходимый тип не обратно и но мы будем использовать тоже матрица что мы использовать для подсчёта по делителя потому что при вычисление обратной матрицы нам необходим будет определитель ну давайте вспомним как читать обратную матрицу вот у нас есть а одну такую матрицу ну и мы только что посчитали что определитель равен минус 50 хорошо а теперь что же нужно сделать нужно в каждой клетке вычислить значение вредителя минора и подставить это значение

нужно сделать нужно в каждой клетке вычислить значение вредителя минора и подставить это значение в нужную клетку но давайте почитаем от со штрих что же получается на первой позиции у нас нужно быть определили такое минор давайте посчитаем значит минус 2 на 5 это минус 10 минус 2 на 3 то есть минус 16 и знак здесь будет плюс то есть всего получается минус 16 дальше здесь делаем тоже самое два на 5 10 минус 19 на 3 это получается еще с минусом да это это предпочесть плюс 13 и с минусом потому

5 10 минус 19 на 3 это получается еще с минусом да это это предпочесть плюс 13 и с минусом потому что у нас получается нечетная позиция так дальше здесь считаем получается 2 умножить на 2 вот этот минус 2 умножить на 2 минус минус 1 минус 2 то есть получается двоечка и выходит 2 без минусов мы продолжаем в этой позиции здесь что нужен вот такой минор что выходит и -1 и 250 на 5 минус -2 то есть получается плюс двоечка и с минусом потому что нечетной позиции затем здесь считаем что нас

то есть получается плюс двоечка и с минусом потому что нечетной позиции затем здесь считаем что нас получается 3 на 5 минус -1 на -1 то есть 14 из плюсом наконец здесь 6 и с минусом дальше здесь значит получается 0 на 3 минус минус 1 минус 2 получается просто -2 и с плюсом дальше здесь выходит 3 на 3 9 минус минус 1 на 2 то есть получается 11 с минусом наконец здесь у нас получается три на -2 то есть минус 6x плюс x плюс 8 6 отлично мы посчитали матрицу а штрих теперь для того чтобы взять

то есть минус 6x плюс x плюс 8 6 отлично мы посчитали матрицу а штрих теперь для того чтобы взять обратную нужно ее транспонировать и разделить на определитель матрицы а то есть имеем следующее а в минус 1 это а штрих транспонированная делить на 50 верни делитель на минус 50 то есть получается одна пятидесятая и на этом asus панированные с минусами давайте посчитаем что есть будет 16 получается 13 минус 2 затем 2 минус 14 6 я наконец 211 6 ну вот получилась такой ответ давайте его проверим для

минус 2 затем 2 минус 14 6 я наконец 211 6 ну вот получилась такой ответ давайте его проверим для того чтобы проверить необходимо выполнить умножение матрицы 1 - 1 и должно получиться должно получиться единичная матрица давайте это сделаем а на а в минус 1 это на 50 ну потому что кастинг можно выносить на произведение матриц минус 125 умножить на то что здесь у нас получилось вот но давайте прикинем получается на 50 считаем что у нас здесь первая строчка на первый столбец что у нас получается

получается на 50 считаем что у нас здесь первая строчка на первый столбец что у нас получается 301 на 16 13 минут хорошо значит читаем 48 до потом здесь тоже быть даже во тьме нас единичка да мы просто без ума . но стучать 48 плюс 2 то есть получается просто единицу в ней и не просто 50 получается да ну это согласуется с тем что мы хотим потому что потом поделится взятые получится единица давай пойдем дальше первая строчка на второй столбец у нас получается 3 на 2 минус 1 на 6 то есть 0 и 1 .

пойдем дальше первая строчка на второй столбец у нас получается 3 на 2 минус 1 на 6 то есть 0 и 1 . третий столбец это 6 на 6 то есть новому ну пока что все правильно хорошо вторая строчка пошла на первый столбец это два на 16 32 плюс 2 1226 и надо и здесь есть здесь видите я постоянно я зачеркнула получилось пусть вас дочка детьми назвать конечно 2 на 16 32 минус 2 1226 то есть получается 6 минус 6 вас получается 0 действительно идем дальше вторая строчка на второй столбец 4 плюс 28 плюс 18

6 вас получается 0 действительно идем дальше вторая строчка на второй столбец 4 плюс 28 плюс 18 480 получается к спицу вот ну и так далее давайте для приседа считаемся до конца два на два это четыре минус 22 минус 16 получается 0 наконец пошел третий столбец минус 16 плюс 26 минус 10 получается 0 наконец значит -2 минус 28 плюс 30 получается тоже 0 и последнее что нам нужно посчитать минус 2 плюс 22 плюс 30 получается 50 ну и в итоге получается единичную матрицу вот но значит мы визит на

2 плюс 22 плюс 30 получается 50 ну и в итоге получается единичную матрицу вот но значит мы визит на правильно посчитали обратную матрицу и наш метод крамера работает задача решена

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

описывают некоторые сущности в нейронной сети ну что же давайте начинать итак давайте прежде всего определимся о чем мы будем говорить в основном в этом видео определим линейный оператор пусть есть некоторая матрица а размера m на n и вот можно рассмотреть такую функцию f из множества р н множество р.м. ну то есть язык и обменную в кредо пространство в м мерные в кривопространство и это функция пускай она будет действовать по формуле f от x равно а умножить на x то и здесь икс это вектор

пускай она будет действовать по формуле f от x равно а умножить на x то и здесь икс это вектор получается длинный м потому что из rn да и он слева умножается на матрицу а имеющую форму m на n то есть в результате у нас получается вектор длины м ну очевидно что такое маточное произведение для векторов и матриц такого размера но возможно вот такая функция f из rn в rn который действует такой формуле называется собственно линейным оператором ну операторского оператор здесь подчеркивает что у нас

называется собственно линейным оператором ну операторского оператор здесь подчеркивает что у нас не просто какая-то числовая функция функция между какими-то довольно хитрыми пространствами а вот слова линейный в названии подчёркивает то что собственно пират является линейным то есть выполняется вот такая формула f от альфы x плюс 5y равно альфа f от x + птф от y то есть вот такой стандартное обозрение линейности некоторой функции ну давайте проверим что действительно такой операции является

линейности некоторой функции ну давайте проверим что действительно такой операции является линейным для этого необходимо установить что такое равенство выполняется для произвольных векторов x и y и произвольных чисел альфа и бета и так ну запишем и фото alpha x плюс y это равно а умножить на альфе x-bot и y просто по определению функции f ну и теперь мы можем по определению предложения вектора на матрицу расписать это как вектор из скалярных произведений строчек матрицы а умножить на вектор

на матрицу расписать это как вектор из скалярных произведений строчек матрицы а умножить на вектор аргумент ну вот с точки матрицы а мы будем обозначать следующим образом вот а один со звездочкой это первая строчка в а2 со звездочкой стараясь . а mc жвачка это последняя строчка вот ну и теперь мы знаем что скалярное произведение это линейная функция поэтому мы можем расписать это как альфа на вектор скалярных произведений а1 точка x 20 x и так далее а м с девочкой x plus get a на вектор скажи

скалярных произведений а1 точка x 20 x и так далее а м с девочкой x plus get a на вектор скажи прежде ней строк матрицы с игреком уже вот ну и соответственно вот это слагаемое равно альфа f от x несложно убедиться но это слагаемое равно бтф от y и мы действительно проверили что равенство выше выполняется ну таким образом название линейного оператора действительно корректно и вот как раз таки линейность нас и будет больше всего интересовать при рассмотрении таких вот операторов но прежде чем

нас и будет больше всего интересовать при рассмотрении таких вот операторов но прежде чем подробно рассматривается с вами линейные операторы давайте поговорим про то какая здесь можно за ними круг лиц и интуиция вот давайте рассмотрим линий оператор if из rn в rn где m и n во дворике ну это соответствует случаю когда у нас линейный оператор из плоскости в плоскость кстати в произвольном случае если мы отображаем линейные пространства на саму себя то такой оператор еще называют линейным

если мы отображаем линейные пространства на саму себя то такой оператор еще называют линейным преобразованием но здесь подчеркивается что у нас происходит некоторое преобразование одного и того же объекта есть объект приходит сама себя ну так вот если у нас есть переживание плоскости это этим ними оператором то собственно это преобразование плоскости можно рассматривать с геометрической точки зрения ну какие разбавить образованию плоскости байт там повороты бывают аффинные преобразования бывают

ну какие разбавить образованию плоскости байт там повороты бывают аффинные преобразования бывают красивые симметрии вот интересного самом деле рассматривать то какие из этих операторов взять с линейными кисть их преобразования эти линии операторами и какие матрицы этим линейным преобразованием будут соответствовать ну вот давайте свой уникальный пример скажем пуская матрица а у нас будет такого вида 2 минус 11 ты то есть нового грубо говоря приза совершенно произвольно я матрицы 2 на 2 и мы

вида 2 минус 11 ты то есть нового грубо говоря приза совершенно произвольно я матрицы 2 на 2 и мы смотрим как картинка наша поменяется при собственно применение это оператор ну вот посмотрим куда переходит вектор 10 и он переходит в vector 2 1 ни словом заметьте да потому что 2 минус 1 умножить на 10 получается двоечка 1 3 умножается на 10 получается единичка далее 01 переходит в получается в -13 по аналогии да ну и можно это на картинке посмотреть вот красный вектор он перешел вот такой

в -13 по аналогии да ну и можно это на картинке посмотреть вот красный вектор он перешел вот такой красный вектор 2 1 зеленый вектор 2 базисный вектор перешел вектор связан с казаться -13 ну вот так же можно заметить что собственно в столбцах матрицы перехода записанные координаты тех векторов куда переходят эти тривиальные базисные вектора 10 и 0 1 вот ну теперь если у нас есть какой-то произвольный вектор но скажем давайте посмотрим на такой этот синенький вектор сказать о 2 минус 1 и такой

вектор но скажем давайте посмотрим на такой этот синенький вектор сказать о 2 минус 1 и такой жёлтенький вектор с канатами -2 минус 2 давайте посмотрим куда они пили ходит ну во первых можно просто домножить на матрицу а справа и получить что итоговое значение финальных векторов это 5 минус 1 то есть вот такой вектор ab и -2 минус 8 вот такой так вот ну с другой стороны можно сказать так что изначально вот синий вектор имел разложение по базису вот такому по нашему основному боюсь красный и

вот синий вектор имел разложение по базису вот такому по нашему основному боюсь красный и зеленый вектор некоторое некоторое значение это разложение в точности кстати это 2 умножить на первый вектор плюс 1 умножить на 2 виктор на несложно несложно убедиться в этом и -1 до о том что вот здесь такие такие рассказать 2 минус 1 это задействует казати по первому вектору это тесто сказать по 2 вектор по зеленым ну тогда финальный синий вектор будет получаться опять же как линейная комбинация красный

зеленым ну тогда финальный синий вектор будет получаться опять же как линейная комбинация красный вектор с коэффициентом 2 теме штамм коэффициентом и зеленого вектора с коэффициента минус 1 то есть не с вами происходит легче операция вы берем вектор синий изначально картинки раскладываем его по базису красный + зеленый коэффициенты разложения по этому бойцу мы сохраняем переходе в новую картинку где красный вектор зеленый вектор выглядит уже по-другому и теперь раскладываем синий вектор поэтому

красный вектор зеленый вектор выглядит уже по-другому и теперь раскладываем синий вектор поэтому же борису с этими коэффициентами то есть по коэффициентам уже устанавливаем синие вектор в новой картинки но и получается вот такой вектор 5 -10 ищем для желтого получается вектор -2 минус 8 ну какие можно указать свойство этого произвольного линейного преобразования с такой матрицей на самом деле это будет просто произвольные аффинное преобразование аффинное преобразование это такое призвание

это будет просто произвольные аффинное преобразование аффинное преобразование это такое призвание плоскости которая прямые переводят в прямые то есть но в частным случаем афина призвание является поворот осевая симметрия искривление по одной из осей и так далее все это случае афин новообразований на самом деле гамма 3 также является фильм преобразованием это хорошо второй пример что происходит если матрица a вырождения ну в предыдущем примере она была очевидна ними рожденное но здесь можно

если матрица a вырождения ну в предыдущем примере она была очевидна ними рожденное но здесь можно просмотреть вот такой пример скажем матрица a равна 2 минус 1 минус 4 и 2 но очевидно что эта матрица вырожденная потому что вторая строчка равна 1 строчки умноженные на -2 хорошо если матрица a вынужденное то тогда мы можем просто собственно для любого вектора x1 x2 посчитать в какой вектор он перейдет и у нас получится что на самом деле для любых значений x все вот такие выражения вида а умножить

и у нас получится что на самом деле для любых значений x все вот такие выражения вида а умножить на x укладываются на одну и ту же прямую минус 2 x 1 равно x 2 где x1 x2 это координаты собственный вектор x ну что какому за этого делаем мы замечаем что при действии выжженным преобразованием плоскости у нас вся плоскость лопается в одну прямую то есть можно сделать вывод что вы рождены линейный оператор отображает пространство изначально и в пространство как бы меньшей размерности под

оператор отображает пространство изначально и в пространство как бы меньшей размерности под пространство в предыдущем в старом пространстве меньшей размерности но данном случае это изначальное пространство это плоскость а пространство меньшей размерности эта прямая и плоскость размерность два прямая размерность этим хорошо но конечно не вырожденные случаи гораздо интереснее потому что преобразование получается держателями имена в этом случае но с другой страны вынуждены тоже иногда

преобразование получается держателями имена в этом случае но с другой страны вынуждены тоже иногда рассматривают но эти теперь перейдем гнев и генетически еще один пример который возможно покажется вам знакомым потому что в школе любят преобразование плоскости на урока геометрии ну и вот в частности одной из люблю звание плоскости это поворот на угол альфа скажем вокруг точки 1 в группировке вернее в пустоту и точки к точке 0 0 то есть координаты всех обязаться нулевые ну и поворота мы будем

в пустоту и точки к точке 0 0 то есть координаты всех обязаться нулевые ну и поворота мы будем рассматривать просит часовой стрелке вот оказывается для такого преобразования плоскости то есть ли иного оператора из этого 2 тоже можно в явном виде выписать матрицу этого линейное преобразование и эта матрица будет иметь вот такой вид косинус альфа минус синус альфа синус альфа косинус аль вот ну давайте это утверждение докажем и так но чтобы проверить что преобразование наше имеет именно такой вид

это утверждение докажем и так но чтобы проверить что преобразование наше имеет именно такой вид нужно сначала наверно посмотреть на само это преобразование ну вот у нас понятное дело должна быть эта матрица а мы-то преобразование давать ее вот так вот пока ставим неизвестный мы посмотрим как оно вообще действует ну скажем какого действовать на вектор с координатами 10 вот у нас есть плоскость но есть вектор 10 ну и как на него действует поворот на угол альфа но понятно как он переходит вектор

есть вектор 10 ну и как на него действует поворот на угол альфа но понятно как он переходит вектор тоже единичной длины и вот здесь должна быть нужно должен быть углах ну естественно какие у нее координаты будут ну понятно какие если мы опустим перпендикуляр то тогда отрезок по оси икс равен косинус альфа ну а отрезок по оси y равен синус а вот ну тогда координаты этой точки это косинус альфа синус альфу вот ну давайте аналогично посмотрим на отрезок отрезок 01 куда он приходит вот но смотрится

альфу вот ну давайте аналогично посмотрим на отрезок отрезок 01 куда он приходит вот но смотрится вам парочку углов вот но и тогда проекция уже на восьмерик будет равна косинус альфа нам проекция на ось x 1 минус синус альфа одну то есть таким образом казати точки это получается минус синус альфа косинус альфа ну тогда что мы можем заключить из этого можно выключить что а умножить на вектор 10 это у нас косинус альфа синус альфа вот может это означает это означает на самом деле что просто вот в

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

на что получить элемент здесь мы должны умножить на единицу значение вот здесь но значит здесь находится в залив вот мы аналогично мы имеем а умножить на 0 1 это ответственно минус синус альфа косинус альфа вот но и по тем же самым соображение можем написать уже во второй во втором столбце минус синус альфа косинус альфа вот но матрица поворота найдено давайте посмотрим на общую формулу как это может действовать на произвольный вектор x y косинус альфа минус синус альфа синус альфа косинус

может действовать на произвольный вектор x y косинус альфа минус синус альфа синус альфа косинус альфа куда поворот на уголь в переводе директор x y ну умножаем у нас получается x косинус альфа минус y синус альфа и здесь естественно x синус alpha + y косинусов умножение матрицы на вектор вот но если хотите можете чисто геометрически из таких же собрались рассуждений который проводил я проверить что координата x игра переходит в координату с такими вот в точку с таким вот координатами ну что с

что координата x игра переходит в координату с такими вот в точку с таким вот координатами ну что с таким образом мы доказали наше утверждение и нашли матрицу которая соответствует повороту на угол альфа хорошо дать потом дальше ну вот возвращаясь к поворотам вокруг точки 0 мы школе вкус и конечно же все знаем но вообще-то логично что композиция двух поворотов вокруг одной и той же точки с углами альфа и бета то есть когда мы сделаем сначала один поворот с углом альфа то второй парус углом бета

альфа и бета то есть когда мы сделаем сначала один поворот с углом альфа то второй парус углом бета нас получится в результате один поворот с углами с углом просто ним альфа плюс б там ну вот эту идею о композиции преобразование можно обобщить на случай двух произвольных операторов вот предположим что у нас есть два какие-то оператора который имеет матрицы a и b ну и соответственно первое перезвони которым идеями по тэцуо второе призвание имеет матрицу б необходимо найти матрицу композиции двух

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

том что матрица композиции линейных операторов равна произведению матриц этих изначальных линейных операторов но в общем-то это не сложно доказать давайте это сделаем рассмотрим как произвольный вектор x вот он здесь ну под действием 1 оператора то есть оператор смотреться и а этот вектор переходит в вектор a умножить на x но это естественно хорошо что происходит дальше вектор а x уже по действие 2 оператора переходит вектор b умножить на x вот но соответственно вектор x при композиции

действие 2 оператора переходит вектор b умножить на x вот но соответственно вектор x при композиции переходит вектор b умножить на x но поскольку у нас присутствует ассоциативность при умножении матриц то вектор b умножить на x равен вектору b a умножить на x но и соответственно любой вектор x переходит вектор b умножить на x ну как раз это и соответствует тому что линейный оператор равной композиции 2 изначальных иных операторов имеет матрицу d умножить на ну и утверждение доказано ну вот в

2 изначальных иных операторов имеет матрицу d умножить на ну и утверждение доказано ну вот в день это доказано но давайте какую-нибудь интуицию это утверждение посмотрим на том же примере наша любимая с поворотом но вот композиция дух поворота в центр внурь с углами альфа и бета это тоже поворот цента в нуле и давайте убедимся в этом и в явном виде через в произведении через день и матрицу вот и рассмотрим такое произведение двух матриц этом от соответствует первому линию оператору эта масса

и рассмотрим такое произведение двух матриц этом от соответствует первому линию оператору эта масса соответствует тронула линию оператору но и произведение этих двух матриц должно соответствовать оператору композиции этих двух преобразований ну давайте просто перемножим эти матрицы в явном виде и получим вот такое выражение ну и здесь можно заметить что вот скажем здесь у нас получается косинус бета на минус минус синус тета умножить на косинус альфа 700 фото есть как раз таки это на это минус

на минус минус синус тета умножить на косинус альфа 700 фото есть как раз таки это на это минус это на это у нас получается суммарно как раз таки косинус альфа плюс b ну и вообще если формулы из тригонометрии вспомнить то у нас получится матрица которая представляется в таком виде косинус бета минус синус a + b to seduce a + b это косинус альфа и бета но это очень похоже на матрице изначально или них и образование который свят из за поворотом на углы альфа и бета но соответственно это матрица

них и образование который свят из за поворотом на углы альфа и бета но соответственно это матрица имеет угол поворота alpha + бета ну собственно это состыкуется с нашим интуитивным представлениям о том что композиции двух поворотов на альфа и бета это поворот на обед в этом плане все логично хорошо давайте пойдем дальше еще один пример который мы разберем он уже такой немножко более скажем так прикладной у нас был пример такой сумму математические красивые про школьные программы связь школьной

у нас был пример такой сумму математические красивые про школьные программы связь школьной программы с тем что мы сейчас с вами делаем ну а теперь поговорим немножко про применение в dota заняться а именно давайте разберемся как описывать нейронную сеть в терминах матрицы как наши изученные нами и сумме этой терминологии та матрица и линейный оператор помогают при описали нейронной сети но чтобы вспомнить как помогает нужно сначала вспомнить собственно такую нейронная сеть в самом простом

вспомнить как помогает нужно сначала вспомнить собственно такую нейронная сеть в самом простом случае но прежде чем про нирвану сеть говори давайте поговорим про ни один вот он такой красавец что у нас здесь есть у нас здесь есть какие-то входы давайте обозначим их через x1 x2 так далее гсэн данном случае это 10 7 и 3 у нас есть весам у этого нейрона то есть виса на ребрах который соединяет входы с телом нерона ну в весах мы будем обозначать через w1 добыли вы давай тогда ли это были вариант ну

с телом нерона ну в весах мы будем обозначать через w1 добыли вы давай тогда ли это были вариант ну соответственно что происходит и нейрона он вычисляет некоторую линейный рекомендацию да и применяет к ним некоторую функцию f функция активации но в данном случае на картинке функция активации у нас просто пороговая то есть реальные мы заходим в нейрон спрашиваю верно ли что наша активация больше чем больше чем 10 если верно то возвращаем единичку если неверно то возвращаем нолик но в общем

чем больше чем 10 если верно то возвращаем единичку если неверно то возвращаем нолик но в общем случае да вот здесь берется скалярное произведение в общем случае используется произвольной функции активации то есть выход получается не дискретным а каким то ну произвольным другого ряда произвольным числом вот ну и так же у нас есть вот эта функция активации которые уже значение нашей активации переводит не в коде скрипта выход были единицы а какой то уже непрерывный выход то есть у нас здесь

переводит не в коде скрипта выход были единицы а какой то уже непрерывный выход то есть у нас здесь может быть на выходе произвольное число в принципе вот ну функция фото может быть в принципе любая лучше чтобы она была монотонное наверное это даже не обязательно ну вот непрерывность наверно все таки будет важно тем не менее мы в качестве функция фото для упрощения будем использовать такую функцию 7 диана традиционно используется нейронных сетях это совершенно не повлияет на наши последующие

7 диана традиционно используется нейронных сетях это совершенно не повлияет на наши последующие построение но вот так сказать дань историческую нейронам истории развитии нейронных сетей мы давайте отдадим и будем в качестве функции стираться использовать 7 до который вычисляется по формуле сигма terrano 1 делить на 1 плюс i степени минус 3 но эта функция нам вкус еще много раз встретиться в нее только график замечательный но она мы пойдем дальше и так теперь давайте все вот это многообразие

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

слой на входной слое у нас подается допустим никто изображения это не очень важно но данном случает изображение но просто вытягивается вектор получается здесь 64 входных нейрона затем у нас есть еще несколько скрытых слоев и слой выходной вот мы считаем что все нейроны скрытых слоев связаны со всеми ненужным предыдущего слоя здесь также у нас полный граф из связей между нейронами и здесь наш тоже полный граф и связи между нейронами ну соответственно на последнем слое у нас то количество

тоже полный граф и связи между нейронами ну соответственно на последнем слое у нас то количество нейронов которые соответствуют количеству классов на который мы хотим классифицировать наши картинки но если мы классифицируем цифры рукописные то тогда у нас получается 10 выходных неронов вот но конечно же интересно то что происходит на внутренних слоях вот ну и давайте посмотрим на один из этих слоев поближе ну вот на вход у нас подается какой-то вектор x равный x1 и так далее xn вот но и

слоев поближе ну вот на вход у нас подается какой-то вектор x равный x1 и так далее xn вот но и посмотрим на некоторые звали нейрон этого самого 2 слоя верни 1 1 скрытого слоя до второго слоя во всей нейронной сети что же ним происходит ну давайте обозначим через w с индексом и вектор весов этого нейрона то есть данном случае это вектор весов последнего нейрона мы вот здесь собственно w&t с верхним индексом и т это собственно в весах которые написаны на вот этих вот на этих ребрах но средства

индексом и т это собственно в весах которые написаны на вот этих вот на этих ребрах но средства дата выпуска я будет этой это нейрон но соответственно w&t x скалярное произведение это собственно получается w1 и ты x1 w2 это x2 w33 x3 и так далее w н и ты их сам и в итоге все это складывается вот в этот нейрон ну и после этого чтобы получить в их натренированы нужно получить нужно использовать функцию сигма еды то есть мы записываем вот такое выражение и это будет равно выходу этого нет ну

функцию сигма еды то есть мы записываем вот такое выражение и это будет равно выходу этого нет ну хорошего теперь давайте поближе посмотрим нас в первом него не получается выход сигма от w с верхним индексом 1 то есть что году были высоки минусом один это все vesa которые входят в этот нейрон в 1 метр дальше будет вот такое значение дав сервиса который выходит второй нейрон ну и так далее так далее так далее в конце концов у нас получится вектор v 5 номер не выйти компоненте которого записана

так далее в конце концов у нас получится вектор v 5 номер не выйти компоненте которого записана сигма от скорее наблюдения w сверх ним идет сам и t , x вот но в таком случае это просто можно представить как при полимент на и применение функции 7 до к вектору составленному и скалярных произведений w&t , x вот но теперь на самом деле это равно сигма w x где дубы ли вы это вот такая матрица то есть собственно матрицы всех наших весов до на этой в этой строчке на этом столбце стоит элемент w и с

собственно матрицы всех наших весов до на этой в этой строчке на этом столбце стоит элемент w и с верхним индексом это из нижних служит а но то есть это получается вес который приходит в этой нейрон от этого нейрона входного слой ну вот а x это у нас собственно вектор вот такой и тогда w умножить на x и так раз точности такое текста скалярных произведений ну потому что вы все помним что умножение матрицы на вектор это как раз таки скалярное произведение строчек на столбцы . единственный столбец

матрицы на вектор это как раз таки скалярное произведение строчек на столбцы . единственный столбец вектор x ну таким образом у нас получается что вот на этом слое нейронные сети у нас просто происходит линейные преобразования вектор x но это замечательный факт то есть звучит пока и мир очень круто пока что никаких практических применений мы этому факту замечательным найти не можем но давайте просто вот немножко немножко подумаем до что происходит какую роль играю здесь какую роль играет здесь

вот немножко немножко подумаем до что происходит какую роль играю здесь какую роль играет здесь вот эта полна связность какую роль здесь играет функции 7 до но от пола связный слой нейронной сети оказывается выполняет линейный оператор то есть иными словами он выполняет преобразование 1 вектор в другой но это преобразование как бы является линейным оператор ну соответственно функции активации создает не ленились говорят то есть без функции активации нейронная сеть было бы просто набором из

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

что если бы в нейронной сети была не был ни лились тито между слоями неровности проводилась бы просто композиции линейных операторов и это бы ни к чему хорошему не приводила потому что можно было бы все это заменить просто на один или оператор ну вот собственно такая вот замечательная визуализации нейронной сети можно представляете себе как мы оператор это порой бывает полезно при рассмотрении мы скажем задач распознавания образов изображений ними словами иногда разумно рассуждать в терминах

мы скажем задач распознавания образов изображений ними словами иногда разумно рассуждать в терминах линейных подпространств ago by об ну скажем так они рованных до которые задают признаки избегать бизнесе с изображений который соответствует некоторым интернете и каким-то фишечка если изображение котик или нет изображения котика вот но в общем в этом об этом мы говорить подробно не будем в общем знаете что эта аналогия не они просто красивая математическая абстракция но и имеет вполне реальные

знаете что эта аналогия не они просто красивая математическая абстракция но и имеет вполне реальные применения в adsense ну хорошо давайте резюмируем содержание нашего видео итак мы выяснили что по матрице очень просто строится и линейный оператор формула собственно получается f от x равно а умножить на x в детстве на умножение матриц соответствует композиции иных операторов если мы хотим найти какой-то геометрический смысл в линейных оператор или иных преобразованиях то мы легко это можем

какой-то геометрический смысл в линейных оператор или иных преобразованиях то мы легко это можем сделать и много факт в из линейной алгебры они дублируются фактами школьной программы это довольно замечательно то есть нельзя в школе учились получается ну и сами нейронные сети удобно описывать в терминах матриц и линейных операторов нет конечно же приятно замечательно что simatic так помогает adsense мне кажется это совершенно прекрасно и здорово но на этом и это видео заканчиваем всем большое

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

всем привет меня зовут артем дима логинов и сегодняшний семинар будет посвящен такой библиотеки как нам бань на самом деле эта библиотека одна из самых важных библиотеках предназначенных для работы с данными для анализа данных для машинного обучения поскольку она позволяет создавать массивы позволяет быстро их обрабатывать как единое целое и также решать некоторые задачи из линейной алгебры сегодня на семинаре мы попробуем создать сначала одномерные массивы обсудим какие операции можно ними

на семинаре мы попробуем создать сначала одномерные массивы обсудим какие операции можно ними выполнять потом рассмотрим двумерные и многомерные массивы и также поговорим о линейной алгебре и о том как решать эти задачи с помощью библиотеки нам парень для начала давайте поговорим о мотивации зачем вообще нам нужен такой инструмент как нам по и весь мир казалось бы могли выписать просто такой вот код и ни о чём не задумываться то есть что нам нужно сделать мы хотим взять все числа от 0 до 10 в

код и ни о чём не задумываться то есть что нам нужно сделать мы хотим взять все числа от 0 до 10 в седьмой степени минус 1 и записать в массив эти числа умноженное на 5 ну это можно сделать с помощью цикла как представлена на экране но мы видим что время выполнения такого кода почти четыре секунды что достаточно много или другая задача мы хотим просуммировать все числа в массиве для этого давайте напишем такую функцию которая просто идет по массиву и прибавляет элементы ну и давайте подадим на

напишем такую функцию которая просто идет по массиву и прибавляет элементы ну и давайте подадим на вход 10 в седьмой степени чисел и посмотрим как долго будет выполняться такой код ну как мы видим время выполнения тоже достаточно большое и именно в таких случаях нам на помощь приходит библиотека нам пай поскольку оно позволяет выполнять операции с массивами эффективно по времени это достигается за счет того что операции выполняются нет элементами по отдельности а над массивом в целом нам buy

за счет того что операции выполняются нет элементами по отдельности а над массивом в целом нам buy написан на си на чистом си именно его низкоуровневая реализация дает такой выигрыш во времени теперь давайте поговорим про то как устанавливать нам пайм если вы работаете с анакондой с юпитер ноутбукам скорее всего лампой у вас уже установлен если по какой-то причине он не установлен то вы можете раскомментировать одну из вот этих двух строчек и установить него с помощью либо honda install нам по

одну из вот этих двух строчек и установить него с помощью либо honda install нам по и либо тип 3 ндфл лампой это на самом деле немножечко разные команды в плане того что иногда может быть такая ситуация что у вас на одном устройстве и тонн установлен сразу в нескольких местах допустим у вас есть разные версии питона вам нужно работать и со вторым и с третьим например honda и петри будут устанавливать в этом случае в разные директории чтобы точно узнать делал вас находится питон вы можете

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

для библиотеки нам по существует стандартное сокращение н.п. это общепринятое сокращение все так делают все поэтому я очень рекомендую вам его используется давайте начнем с одномерных массивов одномерный массив нам пай создается следующим образом сначала мы просто создаем обычный питоновский массив список и дальше передаём его в конструктор класса нам пай . помимо самого массива а мы еще указали параметр d type параметр d type отвечает за то какой тип данных будет у элементов массива то есть

параметр d type параметр d type отвечает за то какой тип данных будет у элементов массива то есть давайте выведем мы видим что а это у нас класс лист это стандартный питоновский список б это нам пай эндеры и также поскольку мы указали d-type равным float 64 целые числа то мы можем заметить что если мы выглядим массив б у нас будут числа с . несмотря на то что в исходном списке мы подавали целые числа это достигается за счет того что мы явно указали какого типа должны быть данные о но также

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

данные разных типов то мы уже не сможем работать с массивом с помощью векторных операций как с единым целым потому что мы не будем знать где заканчивается один элемент где начинаются другой поэтому если мы подаем на вход данные разных типов то нам buy внутри себя производит каста есть приведения типа к одному общему то есть вот у нас есть такой пример где первые два элемента это целые числа а третий эта строка и давайте посмотрим на тип первого элемента в массиве а это int и тип первого

а третий эта строка и давайте посмотрим на тип первого элемента в массиве а это int и тип первого элемента в массиве б это нам пай . стр то есть нам пай взял наш массив и все его элементы привел к типу строки почему приведение происходит именно к строке в данном случае потому что на самом деле о типов данных в питоне есть которые иерархия и согласно этой иерархии строка стоит выше чем целые числа это связано с тем что мы всегда можем привести целое число к строке то есть там число 15 просто

это связано с тем что мы всегда можем привести целое число к строке то есть там число 15 просто записать как строку 15 а вот строку мы не всегда можем записать как число поэтому при ведении происходит именно к строке также в внутрь конструктора можно передавать не переменную а сразу список и у нас создается массив ну и по-прежнему тип у нас нам пантерой давайте посмотрим на то какие методы есть у класс а н д р и для этого воспользуемся функцией der которая выдает все методы класса и сделаем

у класс а н д р и для этого воспользуемся функцией der которая выдает все методы класса и сделаем следующее возьмем все методы которыми обладают объект б и вычтем из них все методы которыми обладает квас отжиг то есть базовый класс бетона то есть мы хотим посмотреть именно на те методы которые специфичны для класса дыры ну и как вы видите здесь таких методов очень много но давайте возьмем один из этих методов это метод н байт и с помощью этого метода узнаем размер нашего массива white создадим

этих методов это метод н байт и с помощью этого метода узнаем размер нашего массива white создадим нам парень из 5 объектов и подадим ему на вход тип данных in 32 и давайте посмотрим сколько байт занимает получившийся у нас массив как мы видим он занимает 20 байт потому что у нас массив из пяти элементов этих данных м32 м32 это 32 бита то есть четыре байта и 40 на пять элементов как раз получается 20 поскольку как вы видите число методов совершенно огромна также огромное число встроенных нам

20 поскольку как вы видите число методов совершенно огромна также огромное число встроенных нам пай функций поэтому все их запомнить невозможно и если вы не знаете что за функция делает то что вам нужно но знаете что вы хотите то есть допустим посчитать среднее вы можете воспользоваться таким методом как нам по и look for и передавать в него запрос как бы мы передавали запрос внутрь поисковика этот метод производит поиск внутри документации и как вы видите он вернул у нас методы которые

этот метод производит поиск внутри документации и как вы видите он вернул у нас методы которые максимально похоже на то что мы хотим то есть нам пай . мин который возвращает среднее для массива если же вы знаете какой функции вы хотите применить но хотите почитать про неё подробнее можно почти открыть ее документацию для этого достаточно просто вначале поставить ? тут открывается страница которая содержит информацию о функции с примерами ее применения иногда вы можете помнить название функции

содержит информацию о функции с примерами ее применения иногда вы можете помнить название функции но не до конца допустим вам вы хотите выполнить итерацию конкатенации но вы не помните то ли там нужно писать concat то ли нужно писать сканка теней то ли еще что то в этом случае вы можете написать начала функции потом поставить звездочку и ? в этом случае у нас выдаются те функции которые подходят под наше описание то есть начинаются с он теперь давайте после того как мы узнали как искать функции

наше описание то есть начинаются с он теперь давайте после того как мы узнали как искать функции и и смотреть на их документация давайте посмотрим на количественные характеристики которыми обладает нам по и вский массив для начала создадим такой массив мы создали уже не одномерный от трехмерный массив но о многомерных массивов речь пойдет чуть позже но его можно передавать все внутри функции print и тогда он выводится в таком более красиво отформатирована мвидео давайте посмотрим какие есть

и тогда он выводится в таком более красиво отформатирована мвидео давайте посмотрим какие есть количественные характеристики первое это л.н. длина просто петровская функция и она выдает количество элементов по первой оси многомерного массива то есть наш массив трехмерный можно представить как массив двумерных массивов вот как мы видим у нас раз двумерный массив и 2 вы мерный массив это количество цифры 2 и выводятся получается что мы берем первую ось многомерного массива и таким образом выводим

цифры 2 и выводятся получается что мы берем первую ось многомерного массива и таким образом выводим количество есть также метод says says это общее количество элементов в массиве как мы видим здесь у нас их 24 третий метод точнее атрибут на который мы можем посмотреть это in diem энзим это размерность массива или матрицы с которыми мы имеем дело то есть в нашем случае мы подавали на вход трехмерный массив значит к ним равно трем и я наконец последнее это шейк шейк это размерность в более таком

массив значит к ним равно трем и я наконец последнее это шейк шейк это размерность в более таком развернутом виде выдает кортеж в котором указывается количество элементов по каждый из оси то есть поскольку у нас энзим равно трем то кортеж будет состоять из трех элементов и матрицы у нас имеет размерность 2 на 3 на 4 то есть у нас 2 вот если мы посмотрим на вывод который получился о функций print то мы увидим здесь две матрицы размера 3 на 4 поэтому получается 2 на 3 на 4 теперь давайте

print то мы увидим здесь две матрицы размера 3 на 4 поэтому получается 2 на 3 на 4 теперь давайте поговорим подробнее про индексацию массивов здесь все примерно также как встроенных питоновские листах то есть мы можем обращаться к элементу по индексу индексация начинается с 0 как и везде в питоне и чтобы вывести например последний элемент можно воспользоваться яндекс отрицательными индексами в частности -1 выводит последний элемент -2 вывозят предпоследний элемент -3 выводит пред предпоследнее

-1 выводит последний элемент -2 вывозят предпоследний элемент -3 выводит пред предпоследнее элементы так далее объекты нам bikes кого массива изменяем а то есть мы можем обратиться к элементу по индексу и изменить его то есть здесь мы элемент с индексом 2 присвоим значение -1 и как вы видите она у нас действительно поменял по элементам нам полевского носила можно ли тренироваться то есть его можно использовать внутри цикла но на самом деле использовать его внутри цикла крайне нежелательно

можно использовать внутри цикла но на самом деле использовать его внутри цикла крайне нежелательно потому что таким образом мы теряем главное преимущество которым обладает лампой а именно быстродействия поскольку быстродействие достигается за счет того что к элементам массива мы обращаемся как единому целому они перебираем каждый по отдельности то цикле все наши быстры деньги теряются но тем не менее иногда бывают ситуации в которой в без цикла не обойтись и тогда нам по и вский массив можно

менее иногда бывают ситуации в которой в без цикла не обойтись и тогда нам по и вский массив можно передавать в for in также как мы передавали в тут туда же обычный питоновский список вот например мы проинтегрировали по всем элементам массива и напечатали их а сейчас давайте попробуем решить задачу задача состоит следующем мы создадим нам пай массив который состоит из первых четырех простых чисел а дальше выведем его количественной характеристики размер и также выведем тип этого массива сейчас

а дальше выведем его количественной характеристики размер и также выведем тип этого массива сейчас вы можете поставить это видео на паузу и попробовать при решать задачи самостоятельно а мы переходим к ее решению решение заключается в следующем мы помним что первые четыре простых числа это 2 3 5 7 01 дни являются простыми числами по определению и список из чисел 2357 мы подаем на вход конструктора нам п р и далее напечатаем сам массив напечатаем с помощью атрибута d-type какого типа элементы

нам п р и далее напечатаем сам массив напечатаем с помощью атрибута d-type какого типа элементы массива затем с помощью функции type напечатаем тип самого массива шейп вывезет число элементов и аль-байт размер в байтах ну давайте посмотрим вот какой у нас на всех тип данных как вы можете заметить n64 здесь мы не указывали d-type в явном виде по умолчанию если у нас подается массив из целых чисел тип будет n64 если нас подается массив из чисел с точками из вещественных чисел той по умолчанию

тип будет n64 если нас подается массив из чисел с точками из вещественных чисел той по умолчанию будет float шисят четыре также тип самого массива ожидаемо нам пантерой шее у нас выдает всего лишь одно значение потому что массив одномерный и от значения равно 4 и н байтс это четыре элемента каждый из которых поскольку тип у нас нет 64 занимает 8 байт в итоге получаем 32 байта теперь давайте поговорим про то какие еще существуют методы создания масимов помимо того чтобы просто передавать на вход

про то какие еще существуют методы создания масимов помимо того чтобы просто передавать на вход конструктору список зачастую бывают такие ситуации когда нам нужен либо массив состоящей из одних нулей либо массив состоящей из одних единиц для этого в нам пай существуют две встроенные функции это н.п. нам по zeroes и нам порван соответственно вот давайте создадим два массива на вход мы передаем размер массива то есть 7 элементов и так же как и при создании массивы с помощью нам поверий мы можем

массива то есть 7 элементов и так же как и при создании массивы с помощью нам поверий мы можем передавать тип данных которые мы бы хотели видеть и в данном случае мы указали винт 16 вот у нас получились два таких массива там где мы явно указали n16 мы видим что это целые числа а где мы ничего ничего не указали там после 0 стоит . что свидетельствует о том что это вещественные числа и тип у нас как уже говорилось раньше по умолчанию флот 64 иногда мы можем точно не знать размер массива с

нас как уже говорилось раньше по умолчанию флот 64 иногда мы можем точно не знать размер массива с которыми с которым мы работаем но мы хотим знать что мы нам нужно создать массив из нулей такого же размера как другой масти для этого существует такая функция как и 1 лайк и ей на вход подается другой массив то есть у нас есть массив б он имеет размер 7 и если мы выполним код в этой ячейке то мы увидим что у нас создался массив котором 70 и вы можете сказать что в данном случае мы знание размер

что у нас создался массив котором 70 и вы можете сказать что в данном случае мы знание размер нашего массива и почему бы просто не написать нам базе раз и передать туда семерку ну давайте посмотрим и сравним в чем же отличие а отличия как вы видите в типе дано то есть зира славик берет не только форму исходного массива а также берет от туда же и тип данных то есть d-type у массива созданного с помощью за 1 лайк или его аналогов vans like который делать тоже самое только с единичками тип данных

за 1 лайк или его аналогов vans like который делать тоже самое только с единичками тип данных у него будет такой же как у исходного массива который мы подавали ему на вход а когда мы создаем с помощью xii раз то у нас создается массив с типом данных по умолчанию то есть слот 64 еще один важный способ создания массивов частности одномерных массивов это нам пай . и range на myrange это по сути аналог range из питона и он позволяет создавать последовательности чисел с фиксированным шагом он

аналог range из питона и он позволяет создавать последовательности чисел с фиксированным шагом он приняли на myrange так так же как и range принимает три аргумента первый аргумент это начало то есть число с которого мы начинаем второй аргумент это конец то есть правая граница нашей последовательности и третье число это шаг с которым мы идем также стоит заметить что левую границу то есть первое число у нас включается правая граница то есть второе число не включается но помимо этого range может

у нас включается правая граница то есть второе число не включается но помимо этого range может принимать и два аргумента в этом случае шаг считается равным единице но также он может принимать ее один аргумент в этом случае шаг также считается равным единице но также считается что левая граница у нас это 0 то есть на май раньше 5 это все числа от 0 до 5 не включительно шагом 1 ну давайте выведем какие и массива здесь получились в первом случае мы шли от единицы до 16 не включительно шагом 4 а во

и массива здесь получились в первом случае мы шли от единицы до 16 не включительно шагом 4 а во втором случае от пяти до двадцати одного не включительно шагом 2 но поскольку первым аргументом мы передали вещественное число мы передали флот то у всех элементов в массиве созданного и range тип также будет флот ну и в третьем случае это числа от 1 до 10 не включает шагом 1 и в четвертом как мы уже говорили от 0 до 5 тоже шагом 1 иногда нам важнее не то какой шаг будет у последовательности а то

говорили от 0 до 5 тоже шагом 1 иногда нам важнее не то какой шаг будет у последовательности а то сколько элементов в ней будет например если мы хотим построить график и нам нужно для этого какая-то сетка мы знаем левую границы нашего графика знаем правила границ нашего графика и хотим чтобы между ними у нас было скажем 50 значений для таких случаев используется функция len space ей передается первым аргументом левая граница вторым аргументом правой границе но тут важно отметить что в отличие

аргументом левая граница вторым аргументом правой границе но тут важно отметить что в отличие от и range а правая граница не включаются и последний аргумент это число точек которые то есть число элементов в созданном нами массиве давайте посмотрим в первом случае у нас от единицы до 15 включительно два элемента это просто 1 и 15 во втором случае от 5 до 12 включительно 10 элементов и тут у нас элементы с постоянным шагом и их количество действительно равно 10 давайте решим ещё одну задачу мы

элементы с постоянным шагом и их количество действительно равно 10 давайте решим ещё одну задачу мы хотим создать и вывести последовательность чисел от 10 до 32 с постоянным шагом и мы хотим чтобы длина такой последовательности была равна 12 а также хотим узнать чему равен этот шаг сейчас вы можете поставить видео на паузу и при решать самостоятельно а мы переходим к решению поскольку он мы хотим создать последовательность чисел с постоянным шагом и известной длиной то тут явно нужно

мы хотим создать последовательность чисел с постоянным шагом и известной длиной то тут явно нужно использовать лин space передаем туда аргументами 1032 и 12 а для того чтобы узнать чему равен шаг поскольку шаг у нас фиксированный то нам достаточно из следующего элемента вычесть предыдущий ну например из 0 из первого элемента вычесть 0 давайте посмотрим что получится вот такая получилась последовательность и шаг как вы видите у нас равен 2 а давайте обсудим и еще один момент а именно

последовательность и шаг как вы видите у нас равен 2 а давайте обсудим и еще один момент а именно логарифмическую шкалу очень часто особенно когда мы работаем с данными которые могут быть очень большими по-своему численному значению мы хотим использовать нелинейную шкалу как мы использовали в линн space то есть где будет фиксированный одинаковый шаг а мы хотим использовать логарифмическую шкалу и для этого существует функция vox ps она работает так же как и in space 3 на вход передается границы

для этого существует функция vox ps она работает так же как и in space 3 на вход передается границы и количество элементов но границы у нас передаются не просто так как мы передавали улин space а передается показатель степени основание у нас эта десятка и чтобы создать последовательность по логарифмической шкале от 10 в 0 до 10 в 3 мы передаем 0 и 3 ну и далее передаем числа элементов которые равно 12 давайте двигаться дальше и поговорим про то какие операции можно производить но одномерными

12 давайте двигаться дальше и поговорим про то какие операции можно производить но одномерными массивами на самом деле над ними можно производить очень много операций в частности все арифметические операции давайте создадим два массива 1 это все чеки до 11 чисел в диапазоне от 3 до 33 с постоянным шагом и второй это одиннадцать чисел в диапазоне от минус 2 до минус 22 тоже с постоянным шагом для того чтобы производить арифметические операции над массивами важно чтобы они были одного размера

того чтобы производить арифметические операции над массивами важно чтобы они были одного размера поэтому мы выбрали и там и там размер 11 ну давайте напечатаем наши массивы а также напечатаем результаты вот таких операций a + b a минус b умножить на b и а разделить на а вот наше исходное массива как вы видите поскольку мы не указывали датой явно нас по умолчанию массив данных это слово 64 и теперь посмотрим какой результат дают арифметические операции все арифметические операции производятся

посмотрим какой результат дают арифметические операции все арифметические операции производятся поэлементно то есть к нулевому элементу первого массива появляется нулевой элемент 2 к первому первый элемент 2 и так далее то же самое с вычитанием с умножением и делением но в арифметических операциях также допускается чтобы один из операндов неважно какой первый или второй был скаляром то есть просто число они массивом в этом случае произойдёт следующее то есть тут мы написали 5 умножить на а и

число они массивом в этом случае произойдёт следующее то есть тут мы написали 5 умножить на а и все элементы массива а умножились на 5 то же самое 10 плюс b это ко всем элементам массива b прибавляется 10 помимо указанных операций также над массивами можно производить и операцию возведения в степень причем массив может выступать как в роли основание степени так и в роли показателю степени давайте посмотрим вот на таком примере то есть здесь у нас массив a + b который это просто числа от 1 до 11

посмотрим вот на таком примере то есть здесь у нас массив a + b который это просто числа от 1 до 11 включительно и мы возвели его в квадрат и вывелись у нас квадраты чисел от 1 до 11 во втором примере мы два возвели в степени a + b и это поэлементно и возведение двойки в соответствующей степени то есть по 1 2 2 до 3 и так далее но поскольку 2 11 это 2048 уже достаточно большое число поэтому когда мы передаём его функцию print у нас запись выглядит так то есть на самом деле она расшифровывается

мы передаём его функцию print у нас запись выглядит так то есть на самом деле она расшифровывается как две целых сорок восемь тысячных на 10 в третьей степени также иногда мы когда мы передаем массивы в арифметические операции они могут иметь разный тип и в этом случае происходит такое же приведение типов и при приведении происходит к большему численному типу то есть мы имели массив а у которого тип float 64 и прибавляем к нему массив чисел от 0 до 11 не включительно с типом int 16 и давайте

тип float 64 и прибавляем к нему массив чисел от 0 до 11 не включительно с типом int 16 и давайте посмотрим какой итоговый тип будет у элементов массива итоговый тип как вы видите флот 64 потому что флот 64 а более крупный тип это больше тип который может содержать больше чисел именно поэтому при ведении происходит именно к нему они к int 16 помимо арифметических операций в на май существуют так называемые элементарные функции а они называются универсальными функциями имеют тип нам бай . и фанк

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

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

математики исключения у нас никакой не китаец и то есть ячейка с кодом выполняется нормально но в ответ просто записывается нам нам значит но ты нам бы это значит что-то неопределенное можно выполнять логические операции логические операции так же как и арифметические производятся поэлементно то есть запись a больше b означает что соответствующий элемент массива а больше соответствующего элемента массива b все элементы массива у нас больше чем элементами поэтому везде вас записал остро также

массива b все элементы массива у нас больше чем элементами поэтому везде вас записал остро также можно сравнивать элементы между собой с помощью оператора равно и сравнивать элементы массива с каким-то скаляра ну например здесь мы сравнению с десятью и первые 3 элемента у нас меньше десяти а начиная с 4 значения стала true помимо по элементных логических операций можно также использовать кванторы всеобщности и существования то есть иногда нам важно что-либо для какого-то одного хотя бы элемента

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

перси обществе до кванты существования а в лампой для них есть соответствующие функции это нам пыл для всеобщности и лампой и не для существования давайте создадим такой массив это элементы от 0 до 20 20 не включается и сравним эти элементы с нулем как мы видим нам по йене вот такого сравнения выдала значение true потому что у нас есть элемент равный нулю значит хотя бы для одного элемента массива равенство верно значит нам пай и не выдает true а нам paypal как мы видим выдал falls здесь мы

равенство верно значит нам пай и не выдает true а нам paypal как мы видим выдал falls здесь мы просто передали c но на самом деле с учетом давал как происходит при ведении численных типов кабалевского типа true или false это эквивалентно тому что написать вот так то есть c равна нулю потому что прежде не происходит следующим образом 0 это фолз труб это все что не 0 ну на самом деле точнее это будет эквивалентно не такой записи а вот такой потому что у нас true это не ноль а for speed она

будет эквивалентно не такой записи а вот такой потому что у нас true это не ноль а for speed она по-прежнему у нас вдается фолз потому что у нас есть один элемент который равен нулю неравенство выполнены не для всех элементов массива теперь давайте поговорим про in place операции in place операции это операции которые не создают какой-то новый объект а меняют уже существующей то есть если мы напишем допустим c равно a + b то мы результат операции a + b записываем в переменную цель но иногда мы

допустим c равно a + b то мы результат операции a + b записываем в переменную цель но иногда мы так сделать не хотим а мы хотим для удобства для компактности работать уже с уже существующей переменной и для этого используется оператор плюс равно минус равно умножить равно и так далее в частности после плюс равно может стоять снаряд в этом случае ко всем элементам массива цепь прибавится одно и то же число равное синус у 4 так же мы можем умножить все элементы на 2 тут стоит отметить еще такой

же число равное синус у 4 так же мы можем умножить все элементы на 2 тут стоит отметить еще такой момент что геймплей с операции возможны только для операндов одинакового типа то есть если у вас есть массив состоящий из целых чисел и вы хотите прибавить к ним допустим строку то такая операция выдаст у вас очевидно ошибку но в случае если вы допустим захотите прибавить какое-то вещественное число то ошибки не будет потому что к вещественному число можно спокойно привести и это приведение

число то ошибки не будет потому что к вещественному число можно спокойно привести и это приведение происходит и на вход у нас на выход точнее у нас подается уже массив из флот из вещественных чисел ну вот ещё один пример им place операции то есть мы в все элементы массива д поделили на элементы массива b здесь уже у нас не скаляр a massive тут все работает точно также операция выполняется поэлементно ранее мы уже видели пример операции которая не определено с точки зрения математики но может

ранее мы уже видели пример операции которая не определено с точки зрения математики но может быть выполнено в нам пай а именно мы брали логарифм от отрицательного числа а теперь давайте попробуем поделить на ноль как вы видите тоже никаких исключений не срабатывает ячейку выполняется корректно ну давайте посмотрим более подробные результаты у нас 0 поселился на 1 это 0 2 случае это 0 делить на ноль это нам потому что в математике но не делить на ноль это неопределенности вообще считаются 1

ноль это нам потому что в математике но не делить на ноль это неопределенности вообще считаются 1 делить на ноль это бесконечность данном случае плюс бесконечность и -1 делить на ноль это а минус бесконечность также для работы часто могут понадобиться математические константы и эти константы также реализованы в нам пай они хранятся в виде таких атрибутов нам по их . геном . и их можно использовать еще одной важной операции с которой можно производить массивом является com сам лист кумулятивная

еще одной важной операции с которой можно производить массивом является com сам лист кумулятивная сумма давайте посмотрим как она работает на примере массива b у нас был массив и чисел от единицы до 20 включительно и что делает метод com сам он в каждой ячейке записывает сумму всех элементов до этой ячейки включительно то есть здесь у нас будет только один здесь у нас записано 1 плюс 2 здесь на записано 1 + 2 + 3 здесь 1 + 2 + 3 + 4 и так далее и последний элемент это просто сумма всех

на записано 1 + 2 + 3 здесь 1 + 2 + 3 + 4 и так далее и последний элемент это просто сумма всех элементов массива также как и обычные массивы нам поймать его можно сортировать давайте создадим такой на всех и для сортировки существуют два способа первый из них это вызвать функцию нам пачку сорт эта функция как мы сейчас увидим она сортирует наш массив однако она не изменяет его то есть если мы хотим чтобы массив изменился нужно явно присвоить значение этой функции какой-то переменной ты сам

хотим чтобы массив изменился нужно явно присвоить значение этой функции какой-то переменной ты сам сайт допустим b равно нам пай точки сорт от a при такой записи массив а у нас не изменился как мы видим он такой же какой он и был но есть и еще один способ мы вместо вызова функции вызовем метод у класс а н д р и метод сорт и этот метод он уже меняют сам объект то есть а это у нас уже отсортированный массив теперь давайте посмотрим на то как можно наши массива объединять до этого создадим просто

массив теперь давайте посмотрим на то как можно наши массива объединять до этого создадим просто массив из 5 единиц на самом деле для объединения массивов существует очень большое количество способов особенно это касается многомерных массивов но для одномерных подходит такая функция нам поесть об этой функции на вход передается либо кортеж либо какой-то список то есть мы можем объединить не просто два массива а мы можем объединять больше двух как мы здесь видим и мы просто передаём их в визе

два массива а мы можем объединять больше двух как мы здесь видим и мы просто передаём их в визе кортежа в том порядке в котором мы хотим чтобы они объединялись то есть здесь у нас массив а далее идет массив b и далее идет массив 5 . все они последовательно записались внутрь одного номерного сего точно так же как мы объединяли массивы массива можно и расщеплять на составляющие для этого есть мир функцией сплит и ей на вход подается массив который мы хотим расщепить и далее дней на вход подаются

сплит и ей на вход подается массив который мы хотим расщепить и далее дней на вход подаются индекса по которым происходит разделение массива на выход поскольку мы хотим разделить в трех местах у нас в итоге получится 4 массива и эти четыре массива и подаются на выход то есть если мы хотим поделить на n частей на выходе мы получим n + 1 массивов давайте посмотрим как у нас разделился наш массив у нас был массив а вот такой вид он имел первым индексом у нас был указан на 3а разделение происходит

нас был массив а вот такой вид он имел первым индексом у нас был указан на 3а разделение происходит до указанного индекса то есть x1 нашем случае это элементы с индексами 0 1 и 2 дальше следующий индекс это 5 поэтому и в x2 запишется элементы с индексами 3 и 4 следующий индекс 6 поэтому элемент с индексом 5 запишется в x3 ну и оставшиеся последний элемент о он записывается в x4 помимо того что мы можем менять элементы массивов обращаясь с ним по индексам мы также можем менять их количество то

можем менять элементы массивов обращаясь с ним по индексам мы также можем менять их количество то есть добавлять новые элементы удалять имеющиеся нас элементы для этого есть три функции это делить и интер стоит сразу заметить что все эти функции не являются in place функциями то есть они не изменяют того массива который мы подаем им на вход они вместо этого создают новый массив и этот новый массив нужно если мы хотим его каким-то образом сохранить его нужно записывать в переменную пример это на

нужно если мы хотим его каким-то образом сохранить его нужно записывать в переменную пример это на мой билет мы подаем на вход массив и подаем на вход индексы элементов которые мы хотим удалить то есть мы удаляем my minds индекс n 21 с индексом 4 и с индексом 1 но когда мы напечатаем снова принта мы видим что наш массив не изменился потому что эти функции не являются in place функциями на пай . insert позволяет вставлять элементы на произвольную позицию то есть мы указываем массив мы указываем

позволяет вставлять элементы на произвольную позицию то есть мы указываем массив мы указываем индекс до которого мы вставляем необходимые нам элементы и третьим аргументом просто указываем элементы которые мы хотим ставить и как мы видим у нас добавились минус 1 и минус 1 перед элементом с индексом 2 ip and делает примерно то же самое но добавление происходит в конец носила то есть у него всего лишь два аргумента это массив это что мы хотим добавить и добавление происходит конец теперь давайте

два аргумента это массив это что мы хотим добавить и добавление происходит конец теперь давайте вернемся к теме индексирования и рассмотрим пару полезных приемов которые часто бывают нужны для работы с массивами первый из них это записать наш имеющейся массив обратном порядке здесь точно тот же синтаксис который работает с обычными списками двоеточие двоеточие -1 имеющиеся нас массив переписывается вам в обратном порядке точно также можно работать с диапазонами индекса мы указываем сначала

вам в обратном порядке точно также можно работать с диапазонами индекса мы указываем сначала левую границу которая включается затем правую границу которое не включается и затем еще через за одно : можем указывать шаг с которым мы не идем то есть если он не указан таша крайне зенице то есть мы берем просто все элементы если решитесь 2 то мы берем элементы начиная со 2 по 5 не включительно с шагом 2 важный момент при работе с диапазонами индексов это то что созданный вот таким образом массив

2 важный момент при работе с диапазонами индексов это то что созданный вот таким образом массив будет указывать ни на какие не на какую-то новую область памяти а на ту же самую область куда указывает массив а и таким образом если мы каким-то образом будем менять массив б все эти изменения будут видны в массиве а давайте посмотрим на примере мы создали с помощью такого диапазона мастиф b и захотели поменять его записать память 1 значения минус 1000 и в итоге поскольку это одна и та же область

поменять его записать память 1 значения минус 1000 и в итоге поскольку это одна и та же область памяти у нас поменялось также и значение массива а ну вот здесь пример диапазона шагами о котором я говорил ранее что в качестве третьего аргумента такого после 2 : указывается шаг с которым мы идем также под массиву можно присвоить значение скаляра это значит просто что все элементы этого под массива поменяют свое значение на этот скаляр то есть здесь мы взяли элементы с 1 включительно по 6 не

поменяют свое значение на этот скаляр то есть здесь мы взяли элементы с 1 включительно по 6 не включительно шагом 3 и вот эти два значения у нас поменялись надули чтобы избежать проблем с перри записыванием данных когда мы вносим изменения в один массив а эти изменения оказывается видны в другом можно в явном виде сказать что это этот массив будет работать с другой областью в памяти для этого используется метод копи он создает уже независимую копию массивах с которой можно работать с не боясь

метод копи он создает уже независимую копию массивах с которой можно работать с не боясь что какие-либо изменения отобразятся в исходном массиве то есть здесь мы поменяли значение на -4 но как мы видим массив а остался неизменным также в отличие от стандартных питонов ских списков к нам папским массивом можно обращаться не только по одному индексу а по целому массива индексов то есть вот такой код создаст под массив где на первом месте запишется элемент с индексом 5 на втором elements индекс

код создаст под массив где на первом месте запишется элемент с индексом 5 на втором elements индекс центре и на 3 sim элемент с индексом 1 здесь важно что когда мы используем такую индексацию нужно не забывать про эти квадратные скобки то есть передавать не просто индексы через запятую а именно массив индексов но давайте решим следующую задачу создадим массив из 100 точек от -4 и до 4 пи включительно и с помощью нам пай . он проверим по сути выполнения основного тригонометрического тождества то

и с помощью нам пай . он проверим по сути выполнения основного тригонометрического тождества то есть проверим что поэлементный квадраты синусов и пыли сумма поэлементно квадратов синусов и косинусов данном массиве будет равна единица здесь вы можете поставить видео на паузу и мы переходим к решению поскольку у нас задано границей заодно количество точек то мы можем быстро создать такой массив с помощью линз space -4 p4p с стоп и далее для проверки к используем следующий синтаксис считаем

с помощью линз space -4 p4p с стоп и далее для проверки к используем следующий синтаксис считаем поэлементный синус возводим в квадрат читаем поэлементный косинус и возводим в квадрат и суммируем их дальше здесь указан метод раунд он связан со следующим синусы и косинусы это вещественные числа это числа с плавающей точкой и при работе с такими числами неизбежно возникают ошибки округления то есть на самом деле значение полученные здесь может незначительно отличаться от единицы в каком-то там

на самом деле значение полученные здесь может незначительно отличаться от единицы в каком-то там знаки то может получиться 0 9 9 9 9 и так далее и в этом случае у нас просто упадет нашу страну наше сравнение выдаст falls чтобы этого не происходило мы на вызываем метод раунд который округляет если ничего не указано то до ближайшего целого числа и проверим если мы все сделали правильно то все элементы равны единице и нам павел выдаст руб но мы действительно видим и сделали все правильно потому

равны единице и нам павел выдаст руб но мы действительно видим и сделали все правильно потому что ответ получился именно такой на этом мы заканчиваем рассмотрение одномерных массивов и переходим к двумерна а двумерные массивы можно создавать также как мы создавали одномерные но на вход передаем уже не просто список а список списков то есть такое матрица с помощью нет да print можно более красивый вывести то есть виде такой матрицы давайте посмотрим на характеристики которые мы обсуждали ранее

вывести то есть виде такой матрицы давайте посмотрим на характеристики которые мы обсуждали ранее энзим это количество осей размерность она равна двум потому что у нас двумерный массив шейп это 2 на 2 2 строки и 2 столбца длина это число элементов по первой оси то есть в нашем случае у нас тут два одномерных массивов значит длина тоже будет равна двум nuisance количество элементов это 4 теперь поговорим про индексацию как же вообще обращаться по индексу к двумерному массиву для этого существуют

про индексацию как же вообще обращаться по индексу к двумерному массиву для этого существуют два способа они совершенно эквивалентны первые это также как мы обращаемся к питон окским списком то есть квадратные скобки и потом еще одни квадратные скобки второй способ это внутри одних квадратных скобок перечислять индекса через запятую то есть первый индекс у нас отвечает ну в такой записи это будет строка строка с номером 1 и 2 индекс это столбец столбец номером 1 и получаем элемент 4 также

будет строка строка с номером 1 и 2 индекс это столбец столбец номером 1 и получаем элемент 4 также иногда мы хотим поменять размерность наших данных не меняя сами эти данные для этого один из способов как это можно сделать это присвоить атрибуту шип новое значение в виде кортежа элементов давайте рассмотрим такой пример у нас есть нам пай и range от нуля до двадцати то есть если мы выведем бы . шейп у нас будет просто число 20 потому что и раньше создает одномерный массив а мы хотим работать с

у нас будет просто число 20 потому что и раньше создает одномерный массив а мы хотим работать с двумерным и поэтому в б . шейп мы передаем 210 то есть мы хотим получить матрицу с двумя строками и десятью столбцами но как вы видите что-то такое мы получили но важный момент это то что число элементов в новом шейк должно быть таким же как число элементов в исходном то есть если здесь поставлю не 10 опять то это выдаст ошибку потому что нельзя массив размера 20 ничего не потеряв запихнуть в массив

опять то это выдаст ошибку потому что нельзя массив размера 20 ничего не потеряв запихнуть в массив в матрицу 2 на 5 поэтому тут важно следить за тем чтобы чтобы сайт который количество элементов оставался таким же также есть не затребовал который 1 многомерный массив превращает в одномерной то есть он просто берет и вытягивает наш массив в одномерный также как мы создавали одномерные массивы из нулей и единиц можно создавать и двумерные для этого вместо одного аргумента такие одного числа

из нулей и единиц можно создавать и двумерные для этого вместо одного аргумента такие одного числа равного длине массива мы подаем можете упал картер который по сути шейп нашей будущей матрица то есть здесь мы заполним единицами матрица размера 3 на 3 точно также можно делать из бразерс получили матрицы знаний размера 3 мечты также важная для линейной алгебры матрица это единичная матрица напомню как она выглядит это нули на всех позициях кроме главной диагонали и единицы на главной диагонали

как она выглядит это нули на всех позициях кроме главной диагонали и единицы на главной диагонали это квадратная матрица и допустим мы хотим создать единичную матрицу размера 3 на 3 это можно сделать с помощью нам пай . ой и передаем туда одно число поскольку матрица у нас квадрат на это одно число вполне описывает ее размер также можно создавать и произвольные диагональные матрицы то есть матрицы у которых 0 и стоят везде кроме главной диагонали для этого вызываем нам пай . diag и на вход

у которых 0 и стоят везде кроме главной диагонали для этого вызываем нам пай . diag и на вход передаем массив элементов которые будут в нашей матрицы стоять на диагонали т.е. здесь мы на вход передали один два три четыре и как мы видим именно один два три четыре у нас записаны в получившийся матрицы на главной диагонали остальные элементы исполняются нулями ну давайте решим задачу создадим в квадратную матрицу размер этой матрицы будет 8 до 8 на главной диагонали поместим арифметическую

в квадратную матрицу размер этой матрицы будет 8 до 8 на главной диагонали поместим арифметическую прогрессию которая начинается с 3 имеет шаг 3 она побочный просто поместим минус единица остальные элементы не диагональные этом или можете сейчас поставить это видео на паузу а мы переходим к решению на самом деле решение можно очень компактный записать вот такой одной строчкой давайте просто разберем подробнее что именно тут сделано сначала разберемся с побочной диагональю создадим матрицу

разберем подробнее что именно тут сделано сначала разберемся с побочной диагональю создадим матрицу восемь на восемь с единицами на главной диагонали то есть единичную матрицу с помощью нам пай aй дальше пусть он умножение на -1 все наши единицы мы заменим на минус единица и воспользуемся этим синтаксисом который позволяет развернуть наш массив в обратном порядке такая запись развернет каждый из вот этих одномерных массивов которые у нас есть то есть теперь вместо минус единиц на главные

из вот этих одномерных массивов которые у нас есть то есть теперь вместо минус единиц на главные диагонали мы получим минус единицы на и побочной диагонали а именно этого мы и добивались но далее арифметическая прогрессия это нам по и range первый элемент у нас это 3 шаг это три а поскольку размер 8 последним элементом указываем 27 он не включается и посмотрим что у нас получилось вот у нас получилось косметическая прогрессия на планы диагонали и нирс единицы на побочный остальные все элементы

косметическая прогрессия на планы диагонали и нирс единицы на побочный остальные все элементы 0 и потому что нам по я и заполняет нулями и нам пойдет заполняет тоже нулями теперь перейдем к какой теме как умножение матриц и умножение матриц нам пай на самом деле можно производить несколькими способами первый способ ну сначала создадим матрицы которым мы будем умножать такая матрица из пятерок и здесь у нас двойки на главной диагонали единицы до всех остальных позициях первый способ умножения

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

выполнять и матричное умножение которое определяется по другому вообще определенно не всегда то есть для того чтобы умножить одну матрицу на другую нужно чтобы число столбцов первой матрицы было равно числу строк второй матрицы и не то умножения она не симметрично то есть а умножить на b не равно был лишь на более того если all масштаба существует был нажно и может не существовать и такое умножение она выполняется либо через собачку либо с помощью метода dot и объект от которого мы вызываем

она выполняется либо через собачку либо с помощью метода dot и объект от которого мы вызываем этот метод это будет первый множитель первый операнд и который подается на вход нет удод это второй экран на самом деле метод нам пай . dot это очень мощный инструмент который позволяет не только перемножать матрицы а также вычищается с через скалярное произведение векторов и некоторые другие операции выполнять поэтому я очень советую вам почитать документацию этого метода чтобы более подробно с ним

выполнять поэтому я очень советую вам почитать документацию этого метода чтобы более подробно с ним ознакомиться иногда нам нужно создать двумерные массивы которые будут зависеть только от одного индекса но самый распространенный пример такой ситуации когда мы хотим создать какую-то сетку для графика очень часто возникает когда мы хотим построить какие-то поверхности в 3d и пусть у нас по одной оси значения мы хотим получить значение 12 а по другой оси значение 4 6 и 8 и тут нам на помощь

оси значения мы хотим получить значение 12 а по другой оси значение 4 6 и 8 и тут нам на помощь приходит функция нам по и меж grid туда мы передаем два массива и на выходе мы также получаем два массива с уже двумерными уже нарушит бабу мерных массива и соответствующие координаты которые мы хотели получить помимо того метода которые мы уже обсуждали то есть заменить атрибут шейд какой то наш кортеж также для того чтобы поменять размерность массива есть такая более удобная запись это не тот решит

также для того чтобы поменять размерность массива есть такая более удобная запись это не тот решит внутрь методы решает подается либо одно число тогда у нас массив становится одномерным либо какой-то кортеж и в этом случае у нас получается двумерный массив но так же как и в случае с изменением атрибуты шейп тут нужно следить за то что затем чтобы число элементов осталось таким-же то есть здесь у нас у массивы x6 элементов и решить мы делаем тоже на 6 и получаем одномерный массив но давайте

у нас у массивы x6 элементов и решить мы делаем тоже на 6 и получаем одномерный массив но давайте перейдем к еще одному заданию мы хотим отобразить вектор размера 100 это будет гулевский вектор из двух значений true и false в котором вычеркивается но то есть ставится фолз у x а если x это составное число то есть число которое не является простым здесь вы можете поставить на паузу мы переходим к решению для решения сначала создадим наш исходный массив и заполним его значение метрa поскольку

к решению для решения сначала создадим наш исходный массив и заполним его значение метрa поскольку единица это тру у нас мы можем использовать нам поймать и здесь предварительно указав что идти данных это буд то есть мы получили здесь массив размера стал которым все значения true далее мы знаем что 0 и 1 по определению это не простые числа но на самом деле составными они тоже не являются но поскольку они непростые давайте запишем фолз и дальше воспользуемся известным алгоритмом поиска простых

они непростые давайте запишем фолз и дальше воспользуемся известным алгоритмом поиска простых чисел он заключается в том что мы перебираем все числа начиная с 2 и заканчивая некоторым н макс а н макс нашем случае это корень из длины массива квадратный корень и утверждается что делители числа не не могут превосходить корня из этого самого числа поэтому мы делаем следующее мы перебираем все числа от 2 до корня из глины и начиная от 2 умножить на и с шагом и записываем значение равный фолз то есть

2 до корня из глины и начиная от 2 умножить на и с шагом и записываем значение равный фолз то есть и 2 умножить на 3 умножить на i и так далее все эти числа они делятся на и поэтому они уже будут очевидно составными поэтому их нужно вычеркнуть ну и утверждается что когда мы пройдемся числа от 2 до n макс останутся не вычеркнуто не только простые числа давайте посмотрим какое массив раз случился ну и проверим правильно или значения записаны в этом массиве для примера возьмем число семи наций с

ну и проверим правильно или значения записаны в этом массиве для примера возьмем число семи наций с которой является простым и число 25 которые не является простым и как мы видим 1717 утра 25 это фоллз то есть еще одно важное отличие на майских массивов от массивов в питоне это возможность использовать маски давайте посмотрим как эти маски создается и как с ними работать вообще маска это массив булевских переменных true или false такого же размера как исходный массив мы уже обсуждали что мы

булевских переменных true или false такого же размера как исходный массив мы уже обсуждали что мы можем поэлементно выполнять логические операции над одномерными массивами ну и не одномерными на самом деле тоже и теперь мы сделаем следующее посмотрим какие числа из диапазона от нуля до двадцати не включительно делится на 3 для этого запишем вот такой вот за кого логическое выражение она создать у нас булевы маску то есть массив из струи фолз такого же размера как а и на самом деле преимущество

нас булевы маску то есть массив из струи фолз такого же размера как а и на самом деле преимущество напасть заключается в том что эту маску можно передавать в качестве индекса внутри квадратных скобок и в этом случае такая операция вернет у нас только те значение только те элементы массива для которых значения маски равно true давайте посмотрим вот такая у нас получилась маска и когда мы передали ее в качестве индекса то у нас вывели столько все числа которые делятся на три еще одна операция

ее в качестве индекса то у нас вывели столько все числа которые делятся на три еще одна операция которое которую можно применять к двумерной матрицы это взятие следа след матрицы это сумма и и диагональных элементов давайте поместим на диагональную матрицу все элементы массива а которые больше или равны 10 это можно сделать вот таким образом то есть вот такое синтаксис у нас возвращает все элементы которые для которых выполнены условия а больше или равна 10н дальше мы подаем это внутри нам пай

которые для которых выполнены условия а больше или равна 10н дальше мы подаем это внутри нам пай . diag и с помощью функции нам парочка trace мы можем посчитать сумму этих элементов то есть след нашей матрицы он равен 145 а на этом мы заканчиваем с двумерными массивами и теперь поговорим про более общий случай а именно про тендеры или многомерное массива давайте создадим многомерный массив ну и создадим его следующим образом просто возьмем и ренж 64 то есть здесь у нас 64 элемента и запишем их

его следующим образом просто возьмем и ренж 64 то есть здесь у нас 64 элемента и запишем их в такую трехмерную матрицу размером 8 до 24 это можно сделать с помощью методы решит как мы уже обсуждали ранее и посмотрим что же у нас получилось наш трехмерный массив имеет вот такой вид то есть если мы берем по первой оси то есть все что внутри вот этих внешних скобок мы имеем массив из двумерных массивов простив из матриц этих матриц у нас восемь штук поэтому ln равно 8x . шейку выдает в точности то

простив из матриц этих матриц у нас восемь штук поэтому ln равно 8x . шейку выдает в точности то же самое что мы передавали внутри пеший по says это количество элементов она у нас равно 64 и энзим это размерность в массив нас трехмерный так что три важная особенность работы с двумерными из многомерными массивами заключается в том что различные операции то есть подсчет суммы элементов массива по счет среднего медианы и так далее мы можем применять не только ко всему массиву целиком а как разным

среднего медианы и так далее мы можем применять не только ко всему массиву целиком а как разным его осям по отдельности то есть давайте посмотрим вот на такие операции нам пай . сон если мы не указываем никакие дополнительные аргументы то она возвращает просто число и это число равно сумме всех элементов массива но также у на по . сам есть параметр axis этот параметр определяет вдоль какой оси происходит суммирование то есть допустим для примера у нас здесь указано axis равной нулю это знаете

суммирование то есть допустим для примера у нас здесь указано axis равной нулю это знаете что суммирование происходит вдоль 0 в 1 асе и что это значит это значит что вот такие матрица двумерные у нас просто будут поэлементно складываться друг с другом и на выходе мы получим двумерный уже массив у которого размерность будет такая же как у исходного но без 0 сито есть два на четыре в случае с axis равным 1 суммирование у нас будет происходить вдоль 1 оси у нас будут складываться такой массив с

равным 1 суммирование у нас будет происходить вдоль 1 оси у нас будут складываться такой массив с таким массивом этот массив с этим и так далее и размерность уже будет тоже двумерный массив но без 1 асе то есть 8 на 4 а axis равный 2 это по самый последний оси суммирование и это просто суммирование элементов внутри каждого вот такого массива и размерность будет соответственно 8 на 2 то есть без последнего назначения вшей но суммировать также можно по двум осям для этого передается кортеж из 12

назначения вшей но суммировать также можно по двум осям для этого передается кортеж из 12 и в этом случае суммирование происходит следующим образом на вход у нас уже тогда получится одномерный массив в этом одномерном массиве на этом месте будет стоять сумма всех элементов у которых нулевая координата равна и давайте посмотрим на примере то есть здесь у нас суммирование по 0 асе по первой оси по второй оси и суммирование по двум осям сразу то есть если мы здесь посмотрим но но на нулевом месте

второй оси и суммирование по двум осям сразу то есть если мы здесь посмотрим но но на нулевом месте на яндексе для яндекс равного нулю мы получили 28 это сумма всех элементов у которых нулевой индекс равен нулю а теперь давайте перейдем к последней теме нашего сегодняшнего семинара а именно обсудим а какие задачи из линейной алгебре можно решать с помощью библиотеки нам пай давайте создадим такую матрицу матрицу размером 2 на 2 и посчитаем и и определитель определитель считается с помощью такой

матрицу матрицу размером 2 на 2 и посчитаем и и определитель определитель считается с помощью такой команды а нам пай . или наук . дед . . дед и далее в скобках в качестве аргумента указывается матрица вообще все операции которые имеют отношения к линейной алгебре они находятся такие вот такого пакета на п . или наук посчитаем определитель он равен четырем мы это можем проверить для матрицы 2 на 2 нужно просто перемножить вот эти элементы это 6 и минус произведение мт этих элементов это 26

на 2 нужно просто перемножить вот эти элементы это 6 и минус произведение мт этих элементов это 26 минус 2 как раз равно 4 также если матрица у нас обратимо то можно найти ее обратно то есть обратная матрица да по определению это матрица которые при умножении на исходную либо справа либо схема дает единичную матрицу для этого для ее нахождения есть функции info поскольку наша исходная матрица была обратимое и определить линия равен нулю нас почиталось обратно и ну давайте по определению

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

когда матрица у нас необратимо создадим вот такую матрицу здесь мы видим что ее определитель это что-то очень маленькая на самом деле это фактически 0 то есть дважды 36 минус 60 а то что здесь получилось какое-то ненулевое число это как раз таки следствие ошибок округления с которыми мы имеем дело когда работаем с флот с числами с плавающей точкой ну давайте попробуем передать и мы видим что здесь у нас получились какие-то совершенно несуразные значения это как раз таки связано с тем что

здесь у нас получились какие-то совершенно несуразные значения это как раз таки связано с тем что определитель наши матрицы питон посчитал как что-то очень маленькое но ненулевое поэтому здесь у нас получилось значение типа 10-15 10 16 на самом деле обратно и для такой матрицы не существует как мы знаем из линейной алгебре и если бы определитель почитался корректно то если вы определите просто был равен нулю то в этом случае нам поймал . винс он умеет кидать исключения он пишет о том что

был равен нулю то в этом случае нам поймал . винс он умеет кидать исключения он пишет о том что матрица вырожденная что ее обратить нельзя но в данном случае за ошибок округления мы получили что как бы какую-то обратную матрице он посчитал но очевидно посчитал на ты неправильно поэтому здесь очень важный момент что стоит обращать внимание на ошибки связанные с округлением и просто проверять ваш результат на хотя бы какой-то здравый смысл потому то очевидно что такая матрица не является обратных

на хотя бы какой-то здравый смысл потому то очевидно что такая матрица не является обратных матриц c теперь перейдем следующие задачи из линейной алгебры которую можно решить методами из нам пай а именно к решение неоднородных линейных уравнений неоднородными линейными уравнениями называется уравнение такого вида где а это матрица x это столбец с переменных а в это столбец свободных членов и если вы равно нулю то такие системы называются однородными если вы это что-то отличное от нуля то они

вы равно нулю то такие системы называются однородными если вы это что-то отличное от нуля то они называются неоднородными возьмем имеющиеся уже у нас матрицу а добавим вот такой столбец и дальше решение линейных уравнений можно получить с помощью функции нам по или наук saw туда передается сначала матрицы потом столбец свободных членов и в качестве решения мы получили вот такой массив давайте проверим что решение у нас получено правильная а проверку мы осуществим следующим образом давайте

проверим что решение у нас получено правильная а проверку мы осуществим следующим образом давайте попробуем решить наши имеющиеся уравнение аналитическим для этого слева обе части домножим на а в минус первой на обратную к матрицы а умножить на а минус 1 это единичная поэтому слева у нас получится просто x острова у нас получится в множить на а в минус первой то есть аналитическая запись для решения уравнения этого умножить на а в минус первой а а в минус первой мы где-то считали это b поэтому

уравнения этого умножить на а в минус первой а а в минус первой мы где-то считали это b поэтому давайте просто перемножим ну точнее неправильно сказал тут а в минус 1 должны быть новым мужем нажали слева и результат умножения как вы видите у нас такой же как и решение получены мощью финалов . что значит что решили мы правильно следующая задача которую мы поговорим это нахождение собственных векторов матрицы а напомню что собственным вектором матрицы а матрицы должны быть квадратный называется

матрицы а напомню что собственным вектором матрицы а матрицы должны быть квадратный называется такой ненулевой вектор что для него существует число линда такое что а умножить на x равно я вам дам нгс а лямда называется собственным числом или собственным значением а матрицы a и собственные числа и собственные векторы можно посчитать одной функции это нам пэйлин old nick он эта функция выдает первым аргументом собственные числа а вторым аргументом собственные векторы соответствующие этим числам

аргументом собственные числа а вторым аргументом собственные векторы соответствующие этим числам то есть этот вектор соответствует лямда равны единице этот вектор соответствует ли мото равный 4 но также стоит заметить что у исходной матрицы и у транспонированной матрицы собственные значения совпадают давайте это проверим и транспонировать матрицу домбай можно очень просто после названия матрицы пишут просто . и этот цвет транспонирует матус и как мы видим мы получили такие же собственные

пишут просто . и этот цвет транспонирует матус и как мы видим мы получили такие же собственные значения но собственный вектор и у нас получились немного другими потому что по сути он у нас это матрица это это же матрица но транспонированное также собственные значения могут совпадать например у безличной матрица размера 3 на 3 будут три собственные значения и все они равны извиниться давайте посмотрим что выдает нам полина лт-шек в таком случае он действительно дает три единицы и выдает 3

посмотрим что выдает нам полина лт-шек в таком случае он действительно дает три единицы и выдает 3 собственных векторов которые это просто на самом деле строки в единичной матрицы a на этом такое общее рассмотрение задач линейной алгебры у нас подходит концом и давайте вернемся собственно к тому с чего мы начали наш семинар а именно к вопросам производительности теперь мы уже знаем как можно с помощью нам пай решить ту задачу которую мы ставили в начале семинара а именно посчитать сумму всех

помощью нам пай решить ту задачу которую мы ставили в начале семинара а именно посчитать сумму всех чисел от нуля до десяти в 7 не включительно это делается с помощью нам про . сам и посмотрим сколько это займет нас во времени но как мы видим время значительно меньше чем при работе с циклами ну и другая задача которую мы решали это записать в массив числа от 0 до 10 в 7 не включая умноженное на 5 также эта задача решилась гораздо быстрее чем когда мы решали использует цикл на этом наш семинар

5 также эта задача решилась гораздо быстрее чем когда мы решали использует цикл на этом наш семинар подходит концов сегодня мы рассмотрели библиотеку нам пай научились с ее помощью создавать одномерные и двумерные многомерные массивы совершать арифметические операции над ними применять функции к ним поэлементно рассмотрели как можно объединять массиву делить и умножать матрицы а также рассмотрели ряд задач линейной алгебры которые решаются с помощью встроенного в нам по и пакета ли наука здесь

ряд задач линейной алгебры которые решаются с помощью встроенного в нам по и пакета ли наука здесь в конце ноутбука вы можете найти несколько полезных ссылок в частности ссылкам друг мин тация по нам пай ссылка на github в которым вы можете посмотреть как тот или иной метод реализован ну и на этом наш семинар закончен всем спасибо за внимание и пока

всем привет меня зовут артем и магазинов и мы продолжаем рассматривать библиотеки которые применяются в машинного обучения и анализе данных и на сегодняшнем семинаре мы с вами подробнее поговорим о библиотеке pandas эта библиотека очень активно используется в современном data science поскольку она предоставляет очень широкий функционал по работе с данными с помощью pandas данные можно загружать на них можно смотреть их можно различными образами преобразовывать и именно этим мы и займемся на

на них можно смотреть их можно различными образами преобразовывать и именно этим мы и займемся на сегодняшнем семинаре если вы работаете в анаконде где питер ноутбуки the panda скорее всего у вас уже установлен если по какой-то причине он не установлен вы можете установить его раз комментировал одну из этих двух строчек либо петрин стал pandas либо контент стал pandas зависимости от того каким пакетным менеджером вы пользуетесь но поскольку у нас уже все установлено давайте импортируем

каким пакетным менеджером вы пользуетесь но поскольку у нас уже все установлено давайте импортируем библиотеку так же как и для библиотеки нам пай для pandas существует свое стандартное сокращение этот pd этим сокращением пользуются все поэтому я очень рекомендую вам тоже им пользоваться в pandas есть два основных класса которые представляют данные первый это панда серьез и второй этап она даст dataframe давайте сначала подробнее поговорим про 1 series представляет из себя одномерный набор

dataframe давайте сначала подробнее поговорим про 1 series представляет из себя одномерный набор данных то есть можно представить серия с как некоторые столбец из таблицы что она себя представляет у серии съесть индексы и значение которым можно обращаться с помощью этих индексов но также помимо значение series умеет хранить и пропуске pda например если мы хотим создать столбец состоящий из измерений температуры но вдруг в какой-то день и у нас измерение не проводились мы можем записать для

температуры но вдруг в какой-то день и у нас измерение не проводились мы можем записать для этого дня специальное значение которая называется нам это значение есть в библиотеке нам пай она выглядит так нам поличка нам и оно читается как бы пропуском данных то есть она не учитывается при подсчете средних при подсчете суммы и при печати других различных статистик давайте посмотрим на все это на примерах создадим series пусть у нас в течение шести дней измерялось температура но на четвертый день

создадим series пусть у нас в течение шести дней измерялось температура но на четвертый день измерения не проводились мы получили такой одномерный список лист и передаем его на вход конструктора класса серез нас получился такой столбец яндексе по умолчанию это числа начиная с нуля и также вы можете заметить что тип данных у нас float что может показаться немного странным потому что мы передавали целые числа или скорее всего мы ожидали что тип данных будет им на самом деле делать вот как раз

целые числа или скорее всего мы ожидали что тип данных будет им на самом деле делать вот как раз таки именно в пропусках данных дело в том что нам пай . нам имеет тип float a-series также как массивов нам пай умеет работать только с однородными данными с данными одного типа поэтому он привозит все имеющиеся у него данные которые подаются ему на вход к одному типу данном случае приведение происходит именно к типу float потому что целые числа мы умеем приводить флот а наоборот умеем не всегда а

именно к типу float потому что целые числа мы умеем приводить флот а наоборот умеем не всегда а иногда нам бывает не очень удобно что индексы это просто какие-то числа начиная с 0 поскольку по индексам мы обращаемся к данным иногда хочется чтобы они выглядели информативно и этого можно добиться передавая в конструктор класса аргумент яндекс и присваивает в аргументу одномерный массив давайте посмотрим вот у нас получилось наш индекс и поэтому индексу мы можем обращаться к данным то есть

посмотрим вот у нас получилось наш индекс и поэтому индексу мы можем обращаться к данным то есть четвёртый день у нас записано значение нам дан нам и вывел а также помимо индекса мы можем добавить нашему series еще и имя с помощью аргумента name имя отображается внизу теперь давайте поговорим чуть чуть подробнее про индексирования с индексами можно работать также как мы работали с одномерными массивами как сам обычном лист то есть можно обращаться не только по индексу но и по номерам то есть

как сам обычном лист то есть можно обращаться не только по индексу но и по номерам то есть вот здесь у нас индексы это строки дал мы обращаемся с помощью числовой и это вывозят нам первое значение записанная в series также можно пользоваться слайсами еду срезами как нам их удобнее называть они работают точно так же как в случае одномерных массивов то есть левая граница включается права и не включается и так и точно так же как с массивными мы можем перевернуть наши данные вот с помощью такого

и так и точно так же как с массивными мы можем перевернуть наши данные вот с помощью такого синтаксиса однако индексироваться важно не только по числам а также и по условиям в этом интерес похож на на паре условия задается так же как в нам порей давайте немного подробнее поговорим об этом например создадим такой объект что мы здесь сделали мы с помощью метода и тренишь создали диапазон дат и далее этот диапазон мы сделали индексом нашего объекта series то есть если мы придаем порадует аргумент

этот диапазон мы сделали индексом нашего объекта series то есть если мы придаем порадует аргумент на самом деле тут имеется ли там kinder равна i do it rains а в качестве данных мы использовали какие-то случайные числа от нуля до единицы то есть можно сказать что у нас записано для каждого дня вероятность наступления какого-то события и давайте посмотрим а в какие дни вероятность наступления этого события была больше чем на 5 для этого достаточно написать просто такое выражение она возвращает

события была больше чем на 5 для этого достаточно написать просто такое выражение она возвращает нам новый сервис в котором найти уже будет bull аналогично того как мы делали в случае нам по игре это выражение можно передавать в квадратных скобках и тогда вы ведутся только те элементы для которых выражение верно то есть которых вы изнутри как мы видим все вероятности здесь больше чем 25 можно создавать более сложное выражение например если мы хотим посмотреть на события вероятность которых

создавать более сложное выражение например если мы хотим посмотреть на события вероятность которых больше чем ноль шесть или меньше чем 02 мы используем такое выражение вот этот знак эта палочка это логическое или а получили такой результат помимо логического или можно использовать также и логической и она обозначается амперсанд м посмотрим ну и мы получили пустое series потому что эти условия не пересекаются ность какое число не может быть и больше чем ноль шесть и меньше чем на 2 одновременно

пересекаются ность какое число не может быть и больше чем ноль шесть и меньше чем на 2 одновременно так же как и массива series можно сортировать причем сортировать можно двумя способами первый эта сортировка по индекса она выполняется с помощью метода 40 яндекс как мы видим все индексы все даты выведены у нас в хронологическом порядке так также можно сортировать и по значениям с помощью метода сорта и без здесь все наши значения от сортировались а индексы в свою очередь перемешались стоит

сорта и без здесь все наши значения от сортировались а индексы в свою очередь перемешались стоит заметить что не сорт яндекс не сорт в лес не изменяет объект через то есть они создают новый если мы сейчас выберем r4 мы видим что он не изменился несмотря на то что мы вызывали сорта элис то есть если вы хотите именно заменить ваш объект на новый стоит использовать вот такой синтаксис присвоить значение и тогда серьезно меняется давайте поговорим подробнее про операции которые можно выполнять

значение и тогда серьезно меняется давайте поговорим подробнее про операции которые можно выполнять series тут на самом деле все очень похоже на на морские массива то есть мы можем h series прибавлять скаляр но из числа это просто поэлементно и прибавление этого числа также можно использовать все функции из нампо и которые you фанк то есть синус и косинус экспонент алгоритм и они все будут также применяться по элементных значениям записанным в сервис теперь давайте поговорим о сложении и других

по элементных значениям записанным в сервис теперь давайте поговорим о сложении и других арифметических операциях они также выполняются поэлементно но в отличие от нам пай здесь операнды могут быть разного размера то есть что мы здесь сделаем мы создадим 1-series размер опять заполненного случайными числами от на вместе и 2 серия с размера 6 также заполнено случаев случайными числами 0 10 и сложим их как мы видим первые 5 значений у нас это просто сумма а последняя это нам что произошло в

сложим их как мы видим первые 5 значений у нас это просто сумма а последняя это нам что произошло в тормозил у нас автоматически до заполнился на нами door размеры to run 2 и дальше сложение происходят по обычным правилам а как известно нам плюс любое число это нам поэтому результат получился именно таким ну и также можно заметить что поскольку у нас есть нами тип данных у нас сменился int на флот так же как и в случае с лампой у нас есть атрибут шеи он выдает а число строк в нашем series

флот так же как и в случае с лампой у нас есть атрибут шеи он выдает а число строк в нашем series теперь давайте поговорим про другой класс представляющий данные это dataframe если сириус необходим для работы с одномерными данный вид у dataframe это уже работа с двумерными данными то есть с таблицами также как и серия с dataframe имеет яндексе и поэтому индексу вместо чисел или будут лежать целые строки и столбцы в dataframe могут быть разных типов то есть это могут быть как строки так и числа

строки и столбцы в dataframe могут быть разных типов то есть это могут быть как строки так и числа так и какие-то булевских true false давайте посмотрим как можно создавать dataframe его можно создавать несколькими способами 1 это из словаря так что мы делаем у нас есть словарь в котором ключ будет соответствовать названию столбца а значение лежащему лежащие по этому ключу это собственно сам столбец то есть one это у нас такой столбец ту игры и соответственно те столбцы которые мы передавали

то есть one это у нас такой столбец ту игры и соответственно те столбцы которые мы передавали далее здесь так же как и в случае сложения если столбец размера меньше чем максимальный то он до максимального до заполняется на нами но это не единственный способ создания также можно создавать из списка списков то есть если у нас есть такая матрица такая таблица который у нас хранятся строки нашего будущего dataframe а мы можем передавать ее первым аргументом в конструктор dataframe и дальше нам

будущего dataframe а мы можем передавать ее первым аргументом в конструктор dataframe и дальше нам нужно использовать аргумент calans для того чтобы назвать наши столбцы ну и можно использовать аргументы индекс если мы хотим чтобы у нас был какой-то свой индекс отличный просто он чисел от нуля мы получили абсолютно такой же dataframe то есть можно видеть что списке которые лежали внутри нашего самарий это по сути стройке нашего будущего dataframe а не иногда бывает необходимость извлечь данные

это по сути стройке нашего будущего dataframe а не иногда бывает необходимость извлечь данные из dataframe а то есть просто представить их снова в виде списка списка в виде матрицы a для этого существует а тут вылез он возвращает нам папский массив и также иногда бывает необходимо посмотреть какие вообще есть танцы время для этого существует каунас он возвращает просто список наших столбцов как правило если мы имеем дело со строками to attack данных в pandashop она также как и яндекс холмс это

если мы имеем дело со строками to attack данных в pandashop она также как и яндекс холмс это изменяемое поле то есть мы можем передавать новое название для наших столбцов давайте посмотрим как мы видим и индексы и а столбцы у нас изменили свое название теперь давайте поговорим про индексирование dataframe и тут все на самом деле довольно интересна потому что существует несколько способов и эти способы не все одинаково удобные не все одинаковые работают скажем так ну давайте посмотрим что иные

не все одинаково удобные не все одинаковые работают скажем так ну давайте посмотрим что иные имеется ввиду а первое что мы можем сделать мы можем обращаться к столбцам колонкам по их названию то есть если мы в квадратных скобках просто передаем строку то pandas воспринимает это как название столбца и столбцы имеет тип syrris далее иногда если название вашего столбца позволяет так сделать то есть если это одно слово без пробелов без каких-либо специальных символов можно обращаться не через

есть если это одно слово без пробелов без каких-либо специальных символов можно обращаться не через квадратные скобки а через точку то есть df . колонн учили то же самое помимо просто строке можно передавать также и список в этом случае вместо сервис будет возвращаться уже dataframe и список можно передавать ними из одного столбца а допустим из двух или более и тогда у нас вернется dataframe состоящий из указанных нами столбцов а если же мы хотим создать dataframe из этого столбца мы просто

из указанных нами столбцов а если же мы хотим создать dataframe из этого столбца мы просто делаем то же самое что мы делали в первом случае когда возвращались сирия столько дополнительно оборачиваемся в дни квадратные скобки то есть мы передаем уже не строку а список поэтому возвращаемый тип будет dataframe но не всегда нам нужно обращаться к столам сам иногда нужно обращаться именно к строкам и тут следующий момент по номеру к строкам как мы делали в серия суда the fray не обращаться нельзя то

следующий момент по номеру к строкам как мы делали в серия суда the fray не обращаться нельзя то есть если вы попробуйте такой под вам выдает ошибку кира что происходит на самом деле pandas пытается найти в нашем дату фрейме столбец с номером с названием 1 и поскольку такого столбца у нас нет он возвращает ошибку то есть если мы передаем какое-то число он будет все равно воспринимать его как название столбца чтобы преодолеть эту проблему 10 несколько способов на которых мы поговорим далее ну а

столбца чтобы преодолеть эту проблему 10 несколько способов на которых мы поговорим далее ну а потом можно заметить что всем слайсы работают и здесь но что можно на месте на самом деле в pandas можно обращаться к строкам двумя разными способами первый это по ее номеру и 2 этапа ведет индексу а здесь мы выполнили обращение именно по номеру и это обращение работает точно также как работает индексация в series и индексация в одномерных массивов то есть здесь у нас включается левая граница но не

в series и индексация в одномерных массивов то есть здесь у нас включается левая граница но не включается право потому что элементу с номером один у нас соответствует индекс 2 но также можно обращаться к dataframe и по yandex и в этом случае все будет немного интереснее и об этом мы поговорим далее теперь давайте поговорим про универсальное индексирование она выполняется с помощью двух методов с ней 2 атрибутов этот блок и айла если атрибуты взаимозаменяемый то есть по сути они делают примерно

ней 2 атрибутов этот блок и айла если атрибуты взаимозаменяемый то есть по сути они делают примерно то же самое но разными способами давайте запустим такой код и что у нас произошло а ae lock это как раз таки возвращаясь нашей предыдущей теме обращения к dataframe по индексам то есть здесь происходит следующее первый наш аргумент это стройке который мы выбираем второй аргумент это столбцы если мы пользуемся unlock мы должны передавать номера и того и другого то есть здесь мы передаем индекс с

пользуемся unlock мы должны передавать номера и того и другого то есть здесь мы передаем индекс с номерами 1 и 2 и строки с номерами 01 а соответственно именно это мы и вывозим то есть индексом с номерами 1 и 2 соответствует у нас 2 и 3 а стройке 01 этот фарс calan sr контент а теперь давайте поговорим про второй способ индексирование dataframe of а именно не по номеру индекса а непосредственно по его название для этого и используется как раз таки атрибут лоб и как мы сейчас увидим результат

по его название для этого и используется как раз таки атрибут лоб и как мы сейчас увидим результат будет немного другим казалось бы мы использовали одинаковый слайс но вместо двух элементов мы получили три почему так происходит на самом деле в pandas если мы обращаемся к когда-то фрейма по названию индекса они по его номеру то правая граница начинает включаться то есть здесь у нас все индексы из диапазона 133 включая то есть 1 2 и 3 ну и то же самое со столбцами тут вместо номеров вы уже должны

133 включая то есть 1 2 и 3 ну и то же самое со столбцами тут вместо номеров вы уже должны передавать название то есть first колонку закат калом поскольку эти методы делают примерно одно и то же но очень легко запутаться из-за того что в одном случае правая граница включается во втором нет я рекомендую вам выбрать какой-то один из них и пользоваться им всегда когда есть такая возможность вообще как правило а и лог более универсальна чем но поэтому лучше использовать его теперь давайте поговорим

правило а и лог более универсальна чем но поэтому лучше использовать его теперь давайте поговорим про то как можно модифицировать наш data set потому что нам не достаточно просто посмотреть на данные мы хотим каким-то образом с ними работать начнем с того как можно в dataframe добавлять новые колонки здесь на самом деле все достаточно просто мы просто обращаемся к колонке с новым названием также как мы обращались к уже существующим и присваиваем ей те значения которые она будет принимать и как

как мы обращались к уже существующим и присваиваем ей те значения которые она будет принимать и как мы видим нас добавилась еще одна колонка также поскольку колонке у нас имеют тип syrris к ним можно применять все эти арифметические операции о которых мы говорили ранее то есть их можно складывать их можно умножать число к ним можно применять различные функции и результат можно записывать как уже существующие так и много команд а теперь давайте поговорим про то какие манипуляции можно

как уже существующие так и много команд а теперь давайте поговорим про то какие манипуляции можно производить данными помимо этих но будем разбирать уже на примере реально вот эта сета dts называется титаник но он содержит информацию о том выжал или нет пассажир который отправлялся на титанике это дата сайт состоит из двух файлов станек дата который содержит информацию о пассажирах и титаник сэр в которой и содержит непосредственно метку выжил человек или нет сейчас мы рассмотрим как можно

сэр в которой и содержит непосредственно метку выжил человек или нет сейчас мы рассмотрим как можно вообще с помощью pandas очень быстро и удобно прочитать эти данные из наших файлов как правило данные имеют один из типов это либо формат . все из версий света к массе пролиты пэйлин данные разделенные запятыми либо это экселевский файл xls как правило дата sanity часто используется именно съесть и потому что он более компактный более удобный поле легко читаем а для того чтобы загружать данные из

потому что он более компактный более удобный поле легко читаем а для того чтобы загружать данные из если существует метод эрин сисви ему на вход нужно передавать путь до файла который вы хотите прочитать но если у вас скачены это локально то вы можете просто раскомментировать строчку не прочитать его я воспользуюсь таким методом что у нас он есть загруженной в боксе и именно ссылку на дробь dogs можно придавать качестве первого аргумента давайте загрузим после того как мы загрузили нам бы

dogs можно придавать качестве первого аргумента давайте загрузим после того как мы загрузили нам бы хотелось как-то посмотреть на то что вообще у нас загрузилась но часто случается так что dtc то имеют огромный размер и поэтому целиком их выводить с не очень удобно тут нам на помощь приходит не от head которыми бы возит первые строки из data set если мы не указываем никакие аргументы то по умолчанию выводится первые пять если я например укажите 10 то выведется первые десять строк также понимает

выводится первые пять если я например укажите 10 то выведется первые десять строк также понимает отдыхает существуют еще и метод tail который выводит последние несколько строк из dataframe а теперь давайте поговорим про то какие у нас вообще есть колонке у нас есть passenger айди это наш у у них это уникальный номер айдишник который присвоить каждому пассажиру а дальше у нас есть 2 класс это класс которым путешествовал по сожрет 1 2 или 3 плюс 1 это самый дорогой третий самый дешевый имя пол

которым путешествовал по сожрет 1 2 или 3 плюс 1 это самый дорогой третий самый дешевый имя пол возраст сибас п это количество братьев или сестёр или супругов путешествующих вместе с пассажиром apart это количество родителей или детей путешествующих вместе с пассажиром но на самом деле мы с этими на колонку на работе с не будем это так просто интересный факт номер билета него стоимость номер каюты и порт далее может возникнуть вопрос а как работать с индексами когда мы загружаем их из файлов

и порт далее может возникнуть вопрос а как работать с индексами когда мы загружаем их из файлов если не придавать никакие аргументы то по умолчанию у нас создается отдельная колонка давайте вам покажу как это выглядит у нас просто заводится еще одна колонка которая отвечает за яндекса но как мы видим у нас есть passenger айди который уникален для каждого пассажира и нам бы хотелось использовать качестве индекса именно его чтобы дублировать для этого существует аргумент индекс стол и в качестве

индекса именно его чтобы дублировать для этого существует аргумент индекс стол и в качестве этого аргумента мы передаем название столбца который мы хотим использовать в качестве индекса ну так и сделаем и теперь passenger одел нас является индексом нашего dataframe pandas позволяет также очень быстро узнавать какую-то общую информацию о наших даты с нашим дуб с этим во первых его размер 3 бывший поскольку у нас по сути это двумерная матрица шейп у нас состоит из двух чисел первое число это

поскольку у нас по сути это двумерная матрица шейп у нас состоит из двух чисел первое число это количество строк и 791 строка то есть нас есть данные о восьмистах 91 пассажире и второй аргумент это число столбцов нас 10 столбцов данных а также если аргумент info метод здесь мы можем узнать название столбцов сколько в каждом из них не знал то есть в нашем случае не нам элементов и какому типу относятся данные то есть как мы видим здесь у нас тип либо int64 в случае класса то есть 1 2 3 либо флот

данные то есть как мы видим здесь у нас тип либо int64 в случае класса то есть 1 2 3 либо флот либо объект объект как правило это строки то есть имя названием номер билета и так далее также достаточно полезным является метод диск райт метод descried применяется только тем столбцам которые имеют численные типы то есть или вот тебе bull что он делает он вывозит какие-то собирательные статистики о каждому из столбцов то есть мы можем посмотреть сколько свой элементов можем посмотреть на средние на

из столбцов то есть мы можем посмотреть сколько свой элементов можем посмотреть на средние на стандартное отклонение какое минимальное и максимальное значение есть в каждом столбце и также на квантили где 10 процентных counsel at indiana то есть мы можем сказать что 50 процентов пассажиров были младше 28 лет или что 75 процентов пассажиров были младше тридцати восьми лет и также можно сказать что самому старшему из пассажиров которых у нас есть данные было 80 а самому младшему даже не было года

самому старшему из пассажиров которых у нас есть данные было 80 а самому младшему даже не было года но и давайте попробуем с имеющимися у нас данными что-то сделать что-то по ним посчитать посмотреть и первое задание будет таким посмотреть на распределение мужчин и женщин и нато сайте посмотреть сколько пассажиров ехала в каждом классе и посмотреть на средний минимальный и максимальный после каждого пассажира не каждого а всех пассажир давайте начнем с последнего это сделать проще всего как мы

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

уже в методе скраб только вывели их отдельно далее следующий вопрос это распределение мужчин и женщин и даты сайтов тут нам на помощь приходит очень важный и очень полезный метод который есть в pandas это метод в аккаунт применим его к столбцу отвечающим за пол что он делает он считает сколько раз встречаются каждый из значений который может принимать данный столбец то есть мы видим что у нас был 577 мужчины есть на 14 женщин чтобы ответить на вопрос сколько пассажиров ехала в каждом классе

был 577 мужчины есть на 14 женщин чтобы ответить на вопрос сколько пассажиров ехала в каждом классе сделаем точно то же самое применим не тот были аккаунт к столбцу отвечающим за класс и тут мы видим сколько пассажиров опалов третьим в первом и во втором классе следующее задание на сгруппируем наши записи по классу пассажиров и в каждой группе посчитаем средний возраст здесь дана подсказка что нужно использовать но такой метод не тот пантов это фрейм грубой ну и сейчас давайте подробнее

что нужно использовать но такой метод не тот пантов это фрейм грубой ну и сейчас давайте подробнее поговорим о том что вообще делает этот месту для чего нужен мы хотим посчитать какую-то величину нашем случае средняя отдельно для каждого класса пассажирам то есть что мы хотим сделать мы хотим сгруппировать все имеющиеся у нас возраста по классам и для каждого из них отдельно посчитать возраст именно для этого и нужен метод грубой нему на вход мы передаем те столбцы по которым мы группируем их

для этого и нужен метод грубой нему на вход мы передаем те столбцы по которым мы группируем их может быть больше одного в нашем случае это только в класс и давайте посмотрим что у нас выдаст этот метод он выдает какой-то непонятный объект с которым пока не очень понятно что можно делать а на самом деле дело с ним можно много а именно можно применять к нему различные агрегируются и так называемые функции то есть средний минимум максимум подсчет элементов сумма элементов и на выходе мы будем

функции то есть средний минимум максимум подсчет элементов сумма элементов и на выходе мы будем получать dataframe то есть если мы применим к нему также как мы применяли к столбцам админ мы получим среднее всех числовых признаков сгруппированных по классу пассажиров и поскольку нас интересует именно возраст мы можем дополнительно указать и и в этом случае у нас вернется series с письменного столбцам котором указанную возрастом теперь давайте поговорим про слияния таблиц на самом деле в pandas

котором указанную возрастом теперь давайте поговорим про слияния таблиц на самом деле в pandas из таблицы можно сливать несколькими способами сегодня мы будем говорить про о слиянии по индексу она выполняется с помощью метода пан из join и она делает следующее а нам сопоставляет индексы 1 таблица индекса второй таблице и там где есть совпадение она просто до заполняет одну таблицу элементами из другой столбцами как вы помните у нас было 2 ноты сеты и мы еще никак не использовали информацию от

другой столбцами как вы помните у нас было 2 ноты сеты и мы еще никак не использовали информацию от он выжил человек или нет и давайте добавим эту информацию в нашу онищенко советует сначала загрузим если у вас файл скачан локально бумажки повредить его с помощью закомментировали строки я верну через два box давайте посмотрим как выглядит вот у нас есть один столбец и он принимает значения 0 или 1 выжил человек или нет теперь мы хотим слить два наших data set up a колонки индекса и тут стоит

1 выжил человек или нет теперь мы хотим слить два наших data set up a колонки индекса и тут стоит заметить следующее что индекс то мы вообще-то меняли то есть мы в нашем станет passengers в качестве индекса взяли песен драйден и песню среди у нас принимать значения от единицы а яндекс который сгенерировался для 2 таблицы нас принимает значения от нуля и для того чтобы наши таблицы слились корректно нам необходимо поменять индексы и dr2 для этого мы просто присвоим полю индекс значение от

нам необходимо поменять индексы и dr2 для этого мы просто присвоим полю индекс значение от единицы доллар 891 получается потому что правда не включается таким образом мы перешли к тому же формату которую у нас используется для первой таблице но давайте немножечко усложним задачу чтобы показать что все работает корректно и не только в случае когда все индексы у нас строго отсортированы давайте перемешаем на ждут sr это можно сделать с помощью метода сэмпл вообще метод сэмпл он возвращает под

перемешаем на ждут sr это можно сделать с помощью метода сэмпл вообще метод сэмпл он возвращает под выборку из исходные нашей выборке то есть можно вернуть какую-то часть dtc но если указать аргумент фраг равный единице то он вернет весь dataset целиком однако он вернет в перемешанном состоянии дать и посмотрим что у нас получилось вот как вы видите наши индексы расположен в произвольном порядке но тем не менее с помощью джайна мы можем корректно их слить метод джейн он возвращает новую таблицу

тем не менее с помощью джайна мы можем корректно их слить метод джейн он возвращает новую таблицу поэтому тут нужно использовать присвоения и выполнять следующим образом мы берем первую таблицу вызываем отнимет у джейн и передаем внутренние вторую добился а из посмотрим а у нас как вы видите добавился еще один столбец и он заполнился теми значениями у которых индекс 2d f2 совпадал с песни jedi теперь давайте посмотрим на зависимости того выжил человек или нет от различных факторов в частности

давайте посмотрим на зависимости того выжил человек или нет от различных факторов в частности пола и вот возраста но для начала посчитаем сколько всего вообще выживших пассажиров у нас есть дата сети это можно сделать несколькими способами первый способ это использовать тот самый наш важные и полезные метод в аккаунт он просто сочетает у нас количество ноликов и количество единичек в таблице столбце срывает ну и можно видеть что нас 342 человека выжили но так же можно воспользоваться другим

срывает ну и можно видеть что нас 342 человека выжили но так же можно воспользоваться другим методом этот метод заключается в том что а выжившие у нас обозначены единицы а не выживший нулем то если того чтобы получить количество выживших нам достаточно просто просуммировать все значения которые есть в столбце сувальд то есть если мы здесь напишем . сам нас вывести точечно даже самое значения а именно на этом основан метод того как мы подсчитаем количество выживших пассажиров по каждому из полов

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

и сам мира для того чтобы получить общее число выживших для каждого полу вот у нас получился такой столбец мы видим что женщины нас выжила больше чем мужчин ну и теперь давайте построим матрицу корреляции то есть мы видим что кажется какая-то зависимость есть от пола но ладно давайте посмотрим насколько эта зависимость вообще велика матрица корреляции в панда строить очень просто для этого есть метод . кор но для этого предварительно нам нужно поработать немножечко с данными дело в том что

метод . кор но для этого предварительно нам нужно поработать немножечко с данными дело в том что метод core он применим только к численным столбцам а столбец пола у нас содержит строки поэтому давайте его немножечко преобразуем а преобразуем его следующим образом а заменим все mail нам ли of email на единицу это можно сделать очень просто следующим образом но сначала давайте создадим отдельный dataframe из тех столбцов которые мы хотим и сравнивать по корреляция и заменим столбец следующим

dataframe из тех столбцов которые мы хотим и сравнивать по корреляция и заменим столбец следующим образом возьмём вот такое выражение как мы уже видели в примере с через это выражение возвращает объект через состоящий из ball of true или false но а дальше обул приводится к численным типом канту по следующему правилу true это один полз эту ночь поэтому мы можем просто привести наш столбец к типу int и получить численный столбец вместо стал посмотрим простой выглядеть теперь ну вот видите что у

int и получить численный столбец вместо стал посмотрим простой выглядеть теперь ну вот видите что у нас изменилась бисмиллах mail на мизинец соответственно ну теперь у нас все готово к тому чтобы просто почитать корреляцией вызываем метод корт ну и что мы можем заметить корреляция пола и факта того выжил человек или нет равна 054 достаточно большая и корреляция положительная то есть если мы вспомним что за 0 мы обозначили мужчина за день женщин на первом столбце и за норму обозначены не

вспомним что за 0 мы обозначили мужчина за день женщин на первом столбце и за норму обозначены не выживших и за единицу обозначили выживших во втором столбце получается что с учетом того что корреляция положительно это согласуется с нашим с нашим не наблюдениями о том что в целом женщин выжила больше чем мужчин из представленных нашем доме сети а что касается корреляции с возрастом мы видим что она довольно небольшая всего лишь 009 но она отрицательная то есть значит что люди с меньшим

что она довольно небольшая всего лишь 009 но она отрицательная то есть значит что люди с меньшим возрастом выживали чаще более молодым солирую выживали немножечко чаще а но иногда такие матрицы перель акции могут быть очень большими и визуально сравнивать большое количество чисел не всегда удобно поэтому в качестве бонуса давайте посмотрим на то как можно красиво визуализировать тут нам на помощь приходит такая библиотека книг seabourn вообще эту библиотеку предоставляет большой инструментарий

приходит такая библиотека книг seabourn вообще эту библиотеку предоставляет большой инструментарий именно для визуализации данных для того чтобы как-то красиво отобразить их на различных графиков для нее также есть стандартное сокращение тсн с у библиотеки seabourn есть такой метод как hitman что он делает он принимает на вход какую-то табличку и дальше в зависимости от того какое число написано он будет раскрашивать ячейки этой таблицы в разные цвета тут мы передаем дальше аргумент а над равно

будет раскрашивать ячейки этой таблицы в разные цвета тут мы передаем дальше аргумент а над равно true чтобы у нас отображались наши числа симов это цветовая схема которую мы используем и в именно в макс это пределы в которых могут меняться наше значение то есть мы знаем что корреляция меняется от -1 до 1 значит пределы будут именно такими мы давайте посмотрим ну кажется что визуально это более наглядно то есть мы сразу видим что здесь у нас такой серо голубой что означает небольшую

это более наглядно то есть мы сразу видим что здесь у нас такой серо голубой что означает небольшую отрицательную корреляцию а здесь такое оранжевое что означает достаточно большую положительную корреляцию ну и если мы имеем дело с очень большими зато фреймами в которых столбцов может быть там несколько десятков такой метод будет конечно более наглядным чем просто вывод текста и визуальное выискивание глазами какие числа там большие какие мелочи ну и на этом наш семинар подходит концом давайте

глазами какие числа там большие какие мелочи ну и на этом наш семинар подходит концом давайте подведем итог того что мы рассмотрели сегодня мы поработали с библиотекой пандус научились создавать объекты series и dataframe научились преобразовывать их сливать различные нато фреймы друг с другом загружать их из файлов csv но и также посмотрели на топ как можно визуализировать полученные результаты но и на этом наш семинар подходит концу спасибо всем за внимание и пока

всем привет меня зовут аркадий не это первое видео de couleur низкую из серии по производные и градиент на оптимизации ссылки на остальные видео вы можете найти в описании в этом видео мы с вами поговорим о том что такое производная какой у нее смысл ее формальное определение поговорим по функции производной функции одной переменной и производной функции нескольких переменных для начала мы с вами будем рассматривать производные функции одной переменной после будем обобщать это понятие для

вами будем рассматривать производные функции одной переменной после будем обобщать это понятие для функций многих переменных давайте начнем для начала рассмотрим какую-то случайную функцию а именно f от x равно x 4 плюс 5x кубе минус 10 x и будем рассматривать ее на некотором отрезке от минус 5 до 2 давайте изобразим ее график на экране с помощью python и выделим некоторые точки которые мы будем называть локальными минимум и локальными максимумами в общем случае локальный минимум и локальный

называть локальными минимум и локальными максимумами в общем случае локальный минимум и локальный максимум называется xtr точками экстремума не вдаваясь подробно и определением сейчас мы будем считать что . является . локального минимума если для некоторых книг и окрестности вокруг неё то есть для некоторых множество точек небольшого вокруг неё все значения функции больше либо равны чем значение функции в этой точке аналогично определяется точкой локального максимума только естественно для

функции в этой точке аналогично определяется точкой локального максимума только естественно для меньше главное значение функции что же у нас есть три точки экстремума в этом случае это две точки локального минимума и 1 . локального максимума но мы видим что важных местах функций у нас скорость изменения функции она разная понятно что скорость изменения функции tagged на текущий момент это не очень формально понятие и наша задача сейчас вести некоторое формальное определение того как измеряет

формально понятие и наша задача сейчас вести некоторое формальное определение того как измеряет скорость роста функции для различных опять же функций и понимаете как и ну насколько быстро она убивает или вы заставит на каком-то интервале или в какой-то точке что ж давайте для этого рассмотрим следующую ситуацию рассмотрим точки первую точку икс один и игрек один которая находится в минус 550 это самая левая . на нашем графике и рассмотрим точку x2 y2 которая находится по галина там -08

550 это самая левая . на нашем графике и рассмотрим точку x2 y2 которая находится по галина там -08 соответственно это вот здесь и -5 от каждой из них мы сделаем одинаковый шаг дельта x его мы назовем приращение аргумента и попадем на какие-то другие точки на нашем графике то есть мы рассмотрим точку который x больше чем из наших точках и x1 игрока 1 x 2 и y2 на вот дельта x отлично при этом мы поймем что значение функции которые у нас стало вы после отката на шаг вправо она также изменилась и

что значение функции которые у нас стало вы после отката на шаг вправо она также изменилась и давайте мы так же обозначим это изменение этой функции то есть приращение функции при приращение аргумента x как дельта y 1 i дельты и как два отличным что с вами можем видеть из нашего рисунка мы можем видеть что во-первых дельты и 2 значительно меньше чем дали 3 дек 1 а во вторых что можно поскольку dtx то есть шаг приращения аргументы у нас был одинаковый то мы можем некоторым образом сохранить

dtx то есть шаг приращения аргументы у нас был одинаковый то мы можем некоторым образом сохранить отношения приращение функции превращений аргумент то есть в каком-то смысле касс вот это прервет эти это отношение она и будет измерением скорости убывания функции на этих отрезках на отрезках от нашей точки x 12 x 1 плюс дельта x и от точки x 2 до x2 плюс дельта x действительно наши отношения дельта y 1 деленное на дельта x показывает на сколько в среднем изменяется значение функции при изменении

y 1 деленное на дельта x показывает на сколько в среднем изменяется значение функции при изменении значения аргумента на единичку понятное дело что чем больше отношения приращения аргумент обращения функции прошу прощения к приращению аргумента по модулю тем выше скорость убывания или возрастание функции убывания или возрастания зависит собственно от знака этого превращения отлично заметим что такое определение она на самом деле хоть и интуитивно понятны но в нем есть один большой изъян а

такое определение она на самом деле хоть и интуитивно понятны но в нем есть один большой изъян а именно он заключается в выборе нашего приращение аргумента из дельта x проблема в том что какой бы мы не нарисовали график можно подобрать выходим не выбрали шаг можно выбрать такой график чтобы мы перешагнули через точку смены монотонности то есть таким образом мы можем для любого дельта x нарисовать такой график которой будто то брать какую-то функцию у которого точка минимума например будет

такой график которой будто то брать какую-то функцию у которого точка минимума например будет находиться внутри отрезка нашего сдвига то есть расстояние будет больше чем дельта x что же значит нам нужно каким-то образом отказаться от фиксирования это превращения по аргументу нужно иначе мы просто перескочим через этого . локального минимума и уже не поймем что функция была в той же точке либо убывала либо возрастала ну и конечно не стоит забывать что даже если так даже если мы не будем говорить

либо возрастала ну и конечно не стоит забывать что даже если так даже если мы не будем говорить о ситуации когда мы перескочили через точку локального минимума или максимума то на одном и том же отрезке от x 2 x плюс дельта x у нас по-прежнему может быть ситуация что функция убывает или вы заставить с разной скоростью и выбрать фиксированный дельта x мы эту ситуацию пропустим это можно наблюдать например на функции на графике функции из 4 кто сейчас есть на экране как вы видите сначала она

например на функции на графике функции из 4 кто сейчас есть на экране как вы видите сначала она растет медленнее а потом начинают расти все быстрее и есть мы рассмотрим с вами отрезок от 1 до 15 то например рассматривать скорость изменения функции выбрав дали ты из равны единичке это будет не совсем корректно из какой бы точки вы не начали это делать что же делать собственно здесь нам пригодится понятие предела функции и вместо того чтобы брать по это фиксированное приращение аргумента дельта x

предела функции и вместо того чтобы брать по это фиксированное приращение аргумента дельта x мы с вами возьмем нефтей стога положительная дельта x то есть наше приращении и скажут что это стремящейся к нулю величина мы можем построить состоятельность чисел начиная с дельты из больше brown & lil предел которая будет 0 можно так а можно просто сказать что дельта x этапа стоящая к нулю лично ну и при этом слова положительно и например если взять изначальные дельта x равна единичке то можно

ну и при этом слова положительно и например если взять изначальные дельта x равна единичке то можно построить пассивность чисел 1 делить на н то есть это 1 1 2 1 3 и так далее которая понятное дело всегда строго больше 0 и стремится к соскам что ж давайте его формально с помощью этого определим производна рассмотрим некоторую функцию f не эту точку для некоторой точке этой функции то есть x x этот x нанограмм играх . x y и рассмотрим некоторые превращение x плюс дельта x и соответствующие

x этот x нанограмм играх . x y и рассмотрим некоторые превращение x плюс дельта x и соответствующие приращение функции игры + del teide то есть это f от x плюс дельта x постепенно будем уменьшать наше приращении dtx то есть устранит устремлять их подставляем вместо dtx например члены заданные выше потребности получим подпоследовательность у приращение функции то есть 9 дек 1 2 3 и так далее давайте посмотрим как они выглядят то есть это f от x плюс 1 минус f от x f от x + 1 2 минус f от x и так

посмотрим как они выглядят то есть это f от x плюс 1 минус f от x f от x + 1 2 минус f от x и так далее в таком случае когда мы запишем то самое отношение которое мы до этого использовали чтобы оценить скорость изменения функции то есть дельта y 1 дайте игры делить на дельта x то мы можем увидеть заметить следующее дельта y 1 делить на дельта x 1 это будет в точности то что мы видим на экране то есть поскольку дельта x 1 равно единичке и так далее они будут естественно изменяться уменьшая

то есть поскольку дельта x 1 равно единичке и так далее они будут естественно изменяться уменьшая дельта x мы будем все меньше отходить по аргументу от точки x y то есть отношение дельты игр дельта x будет все точнее отражать характер поведения нашей функции f вблизи точки x y и поскольку именно мы выставляем превращение к нулю то в пределе мы получим ровно ту характеристику скорость изменения функций которые нам нужно иными словами производная вашим то есть есть скорость изменение функции

функций которые нам нужно иными словами производная вашим то есть есть скорость изменение функции нашей точки определяется как предел при дэльта икс стремящуюся к нулю величины f от x плюс дельта x минус f от x делить на дельта x ну и я напоминаю что мы говорили что дельта x мы брали больше нуля поэтому никаких проблем с делениями на знаменатель у нас не возникнет конечно нужно понимать что этот предел не всегда существуют в случае когда существует функция будет называться дифференцируемой в

предел не всегда существуют в случае когда существует функция будет называться дифференцируемой в точке x y и производной в этой точке будет разделяться по этой формуле естественно когда взводный когда предела не существует мы говорим что и производные тоже не существуют и функция не дифференцируема дифференцируема в каждой точке на всей числовой прямой то мы будем называть его дифференцируемой всюду или просто дифференцирования итак давайте подытожим производная функции в точке это предел при

или просто дифференцирования итак давайте подытожим производная функции в точке это предел при приращение аргумента стремящейся к нулю разницы фбр один приращение функции делить на приращение аргумента также это называют производной функции fpx мы с вами поняли что производная функции показывает характер изменения функции в точке а именно во первых модуль значения производных говорит о скорости убывания или возрастания функции а именно от скорости изменения функции знак производной показывает

убывания или возрастания функции а именно от скорости изменения функции знак производной показывает характер изменения функции в точке то есть если производная больше нуля то функция возрастает если производная меньше нуля тона а бывают а если производная равна нулю то в этой точке потенциально может находиться локальный минимум или максимум а можете находиться но это говорит о том что функция не изменяется об этом бы чуть подробнее поговорим в одном из следующих видео что же давайте перейдем к

изменяется об этом бы чуть подробнее поговорим в одном из следующих видео что же давайте перейдем к примерам на доске давайте вычислим по определению производные функции f от x равно минус 2x + 1 что в какой-то точке какой-то точке x равна x науку давайте запишем наше определение то есть f штрих от x man это по определению предел приращение стремящейся к нулю в точке x плюс дельта x минус x 0 прошу прощения x 0 делить на дельта x что ж давайте просто подставим наше значение мы увидим что мы

прошу прощения x 0 делить на дельта x что ж давайте просто подставим наше значение мы увидим что мы увидим что здесь у нас будет минус 2 x 0 минус 2 дельта x минус 1 вычитаем fit expo в точности получается плюс 2x 0 плюс 1 делить на дельта x и мы с вами видим что 2x 0 и минус 1 и единичка сокращается остается только минус 2 дельта x и дельта x мы можем поделить на дельта x и получить минус 2 здесь мы забыли написать предел но здесь мы уже можем перейти просто вычислению поскольку пределы

2 здесь мы забыли написать предел но здесь мы уже можем перейти просто вычислению поскольку пределы константа минус 2 это в точности -2 каким образом мы получили что для любой точке x0 значение производной равно -2 давайте подумаем почему все так получилось как такое может быть что производная стала константы давайте попробуем изобразить это на графике для этого нарисуем нашу функцию естественно это игры это x здесь ноль наша функция минус 2x минус один выглядит ну как то так ладно как-то так и

игры это x здесь ноль наша функция минус 2x минус один выглядит ну как то так ладно как-то так и не удивительно что на самом деле скорость изменения этой функции она везде постоянно дело в том что это прямая в какой бы точке мы не рассматривали мы можем записать следующие то есть рассмотрите это . x1 какую то вот здесь . x2 ну например . изначально и вот эту таким образом мы видим что вот это это дайте y1 наше приращении значения функции это дельта y 2 и таким образом отступив от x1 в любую

это дайте y1 наше приращении значения функции это дельта y 2 и таким образом отступив от x1 в любую сторону то есть ну вот можно же сделать чтобы вот этот d3x она была любым то есть мы можем записать что x1 равно общение с 2 на x1 плюс дельта x и дельта x собирать любое а теперь мы рассмотрим вот на этот треугольник посмотрим из него видно что большой этот треугольник и маленький треугольник прямоугольные они подобны ну это просто из-за того что это параллельные прямые кажется обязательства его

они подобны ну это просто из-за того что это параллельные прямые кажется обязательства его фалеса что же а это означает что отношения дэльта y2k дельты x2 совпадает с отношением дельта y 1 делить на дельта x 1 что в точности означает что какую бы точку мне рассмотрели в ней производная будет константой отлично давайте перейдем к следующему примеру важно также понимать что если функция f от x равна константе так называемые c то можно также многое сказать про значение функции давайте вычислим по

константе так называемые c то можно также многое сказать про значение функции давайте вычислим по разделению производные такой функции давайте снова запишем f от x есть предел при дельта их ставящихся бесконечности говорю прошу прощения записываем f от x плюс дельта x минус f от x зеленая дельта x что же мы с вами можем видеть что здесь у нас получается цен здесь у нас с вами получается цент потому что функция константа поэтому знаменателе получается 0 в числителе излучается 0 в знаменателе

что функция константа поэтому знаменателе получается 0 в числителе излучается 0 в знаменателе получается не но и потому что вы так выбирали начать gtx а это означает что вся дурь обращаются в ноль а это означает что предел равен нулю что означает что для постоянной функции производная равна нулю давайте передём к следующему примеру давайте вычислим производную f от x равно explorer кажется там было 2 x квадрат в точке x равна x нулю в определении опять же но у нас алгоритм действий один и тот

2 x квадрат в точке x равна x нулю в определении опять же но у нас алгоритм действий один и тот же давайте запишем определение производной в точке x0 это предел приращение аргумента стремящемся к 0-лю приращение функции на приращение аргумента давайте запишем то есть это два на x 0 плюс дельта x в квадрате минус 2 икс . дать делить на дельта x здесь у нас получается их сможешь квадрате плюс дельта x квадрате плюс 2x 0 дельта x 2 x 0 сокращается значит остается я опять забыл предел здесь предел

x квадрате плюс 2x 0 дельта x 2 x 0 сокращается значит остается я опять забыл предел здесь предел по-прежнему мы от него не избавились остается предел при дельты и стремящемся к нулю 4 дельта x умножить на x + 2 дельта x в квадрате поделить на дельта x отлично мы можем сократить дельта x получается что это предел 3 9 x стремящемся к 0-лю 4 x 0 0 + 2 gtx поскольку дельта x стремится к нулю то все это слагаемое стремится к нулю поэтому а это константа поэтому этот предел равен 4x 0 до сих пор мы

это слагаемое стремится к нулю поэтому а это константа поэтому этот предел равен 4x 0 до сих пор мы говорили о производной как о от как и полицейские функции в какой-то конкретной точке x давайте теперь допустим что функция f на всей числовой прямой то есть ну или на всей области свои определения а она имеет производного всех . то есть она что что она дифференцированно как мы ввели они тогда можно определить производную функции f как функции от аргумента x то есть зависимости от точки она будет

определить производную функции f как функции от аргумента x то есть зависимости от точки она будет изменяться собственно наше определение никак не изменяется просто в этом случае мы считаем что x это не какая-то фиксированная . а именно какое то значение которое приходит аргументом иными словами мы с вами можем заметить что производная функции тоже есть функция ну и давайте перейдем к следующим примером исходя есть из тех примеров которые написаны на доске из полученных результатов мы можем с

примером исходя есть из тех примеров которые написаны на доске из полученных результатов мы можем с вами понять каким образом вычисляются некоторые производные как функции как выражается некоторые производные как функции например в фильме опять мы видим что функция f от x равно минус 2x минус 1 для какой-то произвольной точке x0 им объясняли что ее производная равна минус 2 это означает что для любой точке x0 производная минус 2 а это означает что можно задать производную в зависимости от этой

точке x0 производная минус 2 а это означает что можно задать производную в зависимости от этой точке x0 как функцию f f штрих от x равна минус 2 аналогично стив шестом примере мы мы с вами видим функцию f от x равно 2 x квадрат и в примере номер три мы видели что для видит какой-то точке x0 производная равна 4x 0 теперь меняют x0 на производную . мы видим что функция производной есть 4 x это означает что наша характеристика изменения функции она меняется вместе с точкой мы можем для каждой

означает что наша характеристика изменения функции она меняется вместе с точкой мы можем для каждой функции сопоставлять другую функцию которая каждой точке х' активирует и и скорости изменения характера и изменения и дает нам некоторые приятные свойства которых мы поговорим чуть позже давайте повторим ещё раз а что мы с вами изучили в этом видео мы с вами поговорили о том что такое производная какой у нее смысл как формально определяется производной для функции одной переменной и как

какой у нее смысл как формально определяется производной для функции одной переменной и как производное вычисляется по определению в следующих видео мы с вами поговорим о том как определяется производная в случае функции нескольких переменных как вычислять производную не по определению и о практическом и геометрическом смысле производную спасибо за внимание

всем привет меня зовут аркадий и это второе видео из 7 видео deep learning school о производной и бильярдной оптимизации в этом видео мы с вами поговорим о геометрическом смысле производному практически есть мысли о производной о градиенте и о том как вычисляется градиент и производная функции не по определению начнем с геометрического смысла производной рассмотрим функцию f равны x квадрат и не эту точку x игрок то есть x и значение функции в этой точке f от x затем некоторое фиксированное

не эту точку x игрок то есть x и значение функции в этой точке f от x затем некоторое фиксированное приращение аргумента 9x приращение значения функции составит дельта y равная разница значение функции на концах нашего приращения то есть f от x плюс дельта x и f от x через две эти точки проведем прямую то есть через точку x играть и точку x плюс дельта x и y плюс дельта y такая прямая называется секущей нашей параболы и мы заметим что у нас получается прямоугольный треугольник с катетами dxd

секущей нашей параболы и мы заметим что у нас получается прямоугольный треугольник с катетами dxd тренинг то есть геометрии мы получаем что в точности вот наши отношения дельта дельта x это тангенс угла наклона касательной потому что это отношение противолежащего катета on треугольника то есть дельта y к прилежащему поезда и tx естественно для угла альфа который и характеризует угол наклона касательной мы получаем танец давайте теперь вместо того чтобы фиксировать какой то дельта x будем его

мы получаем танец давайте теперь вместо того чтобы фиксировать какой то дельта x будем его уменьшать то есть устремлять к нулю это то что мы видим сейчас на нашем на нашем изображении нашей gif изображения таким образом наша . дельта x плюс x она будет все ближе и ближе находится к изначальной точке x поскольку дельта x мы выставляем к нулю а значит какой-то момент наша текущая которая также немного сдвигается с уменьшением дельта x оно выродится в сатель нашей точки отлично и в точности когда

сдвигается с уменьшением дельта x оно выродится в сатель нашей точки отлично и в точности когда получилось касательно и мы получили наш предел потому что если мы будем выставлять дали tx нулю то в действительности пределом будет то-то значение превращать note то значение отношения дельта дельта x то есть производная в момент когда вот мы дошли до касательной таким образом геометрический смысл смысл производной определяется как угол наклона касательной в точке в которой рассматриваются

смысл смысл производной определяется как угол наклона касательной в точке в которой рассматриваются производную поскольку касательная графику f в точке x ирак это предельное положение секущей в этой точке получается что мы можем таким образом по графику получить некоторый смысл того для чего нужна производным самом деле это согласуется с тем смыслом котором мы говорили в предыдущем видео ведь в прошлом видео мы с вами обсуждали что производная какой-то точке есть характеристика скорости

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

смыслу производные все узнаем от школы функцию изменения координаты движущего тел ближе всего тела а именно это начальная координаты плюс скорость умножить на время плюс ускорение на квадрат скорости пополам давайте рассмотрим величины в ноль и наш начальную скорость и наше ускорение а дело в том что ускорение по смыслу это скорость изменения скорости как бы это тавтологично не звучало но тем менее определяется ускорение от как производная скорости по этому в точности когда мы записываем нашу

определяется ускорение от как производная скорости по этому в точности когда мы записываем нашу форму мы можем сказать что мы применяем производную более того изначально когда мы записываем скорость это тоже производная наших по координате по времени наши координаты по времени сколько это скорость изменения координаты таким образом можно сказать что если мы по дифференцируем нашу функцию координаты дважды то мы получим ускорения если один раз получим скорость если же мы один раз преференции

дважды то мы получим ускорения если один раз получим скорость если же мы один раз преференции русскость вы получим ускорение пример из физики опять давайте поговорим теперь про вычисления производной в прошлом видео мы с вами говорили про вычисления производной с помощью стандартного определения то есть когда мы подставляли в функцию нашу точку и просто брали пределы давайте теперь выясним как это делать без каждого без вычисления предела каждый раз потому что в общем случае каких-то больших

это делать без каждого без вычисления предела каждый раз потому что в общем случае каких-то больших функций вычисления могут быть громоздкими словно для этого мы с вами начнем с определения лимит анной функций точнее для с определения производной для некоторых функций кто называется элементалями а дальше мы с вами будем по некоторым правилам складывать нашу функцию которое мы хотим продифференцировать как конструктор из вот наших элементарных функций и таким образом разлагать большую задачу на

как конструктор из вот наших элементарных функций и таким образом разлагать большую задачу на более маленькие для которых мы уже знаем ответ что ж давайте начнем с таблица часто встречающихся производных часто встречающиеся функций и немножко и и обсудим производная константы равна нулю это написано в первой строчке что же это вполне логично поскольку производная характеризует скорость изменения функции а когда функция постоянная скорость изменения 0 также обратим внимание на остальные формулы

функции а когда функция постоянная скорость изменения 0 также обратим внимание на остальные формулы в правом столбце мы видим что там находятся обратные тригонометрические функции и гиперболические функции в левом столбце мы видим наши основные функции числовые критические и три на метрические функции и также логарифмически что же на самом деле формула здесь все выводятся по определению которое было в предыдущем видео то есть мы просто представляем нашу функцию записан для нее предел получаем

было в предыдущем видео то есть мы просто представляем нашу функцию записан для нее предел получаем какое-то выражение производные как функция от нефти от никакого нашего x что же отлично теперь у нас есть некоторые базовые блоки из которых можно собирать большие функции остался вопрос каким же образом нам по каким правилам можно вот эти дескать кубики складывать какую-то большую функцию что же для этого есть три правила для арифметических операций а именно производные суммы двух функций есть

для этого есть три правила для арифметических операций а именно производные суммы двух функций есть суду производных этих функций самом деле есть еще одно правило которое говорит что то же самое верно для вычитания поэтому можешь конечно повела 4 дальше это производное произведения двух функций когда при умножаем 2 функции берем от них производной для этого нужно взять сумму произведения производной функции 1 и потом взять такую же ее слоном взять произведение производной на одну функцию плюс и

функции 1 и потом взять такую же ее слоном взять произведение производной на одну функцию плюс и добавить к ним произведение другой функции на производную пьяны и подобным образом определяются производное отношение двух функций однако здесь важно условие чтобы функция которое и знаменателе не было ни 0 все по вы можете видеть на экране ну что же давайте перейдем к примерам и с помощью этих функций посчитаем производные некоторые функции не по определению давайте перейдем к примерам как

функций посчитаем производные некоторые функции не по определению давайте перейдем к примерам как вычислять производные не по определению а с помощью наших полученных павел как складывать эти самые кубики из элементарной функцией давайте вычислим производную функция f от x 4 x в кубе и с помощью наших что же прежде всего стоит сказать что мы можем расписать эту функцию как произведения двух других функций то есть вот это наш ум будет функция от x вот это будет функция в ix фестиваль от x это x

функций то есть вот это наш ум будет функция от x вот это будет функция в ix фестиваль от x это x кубе у от x это 4 что вы дальше за не знаем мы знаем что в таком случае f штрих от x записывается как у штрих от x на x + ua-ix на ваш штрих от x но здесь у нас все с вами довольно просто то есть у штрих от x это производные константы как мы выяснили это 0 поэтому на самом деле даже не важно что здесь здесь конечно x cube но это не важно потому что по итогу получается 0 а здесь у нас с вами

здесь здесь конечно x cube но это не важно потому что по итогу получается 0 а здесь у нас с вами четверка здесь с вами производная степенной функции которая прекрасно экране находится в левом столбце для этого мы должны взять 3 x квадрат и того первое слагаемое наслаждается 0 а второй у нас получается 4 умножить на 300 то есть 12 x квадрат давайте немножко обобщим результат который мы сейчас получили а именно давайте теперь представим что функция f от x имеет вид цен на f малая tex где-то это

а именно давайте теперь представим что функция f от x имеет вид цен на f малая tex где-то это константа и давайте попробуем поделить на такую функцию и и посмотрим что получится это ну на самом деле получится почти все то же самое то есть сказав что вот эта функция это у от x а вот эта функция это vfx мы как раз получил что в этой части у нас одно слагаемое в ноль а второе слагаемое будет выражать ту самую константы умноженное на производную функции давайте так и запишем получается что f от x в

ту самую константы умноженное на производную функции давайте так и запишем получается что f от x в этом случае будет равна c умножить на f штрих от x а это означает что производная константы умножить на f от x равна цена производная в таксу довольно удобно обычно этой реформой пользуется давайте перейдем к примерам посложнее давайте посчитаем производную функции f от x равно 4 синус x делить на я степени x + x квадрат вы griffin x давайте действовать по тому же самому all great ну то есть мы

я степени x + x квадрат вы griffin x давайте действовать по тому же самому all great ну то есть мы сами хотим развивать нашу большую функцию на функции поменьше и каждый из них разбивать еще по мячу и так далее пока не получим элементарные функции для которых вы уже знаем как вычисляется производная а потом соединять полученное значение через наши правила сложения умножения и деления что же назовем вот эту функцию от x вот это функция от x давайте для начала посчитаем производные функции vertex

вот эту функцию от x вот это функция от x давайте для начала посчитаем производные функции vertex это производное произведение поэтому для этого мы должны написать x квадрат на производную логарифма x плюс производный x квадрат умножить на логарифм x производная логарифма это 1 делить на x производная экспонат это 2 x таким образом у нас получается x квадрат делить на x + 2x логарифм x что в точности есть x на 1 плюс 2 логарифма x давайте перейдем к функции у то есть к производную этой функции

есть x на 1 плюс 2 логарифма x давайте перейдем к функции у то есть к производную этой функции у нас есть формула для день ее важным условием функции в для производной отношения функции является то что нижняя функция не обращается в ноль ну мы видишь наша функция слова положительно то есть что есть это микс на всегда больше 0 поэтому это верно поэтому мы можем спокойно применять функцию для деления что же тогда это получается что вы должны взять 4 синус x производная на апекс из этого вычесть 4

что же тогда это получается что вы должны взять 4 синус x производная на апекс из этого вычесть 4 синус x умножить на производную я в степени x это все делить на квадрат знаменателя держится это не x квадрате ну давайте мы это все посчитаем я с вами выяснили производная функции умножить на константу это констант туношна производным поэтому можно писать парсинг производная синуса а производная синуса это производное ли ментальной функции которые у нас есть в нашей табличке это просто косинус

синуса это производное ли ментальной функции которые у нас есть в нашей табличке это просто косинус поэтому с вами начнем писать этот 4 косинус икс напишу сказать что-то не путаться умножить на е в степени x снизу так и остается я степени 2x теперь посчитаем производную второго что у нашего слагаемого мы переносим также 4 синус x а производная экспоненты также есть нашей табличке это элементарная функция и она одна сама себе то есть это простая степени x сократим например на е в степени x и

функция и она одна сама себе то есть это простая степени x сократим например на е в степени x и вынесен четверку получится что это 4 разности косинус и синус x делить на е в степени x и остался лишь последний шаг мы с вами знаем что f штрих от x это в точности сумма у штрих от x и по штрих от x а это в точности 4 разности косинуса x и синус x павильона на е в степени x это вот отсюда и вот отсюда мы получаем x на 1 плюс 2 логарифма x таким образом мы посчитали производную функции f отлично

мы получаем x на 1 плюс 2 логарифма x таким образом мы посчитали производную функции f отлично однако давайте теперь рассмотрим функцию f от x равно синус от x кубе как мы можем заметить из наших правил которые которым мы пользовались для вычисления функций для перечисления производных функций не получается собрать такую функцию из элементарных дело в том что эта функция является сложно то есть это функция которая в аргумент который передается значение как другой функции то есть ее можно

есть это функция которая в аргумент который передается значение как другой функции то есть ее можно представить в виде композиции двух функций а именно функции синус в и функции от x 1 x кубе тогда наша f от x это в точности функция у применено к функции в от x также есть дополнительная формулу для вычисления производной сложной функции и и вы сейчас можете видеть ее на экране то есть для нашей сложной функции у от в от x чтобы посчитать производную необходимо посчитать производную функции у от

функции у от в от x чтобы посчитать производную необходимо посчитать производную функции у от в в этом случае вы не считается функций то есть мы просто подставляем то что и переходят в аргумент и так и оставляем и умножаем это на производную функции внутренний то есть втб штрих от x давайте рассматривать на примере то есть рассмотрим нашу функцию f от x равен синус x в кубе как мы уже выяснили это композиция функции синус в и их scooby производная синуса это косинус то есть мы получаем косинус

композиция функции синус в и их scooby производная синуса это косинус то есть мы получаем косинус в производная их scooby это 3x квадрат и того производная функции f в точке x это произведение наших внешней функции и внутренней функции производных тогда у нас получается что это косинус в в этой их scooby так и построить подставляем то есть это косинус кубе умножить на 3 x квадрат отлично давайте перейдем к определению функции многих переменных рассмотрим функцию n переменных то есть это

перейдем к определению функции многих переменных рассмотрим функцию n переменных то есть это некоторая функция которой зависит от n аргументов мы ее с вами обозначим как ex1 ex2 и так далее ксана давайте мы определим что такое возрастание и убывание функции многих переменных в действительности когда мы говорили про возрастание убывание функции одной переменной мы просто говорили что с ростом аргументы у нас либо увеличивается значение либо уменьшается значение однако что такое рост аргумента

у нас либо увеличивается значение либо уменьшается значение однако что такое рост аргумента когда аргументов много дело в том что убывание функции многих переменных мы с вами будем задавать как убывание по каждой координате то есть мы будем греть что функция убывает по координате x 1 по координате x 2 и так далее то есть возрастание и убывание функции многих переменных определяется по координатно производные многих переменных тоже можно определять пока ради на то есть давайте будем считать что

производные многих переменных тоже можно определять пока ради на то есть давайте будем считать что в определении нашей функции f f от x 1 и так далее xn все координаты кроме скажем 1 это на самом деле константа то есть мы будем считать что они не изменяются никогда таким образом мы сможем поменять посчитать производную нашей функции нескольких переменных как производные функций одной переменной по координате x 1 изменяют только x1 то есть добавляете самую перальта самое превращения только к x1

координате x 1 изменяют только x1 то есть добавляете самую перальта самое превращения только к x1 также можем сделать с каждым с каждой координатой такое понятие называется частной производной давайте чуть более формально частная производная это производная функции многих переменных для какой-то фиксированные координаты когда мы считаем эту координату аргументом а все остальные координаты считаем неизменными давайте рассмотрим это на примере рассмотрим функцию f от трех переменных x 1 x 2 x 3

неизменными давайте рассмотрим это на примере рассмотрим функцию f от трех переменных x 1 x 2 x 3 равное произведению x 1 x 2 и сумме это с x3 тогда рассмотрим частную производную по переменные и функции f попеременный x1 она обозначается двумя способами либо это r штрих с индексом икс один либо это прописная дельта эф делить на прописной дельта x 1 отлично давайте мы воспользуемся нашими правилами арифметическими то есть можно сразу сказать что производная у нас по сумму есть сумма производных

арифметическими то есть можно сразу сказать что производная у нас по сумму есть сумма производных или каждое слагаемое продифференцируем по отдельности теперь смотрите в произведение x 1 x 2 x 2 вы считают константы потому что мы считаем производная по x 1 частную производную по x 1 поэтому производной первого слагаемого будет x2 аналогично производные x3 мы хотим считать x3 константы потому что мы считаем производную по x1 поэтому производную второго слагаемого будет 0 и того частная

что мы считаем производную по x1 поэтому производную второго слагаемого будет 0 и того частная производная по x 1 функция f будет равна из 2 аналогично мы получаем что производная функции f по x 2 это x1 а px3 это один но важно понимать что на самом деле на самом деле каждая частная производная это та же функция причем на самом деле функция от те от того же количества переменных что изначальная функция f и их также можно эти функций можно также дифференц и как и в случае функция 1 переменных

функция f и их также можно эти функций можно также дифференц и как и в случае функция 1 переменных выглядеть вторую производную третью производную и так далее в случае же когда мы работаем с функцией несколько нескольких переменных или функций многих переменных мы можем брать также вторую производную однако нужно уточнять по какой координате то есть парком аргументы мы берем эту производную например в случае если у нас функция двух переменных f от x играх мы можем записать следующим образом f

в случае если у нас функция двух переменных f от x играх мы можем записать следующим образом f два штриха из индекса xx это производная функции f взяты по x а потом еще раз по x а если бы там был в мире внизу игры как и 2 2 написано 2 строчки то мы сначала берем производную по fpx частную а потом по y давайте рассмотрим пример опять же возьмем ту же самую функцию для нее мы с вами уже вычислили значение первой производной по x 1 это x2 давайте посчитаем вторые производные то есть первое первое

первой производной по x 1 это x2 давайте посчитаем вторые производные то есть первое первое произвольно выбиваются по x1 а второй возьмем по x1 и x2 и в одном случае мы можем видеть что получится 0 потому что мы пытаемся продифференцировать x2 по x1 x2 вам честно константы и значит а 0 в таком случае получается единичка потому что де фрaнс mx2 по их 2 важно также понимать что если мы изменим порядок дифференцирования f то есть мы сначала возьмем производную по x2 потом по x 1 то в этом случае

дифференцирования f то есть мы сначала возьмем производную по x2 потом по x 1 то в этом случае мы тоже получим 1 в общем случае смена порядка дифференцирования приводит к разным значением производной функции однако достаточно хороших функций можно сказать что можно менять порядок дифференцирование при этом значение второй производной карты производная но не будет изменяться особо любознательных слушатели могут подчеркнуть это из теоремы шварца а мы на этом останавливаться подробнее не будем

слушатели могут подчеркнуть это из теоремы шварца а мы на этом останавливаться подробнее не будем конечно по аналогии со второй производной можно определить и третье четвертое так далее and любую производную естественно мы говорим про частной производной сейчас давайте мы сейчас перейдем с вами к понятию градиента on самом деле она очень тесно связано с производными функций многих переменных что же на самом деле градиент функции многих переменных это просто вектор из частных производных функций

на самом деле градиент функции многих переменных это просто вектор из частных производных функций то есть если у нас есть функция f многих переменных которые зависит от n аргументов то есть у нее есть n координат x 1 и так далее xn тогда градиентом f называется вектор на меня первом месте котором стоит частная производная по 1 координате на втором месте стоит частная производная построек ординате и так далее до n 3 то что вы видите на экране давайте опять же рассмотрим ту же самую функцию x1 x2

и так далее до n 3 то что вы видите на экране давайте опять же рассмотрим ту же самую функцию x1 x2 + x 3 и вычесть семья градиент как мы видим в примере 12 я даже подниму немножко выше экран мы уже вычислили все значения частных производных по каждой координате то есть вот fpx один fps твоих по ис-3 теперь все что нам нужно это записать это дело вектор потому что тогда это в точности по определению получится градиент мы получаем что град f или что по-другому можно записывать градиент с помощью

получится градиент мы получаем что град f или что по-другому можно записывать градиент с помощью такого треугольничка это x2 и x1 и один вектор на самом деле градиенты и несет все смысл производной обобщенный для функции многих переменных дело в том что градиент показывает как ведет себя функция по каждой переменной в том числе вам показывать характер изменения функции по каждой переменной то есть вот такое своеобразное многомерное производное что ж давайте повторим что мы с вами узнали из

есть вот такое своеобразное многомерное производное что ж давайте повторим что мы с вами узнали из этого видео в этом видео мы с вами поговорили о геометрическом смысле производной мы с вами выяснили что это тангенс угла наклона касательной в точке мы с вами поговорили о том какой практический смысл несет все производная и перешли к определению по родные в случае функции многих переменных а также к определению градиента спасибо за внимание

всем привет меня зовут акадии и это третье и последнее видео всей de fleur new school о производной и градиентные оптимизации в этом видео мы с вами поговорим о том что такое задача оптимизации поговорим о том как и какие можно я решать аналитически и как ее решать с помощью способов ингредиент на оптимизации а именно мы с вами поговорим об альтернативном методе градиентного спуска что ж давайте начнем с постановки задач и одна из самых важных задач которые вообще решают для различных функций на

с постановки задач и одна из самых важных задач которые вообще решают для различных функций на практике это задача поиска либо минимума либо максимумами функции в общем случае от называется задача оптимизации функции например для нас с вами очень важно что эта функция решаются не он ими сетями при обучении по сути нейронные сети очень грубо говоря это оптимизация одной большой и очень сложной функции которая может быть тысячи миллионы или даже миллиарды параметров так например g5 рей отлично

которая может быть тысячи миллионы или даже миллиарды параметров так например g5 рей отлично давайте поговорим чуть подробнее об этом при обучении нейронной сети мы хотим измерять насколько хорошо сеть справляется с поставленной задачей для этого нам необходимо не акция функция потерь такая функция которая в качестве аргументов будет принимать наши ответы нейронной сети и настоящая то есть правильные ответы и выдавать как результат некоторое число то есть мы будем называть это число ошибкой то

ответы и выдавать как результат некоторое число то есть мы будем называть это число ошибкой то есть она будет оценивать насколько наша мою модель ошиблась понятно что в ходе обучения наши нейронной сети задача сводится к тому чтобы минимизировать в эту функцию ошибку то есть наша функция ошибки это наша функция потерь отлично у ними словами нам нужно решить задачу оптимизации для функций потерь давайте подумаем как можно искать минимум функции для начала одной переменной вспомним что в видео по

подумаем как можно искать минимум функции для начала одной переменной вспомним что в видео по производным и с нами вы сами выясняли что знак производной функции он показывает характер роста функции в этой точке убивает она возрастает или остается неизменной давайте немножко формализуем необходимые и достаточные условия существования экстремума то есть как локального минимума таки локального максимума функции в точке x что ж давайте начнем с необходимым условием если функция f имеет экстремум в

функции в точке x что ж давайте начнем с необходимым условием если функция f имеет экстремум в точке x то либо рф не имеет производных точке x либо производной в точке их существует равна нулю это означает что если в какой-то точке и достигается локальный минимум то в этой в этом локальном минимуме либо не существует производный либо на 0 достаточное условие говорит нам о том что если функция f непрерывна и дважды функции в точке x 0 то есть что у нее существует производная второго порядка в

непрерывна и дважды функции в точке x 0 то есть что у нее существует производная второго порядка в точке x0 тогда если значение производной в точке x0 и равна нулю и значение второй производной строго отрицательная то и смог является точкой локального минимума обратно наоборот если этот штрих от x 0 равна нулю и 2 производной в этой точке строго больше нуля то и снова является точкой локального минимума иными словами чтобы . x было . и stella matt какая точка x для функции f необходимо чтобы f

иными словами чтобы . x было . и stella matt какая точка x для функции f необходимо чтобы f в точке x либо не имела вовсе производной либо это производная равнялась нулю и чтобы . x была гарантирована . их самодостаточна чтобы выполнялось условие описаны чуть выше заметим что сейчас мы говорили об экстремумах на точках меню то есть дело в том что если в какой-то точке производная f f штрих от x равна нулю то на самом-то деле мы ничего не можем сказать про то является это точках страны или

x равна нулю то на самом-то деле мы ничего не можем сказать про то является это точках страны или является точка минимума . максимум дело в том что мы когда говорим про необходимые условия она вовсе не гарантирует что точка в которой что их от x равна нулю вовсе будет . их странного например можно стать функцию x cube которая монотонно возрастает однако в точке 0 у неё достигаются значение производная равна нулю однако это не является . extrano поскольку левее нее значение меньше проведение

равна нулю однако это не является . extrano поскольку левее нее значение меньше проведение значение больше отлично таким образом мы можем на самом деле предоставить некоторые аналитические алгоритм поиска локальных минимумов или локальных максимумов то есть оптимизация функция f от x для начала мы должны составить уравнения производная функции f равна нулю и найти все точки x которые дули trait этому уравнению а далее для всех коней уравнение x вычислить вторую производную и проверить ее знак

этому уравнению а далее для всех коней уравнение x вычислить вторую производную и проверить ее знак если она больше нуля то это . если оно меньше готовят точка максимума если же она может принимать разные значения или вовсе не определено про это не является . их страны давайте рассмотрим это на примере этот аналитический алгоритму рассмотрим функцию 4 x квадрат минус 3 x плюс 5 на самом деле эту функцию мы с вами видели уже в первом видео я график был в самом начале этого видео давайте будем

функцию мы с вами видели уже в первом видео я график был в самом начале этого видео давайте будем решать пошагово запишем производную этой функции 4x квадрат мало дифференцируется как просто степенная функция и константа стоит на это 8x и trace минус 3x дифференцируется в в минус тройку и пятерка как константа дифференцируется мной этого наша производная это 8x минус 3 теперь решаем уравнение что их от x равно 8x минус 3 равно нулю то есть отсюда мы получаем решение их со мной 38 утром 8 это

их от x равно 8x минус 3 равно нулю то есть отсюда мы получаем решение их со мной 38 утром 8 это единственное крайне это уравнение и теперь нам необходимо проверить значение функции в этой точке каким образом это сделать значение прошу прощения второй производной функции в этой точке для это нам нужно для начала посчитать вторую производную производная линейной функции 8x минус 3 это 8 и в точке три восьмых ну на самом деле в любой точке ну и в точке три восьмых она больше нуля поэтому

в точке три восьмых ну на самом деле в любой точке ну и в точке три восьмых она больше нуля поэтому полученная точка x 338 эта точка минимума давайте проверим вашу правильность нарисовал график на экране и увидим где находится . три восьмых чтож вот график функции которой которые мы изучали выше а вот . 3 8 и это действительности . локального минимума на самом деле этот алгоритм хорошо позволяет работать с точечными значениями координат точными значений в него функции но он не всегда применим

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

этим на вечерам что же для начала мы почитаем производную здесь все функции степенные поэтому я не буду останавливаться подробно как мы это посчитали получили 4s кубе плюс 15 x квадрат минус 10 решаем уравнение приравнивает а производную нулю это уравнение третьей степени которые сложно если невозможно хоть энергетически значит найти точку минимума нашему алгоритму просто-напросто не получится нужно понимать что это довольно простая функция то есть мы размываем решим если рассматривать еще

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

алгоритма давайте обсудим что мы чего мы хотим добиться ещё раз рассмотрим некоторую функцию это та самая функция кота для которой у нас не получилась аналитически посчитать точку минимума и возьмем на ней какую-то случайную точку их сайт мы предположим точками названием из 2 здесь находится это не является ни точкой минимума не . максимум это просто какая-то точка на графике однако посчитав производную в этой точке мы можем сказать убывает функции этой точке или возрастает что же в этой . на

в этой точке мы можем сказать убывает функции этой точке или возрастает что же в этой . на конечно возрастает но это означает что точка минимума находится левее то есть ее аргумент меньше ну раз на возрастает на этом отрезке что же отлично давайте сделаем некоторые шаг влево и посмотрим снова на производную иными словами наша идея градиентного спуска заключается в том что мы берем какуе-то начальную точку в нашем случае это . -2 минус 2 и дальше на каждом шаге делаем следующее смотрим где

точку в нашем случае это . -2 минус 2 и дальше на каждом шаге делаем следующее смотрим где находятся минимум с помощью знака производной и делаем шаг в эту сторону таким образом мы будем все больше и больше приближаться к все ближе мере приближаться наша точка минимума их какой-то момент будем достаточно близко чтобы сказать что вот у минимум здесь понятно что этот метод итеративный то есть мы с ним можно делать какое-то ограниченное число шагов а можно сделать какой-то другой тип установки

с ним можно делать какое-то ограниченное число шагов а можно сделать какой-то другой тип установки например что изменение функции которое произошло достаточно маленькая можно же сделать ограничение на количество шагов теперь давайте рассмотрим как это будет выглядеть на графике в идеале наши движения будут нашему графику функции которое было до этого будет выглядеть как-то так что мы шагаем вниз вниз вниз вниз какое-то не дошли но нужно понимать что это все у нас довольно пока abstract ну дело

вниз вниз вниз какое-то не дошли но нужно понимать что это все у нас довольно пока abstract ну дело в том что мы не понимаем в какую на какую величину нужно уменьшать наш наше значение аргумента в случае к нужно идти влево и по-прежнему не до конца формально понятно когда нам нужно останавливать в горит ну что ж давайте начнем с первой проблемы давайте попробуем выбрать наш дельта x который будет отвечать за изменение координаты сторону в которую мы хотим верится дело в том что конкретно в

отвечать за изменение координаты сторону в которую мы хотим верится дело в том что конкретно в случае нашим наших функций мы можем сказать ну вот нужно изменить там на один или то на одну вторую то есть из конкретного вида функции точнее графика функции мы визуально можем определить какой шаг нужно сделать однако в общем случае это совсем не то реально поскольку мы в ад вверх не знаем насколько далеко находится точка минимума от текущей точке а во-вторых мы не знаем как вообще в принципе .

далеко находится точка минимума от текущей точке а во-вторых мы не знаем как вообще в принципе . ведет себя наша функция то есть можно сказать что мы не видим ее график более того численное значение производной она на самом деле показывает нам некоторый она дает нам полезные характеристики то есть на говорит нам бывает или вы заставит функция и наверное мне к тому миру того как она бывает его заставит однако вычислить из нее напрямую какой нужно сделать шаг не удается тем более что в конкретные

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

мы сделаем слишком большой шаг мы можем прийти к ситуации что мы перескочим наш миньон то есть это будет выглядеть примерно так вот наши . -2 а то . в котором мы сходим она находится левее нашел винила и продолжив наш алгоритм дальше хотим пойти вправо потому что есть функция убывает но поскольку мы сделать снова слишком большой шаг мы снова перескочили так и будем скакать вокруг этого локального минимума так и не попал в него забывай страны если мы возьмем слишком маленький дельта x то мы

минимума так и не попал в него забывай страны если мы возьмем слишком маленький дельта x то мы будем делать очень много шагов и более того если мы пойдем в какой-то локальный минимум сейчас мы ищем локальный минимум и от нормально но в случае нужно искать глобальный минимум стоит слишком маленьких шага и дельта x мы можем просто не выбраться из вот этой низины например то есть мы бы не двигаться слишком мало маленькими шагами поэтому постоянно будем приходить к одному и тому же локальную

слишком мало маленькими шагами поэтому постоянно будем приходить к одному и тому же локальную минимум если мы хотим найти глобальный это нам не поможет однако говоря о поиске локального минимума да вообще в принципе дельта x любом случае должен быть довольно маленьким или хотя бы уменьшающимся давайте мы назовем наш дельта x пока фиг зафиксируем то есть скажем что вот мы всегда будем двигаться на одну и ту же величину и назовем ее вот нашим шагом и обозначим буквой эпсилон что ж давайте теперь

одну и ту же величину и назовем ее вот нашим шагом и обозначим буквой эпсилон что ж давайте теперь решим на какое расстояние вот мы будем ходить то есть вот эта дельта x мы хотим выразить через эпсилон давайте будем использовать для этого величину производной в точке в котором сейчас находимся дело в том что он как мы уже говорили величина производные не говорит нам как далеко находится локальный минимум или локальный максимум любая точка кстово относительно ее однако она показывает некоторые

минимум или локальный максимум любая точка кстово относительно ее однако она показывает некоторые крутость вот этого спуска функциями значит если наша точка находится далеко от минимото f штрих от x почему или наше штрих от x он будет довольно большим и вы можно двигаться большими шагами то есть пропорционально вот этому значение если же она будет достаточно маленьким то по мере приближения к точке минимума мы будем уменьшать шаг потому что мы находили то есть значение призваны бы становиться

минимума мы будем уменьшать шаг потому что мы находили то есть значение призваны бы становиться все меньше значение модуля производят будет становиться меньше прошу прощения так мы менее вероятно перескочим через точку минимума и подойдем к ней как можно ближе но как я уже говорил для разных функций нужно подбирать какие-то свои способы потому что в общем случае подобрать какой-то и единый способ не удается итак теперь можно сформулировать наш алгоритм диллиан этого спуска возьмем некоторую

не удается итак теперь можно сформулировать наш алгоритм диллиан этого спуска возьмем некоторую точку x0 это будет нашим начальным приближением и зафиксируем некоторой ipsum также и пчела в машинном обучении часто называют называют скоростью обучения или леоненко этом текущем нашем подходе мы просто бы не увидеть что и всего это шаг величина шага что же втором шаге вы вычисляем производную в этой точке далее мы и хотим сделать шаг градиентный спуск каким образом мы берем нашу старую точку и

точке далее мы и хотим сделать шаг градиентный спуск каким образом мы берем нашу старую точку и делаю шаг в сторону обратного значения производной то есть мы хотим взять наше новое значение аргумента x это в точности x минус иксе он наша величина шага к вам говорю до этого умножено на f штрих от x и будем повторять последний пункт то есть пункт 3 до тех пор пока не пройдет либо определенное количество шагов либо пока мы не станем достаточно близко к точке минимума почему этот алгоритм

количество шагов либо пока мы не станем достаточно близко к точке минимума почему этот алгоритм называется где давайте не так почему называется изменены спуском спуск потому что каждый раз на каждом шаге мы хотим запускаться все ближе к точке минимума ага нет мы потому что на самом деле этот спуск осуществляется за счет впечатления градиента да мы сейчас мы говорили о случая функции одной переменной и наш градиент был просто производной давайте теперь поговорим о том как она выглядит очень

и наш градиент был просто производной давайте теперь поговорим о том как она выглядит очень многих переменных ведь на самом деле поняв для как работы логарифму где одно спуска для случая одной переменной уже можно представить как мы бы у него действовать случае функции многих переменных собственно можно посмотреть он действует случае одной переменной мы постепенно просто вычисляем производную таким образом приближаемся к нашей . да также важное уточнение заключается в том что алгоритм

таким образом приближаемся к нашей . да также важное уточнение заключается в том что алгоритм градиентный спуск позволяет найти точку локального минимума но только одну если мы хотим найти несколько точек локального минимума тон должен запускаться то есть с начальными приближением в разных точках однако это никак не гарантирует что меня идет все точке локального минимума понятное дело что на такой же идеи существует несколько других способов или модификации или оптимизация вдавить медведей and

же идеи существует несколько других способов или модификации или оптимизация вдавить медведей and на вас пуска они сейчас мы говорить не будем центральная идея остается одна и та же что мы хотим вычисляя градиент спускаться к точке минимума давайте 5 перейдем к оптимизации функции многих многих переменных и для этого вспомним что такое градиент градиент это вектор частных производных как мы с вами рф во втором видео давайте теперь используем ту же самую идею которые мы использовали для

мы с вами рф во втором видео давайте теперь используем ту же самую идею которые мы использовали для градиентов для того чтобы волгарь ингредиент на вас пуска для функции одной переменной для функции многих переменных а именно мы будем брать некоторую точку x 1 и так далее xn как начальное приближение будем также фиксировать некоторые наш leaning great version вычисляем теперь все частные производные при этом иными словами мы хотим вычислить градиент и будем изменять весь наш и многомерную . все

при этом иными словами мы хотим вычислить градиент и будем изменять весь наш и многомерную . все координаты x 1 издали xn соответствии с тем как мы делали это в случае внятного спуска для функции одной переменной то есть для каждой точке мы будем говорить что мы сдвигаем ее в сторону мы будем вычитать из нее офиса на частную производную поставишь координате если бы из перед использовать векторную запись то мы получим что каждая новая многомерная . то есть n-мерное это старая . который добавлен

запись то мы получим что каждая новая многомерная . то есть n-мерное это старая . который добавлен анти градиент умножили на всем на самом деле здесь мы пользуемся утверждением что анти градиент задает направление наискорейшего убывание функции доказывать мы этого не будем однако это общеизвестный факт в случае функции двух переменных можем видеть например те кто 0 и т1 как на графике j at the world это один это вот наша плоскость такая им и мы видим что вот мы начинаем с какой-то точки идти

world это один это вот наша плоскость такая им и мы видим что вот мы начинаем с какой-то точки идти медленно то есть задаем таким образом координаты телефоне все таки локального минимума что ж давайте рассмотрим пример вычисти шаг градиентного спуска функции f от x 1 и так далее x x 4 указано на экране для некоторых сильно фиксированного иксион и начальное приближение вы ищете форму где нет вас пуска в этом случае что же давайте перейдем к решению задачи provided by спуск напоминаю условия у

пуска в этом случае что же давайте перейдем к решению задачи provided by спуск напоминаю условия у нас есть функция f от x 1 из 2 x 3 из 4 равна x 1 x 2 + x 3 в степени 5 плюс е на в степени из 4 отлично у нас есть никто иксион наш вернет миленькой давайте даже подпишу это и у нас заняло некоторое начальное приближение . x0 равное это как вектор v . из низких колено давайте мы будем писать индекс точки сверху чтобы не путаться то есть снизу у нас будет индексы координат а сверху яндекс и точек

точки сверху чтобы не путаться то есть снизу у нас будет индексы координат а сверху яндекс и точек потому что точки нас многомерны все это будет x20 и кого и первые x0 и кого и второе x0 и кого и 3 x 0 4 это начальное приближение что ж давайте запишем шаг без явного спуска в нашем случае таким образом но мы не хотим это сделать для начала нам необходимо вычислить градиент чтобы учиться и градиент необходимо вычислить частные производные нашей функции f по каждой координате давайте мы это

необходимо вычислить частные производные нашей функции f по каждой координате давайте мы это сделаем то есть давайте вычислим частную производную по x1 может сразу заметить что грамм вычисляют частную производную по икс один второй и третье слагаемое дифференцируется в 0 потому что они не зависят x1 поэтому это константы значит вы должны продифференцировать только первое слагаемое то есть это производная x1 x2 по x1 что в точности x2 потому что их двое имидж этой константы x1 сервиса единичку

x1 x2 по x1 что в точности x2 потому что их двое имидж этой константы x1 сервиса единичку отлично давайте аналогично запишем сразу частные производные по x 2 понятное дело что оно симметричный производная по x 1 поэтому можно просто сказать что это x1 вычисляется по абсолютно также отлично давайте теперь df по дэвис 3 1 и 3 слагаемое не зависит x3 поэтому они дифференцируются в ноль значит остается по дифференцировать только второе слагаемое а это просто степенная функция которая была нашей

по дифференцировать только второе слагаемое а это просто степенная функция которая была нашей таблички из 2 видео значит опять x3 в 4 и наконец давайте вычислим частную производную по четвертой координате опять же первые два слагаемых дифференцируются в 0 потому что и не зависит от их 4 последнее слагаемое дифференцируются себя поскольку это экспонента это тоже элементарная функция которая была в табличка на втором видео отлично вот это все вот эти четыре функции они задают наш градиент из него

табличка на втором видео отлично вот это все вот эти четыре функции они задают наш градиент из него мы делаем вывод что градиент ef есть не что иное как вектора x 2 давайте поднимемся от x x 2 x 15 x 3 в 4 и е в степени x 4 отлично теперь нам с вами необходимо записать шаг градиентного спуска каким образом это сделать предположим что мы сейчас находимся в некоторой точке с индексом n то есть в точке x анти естественно когда мы говорим о точке в нашей задаче мы имеем ввиду точки у которых есть

x анти естественно когда мы говорим о точке в нашей задаче мы имеем ввиду точки у которых есть по четыре координаты давайте мы запишем это здесь я разделю пусть нас есть нервная . xante напоминает что мы пишем индексы точек сверху чтобы не использовать это не xvm той а именно nt . x и мы хотим задать правила по которым мы бы перешли в точку x n + 1 что ж давайте мы воспользуемся нашими фанами то есть x n плюс 1 это x n t минус наш леоненко и умножить на градиент функция f в точке x and и это

есть x n плюс 1 это x n t минус наш леоненко и умножить на градиент функция f в точке x and и это векторная запись нашего шаг градиентного спуска давайте теперь чтобы было немного понятнее хоть и боли и переведем хоть и более громоздкую но расшифруем эту запись то есть это первая координата вторая координата 3 когда-то и 4 координата n + 1 точке равна 1 координате 2 координате 3 координате и четвертой координате этой точке минус r сион умножить на градиент но весты градиента просто значка мы

координате этой точке минус r сион умножить на градиент но весты градиента просто значка мы допишем по-честному то есть мы выразим каждый канат и тугарин ты-то здесь будет 2 координаты . and i точке 1 координат а н той точке 5 умножить на третью координату and и точки в четвертой степени и на е в степени x 4 точки это запись считается это тоже векторный вид если уж быть совсем честным но мы можем просто посчитать каждую строчку и получить четыре разных равенством сосна системы из этих 4-х яиц

просто посчитать каждую строчку и получить четыре разных равенством сосна системы из этих 4-х яиц тоже задает сша градиентного спуска и она эквивалентна системе которыми вы написано вектора мы видим таким образом мы записали как мы будем обновлять наши точки то есть мы записали каждую итерацию градиентного спуска то есть мы полностью его задали на самом первом шаге мы подставляем сюда x and i равна x нулевому и дальше то есть начинаем идти пока не сделаем либо определенное количество шагов либо

x нулевому и дальше то есть начинаем идти пока не сделаем либо определенное количество шагов либо пока не приблизимся достаточно близкой точки минимума давайте напомним что мы с вами изучили в этом видео мы с вами поговорили о том что такое задача оптимизации и минимизации и максимизации поговорили о том как аналитически возможны идти минимум функции максимум функции о том как аналитические оптимизировать функцию и поговорили об идее градиентного спуска о том как устроен этот итеративно я

оптимизировать функцию и поговорили об идее градиентного спуска о том как устроен этот итеративно я уверен в случае функции одной переменной и функции многих переменных спасибо за внимание

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

сегодня есть развивают стресс новых направлений исследований в области искусно интелекта и так же расскажу про нашу лабораторию на физтехе чем мы занимаемся про наш проект в принципе у нас и время есть если будет вопрос и что-то хотите спросить или выскакивать комментарий в регулируемым формате можете меня спрашивать я вам постараюсь ответить ну давайте начнем так что такое искусство интеллект большинство людей когда вообще их спросить там представьте искусный интеллект они все представят вот

людей когда вообще их спросить там представьте искусный интеллект они все представят вот такого вот android у товарища который думает как человек разговаривает как человек и это как бы воплощение результата как мы себе представляем то что получится после научных исследований какой такой компаньон обладающий директный человека на самом деле то что я буду называть искусственным интеллектом и то что большинство исследований исследователей сегодня подразумевает под этим термином это скорее

и то что большинство исследований исследователей сегодня подразумевает под этим термином это скорее направление исследования которые возможно даст нам такого антропоморфный поморского android нова робота может быть и не даст то есть это просто некоторый набор технологий которые позволяют делать алгоритмы которые могут решать те или иные задачи которые для которых человек для решение которых человек использует интеллект но и почему мы занимаемся этим почему я лично занимаюсь этим чем большинство

использует интеллект но и почему мы занимаемся этим почему я лично занимаюсь этим чем большинство людей занимаются этим есть две основных причины одна из них это некоторые прикладная да мы хотим создать помощника который нам будет помогать решать интеллектуальные задачи но там самый простой пример у нас есть мы там любим заниматься вычислениями у нас есть умные мы не хотим тратить много времени как там не знаю было двести триста лет назад канал чтобы что-то интересное вычислить лишь либо нужно

там не знаю было двести триста лет назад канал чтобы что-то интересное вычислить лишь либо нужно было очень много простых действий в начале совершить либо где-то из каких таблицы уже с вы численными значениями некоторых функций у нас есть там калькулятор ли компьютер при помощи которого мы можем быстро что-то посчитать и в принципе несмотря на то что этот калькулятор забрал нас какую-то интеллектуальную функцию мы от этого не пострадали потому что он дал нам гораздо больше мы теперь можем

функцию мы от этого не пострадали потому что он дал нам гораздо больше мы теперь можем делать вычисления и вообще строить такие математические модели строить которые раньше нам было очень сложно не следовать который раньше нам было очень сложно это с точки зрения прикладных прикладного как назад прикладной ценности из кожи исследований в области искусного интеллекта 2 очень важный на мой взгляд такая почти философская задача этих исследований в некотором смысле когда мы [музыка] строим искусны

почти философская задача этих исследований в некотором смысле когда мы [музыка] строим искусны интеллект исследуем вообще способы как мы нам мы можем построить интеллектуальную систему мы лучше вообще разбираемся в том как вообще такие системы могут быть построены а это значит что мы приближаемся к пониманием так того как устроен телек человека как вы наверное все понимаете если мы понимаем как устроен интеллект человека интеллект выше животных то мы понимаем кто такой человек и мы разбираемся

интеллект человека интеллект выше животных то мы понимаем кто такой человек и мы разбираемся лучше в том отвечай на вопрос что такое я и это такая более фундаментальная цель исследований в этой области и более можно сказать такой философская но на мой взгляд она тоже очень важна давайте представим что перед нами сейчас стала задача построить искусно интелекта надо такого направления средний вообще не существовало как мы могли бы решить эту задачу но кажется что мы можем действовать двумя

вообще не существовало как мы могли бы решить эту задачу но кажется что мы можем действовать двумя способами способ номер один ну мы знаем что человек обладает уже какими-то интеллектуальными свойствами и мы можем попытаться построить человек модель интеллекта человека ну что мы знаем что мы знаем что там интеллект человека определяется мозгом мозг это сеть нейронов давайте мы возьмем нейроны построим их некоторым математическую модель каждого отдельного нейрона потом построим модель сети

построим их некоторым математическую модель каждого отдельного нейрона потом построим модель сети нейронов все эти нейроны вместе объединим придумаем алгоритм по которому утилита сеть нейронов будет обучаться и у нас будет некоторая модель интеллекта человека и действительно это было одно из тех направлений которые был легло в основу искусно интелекта вам появился и это направление называется искусной нейронной сети другой подход этот подход как бы снизу вверх когда мы идем от элементов

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

проанализировать этот процесс и построить алгоритм который будет симулировать каким-то образом процесс то есть мы как бы говорим что нам рассматриваем человек как никто черный ящик мы говорим на не важно каким на каком принципе основан этот алгоритм то есть это нейрона там решают как какой последовательности как манипулирует символами для того чтобы доказать эту теорему или же это имплементировать в компьютере давайте попробуем вот это вот построить такую систему которая будет описывать

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

как он вообще когда он зародился и какие деле же сначала вы его основе ну вот можно сказать что он появился фактически где-то в сороковых годах в конце сороковых годов начале 50-х годов и предпосылками для появления его как направление исследований служило то что тогда с одной стороны уже был достаточно много известно какие то физиологических данных а с другой стороны появились первые компьютеры можно было устроить достаточно сложной модели кто-нибудь может сказать что за человек да вот норберт

было устроить достаточно сложной модели кто-нибудь может сказать что за человек да вот норберт винер но telling да тоже хорошая как это попытка в жил в то же время и правда был гораздо худеет не знаю курил сигары или нет это норберт винер норберт винер он знаменит тем что он придумал термин кибернетика если вы знаете вот выгулять мультитач на математики и кибернетики и наверное сейчас уже то что такое кибернетика практически все забыли кроме тех кто учится на факультете личными математики и

такое кибернетика практически все забыли кроме тех кто учится на факультете личными математики и кибернетики но в его геологии это была некоторая теория с нитро математический формализм которая позволяла бы строить некоторые системы управления при этом эти системы управления они были бы как бы клево ленты для живых организмов для общества в целом и для каких то возможно технических систем в этом смысле он явился таким как бы примером одним из пионеров искусно интелекта то что он попытался

этом смысле он явился таким как бы примером одним из пионеров искусно интелекта то что он попытался совместить как бы математику и физиологические теории построения интеллектуальных систем что произошло потом в 50-х годах пятьдесят шестом году в сша произошла такая летняя школа в дар кускам колледже где и фактически было придумано название искусные интеллект и определение этому направлению слезами был да но как то что так как если мы примем гипотезу о том что в принципе любую интеллектуальную

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

что самое начало появилось две волны два основных направлений это вот зеленым сверху показано это первая волна это искусный нейронные сети а вторая это на символьный искусный интеллект вначале они развивались вместе но потом через некоторое время символьный искусств интеллект он вытеснил нейросети потому что позволял гораздо быстрее получить какие-то осязаемые результаты и в принципе вокруг искусно интелекта в шестидесятые начала 70-х годов сложился очень сильный hyip который напоминает hyip

интелекта в шестидесятые начала 70-х годов сложился очень сильный hyip который напоминает hyip который сегодня существует вокруг искусством интеллекта в принципе тогда люди делали заявление которое выглядели таким образом что там через десять лет компьютер будет обладать интеллектом среднестатистического человека 60-х годах говорили да то есть в 70-х годах уже такие должны были как-то там появится как мы все видим они не появились и очень очень много таких заявлений делалось и вот увидите это к

как мы все видим они не появились и очень очень много таких заявлений делалось и вот увидите это к чему это привело что те люди которые давали деньги они вот терпели там десять лет 15 лет а потом так как результатов не появилась наступила зима искусно интелекта все разочаровались и перестали давать деньги на искусный интеллект но при этом был наработан достаточно большое количество уже работающих систем были созданы первые чат-боты такой был под разговорный или зак такой робот кого можно

систем были созданы первые чат-боты такой был под разговорный или зак такой робот кого можно затронуть психолог который общался человеком там повторял за ним китая фразой задавал мне вопросы это выглядело достаточно естественно были созданы программа который например доказали все теоремы из школьного учебника геометрии то есть принципе что то была построена и это привело к тому что в принципе разработанный алгоритм удалось применить удалось применять не там узких областях деятельности например

алгоритм удалось применить удалось применять не там узких областях деятельности например для определения симптомов определения диагностировали заболеваний по симптом это привело к новому буму искусно интелекта это он возродился под названием экспертных систем или система основанных на знаниях но тоже не очень долго длился и концу 90-х фактически термин искусственно для стал ругательным то есть человек который говорил что я занимаюсь искусным интеллектом него все косо смотрели вообще было стыдно

который говорил что я занимаюсь искусным интеллектом него все косо смотрели вообще было стыдно сказать если достать и написано что занимаешься с интеллектом и то есть следа не посвящено искусно интелекта члена что твой статью не где бы не приняли ни в один журнал поэтому люди которые люди продолжали заниматься схожими вещами они стали называть то чем они занимаются машинному обучению и сегодня тоже как бы это фактически такой термин который описывает как так зонтик под собой очень много

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

здесь показана ошибка и мочи нет то есть на данных по классе на задачи по классификации карт картинок видно как эта ошибка уменьшалась и вот эти синие столбики это как бы традиционные методы которые были доннер и сетей и вот здесь вот это первый раз не россетти выиграл соревнования дал лучший результат на конференции и потом буквально за на четвертый год уже качества и и сравнялась касс качеством решение задачи человека и очевидно что сейчас мы наблюдаем такой ренессанс этого направления когда

решение задачи человека и очевидно что сейчас мы наблюдаем такой ренессанс этого направления когда глубокие не растите показывают впечатляющие результаты как в области компьютерного зрения в области обработки естественного языка в области обучения с подкреплением и фактически это привело к тому что люди снова стали возвращаться к термину искусный интеллект и более того даже говорят о так называемом и джай это artificial general intelligence то есть это общий или универсальный искусно интелекта

и джай это artificial general intelligence то есть это общий или универсальный искусно интелекта есть такой искусный интеллект который обладает способностью научиться всему чему угодно и там ну знаете такие компании как deep mind или вот есть другая компания опытный и они напрямую декларируют да что мы ведем исследований мы занимаемся джай и это наши цели мы вот к этому стремимся они уже не боятся это говорить хотя до сих пор я думаю достаточно много следуя делятся на два лагеря те кто готов

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

он продлится пока только до растает и давайте теперь поглубже разберемся что же такое глубокое обучение искусно нейронная сеть это основная технология на которой сегодня основан искусственно интеллектом я бы хотел начать с такого ролика это ролик про то как работает мозг чтобы было понятней когда будут нейронные сети сейчас я запущу и попробую прокомментировать все так просто секундочку так что мы здесь видим на экране сейчас это лабораторный мышь линии мышей называется 757 black 6 почему black

здесь видим на экране сейчас это лабораторный мышь линии мышей называется 757 black 6 почему black вы видите черные вот мы шли на которых исследует мозг это именно такие черные мыши это череп мыши это мозг мыши мозг состоит из таких крупных отделов здесь мы видим тета кора сверху это давайте луковицы это подкорковые структуры сзади мужичок а вот этот гиппокамп как это такая структура мозга который отвечает за эпизодическую память то есть за память о конкретных событиях пока by есть такая

который отвечает за эпизодическую память то есть за память о конкретных событиях пока by есть такая область называется зубчатой фаз и в частности эта область очень важна для того чтобы мозг отличал очень похожие события он выискивал какие-то признаки которые отвечают два очень схожих события это компьютерная визуализация но она примерно отображает анатомическую структуру мозга и но общество по числу клеток и примерно как это выглядит в реальности вообще там в мозге мыши несколько сотен

по числу клеток и примерно как это выглядит в реальности вообще там в мозге мыши несколько сотен миллионов клеток в мозге человека порядка 80 миллиардов нейронов здесь мы видим клетки гранулярными слой запустив осы и вот это каждая отдельная клетка вспыхивающие это нейрон нерон состоять из трех частей если посмотрим один не ром у него есть тело клетки этот шарик круглый слева это так называемое дендритные дерево а справок сон вот это дендрит на и дерево это как бы вход нашего нерона это то

дендритные дерево а справок сон вот это дендрит на и дерево это как бы вход нашего нерона это то через что нейрон чувствует что делают другие нейроны axon это выход нерон это то через что он посылает сигналы другим неровных сети здесь вот видите зеленые таксоны из другой области мозга и сын тринарный коры и неровный центр анальные кары посылают сигналом нейронов гламура в гранулярный слое гиппокампа как как происходит взаимодействие с клетками в реальном может видеть такие акки как бы

гиппокампа как как происходит взаимодействие с клетками в реальном может видеть такие акки как бы вспыхивает вот этот аксон это значит что по нему подбегает электрический разряд когда этот электрический разряд пробегают приводит к тому что из него выбрасываться определенные химические вещества видите здесь такие маленькие зелененькие точки плавают и это шарики в которых находится нейромедиатор это вещество которое служит для передачи сигналов между нейронами когда клетка разряжается происходит

вещество которое служит для передачи сигналов между нейронами когда клетка разряжается происходит пробегает электрический разряд по поверхности то эти шарики выбрасываются в межклеточное пространство и 2 клетка то который принимает сигнал она вот здесь вот на ее поверхности есть специальные молекулы рецепторы которые могут чувствовать другая запах который выделяется другая клетка теньке вмешательства которые выделяются для того чтобы лучше чувствовать нейрона в процессе обучения формируют так

которые выделяются для того чтобы лучше чувствовать нейрона в процессе обучения формируют так называемые синапсы это вот это уплотнение контакт вы видите образовался 2 место где мембраны клеток склеиваются чтобы лучше ощущать сигнал который одна клетка передают другой до значит вопрос был такой сколько входов может быть у нерона от скольких нейронов он может чувствовать нескольким неровным он может передавать ответ такой что в принципе в реальном мозге клетка в коре может получать вообще

он может передавать ответ такой что в принципе в реальном мозге клетка в коре может получать вообще связано с порядка 10 тысячами других клеток то есть она может чувствовать сигнала от десяти тысяч других клеток ну и как бы соответственно передавать он тоже может большому объему клеток просто так своему можно несколько миллиметров тянутся даже одного полушария в другое и в принципе может выбрасывать сигнал на там сотни тысяч клеток ну или на десятки сотни клеток ну в зависимости от такой тип

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

ответ на этот вопрос мы знаем что в процессе обучения вот эти вот связи между нейронами они новые устанавливаются и нейроны начинают реагировать другим образом это значит что сеть как бы перестраивается в процессе обучения сложный вопрос потому что при машинном обучении с учителем вам говорят что правильно и что неправильно тренировочный ну а как бы вы его в 2 откуда вы знаете что отчего над отличать но как бы откуда у лейбла возьмете вас этом нету в реальном мозге такаси врожденное откуда в

но как бы откуда у лейбла возьмете вас этом нету в реальном мозге такаси врожденное откуда в этом как бы загвоздка в общем там существует и чем эта над этим можно сделать отдельную лекцию может после кто к закончить она будет вопрос еще я отвечу давайте пока теперь мы значит перед нами стоит задача смоделировать вот то что я сейчас мы увидели на видео как мы это будем делать вот смотрите вот наша схема нашего не рода которым там показывали тело клетки вход обрaтные дерева и выход сейчас вы мне

схема нашего не рода которым там показывали тело клетки вход обрaтные дерева и выход сейчас вы мне поможете построить математическую модель вот эти вот x 1 x 2 x 3 x 4 x 5 то что у нас будет кодировать кто скажет входные данные переменные а вот ну возвращаясь этому ролику это будет соответствует чему смотрите x1 это что будет один сигнал откажут кому да до 117 как бы одна связь между одним нейроном и другим а величина этого сигнала что это этой переменной что будет означать силу сигнала до сила

и другим а величина этого сигнала что это этой переменной что будет означать силу сигнала до сила сигнала а что как бы сила сигнала в реальном мозге пропорционально чему нет потенциал это как бы либо ноль либо 1 а здесь я x это может быть некоторая величина там концентрация медиаторов правильно то есть чем как бы больше медиаторов мы выбросили тем сильнее сигнал которым 3d да мы можем измерить как-то мозге это нужно измерить при помощи там хитрых способов очень тоже там очень маленький объем и

мозге это нужно измерить при помощи там хитрых способов очень тоже там очень маленький объем и если вы все представить а вот эта вот размеру то твои это клетки это порядка там 50 микрон один синапс это там нанометры очень маленький хорошо от нас есть x 1 x 2 x 3 x 4 5 это грубо говоря сколько нейромедиаторов эти нейроны выбросили в данной конкретной синапс правильно потом у нас есть куда попадает этот нейромедиатор поскольку он выброшен да вы попадают в межклеточном пространстве оттуда на

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

для данного химического вещества то сколько бы на этого химические вещества не лили ну как бы нерон ничего не почувствовать то есть чему пропорциональных так число что оно моделирует вот этот лес чувствительность до количество рецептов этот вес равен нулю то вне за 700 как узи fix этот вход никакого влияния не окажет на нейрон с другой стороны если вход 0 а здесь дофига рецепторов то тоже никакого влияния не будет средством ушла говорим ну тогда понятно а теперь давайте мы это просто все

влияния не будет средством ушла говорим ну тогда понятно а теперь давайте мы это просто все просуммируем и получается такая модель мы перемножаем концентрации на количество рецепторов то есть чем больше рецепторов и больше концентрация тем сильнее данный вход оказывает влияние на активность нашего нерона вот мы все просуммировали здесь вот это вот и получили грубо говоря текущие суммарное воздействие всех входов на наш нерон затем нероном в принципе действует как некоторый такой бинарный

всех входов на наш нерон затем нероном в принципе действует как некоторый такой бинарный элемент он либо разряжается либо нет либо посылает сигнал вниз по аксону ли мне посылает и нам нужно смоделировать каким-то образом эта нелинейность то есть он либо активен для меня активен для этого используются определенного вида функции но вот самая классической паровой функция такая гладкая паровой функция это 7 берем этот аргумент у нас есть смещение потому что у нейрона в принципе есть так называемый

это 7 берем этот аргумент у нас есть смещение потому что у нейрона в принципе есть так называемый потенциал покоя который не дает ни ром спонтанным спонтанно разряжаться а задает некоторый порог после которого нейрон срабатывает и соответственно вот эта вот вся вещь определяет то дает ли нерон спайк ли потенциал действия или нет но ответьте мы с вами смогли построить модель нейрона понятно это некоторая переменная которая позволяет нам сместить порог и сказать при каком пороге наш мир он

это некоторая переменная которая позволяет нам сместить порог и сказать при каком пороге наш мир он становится активен ну точно же в процессе ну для неровно фон есть кое-то определенные если мы эта моделируем там можем выучить например так чтобы наше нерона реагировали только при в тот момент когда сумма превосходит увеличен до 7 до потому что ну это как бы такой гладкой аппроксимация пороговых функция нет это обычно сегмент она как бы это значение которое распределенного между нулем и единицей

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

мы построим кит нейронов сетчатки потом добавляем следующий слой нейронов где-то глубже зрительной коре потом и щеки тонированы там гиппокампе кит не рынком дальше будет у нас моторной коре и дальше мужички соответственно у нас некоторые сигнал который приводит к разряду этих нейронов эти неровно посылаются на лайте мы этим и так далее вот мы таким образом задали нашу нейронную сеть соответственно активность нейронов она нам даёт наши вектора x веса определяет то какой нейрон когда срабатывает

активность нейронов она нам даёт наши вектора x веса определяет то какой нейрон когда срабатывает теперь значит законный вопрос а откуда мы вообще то телеса возьмем не то есть понятно что зависимости от током и тениса зададим так такую функцию преобразования нашего сигнала и получен и для каждой конкретной задачи это функции преобразования будет разная и как раз нам это нужно подобрать веса так чтобы решить какую-то одну конкретную задачу есть как раз мы приходим не которому такому как бы

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

шаги которые нужны для того чтобы задачи решить до а если вы делаете не раз сеть который решает задачу вам не нужно знать решение задачи вам нужен от лишь примеры правильного и неправильного решения задачи имеете примеры и алгоритм обучение сети вы можете обучить ваша нейросеть решать эту задачу при этом вы сами как бы вам не нужно разбираться во мне нужно знать как как конкретно задача решается вы просто решаете некоторый алгоритм да на выходе получаете который ваши раза чаще понятно непонятно

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

думать и придумывать алгоритму там который будет сказать если есть зеленый цвет у это огурец если есть красный цвет помидор с ли форма такая-то и такая-то то для огурцов с помидорами возможно вы напишете такой алгоритм но если у вас таких объектов там десятки тысяч то написать алгоритм который будет все хорошо различать очень сложно вот таким набором правил и эвристик вы хотели бы иметь алгоритмов которые вы просто подойдите эти примеры правильно размечены и он сам обучиться их будущей примеры

которые вы просто подойдите эти примеры правильно размечены и он сам обучиться их будущей примеры которых он никогда не видел правильно различать да то есть по сути обучения это подбор перебором подбор вот этих коэффициентов которые влияют на то насколько сильным будет реакциям какие-то конкретные выходные данные да но не перебором а сейчас я объясню как то смотрите как мы ставим задачу в этом случае как ставится задача обучение нейросети у нас есть как как я сказал некоторые обучающая выборка

как ставится задача обучение нейросети у нас есть как как я сказал некоторые обучающая выборка это примеры того как пример решение нашей конкретной задачи то есть данном случае если мы говорим про огурцы с помидорами вот это у нас фактически не рода первого слоя кодируют яркости пикселя картинок то есть нас есть например картинки 300 на 300 с огурцами и помидорами вот мы есть три канала rgb вот мы взяли 300 на 300 rgb 300 умножить на 300 умножили на 3 это у нас будет столько нейронов входного

мы взяли 300 на 300 rgb 300 умножить на 300 умножили на 3 это у нас будет столько нейронов входного слоя и пропорционально яркости они будут у них вход меняться соответственно а на выходе у нас будет 2 класса помидоры и огурцы как мы будем поступать но сначала так как мы не знаем как только какое решение нашей задачи мы просто случайным образом задаете леса и начинаем подавать на вход картинки подает значит например картинку помидора наша сеть что-то вычисляет по случайным и самым и в дает

подает значит например картинку помидора наша сеть что-то вычисляет по случайным и самым и в дает ответ огурец тоже самое ну понятно что скорее всего да она будет с равной вероятностью выдавать огурцы помидоры на все картинки и не будет решать нашу задачу потому что в ней нет никакой как бы то как мы задали vesa никак не скорее равана с реально с тем какие лэйбл присутствует но мы-то знаем да что как и какие картинки правильно какие нет таким образом мы как бы можем вычислить когда наша не

что как и какие картинки правильно какие нет таким образом мы как бы можем вычислить когда наша не россия ошибается когда она не ошибается и вот эту информацию использовать для того чтобы подстроить леса давайте сейчас придумаем как это делается при помощи такой съемки судам подаем помидор огурец если здесь у нас один это скажем огурец а если ноль то должен быть помидор вот мы подаем на вход картинку начинаем рассчитав да у нас есть как бы прямое распространение нашим серенад под по тем формам

начинаем рассчитав да у нас есть как бы прямое распространение нашим серенад под по тем формам который у нас были для нашего нерона подсчитываем активности всех нейронов получаем какой-то ответ да y скажем это наш выход нашей сети которым получить для данного конкретного примера какое-то значение z это то что мы должны были получить если у нас y и z совпали то есть мы предсказал наша сеть предсказал что это огурец и это был действительно огурец это значит нам нечего весах менять не надо наша

что это огурец и это был действительно огурец это значит нам нечего весах менять не надо наша сеть правильно класть данный пример но вот если оказалось так что сеть должна дать выход единицу дала например 02 азат равно единице это значит что как бы нам нужно скорректировать веса как мы это можем делать но очевидно что мы можем сразу почитать ошибку даттон и то есть насколько носить ошиблась это дельта до z минус y наша ошибка наша сеть ошиблась на 08 да хорошо что мы дальше будем делать это

дельта до z минус y наша ошибка наша сеть ошиблась на 08 да хорошо что мы дальше будем делать это ошибка какие есть гипотезы и предположения о том как нам поменять вот эти вот то есть мы что хотим мы же хотим понять да кто кто как вообще не ошибался какого-то отнять поменять немножко весам точно александра смотреть ну а детерминированная можно как-то это сделать дать логично порассуждаем вот смотри вот это ошибка над куда делась от двух предыдущих да у нас есть два нейрона средства как бы тогда

вот это ошибка над куда делась от двух предыдущих да у нас есть два нейрона средства как бы тогда нам и что думаем мы можем тот ошибку наверно разложить по этим двум неровным какую-то ошибку будем раскладывать пропорционально wisan до той горе где больше был вес там скорее всего больше больший вклад в ошибку из этого неровно пришло еще пропорционально чему ну представьте вот нерон был его активность была равна нулю а вес здесь был огромный он кого-то вклад в ошибку внес или нет ну значит как бы

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

в этот вклад в ошибку также вот для этих нейронов правильно потому что у нас у для этих двух есть посчитали теперь ошибки для этих весов то есть мы как бы ошибку распространили назад этот алгоритм поэтому называется алгоритм обратного распространения ошибки посчитали бог про побежит мы почитали ошибку и чуточку раз посчитали эту ошибку для других нейронов дальше мы начинаем делать вот такие вот вещи мы начинаем теперь менять вес и изменения веса у нас новое значение веса равно старое значение

вещи мы начинаем теперь менять вес и изменения веса у нас новое значение веса равно старое значение веса плюс некоторые коэффициент который показывает то насколько мы должны научиться плюс ошибка коэффициенту нужны на ошибку которую мы посчитали умноженное на активность этого элемента который мы знаем да еще на производную а почему мы умножаем здесь на производную кто может стать зачем нам нужно жить на производство то есть поэтому там этом сказали что это сколько этот вклад в ошибку это значит

на производство то есть поэтому там этом сказали что это сколько этот вклад в ошибку это значит мы по персонал этому вкладу ошибку и пропорционально активности еще на производную зачем-то до а можно еще раз проезжал а производная показывать скорость возрастания или убывания вот здесь очень ценные замечания вот и мы приходим к тому что тут от производной очень важная штука это направление потому что мы должны знать нам увеличить вес или уменьшить зависимость а какая производная мы будем либо

что мы должны знать нам увеличить вес или уменьшить зависимость а какая производная мы будем либо увеличивать вес либо уменьшать производных это наш акцию активационной функции ну вот смотрите мы с вами теперь знаем самый базовый алгоритм обучение нейросетей то алгоритм обратного распространения ошибки он был так придумано потом на самом деле он сводится к там к вычислению просто градиентов по всей сети градиента ошибки по всей сети через частные производные как здесь написано и используется

всей сети градиента ошибки по всей сети через частные производные как здесь написано и используется уже в текущих методах немножко другим способом он рассчитывается не по одному примеру а мы берем сразу целый набор примеров который называется батч например мы берём 10 примеров для каждого из примеров мы рассчитывали все градиенты и уже усредненные градиент используем для того чтобы обновить леса это дает лучшую сходимость этого методы называется стохастический градиентный спуск вот поразительно

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

это удивительно но что в подавляющем большинстве случаев он все-таки позволяет сходиться и находить правильное решение это очень удивительный факт как все это работает ну вот значит мы обновили все весах и наша сеть стала ближе как обычному варианту здесь пример того зоопарка нейросети который уже там сегодня существуют есть разные ничто не буду все перечислять разные разные варианты того как можно строить не раз сеть и это обычно архитектура нейросети зависит от того какой задачу мы решаем

можно строить не раз сеть и это обычно архитектура нейросети зависит от того какой задачу мы решаем сейчас мы краз рассмотрим основные типы задач которые лежат области глубокого обучения сегодня машинного обучения сегодня почему сегодня этот мед называется глубокое обучение предмет обучения сетей общага ритм обратном распространение ошибки он был открыт можно сказать изобретён в 70-х годах но стиль да ну давай расскажи боже и всегда приятно как-то его дитя можете рассказать может быть это

стиль да ну давай расскажи боже и всегда приятно как-то его дитя можете рассказать может быть это связано с тем что поскольку вот у нас появился граф вот этих несите чем глубже этот граф тем соответственно тем сложнее стране стоить это не рашить и поэтому называется глубокое обучение то есть мы сейчас пытаемся сделать сложные вещи простыми какими-то методы и соответственно строим графы граф этот графический метод и получается такой вот огромный поэтому глубоком обучении не звонок как раз с

графический метод и получается такой вот огромный поэтому глубоком обучении не звонок как раз с видимо там кто-то фанаты звонит правильно говорят ответил но так и есть да то есть суть какая была что несмотря на то что это мент изобрели давно но вычислительных мощностей и данных не хватало что тренировать большие сети и сети были там два три слоя в основном и поэтому их результаты они были сопоставимы с другими методами машинного обучения но когда оказалось что игровая индустрия очень сильно

с другими методами машинного обучения но когда оказалось что игровая индустрия очень сильно помогла индустрией искусственного интеллекта и машинного обучения за счет того что она привела к разработке и массовому производству графических ускорителей а графические ускорители они замечают над тем что они могут быстро перемножать большие матрицы и раз мы видели у нас фактически для вычислений нейросети нужно привязать принажать просто большие матрицы где у нас есть леса где у нас есть активации

нужно привязать принажать просто большие матрицы где у нас есть леса где у нас есть активации просто одном другой перемножаем складываем и получаем ответ то оказалось что можно рассчитывать гораздо большие сети при помощи графических ускорителей и тогда люди стали больше слоев использовать больше обучающей выборке и это привело к тому что как мы видели на картинке с историей что не раз сети стали давать отличные результаты это привело к новому выпуску интеллекта и как раз то что в них много

давать отличные результаты это привело к новому выпуску интеллекта и как раз то что в них много слоев как бы не россии стали глубже и поэтому получилось название deep линий или детьми run it looks глубокие не россетей обычных не расти какие три направления сейчас я вам про про которые расскажу это компьютерное зрение рекурентные нейронные сети и обучение с подкреплением это может хоть основные направления в современном современным машину обучения начнем с машинного зрения со съёмочных нейронных

в современном современным машину обучения начнем с машинного зрения со съёмочных нейронных сетей что такое svetka здесь приведены определение свертки но на самом деле это очень просто представьте что у нас есть две функции f и жив и мы хотим найти как бы мы сдвигаем друг относительно друга хотим найти тот сдвиг при котором эти функции максимально совпадают как мы будем действовать но очевидно что он один из самых простых способов мы берем и для разных сдвигов перемножаем все значения функции

он один из самых простых способов мы берем и для разных сдвигов перемножаем все значения функции складываем то есть вы видите если эти две функции не совпадают вот смотрите здесь то значит их произведение будет равно нулю если их там где они ну отлично ну вот этот уровень базовой от a0 до поэтому вот связка этих двух функций f звездочка жида она равна нулю вначале в какой-то момент появляется такой сдвиг когда ничего пересекаться соответственно искать значение которые этой области произведение

сдвиг когда ничего пересекаться соответственно искать значение которые этой области произведение к сумму произведений которых вот это вот фактически площадь она ну да и такое значение но сначала функции свёртки начинает расти расти расти растет она достигает максимум когда у нас эти две функции максимально прикрываются и после этого она начинает опять спадать когда эти функции разъезжаться и оказалось что вот такие как бы свертки очень хорошо очень удобно использовать для обработки

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

на нашем изображении кто нам хочется на поговорить и сейчас то есть что у нас есть у нас есть наша картинка и мы можем значение задачи на задать не эту функцию свертки в простейшем случае мы говорим что у нас есть такая такая свёртка 3 на 3 значит мы знаем 9 весов мы потом эти девять весов мы что делаем мы берем как бы прикладываем нашу нашу свёртку это окошко суда перемножаем значение яркости пикселей найти vesa и складываем и это будет выходом нашего мира у нас как бы есть один нейрон у этого

найти vesa и складываем и это будет выходом нашего мира у нас как бы есть один нейрон у этого нейрона есть 9 весов и мы как бы начинаем вот этим нейроном сканировать нашу картинку двигаясь по одному ряду пикселей ну или там по два ряда вот этот параметр нашего алгоритма и сканируем всю картинку и получаем так называемую карту признаков то есть мы смотрим где на картинке если там высокие значения нашему нерон это значит что в этом месте находится некоторая область изображения которые очень

нашему нерон это значит что в этом месте находится некоторая область изображения которые очень похожи на нашу свёртку на таким образом можем всю картинку просканировать и получить карту признаков очевидно что он может быть много таких нейронов точно много разных наборов не софт весов много разных фильтров при помощи которых мы нашу картинку будем сканировать и тогда мы получим много разных карт для каждого признаком будем иметь свою карту а теперь представим что это входной слой нашей нейросети

каждого признаком будем иметь свою карту а теперь представим что это входной слой нашей нейросети и мы можем при помощи алгоритм обратного распространения ошибки подстраивать эти леса таким образом чтобы они помогали нам все лучше и лучше пластифицироваться изображения вот так вот именно и работают свёрточная сети вот смотрите у нас есть например задача классификации знаков в данном случае ограничения скорости на вход подается картинка 32 на 32 чёрно-белое после того у нас есть 4 в данном

скорости на вход подается картинка 32 на 32 чёрно-белое после того у нас есть 4 в данном случае там сверточек 4 свертки мы получаем карту признака для каждой свертки потом обычно для того чтобы получить признаки на большем масштабе изображения используется операция потому что понятно что дано что на картинке у нас в принципе может быть там яблоко большого может быть яблоко маленькая мы все хотим определять есть на картинке яблок или нет здесь день независимости толково ну размера грубо говоря

определять есть на картинке яблок или нет здесь день независимости толково ну размера грубо говоря мы начинаем мы сжимаем нашу карту признаков например в два раза по каждому измерению и снова проходим с другими фильтрами которые мы выучили получаем еще больше разных карт признаках снова сжимаем и потом это подаем уже на полна связанную сеть вот с такими нейронами 7 дальний функция активации и на выходе у нас есть классификатор который выдает первый выход например говорит предсказывать

и на выходе у нас есть классификатор который выдает первый выход например говорит предсказывать вероятность того что у нас там есть вообще знак на картинки вот эти неровно предсказывают как какое значение ограничение скорости на этом знаке 30 50 60 70 80 90 или 100 а вот и вот теперь это все подавая картинки мы можем обучать так работают святочные нейронные сети что какие задачи при помощи этого можем решать но понятно что первая задача это задача нахождения объектов на изображении до кран там

можем решать но понятно что первая задача это задача нахождения объектов на изображении до кран там человек разметки за сегментации изображения где дорога здания небо потом ну если вас есть большая доза к большая база данных с картинками по пол и возраст у человека мы можем нашим не раз сеть ну размести обучить предсказывать возраст и пол потом картинкам предсказывать пол возраст по возрасту эмоции то есть нас мы разметим данные напоим к тому как эмоциональный человек прочитать поражает эмоциям

то есть нас мы разметим данные напоим к тому как эмоциональный человек прочитать поражает эмоциям эмоции размечать то есть мы уже чувствуете какие задачи сегодня могут решать неровной сети уже фактически решают потому что это там скриншоты трехлетней давности из облачного сервиса microsoft которым он мог уже как сервис решать вот такие задачи но можно делать и более хитро интересные вещи вот с подобными нейросетями например переносить стиль с одного изображением другое почему это возможно как

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

при помощи одной операции можем выставить содержание картинки то есть что вот эти картинки значит и значит вот если мы вот берем только вот эту информацию с тех наших картах признаков которые есть мы можем в принципе восстановить полностью практически с более менее хорошим качеством содержания картинки то есть вся информация о картинке она находится вот в этих вот признаках она никуда не делась но с другой стороны также можем и вы становитесь сами признаки без отношения к содержанию вот у нас

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

как бы вот это вот скажем содержание а вот это признаки мы теперь на содержание представляем вот такими признаками до да итак 1 но это статья там не знаю трехлетней давности которые придумали люди такой метод вот видно что вот-вот мы берем типа вот стиль вот этой картины берем фотографию котика и делаем картину с котиком вот как это работает можем делать такие вещи как например обучить нашу не россия читать по губам очевидно что у нас есть субтитры есть видео да как человек что-то говорить

россия читать по губам очевидно что у нас есть субтитры есть видео да как человек что-то говорить соответственно вот мы можем построить такой классификатор который предсказывает там буквы последовательности символов зависимости от того что посредственность кадров он получает классно да следующие вещи такого плана представьте что у нас аудиосигнал не слышали о нет смысл такой что сейчас все четыре головы говорят одно и то же то есть что-то lga ритм сделать он позволяет взять видела вы из и

головы говорят одно и то же то есть что-то lga ритм сделать он позволяет взять видела вы из и сделать так что видео головы говорил не мой напарник он как бы просто самом реально это реально к тайскому боксу говорит ну понятно что мы можем снова речь как раз как большие просторы здесь как сделаны просто взяты видео раббана который чтобы говорить и это видео подлинную на фоне россия также подлинно на другой вход это не расти подано звуковой файл которая это голова должна сказать и на выходе

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

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

то есть мы можем представить вот это вот состояние внутри сети в виде вектора и например если мы подадим на вход сети три картинки вот такого мужчины в очках мы получим какое-то представление вектор для каждой из этих трех картинок потом мы эти лектором можем усреднить и восстановить по получившимся к этому вот этому усредненному вектору изображением видите вот как бы человек который не существовало являются усредненным изображением вот этих трех тоже самое можем сделать для человека без очков

являются усредненным изображением вот этих трех тоже самое можем сделать для человека без очков да вот были три вектора мы их у соединили получили картинку человека без очков женские лица 3 лица женщины у соединили получили восстановленные лицо которое когда не существовало которое ну как бы промежуточное среднем этих трех векторов но интересно что у нас получился три вектора мы теперь можем что сделать можно взять вектор мужчины в очках вычесть и него вектор мужчины без очков и прибавить

что сделать можно взять вектор мужчины в очках вычесть и него вектор мужчины без очков и прибавить вектор усредненные женщины а потом попал по результату вот этого сложения и вычитания векторов мы восстановим картинку и получается что при восстановлении у нас оказывается окажется лицо женщины в очках понимаете да то есть лицо в очках вычли мужчину добавить женщину получил женщин очках вот такой вот хак то есть мы как бы специально не активировали под эту процедуру но она как бы вот это вот

вот хак то есть мы как бы специально не активировали под эту процедуру но она как бы вот это вот пространство в котором эти вектора находится on обладать таким свойством что такие операции с векторами в нем обладает некоторым осмысленным результатом что вообще на самом деле очень удивительно даже что было бы если между двумя мужчинами стоял бы плюс даже боюсь предположить софтом получилось получился были аргумент супермужчина умноженный на 2 я не знаю это интересный вопрос может не знаю так

были аргумент супермужчина умноженный на 2 я не знаю это интересный вопрос может не знаю так окей сейчас мы прошли часть которая в которой мы рассуждали про компьютерное зрение переходим к следующей части связанные с рекурентные не раз сетями мужа где-то час путешествуем по обучению погружаемся глубокое обучение какие-то вопросы может комментарии для такого небольшого росла бочка можем я могу по отвечать да на данный момент на данный момент на ваш взгляд какая нейронная сеть самая продвинутая

отвечать да на данный момент на данный момент на ваш взгляд какая нейронная сеть самая продвинутая самое интересное самое долго дольше всего над ней работали делающие самые прикольные результаты которые можно показать все таки они ровно сеть но это очень сильно зависит от области в которые вы работаете я могу назвать из области обработки текста потому что я работаю с текстом там есть такие модели называется трансформер там есть модель брт роберта который это генерирует всякие трансформер excel

называется трансформер там есть модель брт роберта который это генерирует всякие трансформер excel который генерирует очень длинные тексты то есть в них можно подарить затравку она будет генерировать как бы продолжение текста и могут сумасшедшие вещи сейчас мы посмотрим примеры еще вопросы по поводу того что мы сейчас картинки рассматривали вот то что мы отнимаем как бы от вектора мужчины с очками вектор мужчины без очков в итоге мы получаем очки даст мне интересно как это именно на практике то

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

и то же модель просто у нее сформировалась некоторое внутреннее представление которое разное для разных классов изображения до этому искать что-то а-ля такой внутренний набор признаков так еще вопросы достаточно конкретный вопрос это когда мы только-только вот изучали не ищите до в голове вот мыши и посмотрели на картинку на и россетти как она выглядит представление компьютера в стране компьютерных систем путь до ее будь то есть никак не связаны замкнуто действительности в ряде голове у нас той

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

есть к эта последовательность и мы хотим предсказывать следующий член последовательности что у нас получается что вот xt это состояние нашей последовательности в момент времени t и мы этим можем кент образом посчитать это а этот много слоев нашей сети или один слой нашей сети и мы как бы просчитываем выход видно что когда мы изменим xt то есть макрос двинемся по наши времена последовательности получу на вход другое значение входное то другой например снова который видит наше ниро сеть то выход

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

в тексте связаны друг с другом они не независимо друг от друга и как мы можем это решать для того чтобы решить эту проблему люди попытались добавить в нейросеть память как мы это можем сделать действительно как как как мы это можем соединить что с чем конец сначала в общем мы можем мы можем то сделать да мы можем взять выход нашей нейронной сети на придут в момент времени t и подать его наше состояние наших нейронов и подать его как вход в момент времени t + 1 то есть таким образом мы как бы

наших нейронов и подать его как вход в момент времени t + 1 то есть таким образом мы как бы заставляем сеть смотреть не только то что она видит как бы из внешнего мира до следующее слово но и свое собственное состояние в предыдущем от времени понятно да и таким образом теоретически она может бесконечно помнить . это нейрон там залип сто шагов назад и все время активен и говорит какой-то признак тогда встретился и сеть всегда видит что этот признак был сто шагов назад потенциально да это

тогда встретился и сеть всегда видит что этот признак был сто шагов назад потенциально да это называется рекурентные нейронные сети вообще на самом деле если мы теперь эти рекурентные нейронные сети мы их на самом деле можно представить себя как сеть прямого распространения как не рекурентные но просто ее глубина этой сети чему будет равна кто скажет единички не не единичные количеству чего количество шагов ты смотрите нас в моем времени x0 мы стартовали вот наша нейросеть прошло очень 0

количество шагов ты смотрите нас в моем времени x0 мы стартовали вот наша нейросеть прошло очень 0 посчитали вот это вот пошло на вход следующий это просто на вход есть мы видим почему как бы нашу сеть глубокое положили на каждый слой мы сделали вход от другой момент времени от каждого последнего на это времени а первый момент времени сигналом как бы вот так вот идет по 2 цель еще вот так вот да добавляется сюда и протекает назад от обратной стороне ошибки т.е. если мы так сделаем в чем проблем

сюда и протекает назад от обратной стороне ошибки т.е. если мы так сделаем в чем проблем к оказывается как люди начали делать увидели что очень фигово учиться почему потому что ну во первых сам сигнал затухает понятно что мы когда каждый раз прибавляем что то новое вот то что здесь было она постепенно ну его в клан все меньше и меньше и меньше и меньше чем больше глубина timage клан чем меньше вклад тем как бы меньше будет вклад в эту ошибку который в конце посчитали она еще обратно

меньше вклад тем как бы меньше будет вклад в эту ошибку который в конце посчитали она еще обратно распространяется и в общем все это этот градиент не выучиваются и есть такой гениальный человек его зовут юрген уже швейцарии по мере муж нет хубер и он 90 годах придумал вот такой замечательный штуку он сказал вот у нас есть неровные сеть а мы теперь давайте придумаем как будто бы ячейку памяти на нейронах то есть представлять человек ячейку памяти на нейронах и назвал его очень странном

на нейронах то есть представлять человек ячейку памяти на нейронах и назвал его очень странном аббревиатурой well as them it all like short-term memory workshop длин длинная длительная кратковременная память что там это кратковременная вот эта такая схема как бы 1 круга расколдовать и один нейрон заменим вот на такой вот штучку нас было 100 нерон в теле вместо как каждого из этих то неровно будет вот такая вот вещь страшно да выглядит но на самом деле очень простая часам объясним вы поймете ну

вот такая вот вещь страшно да выглядит но на самом деле очень простая часам объясним вы поймете ну по крайней мере пока я буду объяснять вы будете понимать о чем я говорю я не знаю насколько вы сможете воспроизвести но после если пару раз подумайте сможете смотрите мы говорим у нас есть ячейка памяти в этой ячейке памяти хранится значение какой-то просто скалярное число и мы называем c ну там этот черный мнение показывать наше значение она как бы нам пришлось предыдущем такте только на нашей

черный мнение показывать наше значение она как бы нам пришлось предыдущем такте только на нашей ячейки хранится также что поступает на вход нашу ячейку наша на вход на шевченко поступает текущей вектор вот эти наши x и и так же поступает на вход ячейки старое значение выхода всех ячеек на предыдущем от времени это вот та информация которая будем оперировать что мы хотим делать мы хотим как произвести какие-то манипуляции с тем значением которых хранится память и что мы с ним можем сделать

какие-то манипуляции с тем значением которых хранится память и что мы с ним можем сделать первое мы можем стереть что там находится да ну самое простое как мы это будем делать но мы возьмем один нейрон в этого нейрона есть входа от икса если всходы от всех ну как бы от нашего скрытого состояния на предыдущем такте времени и посчитаем итог нашу segno еду и на случай за какое-то значение до на которые мы умножим то что нас хранится в памяти если это значение 0 по морю из памяти сотрёт значение 1

мы умножим то что нас хранится в памяти если это значение 0 по морю из памяти сотрёт значение 1 тонна в памяти ничего не изменит то есть таким образом мы можем выучить vesa для этого контроллера чтобы он мог сам знать когда ему надо что-то из памяти стереть это не надо стирать и это называется fucked gate то есть тот затвор который стирать значение памяти первая операция это стирания из памяти вторая операция но мы что-то могли стереть могли нести теперь мы хотим что туда записать что для этого

операция но мы что-то могли стереть могли нести теперь мы хотим что туда записать что для этого делать для этого мы делаем две операции первое мы вычисляем то значение которое мы хотим записать опять же мы просто берем нейрон и по этим двум векторам рассчитываем или выход а также мы рассчитываем коэффициент грубо говоря как мы отмасштабируем вот это значение которое мы хотим записать в память мы их перемножаем и добавляем памяти к тому значение которое сохранится то есть эта операция запись эта

перемножаем и добавляем памяти к тому значение которое сохранится то есть эта операция запись эта операция как бы стирание это операция записи вот это вот эта сигнальная функция гиперболический тангенс [музыка] кто может сказать почему здесь сигнальная функция гиперболический тангенс это мой любимый вопрос и во всем задаю кто знает чем отличается 7 до кидать гиперболического тангенса области значений да ну и как правильно 7 до она не они не они принципе похожего между по форме гиперболический

да ну и как правильно 7 до она не они не они принципе похожего между по форме гиперболический тангенс а 7 до все моя голова значение лежит от нуля до единицы а у гиперболического тангенса угла значения от минус единицы до единицы теперь у нас есть все для того чтобы ответить вопрос который я задал почему вот здесь вот 7 дадите борьба лески танец исходя из нашей информации об области их значений близко до но только правильно неправильно я не права и консультировать ну вот смотрите в принципе мы

до но только правильно неправильно я не права и консультировать ну вот смотрите в принципе мы могли бы все время только добавлять в память и это было бы не очень арно устойчиво мы хотим как добавлять что-то в память так что то вычитать из памяти поэтому мы хотим чтобы вот выход вот этой функции был как бы мог быть как отрицательно так положительным понятно то что здесь будет 7 до мы сможем только что добавлять мы чтобы записали память теперь у нас есть значение памяти и мы хотим и зале памяти

что добавлять мы чтобы записали память теперь у нас есть значение памяти и мы хотим и зале памяти считать то есть мы стерли записали а теперь мы хотим считать то что в память хранится как мы это делаем мы берем вот это значение потом она гиперболический тангенс то есть принципе у нас выход личики может быть от минус единицы до единицы и есть коэффициент который говорит действительно хотим ли мы это прочитать элемент то есть если здесь моль то мы ничего не читаемость здесь я 1 единицу то мы

мы это прочитать элемент то есть если здесь моль то мы ничего не читаемость здесь я 1 единицу то мы считываем это значение и подаем на выход понятно как работает тело стен нет но я не буду еще раз повторять там на видео будет можно будет посмотреть в общем грубо говоря есть операция стирание записи и считывания значение из ячейки памяти все виз а вот этих вот нейронов фактически тут отдельные нейроны они ну это тоже они как бы обучаются тем же самым говорим об этом расстоянии ошибок и вот

нейроны они ну это тоже они как бы обучаются тем же самым говорим об этом расстоянии ошибок и вот например первая версия машинного переводчик гугла который был основан на нир сетях учился переводить он состоял вот с таких систем ячеек и их было там по-моему 16 слоев по несколько тысяч в каждом слове ну да это много это очень долго училась миллионы параметров но удивительно что все таки это все равно чему-то научилась и позволяла переводить сейчас уже другая архитектура пзл as them off но очень

чему-то научилась и позволяла переводить сейчас уже другая архитектура пзл as them off но очень интересно что даже такие сложные вещи алгоритм обратно и распространения позволяет выучить оптимизировать окей как это теперь можно применить на практике например если мы строим чат-бота и у нас есть примеры диалогов в данном случае это были субтитры фильмов что можем как можно поставить задачу смотрите давайте мы будем предсказывать следующий символ последовательности то есть у нас есть

смотрите давайте мы будем предсказывать следующий символ последовательности то есть у нас есть последовательность символов еще раз вас нет словаря у нас есть только 33 букву российского алфавита русского и знаки препинания и мы говорим у нас есть посредственность то символов и просим не раз сеть подав на вход 100 символов предсказать 101 да еще раз такая постановка задачи потом мы сдвигаемся на один символ про способ по сибирской следующий символ то есть как это работает мы в нашу не растить

один символ про способ по сибирской следующий символ то есть как это работает мы в нашу не растить подаем печь она предсказывает и мы это и подробнее на вход она предсказывает lmp2 на вход надо сказать а потом находим на предсказывать он прямо за мы получили сеть генерирование новых а логина да а теперь смотрите если мы ее там пару недель тройку мужчина субтитрах посимвольно словарями правил грамматики нет ничего нет и потом поступим научили мы начинаем поддавайтесь мортир мы падаем на вход ты

нет ничего нет и потом поступим научили мы начинаем поддавайтесь мортир мы падаем на вход ты глупый перевод строки и просим его продажи по символам она пишет как насчет придет в кавычках . а потом символ конец как будто следа ну да подошва микрофон интересно машина смотри мы добры сначала последовательность ты и пробел глыб и потом символ перевод строки а потом модель предсказывает к за главного мы эту к заглавную добавляем нашу последнюю нас последовательность двигаем и прочим опреска

мы эту к заглавную добавляем нашу последнюю нас последовательность двигаем и прочим опреска следующий буквально предсказывает букву а потом еще сдвигаем подъем на вход а просим поискать стрельченко она предсказывает к потому предсказывает пробел ну и так далее по символ да она предсказывает продолжение фразы как один не человек творит из как монолог или ответ как делал и лет никак насчитывается но вот мы когда ее учили у нас в учащимся то сети в конце каждой каждого как это по-русски то будет

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

ответ как насчет привет на вход подается какой чудесный вечер . не правда ли ответ ты действительно думаешь что я буду помнить об этом человек забавным это всего лишь программа никогда не сможешь мыслить продолжение конечно дело в том что сейчас наилучшее время ну то есть что меня здесь поражает я честно говоря это 12 2015 году это было сгенерировано когда я это прочитал я конечно был очень сильно удивлен на до сих пор удивляюсь что вообще не рассеется могла выучить ну серфа графе русского

удивлен на до сих пор удивляюсь что вообще не рассеется могла выучить ну серфа графе русского языка то есть она не ошибается видите все слова или менее как бы обязаны да ну как бы нас были данные мы разбили на тестовую сборку обучающую выборку на ну просто субтитры да это обычно субтитрах вот более того смотрите оно правильно ставит заглавные буквы и знаки препинания на грамматику смогла выучить но и в принципе предложение более менее если их по отдельности рассматривать они как бы не ну там

но и в принципе предложение более менее если их по отдельности рассматривать они как бы не ну там слова все согласованы до между собой да она сама ставит перевод строки до более того если поглубже копнуть вот например если мы возьмем она вероятностный генерирует вот эти буквы мы можем например подать одну строку 10 раз алисы теперь счастливы и попросить ее продолжить и вот здесь вот 10 разных продолжений этого предложения посмотрите тут в каждом предложении вот продолжение лист теперь счастливы

этого предложения посмотрите тут в каждом предложении вот продолжение лист теперь счастливы есть она но очевидно что как бы не раз сеть ну передает информацию там там поле того о ком идет речь в следующее предложение и на основании него стоит это предложение и более того здесь видно что содержание этих предложений коррелирует с сантиментам или с эмоциональной окраской первое предложение алиса теперь счастлива а второе предложение как будто бы объясняет почему она сейчас его посмотрите она

теперь счастлива а второе предложение как будто бы объясняет почему она сейчас его посмотрите она выглядит прекрасно да она была на концерте фаллудже то есть как бы вроде логично раз он такой хороший был концерт что она счастлива или там она великолепная я знаю что она влюблена в него есть вот она ведьма но вот если более-менее осмысленное например а когда она говорит я не говорю что когда она позвонит также видно на самом деле что очень сильно наше обучение зависит от того какие какая у нас

позвонит также видно на самом деле что очень сильно наше обучение зависит от того какие какая у нас обучающая выборка вот судя по так по тем результатом которые вот здесь мы видим и смотрите про алису мы прочитали примера теперь возьмем отрицательную эмоцию и про мужчин джон попал в беду да и будем делать продолжение смотрите сверхъестественные ваша честь это был ним и или свиньи собирают собираются в старлинг-сити и когда он вернулся я выбросил его в офис то есть видно что к степень вреда для

в старлинг-сити и когда он вернулся я выбросил его в офис то есть видно что к степень вреда для негативного sentiment у мужчин гораздо выше чем у позитивного сантименты и женщины кто может сделать выводы какие то этой выборке которые на которой не россия обучалась но то есть как бы очевидно что в той выборке которым обучали было гораздо больше данных с позитивными эмоциями и больше данных относящихся именно к женщинам они к мужчинам поэтому не россия могла лучше выучить лучше на брать

относящихся именно к женщинам они к мужчинам поэтому не россия могла лучше выучить лучше на брать статистику именно по таким случаем бабах а теперь мы переходим к самому суперскому чат-бота в мире но это не пантер конечно же как вы бендера кого тоже очень суперский вот есть другой чат-бот он изображен слева такой отчет с провода то есть нет справа подождите ба да все правильно бендер слева шоу ось или как этом little as vital bing это чем чат-бот созданный макрос утра сечения азиатским

шоу ось или как этом little as vital bing это чем чат-бот созданный макрос утра сечения азиатским подразделение microsoft research 660 миллионов пользователя по всем миру сравните с населением россии нами личку питекантроп в пяти странах он развёрнут 40 платформа поддерживает в среднем 23 реплики в диалоге но здесь другие примеры люди там и в колонках есть есть в соцсетях печати и так далее то есть реально чат-бот суперпопулярный что он может он обладает различными навыками вообще сложные

то есть реально чат-бот суперпопулярный что он может он обладает различными навыками вообще сложные диалоговой системы вот мы как раз занимаемся разработкой диалоговых систем они состоит из различных навыков каждый навык может быть либо какая-то модель машинного обучения либо это может быть скриптовый сценарий на правилах и у этого чат-бот очень много разных скилов не буду про них рассказывать например в частности он может шутить по картина если выкинуть в чат картинку или выражать как свое

например в частности он может шутить по картина если выкинуть в чат картинку или выражать как свое мнение вот ему кидаешь такую картинку а он генерирует реплику может мне помочь тебе подержать ее или вот такой опухшую ногу он говорит да действительно тебе так больно то есть он сочувствует пытается сочувствовать человеку здесь показана та как к насколько росло его качество что в четырнадцатом году это был в среднем 5 apple в диалоге в 15-19 1723 что происходит в процессе работает такой системы

это был в среднем 5 apple в диалоге в 15-19 1723 что происходит в процессе работает такой системы как я говорил она состоит из нескольких разных разговорных навыков и в процессе диалога бог переключаются между говорить им разными навыками то есть сначала часть сайт болтает потом отвечать на вопросы чатиться ищет картинки дать рекомендации отвечать на вопрос чатиться по идее вот алиса от яндекса на примерно таким же образом можно работать до картинки картинки сопровождались средствами что это

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

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

общаются здесь показан полчаса вой как быть чат с человеком и показано что вначале там человек был грустные данные потерянный а в конце он стал умиротворенные счастливый если кому интересно тут есть ссылки внизу можно почитать статьи вот такой замечательный чат-бот также можете снять стихий например ему на вход кидаешь картинку он сочиняет четверостишия и даже опубликовал книги стихов keep на китайском языке ok это то что происходит в области обработки естественных языках следующей области это

языке ok это то что происходит в области обработки естественных языках следующей области это не раз сетевой обучение с подкреплением это тоже очень замечательный область как здесь ставится задача значит таким образом что у нас есть некоторый агент который взаимодействует с внешним миром привези причем здесь у нас это не нет обучающей выборке как таковой но есть некоторые сигнал награды который говорит о том насколько хорошо агент совершает действия то есть это задача гораздо сложнее чем задачи

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

действия действия приводят к изменению среды измененное состояние среды поступает на вход агента а также есть кое-то подкрепление это как бы наша некоторые функции которые помогают агента учиться на состояние мира переводит в подкрепление в информацию для агента вы успешно стива действий ну а потом это можно формализовать некоторым образом можно аппроксимировать функцию кота называются q функция это функция полезности которая получает на вход текущее состояние для каждого из действий может

это функция полезности которая получает на вход текущее состояние для каждого из действий может оценить никто насколько какова будет ожидаемая дисконтированная награда то есть таким образом мы можем выбрать действие с максимальной дисконтировать награды будущих да но это значит что в принципе у нас на последующих шагах с вами будем какие-то действия совершать нам может приходить награда но очевидно что мир может иметь какой-то неопределенности поэтому в принципе те награды которые мы получим

что мир может иметь какой-то неопределенности поэтому в принципе те награды которые мы получим 100 лет через сто лет для нас менее важны чьим-то наговорам получен через пять секунд поэтому мы взвешиваем награды каким-то фактором не согласна тело города который далеко от нас лежат они с меньшим весом входят вот в эту вот ожидаемого награду чем те которые рядом с нами лежат потом одессе просуммировали путин как бы нектару среднюю ожидаемую награду дисконтированные по времени да нет веса виноград

путин как бы нектару среднюю ожидаемую награду дисконтированные по времени да нет веса виноград фиксирования то есть то мы зовем код параметр прыгайте как насколько нам важно то что будут будущем если вот это гамма сделаем единицы значит нам неважно сейчас или в будущем все одинаково важно если эта гамма равна 0 1 значит что у нас очень быстро убывает и важность если это 09 то медленно бывает да но если мучим алгоритм играть в игру то вот эту на эту награду из игры можно использовать вот как

но если мучим алгоритм играть в игру то вот эту на эту награду из игры можно использовать вот как эта награда скажу так вот затем мы как бы у нас мы можем обновлять нашу функцию полезности некоторым оперативным способом я не буду это рассказывать и уравнение беллмана может быть будь в курсе проблема в том что в этот весь формализм был придуман для средств которых состояния точно определены но в реальности мы не знаем в каком бы состоянии находимся и поэтому нам нужно тренировать не раз сеть

в реальности мы не знаем в каком бы состоянии находимся и поэтому нам нужно тренировать не раз сеть который будет предсказывать состояние и оказывается что гораздо проще сразу использовать не россии для того чтобы эту функцию полезности предсказать и вообще все эксперименты в этой области обучения подкреплением обычно проводится на играх почему на играх потому что эти алгоритмы учатся на своих ошибках и сначала делаю что-то неправильно получает маленькую награду и потом они постепенно совершая

и сначала делаю что-то неправильно получает маленькую награду и потом они постепенно совершая ошибки ошибки минимизировав награду повышают очевидно что если мы сразу будем тренироваться на реальном мире то это будет очень затратно с точки зрения финансов и времени а если нас есть симулятор некоторой компьютерная игра там это можно гораздо быстрее получить первое приближение нашего алгоритма а потом уже и вода обучить на реальности например всякое такое и какие успехи в этой области есть вот

потом уже и вода обучить на реальности например всякое такое и какие успехи в этой области есть вот самый первый успех грандиозный финал вечер это журнал самый крутой журнал в мире научный вообще которое существует самые высоко цитируемый еженедельник котов а публикуются научные статьи и попасть ножом на обложку журнал вечера это очень крутой успех вот компания дикман который потом google купил за 600 миллионов долларов и их работа был опубликован вечера попала на обложку что это было

купил за 600 миллионов долларов и их работа был опубликован вечера попала на обложку что это было заработать но они взяли 49 игра тори симулятор и обучили обуть при помощи матче несколько пенни ним не раз сеть то есть вот как вы помните наш баланс свёрточная сети начали то есть что эта сеть на вход получает картинку из игры до точнее говоря четыре последовательных кадрах а на выходе у нее есть нерона каждый из которых соответствуют и действию джойстиком то есть право влево вверх вниз по

есть нерона каждый из которых соответствуют и действию джойстиком то есть право влево вверх вниз по диагонали и джойстик с нажатой кнопкой вот эти все действия которые можно наш агент совершать как теперь ставится задача нам нужно обучить агента так чтобы он выбирал по последовательности кадров такое действие которое приведет к максимальному вы грушу максимально награде в игре и они оказалось что этот алгоритм один и тот же алгоритма нет архитектура сети если вы обучить на 49 играх на каждой

этот алгоритм один и тот же алгоритма нет архитектура сети если вы обучить на 49 играх на каждой игре по отдельности вот в статье такой результат приведет в одессе вот как бартон насколько хорошо здесь название игр а здесь насколько хорошо это играет этот эта игра насколько хорошо решается алгоритмом а вот здесь вот уровень человека то есть вот все игры которая вот здесь вот левее они все алгоритмом лучше играют чем человеком те которые правее на тот момент игрались человеком лучше сейчас эта

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

и надо всплывать и заправляться на поверхность кислородом ну вот пример такой вот вроде ничего играет следующую картинка и следующий вопрос залу что общего у этих двух людей не совсем не команду хорошо вот кто вот этот вот человек гарри каспаров правильно а вот это вот кто да да да год как его зовут но мы не знаем догорит не знаем его зовут ли седоля это соответственно гарри каспаров проиграл кому deep blue 10 проиграл альфу год то есть это два типа чемпиона мира по шахматам и по go которые

кому deep blue 10 проиграл альфу год то есть это два типа чемпиона мира по шахматам и по go которые прыгали как битву и это их объединяет правда это случилось вот это случилось 90 до 96 это 2017 всего через двадцать лет вот где блюдо это вот тот матч с каспаровым него седьмой год каспаров расстроился очень тяжело ему было игроком чем отличается от шагнут очень плохо видно контрастность очень высокая но смысл такой что у этих игр разных коэффициент ветвления все ответвления это то во сколько

но смысл такой что у этих игр разных коэффициент ветвления все ответвления это то во сколько позиции мы можем перейти из текущей позиции делая разрешенные ходы в шахматах средний коэффициент ветвления там порядка 35 augue порядка 200 250 понятно отсюда насколько сложнее перебирать варианты в год чем шахматах то есть на порядок отличается коэффициент ветвления но это если вы все дерево развернете то в г еще больше конечно нет ну там к там с каждым шагом это коэффициенты деление в среднем 35 а в

то в г еще больше конечно нет ну там к там с каждым шагом это коэффициенты деление в среднем 35 а в год 250 вот и представьте насколько у вас больше варианта мы опять сидит майн опять попал на дружку начал он придумал алгоритм который позволил решить игру в причем это гибридный алгоритм который сочетает себе не растёте с более классическими методами не растёте есть использовались для того чтобы предсказывать насколько данное положение доски выгодно для ну как бы для данного игрока таким образом

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

потому что для go нужна интуиция там только расчет ничего не даёт вот оказалось что компьютер можно обучить вот этой интуиции пониманию того насколько хороша та или иная позиция да вот результат игры 41 но это было до до игры да но это парад не делал после фотография а это вот такая байка что якобы вот эта финальная позиция последней игры видимо черными играла фигур но я надеюсь что все таки это только байка чтобы спать спокойно приходится вся тяжесть этой мысли вот и казалось бы да вот

это только байка чтобы спать спокойно приходится вся тяжесть этой мысли вот и казалось бы да вот компьютер обыгрывать человека в шахматы go и так далее вообще вот я например когда услышал что альфа гол обыграл ли седоля хотя я болел в принципе залив ага конечно но мне кажется заснула то есть как бы у меня было такое ощущение что ну вот мы и кожаные мешки опять проиграли ну не понятно чем вызвана ну было немножко но оказалось что на самом деле профессионала который играет в год они некое время

ну было немножко но оказалось что на самом деле профессионала который играет в год они некое время расстраивались но не очень долго потом выяснилось что они начали играть больше с компьютером и они нашли такие варианты игры которых никогда за всю историю о не наблюдалось и они были очень счастливы потому что это им открыла прям новый мир и новую как бы свежую струю вообще внесла во всей игры в год потому что как бы существовали школы игры в год и вы не был уже как бы некоторые поделенной

в год потому что как бы существовали школы игры в год и вы не был уже как бы некоторые поделенной традиции некоторые теория как нужно играть оказалось что альфа гу он как бы взорвал просто часть этой теории искал что можно играть абсолютно по-другому не так как вы привыкли или на самом деле для ценителей игр и это было очень большим счастьем так что в этом смысле у нас счастливее многих людей которые играют в год потом deep mind это был достаточно горба а не тренировали на очень большом

которые играют в год потом deep mind это был достаточно горба а не тренировали на очень большом количестве машин очень долго а потом они упростили алгоритмы сделали фрезером который смог за три дня достигнутого результата который там за месяц учился предыдущий вариант и на гораздо меньшем объеме ресурсов и вот зеленая линия это то как играл ли седой а сегодняшние версии игры играет вот видите выше 7 линии улучшить так который программа обыграла ли седоля зелененькая синьки пунктир следующая

выше 7 линии улучшить так который программа обыграла ли седоля зелененькая синьки пунктир следующая версия просто сплошная синей линии последняя версия программы видно что в год теперь нам уже очень сложно компьютер догнать но понятно что go это конечно увлекательно но есть и другие игры например starcraft ii удалось и в starcraft хорошо поиграть недавно была матч где starcraft опять enforcement лёнинг обыграл команду команда на команду людей как это можно использовать на практике очевидно что

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

грант в гранд ари потребление где-то на 40 процентов падает выключили алгоритм опять возросло то есть это говорит о чем о том что но если вы можете себе представить google это одна из компаний который обладает одним из крупнейших парков дата-центров во всем мире для того чтобы обеспечить качество сервиса по всему миру и для них на 40 процентов снизить расходы на энергообеспечение дата-центров это очень существенная экономия понятно что наверное это позволило достаточно сильно окупить вложения в

очень существенная экономия понятно что наверное это позволило достаточно сильно окупить вложения в эту компанию применить их алгоритмах но этот же самое алгоритмом обучение с подкреплением можно использовать и для более интересных задач и более важных для человека например поиска лекарств для того чтобы искать лекарство нам необходимо решать задачу предсказания трёхмерной структуры белков папа по последовательности аминокислотный есть соревнование есть база данных как бы последовательности

по последовательности аминокислотный есть соревнование есть база данных как бы последовательности трёхмерных структур и задача стоит как что мы на вход подаем последовательность белков а на выходе должны получить трёхмерную структуру и оказалось что если мы применим алгоритм обучение с подкреплением тонн научиться предсказывать структуру трехмерный был белка гораздо лучше чем все алгоритмы которые дает его существования ok давайте подведем итоги этой обзорной части я вам расскажу пару слов про

дает его существования ok давайте подведем итоги этой обзорной части я вам расскажу пару слов про то чем мы занимаемся наши лаборатории на физтехе то есть еще раз в истории искусства интеллекта было много взлетов и падений называли его по-разному символьный искусственный интеллект машинное обучение нейросети но последнее время все основным методам машинного обучения является глубокое обучение не россетти нейросети это такие алгоритмы которые при помощи метода обратного распространения ошибки на

нейросети это такие алгоритмы которые при помощи метода обратного распространения ошибки на примерах учиться решать какую-то задачу классификации там предсказания или вот как обучение с подкреплением управление чем-либо агентом существует три основных как бы направления самых крупных это компьютерное зрение в котором в основном используют сварочные нейронные сети рекурентные нейронные сети и задачи предсказания последовательностей задач обработки естественного языка третье направление обучение

предсказания последовательностей задач обработки естественного языка третье направление обучение с подкреплением игры и управления чем-либо и это все очень бурно и прекрасно развивается я думаю что ваша светлое будущее тоже гарантированно после успешного прохождения курса на которые вы записались и друг будете ходить чем занимаемся на физтехе сам немножко самой рекламы это вот некоторая из людей которые работы наша лаборатория наша лаборатория имеет статусом видео джипу research center также

которые работы наша лаборатория наша лаборатория имеет статусом видео джипу research center также статус facebook ой ой академик partnership в европе только два этом в чехии и в россии есть таких центра остальные все в сша также с этого в этом году наша лаборатория участвует команда нашего брата участвуют в алекса челенж это если вы знаете компании такая есть amazon у нее есть алекса это точно так же как у нас есть алису яндекса в amazon и есть алекса и amazon проводит последние пару лет

так же как у нас есть алису яндекса в amazon и есть алекса и amazon проводит последние пару лет конкурс на написание бота сошел бота типа ща вальс для своей колонке который бы смог бы проболтать человеком и человеку не было скучно в течение 20 минут он как бы отбирает по всему миру несколько академических команд в этом году конкурс был 350 заявок прислали на то чтобы участвовать в этом соревновании из этих 300 50a брали 8 команд две команды как вы пришли с прошлого года победители и вот в эту

из этих 300 50a брали 8 команд две команды как вы пришли с прошлого года победители и вот в эту восьмерку попала наша команда и задача такая что необходимого как я сказал построить такого бота ну и соответственно та команда которая сможет 20 минут удержать человека получает приз миллион долларов участники соответственно карнеги мелон университете стэнфорд ну мичиган ну ты и несколько из калифорнии до 20 специальных людей до нанимаешь чтобы они сговорились как проверяется тестируется эта колонка

до 20 специальных людей до нанимаешь чтобы они сговорились как проверяется тестируется эта колонка ответ такой там достаточно сложная схема сначала все эти команды они их навыки подключаются в реальную колонку и выдаются пользователю у пользователя есть возможность сказать алекса лечат когда он говорит олег салат чат случайно выбирается бот от одной из десяти команды пользователь с ним общается а потом пользователи просят оценить этого бота им говорит хорошо с ней поговорила ли плохо после того

потом пользователи просят оценить этого бота им говорит хорошо с ней поговорила ли плохо после того тот 3 бот или топ-5 ботов специально приглашаются люди которые с ними разговаривать сидит жюри и слушай как протекает разговор и это оценивается это же финальная стадия но для этого нужно во-первых бытие на физтеха но можно поступить на физтех там или не знаю как-то устроиться мне нужен формально то смотрите есть формально участники неформально конечно можно присоединиться к команде но при этом

то смотрите есть формально участники неформально конечно можно присоединиться к команде но при этом как бы вы не сможете претендовать на приз случае если он будет выигран но при этом как бы если вы внесете существенный вклад то по итогам там будет еще публикации в публикацию в принципе можете быть включены хорошо вот но это соревнование началось только как бы там в начале осени и будет продолжаться до мая месяца а вот так же мы организовываем собственно организовывали собственно соревнование

до мая месяца а вот так же мы организовываем собственно организовывали собственно соревнование планируемого организовывать на конференции не поможет услышали есть такая конференция нипс который сейчас переименовали в не у рыб нервный formatting conference мы на не организовали конверсия intelligence cinch это соревнование тоже между чат-бот аминова академическая где чат-бота разговаривать с людьми в чате причем человек не знал с другим человеком разговаривать рис чат-бота мы должен был оценить

в чате причем человек не знал с другим человеком разговаривать рис чат-бота мы должен был оценить и выбирались лучшие команды вот и оба раза победили команды из россии кстати также мы проводим летняя школа conversational and engine самый school первая школа прошла в восемнадцатом году на физтехе в девятнадцатом году в массачусетс и university of massachusetts слова вот и занимаемся мы разработки как раз на рукав для разговорных ассистентов точнее говоря инструментов для костра нить их навыков

как раз на рукав для разговорных ассистентов точнее говоря инструментов для костра нить их навыков что это значит вот у нас есть колонки да и в них точно так же как на мобильный телефон можно устанавливать разговорные навыки как приложение а вот в сша уже больше в этом 50000 навыков существуют для амазона алекса и на самом деле это очень интересно потому что вот такой вот способ построения электронных агентов он на самом деле не был особо сильно предсказуем если бы спрашивать людей экспертов но

агентов он на самом деле не был особо сильно предсказуем если бы спрашивать людей экспертов но и меня лично бы сам спроси вниз к лет назад как вообще возникает более интеллектуальной систему я бы сказал что ну хоть там институт академические ли какая-то там лаборатория правительственная или к эта корпорация вот сделать такую интеллектуальной системой работе более более умный оказывается на самом деле что интеллект вот этой колонке он на 30 процентов на сорок процентов состоит из того что

самом деле что интеллект вот этой колонке он на 30 процентов на сорок процентов состоит из того что написал amazon а на 70 процентов он состоит из этих навыков которые вы установили и в принципе оказывает что интеллектуальный сара не является грубо говоря продуктом кают одной компании а очень много независимых разработчиков могут внести свой вклад к раз в разработку этого интеллекта и это интересным образом совпадает красот помните я говорил о первом воркшопе на котором придумали название

образом совпадает красот помните я говорил о первом воркшопе на котором придумали название искусно интеллект вот на этом варбург что ты был марвин минский один из таких отцов scanf интеллект и него была теория под названием со сайте of might он говорил о том что сознание вообще мозг человека это некоторое сообщества коми тивных агентов каждый из которых решает определенную задачу и все они кооперируются и вот из этой кооперации из этого сообщества интеллектуальных навыков возникают наши я

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

узнать о новостях и они могут делать с разными командами и что делаем мы мы пытаемся как бы сделать фреймворк на котором можно делать вот таких разговорных виртуальных помощников можно сказать это не этом смысле такая операционная система открыта для разговорных ассистентов и виртуальных помощников мы это делаем рамках там проекта и павлов который в который включено включен физтеха котором проводим исследования open source которы называется де павлов и сбербанк со финансирует это для него мы

исследования open source которы называется де павлов и сбербанк со финансирует это для него мы делаем на основе open source и набор сервисов для внедрения в их продукт и соответственно в библиотеке у нас есть как отдельные компоненты из которых мы можем собирать разговорные навыки а потом объединять эти разговорные навыки в целостных бурных агентов здесь некоторая статистика нашей библиотеке проект начался где-то порядка двух лет назад это количество звездочек на гитхабе а это количество

проект начался где-то порядка двух лет назад это количество звездочек на гитхабе а это количество скачиваний библиотеки с начала года текущего в месяц вот видите где то порядка там двух с половиной трех тысяч в среднем за последние месяцев смотреть скачивается в основном сша 55 процентов 20 процентов россия и индия такой глобальный проект ну все на самом деле неожиданный слать я забыл когда его поставим но теперь можно по вопросам отвечать почему павлов называется вопрос ответ потому что павлов

но теперь можно по вопросам отвечать почему павлов называется вопрос ответ потому что павлов иван петрович известный российский физиолог и в мире наиболее известны наверное русский ученый который работал над теории того как мозг работает поэтому мы решили назвать в честь него вас проект искусство зачем создавать искусно интелекта сайта угля профессию программиста но я не думаю что это убьем профессия программиста прям уж так сразу во вторых я думаю что те кто чем занимается программированием

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

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

в компьютерном зрение оно не интересно с точки значит и фундаментальной точки зрения потому что это задача обучение с учителем меня интересуют такие задачи где агент более-менее автономен и должен сам ну изучать то что происходит среде тут мне больше интересно обучение с подкреплением и в этом смысле постановка задачи ведения диалога она как раз совпадает с постановкой задачи не с подкреплением тоже там есть разговорный агент который взаимодействует с человеком человек для него в этом смысле

тоже там есть разговорный агент который взаимодействует с человеком человек для него в этом смысле это некоторая среда с которым взаимодействует а то что он говорит вот эти действия которым совершает среде и он получает как бы состояние среды это ответ от пользователя и я верю что это гораздо более сложный гораздо больше интересных задач один компьютер vision и здесь гораздо больше горизонте тех вопросах и можем исследовать например можем построить такой чат-бота который будет обучаться в

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

интеллект больше выбирается в ненаписанные алгоритмы или мощность которые не хватает вопрос waste perazzi искусный интеллект недостаток и железо или недостаток алгоритмов я считаю что скорее недостаток алгоритмов ну то есть по крайне мере это интересней мы даже можем куча куча железа излить данными все заваливать но это как-то экстенсивный путь развития хотя как показывает практика это помогает ну примерно так и получается железо подтягивается к потребности но можно сказать так но у кого-то в

ну примерно так и получается железо подтягивается к потребности но можно сказать так но у кого-то в избытке а у кого-то не хватает как всегда но в целом как бы нет этого ограничения то есть на секунду и цветам латунная или google то есть там человек может там одни одним нажатием кнопки поднять там пару тысяч жопу и запустить на них задачу чтобы рассчитывалась так еще вопросы а почему он лежал с количество скачиваний библиотеки вывели а вы чем занимаетесь вот ну потому что у нас школа лет не

с количество скачиваний библиотеки вывели а вы чем занимаетесь вот ну потому что у нас школа лет не была в это время не там были всякие посты по результатам этой же летней школы и люди стали активнее скачивать пробовать

потому что уже рассказала как прошлый раз нужно будет начало просвещать на которые касаются да сделай [музыка] нет то куда вы в эфире всем привет если вы смотрите эту по какой причине записи можно будет вы этого не увидите если вы это увидели то знаю что он сказать но мы никто не хочет нас бы конечно даже ночью тебя тогда чуть мы тоже их очень занята на растерянно чуть это дать сделать что нибудь чтобы он не начала монтажа быстрее так начался сама краску смотреть да еще за комментов там смысле

чтобы он не начала монтажа быстрее так начался сама краску смотреть да еще за комментов там смысле какая-нибудь уже что небольшие внимание на вопросы потом прокручивать были на верх если учет правши ну конечно голодный дождь привет ребят всем привет мы очень скоро начнем через действенным собственно через восемь [музыка] пока что можно желать им хорошо настроиться на классный активный вебинар но она становится будет ну давайте заложим часть на всякий случай до зависит от того сколько у вас

но она становится будет ну давайте заложим часть на всякий случай до зависит от того сколько у вас вопрос в конце будет на самом деле это очень долго занимает обычно но он будет записи доступен очевидно потом да смотрите все что-то не так они за юра как могут сделать так чтобы у нас вода картинки сразу были по очереди я не знаю как работает как-то меня что можно как последний удар ты хост а где то есть кнопочка сделать так я даже на предпоследней то не значит us through the будет отображаться я

есть кнопочка сделать так я даже на предпоследней то не значит us through the будет отображаться я тут весь день и я сейчас вижу две штуки вот теперь правильно все хорошо так смотрите вопросы ваши мы читаем мы запоминаем и в конце мы все будем отвечать поэтому задавайте ваши вопросы если они есть то скорее всего мы про это так что иначе расскажем во время нашей основной части а если нет то после этого мы все еще вопрос озвучим я в любом случае скажу это еще раз уже на когда мы официально начнем

мы все еще вопрос озвучим я в любом случае скажу это еще раз уже на когда мы официально начнем чтобы но на всякий случай сразу вы можете просто сейчас но вы конечно писать оплата тогда мы станем они подключать потому что так больше вероятности с ними точными купить но у меня сегодня будет презентация то есть я скоро сделаю краткую презентацию она вопрос будет доступна при посылке мои выжил после окончания вебинаров старался ностями телеграме вот и я расскажу во многих вещах которые вас возможно

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

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

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

конспектирование ничего не будет слышно по другому лучше или не сложно сказать на них говорят что громче tags page сами не столько было тихо перенимаешь спрашивает будут ли 4 донаты да я этот вопрос нет ни про этот спрашивать о который раз ты проходишь но сушить лучше у тани спуститься какой расы на проходе герц ну я думаю to shoot компании что мы не проходим я не знаю я не помню я не давно хотела понять я забыла надо посмотреть старайтесь отеки в тобой когда-то все начиналось так слушайте

понять я забыла надо посмотреть старайтесь отеки в тобой когда-то все начиналось так слушайте похоже на близятся на 420 сегодня артём отправил нам с 10 рублей и пожелал удачи с курсом спасибо большое все я вот уже вижу тут много вопрос которые действительно есть слайды на презентации поэтому ладно и сейчас когда мы начнем обещание 30 минут я скажу это хорошо еще раз про то как мы будем отвечать на вопрос так начала и или завершится первая часть курса по крайней мере мы очень очень очень

на вопрос так начала и или завершится первая часть курса по крайней мере мы очень очень очень постараемся это сделать и дипломы вам выдадут до того как будет крайний срок подачи документов на всякие магистратуры поступлений это то ли край мира в российские вузы там бежевое надо раньше мы тут уже давно столько раньше надо что может вы можете тоже да то есть гарантируется что все результаты будут точно установлены до окончания приемной кампании мы начнем я джаве ст прохожу раз не могу свыкнуться

установлены до окончания приемной кампании мы начнем я джаве ст прохожу раз не могу свыкнуться с питоном что могу сказать жизнь сложная штука да тепло подается экране возможностью [музыка] это предатель да а вот теперь классного типа с паком сразу аббату раньше было так что то мелькать картинку зависимости от того кто говорит кучу не пусть но нет подожди на youtube и все-таки по одному ладно но не чувствую что мне кажется так а ты сходишь и тогда видимо время уже пришло да общем сейчас в любом

чувствую что мне кажется так а ты сходишь и тогда видимо время уже пришло да общем сейчас в любом случае на жестоким задерживается то пока я буду тут болтаете но 5 или может немножко меньше тем не менее вас перейти подойти вот тут все равно пока ничего не будет вот когда татьяны будет предаться transferwise там какие-то слайдов информация тогда пожалуйста говорит наслушался вот да всем привет я вас поздравляю с началом курса нашего замечательного курса потепление глубокое обучение давайте

я вас поздравляю с началом курса нашего замечательного курса потепление глубокое обучение давайте представимся меня зовут юрий яровиков я этим мероприятием задней части отвечаю и татьяна вяльцева это наша главная преподавательница вот завтра часть курса вообще прям полностью отвечает одной из нашем мире занятие в том числе стоять здесь на этом курсе иметь одинаковый часть так сейчас проходите вот и мы вас очень рада всех приветствовать всех приветствовать надеемся что курс идет хорошо надеемся

и мы вас очень рада всех приветствовать всех приветствовать надеемся что курс идет хорошо надеемся что вам понравится как мы вас о чем нам понравится как вы этому всему научились вот и давайте я теперь передам слово tony-gun сам собственно который расскажет нам про организационные моменты нашего курса прояснит все вопросы касающиеся того что нужно делать прямо сейчас и после этого мы ответим на ваши вопросы которые вы уже сейчас можете в принципе сдавать в чате на ю тубе вот но обратите

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

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

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

на youtube очень много и с того момента как мы начали этот вебинар транслировать там уже посыпались кучу-кучу-кучу вопрос большинство из них на большинство из них мы ответим полива бинара то есть но большинство из них ответы у меня есть на сайтах то есть нужно всего лишь чуть подождать во время того как я буду рассказывать информацию по слайдам я не буду отвлекаться на чат потому что иначе это будет все разрозненно это очень отвлекает я буду делать какие-то полу за вам будет неприятно меня

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

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

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

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

будет не надо после организационного собрания мы вот эту презентацию и все ссылки которые будем обещать в течение этой презентации выложим наш телеграм-канал новостной dls новости на которой вы надеюсь уже подписались наверное вас здесь не было и подписались концовка была вот поэтому не переживайте просто расслабтесь одесситы чипа и давайте поговорим о том что у нас ждёт прекрасный семестр обучения нашей школе и так пару слов в нашей школе очень очень кратко наша школа называется темно раскол

нашей школе и так пару слов в нашей школе очень очень кратко наша школа называется темно раскол или по-русски школа глубокого обучения мы наша школа находится не находятся существует на базе моим в три вида такой вуз московский физико-технический институт а находится долгопрудном подмосковье мы это физтех школах грубо говоря факультет этого вуза от помои это факультет точнее этих школах прикладной математики и информатики вот на нашей школе мы учим нейронным сетям и леди пленку если творителем

математики и информатики вот на нашей школе мы учим нейронным сетям и леди пленку если творителем формальный учим от азов до продвинутого уровня 1 семестра покрывает компьютер вижу компьютерное зрение второй семестр покрывает науки начинающих processing вот но подробнее про то что покрывает первый семестр и второе поговорим чуть далее у меня там будут подробные слайд и продал как устроена программа наш вуз давайте пока пару вводной информации кто вообще учиться в нашей школе на самом деле за

наш вуз давайте пока пару вводной информации кто вообще учиться в нашей школе на самом деле за время существования нашей школы мы существуем уже лет пять на вернёт мемом если не ошибаюсь на 4 по крайней мере точно то учиться в школе на совершенно разные люди нас бывают школьники студенты конечно же просто люди уже взрослые уже не школьники и студенты которые приходят к нам научиться нейронным сетям понять как они устроены получить какие-то практические навыки в общем у нас вообще очень

сетям понять как они устроены получить какие-то практические навыки в общем у нас вообще очень различные аудитории но когда я составлял а вот эту презентацию не в этом семестре еще в прошлом и в позапрошлом я по часикам которые у нас были в то время управляла опрос с просьбой сказать сколько вам лет вот чтобы собрать какую-то информацию о том кто же на школе учится получается примерно такие результаты эти результаты не с прошлого семестра позапрошлого мы эта презентация не меняли но в принципе

эти результаты не с прошлого семестра позапрошлого мы эта презентация не меняли но в принципе сильно отличаться на должна плюс как юрий сегодня заметил мы можем сказать что мы сравниваем весенний поток с весенним потоком прошлого года они соседнем потоком прошлого года в отрастят результаты тех людей которые учились у нас на висении по 150 21 я думаю проанализировать от результата вы можете сами в принципе их и думаю что не никакой важности особо не играет так что просто чтобы открыть ваше

в принципе их и думаю что не никакой важности особо не играет так что просто чтобы открыть ваше любопытство в этом семестре здесь написано на слайде обучение только онлайн на самом деле мы вас обучение довольно давно в то время когда появились первые признаки lockdown apricot виде до этого момента в 2019 году весной и ранее наша школа существовала еще и в оффлайн режиме то есть у нас был было помещение в москве на тимирязевской в 1с куда мы приходили игре наши лекции к нам приходили слушатели

в москве на тимирязевской в 1с куда мы приходили игре наши лекции к нам приходили слушатели стиле за реальными портами за реальными стульями слушали наши лекции семинары программировали прямо на семинарах но и записи тоже было то есть нас был такой гибридный формат можно было приходить оффлайн и можно было слушать онлайн то есть это было доступно все равно всем людям со всего мира и вот начинаю 2020 года когда вели lockdown карантина вот это прочие в нашем школе обучение стало только онлайн

2020 года когда вели lockdown карантина вот это прочие в нашем школе обучение стало только онлайн продолжается до сих пор то есть вот у нас сейчас онлайн вебинар и все последующие занятия вас тоже буду под нами что нужно чтобы учиться в нашей школе то есть какие технологии и средства вам нужны чтобы успешно слушать лекции понимать материал делать семинарии домашних заданий на самом деле от нужно совсем мало для успешного прохождения курсе достаточно вот этих трех вещей плюс ноутбук на котором

совсем мало для успешного прохождения курсе достаточно вот этих трех вещей плюс ноутбук на котором вы эти три вещи собственно будете открывать и запускать во-первых наш курс проходит в платформе степик степик это такая платформа для хостинга курсов онлайн-курсов типа кур серы наверное вы знаете все что такое кассиры это такая платформа где есть куча онлайн-курс вы просто вы приходите в нее выбираете запись на курсы начинаете учиться смотрите видео делаете какие-то тесты вот степик это такой на

запись на курсы начинаете учиться смотрите видео делаете какие-то тесты вот степик это такой на российский аналог вот платформу кассиры чуть менее популярный но при этом функционала него примерно так выжить на стыке будет проходить наш курс даст эпики вас будут модули каждой модуля такое занятие каждое занятие это лекции семинары домашнее задание они будут открываться постепенно вот в лекции это будут ссылки на youtube видео на лекции семинары это будут ссылки на код семинара и тоже на видео

будут ссылки на youtube видео на лекции семинары это будут ссылки на код семинара и тоже на видео семинарии домашнее задание будет описано собственно что вам нужно сделать чаще всего это тоже делает что-то с кодом вот вам нужно будет доступ к youtube не у всех есть доступ к youtube потому что на youtube и выкладываться наши видео лекции семена на самом деле вы можете иметь только степь от потому что наступите мы будем выкладывать ссылки на лекции на youtube это все можете открывать степень

что наступите мы будем выкладывать ссылки на лекции на youtube это все можете открывать степень переходить прямо по ссылочке на youtube посмотреть уже видела отдельным не только пацанами на на у нас там не сильно хорошо структурирована до сих пор потому что у нас накопилось много много разных видео разных годов разных вариантов лекций и семинаров кстати можно сказать что у нас не так много вариантов потому что мы постоянно пытаемся все улучшить то есть каждый год у нас такие моменты курса

потому что мы постоянно пытаемся все улучшить то есть каждый год у нас такие моменты курса которые мы видим проседают по максимуму их пытаемся улучшить вот проседание го курса стало намного меньше вот и надеемся что каждый раз мы делаем все лучше и лучше пытаемся как-то чтобы вам еще больше нравилось учиться было еще понятнее и еще полезнее с практической и теоретической точки зрения вот и вам нужно будет доступ к лат колаб это google коллаборатория это такой сайт то есть опять же не нужно

нужно будет доступ к лат колаб это google коллаборатория это такой сайт то есть опять же не нужно никаких дополнительных технологий ничего никаких приложения скачивать на компьютер неважно windows 8 nux или mac или что то еще например там chrome os все будет работать потому что все эти три вещи стоит youtube эколаб они находятся браузер это просто некоторые сайт куда вы заходите так вот колаб google талант это такая среда которая позволяет вам онлайн писать код на самом деле не просто написать

талант это такая среда которая позволяет вам онлайн писать код на самом деле не просто написать код это такой сайт который предоставляет вам доступ к юпитер ноутбуком онлайн вот что такое юпитер ноутбуку познакомитесь уже или уже познакомились йорке не помнишь но общего слитки железа материалы которые против которых как раз уж такой их зерна букв другое дело что возмещение миссий раз и пик заходили но про его кожи скажи но давайте я я просто не хочу сейчас рассказать что такое юпитер ноутбук

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

позволяет вам удобно писать код на питоне и она разбита на ячейки позволяет вам сразу красиво визуализировать этот код то есть для целей исследования для целей написания нейросеть эли целей проведения экспериментов над нейронными сетями и ветерок подходит очень классно и он позволяет вам удобно делать эксперименты намного удобнее чем если бы вы писали под просто там я не знаю в терминале на дно через запускали вайфай вот но еще раз я не буду сильно на этом останавливаться если вдруг что-то не

через запускали вайфай вот но еще раз я не буду сильно на этом останавливаться если вдруг что-то не понятно сейчас пожалуйста зайдите на степик найдите ссылку на гайд по cалаты и советую вам до следующего занятия которое откроется у нас в эту субботу изучить что такое колобка и научиться с ним работать хотя бы чуть-чуть так еще что нужно чтобы учиться кроме того чтобы он на предыдущем слайде обязательно вот это вот очень важно основное общение в нашей школе и основные основные новости про любые

вот это вот очень важно основное общение в нашей школе и основные основные новости про любые аспекты обучения это все происходит в telegram telegram масич а вот у нас есть телеграм-канал dls новости вот никто им этого телеграм-канал а можно пить в теле брат мини вступительное там мы публикуем все новости всех потоков нашего курса новости могут быть примерно такими мы открыли новый модуль это вдруг если вы там какой-то момент забыли что должен открыть новый модуль у вас нужно появится новое

вдруг если вы там какой-то момент забыли что должен открыть новый модуль у вас нужно появится новое лекции семинары новые задания телеграм-канал вам об этом обязательно напомнить у нас иногда случается перенос этот лаймов по-разному обстоятельства иногда это технически обстоятельства которых очень мало на самом деле может такое случиться что если мы сделали какой-то новый вариант домашнего задания lenovo вариантом семинара то в нем были какие-то ошибки и тогда там может быть продаваемом дедлайн

lenovo вариантом семинара то в нем были какие-то ошибки и тогда там может быть продаваемом дедлайн немножко не из за того что это была наша вина опять же такого происходить не должно но такое бывает если мы стараемся действительно что-то сильно улучшить вот но мы берем соответственно на себя конечно проблема дуальность что-то случается то есть любые такие организационные вещи которые могут повлиять на ваше прохождение курса они публикуются dls новости там например вы зашли на степик в субботу

на ваше прохождение курса они публикуются dls новости там например вы зашли на степик в субботу вы думали что там должен был открыться новые модели его нет вы не понимаете что там происходит скорее всего практически 100 процентов информация потому почему новая модель не открылся она уже с ведром канале dls новости поэтому пожалуйста вступите туда это главное информационный ресурс наши школы дальше чат и чат и это почем конкретная сказать горжусь нашей школе у нас есть чат и которые до каждого

чат и чат и это почем конкретная сказать горжусь нашей школе у нас есть чат и которые до каждого нового потока делаются заново то есть нового вы чего-то создаете в чатах происходит общение с однокурсниками то есть м детьми которые вместе с вами проходит этот поток нашему курсу также в чатах есть преподаватель то есть можно на следовать только пожалуйста не злоупотребляйте этим не еще несколько раз то скажем потому что это иногда бывают очень сложно так вот как вы знаете у нас есть базовые

раз то скажем потому что это иногда бывают очень сложно так вот как вы знаете у нас есть базовые продвинутый поток курса про отличия между по самым продвинутым я скажу далее пожалуйста не переживайте и не не пишите сейчас и за сто пятьсот вопросов учатся в чем отличие базовым продвинутого в любом случае пока что у нас есть базовый продвинутый потоп и для них есть отдельные часы 15 телеграмм для газового потока один чат шли прямо напредак здесь из презентации есть ссылочки на них а также есть

газового потока один чат шли прямо напредак здесь из презентации есть ссылочки на них а также есть удалить никнейма по ссылкам вы сейчас кстати не можете вы сможете по ссылкам пройти только если скачаете презентацию после нашего вебинара а вот никто ему уже можете скопировать вести ехала в строку поиска в телеграме нужно вам чат почему я горжусь этим чат я честно считаю что из всех всех всех курсов которые вообще есть в интернете и всех онлайн-курсов deeply оренбурге роном сетям нужно

всех курсов которые вообще есть в интернете и всех онлайн-курсов deeply оренбурге роном сетям нужно обязательно выбирать те которые предоставляют вам доступ ко мне будь то есть у которых есть чат и с преподавателями и учениками это очень очень важная составляющая любого курса чтобы вы там не изучали learning дизайн и архитектура искусство что угодно общение с однокурсниками дает несколько вещей во-первых это комбинить и людей которые последуют примерно ту же цель что будет расти них общие

во-первых это комбинить и людей которые последуют примерно ту же цель что будет расти них общие интересы с ними интересно говорить завести какие-то дружеские или профессиональные даже связи второе что комьюнити дает это возможность получить поддержку и ответ на ваши вопросы например если вы чего-то не понимаете в лекции или чего-то не понимаете в семинаре во что-то шутка не получается домашней работе вы уже не понимаете в чем проблема погугли ли у вас ничего не получилось в можете обратиться к

вы уже не понимаете в чем проблема погугли ли у вас ничего не получилось в можете обратиться к где нить и обратиться к отеку описать свою проблему конечно не выкладывая решение домашнего задания чтобы другие люди написали просить поддержки и вся эта 5 летняя история наша школа bell school она показывает что поддержку всегда получится то есть люди очень отзывчивы и помогают друг другу более того когда другие люди смотрят на ваши проблемы пытаются помочь вам решить вашу проблему или даже не

когда другие люди смотрят на ваши проблемы пытаются помочь вам решить вашу проблему или даже не пытаются помочь вам решить вашу проблему а просто смотрим на то как чатик пытается решить вашу проблему это тоже часть обучения то есть вы видите какие проблемы бывают у людей не пытайтесь их решить вы начинаете думать то есть вы как бы больше погружаетесь в это все ну и если чатик не поможет решить вашу проблему в конце концов можно всегда так преподаватели которые тоже сидят в этом чате есть

вашу проблему в конце концов можно всегда так преподаватели которые тоже сидят в этом чате есть просить у них в проигрывателе точно должны помочь потому что то они составляли то домашнее задание которое вас не получается профиль мере так должно быть на всех курс вот поэтому я очень советую вам как я его сам корич вступить в эти часики и стать части камень и тиват я думаю что вы не пожалеете это будет такая поддержка на вашем пути к завершению семестра и диплома dls от меня много говорю уже

будет такая поддержка на вашем пути к завершению семестра и диплома dls от меня много говорю уже здесь последние весь той можно тебя не впервые пожалуйста может просто вернуть все обратно на предыдущий слайд так низко гражданства и обновилась смотрите у нас я хотел сказать что мы еще забыли важно вещь у нас помимо эти чатов есть еще чат с флудом дело в том что многие люди жалуются это блюдо происходит что в чатах довольно много всего разного происходит и в том 4 люкс разные говорят на темы

что в чатах довольно много всего разного происходит и в том 4 люкс разные говорят на темы которые курсовые впрочем еще отношение не имеет он имеет непосредственного поэтому мы специально для этого завели канал слугам поэтому тоже опять выступаете можете вас заботить но если у вас есть желание пообщаться с ними темы которые мы к программе тоже не имеют то пожалуйста во флуд так как бы работа сделать как-нибудь показать я думаю что сейчас не надо показывать я думаю что как я обещала мы в дело с

как-нибудь показать я думаю что сейчас не надо показывать я думаю что как я обещала мы в дело с новости все ссылки включая ссылку на презентацию ссылки все которые здесь были это даже хорошо что в презентации да я просто наверно открыла ее на весь экран окей так вот смотрите пока юру это говорил я немножко посмотрела в чают и как обычно каждый раз когда мы проводим которых собрания о том моменте когда я рассказывал про чатике telegram люди начинают говорить следующие 5 килограмм очень много

когда я рассказывал про чатике telegram люди начинают говорить следующие 5 килограмм очень много человек это правда там уже где-то полторы тысячи человек каждого насколько я помню да и там часто сложно ориентироваться и сложно найти какой-либо ответ на какой-либо вопрос то есть вот он спрашиваете вопросы там сразу несколько человек начинает писает сразу много сообщений ориентироваться все что-то пишут некоторые флудят независимо от того что у нас есть вот эта флудилка который только что юра

пишут некоторые флудят независимо от того что у нас есть вот эта флудилка который только что юра рассказывал и так далее то есть многие считают что чад в телеграмме не перегружены они больше вас отвлекают чем помогают и предлагает сделать это в любом месте несколько лет назад еще в то время когда дискорд не было очень популярен нам предлагали сделать слова сейчас нам предлагают делает диску какой-то момент мы сдались и сделали флаг флаг dls это такое некоторые комьюнити который мы кстати хотим

момент мы сдались и сделали флаг флаг dls это такое некоторые комьюнити который мы кстати хотим развивать вы знаете вот есть комиссионный с например опасается если не знаете побудете пожалуйста рассказывать буду слаг это такое messenger в котором можно общаться более структурированный там не просто 4 которые постоянно люди пишут и и все сообщения теряются там сообщение они разбиты на темы и каждой темы она там отдельно отдельным трейдов грубо говоря выделяете то есть там будет меньше фуда опыт

темы она там отдельно отдельным трейдов грубо говоря выделяете то есть там будет меньше фуда опыт показывает что люди все равно почитают чат и в телеграме то есть мы видим много людей которые говорят что slug или диспорт были бы лучше но большинство людей все равно общаюсь и телеграма имеет а нравится то есть чатов телеграмму удалять не будем это действительно много кому помогает как я говорила до этого это классные чатике где все получают поддержку ответы на вопросы просто общение и так далее

этого это классные чатике где все получают поддержку ответы на вопросы просто общение и так далее но опять же слаг slug это сладкий а вообще у нас изначально флаке проходили проекты про проекта я расскажу далее что этот моя когда не проходятся вот но в итоге мы решили создать такой некоторые камни и дислайки то есть даже после окончания обучения или во время обучения вы можете зайти и там будут разные тематические каналы мы будем стараться поддерживать несколько тематических каналах но на самом

тематические каналы мы будем стараться поддерживать несколько тематических каналах но на самом деле хотелось бы чтобы камень часы моего поддерживаем я наверное уже немножко заговорила здесь просто над не очень структурированно говорю вот смотрите в общем по вечерам если вам не нравится чатов телеграме если вам кажется не перегружена и так далее вот так слать и у нас тоже есть каналы для каждого потока то есть аналог чатов телеграме есть канал и лайки если вам кажется что telegram перегружен вы

то есть аналог чатов телеграме есть канал и лайки если вам кажется что telegram перегружен вы можете пойти офицер спок там наверняка будет меньше людей потому что как я сказала большинство все-таки предпочитает каналы чатов телеграме но все-таки там люди есть сейчас приступать предложение еще сделать дискорд но дискорд это было бы еще и третья сущность которая тоже нужно поддерживать то есть вы может быть вам сложно представить на самом деле реальность такова что чтобы поддерживать чатах

вы может быть вам сложно представить на самом деле реальность такова что чтобы поддерживать чатах телеграме чтобы поддерживать флаг или еще что-то другое нужные ресурсы то есть люди который будет этим заниматься понимать что как моделировать и так далее нас не так много этих ресурсов поэтому сейчас мы остановились на пятке программные sloppy вот эскорта пока нет пока что вот так так организация курсанта с приходим то есть сам курс они инструменты как новый блок то есть новое занятие открываются

с приходим то есть сам курс они инструменты как новый блок то есть новое занятие открываются раз в неделю у ким субботу утром субботы чтобы вы могли там на выходных начать спокойно смотреть лекции семинары делать задание это мне не делать и все задания вечером я не знаю в будни уставшими после работы и так далее один блок этой лекции семинары и домашние задания в основном так бывает исключение например у второй части курса у нас есть момент когда у нас есть лекции семинар нет домашки но зато на

у второй части курса у нас есть момент когда у нас есть лекции семинар нет домашки но зато на следующей неделе там нет лекции семинары достаточно большая домашка ну так так сложилось просто потому что там такие темы связаны что логично дать к ним одну домашку они разделять на 2 но в первой части курса такого нет то есть чаще всего вас будет лекция семинар домашнее задание лекция может быть разбита на разные видео по под тема то есть вот например здесь на слайде вы видите лекцию которую я

разбита на разные видео по под тема то есть вот например здесь на слайде вы видите лекцию которую я записывала password этом мире сетям но мы разбили на три видео поменьше одна из них про историю развития сварочных мире сетей второе видео про собственно принцип работы с карточных нейро сетей и 3 лекция про операцию буллинга которая всегда идет неразрывно с карточного нейросетями есть не пугайтесь это не три какие-то часовые лекции это просто одна лекция разбита на несколько видео по по под тему

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

части курса на которые вы записались на самое начало это люди которые нас еще не учить первая часть курса это когда мы рассказываем самые основы начиная с необходимо математике для дата саянский мировых сетей рассказываем про устройство обычных полна связанных мире сетей и дальше переходим к задачам компьютерного зрения и нейросетями для задач компьютерного зрения и на этом первая часть курса заканчивается у нас есть еще вторая часть курса которая pronature language processing mlp она

курса заканчивается у нас есть еще вторая часть курса которая pronature language processing mlp она называется второй частью курса потому что ее логично проходить после завершения первой части курса потому что чтобы проходить вторую часть курса уже нужно позову понимать принципы в принципе нейросетей принципы работы сверточек мире сетей и вообще так обстоят дела в сфере к быть любишь вы можете записаться на вторую часть курса параллельно с первой части курса никто вам это не запретит вы можете

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

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

про это не дошли ну то есть еще не узнали так так лучше не делать в общем поэтому она называется второй части курса и я призываю вас идти на нее после окончания первой части класс любом случае сейчас мы говорим про программу первой части курсу на которой вы собственно записались поэтому давайте они поговорят здесь вы видите все блоки все занятия которые нас принципе есть на первой части курса у нас есть вводное занятие которое вы уже должны были посмотреть она открылась этой субботы написали об

есть вводное занятие которое вы уже должны были посмотреть она открылась этой субботы написали об этом там где бурцев рассказывает про в мир машинного обучения есть следующий блок который как бы подготавливает вас к пониманию нейросетей и heaven компьютер vision а то есть это необходимая математика формирование чтобы вам было комфортно дальше изучать не носить здесь блоки кратко занятия праязык поэтом библиотеку pandas на пай и matplotlib библиотеки pandas нам поймут внутри быть очень важным

поэтом библиотеку pandas на пай и matplotlib библиотеки pandas нам поймут внутри быть очень важным для при отеке касаемся машинном обучении и i never сетях даже поэтому советую вам отнестись со всей серьезностью к этим занятиям однако как можно верить занятия по поэтому она всего одно ну почти 1 1 занять поэту на 2 уже польши прибыль для тех кому не по языку python поэтому если вы чувствуете себя не очень уверенно в языке python я советую вам попрактиковаться в написании кода на python денег на

не очень уверенно в языке python я советую вам попрактиковаться в написании кода на python денег на стороне например есть прекрасный поэт and youth er.ru которая позволяет вам изучить основы языка python и попрактиковаться написание кода на нем и еще сотни разных ресурсов вот наш курсе всего лишь одно занятие про python просто потому что будет больше впихнуть не можем дальше у нас есть занятие по математике математика это сайнс это основы линейной алгебры и математического анализа такие основы

математике математика это сайнс это основы линейной алгебры и математического анализа такие основы которые будет необходимо чтобы понять как работает нейросетью и как работать линейные алгоритмы то есть пожалуйста опять же не забивайте на это занятие очень важно иначе вы просто не примите самые фундаментальные принципы работы не расти дальше идет блок про снова машинного обучения мы то есть здесь как можете видеть в этом блоке основа машинного обучения линейной модели решающий деревья здесь нет

как можете видеть в этом блоке основа машинного обучения линейной модели решающий деревья здесь нет ни слова про нейросеть у нас курс типа про не россетти то есть мы говорим что всем вот курс deep learning school там глубоком обучении обучаем а тут почему это у нас бац и блок стандартные стандартному машинного обучения в котором несло при не россии мы вам будут рассказывать какие-то линейные модели которые не нейросети какие-то решающие деревья которые тоже вообще практически ничего общего с

которые не нейросети какие-то решающие деревья которые тоже вообще практически ничего общего с ними системы не имеет зачем это все надо на самом деле это все очень-очень надо вот почему есть некоторые базовые концепции довольно абстрактные концепции того как ставятся эксперименты в глубоком обучении то есть как ставить эксперименты сняли сетями как оценивать то насколько ниро сеть ваше хорошо работает так понять не раз сеть 1 работать лучше другой или нет то есть вот сама базовая концепция

работает так понять не раз сеть 1 работать лучше другой или нет то есть вот сама базовая концепция постановки экспериментов в машинном обучении и в нейронных сетях в частности как это все работает и вообще что такое хороший эксперимент плохой эксперимент вот это все проще объяснять без нейросетей на моделях классического машинного обучения то есть вот здесь вот эти модели это линейной модели решающим тремя более того еще один дисплей мир нейронные сети намного проще понимать после того как вы

тремя более того еще один дисплей мир нейронные сети намного проще понимать после того как вы поймете что такое линейной модели потому что они некоторые мысли сразу здесь мы вот этот блог про основа машинного обучения он про базовые концепции которые вы обязательно обязательно должны выяснить чтобы правильно готовить не розетки чтобы правильно ставить эксперименты над ними это очень-очень важный блок так что пожалуйста не удивляйтесь что он не про не россетти практическое машинное обучение

блок так что пожалуйста не удивляйтесь что он не про не россетти практическое машинное обучение просто потому что понимать намного проще на основе линейных моделей решающий деревья более того это некоторые дополнительные информация в классическом машинное обучение которое вам наверняка анализ в будущем все таки нейросети и классическое машинное обучение они не две полярные вещи они как-то связаны между собой и с исторической точки зрения если бы вы проходили ни один пола годичный курс большой

между собой и с исторической точки зрения если бы вы проходили ни один пола годичный курс большой курс потом data so in среди машинного обучения в изначально мы рассказывали классическое машинное обучение они про нейросеть и вы вообще не притронулись камере сетям прежде чем не поняли бы как работают классической мужчины мужчину вот дальше собственно справа у нас начинается блоки про него сеть первое это введение в нейронные сети той что такое нейрон что такое самое расстояние до сеть который

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

этого прочего блоки собственная эта лекция про то что такое свёрточная не раз сеть как она устроена какая идеи и работы и там семинар тоже и домашнее задание на то чтобы завести такую сеть дальше занятие про продвинутое обучение мире сетей и про классификации изображения и дальше четвертый блок 4 блока там же 6 блок последний блок он про другие задачи компьютерное зрение кроме классификации которые появляются это семантическое сегментация этот лекция автором кадры генеративной модели dev wiki

появляются это семантическое сегментация этот лекция автором кадры генеративной модели dev wiki гайнутдин вот из этого состоит обучение на нашем на нашей первой части вкусу как видите начинаем самого простого заканчиваем продвинутым и темами это быть рыжим теперь у нас есть базовый продвинутый поток который постоянно и есть много разных вопросов чем они отличаются костяк у них одинаковый вот эти вот блоки основа машинного обучения введения в нейросети свёрточная не россетти и семантическая

эти вот блоки основа машинного обучения введения в нейросети свёрточная не россетти и семантическая сегментация у базовая продвинутого потока общее у них нет вообще никаких и птичий будут одинаковой лекции одинаково семинара одинаковые домашнее задание нет такого что в базовом потоки домашки проще оправе надо потоки домашки сложные такого не что и и в чем же собственно пища вот эту вот часть про язык поэтому для тех у pandas и основы математики до даты сами это часть есть только у базового

про язык поэтому для тех у pandas и основы математики до даты сами это часть есть только у базового поток то есть продвинутый поток это поток для тех людей которые уверенно себя чувствуют математики и языке python и не хотели бы тратить лишние 3 недели на изучение вот этого что они уже хорошо знают и хотели бы сразу начать машинного обучения я верю что такие люди среди вас есть однако пожалуйста если вы хоть немного сомневаетесь в том что вы хорошо умеете пробовать на питоне и понимаете всю

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

и продукт это как раскрытие последние три лекции точнее не лекция занятия ну понятно что лекция семинар + домашка продать акции авт энкодера генеративной модели но эти лекции и семинары и и домашки клип записанные видео лежат на ю тубе поэтому если вы проходите базовый поток если в конце семестра вы прошли семантическую сегментацию семестр закончился вы можете сами пойти на youtube и сами посмотреть видео-лекции семинаров по детекции often кадром генеративным моделям они там лежат в бесплатном

видео-лекции семинаров по детекции often кадром генеративным моделям они там лежат в бесплатном доступе вот к семинарам лежат также ссылки на ноутбуке в которых вы можете писать код вместе семинаристов дальше вы можете тоже сделать домашнее к нему единственное что домашки у вас уже проверяться не будут тогда она сделать вы все равно можете то есть практически ничего не теряете поэтому если вы не уверены что он хватает питона и математике вы учитесь на базовый поток чтобы точно весь курс хорошо

уверены что он хватает питона и математике вы учитесь на базовый поток чтобы точно весь курс хорошо пройти еще также вот эти вот к основной программе у нас есть при записаны также на youtube и несколько бонусных лекций бонусной лекции они касаются не технической составляющей не протока как решать задачи сегментации как там решать задачи дирекции они про такие интересные темы которые рассказывали люди из разных компаний вот к нам приходили например люди индексы рассказывать про то как устроена

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

если акции про генеративной модели и есть лекция правоприменения модели принтера на зрения они все лежат на тубе их можете смотреть и преисполнятся областью в которые вы влезли но deep learning смысле мире социально смотреть как они работают и и все лекции курсы все наши лекции курсе записаны преподавателями заранее то есть они будут не живые лекции семинары будут неживые предзаписанных в этом есть большой плюс если вы сейчас хрустнули я вам я вас успокою скажу что в этом есть большой плюс так

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

не понимает как выразить мысль о как я сейчас примерно вот это все может немного раздражать при записанный лекции нас монтируется значит что вот эти всякие раздражающие вещи оттуда убраны и нам осталось только то что вам будет полезно и скорее всего практически во всех лекциях должны испытывать никакого дискомфорта на их смотря то есть вот в этом очень большой плюс предзаписанных лекций но так как мы понимаем что нужно живое общение я тут вам очень много про чатике рассказывала будет сам вот

как мы понимаем что нужно живое общение я тут вам очень много про чатике рассказывала будет сам вот типичный лекции это не знаю и плюс мы понимаем что любой человек будет лекцию не может ответить на все все все вопросы которые по этой лекцию слушатели могут возникнуть поэтому 1 2 или 3 недели в зависимости от тем которые на этих неделями были вложены мы будем проводить живых бинар или с ответами на вопросы которые у вас накопились за эти две три недели вы материалом просмотренных лекций мы

на вопросы которые у вас накопились за эти две три недели вы материалом просмотренных лекций мы заранее будем в dls новости тот же канал и чатике ваших потоков кидать гугл форму куда вы можете задавать вопросы которые вас по этим местом накопились и мы эти вопросы будем разбирать ножом в бинаре ну конечно если вас грибом в бинар и появится еще какие то вопросы вы сможете задать эти вопросы прямо в финале вот как сейчас чатике найти то есть мне покажется это намного лучше чем просто смотреть

в финале вот как сейчас чатике найти то есть мне покажется это намного лучше чем просто смотреть живые лекции потому что более лаконично скажем так это более плотность информации там гораздо выше будет потратить времени меньше 0 и все вопросы которые вас возникнут все равно сможете спросить у преподавателей в живом формате и давайте поговорим про домашки и потом сделаем паузу и и по отвечаем на вопросы которые касаются того чего мы поговорили посмотреть и есть три типа домашних заданий сдачи на

которые касаются того чего мы поговорили посмотреть и есть три типа домашних заданий сдачи на стыке pierre view и ручная проверка что такое задачи на стельке если вы проходили курсы на карусели или даже на в степени вы знаете что там есть виды тестов на торец какой-то вопрос и там 4 вариант ответа вам нужно будет правильным вот это подразумевается под задачи на степик такие домашки у вас будут самом начале курса там где мы будем изучать питон на математику вот то есть там где никаких нейронов

начале курса там где мы будем изучать питон на математику вот то есть там где никаких нейронов вам тренировать будет не надо есть интервью 1 view это когда вы делаете домашнее задание которое уже представляет собой большой кусок кода который вам нужно будет написать самостоятельно и вы этот код отправляете на степик и три ваших коллеги которые тоже проходят курс вместе с вами должны вашу работу от review и то есть оценить оценить правильно ли вы эту работу сделали конечно будут делать

работу от review и то есть оценить оценить правильно ли вы эту работу сделали конечно будут делать правильные ответы по которым они будут оценивать то есть механизм такое вы делаете домашку вы отправляйтесь на стек после того как вы отправили код most epic вам нужно будет оценить 3 работы ваших коллег если вам кажется что это совершенно бесполезная вещь и что если вас оценивают ваши коллеги не преподавателей то как бы это не очень полезно то я вам сейчас скажу что на самом деле очень полезно

преподавателей то как бы это не очень полезно то я вам сейчас скажу что на самом деле очень полезно каждый год каждый точнее каждые полгода каждый поток который у нас есть когда я захожу в чатике во время того как люди задают домашки поперли view я постоянно вижу комменты вроде коллеги спасибо вам большое что такие классные комменты на на мою работу написали я же понял чего мне недоставало и так далее то есть ваши коллеги действительно стараются вам помочь в большинстве случаев то есть скорее

далее то есть ваши коллеги действительно стараются вам помочь в большинстве случаев то есть скорее всего когда вы отправите ваш плотно первй у дам вам придут какие-то содержательные комментарии по поводу того что в вашем кузина мне понятно что можно было улучшить или так далее плюс заверю вас что те домашки которые проверяются с помощью перебью они очень сложное и концептуально не очень вариабельный то есть это значит что там не какой-то огромный креативный сок который вам нужно будет написать

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

и третья часть домашка эта ручная проверка это уже те домашние где от вас требуется натренировать свой собственный не рассеется для решения какую-нибудь задача там нужно будет провести довольно много экспериментов подумают этими экспериментами описать свои выводы и такие домашки невозможно проверять автоматически и и такие домашки мы не хотели отдавать на пире view просто потому что хочется чтобы проверяли их квалифицированные люди а не те которые учатся вместе с вами они тоже квалифицированные

проверяли их квалифицированные люди а не те которые учатся вместе с вами они тоже квалифицированные мягкий вот ручной проверки домашки вы издаете на степик загружаете код и ждете пока я преподаватель dls поставить вам оценку ручная проверка домашки ручная проверка они концу курса начинаются то есть в самой первой домашки будут без ручной проверки там вы сразу будете получать фидбек сколько вам доставим вот есть еще несколько домашних заданий которые оформлены пока соревнования на как карл это

вот есть еще несколько домашних заданий которые оформлены пока соревнования на как карл это такая платформа для соревнований в машинном обучении если кратко то смысл там такой на кабель поставляется некоторые dts по которым вам нужно построить модель машины в обучении и отправить свои решения на кого там вы будете видеть или кто решил задачу лучше который шел задачу уже вот вы можете зайти на так вот там какую точку как бы посмотреть как это все устроим это очень классный вариант домашки потому

вот там какую точку как бы посмотреть как это все устроим это очень классный вариант домашки потому что там ну это вариант домашки которые выглядят как соревнованию то есть он есть соревнование вы решаете домашку по слайде свое решение на как и ваши коллеги со товарищи по курсу тоже отправляет решение на когда вы видите который шел задач лучше такой соревновательный дух немного возникает это очень прикольно то есть людям это тоже очень нравится 1 когда они участвуют он первый раз плюс если вы

прикольно то есть людям это тоже очень нравится 1 когда они участвуют он первый раз плюс если вы действительно хотите погрузиться в нейросети и стать классным обучать или мне розеток ли там обучать или других моделей машинного обучения то наверняка и в какой-то момент свои карьеры вы придете на кого вы станете решать подобные конкурсы поэтому познакомиться с тем что такое как голый конкурса по машинному обучению в рамках нашей школы это очень классный под лайнам у каждого домашнего задания есть

обучению в рамках нашей школы это очень классный под лайнам у каждого домашнего задания есть два that line мягкие и жесткие make that line наступать через две с половиной недели после выдачи домашнего задания выдай выдаем домашнее задание субботу это значит что мягкие тогда и наступает через для спален неделе в понедельник 20 посидеть на спуском время если вы сдаете домашку до мягкого дедлайна вы получаете полное количество баллов на которые вы зделали домашку если вы даете после мягкого этот

получаете полное количество баллов на которые вы зделали домашку если вы даете после мягкого этот line а вот должен схватить line вы получаете половину от того количества баллов которые вы могли бы получить если бы стали во время жесткий дела и наступать через три недели то есть в правительств 23:59 московскому времени через три недели после выдачи домашки если вы сдаете домашку после жесткого этот лайн и вы не получаете за нее баллов то есть этот лайк если у вас есть водитель на я причина для

лайн и вы не получаете за нее баллов то есть этот лайк если у вас есть водитель на я причина для переноса домашки например вы болеете и лежите больнице у вас есть об этом справка то вы можете написать нашему коллеге наверное просто ставить кому лера нас есть ответственного года у нас есть ответственным и это тоже допишу придется у нас есть ответственный человек который решать такие вопросы пишите ему а согласовывают вам 13 на это можно сделать на стыке то есть вам лично я переносит dateline

ему а согласовывают вам 13 на это можно сделать на стыке то есть вам лично я переносит dateline домашки на стоят такие простые потом сдаете и получателями бала я хочу сразу мастик но просто из которых здесь изучаются в домашки спрашивают сколько раз в разрешении смотрите главе домашки это те в которых вот я сразу доступен и те в которых ответ вас должен вас должно венца поэтому в первом случае вам сразу доступен результат вы можете еще раз попробовать сдать а во втором случае новому как бы один

сразу доступен результат вы можете еще раз попробовать сдать а во втором случае новому как бы один раздаете и потом это ведь эту проверку и вот после этого пустой результат больше выдать не можете но при этом вас просим пожалуйста не сдавайте там куча черновую версия что потом что не был поправить так далее потому что если вы отправите раза гадание на рецензию топас 5 его уже поменять пусть нельзя поэтому пожалуйста внимательно следите чтобы отправлять итоговую белову версию вот да еще я хотел

поэтому пожалуйста внимательно следите чтобы отправлять итоговую белову версию вот да еще я хотел сказать что добавить чтобы review это мероприятие не только полезна не только важно не так интересно но еще и обязательно потому что если вы если вы не сможете новость вне если вы не проверить и других участников так человек то к сожалению у вас баллы не будут проставлены настоять реки за это здание поэтому просто что получите баллы вам необходимо выпить 3 грешить да это это важно кстати но и

поэтому просто что получите баллы вам необходимо выпить 3 грешить да это это важно кстати но и просто с человеческой точки зрения странно даже до что ваш создатель на вашу потому что проверь это вы не хотите тратить время чтобы проверки проверяет других это тоже штуку которая тренирует полезные навыки вроде стене кода разбирательства ночью написал другой человек и так далее если вы это будете работать в сфере declaring речевой подобным вам нужно будет читать код там нерона который написал такой

в сфере declaring речевой подобным вам нужно будет читать код там нерона который написал такой человек как мы вообще хотела сделать паузу здесь потому что дальше уже не про это и по отвечать на вопросы которые касаются того что мы уже разобрали если ты была вдруг вопросы юра которые касаются того чтобы и дальше презентации давая ему просто будем это игнорировать потому что значит появится мешанина поэтому скорее всего если мы не ответим на ваш вопрос который часто рычат это значит что он будет

поэтому скорее всего если мы не ответим на ваш вопрос который часто рычат это значит что он будет еще освящен далее вот и если мы на него в итоге не ответим конце презентации пожалуйста напишите его еще раз отметим самом конце до принце можем сделать так что эти буду вопрос задавать потому что я и всех и песок на листочек и но я копировал оставлял учу делаем полистать но на листочек виртуальный листочек значит хорошо но спрашивает что я буду уметь и знать по окончании этого курс на этом роде

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

и наличием огромного количества практики то есть здесь больше практики чем в среднем на любом но в другом курсе который обучает мира сетям этому очень простое объяснение обычно если онлайн-курс какие-то делаются которые идут нет потоками с живыми людьми которые вот как онлайн при записаны типа пар серы то там нельзя сделать вот такие домашние не до ручной проверки и перебью но впереди еще можно раньше направлять намного сложнее то есть там вот курс предзаписанных как у нас есть много практики

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

говорите к но смотрите дело в том что то вероятность это один из способов моделировать постановку задач машинное обучение или формулирует постановка задач когда у вас есть некая выборка ваши на обучение у себя один имеете дело с выборкой это выбор как как правило мы можем так как посчитать мы можем представлять что она берется из некоторое вероятностного распределения ну а там где есть ряд нас на распределение вероятности вот такой могу добавить что термин регрессе этого общественности термин

распределение вероятности вот такой могу добавить что термин регрессе этого общественности термин то есть математическая статистика и теория вероятностей это связанные вещи то есть одно без другого не живет и вся регрессия на самом деле изначально приходит из идей статистики и распределение всего такого прочего как вы видели вот здесь в нашем расписании есть линейной модели чаще всего как раз регрессе как я сказала линейный модель имеет большой связь нейросетями то есть дальше спрашивают какой

как я сказала линейный модель имеет большой связь нейросетями то есть дальше спрашивают какой уровень математики потребуется для курса и вообще нужно ли она от о благе говорят что можно пользоваться библиотекой видимо безусловно знание математики смотрите давайте этот вопрос но недаром у нас есть два потока базовый продукт и на базовом у нас в частности среди первых от несколько занятий базового потока которых нет продвинутым и занятия по линиями алгебре ей занятия по введению теории

базового потока которых нет продвинутым и занятия по линиями алгебре ей занятия по введению теории оптимизации функций вот теории оптимизации функции это по большому счету математический анализ потому что там вот необходимо знать что такое производная и необходимо не только знать но и понимать и уметь там запрограммировать то магазин где-то спуску доктора связано непосредственно с производной функции поэтому конечно какие-то азы высшей математики в том числе для машины обучения знаете

функции поэтому конечно какие-то азы высшей математики в том числе для машины обучения знаете критически важно особенно у вас обратно в виде в котором устроен наш курс у нас курс получился такой мы стараемся сделать его довольно честным в том смысле что мы объясняем как работает алгоритм не бросит вас просто нажать кнопочку хит написать строчку модуль . fit которые делать непонятно что мы все-таки хотим что вы понимали как работу гриппа поэтому да там нет никаких знаний высшей математике для

хотим что вы понимали как работу гриппа поэтому да там нет никаких знаний высшей математике для прохождения стала программа нашего курса но очень желательно а именно нужно понимать основные концепции в мире алгебре то что такой вектор что-то промотать как нажать и нужно понимать грубо говоря что такой градиентный спуск для активизации функций там 1 многих переменных как раз таки и эти две вещи ему посвящены два занятия на базовом потоки значит занятия легальными алгебре и занятия что

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

вам не придется ничего учить поэтому даже или бесов катер вероятности не ставили потому что общем бы выбрали такой язык которые не требуют знания червяк давайте я добавлю что тоже на мой взгляд вопрос нужно ли знание математики иметь можно без неё он скорее философские с одной стороны с другой стороны здесь важно получить ответ на вопрос чего вы хотите собственно от диктор mega gainer и сетей можно готовить сеточки как-то тренировать сеточки для решения даже сложно задач без знаний высшей

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

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

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

вы хотите честно понимать что происходит и иметь возможность понять почему ваш сетка хорошо плохо работает как ее приготовить чтобы оно работало лучше вам этим эти вот так что-то еще и ты не та я знаю до места что я еще хотел ответить на вопрос можно ли вообще идти на этот курс знаю только программу математике 10 класс и смотрите но практика показывает что школьники проходит наш курс они представляются наверное если вы сейчас девятом классе то это будет весьма сложно но при этом саму

представляются наверное если вы сейчас девятом классе то это будет весьма сложно но при этом саму возможность провести девятиклассник бы тоже разный уровень начале подготовки разве там кто-то идет попасть уже производный пальцы не дай бог вот есть в 10 классе извини там вы условно говоря 1 половину программа 10 класса прошли то скорее всего вы чуть полегче если в 11 классе то поздравляю вас здорово столько на пришли хорошо что вы выбрали нас они игре вот и мы очень этому рады до вам будет еще

столько на пришли хорошо что вы выбрали нас они игре вот и мы очень этому рады до вам будет еще проще если вас там была школа которые вы проходите что производная то вы будете вообще как рыба в воде стона говоря я преувеличивал конечно тоже будет сложно тем не менее будет математики в принципе хватать вот то есть мне кажется что ответ такой да можно если в целом у вас неплохая математическая интуиция и вы готовы какие-то новые математические концепции усваивать мы про них обязательно расскажем

и вы готовы какие-то новые математические концепции усваивать мы про них обязательно расскажем то есть с точки зрения там какой-то технологии которые мы используем вам будет хватать тех тех терминов которые вы изучили десятом классе то есть условно самый сложный термин которыми не объясняем это организм логарифмы не объясняем потому что у него все объяснить над уровнем ну да да но хочется чтобы вы понимали что к логарифм если вы вдруг это не понимаете так вот ну как бы понятно что когда мы

вы понимали что к логарифм если вы вдруг это не понимаете так вот ну как бы понятно что когда мы спускаемся все ниже и ниже там по изначальному вашему уровню то вам просто придется все больше и больше времени тратить на освоение нашего курса вот и все если вы не уверены в вашем уровне знаний то проходите базовые поток они продают их так давайте я скопом отвечу на несколько вопросов которые здесь часто взять его как мне кажется происходит вопрос про вида я записался сначала на продвинутый потока

взять его как мне кажется происходит вопрос про вида я записался сначала на продвинутый потока теперь понял что мне нужен базовый могу ли я еще поменять или если в анкете указал что не знаю какой мне нужен поток как теперь выбрать все на самом деле очень просто заходите на стек выбираете курс вашего потока начинаете учиться у нас нет чёткого распределения людей по потокам вы можете быть в чате сразу двух потоков вы можете проходить это шлюп восток одновременно ругательства в этом смысла нет как

двух потоков вы можете проходить это шлюп восток одновременно ругательства в этом смысла нет как вы поняли это тоже часто вопроса можно видела потока вместе проходить на самом деле это бесполезно как вы понимаете потому что костяк у двух потоков одинаковый ничем не отличается вам нужен всего лишь один потоком вопрос как у вот так что никому ничего писать по поводу того что у меня сначала был продвинутый теперь хочу базовый не надо просто идете и начнете учиться по поводу шадо и по поводу других

теперь хочу базовый не надо просто идете и начнете учиться по поводу шадо и по поводу других курсов например курс опыта the silence здесь есть два вида вопрос первый подготавливают ли этот кусок поступлению в шаль нет потому что поступлению в shot вам нужно как раз таки подтянуть хорошо алгоритмы который мы вообще здесь не рассматриваем это вообще не про машинное обучение высшую математику то есть математический анализ линейной алгебры на уровне большим чем мы вам рассказываем и и статистику и

математический анализ линейной алгебры на уровне большим чем мы вам рассказываем и и статистику и статистиков теория вероятности на точно не статистика по теории вероятности вам нужна теория вероятности то есть чтобы поступить штат вам нужна хорошая математическая база вам не нужно знать что такое нейрон к или машин обочине при поступлении в шат шат это идея на другая вещь она идея на другому готовит чем наша школа имеет ли смысл проходить там shot параллельно с нашего курса мы имели смысла

готовит чем наша школа имеет ли смысл проходить там shot параллельно с нашего курса мы имели смысла проходить курс о д с нашим курсом имеет ли смысл проходить курс x одновременно с нашим курсом здесь проблема заключается в термине имеет ли смысл я не знаю имеет ли смысл конкретно для вас вопрос в том что вы хотите ну то есть и хотите пройти как можно больше курсов имеет смысл хотите я не знаю одновременно изучить высшую математику и не рамки имеет смысл проходите на времена наши курсы курс по

изучить высшую математику и не рамки имеет смысл проходите на времена наши курсы курс по высшей математике просто курсу ds насколько я понимаю он классическое машинное обучение в принципе он не очень коллировать нашему курсу планетам другой только эта информация поэтому если до думают что имейте ввиду под имеет ли смысл то наверное имеет смысл вы получите разную информацию здесь на курсе у dc но другой вопрос если у вас время и мотивации чтобы это все успеть то есть пожалуйста сюда это

у dc но другой вопрос если у вас время и мотивации чтобы это все успеть то есть пожалуйста сюда это понимаете что что происходит про дипломы сейчас скажу так на вопросы вида сколько лекций в неделю которая уже отвечала я не буду отвечать так спрашивают то же самое про программирование например вопрос если я не знаю бетон то имеет лесу проходить курс если я плохо знаю домогательства дискурс если я вообще не проронил ни разу имеет ли смысл прокалить ответ такой если вы потом знаете плохо то лучше

вообще не проронил ни разу имеет ли смысл прокалить ответ такой если вы потом знаете плохо то лучше идите на базовых поток потому что у вас там будет время раскачаться узнать про библиотеки для работы с данными которые серый бетон вот и но таким образом подтянуть спит он еще одновременно пройдет какой-нибудь курс на стороне по бетону как мы уже анонсировали это первый значит второй вариант если вы при том не знаете вообще но при этом знаете какой другой язык программирования статочно хорошо

вы при том не знаете вообще но при этом знаете какой другой язык программирования статочно хорошо тогда все тоже самое но а придется немножко сложнее тоже базовый поток если третий вариант вы не имеете опыта программирования то скорее всего вам нужно сначала получить опыт программирования потом приходить на то есть скорее всего вы не потянете просто наших программ если вы до этого не программировали еще не раз 10 на вопрос очень важно это жена типа что я буду иметь после вашего курса смотрите

еще не раз 10 на вопрос очень важно это жена типа что я буду иметь после вашего курса смотрите на программа вы будете понимать что что такое нейросеть будете понимать как она работает как работать с карточной не россетти как работать не россии для решения разных задач computer vision и будете уметь делать это все руками грубо говоря на мой взгляд портрет выпускника я вот первой части курса это человек который понимает работает и может сварганить с нуля проект по компьютер вижу то есть может

человек который понимает работает и может сварганить с нуля проект по компьютер вижу то есть может обучить нейросеть задача там сегментации классификации изображения почему более того у нас конце курсе есть проекты вам сейчас расскажу поэтому то нет наверно понятнее вопросы вида котируются ли ваши дипломы куда-нибудь или это просто диплом гарантируете ли вы трудоустройства после вашего курса это очень интересный вопрос в чате я отвечу что я про это ничего не знаю то есть мы не гарантируем

это очень интересный вопрос в чате я отвечу что я про это ничего не знаю то есть мы не гарантируем просто курс который дает вам некоторые знания возможностью мнения вы или будет править либо нет что такое котируется диплом это та тоже такой скользкий вопрос потому что котируется не диплома курсы то есть работодатели которым вы скажете что проходили курс x он не полезет в реестр и свою тетрадку где написано такие дипломы котируются или нет и если котируется но он сразу выдаст вам триста как

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

смотрят на эти ваши дипломы они я могу прокомментировать что если с более были конкретно что ребята устраивают вашего курса на стажер скин жесткой позиции то есть дополняли позиции в густой accent но это не реально я просто я не хочу никого запутывать и не как плохая реклама в нашем курсе наверное но через это зависит от вас это не значит что то стоит записаться ничего не делать получить диплом и пойти сразу 2 так работает вот это конечно так что вы должны что вы на курсе получаете вы трудитесь

пойти сразу 2 так работает вот это конечно так что вы должны что вы на курсе получаете вы трудитесь вы видите научитесь вы получаете для ванны и навыки знания идете показывать от работодателя даст нам 10 еще вопрос тоже про математику я посмотрел ваш ликбез по математическим анализом клиенту и почему он доказал стрижку сложно иметь смысл продолжать учиться смотрите посмотрите этот и без еще пару раз выполните домашнее задание которых него приложена вот и все у вас получится гистограмм если прям

выполните домашнее задание которых него приложена вот и все у вас получится гистограмм если прям вообще не получается то то может быть сможет может быть может быть нет можно писать такие вещи но в целом да как бы не все материалы которые мы вам быстро его не был наш первый раз посмотреть если эта математика так ладно давайте продолжать этот уже неслись вопрос про диплома который мы освещаем далее вот такой слайд для отдыха сколько времени тратится на курс это тоже один из очень популярных

далее вот такой слайд для отдыха сколько времени тратится на курс это тоже один из очень популярных вопросов поэтому я отнесла его срочно нужно нашу презентацию это очень сильно зависит от вашей базовой подготовки от того как быстро воспринимает информацию от того как быстро делаете домашки и всего прочего а еще это зависит от того какую домашку по счету вы делаете вначале домашки занимает мало времени к концу занимает много времени этому есть довольно логичное объяснение в конце мы начинаем

времени к концу занимает много времени этому есть довольно логичное объяснение в конце мы начинаем тренировать довольно сложные сетки и ставить эксперименты эксперименты над сетками подразумевает что вы запускаете одну и ту же сетка обучаться несколько раз с разными параметрами разными вариациями обучающего цикла вот и на этот раз довольно много времени поэтому мы заранее предупреждаем пожалуйста отводите на решение домашнее задание достаточное количество времени чтобы у вас потом не горела все

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

я могу с ней неправильно поэтому я опять же правила вопрос в чате предыдущего потока получилось примерно такие результаты вот менее трех часов неделя 36 часов неделя 6 10 10 или больше суток на самом деле люди уже мне тогда сказали что но это некорректно так оценивать потому что опять же домашки вначале домашних концепция разными есть то есть одни намного более содержательные таким менее содержательны и менее энергозатратные вот но как то вот примерно получилось на самом деле можно видеть что

и менее энергозатратные вот но как то вот примерно получилось на самом деле можно видеть что большинство ну тратят не так много танки шли часов на этом сайте на курс то есть с учетом просмотра лекций и семинаров тоже лекции про семинар это уже дано три часа так что так станет страшно так сколько людей доходит до конца это тоже хороший вопрос часто задают нам этот вопрос и у нас есть некоторая статистика его статистика по прошлым позапрошлом у потоку весна 21 года заполнили форму регистрации

статистика его статистика по прошлым позапрошлом у потоку весна 21 года заполнили форму регистрации тогда 4 тысяч человек сертификат об окончании обучения получили 900 человек диплом диплом получает люди тогда когда они набирают достаточно к между балками диплома 450 человек нужно понимаешь насколько полностью бесплатной и на него можно записаться и просто не прийти на первое занятие то есть из этих четырех тысяч человек наверняка сколько вообще не начали учиться сколько ты поняли что они по

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

какие домашние задания бывают теперь наш курс практический мы этим гордимся и у нас есть еще одна составляющая очень практическое очень очень классно в конце курса после последней лекции после последнего семинары домашнее задание вам как сделать вам будет предложено сделать итоговый проект итоговый проект это самостоятельная работа над какой-то темой которая связана с темой курса то есть случае первого семестра это какая-нибудь тему комп турнира и это самостоятельно работа над проектом

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

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

на котором вашими гонка будет грязь и или сделать телеграм бота который будет результат работы вашими рамки выдавать позицию смотря что вам понравится тема этого проекта могут быть разные мы предоставляем несколько тему такого проекта на выбор либо вы можете придумать свою тему этого проекта и делать его если вы собираетесь придумать свою тему и такой проект и нужно будет обязательно эту тему согласовать преподаватель на disclaimer пожалуйста не бросаете сейчас придумывать темы такой проект и

преподаватель на disclaimer пожалуйста не бросаете сейчас придумывать темы такой проект и согласовывать их с нами это нужно будет делать ближе к маю было 1 мая паша гости ничего не как ну почему мы только проекту не пишите потому что это совершенно бесполезно из вот примеры тем до этого проекта которые мы предлагали весной 21 года среди них вы правда верите often кодеры дело в том что сейчас откуда это отдельное занятие которое вас будет 21 году такого занять еще не было то есть мартин кадров в

это отдельное занятие которое вас будет 21 году такого занять еще не было то есть мартин кадров в общей программе курса не освещали поэтому мы сделали проект из него то есть проект of tanks это был проект я вам нужно будет было самим разобраться в том как работает не россетти of tanks года самому обучить поставить эксперимент и провести анализ этих экспериментов посмотреть на удобное пространство и так далее сейчас проект акт энкодер нет просто потому что нас есть отдельное занятие по нему

и так далее сейчас проект акт энкодер нет просто потому что нас есть отдельное занятие по нему вместо проектов tankadere сейчас проект по физ-ре как низшим то есть вам нужно разобраться как устроена не россия для познавания лиц вам нужно завести все ее части обучить нейросеть получить метрики и есть ещё проекты вилли детектив генерации изображения сегментация телеграм бота и telegrambotclient иван в меньшей степени нужно писать код для нейронах большей степени написать код для севером года то

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

от того сколько баллов на она баллы здесь выражены в процентах от общего количества баллов у нас есть диплома 3 2 1 степени чтобы получить диплом 3 степени вам нужно набрать примерно 60 процентов полах при этом вам не обязательно делать проект с проектом может вообще отказаться и при этом мудрецы получить диплом 3 степени всего направившая пациенту баллов домашка диплом 2 степени это примерно 75 процентов баллов от всех опять же не будем делать проект диплом 1 степени для получения диплома

75 процентов баллов от всех опять же не будем делать проект диплом 1 степени для получения диплома первой степени обязательно делать проект если вы не сделаете проект или сделаете проектная длина творительный оценку это там три есть este de бомберы степени вы не получите сколько баллов нужно набрать диплом 1 степени неизвестно это будет известно только в конце курса потому что диплом 1 степени наши школы дает много баллов на поступления магистратуру в моем ты и каждый раз в конце семестра мы

наши школы дает много баллов на поступления магистратуру в моем ты и каждый раз в конце семестра мы консультируемся с приемной комиссии моем фото и чтобы понять скольким человек с курса мы готовы выдать много баллов и от этого будет зависеть собственно порог прохождение на диплом пера стиками но еще раз чтобы получить диплом 1 степени вам нужно обязательно сделать проект и набрать достаточно много баллов по домашних обычно до 90 процентов несколько поводов вот но опять же сейчас мы про это

много баллов по домашних обычно до 90 процентов несколько поводов вот но опять же сейчас мы про это ничего не знаем сколько баллов нужно набрать ли получить диплом 1 степени будет известно только в самом конце нашего курса камарилло ю так вот мы переходим к тому что диплом модель у дают дополнительные баллы выступление на моем фото и магистратуру точно дает юра букваря дают им дают конечно дает и магистратуру и аспирантуру не дают бакалавриат смотрите бакалавриата баллы это 3-5 баллов

дает и магистратуру и аспирантуру не дают бакалавриат смотрите бакалавриата баллы это 3-5 баллов зависимости от диплома ну то есть понятно что либо первых степени 5 балла диплом 3 3 балла магистратура это пять баллов если вы получали баллов если вы после департаменте как пожалуйста если вам кажется это нечестным странным и так далее то это вопрос не к нам о приемной комиссии моим пением и с налим эти правила и если вам что-то кажется немного dominate внимание тут такое что это ситуация на

налим эти правила и если вам что-то кажется немного dominate внимание тут такое что это ситуация на сегодняшний момент сейчас февраль поступлении на факультет и будет вестись летом этого года к тому моменту информация может сильно измениться потому что последние годы и несколько лет каждый год процесс поступления на факультет его немного менялся и заранее сказать как он будет выглядеть мы не можем вообще никак то есть это вы узнаете только концу концу семестра собственно к началу это какие-то

вообще никак то есть это вы узнаете только концу концу семестра собственно к началу это какие-то баллы будут пачка вопросов про дипломы сразу нам прилетело естественно вопрос такой по крайней действительность ум и они действительно один год то есть все дипломы которые сейчас получите они будут действительны только этим летом следующий вопрос даются эти дом баллы только в мои или на другие факультеты mp3 тоже даются не только на форумы и следующий вопрос можно ли потом исправить какие-то

факультеты mp3 тоже даются не только на форумы и следующий вопрос можно ли потом исправить какие-то домашние задания если вы не набираешь да он достаточное количество баллов ответ нет нельзя дальше диплома дается базовым потоку верните продвинутым поток или базам потока тоже дипломы выдаются на базовом потоки тёплого базового потока на продвинутом потоки диплом продукта потока при этом димова продвинулся потока дают льготы и в бакалавриат и магистратуру а дипломы базового тока дают либо ты

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

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

знаю то есть всегда да если вы хотите продлить действие диплома то это значит что вы можете кус-кус потому что у нас не все домашки большинство домашних не меняются и смотрим код и вы можете засчитать домашки которые сейчас сделали за домашки следующем потоке если они поменяются то есть он будет мало переставить достоверную смотрите диплом дается по окончании первого семестра по окончании строго семья создается еще один диплом то есть для получения льгот достаточно пройти первый семестр и

семья создается еще один диплом то есть для получения льгот достаточно пройти первый семестр и наконец последний вопрос про диплом можно получить диплом и drain базовый предрешена дипломы и второй части дают такие же льготы но обычную вторая часть это те кто уже прошел первый поэтому сейчас если что нет продвинутого базового разделения да да да но вторая часть дает работы везде где только можно но тоже рамках мы естественными бываешь ники это те кто поступает без вступительных испытаний тут

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

поставить ну не надо лучше займитесь чем-нибудь что вам нравиться тем более что у нас дипломы можно конечно что платить но она для меня вопросом что значит если смысл получать диплом а куда это диплом потом отнесу и так далее ну я вот честно и искренне синий смотрите еще вопрос а за два типа 50 баллов не отпала не суммируются можете получить только один раз да я я еще хочу прокомментировать простое ты получать диплом но смотрите вы как бы пройдите курс давай диплом пусть поэтому ответ конечно

ты получать диплом но смотрите вы как бы пройдите курс давай диплом пусть поэтому ответ конечно стоит это нужно пойти курс хотите курс только если вы видите смысл в новом курсе они дипломами как таковому ну просто чтобы ну нравится должна ваш работает деятельность я искренне в этом уверена человеку должно нравиться что они делают так что ищите сюда что вам нравится да еще немножко тут спрашивают конкретизируйте пожалуйста что это за баллы которая лишь только диплом perviz типами смотрите там

конкретизируйте пожалуйста что это за баллы которая лишь только диплом perviz типами смотрите там нужно сделать примерно грубо говоря все домашние проекты можно потерять примерно баллов 678 так то есть это прям вот нужно досконально пройти весь курс ромашки либо которые получать на курсе the palace домашки от пациента баллы для третьего диплом это значит что вы должны получишься процентов баллов от всего возможного баллов за все домашки тупость ну за первую часть курса мы сейчас говорим о

от всего возможного баллов за все домашки тупость ну за первую часть курса мы сейчас говорим о первую часть татьяна и юрий расскажите про вашу мотивацию зачем это все делать и нам нравится поэтому вам тоже должно нравиться вот так еще спрашивают комфортно ли пройти курс на windows действие лучше с linux будет загораться я бы вам советовал выбросить windows 10 и сыграться с это нашему курсу по отношению нет можно можно на нем здесь я говорила в самом начале вам нужен только браузер который

отношению нет можно можно на нем здесь я говорила в самом начале вам нужен только браузер который поддерживает коллапс трепет youtube но просто на будущее совет юрия на будущее ваше развитие если вы присядет на linux здесь так вот теперь чуть-чуть инфы по поводу второй части курс мы скоро закончим не переживаете тогда поговорим еще на покиньте вопрос конца может быть даже на не самое непосредственное отношение к нашему курсу имеющие но давайте дойдем до конца презентации тогда успокоимся и

отношение к нашему курсу имеющие но давайте дойдем до конца презентации тогда успокоимся и будем разучились смотреть у нас еще 2 части курса по этого момента вы ну я несколько раз а не упоминала но мы говорили в основном про первую часть курса на которую сейчас пришли у нас есть 2 как я сказала что ее лучше юрта уже сказал что лучше ее проходить тогда когда вы закончили первую часть курса то есть не надо пытаться ринутся сразу на обе думаю что просто будете проверен изучать смысл этого прост на

не надо пытаться ринутся сразу на обе думаю что просто будете проверен изучать смысл этого прост на второй части курса мы подразумеваем что вы знаете все программы первым в этом часто всплывают идеи которые изучаются на первой части курса то есть действительно имеет смысл проходить через курса постепенно поэтому называется вторая часть курса вот длительностью а также один семестр вы например в этом семестра проходите первую часть курса а в сентябре приходите к нам на вторую часть курсу на

в этом семестра проходите первую часть курса а в сентябре приходите к нам на вторую часть курсу на сентябрь следующее место у нас каждый семестр то есть стартует 2 части 1 2 в этом семестре тоже будет вторая часть курса про неё мы анонсируем чуть позже но вам не себя так они сначала только тем и второй части курса этапе в целом рнн обработка текста обработка звука и некоторые продвиньте тему которая последнее время часто меняются и обновляются потому что сейчас очень много прорывов в этой

которая последнее время часто меняются и обновляются потому что сейчас очень много прорывов в этой области произошло трансформер igbt прочее вот вот это вот туда в конце тоже также финальный tl 1 по темам другим потому связанном ужасную пить там про быть кребса нет камня не знаю про трансформера машины переводит что-то подобного полочки также выдаются на про дипломчики мы уже поговорили сейчас только что что там тоже самое политика что первой части курса вы получаете диплом получаете до балды

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

более понятными более решаемыми и приятны мерилом для выполнения вот поэтому чтобы чтобы научиться это делать чтобы понять где у нас больше всего проблем нам очень важна обратная связь и она действительно важно выйдете на читаем это не просто так поэтому после каждой лекции семинары на степик у вас будет блог где будет находиться форма обратной связи пожалуйста как только вы посмотрели лекцию как только вы посмотрели семинар зайдите в эту формулу и заполните ее относительно вот этой лекции и

только вы посмотрели семинар зайдите в эту формулу и заполните ее относительно вот этой лекции и семинары которую только что посмотрел то есть пока вы помните какие косяки были в этой лекции или набрать что вам понравилось в этой лекции семинаре зайдите пожалуйста формы заполнены то что вам если вам что-то очень понравилось это тоже важно писать потому что человек будет понимать что это очень важно то что что вот он делает когда ведет там лекции семинары для вас очень важно понятный и вообще

то что что вот он делает когда ведет там лекции семинары для вас очень важно понятный и вообще будет просто приятно но если вы хотите оставить обратную связь или обратить наше внимание к более в такой сложный косят который важно нанести 1 руки бегайте нас чатах или пишите в личку прикрываясь модный мир не юрию или другим преподавателям лекции или семинары которые вы смотрите вот это тоже не возбраняется единственная прошу вас я говорила что мы все есть в чартах чатах телеграме ваших потоков мы

единственная прошу вас я говорила что мы все есть в чартах чатах телеграме ваших потоков мы доступны в телеграме на все знаете вы крайне мере вы можете посмотреть наши никнеймы и написать нам напрямую на пожалуйста не злоупотребляйте этим то есть не делайте так что если у вас какой-то самый простой вопрос типа не могу найти вот такую вот формочку который вы обещали где она спросите пожалуйста это вопрос на делаете вам наверняка помогут если 1500 человек который сейчас есть 2 части как бы ты

это вопрос на делаете вам наверняка помогут если 1500 человек который сейчас есть 2 части как бы ты ведь всех преподавателей мы так свихнемся лучше отдайте нам сосредоточиться на улучшении курса для всех материалах и на решение действительно важных сложных вопросов которые не может решить чатик вот тогда можно настаивать конечно же даже можно на столе моменты видео не загрузилась или что-то не так с домашкой это конечно нужно оставлять а если вас на вопрос вида не понимаю что вот это значит

так с домашкой это конечно нужно оставлять а если вас на вопрос вида не понимаю что вот это значит домашки или не могу найти такую штуку которая вроде бы есть туловище тысячи так у нас есть флаг есть на восьмой канал у нас есть часики у нас есть еще канал так ладно у нас есть телеграм-канал дел stories точнее у меня есть канал дал stories потому что туристам буквой а ну ладно неважно в общем у нас есть телеграм канал который называется the stories вот его ссылка на него никто не втираем это

нас есть телеграм канал который называется the stories вот его ссылка на него никто не втираем это канал где мы публикуем интересные истории измире искусно интелекта обзор статей с разной конференций то есть я я веду канал я я опубликую там интересные ссылки на ивенте будет норму по нейронным сетям интересные обзоры того что творится в мире скучного текста в мире я уже мире города сказал мне уже заговариваться я просто парижа я на эти это мое детище публику и разбор и интересных статей например

я просто парижа я на эти это мое детище публику и разбор и интересных статей например вот недавно у пана я и выпустил статью потому как алгоритм решает математические задачи нейронная сеть решать творческие задачи вот примеры работ там ссылки на разные обучающие материалы то есть например на видео по какой-нибудь эммелина классные блоги людей которые пишут про декор ник они сеть мне кажется этот канал будет классно дополнением к вашему обучению потому что он как бы погрузит вас мир deep

этот канал будет классно дополнением к вашему обучению потому что он как бы погрузит вас мир deep learning он покажет вам что вообще в нем есть даст вам много ссылок на разные обучающий материал и просто интересный материал а про и я просто позволит вам понять насколько шок на самом деле мир и я и и doel чем отличается вообще и я deeply ринга покрыт как у вас как и в научно составляющая то есть может понять какие вообще архитектуры есть какие задачи решаются с помощью дверь и также какие-нибудь

понять какие вообще архитектуры есть какие задачи решаются с помощью дверь и также какие-нибудь просто интересные факты и новости из нее я и в мире это реклама взламывать играм канала ну и последний слайд нашей презентации это про поддержку наша школа слышали бесплатно для всех все могут пройти учиться опять же у нас нет даже никакого отбора все могут прийти учиться как вы видите нам каждый раз когда мы набираем людей страшно что если много людей останется до конца то там где мы предоставляем

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

эту школу как видите мы горим свои задачи скажем так идеи и действительно хотим вам помочь если вы хотите поддержать наш проект вы можете оставить нам дан от по сути на нашем сайте site de los que точка орг наверняка вы его уже видели вот слэш жадный или вот сразу по вот этой ссылке на наш налет можете вставить на донат и мы будем просто очень благодарны еще ссылки есть в описании к этому видео и я кстати хочу пришлет доната которые пришли завернуть его оказать как к настоящей выглядел лагерь

и я кстати хочу пришлет доната которые пришли завернуть его оказать как к настоящей выглядел лагерь так на что лишь на ус доносил 100 рублей и сказал ловите сотку челенджи есть какие-нибудь у вас ли это вопрос такой если вас принесем же нет видимо надо будет сделать челенджи за 100 рублей то спасибо большой алёша мы это очень ценим игорь отправил 10 рублей и написал что ожидания от курса 10 waler wa буш спасибо большой играть 5 валера стал медитировать короче взрыв и отправила тысяч рублей и

wa буш спасибо большой играть 5 валера стал медитировать короче взрыв и отправила тысяч рублей и благодарил нас за работу спасибо огромное за фио4 так мы что у нас презентация кончилось да и стиральные машины вопросы там есть некоторые повторяющиеся которые мы обсуждали вначале их можно кратко просто повторить но не сильно вдаваясь например задействует вопрос можно ли три последние темы из продвинутого поток вы разместили базу макс портативные ребята не есть приписанные на youtube и смотрите

поток вы разместили базу макс портативные ребята не есть приписанные на youtube и смотрите вообще да да да сделаем сделаем так мы просто в курсе сделаем блок в котором в которой радует все лекции который не рождествено потом вот у нас еще много вопросов которые тут вызов значит смотрите у нас есть популярный вопрос очень популярный что делать если мне не пришла какая-то ссылка или я там сотни заполнил и заполнил ли я что не будет и так далее вообще где где курс смотрите первых да во первых вот

и заполнил ли я что не будет и так далее вообще где где курс смотрите первых да во первых вот по по этому адресу есть вся информация которая нужна вот это в том числе новость на что вторых презентацию я добавил ссылки на сами курсы на старик почему я это сделал потому что у нас вывеска и все все все кто все кто зашел это видео вы скорее всего так или иначе заходили на сайт нашей школы и заполняли там краткую форму регистрации который буквально три вопроса фамилия имя это поток на которые буду

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

выясняем значит мы сделали так мы во-первых продублировали это письмо на почту рассылка через другой сервис и это письмо вам должен опять и а во-вторых во-вторых мы продлили регистрацию до 19 февраля поэтому проблемам со стоками вас не пусть и в третьих я бы эту презентацию добавил ссылку на сами вкус и на старики и что он сейчас нужно сделать если вы еще не заходили на степик и в эти курсы не заходили вам нужно открыть презентацию она есть в ссылке в описании как мы видео как мы консультации в

вам нужно открыть презентацию она есть в ссылке в описании как мы видео как мы консультации в этой презентации найти ссылки на курсы на стыке зайти на курс который вам нужен и нажать кнопочку ступить на путь то есть смотрите когда вы заполняете форму регистрации ним и вас после этого добавлено курса вы сами вступайте на космос ты это очень важно нужно где то же то кучку потому что сэмми как бы самое главное вообще это то место где вы собственно учиться вот значит вопрос если мне не пришло

бы самое главное вообще это то место где вы собственно учиться вот значит вопрос если мне не пришло письмо что делать смотрите есть во мне пришло письмо и вы поискали во всех возможных в папках типа спам там рассылки и так далее и вам даже не пришло письмо сегодня после раз вы которые мы сделали то напишите мне в личку я вам пришло содержание этого письма вот дальше дальше что делать если мне не пришло ответное письмо на форму регистрации с кучей вопросов угол форму которую я заполнил поставок

пришло ответное письмо на форму регистрации с кучей вопросов угол форму которую я заполнил поставок мне пришлось извините я java скачать и забота справиться наш корабль вы заполняете форму регистрации на сайте вам постоянно должно прийти письмо в котором в частности есть анкета участника курса google форме вот эту анкету участника курсы хорошо вы заполнить если вы заполнили эту анкету готовую форму его мне пришло в ответ подтверждения того что вы ее заполнили это нормально потому что углу форма

его мне пришло в ответ подтверждения того что вы ее заполнили это нормально потому что углу форма не рассылает вам автоматически информации о том что вы ее запомните если вы заполнили это прекрасно если вы еще и и не заполнили то обязательно нужно заполнить где найти ссылку ответ либо в письме которое пришло после заполнения формы на на сайте диску либо напишите мне я вам пришлю автор просто вручную ссылку на эту если у вас ведь если вы вдруг волнуйтесь заполнили в эту форму или нет потому что

ссылку на эту если у вас ведь если вы вдруг волнуйтесь заполнили в эту форму или нет потому что мне знаю вы запретили что-нибудь такое то ну есть два варианта либо вы заполнить еще раз либо если вы почти уверенность и заполнили но там осталось 15 устройство не запомнили в принципе вы можете просто на это забить и ничего критически страшного не произойдет в этом случае потому что в конце курса если там вам не придется диплом на эту почту который в этом , то ну вот так ты также сможете просто не

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

а ты рассказываешь это на самом деле действительно проблема каждого нашего потока мы пытаемся сделать как-то рассылку что-то постоянно ломается все паникуют некоторые люди даже учиться не приходят потому что мне пришла рассылка они решили что их не взяли на вкус это вообще просто и вот пишет мне человеком я не знаю в ноябре говорит а можно следующий с места пойти в ваш на вкус это в этот раз меня не взяли что значит не взяли у всех берем бред уме ответ не пришел а когда я заполняла заявку и так

не взяли что значит не взяли у всех берем бред уме ответ не пришел а когда я заполняла заявку и так скучно стало так стыдно стало прямо же есть у нас постоянно с этим какие-то проблемы и честно смотрите не забейте если вам ничего не пришло учиться могут все вне зависимости от того получили вы ответ или нет даже вне зависимости от того заполняли в этой несчастной формуле не вам нужно просто открыть курс на стыке он бесплатный и начать не мучиться и желательно подписаться на канал элвис там тоже

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

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

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

не так что вы просто заполняете код и всех вот получить одинаковое все получить разные эксперименты разные идеи разные выводы и хочется как-то качественных проверять поэтому да у нас есть задержки проверки домашних но это стоит того число все просим прощения если вы уже проходили наш курс и вы хотите заново его пройти спрашивают что нужно для этого сделать то же самое как будто бы вы никогда этого не проходили то есть заполняется форма регистрации заполните анкету участника люди стали на курсы

не проходили то есть заполняется форма регистрации заполните анкету участника люди стали на курсы в пекин штатах да но если у вас есть какие-то намажь которой вы раньше делали они не поменялись даете эти домашки получаете за них те же балла ставит кого-то из оснастили что там подобное но не надо [музыка] спрашивает обязательные работы скала beer или можно в юпитер его на календарь можно и питирим анаконде но проблема в том что на клабе вам выдаются верней проблема преимущество коллаба в том что

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

модели поэтому некоторые вещи на ноутбуке своем сделать будет невозможно и вам понадобится только для начала лучший сервис если вам удобнее работать на юпитере то для выполнения первой домашнее задание вы спокойно можете сделать у считанные битве на компьютер да да это правда много просто рассказать про себя я так ссылку на [смех] вид активности можно до ищите нас меня зовут юрий новиков не написано соображений нет давайте расскажем значит я учусь в аспирантуре м4 работаю в институте искусств

соображений нет давайте расскажем значит я учусь в аспирантуре м4 работаю в институте искусств интеллекта открылся в москве это дочерняя но не начали организации мы существуем в том числе при поддержке сбербанка вот таня я закончила магистратуру я не учусь в аспирантуре пока что но я работаю в компании philips в лаборатории в лаборатории делаем вкус надеты медицины кто так учил ее люди которые ведут этот курс не пюрешку нас есть такие преподаватели конечно же и люди которые проверять домашки но

этот курс не пюрешку нас есть такие преподаватели конечно же и люди которые проверять домашки но мы как-то большим всем занимаемся было бы закончили на катер турова мы когда-то она еще была дарней мы ехали в том вот не знаешь . навалимся века заведем всякие и пытаемся двигаться сквозь интеллект в массы и и вперед в научном смысле во всех смыслах . и будут ли панель домашки исправен внутренних ответ нет не будет спрашивают как в целом проходит практика с решением задач если занятия записаны

ответ нет не будет спрашивают как в целом проходит практика с решением задач если занятия записаны смотрите у нас формат практических семинаров с программированием следующий что есть преподаватель у которого есть ноутбук и в ноутбуке есть код который уже написан в этом ноутбуке а есть код который нужно заполнить и вот семинарское занятие состоит в том что преподавать перед вами заполняет этот ноутбук то есть пишет от код который нужно как-то который нужно написать чтобы буквы там просто и

ноутбук то есть пишет от код который нужно как-то который нужно написать чтобы буквы там просто и задание в и в этих зданиях давать разбирается во время семинара навсегда ты записан поэтому мы вам рекомендуем просто проходить это семинарское занятие совместно с видеозаписью то есть вы открываете тот же ноутбук который был преподавателем и совместно с придавать у него заполнить я думаю что удобнее всего будет делать так если вам хочется какого-то более интерактивного формата то это мы оставили

всего будет делать так если вам хочется какого-то более интерактивного формата то это мы оставили нам на вебинары которых вы в принципе можете нас просить чтобы прокомментировать спрашивать стремление к этому если вдруг пришло позже просто то у нас под живыми минари чтобы вы могли спросить и вопроса который подарил отеля не покрыла в лекции семинаре которого возникли никогда не на одном курсе не бывает такого чтобы преподаватель там условно за полтора часа покрывает все все все вопросы которые

бывает такого чтобы преподаватель там условно за полтора часа покрывает все все все вопросы которые человек могут по теме дата не бывает вот поэтому живых бинар это отличная возможность как раз пасек лично там чаще всего их идут те преподавателей которые были эти лекции которые были в течение этих двух трех недель то есть чем человек это понимает прр кстати могу добавить каждый раз и спрашивает не добавить ли вам пару занятий апрелевка не отыграли здесь есть два фунта 1 point том что у нас курс

добавить ли вам пару занятий апрелевка не отыграли здесь есть два фунта 1 point том что у нас курс самого начала и он длится семестр туда просто невозможно пихать все подряд то есть он ограничен по времени плюс мы даем хотим давать его качественно поэтому он покрывает те темы которые мы сейчас суть или ирель это довольно сложная тема оно сложное не технические концептуально скорее чтобы влиться в реле понять вообще как там все работает даже на том уровне который был 2017 году нужно делать

в реле понять вообще как там все работает даже на том уровне который был 2017 году нужно делать отдельный курс то есть я могу вам рассказать в чем идея на задавая лекция например и реле но делать нечего вырыли вы за эти две лекции мне научитесь вообще то есть смысл в этом нет плюс не я не юра не специалистами по или это довольно это чуть-чуть отдельно стоящие области того чем мы занимаемся поэтому не можем гарантировать какой-то офигенный там офигенного качества лекций и семинаров поэтому вот

не можем гарантировать какой-то офигенный там офигенного качества лекций и семинаров поэтому вот наш мир нужен отдельный курс спрашивают еще если у нас курса для более начинающих спасите пока нет пообещал хорошо да то что с ужасом галочки не поставишь эту тему так смотрите спрашивает можно ли проходить курс быстрее чем заданном темпе можно да вы для этого можете брать курс предыдущего запуска и проходить его окей с домашкой будут открыты для знать ведется давно когда блоки будут открываться то

его окей с домашкой будут открыты для знать ведется давно когда блоки будут открываться то есть они открываются карту свобода как мы говорили с 3 не креста может то есть у вас просто сейчас курс выглядит как как бы там ничего нет если вы посмотрите на курс осень 21 до там куча занятий вот у нас целью чтобы за семестр у нас как бы курс которым ничего нет превратился в курс которым кучу занятие это будет постепенно происходить вот еще вопрос когда первые dz о это хороший вопрос смотрите у нас

это будет постепенно происходить вот еще вопрос когда первые dz о это хороший вопрос смотрите у нас сейчас на стыке принес первое занятие там есть лекция по искусством интеллект вводная лекция после нее никаких практических заданий нет никакого домашнее задание тоже готовится первое занятие с домашним заданием у нас будет в конце этой недели то есть субботу нас появится лекция плюс семинар и в субботу же появятся первые домашнее задание третье есть вопрос интересный пригласите ли вы лучше

в субботу же появятся первые домашнее задание третье есть вопрос интересный пригласите ли вы лучше слушатель на стажировку у нас есть аналог стажировки это приходить и проверять домашки следующих потоков если вы классный закончили вот но таких людей обычно набирается не очень много в плане там есть креста желающих плюс мы смотрим на то как человек развил свои компетентности чтобы иметь возможность проверять счета другие бумажки чаще всего это люди которые заходят чтобы части косы спрашивают как

проверять счета другие бумажки чаще всего это люди которые заходят чтобы части косы спрашивают как попасть в 3-7 процентов заканчивающий вкус так ответ из двух частей во первых не 37 процентов заканчивают просто больше процент 20 во вторых нужно зайти в чат силе гоню что без него и активно создавать всякие опроса сотни получается а еще про станут как жить внутри курсы жить в том же информационном поле штейн и тогда будет вам счастье но и потяните конечно эти вещи которые вам сложно дается перед

поле штейн и тогда будет вам счастье но и потяните конечно эти вещи которые вам сложно дается перед началом курса по и торт forever идиоты будет шанс зависит от маркетинга этого разработчики можно делать но у нас сам по себе . он п как много понадобится в алгоритмах дтл вам нужно понимать что такой класс и как он работает да смотрите у меня очень мало зарядки осталось поэтому я думаю что я хочу золотые мы пойдем анонимы и прислали 500 рублей и 100 рублей пасибо большое она не вы хоть мы и не за

мы пойдем анонимы и прислали 500 рублей и 100 рублей пасибо большое она не вы хоть мы и не за как позову . яков отправил 10 рублей и задал вопрос вот владельцев ofw чтобы сделать если однажды и говорит вам что вы сильнее его и доказывает вам эту но это прекрасно мы сильнее чем у и вот если наоборот это будет если бы вопрос был типа если бы я говорил с план сильнее нас я бы сказала что камера на чем он обучался или кино релевантной примере из обучающих внуки нечего тут это или ты просто его и

чем он обучался или кино релевантной примере из обучающих внуки нечего тут это или ты просто его и зарядки вытащишь иногда бывает что ты обращаешься ко лбу темпами я это мы зарядки не вытащить из калифорния в июле отправила тысяч рублей и попроси поблагодарил на за курс сказал что вы классные пасе большой юлия за курс нас продают пока рано сначала пройдите в этом благодарите но очень приятную александр отправил 500 рублей и поблагодарил за то что вы делаете сказал что сейчас так пола хорошего

отправил 500 рублей и поблагодарил за то что вы делаете сказал что сейчас так пола хорошего образования пасе большой лександр мы стараемся сделать больше хорошего образования яков отправил 10 рублей и спасибо а стоит ли ваш курс проводить желающим проходить желающим стать работа техникам покрываете ли вы темы связанные с этим включая беспилотные автомобили мне нравится глубокое обучение на скучно без физики поэтому решил знать я бы сказал что скорее нет наш курс робототехники мало каши не имеет

без физики поэтому решил знать я бы сказал что скорее нет наш курс робототехники мало каши не имеет может эта игра красный костный троне в первую очередь я доказал ик лазера и подчеркнуть мы даем мне кажется классику которая нужно знать человеку делать робототехнику по поводу только с точки зрения на модель так что я бы сказала что не будет даже ливанцы но конечно эта техника выпуске куски стр но нужно там еще больше будет смысле изучать потом дальше там не только rialto мы из есть тот же самый

нужно там еще больше будет смысле изучать потом дальше там не только rialto мы из есть тот же самый много чего да так ну что спасибо огромное да если у вас еще остались вопросы вы можете написать их нам telegram берегами как нас найти заходите в чат своего потока и там мы выделены как админы вот и пишется нам мы вам отвечаем все большое спасибо всем за внимание вроде бы могли посмотреть или я желаю хорошего курса вы извините и перебил ее извините если мы не ответить на какие-то вопросы во

я желаю хорошего курса вы извините и перебил ее извините если мы не ответить на какие-то вопросы во первых там куча всяких обсуждений в ней тоби во вторых у нас осталось правда очень мало зарядки просим за это прощения и затягивать наверное уже не имеет смысла потому что все слушают какие-то вещи страны если остались какие то вопросы которые вам очень хочется ответить пожалуйста пришлите нам или спросите в чате если остались кий дорог вопросы которые дети освещались перед тем как спрашивает

спросите в чате если остались кий дорог вопросы которые дети освещались перед тем как спрашивает лично пожалуйста либо посмотрите презентацию который будет выложено в dls dls news либо основном смысле либо спросите вашего все альфред гусарова желаем удачи он направил тысяч рублей просил пожил всему желаем удачи до от меня тоже есть двойная удача спасибо огромное все все знаете нашу россия

теперь начинать сегодня на на на алексе я расскажу про машины обучения это такое будет самое базовое введение я уже рассказал про план курса ну в салон вы можете его еще раз прочитать или читать первый раз если вы до этого еще не успели прийти на наше занятие вот давайте теперь я расскажу немножко о том кто я такой так вы же видите полный экран да я григорий ли рейки я учусь сейчас fifty five это и еще учусь в шаге работаю research интерном в калтехе ну вроде бы более менее вся сегодня я хочу

и еще учусь в шаге работаю research интерном в калтехе ну вроде бы более менее вся сегодня я хочу рассказать вам про машины обучения основная основной смысл этой лекции наверное в том чтобы дать вам понимание того что машина обучение очень модуль на вы можете как-то перебирать разные частички вот это вот всего алгоритм обучения и получать разные результаты и вот так вот перебирая находить что от самые хорошие давайте пройдемся по плану лекции и зачем все это вообще нужно но вначале мы посмотрим

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

и дальше следующий пункт обучения моделей мы посмотрим как правильно как хорошо обучать модели математически как обучаются нейронные сети и вообще почти все другие модели машина вообще не я кроме вот это вот кнн которая кении раз neighbors после этого мы рассмотрим как раз не дрыгайся который обучается в методом минимизации эмпирического риска я про это расскажу вот в четвертом пункте посмотрим на переобучение на то как почему нам нужно разделять наши данные на тестовую и обучающую выборку и в

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

обучения что вообще бывает ну можно посмотреть ему такую очень красивую картинку и она достаточно хорошо классифицировать задачи но иногда бывают такие задачи которые сложно классифицировать отнести к одному типу некоторые задачи где-то посередине находится ну в общем это скорее просто красивая картинка его мы вообще запоминать не нужно главное запомнить что вот такие большие классы которые есть для задач машинного обучения это оцифровать для ли теле обучении без учителя reinforcement клевали

для задач машинного обучения это оцифровать для ли теле обучении без учителя reinforcement клевали обучение с подкреплением и запивать обучение с учителем что значит с учителем и без учителем и сейчас посмотрим reinforce ну да мы в общем сейчас посмотрим на типы задач что красивое здание общение без учителя вот пример какой-то задачи которые относятся к этому классу это кластеризация представьте что у нас есть какие то данные о банковских транзакциях и нам нужно среди них найти какие-нибудь

что у нас есть какие то данные о банковских транзакциях и нам нужно среди них найти какие-нибудь разные виды транзакции чтобы определять что там какие-то одни типа транзакции нужно проверять более тщательно и какие то другие менее тщательно и так далее или как на сайте написано пример мы можем брать и кластере заводь то делись на какие то группы людей наших покупателей или клиентов чтобы более эффективно рекламироваться следующая задача это enforcement ли они про него мы тоже сегодня говорить

рекламироваться следующая задача это enforcement ли они про него мы тоже сегодня говорить не будем но rainford мы тралим сейчас прям очень горячую тему это переводится как обучение с подкреплением и вообще вот эти алгоритмы основываются на том что алгоритм который мы собственную чем он работает в какой-то симуляции окружающего мира он может делать определенные действия и за каждое действие он получает награду или наоборот наказания и в итоге вот этот алгоритм как-то пытается научиться получать

награду или наоборот наказания и в итоге вот этот алгоритм как-то пытается научиться получать максимальным наградах и таким образом выигрывать вот допустим человека в год alphago это как раз системы которая была построена на основе rainford внутри аниме и она смогла стать настолько эффективный за счет особенности reinforcement троллинга эта система могла играть сама с собой альфа по сыграл прям миллионы партий сам с собой и благодаря этому смог работаешь разраб очень много хороших стратегий

миллионы партий сам с собой и благодаря этому смог работаешь разраб очень много хороших стратегий которые кстати напоминает то что придумали люди за долгие годы игры фку ну нам все а сегодня не очень интересно потому что основная наша задача это обучение с учителем потому что обучение с учителем это именно то что решают не рамки сейчас в следующем в этой презентации очень много используется какого-то математического языка зачем это сделала ну во-первых если у кого то из вас был такой очень

математического языка зачем это сделала ну во-первых если у кого то из вас был такой очень хороший курс математики в вузе то я надеюсь что математика позволит вам как-то легче понимать что именно имелось ввиду более строго более структурированно и просто в общем поможет вам закрепить материал а для тех кто них не очень хорошо знает математику я надеюсь что мои объяснения ну потому что формулы и выражение разнообразны они будут на экране словами я буду пояснять что они знают я надеюсь что вот

выражение разнообразны они будут на экране словами я буду пояснять что они знают я надеюсь что вот это пояснение поможет вам наоборот их понять и зачем это нужно но математика просто очень полезно и для того чтобы описывать задача машинного обучения на прекрасно подходит всего памятью в общем вам будет намного удобнее давайте начнем с того что как вообще выглядит наша задача ну представьте что у нас есть самые абстрактные определение какое-то множество объектов и какое-то множество ответов для

нас есть самые абстрактные определение какое-то множество объектов и какое-то множество ответов для них и также существует функция которая вот этим объектом сопоставляет ответы мы назовем его истинной зависимость закон природы функция которые мы хотим восстановить название очень-очень много называется она еще таргет целевая переменную ног всего так что ж это такое какие-нибудь примеры ну допустим так в качестве такой функция в качестве объектов можно задать людей в качестве ответов кликнет

так в качестве такой функция в качестве объектов можно задать людей в качестве ответов кликнет человек на рекламу или нет и функция будет каждому человеку все поставлять кликнет он на рекламу который мы вам покажем или нет зачем такая функция может быть нужно ну вообще мы как бы хотим показывать рекламу только тем людям которые собираются на нее кликнуть потому что иначе мы просто так тратим деньги и чем эффективнее мы сможем предсказывать такую функцию то есть определять какие люди кликнуть

и чем эффективнее мы сможем предсказывать такую функцию то есть определять какие люди кликнуть рекламу а какие нет тем более эффективным и будем расходовать деньги что же значит часть обучение с учителем ну на самом деле никакого учителя которые дает нам какие-то знания нету эта часть про учителя означает что у нас есть набор объектов для которых мы знаем ответ от упиваясь зданий это задача ставится точно так же только у нас есть сами объекты ответов мы не знаю но и ответов вообще не существует

точно так же только у нас есть сами объекты ответов мы не знаю но и ответов вообще не существует нам нужно делать что-то только с самими данными очень хорошо когда вот это вот множество объектов мы можем закодировать с помощью какого-то вектора состоящего из действительных чисел ну или недействительных целых без разницы в общем как только мы можем закодировать наши объекты для которых мы хотим узнать ответы с помощью вектора нам становится значительно удобнее и вот почти весь аппарат машинного

ответы с помощью вектора нам становится значительно удобнее и вот почти весь аппарат машинного обучения который был разработан он рассчитан на данные которые в конце концов приводится вот в такую вот матрицу ну или табличку где строки это объекты ну и вот в каждой строке у объекта 1 будут признаки икос 11 x 12 и так далее в общем м каких-то действительных чисел и они будут характеризовать наш объект такие вот числа мы называем признаки я как раз только что упомянул это слово или это более-менее

такие вот числа мы называем признаки я как раз только что упомянул это слово или это более-менее жаргонное понятие фичи я постараюсь его как можно сильнее постараюсь не использовать но если когда-то он проскочит то прошу прощения то то же самое что и признаки у нас есть такая матрица с обучающим называем это обучающей выборкой как раз вот здесь вот поэтому стоит x3 или просто выборкой потом вы узнаете в чем разница между просто выборкой и обучающие и части так же у нас есть вот такой вот вектор

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

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

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

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

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

работы с числовыми признаками ну и мы можем как-то там закодировать порядка вы обычно с категориями приходится думать как же как хорошо представить их все-таки в виде обычных чисел которые в все модели машинного обучения точно хорошо заходят если же мы теперь смотрим на то что из себя представляет вот это множество y множество ответов нас изменяется на самом деле намного больше нас изменяется тип нашей задачи если y это допустим множество из 0 единиц и или множество целых чисел или вот такое

нашей задачи если y это допустим множество из 0 единиц и или множество целых чисел или вот такое вот множество я сейчас обещаю что это тоже значит то такая задача называется задачи классификации почему давайте посмотрим что вообще эти ответы нолик или единичка могут значить нолика ли единичка это класса какие бывают задачи и примеры задачи допустим нам нужно да как раз я уже говорил про такую задачу допустимую нужно узнать кликнет не человек по рекламе ответом будет нолик или единичка но только

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

тоже уже приводил это предсказание стоимости дома или еще один тип задача это ранжирование в общем примеров и вы точно сейчас снова увидите первая задача примерно классификацию ну datasette ирисов фишера это такая очень-очень старая штука это наверное один из самых старых data set of которые сейчас вот используются для каких-то для того чтобы показать как это все немножко выглядит что она себя представляет фиг фишер собрал данные о разных видах и риса вот здесь они разными цветами отмечены

представляет фиг фишер собрал данные о разных видах и риса вот здесь они разными цветами отмечены красный это ситуация зеленый это versicolor и голубое virginica он собрал длину лепестка ширину лепестка что сцепу я не знаю точно что именно это значит и без разницы он просто собрал какие-то числовые признаки которых характеризует каждый цветок и ему стало интересно вот можно ли взять и по этим четырем числам понять что это за цветок то есть классифицировать его отнести к одному из трех видов

четырем числам понять что это за цветок то есть классифицировать его отнести к одному из трех видов давайте посмотрим какая то задача эта задача классификации потому что у нас множество ответов состоит из трех чисел 1 2 или 3 1 класс 2 класс или 3 ситуация versicolor или virginica какие у нас здесь есть признаки все четыре признака это длинный чего-то ну то есть они просто действительные числа поэтому у нас есть только числовые признаки следующую задачу цена дома про которые я уже говорю

поэтому у нас есть только числовые признаки следующую задачу цена дома про которые я уже говорю допустим нам нужно предсказать стоимость дома и у нас есть dataset с признаками удаленность от метро оценка состояния дома количество комнат площадью от строительства и название района в котором находится дом подумайте теперь вот какая-то задача я только что назвал три типа ну это точно не классификация на ranking тоже не похожи потому что множество цен долов оно никакое-то конечно и так что это

на ranking тоже не похожи потому что множество цен долов оно никакое-то конечно и так что это задача регрессии какие здесь есть признаки ну во-первых числовые это например площадь количество комнат год строительства удаленность от метро порядковые это оценка состояние дома плохое средне хорошее ли отличную потому что это такие категориальный признак на котором есть отношении порядка плохо это что-то меньше чем хорошие вот и категориальный признак название района в котором находится дом и пример

меньше чем хорошие вот и категориальный признак название района в котором находится дом и пример для 3 задачи для ран king это то чем занимаются все поисковики каждую миллисекунду когда кто-то пишет запрос в поисковую строчку у поисковика есть какая-то база данных с документами и когда человек делает запрос нужно отдать ему самые релевантные документы с самой полезной информации документы в данном случае это какие-то html-странички которые вот есть в интернете что нам известно как то мы вообще

случае это какие-то html-странички которые вот есть в интернете что нам известно как то мы вообще для начала надо формализовать эту задачу и понять какие данные какой датасет лоза нам известны известен запрос пользователя ну эта строчка просто текст документа но это тоже строчка какие ключевые слова есть в каждом документе это сложно характеризовать как какой-то признак как тип признак как один из признаков которые мы только что рассматривали и вот насколько каждый документ популярен наверно

из признаков которые мы только что рассматривали и вот насколько каждый документ популярен наверно это какой-то числовой признак мы много всего еще на самом деле потому что поисковые движки очень сложные там учитываются очень очень много всего и благодаря этому получается такая хорошая поисковая выдача ну как я уже говорил это задача ранжирования потому что множество ответов это числа от одного до n где n это ну просто количество документов нам нужно взять и расставить отсортировать документы

до n где n это ну просто количество документов нам нужно взять и расставить отсортировать документы по их релевантности потому насколько бы их захотела увидеть пользователь и при этом ну как бы места не упорядочены то есть это не просто классификация каждого документа на какое то одно место у этих классов есть порядок и поэтому это задача ранжирование и какие здесь есть признаки ну много всего сложного потому что здесь есть строчки здесь есть вообще какие-то непонятные вещи скорее всего у нас

потому что здесь есть строчки здесь есть вообще какие-то непонятные вещи скорее всего у нас есть информация о том как документы друг на друга ссылаются то есть это какая-то такая графа vaio информация мы вашим классическим машинным обучением просто сразу взять из эти данные засунуть в модель машинного обучения вообще не получится их надо как-то предобработки как то возможно использовать другие техники которые позволяют с ними работать ну вот от сегодня не к нам давайте теперь посмотрим на

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

и я их точно не пропущу дата к какому типу признаков относится на самом деле ну просто так взять и дату отдать в модель машинного обучения у нас точно не получится и дату нужную привести к какому-то типу какому именно ну зависит от тебя что можно сделать можно превратить дату просто в количество секунд там прошедших с 1970 вроде бы года в таймс там просто это какое-то целое число которое показывает количество секунд прошедших с там с далекой точки можно поступить по-другому можно взять и

количество секунд прошедших с там с далекой точки можно поступить по-другому можно взять и разделить дату на год месяц и день то есть получится три новые новых признаков которые один числовой и 2 упорядоченных вот ну так что много всего регрессия это можно представить да да вот тут все правильно говорят в комментариях хорошо давайте продолжать теперь кино клейнера сэйбрз очень простая методика что мы делаем вместо обучения в данном случае обучение то мы просто берем и кладем куда-то к себе в

что мы делаем вместо обучения в данном случае обучение то мы просто берем и кладем куда-то к себе в память всю выборку которую нам дали то есть вот этот вот матрицу с признаками и вектор с ответами что мы делаем дальше как у нас будет работать предсказание мы получаем точку x в которой надо сделать предсказание то есть вектор из какого-то количества чисел мы можем построить этот вектор вот этот его кончик точку на которой он указывает в этом n-мерном просто если и в этом и на мерном

вот этот его кончик точку на которой он указывает в этом n-мерном просто если и в этом и на мерном пространстве найти и к ближайших соседей и тогда в итоге в качестве ответа мы вернем класс которого больше всего среди этих соседей но если там каких-то двух классов одинаково мы что-нибудь еще сделаем не так собственно важную можно там вернуть и то и другое в общем вообще без разницы что здесь интересно ну во-первых решать мы можем не только задачу классификации задача классификации наверное даже

ну во-первых решать мы можем не только задачу классификации задача классификации наверное даже чуть сложнее решать потому что вот у нас в среди этих к ближайших соседей может оказаться 2 класс сапарова проще решать задачу даже регрессии мы просто берем и вот для этой точке усредняем ответы трех ближайших соседей говорим что для точки которые к нам пришла это и есть ответ хорошо просто не забывайте что кенни раз ней марс может быть и классификатором и регрессоров задачи ранжирование я не знаю

что кенни раз ней марс может быть и классификатором и регрессоров задачи ранжирование я не знаю если честно как его использовать наверное если постараться там что-нибудь можно придумать давайте теперь посмотрим на то что такое к.к. это какой-то заранее задаваемый параметр то есть то что мы знаем еще до обучения обычно во время обучения у нас подбираются vesa или что-то еще в общем алгоритм готовит узнаешь что-то о данных это число к мы его задаем заранее в самом-самом начале еще до того как мы

узнаешь что-то о данных это число к мы его задаем заранее в самом-самом начале еще до того как мы допустим притронулись к данным и поэтому это называется гипер параметр мы его не можем выяснить во время обучения мы и вы должны заранее задать ну давай гипер параметр это в какой-то мере искусство потому что можно задать поиск трех ближайших соседей и получить один вот красный класс а можно задать поиск 4 ближайших соседей то есть 5 и получить синий класс то есть от этого числа к очень сильно

поиск 4 ближайших соседей то есть 5 и получить синий класс то есть от этого числа к очень сильно зависит ответ и подбирать его достаточно условий хорошо это был важный point что такое гипер параметр следующий важный point на чем вообще основывается наше предположение что такая модель будет работать ну наверное на том что для двух объектов у которых признаки более-менее близки должен быть более менее близкий ответ то есть если у нас какая-то точка находится в окружении синих точек мы думаем что

близкий ответ то есть если у нас какая-то точка находится в окружении синих точек мы думаем что она будет синий если она находится в окружении красных точек мы думаю что она будет красным если она там допустим это будет задача классификация в случае с регрессией если оно находится около точек у которых там ответ 10 у нее тоже наверное ответ 10 вот но это очень опасно и предположение потому что у нас нарушается в больших при больших размерностях данных что к и размерность но размерность это

у нас нарушается в больших при больших размерностях данных что к и размерность но размерность это собственно длина вот этого вектора количество признаков которые нам доступны когда мы увеличиваем количество признаков повышается размерность пространства в которых котором находятся наши точки и в какой-то момент так как получается что близкая окрестности нашей . вообще нет других точек и вот эти вот 5 ближайших соседей которых мы пытаемся найти они там где-то очень-очень далеко здесь есть вот

вот 5 ближайших соседей которых мы пытаемся найти они там где-то очень-очень далеко здесь есть вот такая вот иллюстрация чтобы понять как примерно работает ну смотрите допустим у нас только два признака и двумерная плоскость на которой находятся наши точки соответствующие объектом он здесь ну вы понимаете что признаки это вектор вектор он задает какую-то точку на плоскости в данном случае вместо точек нарисованы кошечки и собачки вот для такой вот этой вот . в самом середине кружка близкая

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

это вообще не предел то у нас вообще может оказаться так что даже если у нас этих точек кошечек и собачек больше мы их там в 10 раз увеличили то все равно в близкую окрестность заданной точке никто не попадет получается плохо и называется все это курсов дым демеджа нити проклятие размерности возможно вы когда-то нем слышали и на самом деле это огромная проблема для всего машинного обучения и вычислительных методов ну как сказать проблему скорее это особенность потому что проблема с которой ты

методов ну как сказать проблему скорее это особенность потому что проблема с которой ты не можешь никак бороться это особенность и с этим нужно считаться ну и к тому же помимо того что у нас объем пространства с увеличением размерности очень сильно возрастает и точки становятся более редкими появляется проблема того что увеличивается вычислительную сложность потому что чем больше просто размерность пространства тем больше точек нам нужно кенни раз neighbors он внутри почти что считает попарно и

пространства тем больше точек нам нужно кенни раз neighbors он внутри почти что считает попарно и расстояние до всех точек на самом деле это не правда там есть эффективные алгоритмы но из-за того что сложность увеличивается экспоненциально они не такие уж и эффективные в итоге вот следующая интересная проблема с которой мы можем столкнуться на примере кини раз не verse зачем вообще расскажу про эту модель она по большей части бесполезные хотя в некоторых задачах например если мы хотим

про эту модель она по большей части бесполезные хотя в некоторых задачах например если мы хотим предсказать как себя поведет покупатель она неплохо работает но у нее очень много проблем и это хорошо потому что мы можем сейчас на лекции посмотреть на них поговорить о них с привязкой именно хоккей не раз небеса все еще такая интересная проблема это фичи скилл что это вообще такое ну смотрите когда мы говорим про гейнеры с ней барс вообще предполагаем что мы можем найти этих ближайших соседей то

мы говорим про гейнеры с ней барс вообще предполагаем что мы можем найти этих ближайших соседей то есть у нас есть какая-то какое-то определение расстояния между точками это называется метрика если у нас есть множество с заданным расстоянием с какими-то хорошими свойствами математика я не хочу разгрузить просто расстояние с разумными свойствами то такое пространство называется метрическим собственно поэтому кей не раз на и барса называется метрическим алгоритм не запоминайте это если можете то

поэтому кей не раз на и барса называется метрическим алгоритм не запоминайте это если можете то запоминайте это не важно так вот в чем дело наверное самым логичным решением взять в качестве вот этой метрики в качестве расстояния между точками обычные евклидова расстояния ну то есть корень из суммы квадратов разностей координат просто расстояние как вот вы в трехмерном пространстве считаете вот точно так это логичное решение но у него есть проблема представьте что у нас наши признаки находится

так это логичное решение но у него есть проблема представьте что у нас наши признаки находится на очень важных масштабах ну например вспомните в эту задачу по определению стоимости дома и давайте представим что там вот есть признак расстояние до метро в метрах и признак количество комнат тогда если мы только два этих признаков используем наши данные могут вот как то вот так выглядит на самом деле этот гайд график для задач классификации ну вы можете видеть красные и синие . неважно самое важное

этот гайд график для задач классификации ну вы можете видеть красные и синие . неважно самое важное что по x1 по количеству комнат разные квартиры почти не будут отличаться а по расстоянию до метро они будут отличаться очень сильно ну просто потому что расстояние до метро это возможно что-то порядка тысячи ну километра то есть 1000 метров а количество комнат это что-то порядка 5 6 4 3 вот что то такое и поэтому наши метрика будет говорить что разность в расстояние до метро в 5 метров это

то такое и поэтому наши метрика будет говорить что разность в расстояние до метро в 5 метров это примерно то же самое что разность в количестве комнат в 5 то есть понятно что пять метров до метро не играть никакой роли а если в квартире на 5 комнат больше то это важно и наш алгоритм не учтет это и надо что-то с этим делать что можно с этим делать ну наверное самый простой метод взять вычесть из всех признаков их среднее значение и поделить на стандартное отклонение тогда наши признаки будут

всех признаков их среднее значение и поделить на стандартное отклонение тогда наши признаки будут распределены примерно на одном масштабе ну и как-то все получу станет ну или есть ещё один метод он позволяет выучивать vesa для каждой координаты то есть каждый признак будет перед тем как использовать калинин от нормирован на какое-то число ну вообщем сдача имеет много проблем и имеет много решений и вам придется с этим скорее всего столкнуться особенно учитывая что для нейронов вот эта проблема

и вам придется с этим скорее всего столкнуться особенно учитывая что для нейронов вот эта проблема тоже очень актуально мы там считаем градиента если вы не до конца поймете что я сейчас говорю то не расстраивайтесь потом вы поймете но такая ремарочка небольшая забегая вперед и когда вы считаете градиенты если у вас получится что у какого-то признака слишком большой масштаб the gradient может посчитать они стабильно ваша нейрон к из этого может вообще не учится инициализация весов в не рамках

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

других моделей только что посмотрели на киннер с ней барс и обучение у него была очень простая мы берем и запоминаем все обучающую выборку но киннер с небес не самая хорошая модель как мы увидели нужно что-то другое как мы тогда определим обучение ну смотрите что вот такое вообще решение нашей задачи для приближения вот этой вот функции которая была самом начале закона природа у нас есть множество объектов множество ответов и нам хочется приблизить функцию который задает действительное

множество объектов множество ответов и нам хочется приблизить функцию который задает действительное отношение между объектами и их ответами но приближать мы конечно можем как угодно но есть одна такая проблема что вот таких функций очень много и как-то выбирать из них одну конкретную непонятно как поэтому в машинном обучении используйте немножко другой подход мы возьмем и заранее ограничим множество функций из которых мы будем выбирать ответ и я сейчас говорю множество функций на самом деле вот

функций из которых мы будем выбирать ответ и я сейчас говорю множество функций на самом деле вот это вот функция которой мы восстанавливаем которые мы приближаем реальную зависимость закон природы она должна быть каким-то алгоритмом которые легко вычисляется на компьютеры ну не знаю она должна представляться в виде и fov там умножение чисел сложение всего такого мы заранее хотим ограничить множество этих функций еще сильнее не просто как вычислим ее на компьютеры и вот из такого уже множество f

этих функций еще сильнее не просто как вычислим ее на компьютеры и вот из такого уже множество f мы будем выбирать нашу функцию которая будет решать задачу что к и ф.ф. это параметризовано из семейства звучит это достаточно сложно и страшно но давайте я попытаюсь объяснить вот это как раз то о чем я говорил язык математики семейством этом называется ну просто потому что это множество каких-то объектов параметризовано потому что для каждого элемента этого множества у нас есть какой-то параметр

параметризовано потому что для каждого элемента этого множества у нас есть какой-то параметр который однозначно ему соответствует ну например смотрите да допустим у нас есть задача определить можно ли ребёнку пройти на аттракцион и у нас есть в качестве признаков его роста и возраста вот x1 это рост и x2 возраста как мы можем это сделать ну давайте в качестве семейства про метро званых функций мы выберем вот множество состоящий из функции такого вида где a или b любые смотрите эту функцию

мы выберем вот множество состоящий из функции такого вида где a или b любые смотрите эту функцию которая задается с помощью a или b a и b причем вот это вот вектор a и b он и будет нашим параметрам то есть пока по такому вектору мы можем однозначный муса ответ поставить функцию которая определяет по двум признакам можно ли ребенку или нет давайте ещё раз посмотрим множество таких по роже пороговых функций она будет параметризовано с помощью двух чисел ну вот собственно здесь это и написано в

функций она будет параметризовано с помощью двух чисел ну вот собственно здесь это и написано в данном случае т т равно вектору is a и b и множество возможных значений р в квадрате у меня тут немножко потерялся квадрат то есть r с декоратором произведениями это достаточно сложная часть так что давайте я сейчас посмотрю на комментарии и мне очень интересны вы поняли или нет ну и давайте я поотвечаю в целом на вопрос как часто кнн используется на практике ну не особо часто сложный вопрос он хорош

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

распределён logo нормальный например то как его нужно масштабировать на самом деле я поговорю наверное об этом в следующей лекции про линейной модели потому что для не линейных моделей действительно очень важно как раз прежними признаки но для нейронов это скорее важно потому что если они распредели них неправильный масштаб то там будут проблемы с вычислительной стабильностью следующий комментарий нерон к же сама нормируют данные функции активации на входе там нету нормирования но вы можете

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

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

подбор параметра потому что параметр функции однозначно соответствует хорошо как мы хотим подбирать такой алгоритм ну нам же нужно как-то понять какой алгоритм среди этого семейства лучше для этого мы введём функцию потерь и эмпирический риск ну что такое функция потерь это вообще абсолютно любая функция которая принимает на вход y то есть настоящий ответ и y с крышечкой от x то есть наше предсказание которая вот полученную алгоритмом которая получена нашей моделью и она выдает какое то число

которая вот полученную алгоритмом которая получена нашей моделью и она выдает какое то число которое показывает насколько сильно мы ошиблись причем но важно чтобы чем больше это число тем сильнее мы наше предсказание ошибается какие вообще бывают функции потерь ну квадратичная функция потеря то есть это просто квадрат разности между настоящим значением и нашим предсказаниям абсолютную функция потерь модуль разности между настоящим значением нашим предсказаниям ну и еще можно придумать очень

потерь модуль разности между настоящим значением нашим предсказаниям ну и еще можно придумать очень много разных функций потери например квадрат ошибки ну потому что настоящее значение минус предсказания то ошибка квадрат ошибки плюс 7 в целом она тоже чем больше тем хуже мы предсказали и дальнейшем мы увидим что вот эта функция потери вот эта функция потеря на самом деле они одинаково хороши там смещения на константу вообще никак не влияет умножение на константу тоже никак не влияет потому что

смещения на константу вообще никак не влияет умножение на константу тоже никак не влияет потому что в конце концов мы хотим вот эту вот ошибку функцию потерь минимизировать также я ее очень часто буду называть i lose потому что в машинном обучении вообще почти все исследования ведутся на английском и пар очень сложно говорить русские названия они часто не отображают всего явления ну и в целом не общеприняты что же мы тогда будем минимизировать минимизировать мы будем эмпирический диск это такой

что же мы тогда будем минимизировать минимизировать мы будем эмпирический диск это такой термин из статистики который в данном случае это просто среднее значение функции потерь на всем нашим обучающим датасете выглядит эта функция эмпирического риска вот так 1 поделить на размер datasette а и сумма вот этих лоссов среднем ос собственно как в определении написано причем вот эту функцию которая эмпирический риск я на самом деле тоже очень часто называют лоссов ну потому что она как бы задается с

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

нахождения такого параметра что сумм среднее значение лосса на всем нашим обучающим дата сети самая маленькая есть используется математическая нотация и слова armen armen значит что вот справа у нас есть какая-то функция которая зависит от тета нашего параметр который задает то на какой модели мы считаем эмпирически риск и армен это он возвращает такое значение это что вот функция которая стоит справа от оркни вы оно минимально то есть ты the best это такое значение 5 которое минимизирует

справа от оркни вы оно минимально то есть ты the best это такое значение 5 которое минимизирует эмпирический риск на самом деле это записи наверное не совсем корректно потому что не факт что такое то это будет существует очень много разных ограничений но об этом мы наверное не будем думать все равно мы никогда не сможем найти сумму почти никогда мы не сможем найти самые лучшие решения это почти никогда не возможно да и я обещал что сейчас расскажу про обучение моделей но на самом-то деле я

никогда не возможно да и я обещал что сейчас расскажу про обучение моделей но на самом-то деле я ничего не рассказал но потому что на самом деле-то как будет обучаться наша модель очень сильно зависит от того что это за модель то есть сам алгоритм процесс обучения нахождение вот этого параметра который будет минимизировать функции лосса ну или эмпирического риска если чуть сложнее назвать его этот алгоритм он зависит от семейства которой мы выберем но с допустим если мы будем обучать нейронные

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

риск звучит это достаточно страшно эмпирический риск но на самом дела в том что это просто такой термин из статистики и и я мог его даже здесь не писать это никак бы не повредило и мы бы называли вот это вот средняя лосса просто носом на самом деле мы дальше так и будем делать но для статистики очень важен метод минимизации эмпирического риска потому что с ним связано много разных теорем которые говорят что вот эти вот параметры которые мы ищем мы их ищем ну не просто так например в случае с

говорят что вот эти вот параметры которые мы ищем мы их ищем ну не просто так например в случае с линейной регрессии и сейчас в общем расскажу хороша мы так что посмотрели как можно записать что такое обучение в терминах математике теперь нам нужно посмотреть на какой-нибудь семейства собственно к которому мы можем применить наш обучит обучение ну наверное самое простое семейство функций из которого можно выбирать подходящий на но существует для решения задачи регрессе называется линейной

которого можно выбирать подходящий на но существует для решения задачи регрессе называется линейной регрессии скорее всего все с ней сталкивались это функции от какого-то количества переменных выглядящие вот так такие функции вот-вот семейства потому что здесь по сути задано множество функций они параметре суются весами дональд это один это два и тогда это т.н. мы подставим разные веса получаться разные функции такое вот множество функций с разными весами во время обучения мы выбираем такую

разные функции такое вот множество функций с разными весами во время обучения мы выбираем такую функцию которая лучше всего описывает наши данные чаще всего почти всегда для линии мире грехи и берут в качестве функции ошибок квадрат ошибки минского и дыра вот вы можете здесь видеть та же самая формула которого была здесь которая означает по сути обучение мы ищем минимум вот такого лосса или как я уже говорил это можно называть лоссом но здесь нет усреднения это не какая-то ошибка не что-то

я уже говорил это можно называть лоссом но здесь нет усреднения это не какая-то ошибка не что-то специально задумано и просто нам без разницы мы можем делить на константу можем не делить когда мы ищем минимум функции это не играет никакой роли вот и здесь я просто подставил само значение модели вот в этой точке x и значение лосса который квадрат ошибки вот и все хорошо зачем ещё нам может понадобиться линиями регрессии ну в целом глубоко мы будем ее рассматривать уже позже зачем она нам нужна

линиями регрессии ну в целом глубоко мы будем ее рассматривать уже позже зачем она нам нужна сейчас нужно нам чтобы показать что такое переобучение и показывать мы будем на примере полиномиальной регрессии что к полимерные регрессия но она очень похожа на обычную регайся только с небольшими изменений 5 представим что у нас есть обучающий datasat состоящий из таких объектов что они описываются одним признаком x ну и там соответственный каждому иксу соответствует 1 ответ y признак у нас только

признаком x ну и там соответственный каждому иксу соответствует 1 ответ y признак у нас только один если мы применим обычный линейный у регресса к таким данным то у нас будут функции вида так по 0 плюс тета 1 x не очень экспрессивные функции сложные зависимости вот такой линейной функцией не опишешь что мы можем сделать давайте создадим новые признаки мы возьмем и скажем что теперь x1 будет равно x у x2 будет равно x квадрате x3 будет равно x кубе ну и так далее до x and i будет равно x степени

x у x2 будет равно x квадрате x3 будет равно x кубе ну и так далее до x and i будет равно x степени получается что каждый признак этот признак это какая-то степень икса и мы будем строить линейную регрессию же вот на таком датасете состоящим из этих признаков функции которые зависят от этих признаков будут иметь вот такой вот вид они уже намного более экспрессивны чем функция всего лишь 50 плюс это 1с ну и давайте посмотрим как что будет происходить если мы будем обучать вот такую полимерную

это 1с ну и давайте посмотрим как что будет происходить если мы будем обучать вот такую полимерную регрессию на каких-то данных давайте посмотрим на вот этот график здесь у нас есть синий . но они как-то сгенерированную нам в целом безразницы что будет если мы попробуем обучить премиальную регрессию степени 1 что это значит что у нас только одна фича один признак и от x то есть то же самое что если бы мы обучали обычно линейной регрессии получится вот такая вот прямая ну зависимость игрека от

бы мы обучали обычно линейной регрессии получится вот такая вот прямая ну зависимость игрека от икса это прямая как и должно быть видно что она не очень хорошо описывает наши дары что будет если мы попробуем используя в полиномиальной регрессии степени 2 что это значит это значит что мы будем пытаться подогнать нашу функцию под данный наши функции будет выглядеть как то это 0 предстоит 1x + to the 2 x квадрат есть мы по сути подбираем параболу который лучше всего ложится на эти точки ну

+ to the 2 x квадрат есть мы по сути подбираем параболу который лучше всего ложится на эти точки ну выглядит уже получше наверное это даже одно из самых хороших положений которые мы можем достичь и том что то еще пробовать не стоит но загвоздка в том что в реальности вы никогда не сможете посмотреть вот такой график он будет там тысячи верным ну или даже если не будет то вот таких вещей скорее всего не видно и поэтому вы захотите получить еще более хорошую модель которую лучше ложится на . и

всего не видно и поэтому вы захотите получить еще более хорошую модель которую лучше ложится на . и попробуйте взять допустим полиномы степени 300 что тогда выйдет тогда у нас получится вот какая то такая кривая видите она очень неровная но кажется что наверное она даже имеет меньшее квадрат ошибки меньшей усредненный квадрат ошибки из того что она прямо прилегает к многим . ну хорошо но мы же понимаем что на самом-то деле зависимость ну вот далеко не такая дерганая такая сложная синяя линия

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

закономерности вот это вот расположение точек которых нету в реальных данных чем вообще связаны переобучение при обучении связано с тем что у нас количество данных которые доступны нам но всегда конечно и если мы выберем слишком сложную модель то есть модель который может подстраиваться под очень сложные зависимости то он наша модель может уловить вот эти сложные зависимости которые получились абсолютно случайно и за конечности выборки в наших данных обучиться на них и в итоге потом работать

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

всю нашу обучающую выборку куда-то в памяти если мы все же попробуем посчитать средний лосс то есть эмпирический риск то у нас получится 0 ну потому что вы можете видеть что допустим мы возьмем вот эту вот . и попытаемся для нее сделать предсказание ближайший сосед этой . она сама ну значит мы предсказываем синий попробуем взять вот эту . ближайший сосед этой точке она сама предсказываем красным ну и так для всего поэтому в итоге ошибка на обучающем процессе будет 0 но мы понимаем что в

ну и так для всего поэтому в итоге ошибка на обучающем процессе будет 0 но мы понимаем что в реальность это наверное 0 не получится тут вон какие то достаточно странные отростки вряд ли здесь вообще возможно достичь ошибки 0 так что получается что наш модель перри обучилась как же находить переобучение как и как с ним бороться ведь мы не хотим понимать насколько хороша наша модель будет работать уже в реальном мире после того как мы ее обучили есть достаточно простая техника это разделение

уже в реальном мире после того как мы ее обучили есть достаточно простая техника это разделение нашего data set a всех наших данных которые у нас были изначально на несколько частей первая часть будет использоваться для обучения всегда когда я говорю что мы обучаемся вы каких-то данных я имел ввиду эту часть вторая часть в людей шин она будет использоваться для оценки качества нашего причем после каждого цикла мы будем как бы обучаться циклически мы сначала выбираем какие то гипер параметры для

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

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

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

очень очень важно там вот где буквально один процент качество хуже и все ну например задача определения на кого пациентов или задача определить каких-то еще очень серьезных заболеваний в таких случаях действительно иногда используется машины обучения иногда она даже работает лучше чем люди и нам очень важно максимально точно оценить наше качество потому что на 1 процент это возможную жизни людей что мы делаем ну как мы и хотели итерационно учимся учимся меняем модель и так получается что каждый

мы делаем ну как мы и хотели итерационно учимся учимся меняем модель и так получается что каждый раз когда мы смотрим на облигационную выборку мы какую-то часть информация она как бы через нас как исследователя утекает в модели что я имею ввиду посмотрите допустим у нас какая та самая простая кнр модель без разницы может ли она там решать сложную задачу связанные с болезнями просто есть кнр мы смотрим при к равным 10 у нас навалится ционной выборки плоха плохое качество при караваном 9 она

смотрим при к равным 10 у нас навалится ционной выборки плоха плохое качество при караваном 9 она улучшается при к равным 8 еще лучше ну и так далее до 5 вот перри кораном 5 самое лучшее качество что мы сделаем мы только что какую-то часть информации и звали до ционной выборки переместили в нашу модель о том что вот ну короной 5 это самое лучшее число мы как бы модель через нас обучилась на облигационном дату сети и это плохо но сам во время итеративного тестирования у нас нет другого выбора

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

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

побыстрее все сделать чтобы она работала просто то люди очень часто опускают тестовых выборку а если вы участвуете в каком-то соревнование ну например на кабель тогда тестовый выборка она вообще не у вас эту тестовую выборку за вас отделяет человек который устраивает соревнования и вот уже на это тест выбор кафе вы собственно и сравнил соревнуетесь важно еще отметить что когда у нас теста выборка опускается то есть мы просто говорим что мы не хотим тратить данные отрезать кусок от нашего data

опускается то есть мы просто говорим что мы не хотим тратить данные отрезать кусок от нашего data set a на тестирование то вылета циона и выборка datasette очень часто вызывается тестами ну просто потому что так при когда их три теста вы эволюционные это разные вещи когда их 2 вылезать всего выборки в редакционные тестовой одно и тоже хорошо что это как нам тогда определить формальный переобучение и как его искать ну переобучение эта ситуация когда качество модели на обучающих данных

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

того чтобы оптимизировать нашу модель на них то есть вот под этот армен среднее значение метрики вы и не загоните собственно метрики для этого и нужны чтобы оценивать качество нашей модели на каких-то числах которые она не училась уменьшать хорошо а как нам разделение на тестовую и в лицо и train выборку поможет найти переобучение давайте вспомним наши пример во-первых полиномиальной регрессию допустим что у нас вот такие синие кружочки сбил внутри это обучающий выборка зеленые кружочка это

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

до реального значения игрека для этой точке она очень большое здесь очень большое здесь здесь и поэтому мы увидим что качество на обучающей выборке 0 ой что качество то есть лосс на обучающей выборке 0 потому что кривая проходит через все точки а на тестовой выборке значительно выше ну и вот вся мы нашли переобучение потому что с ним надо делать что именно делать мы поговорим для каждой модели что-то свое об этом поговорим когда будем говорить про линейные модели в случае с кнр мы тоже сможем

свое об этом поговорим когда будем говорить про линейные модели в случае с кнр мы тоже сможем обнаружить наши переобучение смотрите здесь у нас было 0 ошибка на тест на traded с эти она test data сети уже не 0 ура мы нашли переобучение хотя бы мы об этом знаем и теперь можем что то с этим делать хорошо мы поговорили о том что можно брать и делите выборку на какие-то части но данные они на вес золота вам почти чем больше данных тем просто лучше будет учиться ваша модель тем более правильные

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

часть осинники тестова часть что мы будем делать мы разделим всю нашу выборку на пять частей тогда мы будем перебирать часть которая станет тестовый в данном случае 5 частей и опять перебор пять шагов точнее и на каждом из этих пяти шагов мы будем обучаться на вот всей лазурные части datasette а и тестироваться на синий теперь снова обучаемся на лазурной части тестируемся насилие тестируемся то есть узнаем качество считаем лосс или что то еще вот в итоге у нас будет пять чисел качества на

то есть узнаем качество считаем лосс или что то еще вот в итоге у нас будет пять чисел качества на каждой из этих частей и это будет честная оценка качества потому что когда мы тестировались на первую фолде модель не обучалась надел то есть мы каждый раз вот для первого сплитом мы создаем новую абсолютно модель обучаемся в лазурной части для второго сплита снова абсолютно новая модель снова обучаемся на лазурной части мы никогда не видели 1 fold когда мы на нем тестировались вот эти часть

обучаемся на лазурной части мы никогда не видели 1 fold когда мы на нем тестировались вот эти часть называются фолды ура 5 честных оценок качества на каждой из частей дедов sata чтобы узнать честную оценку качества на всем на сайте мы можем просто взять и усреднить их ура ура нам не пришлось тратить данные naval изоляционную часть но кросс валидация на самом деле очень хитрая штука в плане того что нам то приходится модель пять раз учить то есть если вы учите какой-то простой алгоритм машинного

нам то приходится модель пять раз учить то есть если вы учите какой-то простой алгоритм машинного обучения типа и ними регрессе логистической регрессии к энн и что нибудь еще наверное даже busting про который мы потом опять же поговорим в общем нормально это все пять раз учить но нейронные сети они обычно учатся от нескольких часов до нескольких дней и недель или даже месяцев и вот так вот пять раз обучать нашу не растет на разных частях данных ну это очень плохая идея и поэтому с нейросетями

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

начала мы берём наши дан и разделяем их на части потом вы как-то обрабатываем наши данные ну чаще всего чистим от выбросов добавляем какие-то новые фичи кодируем категориальные фичи много всего о том когда наши данные готовы для того чтобы мы их подавали на вход нашей модели мы берем и заходим вот в такой цикл пока нас не устроит качественной эволюционной части мы берем какую-то модель с гипер параметрами и обучаем ли я потом проверяем эту модель на облигационном дата сайте ну и снова

гипер параметрами и обучаем ли я потом проверяем эту модель на облигационном дата сайте ну и снова возвращаемся смотрим устраивает ли нас качество не устраивает идём дальше ну и таким образом мы итеративно улучшаем нашу модель до тех пор пока качеству нас не устроит потом мы берем тестируемся на тест дата сайте узнаем финальный ответ какого качества мы смогли достичь с помощью нашей модели и отдаём нашу модель скорее всего в продакшн ну или не отдаем если на тест это сайте итоговые метрики

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

привет всем это наш первый семинар в deep links cool сегодня мы посмотрим на разнообразные инструменты которые мы будем использовать и в основном самое важное что вы сегодня узнаете это то как пользоваться библиотекой скаляр как будет устроен наш семинар в самом начале я расскажу про jupiter ноутбуки про колаб и про наши долг материалы которые вы сможете посмотреть если вы чего-то еще не знаете а потом мы уже откроем тетрадку с каталонским кодом и пройдемся по ней смотря что там происходит вот в

мы уже откроем тетрадку с каталонским кодом и пройдемся по ней смотря что там происходит вот в конце концов этот код который вы видите и которые объясню что он делает понадобится вам для волнения домашнего задания давайте начнем вот так выглядит обычный колаб здесь уже открыто наша семинарская тетрадка но без разницы сейчас мы еще откроем откроем ее еще раз уж такой колаб наверное правильнее начать с того что такое jupiter ноутбук jupiter ноутбук это специальная среда в которой которая работает

с того что такое jupiter ноутбук jupiter ноутбук это специальная среда в которой которая работает почти как идея жко то есть вы можете открывать вот такие вот файлы которые называются ноутбуками они состоят из клеток клетка может содержать текст как вот здесь или какой-то питоновский код что вы делать вы берете пишите какой-то код потом нажимаете kontrol enter и он исполняется ну или можно вот здесь вот эту кнопочку нажать очень важно на самом деле когда вы будете работать с логическими

вот здесь вот эту кнопочку нажать очень важно на самом деле когда вы будете работать с логическими ноутбуками изучить хоткеи то есть сочетание клавиш которые позволяют что-то делать потому что без их работа идет намного медленнее хорошо что мы только что нажали исполнение и что общее произошло ну в питоновский интерпретатор попадались вот эти строчки и они выполнялись ну это значит что у нас только что импортировались вот эти три библиотеки теперь мы можем сколько угодно раз выполнять эту

только что импортировались вот эти три библиотеки теперь мы можем сколько угодно раз выполнять эту ячейку и эти строчки будут снова передаваться в интерпретатор снова этим билетики будут загружаться забираться они еще раз не будут просто вот мы сделаем такую попытку выйти теперь за попробую запустить следующую клетку и я пищу что теперь происходит ну ничего необычного опять мы нажимаем control enter или ран и эти строчки они все передаются вот эти вот три в интерпретатор питона и получается что

или ран и эти строчки они все передаются вот эти вот три в интерпретатор питона и получается что как будто бы у нас был питоновский файл где вот это все было написано почему это возможно ну наверное вы слышали что существуют компилируем ее и интерпретируем языки программирования вот питон интерпретируемый компилируем языки программирования они устроены так что им заранее нужно знать как выглядит весь файл прежде чем он начать исполнять то есть у вас есть файл с исходным кодом его нужно

весь файл прежде чем он начать исполнять то есть у вас есть файл с исходным кодом его нужно скомпилировать программу который уже потом можно исполнять питон работает немножечко не так и он может построчно принимать в себя код вашей программы то есть можно представить что у нас выполнить вот эти строчки выполнить вот эти строчки здесь что-то вылилось и в итоге наш интерпретатор питона то есть программа которая исполняет наш код она теперь ждет в ожидании следующих строчек которые ей нужно

программа которая исполняет наш код она теперь ждет в ожидании следующих строчек которые ей нужно выполнить вот примерно так работает jupiter ноутбук ну на самом деле примерно так работает и python это то он на чем на чем именно работает же пайпер ноутбука это такая вот программа которая позволяет построить интерпретировать вот хорошо а почему мы используем питоновские ноутбуки они обычные . пай файл с какой-нибудь удобные даёшь кайте по пальцам ну дело в том что питоновский муки они очень

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

вывести значение какой-то переменной что-то еще подобное и вот это очень удобно для обучения чтобы смотреть что происходит и для исследования потому что ну вы могли где то что то не правильно сделать и на каждом этапе контролировать что весь код который вы написали про делает примерно то что вы от него ожидаете это очень хорошая стратегия потому что иначе вы можете потратить там много времени на расчеты просто так зря хорошо а что такое кола клаб это сервер jupiter ноутбук которая находится не

расчеты просто так зря хорошо а что такое кола клаб это сервер jupiter ноутбук которая находится не у вас на компьютере то есть если вы хотите запустить вот jupiter и ноутбуки как я только что показывал вам придется установить себе на компьютер специальный сервер который собственно держит вот этот вот интерпретатор питона выдает вам вот такую красивую страничку в браузере и все такое но наверное самый большой проблемой является то что для многих расчетов связанных с машинным обучением нужно

самый большой проблемой является то что для многих расчетов связанных с машинным обучением нужно много вычислительных ресурсов и допустим если у вас какой-то ноутбук как у меня то этих вычисленных ресурсов на ваши руки может просто не быть очень часто причем для именно для обучения не раз сетей нужны пушки то есть без них все будет конечно тренироваться но там сотни раз дольше ну и вместо каких-нибудь 20 минут вы будете ждать неделю или еще хуже вот поэтому га пушка еще нужны в основу звуки их

20 минут вы будете ждать неделю или еще хуже вот поэтому га пушка еще нужны в основу звуки их может не быть или в компьютере она может быть слишком слабой что делать можно воспользоваться колобок это сервис от google и который предоставляет он бесплатную вычислительной мощности виде вот сервера с таким измененным чуть-чуть жопой там вы можете сюда загружать свои ноутбуки и точно также построчно их исполнять как это сделать вам нужно нажать а повод и здесь выбрать свой ноутбук давайте я сейчас

их исполнять как это сделать вам нужно нажать а повод и здесь выбрать свой ноутбук давайте я сейчас открою свою папку с богом вот она и мы просто берем перетаскиваем сюда и ура ура у нас сейчас откроется наш ноутбук хорош а вот но наши ноутбуки мы используем данные вот этот вот файл applestore . сисви и когда мы загрузили сам файл с ноутбуком он наши данные сюда не подгрузились ну и с этим надо что то сделать что мы можем сделать заходим вот в эту вкладочку files сейчас он ноутбук прогрузится и

то сделать что мы можем сделать заходим вот в эту вкладочку files сейчас он ноутбук прогрузится и мы сможем просто взять и перетянуть туда наши данные сделать раз и все да нам просто напомнили что наши данные будут удалены через 12 часов почему ну понятное дело что google конечно корпорация добра но раздавать бесплатные ресурсы вычислительные на сколько угодно времени они бы не стали и поэтому вот основная проблема с этими тетрадками то что они в неизвестные моменты времени могут брать и

вот основная проблема с этими тетрадками то что они в неизвестные моменты времени могут брать и отключаться ну еще с ними на самом деле очень много разных проблем например они могут просто падать вам может не вести и вам будут выдавать машины на которых кто-то уже очень много всего занял потому что распределение ресурсов здесь вроде бы работает так что вам просто дают место на случайные машине вычислительные ресурсы и если какой-то человек там уже проводят свои вычисления он может занять почти

ресурсы и если какой-то человек там уже проводят свои вычисления он может занять почти все и у вас там останется совсем чуть-чуть нехорошо так и вы не сможете сделать свой расчет хорошо мы загрузили наши наш файлик ну и давайте сейчас просто пощёлкаем чтобы убедиться что все работает да прекрасно мы смогли его считать хорошо теперь про дополнительные до дополнительные материалы как я и обещал на нашем первом семинаре мы очень много будем использовать pandas нам пай и matplotlib и с колес ну на

нашем первом семинаре мы очень много будем использовать pandas нам пай и matplotlib и с колес ну на самом деле вот основные знания которые вам нужны это знание пан даст нам поймет плод либо и самого питона ну и еще наверное линейная алгебра и чуть-чуть математика мы просили чтобы то более менее все это знали когда подавали заявку на продвинутый поток поэтому у нас нет материалов обязательных к изучению которые включают все это но вы можете пойти на стыке открыть и вот этот вот урок

к изучению которые включают все это но вы можете пойти на стыке открыть и вот этот вот урок дополнительные материалы для самостоятельного освоения и более-менее освежить себя в голове все вещи которые вам могут потом понадобится на нашем курсе но они не сложные и если вы действительно когда-то много работали с чем-то из этого то наверное вам не будет смысл их открывать хорошо и наверное еще чуть-чуть про базовый поток и продвинутый поток если в какой-то момент вы чувствуете что вам сложно и вы

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

потока но если ее нет то вы можете попросить их чате догнать меня или юру яровикова им его мы скинем хорошо наверное это все что я хотел сказать о какой организационной части и каким-то периферийным знанием которые нам понадобятся давайте теперь перейдем к самому семинар вот здесь вы можете видеть что в нашем сегодняшнем семинаре самое главное что вы должны обязательно понять и и сел наверное все было бесполезно ну во первых это синтаксис работы с моделями и трансформерами вас calor вот этот

было бесполезно ну во первых это синтаксис работы с моделями и трансформерами вас calor вот этот концепт того что бывает два типа классов вы скаляр не он очень важен я про него расскажу вторых какие бывают шаги предобработки да да ну естественно мы покроем вообще не все что можно использовать но вот те шаги которые мы сегодня рассмотрим пример на ну в общем значит что они существуют реально важно и иногда они могут вам помочь сделать более качественную модельку ну и наверное еще один очень

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

чтобы просто понять насколько вообще что можно простыми методами какого качества достичь но когда вы уже будете действительно серьезно зарабатывать свои решения смотреть на данные надо сегодня это нам даст я еще много просто мы поймем что наша задача скорее всего не решается ну и ладно хорошо что такое скалярное с колен это библиотека в которой собрано очень много разнообразных алгоритмов машинного обучения и всяких просто удобных штук который позволяет вам быстрее работать с данными вы

машинного обучения и всяких просто удобных штук который позволяет вам быстрее работать с данными вы скалярный есть два типа объектов которые он поставляет во первых это эстимейт это как раз модели созданные для предсказания они обладают двумя методами . fit который позволяет обучать нашу модель и . predict который уже позволяет получать ответы которая наша модель научилась делать ну как вы видите у точках fit мы должны передавать наши признаки x и 2 моментом y ответа что это за ответ и что это

у точках fit мы должны передавать наши признаки x и 2 моментом y ответа что это за ответ и что это за признаки ну конечно зависит от самого алгоритма от эстимейт are a в точку предик мы должны передавать только признаки логично второй тип объектов это трансформер эти объекты призванные обрабатывать данные ну просто как ты их трансформировать поэтому они трансформера и у них тоже есть два метода основных это . feed этот метод позволяет трансформеру что-то узнать о наших данных ну потому что

основных это . feed этот метод позволяет трансформеру что-то узнать о наших данных ну потому что часто бывает что трансформировать данные нужную собственно как-то основываясь на то что на том что там уже есть вот и получи сохранять в себя какую-то информацию о том как устроен и данные алгоритм трансформер может только при вызове метода . fit и еще один метод . transform он нам возвращает точно тоже матрицу x но как-то измененную как именно зависит от самого и трансформера хорошо мы еще

точно тоже матрицу x но как-то измененную как именно зависит от самого и трансформера хорошо мы еще встретимся с общим количеством представителей из тиммейтов и трансформеров и я буду указывать их пальцем и говорить что так что какие у нас сегодня данные наши сегодняшние данные это datasette о приложениях которые продаются в appstore ну и мне только продаются про бесплатные там в том числе есть собственно все ли мы эти данные с карл точка ком когда-то очень известный сайт который обычно

есть собственно все ли мы эти данные с карл точка ком когда-то очень известный сайт который обычно проводит соревнования по машинному обучению станка с какими-то очень огромными призами но еще на колени с не только соревнования но и просто какие-то обычные сам открытые datasette и которые вы можете скачать и как с ней поиграться вот ну начнём собственно нашего батов сначала мы импортируем наши три основные библиотеки которыми мы всегда пользуемся почти это pandas для работы с табличными данными

основные библиотеки которыми мы всегда пользуемся почти это pandas для работы с табличными данными лампой для вот с линейной алгеброй векторами там матрицами всем таким и matplotlib для построения графиков теперь мы считываем наши данные делается это с помощью вот этой функции рецессии да кстати очень интересное такое уточнение вы видите что мы делаем импорт pandas спд нам по смп и matplotlib в общем как pelti это стандартное сокращение и они прям вообще везде используются в здесь мы делаем д .

как pelti это стандартное сокращение и они прям вообще везде используются в здесь мы делаем д . precise и то есть у модуля pandas мы вызываем метод 30 если ну и сюда нужно передать файл который название файла в котором собственно лежат наши данные формате coma separated валью сисви да она расшифровывается как о массе проект целью из что это значит это значит что в файле который мы открываем данный лежат так первая колонка первая строчка прошу прощения это разделенные запятой и названия колонок

лежат так первая колонка первая строчка прошу прощения это разделенные запятой и названия колонок а дальше каждая строчка это разделенные запятой значение которые должны вот в соответствующей колонки быть что мы делаем теперь следующую строчку зато . эта функция вызваны на объекте дата объект data как раз хранит внутри себя вот всю эту табличку и позволяет как-то с ними удобно работать этот объект типа dataframe который определен в панды zen и вот один из таких удобных методов это . head он

типа dataframe который определен в панды zen и вот один из таких удобных методов это . head он возвращает нам первые пять строчек из нашей табличке ну можно сделать чтобы он возвращал 1 дикий строчек целом это дело вот так делается нам просто нужно передать аргументы но без аргумент опять я обычно этого хватает зачем мы это делаем просто самом начале посмотреть на то что данный действительно за грудь или хитом примерно то что мы ожидаем увидеть возникает другой вопрос как вот эта табличка

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

из первых пяти строчкам как же она тогда выводится в jupiter ноутбуки есть очень интересная особенность то что чтобы вы не написали на последней строчке каждой ячейки она выведится смотрите мы пишем здесь один вывелось единица пишем один плюс один выводиться 2 то есть результат последний результат исполнения последней строчки в петровском ноутбуки вводится вот снизу ячейки то есть мы можем здесь вообще что угодно писать допустим какую-нибудь строчку она исполняется ну то есть когда мы исполняем

что угодно писать допустим какую-нибудь строчку она исполняется ну то есть когда мы исполняем вот такое вот выражение у нас получается просто сама строчка и оно выводится по сути мы как бы делаем print от того что здесь написано но этот код действительно он действительно тоже исполняется иногда это мешает например вы здесь вызвали какую-то функцию а точку б и это функция б она делает какие-то осмысленные вещи но при этом что-то возвращает его мне хочется чтобы это выводилось вы можете сделать

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

все хорошо вот когда вы ставить ячейку исполняться здесь слева можно увидеть в какой момент она начинает исполняться и я только что увидел что там очень долго ничего не происходило и потому что но что ядро упал ну и действительно очень часто бывает что гидра падает или вы что-то не так сделали и нужно как-то обновить весь прогресс начать заново что вы можете сделать для этого вы можете нажать restart runtime тогда jupiter ноутбук перезагрузит исполнитель кировскую кода все объявленные вами

restart runtime тогда jupiter ноутбук перезагрузит исполнитель кировскую кода все объявленные вами переменные функции все такой еще нет ну и по сути вам нужно будет запускать все с самого начала ноутбука вот нам как раз это придет сейчас сделать потому что я нажму restart runtime хорошо здесь мы разделяем название наших колонок на колонки которые обозначают числовые признаки и категориальные а также название колонки с целевой переменной то есть то что мы хотим предсказывать да я этого еще не

также название колонки с целевой переменной то есть то что мы хотим предсказывать да я этого еще не сказал но предсказывать мы будем рейтинг нашего приложения по таким данным как его размер цена количество скачиваний вроде бы где-то была жанру все такое на самом деле какие именно данные нам не особо важно потому что мы сейчас увидим что задача по сути не решается с данными которые у нас есть и увидим мы это как раз из визуализация что мы делаем теперь ну еще для удобства я сделал список всех

увидим мы это как раз из визуализация что мы делаем теперь ну еще для удобства я сделал список всех колонок потому что какие-то из этих колодок я не включу ни в один из листов чтобы их просто сейчас дропнуть то есть теперь дата это только колонки который я потом собираюсь использовать теперь нам нужно немножечко предам работать наши данные это datasette хорош тем что здесь как раз очень много таких небольших вещей которые можно поправить ну во-первых контент рейтинг давайте посмотрим как он

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

вот этот плюсик мешает интерпретировать ее как числа то есть нам надо что то сделать чтобы она все-таки стало числами что мы для этого делаем мы берем и сейчас обрежем последний символ во всех строчках в этой колонке для этого мы обращаемся к нашей колонке pandas происходит это вот так и вызываем строковый метод слайс панели если вы знаете какой именно тип у вашей колонки то вы можете чуть через точку обратиться к особым методом ну вот например у стрингов еще много разных методов например слайс

обратиться к особым методом ну вот например у стрингов еще много разных методов например слайс риплейс что-то еще так же здесь можно написать . да и и обращаться к каким-то уже методом связанным с датой что мы здесь делаем в итоге мы берем под строчку начиная с самого первого символа и исключая последний а потом касту им это к типу int давайте выполним ура наша строчка выполнилась ну во первых это значит что вот этот код смог выполнится и все значения вот колок в том что получилось после

это значит что вот этот код смог выполнится и все значения вот колок в том что получилось после применения вот этого кода они смогли ск оставаться канту а значит все хорошо и то что мы посмотрели на там совсем немного буквально 5 примеров значений в этой колонке не согласны на злую шутку и все хорошо ну теперь как вы видите значение выглядеть нормально хорошо следующий этап который можно сделать предобработки это посмотреть на то есть ли пропущенные значения в наших колонках как это делается в

предобработки это посмотреть на то есть ли пропущенные значения в наших колонках как это делается в пандус это очень удобно устроена мы можем вызвать и синий если какого-то значения нету то вместо него в табличке будет на и если мы применим метод и знай он вернет табличку с таким же размером где в место каждого значения которое нам стоит true прошу она у нас получилась такая же огромная табличка один из колонок 7000 строчек ну руками мы такое не посмотрим там еще может оказаться что вообще ни

один из колонок 7000 строчек ну руками мы такое не посмотрим там еще может оказаться что вообще ни одного пропущенного значения нет надо как-то агрегировать эту информацию для этого мы берем и пишем . мин что это значит ну так как мы здесь не указали по чему именно брать средние по колонкам или по строчкам то стандартная идет о соединения по колонкам и у нас получится уже одномерная такая табличка по сути вектор где каждой колонке быть соответствовать одно число доля значений которые были фолз

по сути вектор где каждой колонке быть соответствовать одно число доля значений которые были фолз которые были труд то есть то есть доля надав ну как вы видите везде у нас стоит нолики значит пропуска в данных не было все хорошо хорошо теперь следующий шаг нам стоит посмотреть на то как распределены вообще значение в категориальных печах делается это опять же очень просто мы не тренируемся о нашем категориальном колонкам просто пишем название что вы понимаете что чему соответствует и используем

категориальном колонкам просто пишем название что вы понимаете что чему соответствует и используем особый метод панда за вельде аккаунт если мы берем и у колонки вызываем в аккаунт то он возвращает вот такой вот одномерный объект где каждому значению каждому варианту значения которое было в этой колонке будет поставлена количество и сколько раз она встречается это был достаточно сложно давайте прямо в этом примере вот в жанр в основном колонки обозначающий основной жанр games встречает

прямо в этом примере вот в жанр в основном колонки обозначающий основной жанр games встречает встречается 3862 раза этот элемент 535 ну понятно и так далее окажемся у нас вообще только одно значение там почти все там все в долларах ну ладно хорошо на самом деле ничего мы по сути не узнали но мы просто видим что никаких неожиданности нету значит что нам не нужно чистить данные и пока все хорошо да кстати из-за того что в колонке карать значение только одно то она нам модели машинного обучения

да кстати из-за того что в колонке карать значение только одно то она нам модели машинного обучения вообще никак не поможет и можно и просто спокойно убрать делается это опять же с помощью метода из pandas который называется дроп сюда мы можем передавать название колонок который нужно удалить или название строчек которые нужно удалить давайте сделаем это и всё теперь нам нужно посмотреть на распределение величин которые числа вы делается это тоже очень просто пандус тесно связан с а тот либо

величин которые числа вы делается это тоже очень просто пандус тесно связан с а тот либо если у вас стоит мой клип то прямо у dataframe а вы можете вызвать много разных методов чтобы заплатить данные из этого dataframe а ну например один из таких методов . his вы передаете ему колонки для которых нужно перед построить гистограмму и какие то другие аргументы мат тут либо и устроить собственных гистограмму но опять же давайте посмотрим тут ничего интересного нету целом все как мы ожидали да еще в

но опять же давайте посмотрим тут ничего интересного нету целом все как мы ожидали да еще в этот лайфхак с на ном смотрите если конце не написать нам то значение ну массив осей на которых там что-то нарисовал not only который возвращает вот этот метод он будет нас выводиться и кто портить вывод ну и дополнительные пустые строчки они никак не помогут потому что перед тем как потому что питон ноутбук то есть вывозят значение результат исполнения последний не пустой строчки и поэтому вот здесь

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

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

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

отрицательный или прочим положительной корреляции ну мы можем это понять вот корреляция не очень большая в итоге самое большое что мы можем получить это 027 с вообще непонятно какой фичей наверно там написанную на карле в объяснении но 027 это слишком мало самом деле чтобы надеяться что у нас что-то получится понятное дело что 0 корреляция она вообще не означает что наша маша модель машина в обучении не сможет обучиться потому что если у двух переменных нулевая корреляция но эту экскурсию

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

что все таки у вас ничего не получится что попробовать стоит давайте попробуем теперь сделать графики двумерные где мы берем пару каких-то признаков или признак и целевую переменную и вот наносим их на график тут на самом деле можно у них достаточно долго смотреть хочется сразу посмотреть на usa рейтинг ну как вы видите здесь не то чтобы очень много очень сильная зависимость потому что для разных use рейтингов значения вот этого другой печенье очень похоже тут разве что с размером есть какая-то

use рейтингов значения вот этого другой печенье очень похоже тут разве что с размером есть какая-то разумная зависимость с ценой что то наверное может даже получится но прощающий вряд ли потому что чаще всего если вы глазами вообще не видите никакой многообещающей зависимости то и модель вершина в обучении тоже вряд ли найдет в самом начале мы сделали какую-то небольшую подсказку подготовку наших данных ну там убрали плюсик в самом конце но наверно это нечестно называть прямо полноценной

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

возможно какие-то колонки вообще будут неправильными там будет другое значение или значение будет случайным или допустим у вас в данных 20 процентов записей пропадет и из-за этого ваши модели будут учиться намного хуже ну а не просто в реальном мире не смогут хорошо работать если вы потеряете 20-30 процентов данных могут плохо работать не обязательно что же делать ну данные надо как-то почистить нужно понять в чем проблема и ее исправить если есть плохая колонка попытаться ее исправить или

нужно понять в чем проблема и ее исправить если есть плохая колонка попытаться ее исправить или выкинуть если есть h юбочные точки ну что я называю ошибочными . миа флаерами наверное можно представить что у вас какой-нибудь интернет магазин и вот к вам часто приходят поисковые боты и они часто бывают что там кладут себе что-то в корзину недавно у гугла была такая проблема интернет-магазины видели что какой-то человек там каждый день приходят к ним магазин кладет в себе в корзину очень много

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

бы там видеть от этого надо избавляться обычно это очень сложную и опять же отдельно искусство следующий этап который можно сделать это создание новых признаков часто бывает так что зависимости в данных в которые существуют они очень очень сложные и вот из признаков которые вы даете вашему алгоритму их конечно эту зависимость как каким-то образом можно получить но ваш алгоритм просто не справится у каждого алгоритма какая-то определенная максимальная степень свободы есть потому что мы как раз

у каждого алгоритма какая-то определенная максимальная степень свободы есть потому что мы как раз их выбор когда будут мы задаем семейства про мирзо ван их алгоритм функции из которых мы выбираем наши решения мы накладываем ограничение на степень свободы и может получиться так что ваша модель просто не умеет находить такую взаимосвязь которая существует и где можно как-то помочь для этого можно создать какие-то новые признаки это тоже очень очень такая сложная вещь и нужно понимать с какими

создать какие-то новые признаки это тоже очень очень такая сложная вещь и нужно понимать с какими данными вы работаете ну например наверное если вы врач то создавать признаки для медицинских данных вам будет намного проще вот такой самый простой наверное немножко глупый пример в создании признаков мы можем взять все наши ну допустим на стенд признаков x1 x2 и так далее гсэн мы можем взять и создать новые признаки and в квадрате новых признаков где мы попробуем там добавить к нашему data set у

новые признаки and в квадрате новых признаков где мы попробуем там добавить к нашему data set у попарные произведения и вот если мы использовали раньше линейную модель и она допустим вот из этих признаков не могла получить хорошие хорошие качества то при добавлении по парных произведений может получиться так что она уже она она сможет восстанавливать более сложной зависимости и может оказаться так что наша зависимость как раз вот вот то самое более сложное и наш линейная модель смогла

так что наша зависимость как раз вот вот то самое более сложное и наш линейная модель смогла восстановить наверное стоит сказать про то чем нейронные сети в этом отношении лучше ну если вы попробуйте почитать какие-то книжки по нейронным сетям какие-то другие курсы то вы увидите что там вообще нигде ничего не говорите про создание признаков связано это с тем что нейронные сети как раз на стали настолько популярными настолько хорошо работают что они сами для себя создают признаки потому что

настолько популярными настолько хорошо работают что они сами для себя создают признаки потому что нейронную сеть можно представить как такой преобразователь изначальных признаков во что-то очень и очень полезное и в конце на всем этом простенькая линейная модель вот ну давайте добавим ради примера ещё один признак наши данные но он наверное будет не очень полезной is free это такой категориальный признак бесплатно или наше приложение каким-то алгоритмом на самом деле такой признак может помочь

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

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

трансформации категориальном признаком и уже потом их отдавать градиент на губу силу до такой алгоритм про который мы поговорим на 3 лекция какой самый простой способ закодировать на шукать игральную наш категориальный признак с помощью чисел ну это one spot encoding как он работает смотрите допустим у нас есть колонка признак у которого категориальный у которого есть вообще четыре возможных значения ну это вот та самая колонка с жанром игра развлечения образование и фото или видео хорошо тогда

ну это вот та самая колонка с жанром игра развлечения образование и фото или видео хорошо тогда мы можем взять и каждое значение вот из этих четырех преобразовать вектор из четырех нулей или единиц причем мы будем ставить в этом векторе только одну единичку которая соответствует тому где соответствует классу соответствует значению то есть нашей категориальной фичи смотрите если бы у нас была games то мы бы превратили эту колонку в 1 и 3 0 энтертеймент мы превращаем в 0 1 и 2 0 фото и видео мы

то мы бы превратили эту колонку в 1 и 3 0 энтертеймент мы превращаем в 0 1 и 2 0 фото и видео мы бы превратили в 3 0 и в конце единичка ну вроде понятно в общем такой вот вектор и знали единицу которого ровно 1 единица стоит на месте которая кодирует значение категориальный фичи при этом важно отметить что в таком случае у нас вот одна колонка с категориальной свечой по сути превращается в очень много разных колонок и для некоторых алгоритмов это может быть проблемой у нас это не особо

в очень много разных колонок и для некоторых алгоритмов это может быть проблемой у нас это не особо интересует давайте посмотрим как с помощью pandas очень очень очень удобно это наверно самое удобное что я видел сделать подход он котик возьмем вот такой вот очень маленький игрушечный dataframe у нас будет всего лишь одна колонка который называется категорию и у нее три возможных значения оба и лица если мы применим к ней ppd get dummies то этот метод посмотрит на все колонки в нашем data frame

если мы применим к ней ppd get dummies то этот метод посмотрит на все колонки в нашем data frame а ну тут только одна колонка но если бы было больше что он бы посмотрел на все и для колонок в которых находится строчки он бы их вот так с помощью ваншот encoding а закодировал во все хорошо давайте теперь применим гедда мисс к нашему собственно data set и смотрите я вот здесь специально указываю какие именно колонки нужно считать категориальными какие нужно кодировать потому что я не до конца

какие именно колонки нужно считать категориальными какие нужно кодировать потому что я не до конца уверен что все численные колонки правильно распознали как численные ну и в общем может возникнуть проблема и если вы точно знаете какие категориальные какие колонки кати реальные то почему бы не указан хорошо но теперь у нас то что раньше лежал в катик в катка лс это были названия категориальных колодок а теперь они исчезли и они заменились на вот название колонки андерс core и какое-то возможное

а теперь они исчезли и они заменились на вот название колонки андерс core и какое-то возможное значение ну и таких новых колодок очень много давайте возьмем ее с помощью вот такого кода пройдемся по всевозможным колонкам в нашем новом это сети и просто посмотрим какие из них начинаются на что-нибудь на что он очень название старых и добавим их в котел с new ну и потом обратно в катков то есть теперь у нас в кадку с лежат название колонок где с помощью вон ход от кодинга закодировано какие-то

у нас в кадку с лежат название колонок где с помощью вон ход от кодинга закодировано какие-то кати реальные колонки фух еще следующий шаг обработки данных масштабирование признаков ну почему это важно мы уже говорили на лекции и там мы использовали говорили только об одном способе масштабирования так так называемый стандартизация стандартизация это когда мы пытаемся сделать так чтобы распределение нашего признака была близка к нормальному распределению но на самом деле есть еще второй метод как

нашего признака была близка к нормальному распределению но на самом деле есть еще второй метод как можно приводить признаки к одному масштабу вот в с calor нее есть два специальных трансформера которые сделаны для этого первый называется стендор скейлер а 2 min max келлер как я уже говорил у них есть два метода . fit и . transform это имен трансформера они преобразовывают наши данные наши признаки в случае со стенда с киллером когда вы передаете в . fit как а вот вашу матрицу с признаками то

в случае со стенда с киллером когда вы передаете в . fit как а вот вашу матрицу с признаками то для каждой колонке она считает среднее значение мяу это ну и ты признак поэтому мне это и сигма это на всем обучающим дата связи то есть на всем что вы передали в . фиг во время transform для каждой колонке она берет и вычитает средние которое она посчитала вовремя . фито и делят на стандартное отклонение таким образом получается что ваши признак ваш призрак становится более менее нормально

отклонение таким образом получается что ваши признак ваш призрак становится более менее нормально распределенным более похожи ну то есть у него средняя 0 и стандартное отклонение единицы ура хорошо еще есть мин-макс келлер он примерно так же работает он просто вовремя . фито запоминает минимальное значение которое было в колонке и максимально а потом во время трансформа вычитает минимально и делят на максимальное - минимальное он тоже он приводит все признаки ровно к от нуля до единицы но здесь

на максимальное - минимальное он тоже он приводит все признаки ровно к от нуля до единицы но здесь стоит отметить зачем вообще тогда нужен . feed если у нас кажется что преобразование происходит на одних и тех же данных и чем вообще нужно разделять вот обучение нашего трансформера и его применения дело в том что обычно прежде чем как-то работать с данными их разделяет на train это есть часть зачем это нужно ну потому что вот сейчас мы вместе мы применим стандарт скейлер всем нашим данным вместе

это нужно ну потому что вот сейчас мы вместе мы применим стандарт скейлер всем нашим данным вместе и получится так что какая то часть информация из нашего во льду ценного data set a test data set а она утечет в через этот стандарт скейлер в нашу модель все что имею ввиду когда мы применяем . fit на всех наших данных а не только на обучающих то вот это вот средняя и стандартного отклонения который считает наш стандарт келлер они получают какую-то информацию о том как распределены признаки в

считает наш стандарт келлер они получают какую-то информацию о том как распределены признаки в эволюционном дата сайте и потом когда мы применим transform ко всем данным этот transform применится к обучающей части и вот применяясь к обучающей части эта информация о том как распределены признаки в вале до ционной части она вот туда попадет и потом когда наша модель будет обучаться получится что она что-то чуть чуть совсем знает права лиц и он ную выборку это плохо ну в общем еще одно такое

она что-то чуть чуть совсем знает права лиц и он ную выборку это плохо ну в общем еще одно такое объяснение почему это плохо потому что в реальности когда вы будете применять вашу модель в конце концов ваша модель вообще не будет знать о каком-то конкретном распределение признаков в данных которые ей поддаются а когда вы ее тестируйте на эволюционной выборки она будет знать чуть-чуть через стандарт скейлер в общем нехорошо это но ради того чтобы упростить код и не перегружать его циклами мы

скейлер в общем нехорошо это но ради того чтобы упростить код и не перегружать его циклами мы делим данные вот в следующем шаге потому что обычно как это происходит вы берете делите на тройной тест и так как у нас все преобразования для обоих частей были одинаковые вы просто в форике по 2 dota с этом их применяете хорошо теперь как я уже говорил очень очень важно синтаксис и скалярно чтобы применить какую-то модель эстимейт или преобразователь трансформер из скалярно вам во-первых нужно за им

какую-то модель эстимейт или преобразователь трансформер из скалярно вам во-первых нужно за им портить класс после того как выезжаем портили класс вам нужно создать сам объект этого трансформера или эстимейт ра делается это вот так ну вы просто создаете обычный питоновский объект вот тут можно посмотреть документацию к нему да очень давайте сначала поговорим после того как мы создали наш объект его нужно защитить ну потому что стандарт скейлер в нем должны храниться данные о нашей обучающей

его нужно защитить ну потому что стандарт скейлер в нем должны храниться данные о нашей обучающей выборке средняя колонок и стандартное отклонение и вообще вот эти вот класса эти объекты они могут получать данные о внешнем мире то есть себя что-то сохранять только при вызове . fit когда вы вызываете . transform в случае с трансформерами или . презик случае с с тиммейтами то они ничего не могут в этот момент запоминать и складывать там куда-то к себе мы вызываем . fit он считает средние

могут в этот момент запоминать и складывать там куда-то к себе мы вызываем . fit он считает средние стандартного отклонения вызываем transform он выполняет это преобразование ура у нас появились новые данные которые от нормированы то есть у всех признаков примерно одинаковый масштаб ну еще есть более простой способ когда у вас только один вот этот вот кусок данных или когда вы хотите на трейни по-быстрому применить вот это преобразование есть сокращение fit transform она просто напросто внутри

применить вот это преобразование есть сокращение fit transform она просто напросто внутри вызывает функцию feed но вот этих данных которые вы передали потом вызывает transform это что отдал transform вот вот сюда попадает давайте выполним хорошо теперь я хотела сказать такой небольшой лайфхак в jupiter ноутбуки обычно во всех хороших даёшь koch когда вы программируете на бетоне вы можете как-то там вызвать документацию методов ну по бусам посмотреть какие там есть аргументы что они значит так

там вызвать документацию методов ну по бусам посмотреть какие там есть аргументы что они значит так далее в jupiter и ноутбуки тоже так можно делать для этого нужно нажать shift ap и тогда вы сможете листать документацию если вы нажмете shift ap один раз откроется такая маленькая дважды большая и трижды она давай открывайся ладно у меня сейчас не открываете за того что у меня браузер немножко вот вот так все нормально хорошо давайте пойдем дальше теперь нам нужно разделить нашу выборку на 3

вот вот так все нормально хорошо давайте пойдем дальше теперь нам нужно разделить нашу выборку на 3 test как я говорил обычно так не делается обычно мы перед преобразованием данных чтобы вот таких вот ликов не было разделяем на train тест но давайте разделим сейчас делается это очень просто нам нужно импортировать функцию train тест сплит из с колен мол selection и применить ее к нашим данным какая у нее вообще семантика как она работает вы можете передать нее сколько угодно аргументов в данном

у нее вообще семантика как она работает вы можете передать нее сколько угодно аргументов в данном случае мы передаем ей два аргумента и поэтому она отдает нам четыре выхода что она делает она берет и первый аргумент в соответствии с указанным размерам тесты разделяет на обучающую часть и тестовую часть сюда попадает 80 процентов икса сюда 20 процентов x а теперь эту часть она тоже разделяет на обучающую и тестовую здесь 80 процентов здесь 20 если мы сюда добавили еще 3 какой-то список то она

обучающую и тестовую здесь 80 процентов здесь 20 если мы сюда добавили еще 3 какой-то список то она произвела его на train & c тест я написал на русском ну ладно я думаю вы поняли что происходит так вернем обратно причем все вот аргументы которые вы сюда передаете все они должны быть какими-то похожими на списке вещами ну например они должны быть матрицами потому что матрица она список по 1 координате то есть по строчкам вот это вот это вообще вектор потому что мы выбрали только одну колонку

то есть по строчкам вот это вот это вообще вектор потому что мы выбрали только одну колонку поэтому это вектор и это тоже как бы список все эти списки они должны быть одинаковой длины и при этом в обучающую часть из всех этих списков выбираются одни и те же строчки то есть допустим если первая строчка икса попала в x train это значит что первая строчка дата таргет кол попала в y train ну и в общем просто тренинг сплит сохраняет line and то есть соотношение вот этих строчек если здесь две

в общем просто тренинг сплит сохраняет line and то есть соотношение вот этих строчек если здесь две строчки были рядом то и если одна строчка вот отсюда попала в train to и отсюда она попадет в ад rain вот сюда хорошо давайте разделим и перейдём к самый интересный сладкую часть нашего семинара обучение модели что уже много времени и мы только сейчас начинаем этим заниматься но перед обучением надо рассказать про то что такое метрика метрика это на самом деле очень похоже на функцию потерь штука

рассказать про то что такое метрика метрика это на самом деле очень похоже на функцию потерь штука только она не обязана она как бы оценивает качество нашей модели но ее отличие в том что она не обязана сейчас в случае с функцией потерь чем она меньше тем лучше с метрика это не обязательно так ну например есть такая метрика как точность в задачи классификации точность это просто доля указанных классов и чем выше доля угаданных классов тем лучше в случае с регрессией есть можно назвать метрикой

и чем выше доля угаданных классов тем лучше в случае с регрессией есть можно назвать метрикой минская дырок то есть нашу функцию потерь или р сквирт сквирт это такая метрика которая определяется как 1 минус вот это вот сумма квадратов ошибок делить на сумму квадратов отклонения от среднего до прошу прощения за bing у вас по сути это средний квадрат ошибки делить на дисперсию ну еще эту метрику r-квадрат называют как доля объясненной вариации связано это с тем что когда мы у нас есть какой-то

r-квадрат называют как доля объясненной вариации связано это с тем что когда мы у нас есть какой-то константный предсказатель который предсказывает допустим среднее значение ответа на любом примере он предсказывает среднее значение тогда здесь у нас будет дисперсия делить на дисперсию один минус 10 ну в общем такой очень очень плохой предсказатель который предсказывает просто среднее будет получать на r сквирт нолик и чем более хорошие наш предсказать будет становиться тем ближе к единице будет

на r сквирт нолик и чем более хорошие наш предсказать будет становиться тем ближе к единице будет r сквирт потому что у нас количество не объясненной вариации то есть средний квадрат ошибки ну это можно назвать количеством не объяснены вариации он будет становиться меньше и ближе к единице все хорошо то же время можно заметить что ничто не мешает расклад быть меньше нуля вообще допустим если у нас есть какой-то супер плохой предсказатель который всегда предсказывает там миллион обычные ответы

есть какой-то супер плохой предсказатель который всегда предсказывает там миллион обычные ответы порядка единиц там десятков the square то он будет меньше нуля такое бывает значит у вас плохой классификатор плохой регрессор или плохая задача как посмотреть вернемся к тому что такое метрики зачем они нужны но же есть лосс и кажется что у кого меньшую функция потерь то ты лучше ну метрики нужны для того чтобы сравнивать между собой во первых разные алгоритмы а во вторых потому что у разных

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

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

на весь бизнес и разрушает вообще все но конкретно для метрики на который вы оптимизируете то есть на количество положительных отзывов ну это скажется положительно таким образом сравнивать алгоритмы память по тому на что они оптимисты не совсем честно потому что функция потеть никогда абсолютно полностью не показывает насколько хорошо решено ваша задача вот и придумывать какие-то метрики которые смотрят на решение вашей задачи с других углов в других плоскостях это всегда хорошо давайте сделаем

на решение вашей задачи с других углов в других плоскостях это всегда хорошо давайте сделаем вот такую до метрики определены в с колен metrics мы будем использовать r2 score вот это вот метрику и средний квадрат ошибки а еще мы импортируем линейную регрессию объект то есть эстимейт а про который вам очень важно помнить что это такое и н.н. причем для кнн как я говорил он может решать и задачу регрессией задачу классификации и вот для двух этих задач и есть разные модели вы можете импортировать

задачу классификации и вот для двух этих задач и есть разные модели вы можете импортировать кейн neighbors регрессор а можете кейна и барс классе fire ну и один решает задачу регрессии другой классификация там немножко разный код и поэтому они разделены прошел определим функцию чтобы просто печатать метрики и постоянной не писать вот эти два бренда и обучаем наш универе агрессию и кнр как это делается точно так же как и в случае с трансформерами самом начале нам нужно создать наш объект во

делается точно так же как и в случае с трансформерами самом начале нам нужно создать наш объект во время создания объекта вот здесь shift ap чтобы посмотреть документацию вы можете увидеть что есть много разных аргументов в случае с линейной регрессии их не очень много на самом деле самое основное это вот find fit intercept это значит если нужно ли использовать в данном случае свободный член то есть вот это вот число которое не умножается ни на один из признаков которые мы подаем в линейную

есть вот это вот число которое не умножается ни на один из признаков которые мы подаем в линейную регрессию после бы как мы создали объект мы делаем feed и потом делаем predict чтобы получить значение ура мы машин learner и поздравляю теперь можно зарабатывать 900 миллионов на на секунду только есть небольшая проблема конечно вот если мы возьмем и обучим нашли не регрессе то видно что работает она хуже чем просто предсказание среднего значения таков мир так уж получилось если мы посмотрим на

она хуже чем просто предсказание среднего значения таков мир так уж получилось если мы посмотрим на кей не раз neighbors получается то же самое в сквирт меньше 0 ну в общем мы конечно машин learner и но как то не очень успешные скажем так как я уже говорил это связано на самом деле не с тем что с нами что-то не так а просто плохая задача подобрана она так не специально просто она очень хорошо показывала разнообразные методы обработки предобработки данных но с предсказанием в этот раз не

показывала разнообразные методы обработки предобработки данных но с предсказанием в этот раз не получилось хорошо давайте теперь посмотрим на кросс валидацию я принял в самом-самом конце лекции рассказывал и вот здесь есть еще раз текстом возможном умно понравится больше объяснение того как работает кросс валидация в скаляр не кросс валидация уже заранее реализованную в очень большом количестве видов для очень разных целей и вот например есть такая штука как кросса в людей что она делает она

видов для очень разных целей и вот например есть такая штука как кросса в людей что она делает она принимает модель вашего объект вашей модели в данном случае мы передали линейную регрессию ваши признаки вашу целевую переменную количество фолдов помните это то это части на который разделяется ваш datasette перед тем как на данном случае 4 из 5 частей обучиться и на пятой части посмотреть качество вот мы перейдем объект признаки ответы количество файлов и какие собственно метрики нужно

качество вот мы перейдем объект признаки ответы количество файлов и какие собственно метрики нужно использовать кросс в людей то особо не давайте еще в этот код итоговая идея в том что кросс вылетает как раз разделяет наш веб-сайт на 5 частей и отдает нам разнообразные метрики для вот этих вот 5 разделение разных например тест r2 скоро 5 значений это значит что вот при таком разделении нашего data set а мы получили -08 р-р сквирт при таком вот при другом разделении шесть сотых при другому 1 10

set а мы получили -08 р-р сквирт при таком вот при другом разделении шесть сотых при другому 1 10 ну и так далее всего пять метрик для пяти разных разделений нашего data set a что обычно с ними делают обычно их просто усредняются и говорят что вот это вот наша итоговая метрика по которой мы будем сравнивать потом наши разнообразные модели ну тоже самое можно сделать для кей не раз neighbors кстати да вот сюда в этот метод можно передавать уже даже обученную модель от этого ничего не поменяется

да вот сюда в этот метод можно передавать уже даже обученную модель от этого ничего не поменяется просто потому что перед тем как обучать модель на 4 из 5 фолдов кроссовый лидийцев внутри себя и и копирует и сбрасывает вот это вот обучение ну скажите что вообще классно но не очень полезно потому что он все еще придется перебирать модели руками а что если бы была такая штука которая за нас перебирает пар гипер параметры хотя бы у одной модели и с помощью кросс валидация подбирает самую лучшую

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

комбинацию в данном случае это не совсем ощущается потому что у нас всего лишь один параметр гипер параметр количество соседей которых нужно учитывать но если бы было больше то грызть о себе пробовал бы допустимых было бы два он давайте я даже специально укажу покажу какая то бы работало бы допустим у нас аллах ккк допустим это вот еще один гипер параметр и тогда говорить о себе создавал бы модели с гипер параметрами 11 потом 12 13 ну и в общем все комбинации перебрал бы и с помощью кросса

с гипер параметрами 11 потом 12 13 ну и в общем все комбинации перебрал бы и с помощью кросса валиде шона вот такого для каждого вычислила бы итоговую метрику в данном случае минского эдера и нашел бы тот который минимизирует прекрасно мы только что его запустили я вот здесь вот в качестве одного из аргументов передал verbal все равно 10 вроде бы вообще verbo все равно 1 делать то же самое лада надо удалить потому что такого гипер параметра все-таки не существует ну ладно verba s равно один

надо удалить потому что такого гипер параметра все-таки не существует ну ладно verba s равно один делает не то же самое в общем verbo us переводится как многословность и чем больше здесь значение тем больше отладочной информации печатает вашу модель при обучении вы все мы поставим десятку то здесь для каждой создающийся модели можно увидеть свою запись там то что она начинает обучаться и все такое ну и давайте до после того как мы сделали на вот этой вот модели fit это является эстимейт epam и

ну и давайте до после того как мы сделали на вот этой вот модели fit это является эстимейт epam и припяти он внутри с помощью кросс в людей то находит как раз лучшие параметры для вот этой модели а потом модель с лучшими параметрами обучает внутри себя на все на всех данных и теперь благодаря этому у гбр горячо можно вызвать сейчас . predict это будет то же самое что если бы вы вызвали . predict у кэнона с лучшими параметрами ну и еще у него можно вот такие вот атрибуты посмотреть чтобы найти

у кэнона с лучшими параметрами ну и еще у него можно вот такие вот атрибуты посмотреть чтобы найти какие параметры в итоге были лучшими ну и в конце концов есть просто обычный киев old это такой класс который позволяет вам более менее удобно работать кросс валидации самостоятельно то есть вот все эти функции они скрывали от вас-то как разделяется datasette на эти 5 частей разделяете он с помощью как раз класса киев ул я думаю что наверное про него не так интересно рассказывать и нужно просто

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

увидеть что задача вообще не решается решается плохо что там есть какие-то интересные особенности которые можно потом использовать или что вам вообще подсунули другие данные в общем нужно смотреть на данные даже в тепле нинги из колес очень удобная и полезная библиотека с с тиммейтами трансформерами из которых можно строить такие цепи обработки данных ну и собственно вся

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

несмотря на то что существует намного более продвинутые более сложной модели вроде например в нейронных сетей или чего-то такого еще во первых линейной модели они очень простые и вы можете просто взять посмотреть на vesa которые они выучили и сказать какие признаки были важны для модели какие нет то есть мы просто понимаем как модель работает как она принимает свои решения и в некоторых применениях это очень важно наверное самый такой простой пример это кредитный скорик задача состоит в том что

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

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

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

никаких специальных знаний и ура вот у вас есть предсказание скорее всего не буду даже приемлемо хорошими как где-то как минимум 80 процентов того что вы смогли бы получить какой-то более сложно модели ну и на самом деле очень важное свойство того что линейные модели не перри обучается и поэтому на многих задачах где вас не так много данных например задача классификации текстов распознавания предсказания какой-нибудь цены дома вот что то такое мнение модель они просто работают лучше чем все

какой-нибудь цены дома вот что то такое мнение модель они просто работают лучше чем все остальное что у вас есть потому что вы возьмете нейронную сеть данных для ее обучения достаточно вы возьмете какие-нибудь деревья по которой мы поговорим на следующей лекции там они могут переобучаться общем идеальной модели прекрасно теперь давайте перейдем к алене и регрессе почему определять модель надо понять что задачу вообще собираемся решать ну выглядеть наша задача будет так у нас есть datasette

понять что задачу вообще собираемся решать ну выглядеть наша задача будет так у нас есть datasette состоящий из эль записей мы на нее будем обучаться и в каждой записи в каждом сэмпле нас n признаков наши таргет и они из каких-то действительных чисел ну и удобнее всего для наших выкладок будет представлять дата сайт виде вот такой вот матричный где каждая строка это одно наблюдение состоящая из n признаков а каждая колонка соответственно это какой-то один признак для разных n наблюдений и

из n признаков а каждая колонка соответственно это какой-то один признак для разных n наблюдений и помимо матрешки с признаками x у нас будет вертикальный вектор с нашими целевыми переменами хорошо обучать мы все это будем с помощью квадратичной функции потерь почему но самое основное потому что это абсолютный победитель в частоте использования наверное я не могу подкинуть какую-то другую метрику которую бы хотя бы сравнительно также часто использовали для задач репрессий наверное еще одна

которую бы хотя бы сравнительно также часто использовали для задач репрессий наверное еще одна метрика которая попробовать можно это не квадрат ошибки как здесь а модуль ошибки но из-за того что модуль чуть сложнее оптимизируется такая ошибка используйте реже и в общем у квадратные еще есть очень хорошие свойства которые получаются из статистики поэтому это прекрасная функция потерь и мы ее будем использовать собственно линейная регрессия вместе с квадратичной функцией потерь это то что вы

использовать собственно линейная регрессия вместе с квадратичной функцией потерь это то что вы могли наверное использует на какой-нибудь лабораторной по физике как метод наименьших квадратов как мы будем определять нашу модель линейная регрессия вы все наверное знаете это вот такая вот функция которая зависит от каком то количество признаков нам случаем и выглядит она так это свободный член плюс попарные произведения признака на какой-то вес ну вы видите что запись получается достаточно длинная

произведения признака на какой-то вес ну вы видите что запись получается достаточно длинная и ее можно сильно упростить если мы добавим единичку в наш вектор признак то есть когда к нам на вход как это было бы реализовано в коде когда к нам на вход приходит какой-то объектом на котором нам нужно сделать предсказание мы перед тем как прогонять его через нашу модель просто добавляем единичку в начале ну и тогда вот этот вот свободный член он войдет в вектор весов и мы сможем записать предсказание

ну и тогда вот этот вот свободный член он войдет в вектор весов и мы сможем записать предсказание вот в таком виде это скалярное произведения а вот здесь вот она раскрыта в полосу хорошо давайте посмотрим почему линейны регрессия так называется какие в общем у нас могут признаки попасть в линию регрессии ну самое первое самое простое это изначальные признаки которые были в нашем дата сайте потом у нас в качестве пленников мы можем взять какие-то преобразования изначальных признаков например

у нас в качестве пленников мы можем взять какие-то преобразования изначальных признаков например корень логарифм что-то еще двойную логарифм безразницы в третьих мы можем взять степени наших изначальных признаков ну для того чтобы просто повысить экспрессивной нашей модели четвертых у нас могут быть значения получены из манхэттэн клодин да это будут 0 филе единичкой но они все равно действительные числа так что в целом засунуть их линейную регрессию тоже не проблема и последний тип это попарные

числа так что в целом засунуть их линейную регрессию тоже не проблема и последний тип это попарные перемножения разных признаков давайте вообще подумаем зачем может понадобиться создавать вот такие вот признаки посмотрим на то как выглядит определение линейной регрессии как вы видите наше предсказание она не учитывает взаимодействием между признаком то есть допустим может случится так что при увеличении x при большом x1 и x2 ответ маленький а при маленьком x1 и маленьком x2 ответ тоже маленький

x при большом x1 и x2 ответ маленький а при маленьком x1 и маленьком x2 ответ тоже маленький а если они около нуля что ответ большой и вот такой вот поведение наша модель она просто не сможет захватить выучить и чтобы с этим бороться мы можем добавить разные степени наших признаков попарные произведения вы в общем просто повысить экспрессивного нашей модели и на самом-то деле как что делает вот наша модель она строит какой то можно представить себе многомерное пространство где вот наша линейная

модель она строит какой то можно представить себе многомерное пространство где вот наша линейная модель это такая график нашей модели будет гипер плоскости если же мы прошу прощения если же мы добавим много вот таких вот разных производных наших признаков то тогда это гипер плоскость может превратиться в более сложную поверхность ну и в целом это хорошо нашу модель станет сможет выучить более сложные зависимости в данных ну как вы видите дней на агрессия может быть нелинейно пола признаком

сложные зависимости в данных ну как вы видите дней на агрессия может быть нелинейно пола признаком почему же она тогда называется линиями потому что она всегда линейно по параметру ну и собственно нам в основном это и будет важно для того чтобы научиться оптимизировать линию регрессе давайте посмотрим такой простенький пример линейной регрессии для datasette а у которого только один признак нужно the site это вот эти вот голубенькие точки один признак это x и одна целевая переменный ну вы

нужно the site это вот эти вот голубенькие точки один признак это x и одна целевая переменный ну вы видите они достаточно хорошо ложатся на прямую скорее всего они получились как y равно a + b x и еще какой-то там шум и нам нужно как-то научиться вот на таких хорошо лажа щихся напрямую точку хорошо учащихся напрямую точках проводить прямую как мы это будем делать ну давайте мы для начала просто запишем что мы вообще хотим получить в матричной форме потому что нам просто потом будет проще

запишем что мы вообще хотим получить в матричной форме потому что нам просто потом будет проще работать с этим мы хотим найти такой вектор весов омега что при умножении на матрицу x справа он будет давать вектор целевых переменных y если вы не очень хорошо знакомы с матрицами у них умножением то вот развернуто и то же самое выражение и что здесь получится когда мы умножаем матричное вот это вот матрицу x на векторы весов amiga то у нас просто получается суммы по парных произведений то есть в

матрицу x на векторы весов amiga то у нас просто получается суммы по парных произведений то есть в результатом вот этого вычисления левой части будет вертикальный вектор где на первом месте сверху будет стоять икос 11 умножить на va мегатен плюс x 12 умножить на миг 2 + x 13 умножь на омега-3 ну и так далее вот как мы это будем решать ну давайте посмотрим на несколько случаев самый первый случай когда n равно и то есть когда количество признаков в нашей модели в нашем дата сети равно количеству

n равно и то есть когда количество признаков в нашей модели в нашем дата сети равно количеству наблюдений тогда у нас получается обычная линейная система уравнений которую ну наверное большинство из вас умеет решать и решается она очень просто вот x квадратная мы можем взять у нее обратную матрицу и получить о miku ura ura ну тут есть конечно несколько проблем обратной матрицы существует не всегда например может так получиться что x вырожденная что это скорее всего значит ну у вас может быть

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

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

наблюдение сильно больше чем признак то да наша линейная систем уравнения будет выглядеть как то вот так ну и в целом вы скорее всего знаете что в общем случае у такой с тем уравнений решения нету потому что у нас n неизвестных и очень очень много уровней просим не получится подобрать такие такие веса чтобы все вот эти вот строчки перемноженные на весах были равны соответствующим целевым перемен что же тогда делать давайте еще раз посмотрим на нашу систему и попытаемся что-то придумать ну взять

же тогда делать давайте еще раз посмотрим на нашу систему и попытаемся что-то придумать ну взять обратные уикса мы не можем потому что x не обратно и не квадратная матрица ну собственно как раз из-за того что наблюдение сильно больше чем признак но есть такое понятие как псевдо обратной матрицы она определена вообще для любых матриц но в случае если у нас высокая и тонкая матрица вот как в этом случае то выражается она вот так как x транспонированное на x и от этого взять обратную и еще раз на

то выражается она вот так как x транспонированное на x и от этого взять обратную и еще раз на экстрим спланированы понятно что вот такой вектор весов которые мы получили он на самом деле не будет удовлетворять вот это линейные системы уравнений скорее всего что же он тогда вообще дает на это такой вектор весов вот это вот псевдо обратной матрицы устроены так что вектор весов которые мы получили он будет давать наименьшую и в квадратичную ошибку ну то есть по сути то что мы и хотели хорошо как

он будет давать наименьшую и в квадратичную ошибку ну то есть по сути то что мы и хотели хорошо как можно еще получить вот это решение потому что только что мы взяли сказали что существует псевдо обратные какая-то матрица и просто умножим на нее ну не очень хорошо не рассказывать про то что такое псевдо обратной матрицы и применяйте и поэтому давайте получим то же самое но другим методом просто записав наш нашу функцию потерь и взяв у нее производную да кстати в данном случае если у нас есть

записав наш нашу функцию потерь и взяв у нее производную да кстати в данном случае если у нас есть линейная зависимость между колонками то псевдо обратная матрица не существует и нас опять же ничего не получится давайте запишем нашу функцию потерь мы ее уже до этого определялись здесь мы просто подставили нашу модель здесь получается скалярное произведение между признаками и весами потом мы из этого вычитаем истинное значение целевой переменной ошибки ну понятно что вот это какая то ошибка

этого вычитаем истинное значение целевой переменной ошибки ну понятно что вот это какая то ошибка положительно или отрицательно мы ее возводим в квадрат и суммируем по всем нашим сэмплом по всем наблюдениям из нашего data set ну на самом деле записать это намного удобнее в матричной форме и тогда получится вот такая вот очень приятная запись из двух скобочек я не знаю как объяснить почему вот это равно вот этому потому что нужно просто подумать представить у себя в голове что это за матрица что

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

и получается вектор ошибок ну и здесь тоже самое теперь мы в левой части и вектора ошибок транспонируем а справа нет и тогда у нас получается что это просто сумма квадратов ошибок то есть то что здесь написано хорошо вернёмся теперь к тому как у этого взять производна производные берется немножко магическим образом для этого надо знать как дифференцировать матричное произведение но давайте вы мне поверите что выглядит она вот так ну и на самом деле целом это более менее логично учитывая что вот

поверите что выглядит она вот так ну и на самом деле целом это более менее логично учитывая что вот этот это производная она каким-то образом очень похоже на то что произошло бы если бы вы дифференцированы просто один член из вот этой суммы хорошо мы взяли производную теперь мы можем приравнять ее нулю к нулю вот здесь это делается и вычислить нашу олегу для этого мы раскрываем скобки нас получается externa x на омегу минус xt на y xt на игорь переносим направо от знака равенства и домножаем на

externa x на омегу минус xt на y xt на игорь переносим направо от знака равенства и домножаем на x 100 x минус 1 ура ура у нас получились наши леса но на самом деле здесь тоже очень важно чтобы колонки в матрицу иксов были линейно независимыми так как если они не линейно независимыми то вот у этой матрицы которую мы у которым мы берем обратно и у нее просто не будет обратной матрицы хорошо ну у такого решения тоже есть достаточно большая проблема в целом брать обратную матрицу сложно это

ну у такого решения тоже есть достаточно большая проблема в целом брать обратную матрицу сложно это требует примерно как действий и поэтому вычислять такое неприятно особенно когда наша матрица x становится там из миллионов наблюдений да у нас очень большой datasette ну и ещё она может быть примерно с линейно зависимыми столбцами и тогда то что мы вот здесь получим то есть обратная матрица конечно будет существовать но значение элементов обратной матрицы будут очень большими по моделям и

конечно будет существовать но значение элементов обратной матрицы будут очень большими по моделям и поэтому вычисления самых нестабильных просто значение элементов обратной матрицы не будут помещаться в память компьютера в переменные

вы уже научились решать задачу или графе и с помощью или иных методов давайте теперь научимся решать задачу классификации но прежде чем это сделать нам нужно найти функцию потерь на который мы будем оптимизироваться давайте поставим нашу задачу и мы видим нашу функцию потерь пусть у нас есть datasette из n наблюдений и and признаков но теперь в отличие от прошлого раза наши игроки будут не просто любыми действительными числами а ноликом или единичкой ну потому что у нас задача классификации

любыми действительными числами а ноликом или единичкой ну потому что у нас задача классификации нолик нулевой класс 1 5 1 класс такая задача называется задачи бинарной классификации хорошо ну у нас опять есть матрица x и вектор y из признаков и соответственно целевых перемен и теперь нам нужно найти функцию потерь сделать это просто так достаточно сложно потому что функции потерь можно придумать бесконечно много и возможно какие-то из них действительно будут хорошими какие-то плохими но давайте

много и возможно какие-то из них действительно будут хорошими какие-то плохими но давайте мы попробуем применить одну теорему из статистики которая обещает нам хорошие веса и потом мы увидим что применить применение этой теоремы и использование особого особые функции потерь это одно и то же и получится очень красиво и вот это вот то что выходит из теоремы мы возьмём в качестве функции потерь потому что у такой функции потерь будет очень много хороших свойств но прежде чем использовать теорему

что у такой функции потерь будет очень много хороших свойств но прежде чем использовать теорему статистика нам нужно ввести вероятностную модель собственно понять на самом деле что мы вообще собираемся предсказывать ну предсказывать мы хотим вероятность так что модель вероятность x он мы назовем случайный вектор состоящий из признаков с не криком какую-то случайную величину которая вид наша целевая перемены то есть и такой небольшой пример чтобы понять что это значит пример модели которое право

перемены то есть и такой небольшой пример чтобы понять что это значит пример модели которое право клике на рекламу что происходит когда вы смотрите на какой-то баннер в каком-то сайте вот пусть x это вектор состоящие из количества кликов раньше для человека время активности на сайте и уровня его доходов а y это единичка если человек кликнул рекламу и нолик если клика не было тогда мы хотим предсказывать вот такую вот вероятность научиться от y при условии x что вот эта запись значит это значит

вот такую вот вероятность научиться от y при условии x что вот эта запись значит это значит что какова вероятность того что y будет равно единичке если мы уже знаем что x равно вот такому вот вектор u то есть другими словами это верность того что человек который сделал раньше 10 кликов у него два часа активности и зарабатывает он 10 долларов а вероятность того что он сделает клик на нашу баннерную рекламу почему если бы вот здесь была вероятность того что y равно 0 то в итоге это было бы

рекламу почему если бы вот здесь была вероятность того что y равно 0 то в итоге это было бы вероятность того что человек не сделает кликни реклам вот мы хотим научиться моделировать такую условную вероятность вот здесь это собственно и записано так как у нас а вероятность так как у нас задача бинарной классификации то моделировать на можно только вероятность принадлежности к первому классу если бы у нас была классификации на допустим 10 классов то нам бы пришлось строить 10 вот таких функций

бы у нас была классификации на допустим 10 классов то нам бы пришлось строить 10 вот таких функций для p от y равно нулю при условии x y равно 1 при условии x и так далее но так как у нас только 2 класса то мы можем предсказывать вероятность для первого а для 0 класса оно получится просто из условия того что вероятности должны суммироваться к единице вот хорошо наша модель выглядит вот так теперь каждый раз когда мы дальше мы будем записывать вероятность того что y равно чему-то при условии x

каждый раз когда мы дальше мы будем записывать вероятность того что y равно чему-то при условии x надо держать у себя в голове что это вот наша модель это функция которая там где-то внутри у себя содержит vesa который мы собственно хотим оптимизировать хорошо давайте тогда введем такую штуку как правдоподобия это будет вероят произведение вероятностей появления каждого элемента из нашей выборке ну посмотрите просто на формулу и как бы эта вероятность того что вот если у нас заданы на наши

ну посмотрите просто на формулу и как бы эта вероятность того что вот если у нас заданы на наши признаки то есть матрицы x уже выбрана вероятность того что мы получим соответствующие целевые перемены и вот эту вот это правдоподобие мы хотим его максимизировать ну давайте посмотрим вообще почему это имеет смысл пусть у нас есть только одно наблюдение есть река равна единице тогда мы хотим по сути максимизировать вероятность того что наша модель предсказывает правильный класс ну и звучит вроде

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

выбирать такие веса для нашей модели что они максимизируют вот это произведение то эти веса будут хорошими ну оптимизировать произведения достаточно сложно поэтому мы возьмем логарифм от этого произведения так как логарифм это возрастающая функция то нет никакой разницы между тем чтобы максимизировать просто произведение и логарифм от произведения но это позволит нам намного упростить то как выглядит наша функция смотрите логарифм от произведения развалиться в сумму логарифмов и теперь мы еще

наша функция смотрите логарифм от произведения развалиться в сумму логарифмов и теперь мы еще немножечко вот эту сумму логарифмов изменим чтобы из задачи максимизации правдоподобие превратить в задачу минимизации минус логарифм от правдоподобия ну если мы возьмем логарифм от правдоподобие добавим минус у нас получится вот такое вот выражение по центру и его мы хотим минимизировать давайте теперь посмотрим на него внимательнее она очень похожа на сумму потерь на всех элементах нашей выборке на

посмотрим на него внимательнее она очень похожа на сумму потерь на всех элементах нашей выборке на эмпирический риск который мы вводили в прошлое реакция то есть получается что если в качестве функции потеряно одном элементе взять логарифм вероятности правильного класса то задачу максимизации правдоподобия и задачи минимизации функции потери будет одним и тем же vol 1 мы взяли и нашли необходимый нам лосс вот это минус сумма логарифмов правильного минус сумма логарифмов предсказаний вероятности

нам лосс вот это минус сумма логарифмов правильного минус сумма логарифмов предсказаний вероятности правильного класса хорошо давайте еще раз пройдемся по всему что мы только что сделали мы взяли правдоподобие которые мы понимаем что хорошо бы максимизировать вот под этой крышкой скрывается нашу модель надо подобрать такие веса чтобы вот эти вот произведения пешек было максимально потом мы сделали несколько преобразований вот этого выражения и получили что это то же самое что минимизировать вот

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

хорошо мы научились обучать классификатора теперь мы можем перейти к линейной модели который создан для того чтобы классифицировать называется она логистическая регрессия ну и выглядит она достаточно просто мы делаем примерно то же самое что в линейный крейсер то есть сначала получаем какое-то число от минус бесконечности до плюс бесконечности взяв скалярное произведение между вектором весов и вектором признаков а потом к этому числу применяем 7 что такое 7 до функция выглядит вот так но на

вектором признаков а потом к этому числу применяем 7 что такое 7 до функция выглядит вот так но на самом деле как она конкретно сейчас выглядит нам без разницы главное посмотреть на ее график что она делает по сути она берет какое-то число от минус бесконечности до плюс бесконечности и переводит его в число от нуля до единицы ну и если у нас был ноль то получается 0 5 если было какое-то очень большое число то один какое-то очень маленькое то ноль и в итоге благодаря этому мы можем

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

близок к вероятности вот почему модель называется логистической регрессии это очень важно упомянуть потому что не совсем понятно задача классификации модель называется логистическая регрессия ну все дело в том что вот здесь вы можете видеть нашу модель предсказывает число от нуля до единицы действительное число и поэтому без того это число действительно она называется регрессий хотя и в итоге мы ее используем для классификации как вы помните мы вывели функцию потерь для общего для любой модели

ее используем для классификации как вы помните мы вывели функцию потерь для общего для любой модели которые предсказывают вероятность класса давайте посмотрим чему равен логарифм вероятности правильного класса в случае если у нас логистическая регрессия для 2 классов такая задача называется бинарной классификации смотрите если у нас настоящий класс равен единице тогда вот этот член один минус 1 за ну лица то есть вообще без разницы что здесь а здесь у нас получается 1 умножить на логарифм

1 за ну лица то есть вообще без разницы что здесь а здесь у нас получается 1 умножить на логарифм предсказание модели ну как вы помните мы решили что предсказание модели это будет вероятностью 1 класса так что ну все хорошо теперь если настоящий класс и горькой t равен нулю тогда вот этот член заявляется а здесь 1 умножить на логарифм 1 минус предсказание в нашей модели 1 минус предсказания нашей модели вот так как предсказание эта вероятность первого класса то один минус это вероятность будет

модели вот так как предсказание эта вероятность первого класса то один минус это вероятность будет вероятностью 0 класса получается логарифм вероятности 0 класса ура ура это именно то что мы хотели как как линь логистическая регрессия вообще примерно должно работать ну представим что у нас есть дата сердца одним признаком и какой-то целевой переменный без разницы какая вот как мы видим большинство точек у которых этот признак меньше в 75 они принадлежат классу 0 большинство точек у которых x

точек у которых этот признак меньше в 75 они принадлежат классу 0 большинство точек у которых x больше семидесяти двух с половиной примерно они принадлежат при почти всех классу 1 в итоге нам нужно вот такую вот мой ду растягивая идешь сжимая и принося центр по оси x в лево или вправо найти такое ее положение которое будет лучше всего проходить через наши точки что такое лучше всего у нее будет минимальную функция потерь функцию потерь мы уже описали давайте теперь подставим то что вот логарифм

функция потерь функцию потерь мы уже описали давайте теперь подставим то что вот логарифм вероятности правильного класса которые мы раньше вы получили в функцию потеря для произвольного классификатора ну упоминаю что функция потерь для произвольного классификатора это сумма минус логарифм ав вероятности правильного класса ну мы подставляем и получается что нам нужно оптимизировать минимизировать вот такой лосс хорошо мы научились обучать линейных логистическая регрессия ты была достаточно

вот такой лосс хорошо мы научились обучать линейных логистическая регрессия ты была достаточно просто но она работает только для 2 классов в постановке который мы только что сделали нам хочется чтобы мы могли классифицировать не только на два класса но и на сколько угодно на 10 20-30-40 что тогда и сделал как как что можно придумать ну давайте мы возьмем и для каждого класса заведем свои веса омега 1 это будет вектор весов для 1 класса соответствующий первому классу омега 2 вектор весов

омега 1 это будет вектор весов для 1 класса соответствующий первому классу омега 2 вектор весов соответствующий второму классу и так далее всего у нас будет м классов тогда мы в начале получим лаги ты это такой вот actor is скалярных произведений соответствующего вектора весов и признаков ну если расписать скалярные произведения то получится вот такой вот вектор из лаги тов каждое это число называется лаги там если вы посмотрите то изначальном определение у нас тоже есть по сути логит который

лаги там если вы посмотрите то изначальном определение у нас тоже есть по сути логит который мы потом применяем 7 теперь вместо того чтобы применять к лаги там 7 еду сегодня мы можем применить к одному числу у нас вектор лагерь мы применим другую функцию софт макс но очень похоже на 7 до но в том смысле что и 7 на выдает одно число и мы интерпретируем это как вероятность первого класса вероятность 0 класса понятно как получается один минус результат 7 в случае если у нас классов 10 так делать

0 класса понятно как получается один минус результат 7 в случае если у нас классов 10 так делать не получится поэтому мы берем и применяем софт макс что тут происходит ну во-первых мы берем и возводим экспоненту в наши лагги ты альфа-1 это альфа это как раз выход лагерь то есть вектор лаги там е в степени альфа 1-я степень альфа-2 и так далее и все хорошо это наши предсказания но мы же хотим чтобы наши предсказания были вероятности то все они должны быть от нуля до единицы что же нам делать у

наши предсказания были вероятности то все они должны быть от нуля до единицы что же нам делать у нас есть вектор и суммы не единицы мы возьмем просто про суммирую все вот эти значения и по сути от нормируемой вектор мы поделим каждое значение на сумму вообще всех значений и в итоге софт макс выдаст нам вектор из чисел которые в каком-то смысле чем у пропорциональны ланита и в итоге они их сумма равна единице то есть их можно интерпретировать как вероятности вот эту вот разделение на лаги ты из

единице то есть их можно интерпретировать как вероятности вот эту вот разделение на лаги ты из автомат она очень важно есть на самом деле сейчас я его мог взялась но впоследствии когда вы будете изучать нейронную сеть и там по сути нейронные сети это много идущих друг за другом линейных моделей которые разделены нелинейности my и обычно когда у вас есть нейронную сеть которая предсказывает класса предсказывает вероятности то в конце к ее выше дам применяется софт макс чтобы получить собственно

предсказывает вероятности то в конце к ее выше дам применяется софт макс чтобы получить собственно вероятности давайте посмотрим как пример руссофт макс работы допустим у нас получились вот такие вот логи ты в данном случае они все положительные но тут естественно могут быть и отрицательные числа и 0 и все что угодно от минус бесконечности до плюс бесконечности мы применяем софт макс и получаем вот такие вот вероятности и вы можете проверить что в итоге они суммируются к единице почему функция

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

второй класс но мы так сделать не можем в данном случае потому что нам нужны вероятности а случай нейронных сетей потому что нам нужно будет все это оптимизировать мы сейчас на самом деле нам нужно будет оптимизировать и поэтому мы хотим применить только дифференцируемые функции и максимум это не дифференцируемая функция что же делает софт макс смотрите 5 1 оно всего лишь в два раза больше чем 2 и 2 но после применения софт макса 51 превращается в 09 ну и это сильно больше чем любые другие

2 и 2 но после применения софт макса 51 превращается в 09 ну и это сильно больше чем любые другие выходы то есть по сути это функция она как бы похожим на что-то вроде мягкого максимума она выбирает отсюда если число здесь немного больше чем остальные то здесь она будет сильно больше чем остальные хорошо в итоге наша модель может быть представлена как композиция сначала получение лаги тов с разными весами для разных классов то есть если у нас n признаков и эмма классно то выход функции ладится

весами для разных классов то есть если у нас n признаков и эмма классно то выход функции ладится от x это м действительных чисел потом мы к этим м действительным числам применяем с автомат и получаем м вероятности давайте просто выпишем предсказываю вероятность для какого-то вот классах к это будет пятый элемент выхода нашей модели в прошлый раз когда мы у нас было бинарной квалификация наша модель выдавала одно число выбирает из первого класса теперь он нам выдает вектор из вероятности так что

выдавала одно число выбирает из первого класса теперь он нам выдает вектор из вероятности так что если мы хотим узнать вероятность котова класса нам нужно взять 5 элемент этого вектора и выглядеть он будет вот так это просто вот расписаны вот эти функции мы берем экспоненту возводим ее в степень 5 ланита и делим на сумму экспонент возведенных в логе ты у нас получается число от нуля до единицы

теперь поговорим о градиентным спуске это такой метод для нахождения минима минимума функции то есть аргументов при которых функция принимает минимальное значение если вы вспомните то все наши задачи оптимизации то есть меня минимизации функции нужны были для того чтобы находить хорошие веса по сути можно же сказать что функция потерь это такая функция от весов и нам нужно найти веса который минимизирует функцию потерь вот как раз градиентный спуск для этого и будем использовать ну прежде чем

функцию потерь вот как раз градиентный спуск для этого и будем использовать ну прежде чем переходить к таким сложным вещам давайте просто подумаем как вообще можно минимизировать функция посмотрим на парабол пусть у нас есть начальное значение с которого мы хотим куда-то шагать и собственно находить меню мы берем находим значение функции в этой точке и теперь нам надо куда-то сместиться но логично смещаться в направлении в котором функция уменьшается что как найти это направление ну во первых

смещаться в направлении в котором функция уменьшается что как найти это направление ну во первых мы можем взять посмотреть вот вокруг этой точки в какой-то маленькой окрестности значение функции ну еще две точки вот здесь чуть выше и чуть ниже проверить в них значение тогда мы увидим что функция идет в этот то есть при увеличении x а функция уменьшается и сделаем шаг в эту сторону так действительно можно делать и по сути мы вычисляем же что-то очень похожее на производную когда берем вот эти

можно делать и по сути мы вычисляем же что-то очень похожее на производную когда берем вот эти две соседние точки и смотрим в какую сторону направляется функция куда она в какую сторону она уменьшается поэтому зачем брать эти две точки если мы можем просто взять и посчитайте производную вот здесь из посчитаем производное то мы увидим что оно отрицательное отрицательно производные значит что при увеличении x а фукса уменьшается ну и тогда мы сделаем небольшой шаг вправо почему небольшой ну

при увеличении x а фукса уменьшается ну и тогда мы сделаем небольшой шаг вправо почему небольшой ну допустим мы сделаем огромные мы делаем огромные шаги тогда может получиться так что вот отсюда мы сразу перешагнем сюда потом мы посчитаем нашу производную здесь шагнем сюда ну и вот так и будем тут туда-сюда ходить делаю бесконечное количество шагов и до минимума никогда не дойдем поэтому нам нужно делать небольшие шаги и только тогда наш метод в итоге приведёт нас к минимуму есть мы делаем шаг

делать небольшие шаги и только тогда наш метод в итоге приведёт нас к минимуму есть мы делаем шаг опять здесь смотрим производную она снова отрицательная идем идем идем идем если в какой то момент мы все-таки попадем на правую ветвь параболы то производная станет положительный мы поймем что теперь функция уменьшается если мы уменьшаем x и сделаем шаг назад в итоге мы придем когда-то каменева ну примерно так работает градиентный спуск только в данном случае мы формулировали деятельный спуск ни

примерно так работает градиентный спуск только в данном случае мы формулировали деятельный спуск ни для одной переменной не для функции одной переменной а для функции многих переменных потому что наши функции потерь это функции от весов и весов у нас много давайте математически запишем что все это значит рельефный спуск пусть у нас есть задача минимизировать вот такую функцию и при этом мы умеем узнавать производную функции f в какой-то точке во всех на самом деле чтобы внезапно мы не попали в

узнавать производную функции f в какой-то точке во всех на самом деле чтобы внезапно мы не попали в точку где вычислять производные не умеем и а ей что делать обозначить вектор производных мы будем вот так называется он градиент вот это вот значок на blood f это градиент и равен он вектору из частных производных fx1 по x 2 x 3 итак далее если вы вспомните курс мод она где-то наверное 2 или 1 курса то частные производные берется очень просто мы просто фиксируем все остальные переменные от

1 курса то частные производные берется очень просто мы просто фиксируем все остальные переменные от которых зависит с имбирем производные по одному аргумент получается частные производные хорошо у нас есть вот такой вектор и как вы помните я говорил что шаги должны быть небольшими и у нас есть специальный параметр который отвечает за размер шагов который мы делаем он называется альфа как он именно влияет вы сейчас увидите здесь мы его назвали для того чтобы было удобно писать формула но в

именно влияет вы сейчас увидите здесь мы его назвали для того чтобы было удобно писать формула но в машинном обучении его обычно называют ли они great когда вы будете реализовывать его в коде вот лучше называть эту не играй как будет выглядеть шагали спуска как вы помните в самом начале нужно будет выбрать какую-то точку из которой мы уже будем делать шаги потом мы берем вычисляем значение градиента в этой . просто значению частных производных умножаем на ли и грей и вычитаем из старого

градиента в этой . просто значению частных производных умножаем на ли и грей и вычитаем из старого значения нашей переменной то же самое мы делаем для x 2 x 3 и так далее и векторной форме это можно записать намного проще вектор весов x новый равен старый вектор весов минус лене great умноженный на градиент в этой точке в старой . как вот и наш газетный слуг выглядеть мы выбираем точку с которой начинаем оптимизацию каким-то образом возможно случайную возможно у нас есть какая-то мистика чтобы

начинаем оптимизацию каким-то образом возможно случайную возможно у нас есть какая-то мистика чтобы подбирать ли мы еще что-то знаем потом на каждом шаге мы меняем переменной от которых зависит наша функция ну и благодаря тому что мы двигались в направлении в котором функция изменить уменьшается то предостаточно маленьком шаги если функция f хорошая не очень быстро там меняет направление изменения новая . который мы получим она значение функции в ней будет меньше сколько таких шагов нужно

новая . который мы получим она значение функции в ней будет меньше сколько таких шагов нужно делать ну есть два критерия во-первых останавливается стоит как только изменения перестанут происходить то есть когда вот этот вот вектор производных будет очень близок к нулю то что сколько бы мы дальше не пытались что-то делать это ничего не изменит мы просто вычислить мне ресурс атразин или второй шаг второй вариант пока у нас не пройдет достаточно много шагов почему ну потому что либо на что-то

шаг второй вариант пока у нас не пройдет достаточно много шагов почему ну потому что либо на что-то хорошее уже получилось либо даже стараться не стоило так что можно заканчивать давать посмотрим как друзья услуг будет работать для параболы нас функция есть x квадрат градиент у нее достаточно простой потому что зависит она от одной переменной это просто вектор из функции 2x и ленин grey 01 возьмем начальное приближение 3 . из которой мы будем шагать и теперь будем делать обновление для нашего

начальное приближение 3 . из которой мы будем шагать и теперь будем делать обновление для нашего икса возьмем старый x и вычтем ли они great умноженный на значение производной здесь мы не подставили какие-то конкретные x и потому что можно посмотреть и получите что новый x равен 0 8 умножить на старый x по сути каждый шаг мы будем братьям нажать наш x на 08 его модуль будет становиться все меньше и меньше и в итоге мы когда-то придем к нулю в чем достаточно быстро откуда бы мы не начали вот

и меньше и в итоге мы когда-то придем к нулю в чем достаточно быстро откуда бы мы не начали вот здесь 3 на самом деле абсолютно без разницы откуда бы мы не начали в итоге мы придем к нулю давайте распишем газетный спуск для линиями регрессии теперь у нас функция выглядишь намного страшнее оно сложное в плане того что зависит она от вектора весов ни от одной переменной и выглядит вот так эта сумма квадратов ошибок теперь нам нужно научиться брать градиент функции потерь по нашим весом я приведу

квадратов ошибок теперь нам нужно научиться брать градиент функции потерь по нашим весом я приведу пример как взять производную по самому первому весу вами годин но на самом деле для всех остальных весов это будет выглядеть точно также ну во-первых мы прощаем производную суммы в сумма производных теперь у нас надо взять по ами g1 производную от квадрата ошибки мы знаем как выглядит производных квадрата это 2 умножить на то что было внутри наших скобочек и на производную внутренности скобочек по

это 2 умножить на то что было внутри наших скобочек и на производную внутренности скобочек по и нога один минус y это не зависит это константа поэтому мы его сразу выкидываем и нам нужно взять осталось только взять производную скалярного произведения x это на amiga ну сделать это тоже достаточно просто если вы вспомните как видит скалярное произведение там умножается x и один на омегу 1 а все остальные на какие-то другие angie так что взяв производные у нас остается только x 1 хорошо мы

все остальные на какие-то другие angie так что взяв производные у нас остается только x 1 хорошо мы научились брать производные как теперь будет выглядеть градиентный спуск мы убираем на какие-то начальные веса абсолютно произвольные и делаем небольшие обновления пока нас не перестанет изменяться вектор весов ну изменяться он перестанет потому что у нас есть гарантия что если нету линейной зависимости между колонками вот в этой матрицы x большое то задача вот такой оптимизации существует

зависимости между колонками вот в этой матрицы x большое то задача вот такой оптимизации существует единственное хорошее решение она выпуклая потому что хорошо давайте теперь сделаем то же самое для логистической регрессии у нас есть вот такая функция потерь и вот такое выражение для нашей модели возьмем производные ну сначала мы возьмем производную функции потерь по омега 1 это происходит достаточно просто потому что мы опять пользуемся линейностью берем производную логарифма вот получается

просто потому что мы опять пользуемся линейностью берем производную логарифма вот получается такое вот выражение здесь у нас есть производное выхода нашей модели по омега 1 отдельно мы посчитаем эту самую производную она выглядит вот так почему если вы посмотрите на производную 7 до то это значение 7 до умножить на 1 минус значение 7 до поэтому здесь вот такая красивая запись и как только мы подставим эту производную сюда получится вот такое поражение хорошо мы научились оптимизировать

мы подставим эту производную сюда получится вот такое поражение хорошо мы научились оптимизировать градиентным спуском линейной регрессии логистическую регрессию теперь пришло время поговорить про регуляризация

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

это просто скалярные произведения признаков на вектор весов может получиться так что столбцы нашим матрицы с признаками x линейно зависимы ну или примерно независимы на самом деле какое-то очень большой разницы это не делает потому что как только они примерно линейно зависима у нас вообще все методы очень все методы примерные и если они почтили независимо у нас все равно все сломается в общем что такое линии зависимость за знаю что существует такой вектор весов бета что при умножении матриц и

такое линии зависимость за знаю что существует такой вектор весов бета что при умножении матриц и признаков на этот вектор получится ноль это значит что вообще какой бы вектор признаков мы не взяли и скалярно не умножили на вот эти вот бета нас получится 0 но тогда существует бесконечное количество наборов лесов бесконечное количество весов которые дают одинаковые ответы что имею ввиду ну давайте представим что у нас есть модель с весами о mega + c бета где c это вообще какое-то произвольное

представим что у нас есть модель с весами о mega + c бета где c это вообще какое-то произвольное константа сколько угодно и модели с весами amiga хорошо тогда мы можем предсказание первой модели выразить вот так разложить их по линейности и давайте теперь посмотрим здесь скалярное произведение x на весах а здесь x на бета как вы помните у нас бета это коэффициента с которыми линейно зависимы строчки вот этой вот матрицы то есть при умножении вектора признаков на обед у нас получится 0 мы

строчки вот этой вот матрицы то есть при умножении вектора признаков на обед у нас получится 0 мы сократим это и получится предсказание второй модели то есть при любом c вот такая модель будет давать тот же ответ что и вот такая это очень плохо потому что цель бы можно выбрать сколь угодно большим это означает что модель с весами триллионы миллиарды будет выдавать точно такие же ответы как и модель с весами от 0 до 10 почему это плохо ну потому что все методы которые мы до этого использовали

с весами от 0 до 10 почему это плохо ну потому что все методы которые мы до этого использовали они никак не учитывают модель весов то есть они не говорят они не знают что большие веса это плохо и поэтому может так получиться что вместо вот этих вот весов от нуля до десяти мы получим ответ с весами порядка миллиардов ну и понятно что в такой модели вообще никакой стабильности не будет и она на реальных данных будет предсказывать абсолютно бесполезные вещи поэтому нам нужно добавить как-то в

реальных данных будет предсказывать абсолютно бесполезные вещи поэтому нам нужно добавить как-то в алгоритмы которые мы используем вот это знание о том что веса вообще по модулю не должны быть большими ну и самое простое это сделать в случае когда мы используем минимизации эмпирического риска и градиентный спуск мы можем добавить просто к нашей функции потерь квадраты весов или модель весов ну и конечно мы не просто их добавляем а умножаем на какую-то константу бета чем вот эта константа бета

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

ну и давайте в качестве бонуса напишем обновленные градиенты для случая 2 регуляризации и для случая или дин регуляризации почему этот метод вообще называется white детей дело в том что с каждым шагом наши веса как бы будут немножко уменьшаться и только потом к ним будет применяться вот этот вот градиентный шаг и поэтому чем больше шагов мы делаем тем они будут меньше

ну и последнее о чем я хочу поговорить это нормализация признак что такой нормализация вы это уже видели в самом первом семинаре это такое преобразование нашего data set а когда мы берем какую-то в жидкую жидкий признак и из всех элементов в этой колонке вычитаем среднее и делим на стандартные отклонения же этого признака зачем это вообще нужно ну дело в том что газетный спуск вообще очень многие другие методы плохо работает когда у наших признаков разный масштаб ну вы понимаете что если мы

другие методы плохо работает когда у наших признаков разный масштаб ну вы понимаете что если мы вычтем средняя и поделим на стандартное отклонение то в итоге в во всех колонках среднее будет равно нулю и стандартное отклонение будет одной единицы то есть по сути наши признаки получит одинаковый масштаб и газетный спуск в таком случае работает намного лучше потому что без этого могут произойти разные неприятные штуки со взрывами градиентов или слишком маленькими градиентами есть маш ограничения

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

и умножим какую-то колонку значение в жидком признаки на стол то чтобы получить получить такую же модель нам нужно просто выделить и вес о mega jack на стол и тогда модель будет делать абсолютно тоже самое но при этом ну и поэтому если у нас признаки имеют разные масштабы то и у весов будут очень разные масштабы может получиться так что один из весов порядка тысяч а другой порядка 10 и тогда регуляризация когда мы складываем квадрат и этих весов будет намного сильнее наказывать модель за 1 вес

когда мы складываем квадрат и этих весов будет намного сильнее наказывать модель за 1 вес чем за 2 ну потому что первый просто порядка тысяч вот и это очень не хорошо регуляризация будет почти что не работать ну и в третьих очень удобно то что в линейных моделях мы можем посмотреть на весах и на самом деле если мы от нормируемой she признаки то чем больше вес тем он важнее тем он больше влияет на предсказание нашей модели если же этого не делась та на наши веса будет еще будут еще влиять

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

вторая лекция надеюсь вы придете на третью на ней мы поговорим про деревья про бусинка про разные композиции алгоритмов и на семинаре песен мы поговорим про то как вообще делать хорошие машинное обучение и как выбирать модели создаете спасибо

всем привет меня зовут артем лимузинов и сегодня мы поговорим о или менее логистической регрессии а также о методов оптимизации и легализации наш семинар будет состоять из двух частей в 1 мы поговорим о линейных моделях и о том как их обучать пигментными пятнами а во второй части мы более подробно остановимся на их регуляризации и посмотрим на практический пример обучение линейной модели итак давайте начинать для начала вспомним что такое линейной регрессии пусть у нас есть x1 и x2 и так далее

начинать для начала вспомним что такое линейной регрессии пусть у нас есть x1 и x2 и так далее цска это какой-то набор чисел который называется признаком описание объекта мы хотим по этому признаку вам у описанию предсказывать целевую переменную user or get или лейбл игры в рамках и линейной регрессии мы предполагаем что между x1 и гриппом существует линейная зависимость y имеет вот такой вид у нас все наши x и берутся с некоторыми весами и мы добавляем свободный член ничего злой боясь также

нас все наши x и берутся с некоторыми весами и мы добавляем свободный член ничего злой боясь также это можно переписать в более удобном виде если мы к нашим признаком добавим еще один константный и сократ признак равной мизинец и тогда можно записать имеющиеся на сражение просто через скалярное произведение это были скалярное произведение вектора весов на гектар признаков а также это можно записать матричной форме в случае когда у нас есть м объектов и к признаков нас получится следующее

записать матричной форме в случае когда у нас есть м объектов и к признаков нас получится следующее выражение для y это столбец размер ocean x это матрица размера однако то есть честного объектов на число признаков и w это вектор лесу при обучении мы будем пользоваться вот такой функцией потерь то есть это среднеквадратичное отклонение нашего предсказания от истинного значения игрека его можно переписать еще используем знаки суммы и выразить через леса от этой функции потерь можно считать

переписать еще используем знаки суммы и выразить через леса от этой функции потерь можно считать производная и таким образом аналитически подсчитать при каких лесах и каком секторе весов у данного выражение будет минимум аналитическое решение имеет вот такой вид x транспонированное на x от всего этого берется обратная матрице многих санкционированный на и а давайте попробуем реализовать класса линейной регрессии с помощью этой формулы мы будем придерживаться того же интерфейс и класса который

регрессии с помощью этой формулы мы будем придерживаться того же интерфейс и класса который используется для линейной регрессии вас колян а то есть конструктор класса мы передаём параметр fit fit intercept а он отвечает за то а добавляем ли мы б с нашей модели или нет то есть если ты thunder сердце то в этом выражении у нас b это может быть какой-то ненулевое число если feed me by спектральный falls the этого был нас просто нет ну b равна нулю получается а далее у нас есть метод fit который

falls the этого был нас просто нет ну b равна нулю получается а далее у нас есть метод fit который принимает на вход матрицу объектов и вектор торги если у нас равна 3 то есть если мы хотим обучить боец свободный член то мы как мы обсуждали ранее добавляем к признакам описание нашего объекта девочку и далее используя аналитическую формула просто вычисляем получившийся вектор весов а другой метод который нам понадобится это не тот предел он делает следующее он принимает на вход матрицу объектов

который нам понадобится это не тот предел он делает следующее он принимает на вход матрицу объектов и возвращает вектор предсказаниями этих объектов а тут мы проделаем след то же самое добавим единички если интер сартра и дальше в соответствии с нашей формовой вот этой формулой а мы вычисляем предсказании ну и для того чтобы смотреть на то какие без а вообще получили с модели давайте просто добавим нет гейтс выборы простор замечает не закрылся а давайте сгенерируем сначала искусственные данные

нет гейтс выборы простор замечает не закрылся а давайте сгенерируем сначала искусственные данные мы предполагаем что действительно зависимость у нас это 5c лучше игроками 5 xr6 но измире ruim какие fixed и игреки возьмем как наше выражение плюс какой-то шум для того чтобы у нас объект или на ленина одной прямой немножечко от появится далее мы будем работать с обучающей вид с тобой выборкой а поэтому мы пользуемся функций train to speed изысканный она делит наш x y на обучающую выборку тут

поэтому мы пользуемся функций train to speed изысканный она делит наш x y на обучающую выборку тут строение детей и тестовый выбрать от рейнса из параметр отвечает за то в каком отношении будет делиться на тренинге теста есть в нашем случае провинций среда 05 значит 50 процентов пойдет train здесь отпраздновав тест давайте посмотрим что мы сгенерировали и нанесем точки на график ну вот у нас получился такой набор оранжевые точки этот тест 7 the train а прямая это наша истинная зависимость

получился такой набор оранжевые точки этот тест 7 the train а прямая это наша истинная зависимость давайте предскажет результаты начала обучая модель потом поскольку результаты а что тут стоит отметить что мы заводим класс регрессора и когда мы передаем здесь мы передаем не просто экстрен а меня имаго размерность потому что как мы помним размерность матрицы x это число объектов на числа признаков а у нас число объектов это какой то м получается 25 потому что на 150 полам а число признаков 1

а у нас число объектов это какой то м получается 25 потому что на 150 полам а число признаков 1 единица но из того как мы генерировали наш сад и все это у нас просто вектор из чисел поэтому нам нужно добавить вторую размерность это делается с помощью нам понять теперь после этого то же самое мы проделаем с тест и помощью не предупредив строим предсказание давайте посмотрим на весах которые у нас получились то есть как выполните нас истинно зависимость было 5x плюс 60 веса у нас несколько

у нас получились то есть как выполните нас истинно зависимость было 5x плюс 60 веса у нас несколько отклоняются от истиный зависимости на в целом они достаточно близки давайте посмотрим как это выглядит . ну вот у нас есть две прямые первая прямая это реальная зависимость которые вы уже видели и красная прямая это так что предсказал наш класс также тут можно посмотреть отдельно на предсказание на трения тесте давайте сравним теперь наш реализацию с реализацией из сталин в и скалярно есть

на трения тесте давайте сравним теперь наш реализацию с реализацией из сталин в и скалярно есть классные не спеша который как я уже говорил ранее он имеет такой же интерфейс к тот лаз патроны написали поэтому простую про делаем примерно то же самое как можно заметить зависимости оказались очень близки по этому они и даже совпадают на получившемся графика пунктирной линией практически совпадают значит мы все сделали правильно однако визуальный анализ не всегда эффективный метод чтобы оценить

значит мы все сделали правильно однако визуальный анализ не всегда эффективный метод чтобы оценить модель поэтому нам нужно каким-то образом протестировать получившиеся результаты каким-то образом оценить а и в задаче регрессии в качестве оценки используется среднеквадратичная ошибка не устают р а м и р а на неё отсчет реализован в спину . nitrix по сути что это такое мы смотрим на расстоянии от истинного игрека до предсказанного нами не вкладывая стояние просто y истинно минус y предсказан и

истинного игрека до предсказанного нами не вкладывая стояние просто y истинно минус y предсказан и возводим его в квадрат и усредняем таким образом давайте посмотрим но у нас получились на 3 не на тесте примерно одинаковое значение на тесте чуть меньше ну в целом значит не сидел риталин а однако у подхода которым мы пользовались то есть у аналитического решения задач имени регрессии есть два достаточно серьезных недостатка первый недостаток заключается в том что подсчет обратной матрицы он

достаточно серьезных недостатка первый недостаток заключается в том что подсчет обратной матрицы он реализован в нам пая то есть если вернуться потому что мы делали вот нам по их . финал . а это достаточно дорогостоящая операция по времени и поэтому если мы имеем дело с большими матрицами вычислительно это будет очень долго к тому же матрица обратная матрице существует не всегда то есть x транспонированное x может быть вырожденной то есть там могут быть линейно зависимы и строки или столбцы и

x может быть вырожденной то есть там могут быть линейно зависимы и строки или столбцы и тогда обратной матрицы просто не существует и мы не получим решение нашим дедам поэтому как правило для работы с какими-то более серьезными данными а используется численные методы частности нет на презент на вас пуск метод резидентного спускал устроен следующим образом вообще вектор градиента это вектор направленный в сторону на и быстрейшего возрастания функции поэтому если мы возьмем вектор гризманн бы со

в сторону на и быстрейшего возрастания функции поэтому если мы возьмем вектор гризманн бы со знаком минус это так называемый вектор анти президента мы наоборот будем направлены в сторону на и быстрейшего убывания функции а поэтому для того чтобы найти минимум функции потерь мы будем делать следующие а мы будем вычислять градиент в какой-то точке самом начале мы инициализируем ся из какой-то случайной точке как правило а вычисляем градиент получаем направление в котором наши функция убывает

точке как правило а вычисляем градиент получаем направление в котором наши функция убывает быстрее всего и дальше делаем некоторые шаг сторону этого направления этот шаг размер этого шага определяется коэффициентом аж а позже называется lernen клей и далее мы будем повторять эти пункты то есть но уже будем стартовать из той точки которые пришли вычислять градиент для неё и снова делать шаг возникает вопрос а когда мы вообще останавливается тут на самом деле существует несколько подходов в

вопрос а когда мы вообще останавливается тут на самом деле существует несколько подходов в качестве примеров можно привести два следующих первый это мы просто ограничиваем число итераций то есть мы говорим что вот процедура градиентного спуска запускается там на 100 итераций не вот да . в которую мы пришли на 100 операции то и будет ответ а второй подход заключается в том что мы сравниваем полученную точку с предыдущей а в чем суть поскольку из математики известно что в точке локального

полученную точку с предыдущей а в чем суть поскольку из математики известно что в точке локального минимума президент равен нулю а наша функция потеряно отладка то около нашего милого президент будет очень маленький по модулю и поэтому чем ближе мы будем приближаться к минимуму тем меньше друг от друга будут отличаться результаты получены на 1 и n + 1 итерации и в какой то момент мы можем сказать что вот все у нас наши точка минимума почти не меняется значит пора остановиться ну и еще также

что вот все у нас наши точка минимума почти не меняется значит пора остановиться ну и еще также можно скомбинировать эти методы то есть или у нас число итераций превысила предельно допустимые или мыс нас метод сошелся разница между вибрациями сломать маленький давайте применим метод градиентного спуска к нашей задаче регрессии мы минимизируем среднеквадратичная по меня и это для этой функции можно почитать градиент аналитическим методом он будет иметь следующий вид а давайте заведем новый класс

почитать градиент аналитическим методом он будет иметь следующий вид а давайте заведем новый класс это платье с таким же интерфейсом как тот класс который мы делали ранее однако в методе fit помимо и пса эврика мы также будем передавать два новых параметра ливней great то есть размер шага с которым мы будем шагать в сторону анти брезента и макс кетер это максимальное количество итераций начале мы инициализируем веса случайно затем считаем градиентом просто по формуле которую мы вывели ранее и

инициализируем веса случайно затем считаем градиентом просто по формуле которую мы вывели ранее и обновляем леса нашей модели вычитая из нее лёрн грейт умноженный на градиент давайте подсчитаем что получилось на bluetooth эти говорим и снова снова снова графики а ну мы видим результат получился довольно похожи то есть в итоге наш президент ный спуск сошелся тому же результату который мы получили из теоретической футбол а но стоит также посмотреть как вообще менялась наши функции по себе наш

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

тоже есть недостаток недостаток заключается в том что по сути для того чтобы почитать где ент мы должны обрабатывать верили всю имеющуюся у нас выборку а выборки могут быть очень большого размера иногда они могут просто даже не меньше они вмещаться оперативно для того чтобы модель обучалась быстрее чтобы мы не тратили много вычислительных ресурсов на подсчеты президентов придумаем не следующая так называемый стохастический резидентный способ а мы считаем градиент не по всей выборки которые у

так называемый стохастический резидентный способ а мы считаем градиент не по всей выборки которые у нас имеется a simpler а им какую-то под выборку из-за имеющиеся нас выборки другой мне не batch и градиент считаем только по нему таким образом мы уменьшаем размер по которой мы считаем градиент и вычисление производится быстрее а то есть с точки зрения реализации мы делаем следующее мы с помощью рэндом часть выбираем из имеющиеся у нас выборки and sample метров ну и дальше что отставку а давайте

часть выбираем из имеющиеся у нас выборки and sample метров ну и дальше что отставку а давайте посмотрим какие у результат нас получились как мы видим почти такие на но даже студенты книга но и интереснее тут посмотреть на то как меняется лосс во время обучения как мы видим у нас уже не так монотонно меняется функция потерь даже вот на каких-то участках она то ли не убывает то ли вы дали чуть-чуть возрастает чем это связано а это связано с тем что мы считаем градиент не по всей выборки и

возрастает чем это связано а это связано с тем что мы считаем градиент не по всей выборки и поэтому если вдруг у нас случиться так что в нашу под выборку попадает какие-то выбросы или такие далеко стоящие точки они будут очень сильно влиять на объекта градиента и он будет направлен не в сторону локального минимума а я немножечко дальше от него немного в стране и поэтому иногда мы будем делать шаги не совсем в нужную нам сторону и лосс будет расти или падать его медленно но в целом как мы видим

не совсем в нужную нам сторону и лосс будет расти или падать его медленно но в целом как мы видим в общем за 100 итерации и метод сходит с такому же значению как обычно вернет а на самом деле вот это устойчивость сходимости она очень сильно зависит от параметра and samples то есть от размерами него ча которые мы делаем чем он меньше тем больше мы будем отклоняться от монотонные сходимости давайте посмотрим на график то есть вот как вы видите небось у нас размера 1 у нас график довольно сильно

посмотрим на график то есть вот как вы видите небось у нас размера 1 у нас график довольно сильно скачет и при этом поначалу он сходится медленнее и не батч размера 2 гораздо более стабильный и небольшой размер 4 выглядит более гладко чем 12 но стоит заметить что по прошествии большого количества итераций в итоге все они так или иначе сошлись примерно одному и тому же значению но на самом деле что можно сделать еще никто не обязывает нас делать или рный фрейд констант как я уже говорил ранее

что можно сделать еще никто не обязывает нас делать или рный фрейд констант как я уже говорил ранее ингредиенты около минимума будут маленькими поэтому имеет смысл также на самом деле не только президентом дело а когда мы оказываемся рядом с минимумом если у нас достаточно большой лёрн грейт есть вероятность того что вот даже это проще будет показать на графике есть вероятность того что мы сделаем шаг и просто перескочим через этот минимум и окажемся с другой стороны от него память поэтому

шаг и просто перескочим через этот минимум и окажемся с другой стороны от него память поэтому имеет смысл когда мы достигаем определенного этапа уменьшать learning ли это так называемый адаптивный верным тэйт но об этом мы будем говорить не сегодня давайте переходить к следующей теме нашего сегодняшнего занятия а именно к логистической регрессии а так мы помним в мире регрессии мы хотели предсказать значение целевой переменной y и не о значении было просто каким-то произвольным действительным

значение целевой переменной y и не о значении было просто каким-то произвольным действительным числам но помимо dota черри прессе нас так же существует и и задачи классификации то есть когда мы хотим разделить имеющиеся у нас данные на два или более класса а и на самом деле если мы немножечко поменяем линейную регрессию мы можем добиться решение этой задачи что мы будем делать вместо того чтобы предсказывать действительные числа мы будем предсказывать числа из отрезка 01 и эти числа будем

предсказывать действительные числа мы будем предсказывать числа из отрезка 01 и эти числа будем интерпретировать как вероятность принадлежности классу а для того чтобы перевести действительно прямую в отрезать 01 мы воспользуемся следующие функции мизинца делить на 1 плюс я степени минус x а эта функция выглядит следующим образом она на минус бесконечности выходит 0 плюс бесконечности медяница 0 равна 1 2 и к выходам наше линейной регрессии мы будем применять эту функцию и получившееся число

0 равна 1 2 и к выходам наше линейной регрессии мы будем применять эту функцию и получившееся число интерпретировать как вероятность того что объект принадлежит классу 1 мы рассматриваем сейчас бинарную классификацию то есть у нас есть класс но и plaza не когда у нас модифицируется и функция потерь она будет следующим образом и она называется волос давайте посмотрим на неё график тут у нас приведены два случая 1 когда y принадлежит классу 0 2 когда y принадлежит классу они а как мы имеем здесь

два случая 1 когда y принадлежит классу 0 2 когда y принадлежит классу они а как мы имеем здесь это по сути тот же самое что здесь не звала себе пред это вероятность надежности классу 1 а то есть как мы видим что если мы с большой уверенностью классифицируем одет неправильно то вас она становится большим а если мы с большой уверенностью классифицирована как правильно нос у нас маленькой b-class также defense поэтому можно применять пигментный способ здесь можно получить выражение для градиента

defense поэтому можно применять пигментный способ здесь можно получить выражение для градиента это функция теперь давайте реализуем логистическую регрессию с градиентным способом для этого заведем функцию логит а ланит по сути это просто обычная линейной регрессии мы умножаем на вектор песок на электро пизду под скалярно в остальном отличить относительно обычно линейной регрессии нет то есть метод fit выглядит так же за исключением того что у нас теперь другая функция потерь и я производная

fit выглядит так же за исключением того что у нас теперь другая функция потерь и я производная будет читать следующим образом а однако отличие у нас есть в методе приди у нас может быть до случая 1 когда нам интересны только метки классов 0 или 1 но а так же может быть и другой случай когда нам интересно посмотреть а с какой вероятностью наш классификатор а относит объект к тому или иному классу насколько он уверен в своем при предсказании то есть или это какая-то пограничная . или это прям .

насколько он уверен в своем при предсказании то есть или это какая-то пограничная . или это прям . которая по мнению катары последовательности близко к единице лежит класса 1 а для этого у нас тут нет ты при деткой презиков проба соответственно predict право это мы просто берем матрица признаков скалярную умножаем ее на веса получаем лаги ты и этим лаги там мы применяем наши 7 функция о которой мы говорили ранее о и мы уже говорили что эти выходные мы будем интерпретировать как вероятности а

мы говорили ранее о и мы уже говорили что эти выходные мы будем интерпретировать как вероятности а для того чтобы по получившимся вероятностям сделать вывод о том какому классу принадлежит объект нам необходимо установить них препарат то есть нет predict помимо певцов у нас теперь будет не аренду пришел а этот порог по умолчанию 1 2 то есть если вероятность принадлежностей и plaza один больше 1 2 мы будем относить единицей а иначе к нулю но на самом деле в реальных задачах не все так просто и

2 мы будем относить единицей а иначе к нулю но на самом деле в реальных задачах не все так просто и однозначно потому что в некоторых случаев ну например если мы хотим диагностировать какие-то болезни нам гораздо важнее не пропустить болезнь у больного человека чем чем не обследовать здорового то есть если у нас ноль это здоровой один это больной тут он имеет смысл ставить порог меньше чем на 5 просто по порогу отсекаем соответствии с этим относим у вас ноль или один а о чем еще я не упомянул

просто по порогу отсекаем соответствии с этим относим у вас ноль или один а о чем еще я не упомянул что достаточно важно реализацией когда мы считаем вас а у нас внутри вас и есть знак логарифма как известно логарифм не определён в 0 то есть если у нас я кажется что p равно нулю то питон выдаст нам просто нам чтобы этого избежать когда мы и считаем вероятности мы с помощью нам пойти заменим все имеющиеся у нас ноги на какой это маленькая очень маленькая но положительно сетки число а все имеющий

у нас ноги на какой это маленькая очень маленькая но положительно сетки число а все имеющий связи и цена какое-то число очень близко это просто вычислительная тонкость чтобы у нас босс просто не обратил сильно давайте посмотрим на работу с логистической регрессии для этого сгенерируем выборку из двух классов это можно сделать с помощью функции map blocks из-за на скаляр и а мы blogs он генерирует такие шарообразную группы точек мы задаем координаты в центров задаем дисперсию и задам количество

такие шарообразную группы точек мы задаем координаты в центров задаем дисперсию и задам количество ну и [музыка] отнесем один одну группу точек классу 0 а вторую полосу 1 давайте посмотрим слова сгенерировалась но как мы видим классы достаточно заметно отличаются друг от друга однако в середине они достаточно перемешаны поэтому выборка у нас не является дней гризли мы посмотрим что выдаст логистической регрессии а давайте я о чем и построим вот так играть на этом графике мы видим разделяющую

регрессии а давайте я о чем и построим вот так играть на этом графике мы видим разделяющую прямой но в общем случае это будет разделяющая гипер плоскость которая отделяет вас 0 и 1 ну как мы видим прямая проведена достаточно хорошо большая часть почек отнесена к тому классу которая котором она должна быть отнесена поэтому будем считать что все мы сделали правильно а теперь давайте посмотрим не просто на разделяющую прямую а на то как меняются вероятности для этого мы вместо при дет сделаем

просто на разделяющую прямую а на то как меняются вероятности для этого мы вместо при дет сделаем predict проба и получим вот такой вот такой график то есть мы видим что в левой части у нас со стопроцентной уверенностью классификатор относит класса на правой части класса 1 но вот посередине есть такая полоса в который классификатор не очень уверен в своем предсказание ну и в зависимости от того насколько классы накладываются друг на друга и от вида параметров которые мы передаём модель а эта

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

всем привет мы продолжаем наш семинар посвящен именины моделям и а во второй части нашего семинара мы будем говорить по регуляризации при обучении модели частности витаминов может возникать несколько проблем а первая проблема связана непосредственно с данным иногда бывает такое что обучающая выборка сильно зашумлен а в ней присутствуют какие-то выбросы и эти выбросы могут очень сильно влиять на бис а модели другими словами модель может переобучаться на заземленные данные другая проблема она

бис а модели другими словами модель может переобучаться на заземленные данные другая проблема она специфичная достаточно для дней ных моделей это мультиколлинеарности я напомню что мультимиллионер насти называется такое такая ситуация когда в матрице признаков и столбцы линейно зависит как вы уже наверное знаете из лекции в этом случае задача линейной регрессии имеет бесконечно много решений и в частности на практике это приводит к тому что веса модели могут по модулю неограниченно возрастать

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

а вторая они просто вычислительную очень неудобное и могу приводить к различным ошибкам для того чтобы бороться с двумя перечисленными проблемами был придуман такой метод как регуляризация смысл этого метода заключается в том что чтобы vesa моделей не могли неограниченно расти мы введём какой то штраф за большие леса в случае линейной модели этот штраф может быть реализован 1 одним из трех способов первый способ это или один регуляризация а еще называют масса она учитывает как понятные названия

первый способ это или один регуляризация а еще называют масса она учитывает как понятные названия или один норму весов то есть это сумма модулей песок а l2 регуляризация еще ее называют reach a она учитывает соответственно l2 норм описав то есть сумма квадратов весов им есть еще elastic нет это просто комбинация то есть учитывается как много ли весов такой квадрат и весов только с разными коэффициентами а давайте сгенерируем ту же самую выборку которую мы и генерировали первой части с такой же

а давайте сгенерируем ту же самую выборку которую мы и генерировали первой части с такой же зависимости y равно 5x плюс 6 и на ней протестируем различные методы регуляции начнём мы с того метода который более просто с теоретической точки зрения это риторика или гресия а она реализуется следующим образом 2 функция потерь в масс мы добавляем слагаемое содержащие l2 норму весов сумму квадрат 5 2 нормы то есть сумма квадратов весов и берем это слагаемое с некоторым параметрам linda linda это гипер

то есть сумма квадратов весов и берем это слагаемое с некоторым параметрам linda linda это гипер параметр то есть это не какой-то параметры которые обучаются внутри модели а именно то что мы сами задаем и передаем модель и этот параметр отвечает за степень регуляризации то есть чем больше нам дать им больше штраф за беса модели это можно переписать в более привычном виде через сумма и стоит отметить один важный момент в реальности мы обычно работаем с данными имеющими разный масштаб то есть

один важный момент в реальности мы обычно работаем с данными имеющими разный масштаб то есть может быть такое что в обучающей выборке один признак имеет среднее значение 0 а другой признак имеет среднее значение 100 какие могут возникнуть проблемы если мы будем применять регуляризация таким данным a dessa которые стоят перед признаками в таком случае имеют неодинаковые вклад в результат модели потому что ну если перед весами стоят большие числа они как бы и больший вклад внесут но штрафуем мы

что ну если перед весами стоят большие числа они как бы и больший вклад внесут но штрафуем мы все леса одинаково то есть у нас общий коэффициент ли она для всех поэтому получается что штрафы получаются такими не равноценными то есть несмотря на то что леса имеют разный плат модель штрафуем и все размякла а для того чтобы избежать этой проблемы используется стандартизация на она реализована вас колян это стандарт скейлер класс и он делает следующее для каждого признака он вычитает из него

вас колян это стандарт скейлер класс и он делает следующее для каждого признака он вычитает из него среднее и делит на стандартные отклонения признака то есть на корень из дисперсии это приводит к тому что каждый признак в обучающей выборке будет иметь среднее 0 и дисперсию 1 то есть они будут те стандартизованы всей леса будут имеют примерно одинаковый флаг модель и относительные штрафы за леса будут тоже одинаково а также у перед шри агрессии есть одна интересная особенность это особенность

будут тоже одинаково а также у перед шри агрессии есть одна интересная особенность это особенность связаны с тем как определена функция потерь то есть как мы видим в нашей вас функции нигде нет никакого усреднения по на число объектов то есть не просто суммирую и все и давайте приведем такое эксперимента мы возьмем альфа в с колином альфа это то что мы обозначили заряды и гипер параметры отвечающий за регуляризация возьмем альфу равная измениться и обучаем видео на наших сми равных данных

за регуляризация возьмем альфу равная измениться и обучаем видео на наших сми равных данных однако не просто на наших данных а повторим их на стапель друг на друга при раз вот мы получили какой-то результат а теперь сделаем следующее а теперь уменьшим в три раза коэффициент альфа а и вместе с этим уменьшим имеющаяся выборку то есть возьмем три раза нас так она просто один как мы видим на получили абсолютно такие же веса несмотря на то что мы взяли другой пациент регуляризации а это связано как

абсолютно такие же веса несмотря на то что мы взяли другой пациент регуляризации а это связано как раз-таки стен что у нас в у вас функции нет никакого усреднения то есть стоит учитывать что гипер параметры нужно подбирать ориентируясь на размер имеющихся дам в чем преимущество речь лебесе это в том что у вас функция остается дифференцируемой то есть задачи лишь регрессии по-прежнему имеет аналитическое решение а она имеет следующий вид по сути вы можете заметить что от аналитического решения

решение а она имеет следующий вид по сути вы можете заметить что от аналитического решения обычной задач линейной регрессии она отличается одним слагаем и это слагаемое это лямбда умноженная на единичную матрицу то есть просто лямбды на диагонали и остальные мини диагональные элементы 0 и но если мы модель добавляем свободный член если тут intercept равен true за свободный член мы не штрафуем модель потому что но это было бы как-то странно [музыка] мы просто получим неправильное смещение

модель потому что но это было бы как-то странно [музыка] мы просто получим неправильное смещение моделях и чтобы не оштрафовать нашу модель мы за 0-ем последний коэффициент который как раз таки отвечает за свободный член и получается что у нас в этом случае на диагонали будут селенга и 10 а давайте реализуем аналитическое решение задачи вещь репрессия здесь все совершенно аналогично тому как мы делали с классным майли nearly грешен но за исключением добавочного слагаемого его мы определяем

мы делали с классным майли nearly грешен но за исключением добавочного слагаемого его мы определяем альфа на единичную матрицу и если хит intercept мы просто заменяем последний момент давайте зафиксируем альф равный единице и протестируем имеющиеся у нас решение сравним наше решение с решение с классом речь не столько лет как вы видите assert который у нас был проверяющий что без а близкий друг другу не сработал значит леса отличаются незначительно но и вот собственно леса которое нас

друг другу не сработал значит леса отличаются незначительно но и вот собственно леса которое нас получились как мы помним зависимости на 256 но как видите близко но некоторая ошибку теле существует давайте посмотрим как советуют дубна типографики а но результаты получились в целом похожими на результаты без регуляризации но это потому что у нас нет никакой multiply мерности у нас вообще один признак и потому что особых выбросов шумов в моделям на ступенях но опять же не всегда удобно искать

и потому что особых выбросов шумов в моделям на ступенях но опять же не всегда удобно искать аналитическое решение давайте реализуем стохастические градиентный спуск escada для речке гости у вас у нас по-прежнему дифференцируется вот такой вид имеет президент и здесь уже для того чтобы у нас не было проблем с коэффициентом альфа давайте все таки будем усреднять наш нос по размеру врача который не центрируем из-за нашей выборке ну и посмотрим как это пустая лицо вот так же как в случае с обычным

центрируем из-за нашей выборке ну и посмотрим как это пустая лицо вот так же как в случае с обычным регрессия маме мириам какой-то него через нашей выборке заводим матрицы лям и здесь у нас добавляется деление на and sample это мы обсудили ранее что мы хотим последний наш lose о бачок чтобы не было до того же эффекта с alt и который мы наблюдали видеочат агрессии это мы увеличиваем выборку в три раза и у нас приходится альфа уменьшать и разве что выполнить такой размер то есть мы не хотим чтобы

и у нас приходится альфа уменьшать и разве что выполнить такой размер то есть мы не хотим чтобы от рэнсом полу нас зависла подбирает давайте посмотрим что получилось похож баке еще один график и давайте посмотрим на сходимость наши градиентного спуска но как мы видим наблюдается шероховатости которые есть при статическом рельефным спуске на в целом вас падает и падает достаточно быстро только мда первые 100 итерации почтили а давайте переходить к следующему виду регуляризации это лассо

мда первые 100 итерации почтили а давайте переходить к следующему виду регуляризации это лассо регрессия формула такая же однако здесь уже у нас или один норма вместо либо а то есть вместо сумма квадратов у нас стоит сама модель весов и с этим связаны первая проблема вас регрессия а именно что а модуль вообще не дифференцируемая функция в 0 и поэтому в общем случае аналитическое решение потом увидим найти не получится ну давайте посмотрим на такой же пример с нас таковыми друг на друга тремя

найти не получится ну давайте посмотрим на такой же пример с нас таковыми друг на друга тремя выводами и здесь мы видим что в отличие от причины 7 мы не делим на коэффициент на 3 мы получаем такой же результат это связано как раз-таки с коэффициентом который стоит перед вас функции то есть мы усредняем по размеру выборки наш нос поэтому альфа подбор альфа никоим образом пот размером выборки уже не зависит как я сказал ранее аналитического решения задачи лассо регрессии в общем случае не

уже не зависит как я сказал ранее аналитического решения задачи лассо регрессии в общем случае не находятся а эта задача решается в определенных частных случаев когда там столбцы матрицы x транспонированное x ортогонально например но как правило в реальных данных такое бывает очень и очень редко поэтому давайте переходить к реализации сгд с лассо регрессе потому что здесь тоже есть определенные тонкости нам по-прежнему нужно значения градиента вас функции однако модуль функция не

определенные тонкости нам по-прежнему нужно значения градиента вас функции однако модуль функция не дифференцируема и мы решим эту проблему следующим образом мы просто скажем что пусть она будет дифференцируема и ее производная является функция знаков есть единица на для положительного числа минус 1 для отрицательного 0 до 0 но с точки зрения вычисления такая функция разрывно нуле мы ее немножечко сгладим то есть мы возьмём некий капсула и в пределах от минус x он дает сила заменим нашу функцию

сгладим то есть мы возьмём некий капсула и в пределах от минус x он дает сила заменим нашу функцию или менее то есть у нас получится вместо такой ступеньки прямоугольный чуть-чуть сглаженная линейной функции ступенька в остальном просто реализуем тот же самое избегая только с другой формул ингредиента и протестируем то что у нас получилось ну как мы видим коэффициенты похожи на те которые получились в с calor не но за ними со всеми знаками давайте снова построим график можно заметить что

в с calor не но за ними со всеми знаками давайте снова построим график можно заметить что результат получился лучше чем дырочки 200 сказанное нами прямая ближе к ней но и на обучении мы видим примерно такую же картину то есть фактически элементный способ в целом нос понижается однако в какие-то отдельные моменты из за того что мы смотрим не на всю выбор по долькам такой-то не бачила сможет расти но и заключение темы посвящен регуляризация давайте поговорим подробнее о различиях этих двух

расти но и заключение темы посвящен регуляризация давайте поговорим подробнее о различиях этих двух подходов здесь на этой картинке показан этот что на самом деле а от нашей задачи минимизации функции потерь с wish i was a регрессии мы можем перейти к валентным задача а и для лассо регрессии эквивалентный будет задача минимизации функции потерь которые отмечены здесь красными или псами ну то есть отмеченые линии уровня то есть на этих или псах функция принимает in aqua значок а и мы хотим

есть отмеченые линии уровня то есть на этих или псах функция принимает in aqua значок а и мы хотим минимизировать нету функция потерь при условии что наши леса лежат внутри закрашенного квадрата аналитически это записывается что сумма модулей весов меньше какой-то константа случае речке грязь и все тоже самое только сумма квадратов весов меньше какую-то константу и мы получаем уже что веса должны лежать внутри некоторого круга решением такой задачи будет тот случай когда линии уровня наши

лежать внутри некоторого круга решением такой задачи будет тот случай когда линии уровня наши функции потери коснется либо квадрата либо круг если мы внимательнее посмотрим то можно заметить что в случае лассо регрессия а решение часто будет попадать на углы на вершины нашего квадрата а или вершина соответствует случая когда какой-то из признаков равен нулю то есть из-за вот такой вот отсутствия гладкости из за того что у нас модуль виде принтер и решение часто будет оказываться в углах

гладкости из за того что у нас модуль виде принтер и решение часто будет оказываться в углах вершинах и таким образом проявляется заявление весов то есть на самом деле с помощью лассо регрессии можно отбирать признаки до обучения то есть меняя параметр альфа можно какие-то веса завалить какие-то остались в речке в россии такого нет то есть у нас круг и ситуация в которой мы попадаем в точки соответствующие одному из нулевых весов они гораздо менее вероятные поэтому речь регрессия в отличие от

одному из нулевых весов они гораздо менее вероятные поэтому речь регрессия в отличие от лассо не заверяют леса модели ну и обобщая все ранее сказанное беречь регресс проще считать из-за того что она дифференцируема а она имеет аналитическое решение на лассо и не имеет аналитического решения и считать ее в целом труднее однако ее можно использовать для отбора признаков для заявлению некоторых вкусов а теперь давайте протестируем все о чем мы говорили на реальных данных для этого возьмем такой

а теперь давайте протестируем все о чем мы говорили на реальных данных для этого возьмем такой известный to set он называется ирисы фишером он есть искали функций ладой рис давайте посмотрим что это записать на грузинова pandas как вы видите у нас есть какие-то параметры цветков и есть торги таргет на самом деле тут это 01 либо то есть есть три сорта ирисов и в зависимости от различных параметров мы хотим предсказать какому сорту а давайте посмотрим на то как вообще наши данные выглядят это

мы хотим предсказать какому сорту а давайте посмотрим на то как вообще наши данные выглядят это можно сделать из библиотеки seabourn которая предоставляет большое количество средств для различной визуализации данных и вызовем метод прп при этом будем делить наши данные о таргету давайте посмотрим какой пир плод нас построит то есть вот у нас stargate 01 либо и на диагоналях у нас распределение признака внутри каждого таргета а не диагональные элементы это зависимость одного признака от другого

внутри каждого таргета а не диагональные элементы это зависимость одного признака от другого для каждого танка а как вы можете видеть класс с номером ноль в принципе по каждому признаку линейно отделяется от других а вот про классы 12 такое сказать не получается давайте разделим наши данные на обучающую и тестовую сборку и далее мы хотим сделать следующее а мы хотим применять логистическую регрессию однако у логистической регрессии есть одна важная особенность дело в том что если мы хотим

однако у логистической регрессии есть одна важная особенность дело в том что если мы хотим пользоваться логистической регрессии как правило мы а обязательно должны используем секуляризации с чем это связано а это связано с тем что если у нас будет выбор к в который 2 класса линейно разделила то если мы не будем использовать регуляризация логистическая регрессия хорошо поделят эти классы она проведет разделяющую прямую однако вероятности принадлежности класса будут следующими на одной половине

разделяющую прямую однако вероятности принадлежности класса будут следующими на одной половине будет почти везде 0 on другой половине почти везде один и на самом деле это плохо потому что во-первых мы по вероятности ничего не тогда не сможем сказать о объекте потом близко он расположен разделяющей прямой или нет а во-вторых пограничные объекта у нас будут относиться либо классу 0 де бо plaza 1с со стопроцентной вероятностью и если в идеале мы бы хотели знать о том что модель не уверена в

1с со стопроцентной вероятностью и если в идеале мы бы хотели знать о том что модель не уверена в предсказании этих модель этих объектов то в данном случае мы об этом не узнаем эта проблема решается введением регуляризация регуляризация имеет параметр цвс calor и тут можно задать также параметр отвечающий за то какой тип регуляризация будет использоваться то есть если мы поставим здесь ноль или один у нас никак не будет использоваться это будет 3 дж если вы поставите зеницу то это будет лассо а

у нас никак не будет использоваться это будет 3 дж если вы поставите зеницу то это будет лассо а я поставил 03 то есть это будет пластик на а однако стоит вспомнить что раз мы используем регуляризация то мы должны то есть вести стандартизацию наших данных и это делаете с помощью стандарт кемера но мы не хотим делать несколько вызовов то есть отдельно называется стандарт цели ради потом вызвать и вскоре прессе а потом мы захотим что-то поменять нашей модели снова придется вызывать все по новой

вскоре прессе а потом мы захотим что-то поменять нашей модели снова придется вызывать все по новой мы хотим обернуть это в более красивую и удобную форму и такой функционал предоставляет pipeline с помощью функций play мы можем передать внутрь этой функции а какой-то набор операции который будет исполняться последовательно а то есть в нашем случае мы сначала применяем стандартизация потом применяем логистическую регрессию о pipeline а также есть методы фиды презик стоит отметить что если мы

логистическую регрессию о pipeline а также есть методы фиды презик стоит отметить что если мы хотим все таки пользоваться платить надо мы должны прописать параметр для данной власти теперь давайте применим все то о чем мы говорили на реальных данных в качестве нас это возьмем такой известный посев он называется ирисы фишером вам есть ты скалярно загружаются функции но тайриз давайте загрузим его pandas и посмотрим он вообще из себя на столе у нас есть ряд признаков цветков ириса и мы хотим

его pandas и посмотрим он вообще из себя на столе у нас есть ряд признаков цветков ириса и мы хотим предсказать какому сорту относится то есть у нас есть длинные сантиметров и торги таргет тут принимает значения 0 1 или 2 то есть у нас не бинарная классификация акустика цена 3 класса давайте посмотрим как выглядят наши данные это можно сделать с помощью библиотеки сих пор она предоставляет много способов визуализации данных и воспользоваться этим способом как в вот давайте посмотрим что lpr под

визуализации данных и воспользоваться этим способом как в вот давайте посмотрим что lpr под а на диагоналях у нас представлены распределение признаков и так как мы передавали здесь параметр таргет то мы делим все наши признаки зависимости от орбита она не диагональных элементов этой получившиеся матрицы на у нас зависимость одного признака ход другого и если мы посмотрим на все эти зависимости там мы можем увидеть что класс с номером ноль достаточно хорошо отделяется от всех других то есть по

мы можем увидеть что класс с номером ноль достаточно хорошо отделяется от всех других то есть по сути у нас линию разделим а вот классы 1 и 2 разделяются значительно хуже давайте разделим нашу выборку на время тест и далее мы хотим обучать наши модели получил логистической регрессии однако и логистической регрессии связан а один очень важный момент этот момент заключается в том что при использовании логистической регрессии крайне желательно использовать регуляризация а это связано со следующим

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

если у нас много признаков а по одну сторону вероятность будет равна нулю а по другую сторону вероятность равная единице то есть у нас не будет в доме полосы которую мы видели в предыдущей части внутри которой модель не уверены в своем предсказание а на самом деле это плохо по двум причинам первое что мы по вероятностям обычно можем сказать что-то об объекте то есть насколько он близок к разделяющей диппер плоскости или наоборот это далеко от нее отстоит и достаточно уверенно классифицироваться

диппер плоскости или наоборот это далеко от нее отстоит и достаточно уверенно классифицироваться а второе это то что на пограничные объекты которые будут находиться рядом с этой плоскостью они у вас будут классифицироваться довольно странным образом то есть они будут лежать почти на границе но при этом вниз вероятность один или ноль и это довольно плохо потому что мы хотим знать что пограничный что он мы можем ошибаться me а если мы используем легализацию в логистической регрессии то такой

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

или в данных основаться это запускает два раза можно обернуть наши наш трейлер и нашу модель в так называемый поймай то есть в скале ровне с функциями pipeline и ей на вход передается ряд классов и со скалярным и они применяются к модели последователей моделях данным то есть сначала бы применяться стандарт fever потом в логистике лишь интерфейс и преклони на такой же то есть него есть нет какие то есть ли этот кредит давайте выучим да еще по поводу параметры цеху логистической регрессии

какие то есть ли этот кредит давайте выучим да еще по поводу параметры цеху логистической регрессии параметр c это примерный аналог параметра альфа в рендж и лассо но в отличие от альфы чем c больше тем меньше логистической регрессии штрафует за большие веса то есть c равны дом это штраф на самом деле меньше чем прицельно разницы но тем временем модели нас обучилась него мы посчитали кирасе то есть процент отго данных нами правильно объектов и как мы видим что мы почти везде на тестовой выборке

процент отго данных нами правильно объектов и как мы видим что мы почти везде на тестовой выборке не ошиблись давайте посмотрим на на обучающую теперь давайте посмотрим на тестовые но на тестовый у нас результат немножечко хуже но в целом тоже довольно неплохой а теперь если мы хотим посмотреть на коэффициенты и lenders are логистической регрессии мы просто можем обращаться к имеющимися у нас по плану по индексу то есть ноль это будет обращение хазар скейлера adding логисты при графе и таким

плану по индексу то есть ноль это будет обращение хазар скейлера adding логисты при графе и таким образом мы можем вывести процентное ну и теперь давайте визуализируем получившиеся у нас плоскости поскольку на задаче мультиплаз этой ситуации плоскостей будет несколько не посмотрим как они выглядят но и как можно было сказано лучше всего у нас отделяется класс с номером 0 он обозначен синим а вот 12 они разделяются хуже но в целом все равно довольным пол а на этом наш семинар дошло концу давайте

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

всем привет в этом видео мы с вами узнаем как измерять качество работы в grid машинном обучении а именно речь пойдет о метриках машинного обучения ну давайте сначала приведем какие-нибудь простые примеры например вот при решении задачи классификации мы можем измерить долю правильно предсказанных ответов алгоритма к общему количеству объектов в обучающей выборке эта величина который мы будем называть по-английски реки русски за неимением точного термины в русском языке и это является одной из

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

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

с которой вы строите модель свои особые случаи бывают например в компьютерном зрение и обработки естественного языка ну что же давайте поговорим сначала о метриках задачи классификации кстати говоря может быть и нет никакого смысла придумывать какие-то другие метрики раз у нас есть пресловутые реки руси нет пожалуй уже есть давайте рассмотрим например задачу поиска мошеннических операций в банковской системе мы имеем задачу классификации операции на 2 классов мошеннической операции или нет

системе мы имеем задачу классификации операции на 2 классов мошеннической операции или нет давайте изобразим все операции в строке где 1 это мошеннической операции а0 не мошеннической ну и установит ложим что скажем 10 пациентов всех операций банки мошеннические тогда я могу предложить отличный алгоритм который решает мою задачу с качеством 90 процентов да вы уже догадались это беспечный в кавычках great он то есть он любая операция курт фиц и раз как честно и таким образом добивается нужного

great он то есть он любая операция курт фиц и раз как честно и таким образом добивается нужного качества 90 процентов но при этом он абсолютно бесполезны при этом алгоритм который отбраковывает 30 процентов всех операций в том числе и например все мошеннически естественно больше отвечает нашим целям но при этом его эти руси равна 80 процентов но хорошие мы поняли что одной только эти руси не обойтись в чем же проблема этой метрики но проблема заключается в том что она не специфично к различным

в чем же проблема этой метрики но проблема заключается в том что она не специфично к различным классам задачу и так чтобы придумать что-то получше нам нужно посмотреть на классы по отдельности но давайте нарисуем такую замечательную картинку вся совокупность объектов в нашей выборке разделено на две части слева объекта класса 1 то есть мошеннический транзакции справа класса 0 прочие транзакции хороший транзакции ну и теперь пусть мы построили некоторых классификатор результате результат его

хороший транзакции ну и теперь пусть мы построили некоторых классификатор результате результат его работы визуализируем в круговой областью внутрь области попали объекты которые наш классификатор отнес к первому классу во вне объекты но его у класса у идеального классификатора эта область должна совпадать с левой части изначальном разбиения мы мы видим что наша плоскость разбилась двумя областями на четыре части левой половина круга это объекты которые мы будем называть трубку из труб потому

на четыре части левой половина круга это объекты которые мы будем называть трубку из труб потому что алгоритма них не ошибается и позитив поскольку ответ алгоритм положительный то есть к 1 класс правой половины круга это фол спустив фолз поскольку алгоритм ошибся и тогда по аналогии левой половины вне круга это фолз негатив а правая половина вне круга этот румянцев итак 1 важная метрика которую мы изучим называется при сижу то есть точность она равна проценту объектов первого класса связи тех

мы изучим называется при сижу то есть точность она равна проценту объектов первого класса связи тех которые алгоритм отнес к первому классу либо я на язык нашей задачи сколько процентов из тех операции которые мы нашли действительно мошеннические конечно при прочих равных чем больше эта метрика тем меньше честных операций мы заблокируем что до нас есть хорошо наших новых терминах при хижина вычисляется как отношение труп позитив к труп позитив плюс фолз позитив вторая важная метрика называется

как отношение труп позитив к труп позитив плюс фолз позитив вторая важная метрика называется грекул лота она равна проценту найденных объектов первого класса среди всех объектов 1 класса или места вами сколько процентов в мошеннических операций мы нашли полнота это важнейшая метрика именно для нашей конкретной задачи ведь чем она больше тем меньше мошеннических операций мир опустим наших новых терминах recall вычисляется как отношение true позитив к трупа и стив плюс фолз негатив и так мы нашли

recall вычисляется как отношение true позитив к трупа и стив плюс фолз негатив и так мы нашли две важнейшие метрики для бинарной классификации часто при поиске оптимального алгоритмы делают так фиксирует порог по одной из двух меток ниже которого мы не хотим опускаться и оптимизирует вторую метрику иногда используют комбинацию этих двух метрик который называется f1 мерой она вычисляется по формуле 2 умножить на престиже ну может прикол делить на сумму престижу вкус вику и соответственно

формуле 2 умножить на престиже ну может прикол делить на сумму престижу вкус вику и соответственно возрастает с острым каждый из метрик мы теперь давайте поговорим об еще одной метрики в задачи классификации это метрик классификация называется аббревиатурой рока uk почему именно так сейчас разберемся в отличие от предыдущих меток рока ук работает не спиц казны милый клубе классов а с предсказанным и вероятностями классов ну давайте снова посмотрим на пример мы все еще решаем задачу

предсказанным и вероятностями классов ну давайте снова посмотрим на пример мы все еще решаем задачу классификации банковских операций давайте рассмотрим несколько объектов пусть наш алгоритм например логистическая регрессия для каждого объекта предсказал вероятность того что объекта просто классу 1 давайте упорядочим объекты по убыванию этой самой вероятности ну и теперь посмотрим какие из объектов на самом деле относятся к первому классу ноги и мы видим что наш алгоритм довольно хорошо

объектов на самом деле относятся к первому классу ноги и мы видим что наш алгоритм довольно хорошо справился с нашей задачей но не тяни давай теперь сделаем вот что построим на casio той плоскости некоторую кривую который будет описывать качество работы нашего алгоритма кривая строится следующим образом мы стартуем с точки 0 0 и хотим прийти в точку 11 всего у нас 4 объекта класса 1 поэтому делим отрезок 01 на оси ординат на четыре части также нас шесть объектов по ценой поэтому делим отрезок

отрезок 01 на оси ординат на четыре части также нас шесть объектов по ценой поэтому делим отрезок на оси абсцисс на шесть частей ну теперь давайте идти по нашей выборке сверху вниз и когда мы будем встречать тебя в паз один будем подниматься кривой на 1 деление вверх а при встрече объекта класса 0 будем идти на 1 деление вправо итак у нас получилось вот такая кривая который проходит из точки 0 0 в точку 1 ну и каждой точке этой кривой соответствует нижнему порогу вероятности а течение объектов

в точку 1 ну и каждой точке этой кривой соответствует нижнему порогу вероятности а течение объектов например выделенная . соответствует вероятности 0.6 и имеет координаты 1 6 ты черти это значит что при отнесении всех объектов с вероятностью выше этого порога к классу 1а всех ниже этого порога класс0 доля true позитив к общему количество объектов первого класса возят ровно три четверти а доля фол спасти в общем объекту к общему количеству объектов 0 класса будет равна 1 6 эти величины принято

спасти в общем объекту к общему количеству объектов 0 класса будет равна 1 6 эти величины принято называть соответственно трупа или цифры и фолз пусть и фрейд а кривая которую построили называется рог кривой от английского ресивер от рейтер характеристик и так теперь мы готовы определить метрику урока uk она равна площади фигуры под кривой например для данной кривой она равна 0 целых 875 тысячных ну ясно что случае идеального упорядочивание объектов то есть когда все объекты первый класс имеет

ну ясно что случае идеального упорядочивание объектов то есть когда все объекты первый класс имеет большую вероятность а все объект 0о класса маленькую метрика будет равна единице ну и перед вами вот на примере 3 рок кривые построенные для трех разных моделей решение одно и то же задач классификации 1 кривая соответствует хорошему решению потому что у кого близко к единица сама кривая ну в общем то близко к странам прямоугольник 2 кривая соответствует решению похуже рока у порядка 0 7 но кривая

близко к странам прямоугольник 2 кривая соответствует решению похуже рока у порядка 0 7 но кривая все еще выпукло вверх 3 кривая идет без корзинок к диагонали квадрата и эта рука ук случайного алгоритма который вообще не смотрит на признаки перемешивать объекты между собой такая модель не нашла в данных никаких закономерностей и в этом случае урока ук равно 0 5 ну соответственно если урока ук руб казалось меньше 1 2 то получается что он велит им очень плохой он хуже случайного можно перевернуть

казалось меньше 1 2 то получается что он велит им очень плохой он хуже случайного можно перевернуть его предсказание наоборот и будет лучше ну метрика руках в целом довольно хорошие поскольку на ее значение не влияет баланс классов в отличие от той же реки руси что делает ее одной из самых популярных метрик при решении задач классификации и так с метриками классификации мы закончили напоследок скажу пару слов о метриках задач регрессии простая непрактичную ошибку вы уже знаете это среднее

скажу пару слов о метриках задач регрессии простая непрактичную ошибку вы уже знаете это среднее значение кода так плане нет правильного ответа но английском он называется м с етой с минску р-р также используется метрика моя то есть мин абсурд средняя абсолютная ошибка это соответственно средние значения модуль отклонение от правильного ответа ну есть еще несколько меток сдачи legacy о которых в ссылке в описании к этому видео будет никакой информации и так давайте резюмируем содержание этого

ссылке в описании к этому видео будет никакой информации и так давайте резюмируем содержание этого видео метрика это способ измерения качества работ алгоритмы машинного обучения мы поговорили о метриках классификации таких как престижен recall f1 мера и рока ук а также о метриках регрессии м с и маги существует множество стандартных метрик для различных задач в том числе задач обработки текстов и компьютера зрения ну и в конечном итоге выбор метрики должен конечно же зависеть от цели с которой

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

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

сравним его с целей ритмами машинного обучения которые мы уже изучили во втором видео мы поговорим про композиции алгоритмов а именно пробеге нг striking и busting ну и в третьем видео наконец будем говорить про градиенты busting более подробно а именно мы изучим это обучение градиентного бустинга и преимущества и недостатки бусины ссылки на все видео этой серии будут в описании к этому видео поэтому смотрите и давайте начинать наше первое видео про решающий звери и так ну мы с вами уже изучили

смотрите и давайте начинать наше первое видео про решающий звери и так ну мы с вами уже изучили нашем курсе несколько алгоритмов машинного обучения это например в ближайших соседей это линейные алгоритмы как классификации так регрессии напомню что увидим ближайшего соседа и такое agreed на когда при поиске ответа на данном объекте мы выбираем ближайший объект к данному из обучающей выборке и даем тот же самый ответ который имеется в нашего ближайшего объекта ну и альтернативную мы выбираем к

тот же самый ответ который имеется в нашего ближайшего объекта ну и альтернативную мы выбираем к ближайших соседей нашей нашего объекта и у соединяем значение к тех к ответов которые мы получили от наших соседей усредняем случае регрессии соответственно случае классификация мы устраиваем голосование и тот класс для которого мы получил наибольшее количество голосов он побеждает и к этому классу мы относим объект ну линейного grid мы устроены еще проще мы заводим некоторые веса w1 и w2 и когда ли

относим объект ну линейного grid мы устроены еще проще мы заводим некоторые веса w1 и w2 и когда ли w м и принимаем решение по формуле w1 x1 плюс и так далее дубль военный accent sb где x и это признаки нашего объекта дубль вы это веса наших признаков об итане как свободный член конечно же в жизни мы принимаем решение совсем не так как в этих двух алгоритмах но вернее можно придумать такие ситуации когда мы принимаем решение по другому но вот например представит давайте что мы скажем в банке

когда мы принимаем решение по другому но вот например представит давайте что мы скажем в банке такая жизненный ситуация мы выдаем кредит в банке или наоборот получаем кредит в банке катим по признакам нашего клиента выяснить нужно ли дать его кредит или не нужно иметь кредит ну и вот предлагается такой пример решающего правила если в анкете клиента указан домашний телефон если его зарплата хотя бы 1000 долларов в месяц и если размер кредита меньше трех тысяч долларов то тогда мы выдаем кредит

бы 1000 долларов в месяц и если размер кредита меньше трех тысяч долларов то тогда мы выдаем кредит или вот другой решающий правил тоже на простом естественном языке сформулированные предположим что у нас есть пациент и мы хотим решить делателем операцию для развлечения никакой болезни ну и вот такой решающие правила если возраст пациента хотя бы 60 лет если пациент перенес инфаркт то тогда операцию мы примем решение не делать но это естественно потому что таких пожилых пациентов в пять наших

мы примем решение не делать но это естественно потому что таких пожилых пациентов в пять наших in fact риск осложнений довольно велик ну вот и хочется собственно придумать алгоритм который бы используя такие простые решающие правила сформулированы в целом на естественном языке использовал бы собственно для получения хорошего качества как алгоритм машинного обучения мы вот собственно идея превращается в идею решающего дерево давайте посмотрим на какой пример ишачу дерево вообще если говорить в

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

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

а это значит что мы уже готовы ответить на наш целевой простые готовы предсказать значение целевой переменной по признакам нашего объекта давайте все это очень абстрактно звучит посмотрим наконец пример вот такой пример это пример решающего и дерево для собственно банковского работника он выбирает дать клиенту кредит или нет ну и вот мы видим что здесь в нашем чаще в деве есть низко вершин 1 решила это то куда приходят все клиенты клиент приходит у неё спрашивает какой у него возраст если

решила это то куда приходят все клиенты клиент приходит у неё спрашивает какой у него возраст если отвечает да у него спрашивают имеется ли у него дом он может ли тебя или нет если отвечает да там и сразу вдм кредит это терминальная вершина таким образом то есть лист за поскольку из неё больше ничего не ведет здесь написано решение но если он говорит нет то мы спрашиваем у него про доход мы увидим это доход имеется в 1 доллар но есть вашим про доход если он больше 5000 и что выдаем кредит если

это доход имеется в 1 доллар но есть вашим про доход если он больше 5000 и что выдаем кредит если меньше пяти тысяч что отказываем и это тоже терминальной вершины ну естественно здесь тоже происходит нечто довольно хитрая и и здесь тоже конце концов является неофициальной вершины в каждой из которых у нас есть решение выдать кредит клиенту или нет ну вот так устроены собственно все решающие деревья во всех пришедших из написаны некоторые некоторые правила ты с них ты вопросы на которые нужно

во всех пришедших из написаны некоторые некоторые правила ты с них ты вопросы на которые нужно ответить и в зависимости от ответы мы переходим в одну из в один из потомков данной вишен теперь давайте поговорим немножко про обучение решающего дерева есть у нас есть понимание этого куста н решающие дерево то нам нужно понять как его обучаться давайте мы будем решать задачу классификации на два класса класс и мы назовем 1 и 0 вот предположим что мы уже построили некоторые некоторые кусок нашего

класс и мы назовем 1 и 0 вот предположим что мы уже построили некоторые некоторые кусок нашего решающую дерева и мы хотим его дальше продолжать строить ну давайте выберем произвольную вершину этого дерева на картинки надписи на красном находимся как раз на вершине и давайте посмотрим как ведет себя обучающая выборка вот в каждой вершине у нас здесь написано числа 1 число означает количество объектов первого класса которое дошло до вершин на второе число означает количество объектов 0 класса

первого класса которое дошло до вершин на второе число означает количество объектов 0 класса когда шел до вершины ну и вот здесь стресс на здесь у нас в эту вершину дошло 70 объектов первого класса из 100 и 20 объектов первого класса из 80 ну и вот здесь уже можно заметить что эта вершина на довольно хорошо разбивает нашу обучающую выборку из 180 ременс на две части потому что здесь выборка более-менее сбалансированное здесь 100 на 80 шиндо 100 на 80 объектов ну а здесь у нас 70 объектов на 20

сбалансированное здесь 100 на 80 шиндо 100 на 80 объектов ну а здесь у нас 70 объектов на 20 то есть объекты первого класса здесь большом преимуществе но естественно в ответ завершение объекты 0 класса большом преимуществе соответственно в это вершина она хорошо разбила нашу обучающую быкам этой часть ну вот предположим что мы наконец в красное решение сюда дошло дети вектор 1 класса и один из объектов 0 класс ну давайте их вместе на этой картинке да пока будем читать для простоты что это что

0 класс ну давайте их вместе на этой картинке да пока будем читать для простоты что это что есть у этих данных нет всех этих объектов некоторые признак x и отложим все наши объекты по оси x соответственно по наших ординате у нас находит значение нашего признак то есть вот у нас есть 20 объектов с такими значениями признака наша цель это выбрать некоторый порог разбиение всех этих объектов папа не к тому числу так чтобы у нас появилось две части то есть чтобы чтобы объект разбилась на две части

к тому числу так чтобы у нас появилось две части то есть чтобы чтобы объект разбилась на две части и чтобы как бы чистота наших вершины она увеличивалась то есть здесь наши вершины и чистый в кавычках не является потому что здесь количество объектов в 1 и 0 класса помирать знаковые ну а вот эти вершины не более чистый то есть вот здесь 8 на 5 разбиения здесь избиение 6 на 1 до 61 ну вот соответственно мы проводим границу примерно по их самому 12 и таким образом разбиваем нашедшему две части то

мы проводим границу примерно по их самому 12 и таким образом разбиваем нашедшему две части то есть еще раз формулируем мы находим решающие правила так чтобы те объекты когда дошли до красна вершины хорошо разбивались по классам с помощью этого решающего правила естественного здесь у нас преимущество первого класса здесь у нас получится 2 не нулевой класс ну мы провели кто и где интуицию до того как мы хотели бы проводить разбиение хотели бы выбирать решающие правила понятно что до 100 г

того как мы хотели бы проводить разбиение хотели бы выбирать решающие правила понятно что до 100 г формализации сейчас далеко но это феминизации мы проведем чуть позже а сейчас давайте продолжим рассуждать о нашем решающим дереве и так мы видим что вершины в которые разве я не один на 6 она уже довольно хорошо разбивает нашу обучающую будка на два класса то есть в этой вершине сном присутствуют объекты именно 0 класса не 1 поэтому на самом деле здесь уже мы достигли хорошего качества и дальше

объекты именно 0 класса не 1 поэтому на самом деле здесь уже мы достигли хорошего качества и дальше из этой вершины уже можно не идти то есть можно ее не подразумевать в дальнейшем ну потому что вот это один объект можно считать что это какой-то шумный объект который от разбиения это здание это вершины на части дальше мы не выиграем а только возможно проиграем и там усложним наш решающий дерево избыточно ну вот это вершина стала терминальный у нас также есть несколько пока чинить реальных решил

ну вот это вершина стала терминальный у нас также есть несколько пока чинить реальных решил мы можем выбрать произвольную из них и дальше продолжать находить решающие правила для разбиения эти хорошо то есть мы повторяем то же самое с произвольный из вершин которые у нас остались и таким образом решающий день в строится строится строится в конце концов получается такая довольно сложная конструкция каждый из листовых вершин является терминальной и решение собственно поднимается так мы берем

каждый из листовых вершин является терминальной и решение собственно поднимается так мы берем объект находимся в этой вершине стартовое идем в соответствии с ответы на наши вопросы в конце концов доходит какой-то вершины и скажем вот это решение да и 70 отошли там и естественно принимаем решение о том что наш объект принадлежит нулевому классу а не первому потому что нулевых классов из обучающего объектов 0 класс из обучающей выборке здесь большинство 6 против одного вот мы привели с вами

объектов 0 класс из обучающей выборке здесь большинство 6 против одного вот мы привели с вами алгоритм такой такой внук земли алгоритм естественно обучение решающего дерево давайте теперь немножко поговорим о формализации того как именно мы будем выбирать решающие правил для разбиения это вершина то есть для дальнейшего ветвления ну давайте ведем никто обозначением пускай у нас в это вершина пришло к объектов данном случае кур на 29 плюс 11 и введём вероятность p с индексом куб эта вероятность

к объектов данном случае кур на 29 плюс 11 и введём вероятность p с индексом куб эта вероятность того что в наши в этой вершине мы из из всей совокупности объектов выбрали объект первого класса они 0 то есть это по сути дела доля объектов первого класса 9 идут эти затем после долг мы выбрали предположим что мы уже выбрали никто лежащие правила и развили все уборку поэтому решающим правило но для части скажем здесь оказался 13 объектов из них 8 относится к 1 классу 1 класс то синие объекты

для части скажем здесь оказался 13 объектов из них 8 относится к 1 классу 1 класс то синие объекты естественно мы обозначаем буквой l то есть основу лифт количество объектов здесь и п с индексом l это доли объектов первого класса естественно здесь справа мы обозначаем буквой r количество объектов здесь суммарное количество здесь должен быть конечно же 7 р равно семьи потому что 7 объектов и средств на п.р. это доли объектов 1 классу здесь объектов 1 класса всего один из семи средств на п равно

на п.р. это доли объектов 1 классу здесь объектов 1 класса всего один из семи средств на п равно 1 7 ну и на самом деле вот мы с вами замечаем что 1 7 это очень хорошая вероятность для данной вершины потому что 1 7 это число которая очень близка к нулю если число очень близка к нулю это означает что вершина на самом деле является довольно чистый в том смысле что объекты 1 класса преобладают над объектами другого класса это вершина является значительно менее чистой здесь по или равно 8 13 это

объектами другого класса это вершина является значительно менее чистой здесь по или равно 8 13 это довольно близко к 1 2 естественно это лишь и нам еще нужно будет подразумевать и в идеале мы хотели бы чтобы понять было на самом деле больше потому что мы хотим скорее все чтобы в этой вершине присутствовали слова объекты первого класса средства в данном случае если pay будет без как единица уже то для нас это будет хорошо резюмировать а ситуация можно таким образом если pl или п р близки либо к

для нас это будет хорошо резюмировать а ситуация можно таким образом если pl или п р близки либо к нулю любых единиц это для нас это хорошо если они близки к 1 2 тоби нас то плохо но соответственно мы хотим в этом случае минимизирует некую такую функцию которая зависит от эль q и r где функция h это некоторые функции которой мы сейчас будем подбирать что здесь написано здесь написано доля объектов попавших в левую вершину умножить на некоторых характеристику от нашей вероятностью pl но эта

попавших в левую вершину умножить на некоторых характеристику от нашей вероятностью pl но эта характеристика должна быть тем больше чем ближе число панель находится к 1 2 + доля объектов опавших вправо умножить на ту же самую извести куат числа п р и мы хотим эту штуку минимизировать то есть чем меньше она будет тем нам лучше соответственно нужно подобрать функцию h для того чтобы минимизация вот такой функции такой суммы соответствовало нашей интуиции давайте это сделаем итак мы хотим

вот такой функции такой суммы соответствовало нашей интуиции давайте это сделаем итак мы хотим минимизировать такое выражение мы давайте приведем возможные примеры функция шутку которые реально и используются в решающую деревьях вот например в качестве функция шапку можно использовать функцию энтропии энтропия вычисляется такой формуле аж открыт в минус q логарифму -1 минус тубу логарифм 1 минус q ну в данном случае логарифм имеется ввиду конечно же двоичные по снованию 2 ну давайте посмотрим

q ну в данном случае логарифм имеется ввиду конечно же двоичные по снованию 2 ну давайте посмотрим что происходит или функции в точке например при q равно 1 2 равного 1 2 несложно убедиться что значение функции равно единице соответственно посередине этого графика функции энтропии так красный график значение равно единице ну не сложно также убедиться что в точках 0 и 1 значение энтропии равно нулю здесь и здесь функций обращается в ноль кроме того функции нашего симметрично относительно

нулю здесь и здесь функций обращается в ноль кроме того функции нашего симметрично относительно отражение атаки . 1 2 поэтому она нас устраивает и действительно на маленькое и значение соответствует тому что в вершине у нас разбиения оказалось качественным то есть либо вероятность близко к нулю найти объект первого класса либо вероятность найти y 1 класса близко к единице это соответствует раз таки чистоте преобладание одного из классов в нашей вершине в своей с другим классом но если мы хотим

чистоте преобладание одного из классов в нашей вершине в своей с другим классом но если мы хотим какую-то простую функцию то можно завести вот такой функция шапку равно 4-ку на 1 минус q это называется индекс джини и это функции на самом деле очень похоже на терапию она тоже в точке 1 2 принимает значение единицы а в точках 0 и 1 она принимает значение 0 ну и на самом деле если посмотреть на ее график то мы увидим что график индекса джинни очень похож на график самой и т.п. вот мы на самом деле

то мы увидим что график индекса джинни очень похож на график самой и т.п. вот мы на самом деле все эти графики они создают очень похоже на вот такой график который на самом деле соответствует ошибки классификации возможно щуки классификации в вершине если наши классификация подчиняется тривиального правилу выбирать один из классов в нашей вершине естественно если в вершине преобладает первый класс очень сильно то ошибка классификации у нас будет маленькая если вершине класса примерно одинаковы

очень сильно то ошибка классификации у нас будет маленькая если вершине класса примерно одинаковы одинаковое количество объектов 1 0 глаз и дошли до это вершина то тогда мы не сможем подобрать адекватное решающие правила то есть мы не сможем определить какому из двух классов но совершенно средства на ошибку классификация будет довольно большой а именно будет 1 2 010 весом график ошибки классификации но отмасштабируем так чтобы он был похож на графике яндекс и джинни и and open вот ну

классификации но отмасштабируем так чтобы он был похож на графике яндекс и джинни и and open вот ну соответственно мы и сами привели подходящую функцию для того чтобы минимизировать такой критерий ну и затем мы из всех возможных решающих правил выбираем то решающие правила которые оптимальным образом будет минимизировать вот наши эту величину ну естественно решающие правила можно придумать много какие но мы будем для решающей геев рассматривать столько решающие правила вида некотрые признак x

какие но мы будем для решающей геев рассматривать столько решающие правила вида некотрые признак x это больше или равен некоторые константы то есть все как в в решающем деве с кредитами где мы испрашиваем только вопросы вида верно ли что заплатка больше 5000 верно ли что меньше трех тысяч долларов и так далее ну так же мы конечно же допускаем вопросы вида общем вопросы которые связаны с категориальными признаками дают это тоже не проблема если на скажем признак бинарный если он понимает только

признаками дают это тоже не проблема если на скажем признак бинарный если он понимает только ноль или один там и также можем это представить в виде вопроса верно ли что значение то признака больше 1 2 поэтому здесь мы ничего не теряем если используем только такие простейшие если сколько как простить такие простейшие критерии в каждой вершине хорошо мы конечно не успели с вами поговорить о том как решать эту самую оптимизационной сдачу до поиска оптимального правило избиения в вершине потому что

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

нам поставить пороках кредит больше тысячи долларов или катит больше тысячи пятьсот долларов это вообще говоря не понятно вот новым поскольку у нас есть такой замечательный критерий для минимизации мы просто можем запустить довольно хитро говорит им для собственно минимизации этой величины и подбора оптимального решающие правила данной вершине давайте тогда посмотрим на какой такой например решающего дерево ну вот скажем есть такое знаменитее to set ирисы фишера это один из первых и самых

решающего дерево ну вот скажем есть такое знаменитее to set ирисы фишера это один из первых и самых известных фотосетов которые часто используют статистики в машинном обучении это datasette состоящий из измерений собственно цветов и леса эти цветки ирис могут быть трех сортов и о каждом цветке у нас имеется четыре признака некоторые четыре параметра скажем длина лепестка ширина лепестка и так далее средства у нас есть 3 класса класса называется set as a ver gene к и версия color вот и вот нам

средства у нас есть 3 класса класса называется set as a ver gene к и версия color вот и вот нам необходимо построить лежащие дерево которые используют эти признаки и классифицирует все нашли цветки и леса на эти 3 классу ну и вот можно успеть такое решающие дерево глубины 3 соответственно мы сначала спрашиваем про первый признак длина лепестка верно ли что он меньше двух с половиной если верно то это сразу считался если неверно там и спасший по второй признак то есть пришли на лепестка если она

это сразу считался если неверно там и спасший по второй признак то есть пришли на лепестка если она больше чем один . set 8 то мы идем право вершину и говорил штата виргиния если меньше то идем в еще одну вершину в довершение спрашиваем снова про длину лепестка пропаяли и сына больше чем 5 то мы говорим что это виргинии к если оно меньше чем 5 мы говорим что это versicolor ну и вот можно посмотреть на нашем замечательном графики на визуализации наших точек в данном на плоскости как у нас были

на нашем замечательном графики на визуализации наших точек в данном на плоскости как у нас были проведены решающий поверхности но вот оказывается что если вы в пространстве всего двух признаков из четырех то есть тех призраков которые здесь используется нарисуем нашу картинку то классы разбились очень точно в частности красный класс однозначно абсолютно отделился от всех и классов от желтого и зеленого ну а при классификации желтого и зеленого класса вот на эту часть у дерева у нас всего три

зеленого ну а при классификации желтого и зеленого класса вот на эту часть у дерева у нас всего три ошибки то есть наши носом решающий день вас работал очень хорошо ну и собственно это такая вот общая тенденция о том что решающие деревья какая бы ни была задача но в данном случае сдачи довольно простая но какая бы ни была задача решающий день в целом смогут приблизить почти что любую закономерность по крайней мере если она проявляется только на обучающей убытки вот но собственно это и замечали

по крайней мере если она проявляется только на обучающей убытки вот но собственно это и замечали да когда мы обучали решающие дерево когда мы привели алгоритм обучение мы говорили о том что в принципе можно продолжать ветвление из любой вершины до какого угодно предела и в теории можете представить решающие дерево который бы идеально решала эту задачу и леса фишера без каких-либо ошибок но понятное дело что нам понадобилось бы гораздо большее количество вершин соответственно больше глубина

дело что нам понадобилось бы гораздо большее количество вершин соответственно больше глубина дерево ну и вот оказывается что глубина дерево это тот параметр который мы хотим регулировать чтобы дерево получилось довольно простым чтобы не произошло того самого страшного переобучения которая плохо будет влиять на качество горит моно тестирующей выберут давайте это проиллюстрирую на примере с это игрушка дьявола который я самостоятельно не живу и skoda курса при статского университета спасибо им

дьявола который я самостоятельно не живу и skoda курса при статского университета спасибо им большое за это ну вот эта игрушка диалло представляет собой такие три спирали трех цветов желтого синего и фиолетового наша задача это построить решающие дерево которое бы классифицировал все эти точки на 3 классу желтый классно зеленые классами филе 3 класс давайте посмотрим на два решающих дерево которые мы построили по этому это сету должна треш эти дерево 1 решающих дерево построены для глубины 3 то

мы построили по этому это сету должна треш эти дерево 1 решающих дерево построены для глубины 3 то есть мы ограничиваем искусным образом глубину наших решающие дерево так чтобы она не могла превышать 3 то есть если глубина ты это все мы после этого останавливаю ветвления ну и мы видим что решающий дерево на такой глубине не смогло справиться с нашей задачей потому что вот видите здесь много проблем да здесь много зеленых точек которые мы не смогли классифицировать правильным образом здесь тоже

да здесь много зеленых точек которые мы не смогли классифицировать правильным образом здесь тоже они есть ну и вообще как бы ситуация не идеально спиральную структуру это эта штука слабо напоминает в неком смысле напоминает но все-таки мы хотели бы рассчитывать на более хорошее качество для решения такой задачи ну вот для глубины 7 наше решающие дерево уже получилось лучше потому что она в целом угадал вас правильно структуру да лучше чем в предыдущем случае но и ошибок на обучающей выборке нас

вас правильно структуру да лучше чем в предыдущем случае но и ошибок на обучающей выборке нас меньше вопрос правда стоит о том что будет нас на тесты и выборки но это уже а просто 7 другой но до глубины 12 выпуском такой решающий деле это мы видим что здесь уже очень много в капле ней различных цветов и нас это не устраивает потому что мы видим что как бы разделяющей приятности получили слишком сложные и эти разделяющие поверхности уже не имеют никакого отношения к реальной и сдачи игрушка

сложные и эти разделяющие поверхности уже не имеют никакого отношения к реальной и сдачи игрушка дьявола они просто получились такими потому что обучающий уборка обучающей выборке из такие точки которые так шумно устроены что разделяющая снасть получился вот такой то есть мы заключаем что дерево у нас получилось до глубины 12 слишком сложная и поэтому это дерево будет очевидно хуже работать на тестовой выборке если мы и подсунем чем деревья глубины 7 и глубины 3 то есть мы видим что в обучении

выборке если мы и подсунем чем деревья глубины 7 и глубины 3 то есть мы видим что в обучении при обучении решающего дерево нам важно чтобы глубина она такая была оптимальность чтобы она была не сильно маленькая чтобы мы смогли его ловить что закономерность с другой стороны должна быть не сильно большая чтобы не перри обучиться чтобы не допустить переобучение кроме того у решающего дерева есть и другие параметры которые можно оптимизировать чтобы получить оптимальное качество это например

и другие параметры которые можно оптимизировать чтобы получить оптимальное качество это например критерии ветвление про которые мы говорили уже когда разбирали обучение решающего дерево это может быть крита реджине или entropy иные критерии зависимости от той формулы которые мы используем для функции охотку это опять же максимальная глубина про который мы поговорим на предыдущем слайде также можно контролировать минимальный размер листа то есть например не допускать чтобы в листу подала слишком

контролировать минимальный размер листа то есть например не допускать чтобы в листу подала слишком мало объектов из обучающей выборке есть у нас есть лист которым севан один объект то наверно нам такой лист не нужен потому что это встретить столько переобучение данном случае потому что выборка которая попала в этот лист она не репрезентативность в один элемент ну и также можно варьировать стратегию сплита то есть именно тот самый алгоритм который мы будем использовать для выбора оптимальной

сплита то есть именно тот самый алгоритм который мы будем использовать для выбора оптимальной стратегии сплита но про параметры лежащего дерева и вы можете более подробно почитать в документации с колес эта документация будет доступна в семинаре соответствующим это лекции ну хорошо теперь давайте немножко поговорим про решающий день в древесины до этого обсуждали только дерево для классификации но представим что у нас есть некоторые числовой не книг 3 чистовая целевая перемены часовой таргет ну

представим что у нас есть некоторые числовой не книг 3 чистовая целевая перемены часовой таргет ну и вот в данном случае у нас есть одномерные данные которые расположены по оси x и цель его я переменной у нас расположены по оси y и вот мы видим что наша наша зависимость от такой зашумленным синуса и синус но некой точке как бы выбросились в у нас есть довольно большое количество шума в этой задаче такие точки какие такие такие так далее ну и вот если мы построим два решающих дерево 1 решающие

такие точки какие такие такие так далее ну и вот если мы построим два решающих дерево 1 решающие дерево для максимальной глубины 2 кстати естественно что в решающем дерево для сдачи регрессии вершине в отличие от классификации будет немецкая одного из классов а просто действительное число которое мы собственно будем выдавать в качестве ответа для нашего алгоритма вот так вот для максимальной глубины 2 у нас эта зелёная кривая получилось довольно плохой у нас синус довольно слабы и приближается

2 у нас эта зелёная кривая получилось довольно плохой у нас синус довольно слабы и приближается но соответственно для максимальной глубины 5 мы видим что у нас получилось все еще хуже то есть сину свадьбы как у приближается но а проблема в том что у нас эти выбросы они очень сильно повлияли в негативном смысле на работу нашего решающую дерево решающий дерево получилось нестабильным но соответственно мы видим что например они нами люстрируют что решающие дерево для сдачи ли весе это в неком

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

числом решающие дерево тоже вполне возможно хоть и не очень хорошо работает как мы убедились в этом примере итак давайте резюмируем содержание этого видео у решающего дерева есть ряд преимуществ это простая идея естественная и просто вы где-то обучения решающие дерево довольно легко интерпретировать мы с вами это несколько раз сделали для например для сдачи и леса фишера для сдачи кредитного скоринга у решающий деревьев возможно регуляризация скажем можно в при выборе критерии добавлять условия

у решающий деревьев возможно регуляризация скажем можно в при выборе критерии добавлять условия на то что на мне не хочется платить слишком большое количество вершин нам не хочется делать слишком большую глубину дерево нам хочется ограничивать количество объектов из обучающей облика которые попали вершину все это в некотором смысле регули за ционные параметры которые позволяют ограничить при обучении нашего решающую дерево кроме того в решающем 9 дерево очень легко обрабатывать пропущенные

обучении нашего решающую дерево кроме того в решающем 9 дерево очень легко обрабатывать пропущенные значения ну как-то делать если мы попали какую-то вершину которая спрашивать нас пока это признак x при этом для нашего объекта этот признак x неизвестен то есть там стоит ли банан либо ну да есть там стоит нам по сути дела если значение признака неизвестного это в для этого объекта то мы можем просто пойти в произвольную из двух веток например ту ветку куда уходит большинство объектов из нашей

пойти в произвольную из двух веток например ту ветку куда уходит большинство объектов из нашей обучающей выборке ну решающие у дерева есть несколько недостатков по которым мы тоже поговорили а на склонах переобучению если неправильно заходить винить параметры ближайшего дерева регрессии она вообще очень плохо работает не решающую дерево нестабильно она сильно меняется зависимости от параметров и зависимости от содержания нашей обучающей выборке спасибо за внимание в следующем видео мы с вами

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

дорогие друзья еще раз всем привет мы продолжаем нашу серию видео про композиции алгоритмов решающие деревья это второе видео серии она посвящена собственно композициям алгоритмов предыдущие видео серии про решающий деревья ссылку него можете добыть в описании к видео но если видео серии про газеты boosting ссылку него также есть в описании и так появится алгоритмов ну что ж мы с вами уже прошли много битов машинное обучение это метод ближайших соседей это мини алгоритмы это решающий деревья про

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

плохой алгоритму на практике не используется поскольку для адекватного использования необходимо хранить в памяти все обучающую выборку линейный алгоритм и они плохи тем что они не могут устанавливать слишком сложной зависимости на решающие дерево оно плохо тем что у нас к сельскому серию склонна переобучению и поэтому на практике тоже используется довольно редко но правда ли не использовать на практике в том случае если обучающие данных малой нам необходимо получить тем не менее хороший

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

алгоритм парочку решаешь деревьев как ты скомбинировать и получить на основе комбинации один более мощный алгоритм который бы хорошо решал бой более качество решал задачу чем эти алгоритмы по отдельности ну вот таким образом мы приходим к идея композиции алгоритмов машинного обучения и собст это видео посвящено подробному разбору этой идеи у которой есть несколько реализации который мы все обсудим но сначала приведем некоторые об основании до того что композиция гриф это разумная идея вот есть

но сначала приведем некоторые об основании до того что композиция гриф это разумная идея вот есть такой известный широко известный в узких кругах принцип кондорсе который гласит о том что гласит что если вероятность правильного решения члены жюри присяжного больше чем 1 2 то тогда чем больше присяжных тем с большей вероятностью окончательные решения виновности обвиняемого будет принято проведу то есть чем больше присяжных тем более надежную судейской коллегии присяжных но если я вероятность

то есть чем больше присяжных тем более надежную судейской коллегии присяжных но если я вероятность принятия решения меньше 1 2 то до каждого присяжного по отдельности то естественно и вместе они тоже скорее всего примут неправильные решения и чем больше количество присяжных тем больше быть вероятность того что решение будет неправильно ну вот хорошим аналогом принцип кондорсе для сдачи регрессе является эксперимент фрэнсиса гальтона кальтер это был такой британские ученые он вообще был довольно

эксперимент фрэнсиса гальтона кальтер это был такой британские ученые он вообще был довольно разносторонним человеком но нам он в первую очередь интересен как статистик он повел как-то раз такой эксперимент он привел на ярмарку bk который весил 1198 фунтов но такая байка которая возможно не имеет большого нас уникальности но тем не менее и традиционно рассказывать этом месте когда говорят про композиций алгоритмов и так он предложил этого быка на глаз измерить всем всем людям которые были

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

оказалось равным 1197 фунтов то есть это результат крайне близкий к собственно к правильному ответу таким образом гайтан продемонстрирую как бы силу толпы о том что сказал о том что толпа способна нас вот эту коллективного разума принимать более верное решение чем каждый участник и толпы по отдельности это визуализация это принцип голосование для сдачи регрессию где мои ответы просто усредняем таким образом у нас есть наш замечательный вид просто в голосовании который мы сейчас разобран пример

образом у нас есть наш замечательный вид просто в голосовании который мы сейчас разобран пример ну формально он описывается так предположим что у нас есть некоторые задачи мужчину обучение неважно классификации и регрессии мы обучили для этой задачи несколько алгоритмов скажем n алгоритмов машинного обучения тогда в случае классификации мы если нам поступил объект x мы устраиваем среди этих алгоритмов голосования и относим это объект к тому классу за который проголосовало большинство из наших

голосования и относим это объект к тому классу за который проголосовало большинство из наших обычных алгоритмов а1 а2 и так далее а я естественно случае регрессе мы берем все ответы наших алгоритмов нам нужно предсказать действительное число и в качестве 10-го числа как при предсказании bk мы усредняем свете значение 12 и так далее то есть наш вид является средним арифметическим всех предсказаний алгоритма ну вот этот место называется мест на простого голосования и собственно на основе этого

алгоритма ну вот этот место называется мест на простого голосования и собственно на основе этого метода мы устроим первую первую разновидность композиция горит в который мы изучим но перед этим нам нужно обсудить что такое bootstrap bootstrap это такое общем такой способ генерации новых выборок которые к нам пришел из статистики из классической статистики о bootstrap он устроен следующим образом предположим что у нас есть никто изначально выборка в которые спектра элементы нам необходимо

предположим что у нас есть никто изначально выборка в которые спектра элементы нам необходимо сгенерировать несколько новых выборах для того чтобы на этих уроках которые будут уже между собой различными обучать по отдельности алгоритм машинного обучения но самом деле если мы один и тот же алгоритм машину обучения будем обучать на одной и той же выборки то тогда от этого ничего путного не выйдет потому что каждый из этих алгоритмов будет просто работать одним и тем же образом становится не для

потому что каждый из этих алгоритмов будет просто работать одним и тем же образом становится не для того чтобы нам получить качественную композицию угрюмов необходимо как-то модифицировать нашу обучающую выборку и вот как раз будет стрэп нам помогает сделать это без потери информации о нашей обучающей уборки и так и должен что вас есть некая выборка тогда мы можем сформировать выборку какого-то фиксированного размера скажем здесь у нас сколько есть элементов 1112 и здесь у нас 8 моментов мы

фиксированного размера скажем здесь у нас сколько есть элементов 1112 и здесь у нас 8 моментов мы хотим сгенерить уборку размера 8 как то сделать но вот скажем мы мы бы просто будем по очереди генерировать каждый из элементов нашей выборке взглянет ролик осенние потому и фиолетовая нам slows где-нибудь фиолетовый стол зги не видно фиолетовый вот и здесь мы видим что клятвы здесь вот изначально выборки 2 всего элементы этих может быть вполне 3 все значит что на самом деле элементы при генерации

2 всего элементы этих может быть вполне 3 все значит что на самом деле элементы при генерации могут повторяться то есть нам ничто не запрещает за еще раз генерировать тот же самый элемент 3 разгневаться так далее то есть каждый из элементов этой выборке независимо выбирается из изначально нашей обучающей убытки ну и вот результирующая уборка называется bootstrap най выборкой естественно таким образом мы можем сгенерировать сколько угодно и они все будут между собой и вообще говоря отличаться но

мы можем сгенерировать сколько угодно и они все будут между собой и вообще говоря отличаться но с довольно большой вероятностью ну вот известным результатам из статистики является то что не формально говоря bootstrap это хорошие методы генерации таким образом мы можем из обучающей выборке сгенерировать выборки который по сути ей аналогично но теперь схема такая что вы на каждый из этих обучающих выборок обучаем алгоритм машинного обучения ну например это этим магнитам может быть решающим дерево

обучаем алгоритм машинного обучения ну например это этим магнитам может быть решающим дерево то есть на каждый из этих уборка мы обучаем лишь а еще дерево они естественно будут выглядеть по-разному и тему решающий деревья потому что они обычные на разных выборках ну и следовательно у нас получилось несколько разных алгоритмов каждый из которых является достаточно мощным при этом каждый из них скотник переобучения но при усреднении всех этих алгоритмов скорее всего мы будем получать более

скотник переобучения но при усреднении всех этих алгоритмов скорее всего мы будем получать более качество результат чем от каждого убийства по отдельности ну собственно эта идея называется b-king от английского backing которые сшиваются как bootstrap агрегация это собственно принцип построения композиции который расстроен основан на простом голосование алгоритмов каждый из которых построен на случайные but страшные выборки сформированный из изначальной нашей обучающей выборке ну скажем имея

случайные but страшные выборки сформированный из изначальной нашей обучающей выборке ну скажем имея обучающую выборку мы сгенерируем например 100 буфетных выборок для каждый из мускатный выборг в бесцветных выборок мы проведем обучение своего решающего дерево у нас скажем получится 100 деревьев ну и после этого мы все эти предсказания можем соединить или случае классификации провести простой голосование для [музыка] принятие финальном решении но собственно алгоритм работы b-king он изображён на

для [музыка] принятие финальном решении но собственно алгоритм работы b-king он изображён на картинке ну вот такая очень простая концепция оцените все силы для концепции особенно хорошо она работает на случае случайного леса это когда мы делаем backing над решающими деревьями то есть каждую костя каждого базовые алгоритмы использовать именно решающие дерева можно конечно использовать и там линейные модели и ближайшие соседи и так далее но вот на практике мы учим выяснили что решающий деревья

модели и ближайшие соседи и так далее но вот на практике мы учим выяснили что решающий деревья гораздо лучше работают случае b-king это объясняется теми этим тем фактом что решающие дерево но с одной стороны это очень богатые семейства ритмов она может приближать любые закономерности для обучения решающего дерево не нужно слишком много ресурсов она довольно довольно легковесная но при этом главный недостаток решающего дерево а именно его склонность при обучению компенсируют как раз таки то что

недостаток решающего дерево а именно его склонность при обучению компенсируют как раз таки то что при усреднении всех предсказаний эти выбросы с которыми мы сталкивались при рассмотрении решающего дерево для классификации или регрессии все эти выбросы они нивелируются потому что выборы они как бы натали случайны что появляются лишь в подавляющем меньшинстве решающих деревьев который мы построим и вот оказывается случай не лез это ведь это очень мощная мощная модель которая часто используется

и вот оказывается случай не лез это ведь это очень мощная мощная модель которая часто используется для решения как прикладных задач так и задач всяких соревновательных платформах типа карл точка ком ну и вот зрительную решающие и лес это такой очень крутой бой знаем для вас если вы не знаете какой будет применить стал применять решающий лес это такое такой универсальный проект это с одной стороны довольно довольно простой алгоритм но с другой стороны он очень мощный но давайте качества в

довольно довольно простой алгоритм но с другой стороны он очень мощный но давайте качества в качестве работы решающего лес увидимся вот на этой картинке мы сравниваем здесь два алгоритма слева у нас решающие дева которые мы строили еще в прошлом видео мы рассматривали решающий дерьма глубины но нибудь небольшой глубины глубин и видимости на сцене средней глубины и мы также построили решающий лес для той же самой задач ну и вот мы видим что качество здесь на обучающие уроки получилось гораздо

для той же самой задач ну и вот мы видим что качество здесь на обучающие уроки получилось гораздо выше и кроме того решающий ряд действительно довольно точно воспроизвел нашу желаемую спиральную структуру при этом у нас конечно есть какие-то выбросы вот здесь вот здесь вот здесь но этих выбросов гораздо меньше чем случае когда мы имеем дело с решающим деревом большой глубины собственно в этом-то и сила решающего лесу случайного леса она он с одной стороны довольно мощный угадал спиральную

и сила решающего лесу случайного леса она он с одной стороны довольно мощный угадал спиральную структуру с другой стороны нет так склонен к обучению как решающие дерево большой глубины видите здесь каких-то от фактов далеко не так много как можно было бы предположить ну вот в этом-то и сила конечно у случайного леса есть недостатки это не идеальный все-таки алгоритм например это слишком долго и громоздкого вычисления с другой стороны конечно плюсом является то что все леса они строятся так

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

недостатком случай с является отсутствие его интерпретируем асти и это довольно плохо потому что в индустрии в продакшене довольно часто важно чтобы модель была интерпретируется чтобы я могли право лидировать скажем контролирующие органы если речь идет о банке или какие-то внутренние аудиторы в компании которые вы работаете поэтому часто в индустрии при прочих равных старались обойтись без компаний алгоритмов чтобы построить более интерпретируемые модель это пример такие как то же самое одно

алгоритмов чтобы построить более интерпретируемые модель это пример такие как то же самое одно решающие дерево или линейная модель но конечно нас как курс padi пленку это питеру и масть интересует не настолько сильно потому что речь это нейронных сетях там вообще об интерпретироваться все уже весьма сложно поэтому и этот недостаток решающего случайного леса можно немножко обойти стороной но имейте ввиду что если вы будете заниматься индустриальными задачей машину обучение то вот есть такой

ввиду что если вы будете заниматься индустриальными задачей машину обучение то вот есть такой такое важное ограничение имя эту тему на самом деле можно было бы прочитать отдельную лекцию на тему запретили масти в индустрии но конечно же это не тема нашего сегодняшнего занятия но теперь давайте поговорим про еще одну модель машину обучения еще один способ построения композиции этот способ называется стекинг sticking это такая более хитро идея оно состоит в том что мы можем обучить некоторые

стекинг sticking это такая более хитро идея оно состоит в том что мы можем обучить некоторые разноплановые в ритме машину обучение скажем эти алгоритмы мы будем называть а bc мы будем обучать все эти алгоритмы на либо на одной и той же обучающей выборке либо мы можем обучающий выборку разбить на три части и на каждой из частей отдельно обучить алгоритм машину обучения стресс на свой и затем эти признаки это видео сегодня эти ответы алгоритмов алгоритма a b c можно уже использовать как признаки

это видео сегодня эти ответы алгоритмов алгоритма a b c можно уже использовать как признаки для обучения нового более крутого мид алгоритмы то есть по сути дела мы делаем следующее мы берем ника вы там а скажем угрей там линии регрессии обучаем его на наши сдачи и по сути дела добавляем новую строить новый столбец в нашу матрицу объекты признаки новый столбец будет соответствовать ответом нашего первый алгоритм таким образом мы сделаем для всех этих алгоритмов и после этого уже на получившийся

первый алгоритм таким образом мы сделаем для всех этих алгоритмов и после этого уже на получившийся огромные матрицы объекты признаки мы можем обучить уже новый какой-то 4 алгоритм его ответ использовать качестве правильного ответа можно обучать этот металл горит только на результатах применения базовых алгоритмов можно обучать мид алгоритм на всех признаков совокупности включая изначальные признаки подобным is ticking с вами разбирать не будем но важно понимать что такая такая идея есть и как

подобным is ticking с вами разбирать не будем но важно понимать что такая такая идея есть и как бы на самом деле sticking тоже хорошо довольно таки работает особенно в том случае если алгоритмы а b и c сами по себе очень мощные и но при этом разноплановое в этом случае striking может как бы совместить лучшее от всех этих алгоритмов и получить наиболее мощную модель наиболее мощный ансамбль в качестве решения задачи машинного обучения но часто staging это такая финальная такой финальный рывок

решения задачи машинного обучения но часто staging это такая финальная такой финальный рывок для достижения наилучшего качества на какой-нибудь сдачи машину обучение на google.com но конечно striking сам по себе он он весьма тяжеловесная потому что и ритма нужно обучать алгоритм б нужно обучать в конце нужно обучать если откачивать этих алгоритмов от кайтом случайный лес а другой там метод ближайший соседей то тогда конечно с таким то будут большие проблемы с тем чтобы вы читать эту огромную

соседей то тогда конечно с таким то будут большие проблемы с тем чтобы вы читать эту огромную композицию но тем ни менее score получается довольно хороший этого ну и третья идея третий способ организации композиции алгоритмов называется busting собственно busting это пожалуй самый важный из способов организации композиции пока я мере точно самое интересное идея бустинга заключается в том что мы строим наши алгоритмы последовательно решение по итогам построение всей этой композиции всех тех

мы строим наши алгоритмы последовательно решение по итогам построение всей этой композиции всех тех алгоритмов мы будем принимать уже не простым голосованием взвешенным голосованием то есть вот такой по такой формуле собственно результат алгоритма финального от x будет равняться взвешены сумме c11 это x плюс 2 а 2x + так далее плюс цен а.н. от x где а 1 2 и так далее но и это собственно наши алгоритмы которые мы строим каждый следующий алгоритм скажем ой алгоритм м но он призван компенсировать

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

компенсировать ошибки друг друга потому что они друг о друге не знают но от случай бустинга каждый следующий алгоритм может исправлять ошибки предыдущих или за счет этой идеи получается более мощный алгоритм который проявляет себя весьма весьма хорошо в задачах машину обучение особенно опять же в конкурсах на платформе когда точка ком вот сильный метод бустинга busting можно реализовать по-разному сильный метод это градиентный busting надо решающими деревьями пока непонятно что я сказал надо

сильный метод это градиентный busting надо решающими деревьями пока непонятно что я сказал надо решающими деревьями означает что этот быстренько использует так или иначе решающие деревья в качестве базовых алгоритмов 12 и а.н. ну а градиентный стал градиентные означает что каким-то образом он использует где ент да но о подробностях того как градиенты бусинок работает мы поговорим с вами в следующем видео пока давайте резюмируем то что мы узнали в этом в этом видео про композиции и так у нас

видео пока давайте резюмируем то что мы узнали в этом в этом видео про композиции и так у нас есть 3 способа построения композиции the backing striking и busting backing принимает решение простым голосованием и это очень мощная модель для в качестве дизайна на любой задачи машину обучение sticking строить мид алгоритм который использует результаты разноплановых уже сами по себе мощных алгоритмов и часто используются для доведения вашего скоро к кусочку ком до совершенства ну а boosting строит

и часто используются для доведения вашего скоро к кусочку ком до совершенства ну а boosting строит убитого следовательно и каждой алгоритмом исправляют ошибки предыдущих алгоритмов при этом самый сильный реализации бустинга является где ты будешь тракту решающими деревьями о котором мы поговорим следующем видео а на этом все спасибо за внимание и увидимся все идет

дорогие друзья всем привет мы продолжаем нашу серию видео про лежащий деве и композиции алгоритмов в этом видео мы поговорим про градиентный busting ссылка на предыдущее видео этой серии есть в описании к этому видео и так вы в предыдущем видео уже немножко поговорить и про где ент и busting на самом деле и сейчас мы немножко вспомним о чем вы говорили это градиентный busting это такой эффективный способ построения композиции решающую деревьев таким образом что деревья в эта композиция строится

способ построения композиции решающую деревьев таким образом что деревья в эта композиция строится последовательно при этом каждое решающие дерево стремится компенсировать ошибку которые допустили уже построены решающий деве то есть на тех объектах на которых ошибка у нас наиболее высокая градиентные busting оказывается как мы в последнем убедимся наиболее сильно исправляет эту ошибку следующем очередным алгоритм ну и затем решение принимается в виде известного голосование вот скажем случались

алгоритм ну и затем решение принимается в виде известного голосование вот скажем случались и кончать это от x у нас постарается видится и 11 x 22 x плюс строитель стен а этот x где c и ты а это определяются на этом шаге в зависимости от того как устроены предыдущие и минус один алгоритм ну это все пока что звучит очень абстрактно давайте разбираться с тем как собственно работать градиентный бусинка но перед тем как президент узнать президенты busting мы должны с вами вспомнить собственно что

но перед тем как президент узнать президенты busting мы должны с вами вспомнить собственно что такое градиент и градиентный спуск и так где ты спуск это как вы уже знаете это было в наших предыдущих видео это алгоритм минимизации некоторые функции f от x пока что мы будем говорить про функция одного аргумента и в целом в случае одна бусинка нам и понадобится эта функция на аргумент итак мы минимизируем некоторых функцию f от x скажем вот который нарисован у нас на картинке ogre там у нас

минимизируем некоторых функцию f от x скажем вот который нарисован у нас на картинке ogre там у нас следующий мы выбираем некоторые значительные приближении к 0 а вот это здесь нарисовано ну и затем мы строим последовательность точек xm каждое следующее . должна быть все ближе и ближе к точке минимума который собственно мы ищем как мы строим очередную точку x n + 1 ну пускай у нас есть никакой . excel это текущие приближение скажем оно где-то здесь мы вычисляем градиент функции в точке x n ну

excel это текущие приближение скажем оно где-то здесь мы вычисляем градиент функции в точке x n ну или в данном случае в одномерном случае градиент у нас превращается в производная как вы знаете градиент функции в точке это вектор из ее частных производных по всем направлениям в одном виде в одномерном случае все это превращается в просто производную функции в точке f штрих от x n и затем следующее приближение следующую точку x n + 1 мы вычисляем по формуле x n плюс 1 равно x n минус альфа

приближение следующую точку x n + 1 мы вычисляем по формуле x n плюс 1 равно x n минус альфа умножить на f штрих от x n где с тестом excel и предыдущая . а альфа это некоторая константа которая может в зависимости от шага вести себя по-разному либо она может быть постоянный до всех шагов нашего градиентного спуска либо она может постепенно уменьшаться и уменьшаться альфа это скорость нашего нашей сходимости к точке минимума и она иногда называется скорость обучения или по английски лёрн грейт

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

это значит что если функции роста это нужно идти в обратную сторону для поиска минимума функции f от x но вот и получается что мы вычитаем из точки сцены положительное число в умножить на f штрих от x и соответственно в какой-нибудь такой точки которая находится на противоположный ветви нашей функции производная здесь отрицательно поскольку функцию бывает и если функция бывает означает что мы движемся в правильном направлении значит нам нужны типа направлению производный верни под по

что мы движемся в правильном направлении значит нам нужны типа направлению производный верни под по направлению по направлению вправо и и соответственно мы вычитаем отрицательное число столицу мы потребляем и приближаемся к точке x ну и соответственно чем больше значение производной скажем здесь f штрих от x им большое в этой точке это означает что мы должны быстро идти в противоположную сторону если значение производной маленькое то это означает что мы скорее всего уже довольно близко подошли

если значение производной маленькое то это означает что мы скорее всего уже довольно близко подошли к точке локального минимума ну и до простым и конечно же будем с вами читать что мы минимизируем функцию которая эстакаде минимум поэтому данном случае только и там он при должном выборе шага альфа сходится успешно к точке локального минимума в данном случае глобального минимума ну вот такой ритм градиентного спуска более подобного про него вы можете узнать в предыдущих видео нашего курса ну а

градиентного спуска более подобного про него вы можете узнать в предыдущих видео нашего курса ну а теперь мы давайте будем думать как градиентного спуска применить к построению мощные композиции решающую деревьев пока что это непонятно какое отношение имеет к состоянию композиции ну давайте объясним какое отношение это имеет собственно прежде чем описывать организм людей этого бустинга мы сначала поговорим о том какую задачу мы решаем чтобы всем напомнить итак мы решаем задачу в данном случае

поговорим о том какую задачу мы решаем чтобы всем напомнить итак мы решаем задачу в данном случае регрессии пускай у нас x это обучающий уборка она состоит из n элементов x1 x2 и так далее excel у нас также есть целевая переменная y это y1 и y2 туда ли y el средстве на это переменная является действительным числом x и это векторы которые вместе образуют матрицу объекты признаки собственно матрицу x и y это вектор ну и наша цель и задачи и вместе это построить алгоритм от x который будет

матрицу x и y это вектор ну и наша цель и задачи и вместе это построить алгоритм от x который будет принимать на вход x и и выдавать игроки которые оптимизируют вот такую функцию потерь куат y а то есть y и а это параметры функции q эта функция потерь постарается в виде суммы вернее среднего до 19 ноэль на сумму какой-то функции потерь эль применённый к объекту y vito и верник ответу y это и с правильному ответу и ответ алгоритма от x это вот этим вот такие вот выражения мы суммируем и и усыня

ответу и ответ алгоритма от x это вот этим вот такие вот выражения мы суммируем и и усыня им то есть деле night ну [музыка] например а в качестве функции эль может выступать функция или от игрека ровная а минус y в квадрате и тогда мы говорим о минимизации квадратичной функции потерь или как оно еще называется м с е с более подробным разбором метрика и вот этой концепции минимизации функции потери вы можете ознакомиться в нашем видео по метрикам и в видео про пробных собственно оптимизацию

вы можете ознакомиться в нашем видео по метрикам и в видео про пробных собственно оптимизацию линии регрессии и так вот у нас такая постановка задачи мы можем решать и другую постановку если l имеет у нас никто другой вид обязательно это будет классической функция потерь для задачи классификации если мы хотим сдать классификации решать тогда мы должны могли бы представить все в таком виде но здесь в качестве ответов алгоритма вы выступали бы не классы вероятности классов и у нас по-прежнему

в качестве ответов алгоритма вы выступали бы не классы вероятности классов и у нас по-прежнему была бы такая мне некоторые функции потеряно могла бы быть логистической функции потерь как мы использовали задач классификации микро говорили про логистическую регрессию ну или какая-то другая любая функция потери главное чтобы она была дифференцируема это очень важно и так вот такая наша цель мы хотим эту задачу решить с помощью собственных денег но бустинга кстати обратите внимание что мы

мы хотим эту задачу решить с помощью собственных денег но бустинга кстати обратите внимание что мы используем здесь верхние индексы x1 x2 алексей не надо пульсации степенями это просто нумерации наших объектов и верхней и дык су мы используем для того чтобы не путать с нижними индексами то есть координатами наши факторов это просто первый объект второй объект and effect 1 ответ alt и ответ и так далее ну так вот давайте эту задачу с помощью градиентного бустинга предположим что мы уже построили

ну так вот давайте эту задачу с помощью градиентного бустинга предположим что мы уже построили алгоритмы а 12 и так далёко ну и поставили константы c13 отсека по поводу политики выбора констант здесь можно это делать с несколькими разными способами но например вполне нормальной политика будет взять цикад и равные 1 делить на корень из к и на этом остановиться то есть один здесь такое низкое такая функция которая уменьшается и стремится к нулю при росте к но при этом уменьшается недостаточно

функция которая уменьшается и стремится к нулю при росте к но при этом уменьшается недостаточно быстро и поэтому каждый след червей дома все таки вносит существенный вклад в общий в общую сумму сумма c и тихо итак итак мы хотим построить очередной алгоритм oko plus 1 до того чтобы он исправлял ошибки алгоритмов а первый тогда и акад и в особенности на тех объектах на которых ошибки сильные ну хорошо давайте поскольку у нас есть функция потерь который необходимо оптимизировать давайте запишем

давайте поскольку у нас есть функция потерь который необходимо оптимизировать давайте запишем эту функцию потерь записываться в таком виде эль от y и т а от x это то есть функция потерь на одном объекте на этом объекте это соответственно если если мы распишем ах как сумму цветы ha эtиx + 40 + 1 + 1 тогда получится у нас или от y это это все по прежнему и вот здесь мы расписываем как сумму того что мы уже построили и того что нужно построить то есть нужно найти нужно построить алгоритм а каплю

мы уже построили и того что нужно построить то есть нужно найти нужно построить алгоритм а каплю спермы от x этого ну хорошо у нас есть вот такая запись давайте посмотрим на что это похоже у нас есть как бы основы слагаемое это что нам нужно добавить то что нам нужно построить это на самом деле очень похоже на вот такую запись этого сесть в как эта функция f который собственно и от y это и вот этого аргумента да нет аргумент можно рассмотреть качестве т плюс дельта t где-то это написано здесь

аргумента да нет аргумент можно рассмотреть качестве т плюс дельта t где-то это написано здесь это сумма ценит охает их и дельта т это то что нам нужно завести наш новый алгоритм но и нам необходимо конечно же эту функций потерь минимизировать то есть мы хотим минимизировать поттер тесто на нам эту штуку нужно минимизировать под и то есть найти такое дельта t чтобы сделать эту штуку можно меньше но нам известен у газетного спуска чтобы минимизировать функцию f нам необходимо сделать так чтобы

но нам известен у газетного спуска чтобы минимизировать функцию f нам необходимо сделать так чтобы дельта t из принципа газетного спуска было равно вот такому слагаемому минус альфа и штрих от t где альфа это какое какая-то константа скажем 19 на карниз к + 1 а f штрих это производные нашей функции по аргументу ты в таком случае мы как показано на картинке с газетным дружкам будем двигаться все ближе и ближе точки минимума рано или поздно дойдя до и . меня но в данном случае поскольку функцию f

и ближе точки минимума рано или поздно дойдя до и . меня но в данном случае поскольку функцию f у нас одномерное она принимает только второй аргумент он имеет размерность 1 то есть это число средства в данном случае у нас речь идет не о градиенте а о производной то есть по сути дела дельта t dt нами здесь важен только знак и ну и соответственно размер этого самого же знаки важен модуль ну вот теперь поскольку мы хотим дельта t искать в таком виде то давайте собственно это и запишем то есть мы

поскольку мы хотим дельта t искать в таком виде то давайте собственно это и запишем то есть мы хотим oko plus 1 этих сыты искать виде производной и штрих то ли функция эль по своему второму аргументу то есть по аргументу а соответственно вы это и записываем записываем что вот это это к + 1 attacks это равно минус и здесь минус да ну минус производная по аргументу а от этой функции эль в какой точке ну в точке конечно же а равная c 1 1 так сытая + c катая это дали просто 5 к той от x и но

точке ну в точке конечно же а равная c 1 1 так сытая + c катая это дали просто 5 к той от x и но поскольку вот собственно это . . таким образом если мы на этом объекте найдем такое такой алгоритм а х плюс 1 что он нами xix это будет давать это минус производную нашей функции потерь то тогда по сути дела мы решим нашу задачу потому что мы сделаем один маленький шажок на этом объекте в направлении минимума функции потерь соответствующий этому объекту то есть до одного объекта нам понятно

минимума функции потерь соответствующий этому объекту то есть до одного объекта нам понятно направление в котором нужно идти это направление но описывается собственно вот этой формулой это минус производная функции потерь обратите внимание что если производные функции потерь имеет большую величину то есть большой модуль независимо от того положительно нет или отрицательные то это будет означать что и смещение нашего объекта должно быть большим но поскольку собственно вот значение k + 1 x этого

и смещение нашего объекта должно быть большим но поскольку собственно вот значение k + 1 x этого будет мы их мы хотим чтобы она была большим тестом здесь будет у нас большая величина и значение нашей композиции нашей суммы изменится на большую величину соответственно если производная маленькая есть она близко к 0 то тогда значение этой этой суммы почти не изменится и так давайте резюмируем мы хотим найти такой алгоритма к + 1 который на объекте x это будет давать известное нам число вот это

хотим найти такой алгоритма к + 1 который на объекте x это будет давать известное нам число вот это число быть из него нечто вот это число нам уже известны вам просто можем посчитать на самом деле потому что все алгоритмы а и ты уже построены для для и меньше чем к + 1 ну и эту производную мы тоже можем вычислить того что нам известно y это производную функции потерь вы читательского общем тоже несложно хорошо тогда на самом деле если для одного объекта у нас получилась такая запись то это

несложно хорошо тогда на самом деле если для одного объекта у нас получилась такая запись то это выражение можно трактовать как новую целевую переменную то есть мы хотим найти такой алгоритм oko plus 1 чтобы он на объекте x и для давала вот это выражение это у нас получается новые целевая переменные новая задача регрессия собственно это зачали весь и нам нужно решить до того чтобы найти изучение а к + первым построить это алгоритм соответственно это происходит для одного объекта для нескольких

а к + первым построить это алгоритм соответственно это происходит для одного объекта для нескольких объектов нас получается уже новая матрица объекты признаки у нас есть прежним объекты exceed и и у нас целевая переменная по сути дела вернем овцебык и признаки то у нас остается прежней дара отличается от предыдущего эти объекты признаки только целевой переменной скрывая переменная на объект секс это у нас выглядит вот так отлично тогда естественно это значит машину обучение можно решить с

секс это у нас выглядит вот так отлично тогда естественно это значит машину обучение можно решить с помощью алгоритма градиентного бустинга собственного к + 1 строится именно так это решающий дери которая которая построена с вот вот таким танки там которые здесь написано ну и затем когда мы это новое решающие дерево построили мы добавляем его в наш алгоритм с константой который мы заранее выбранных осталась с константой c ка плясать ну таким образом у нас получается что мы каждым следующим

осталась с константой c ка плясать ну таким образом у нас получается что мы каждым следующим угрей там все больше и больше компенсируем этаж нашу ошибку обучающей выборке и функция потерь на обучающем руки на все падает падает и падает в конце концов мы доходим до точки где функций потерь больше некуда падать и в этом случае мы и получается завершили обучение композиции давайте разберем все это сложную концепцию на примере а именно довайте пускай у нас есть какая-то функция потери м с е

это сложную концепцию на примере а именно довайте пускай у нас есть какая-то функция потери м с е собственно для регрессе это вполне очевидный выбор м с я записывается на помню как а минус y в квадрате ну и соответственно мы посчитаем ту самую производную с минусом который нам нужно было на которой нам нужно было обучиться это производная равна на самом деле минус 2 на х минус y это в точке а равные вот этому вот этому выражению производные от а минус y квадрате это собственно -2 минус y

а равные вот этому вот этому выражению производные от а минус y квадрате это собственно -2 минус y производны естественно по аргументу а как и полагается ну соответственно это теперь переписываться просто подстановкой под а этого выражение и получается минус 2 на сумму c it их от этого плюс-минус вернее y это ну смотрите что здесь написано на самом деле здесь написано просто двойка умножить на y это минус эта штука минус результат всех предыдущих вычислений то есть на самом деле алгоритм

на y это минус эта штука минус результат всех предыдущих вычислений то есть на самом деле алгоритм градиентного бустинга следующие дерево настраивается на разность y этого и ответов предыдущих алгоритмов то есть это как бы очень очень разумно и логично потому что у нас есть y и ты так чему стремимся и у нас есть то что у нас есть как бы эти ответы которые мы получили предыдущих алгоритмах и мы как раз таки хотим чтобы следующий алгоритм компенсировал нам в точности разницу между нашим желаем

как раз таки хотим чтобы следующий алгоритм компенсировал нам в точности разницу между нашим желаем ответом и тем что дали нам предыдущие алгоритмы как раз таки эта разность она записывается вот так как минус 2 на сумму 5 штук минус y и да то есть случае м с е градиентный busting делает весьма естественную вещь он просто на каждом шагу строит новое решающие дерево которое пытается скомпенсировать ошибку нашего грит и естественно это очень очень приятно что где-то и бусинка в этом довольно

ошибку нашего грит и естественно это очень очень приятно что где-то и бусинка в этом довольно простом случае преобразуется в очень просто алгоритм это позволяет лучше понять его работу и убедиться в том что действительно в этой идее есть здравое зерно ну хорошо да действительно градиентный busting это довольно мощный алгоритм весьма качественно справляющийся с множество зачем шли на обучение но эти несколько деталей его реализации его типичной реализации поедем во первых базовые алгоритмы как

эти несколько деталей его реализации его типичной реализации поедем во первых базовые алгоритмы как правило это решающий деревья они используются потому что они довольно простые и быстро обучаемые и при этом или к местные до для их использования не нужно слишком много информации хранить в памяти но и в качестве основных реализации груди от новости к дрожащим идеями мы упомянем 3 библиотеки это xd пуст и the light g bm и это библиотека как boost от яндекса которая ко всему прочему умеет

это xd пуст и the light g bm и это библиотека как boost от яндекса которая ко всему прочему умеет качественно обрабатывать категориальные признаки для решения задачи градиента выпустим и собственно этим как boost отличается от этих двух библиотек поэтому как был действительно это очень и очень хорошая штука и призываю вас всех его использовать независимо от того отечественная разработка или нет но тебе ведь от того что это сделал индекс от это вдвойне приятно кстати индекс является хорошим

но тебе ведь от того что это сделал индекс от это вдвойне приятно кстати индекс является хорошим партнером нашей школы и нашем канале вы можете найти много их лекции как правило в градиентным бустинга выполняя газета muse тенге изначально выбирают количество деве в который мы хотим обучать то есть все гипер параметры фиксируются еще на старте обучения и скажем мы обучаем 100 не знали 200c ev последовательно и применяем все тедеев сеть идея как здешнюю су ну давайте проведем небольшой анализ бы

и применяем все тедеев сеть идея как здешнюю су ну давайте проведем небольшой анализ бы нету газетную бустинга проанализируйте причины по которым он так хорошо работает и выполнение никто его не очевидные свойства которые нас очень сильно радует применительно к задаче скажем классификации классификации рукописных символов то есть вот здесь у нас есть графики ошибки на задачи на двух различных задачах это так иначе задачи классификации изображений это рукописные символы и буквы а это но какие

это так иначе задачи классификации изображений это рукописные символы и буквы а это но какие другие изображения общем не очень важно ну давайте посмотрим на график ошибки это график ошибки на обучающей выборке он снизу и на тесты выборе ком сверху ну мы видим что уже через 5 построенных зельев градиентный busting на обучающей выборке нам дает точность классификации сто процентов то есть у нас все объекты уже правильных классифицированы ну и так в общем на протяжении всего обучения у нас

нас все объекты уже правильных классифицированы ну и так в общем на протяжении всего обучения у нас по-прежнему будет ошибкой на обучающей выборке 0 просто вот но зато она тесты выборки картинку более интересное у нас в тот момент когда она обучающей выборке ошибка 0 на тесты о браке ошибка прям на 10 а затем дополнительные деревья которые мы строим все больше и больше уменьшают ошибку на тестовой выборке то есть смотрите здесь качества на обучающей брюки уже сто процентов она тест рубрике она

выборке то есть смотрите здесь качества на обучающей брюки уже сто процентов она тест рубрике она все еще уменьшается уменьшается и это очень важно потому что естественно мы хотим чтобы качество на теста йорке уменьшалась как можно как можно как можно дольше на ну и здесь на этом графике мы видим что градиентный boosting практически не перри обучается на самом деле он сутки склонен при обучении к при достаточно большом количестве обучающих деревьев то есть здесь конечно важно не слишком сильно

при достаточно большом количестве обучающих деревьев то есть здесь конечно важно не слишком сильно переборщить с количеством базовых алгоритмов если вы обучите 10 тысяч пятьсот тысяч базовых алгоритмов поочередно то это будет мало того что не выгодно с точки зрения производительности это будет еще и опасно в плане переобучения потому что здесь на обучающей выборке busting будет идеально себя вести и вообще без всяких проблем на тесты выборки он будет вести себя как то уже довольно плохо вот но

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

важно итак давайте немножко резюмируем содержание нашего занятия перечислением свойств бустинга начнем с преимуществ как мы уже упоминали busting способен очень точно устанавливать искомую функцию то есть очень хорошо подгоняет ответы обучающий уборки и итак давайте мы перечислим некоторые свойства бустинга а именно преимущества и недостатки начнем давайте из преимуществ busting позволяет весьма качественно приближать любую функцию на обучающую варки этом мы выяснили посмотрев на график

весьма качественно приближать любую функцию на обучающую варки этом мы выяснили посмотрев на график зависимости ошибки на обучающей блики от номера итерации уже за пять-десять итерации на правда простой довольно таки задачи наш кредитный busting сумел точно восстановить нашу функцию ну и кроме того на тесты рубрике он также себя хорошо везет потому что он почти не при обучается приструнить на небольшом количестве объектов при сыне там одни небольшом количестве в ней изначальных алгоритмов также

количестве объектов при сыне там одни небольшом количестве в ней изначальных алгоритмов также важным преимуществом бустинга по сравнению со случайным лесом например является то что он способен компенсировать некую систематическую ошибку которая накапливается за счет ошибки каждого из базовых алгоритмов вот например давайте посмотрим на обычный backing то есть на обычный решающий лес стоит через решающим лесом каждый из алгоритмов может иметь некую систематическую ошибку которая будет

через решающим лесом каждый из алгоритмов может иметь некую систематическую ошибку которая будет проявляться одним и тем же образом в каждом из алгоритмов которые построили и тогда когда мы посмотрим на композицию у нас это систематическая ошибка никак не сможете справиться в случае же с бу стингом каждое следующее дерево как раз таки и стремится исправить ту систематическую ошибку которая допустили все предыдущие модели поэтому boosting построения совершающим весом лучше приближает некоторые

все предыдущие модели поэтому boosting построения совершающим весом лучше приближает некоторые закономерности но это не формальное рассуждение естественно имеет формализацию с точки зрения тир вероятностей вот но мы про эту медитацию в этом видео говорить не будем если вам интересно то в дополнительными сериала к этому занятия мы обязательно прикрепим небольшой анализ декинга и бустинга с точки зрения так называемый боец врнс декомпозицию то есть для композиции ошибки алгоритма на сдвиг и

зрения так называемый боец врнс декомпозицию то есть для композиции ошибки алгоритма на сдвиг и собственно дисперсию и разброс вот но это мы оставим за пределами нашего основного повествования также важным преимуществом где-то бустинга является то что он способен работать с произвольной функции потерь как мы с вами убедились от функции эль нам ничего особого не требовалось кроме того что она должна распадаться в функция должна представляться в виде суммы функций потерь на объектах нашей

должна распадаться в функция должна представляться в виде суммы функций потерь на объектах нашей обучающей выборке кроме того она должна быть дифференцируемой потому что нам хочется производной вычислять естественно но больше от него и от неё ничего не требуется любая функция потери к сдаче классификации так зачем регрессии так даже и задачи в ранжировании которое решается в поиске яндекса например можно просто взять функции потерь и градиентный busting легко и и оптимизирует какая бы она ни

можно просто взять функции потерь и градиентный busting легко и и оптимизирует какая бы она ни была ну естественно все эти замечательные свойства busting удаются не просто так есть и важные достатке которых тоже необходимо сказать главным недостатком busting является то что он медленный причем как в плане обучения так и в плане применения в отличие от решающего леса мы не можем параллельно обучать алгоритмы глядят на бустинга по отдельности поскольку каждый следующего горит им должен знать

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

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

нужно довольно большое количество обучающих данных если у вас количество признаков слишком велико по сравнению с количеством объектов скажем объектов 1000 признаков 100 то никакое boosting вам здесь не поможет потому что естественно из такого огромного богатого семейства моделей который busting может останавливать алгоритм просто подгоняться под обучающую выборку и никаких закономерностей внятных на тесте он не восстановит если у вас такая ситуация что вас тысячи объектов и 100 признаков то вам

на тесте он не восстановит если у вас такая ситуация что вас тысячи объектов и 100 признаков то вам лучше использовать простой алгоритм типа регрессии линейной или логистической регрессии случае сдачи классификации ну вот давайте резюмируем содержание нашего цикла видео в этом цикле мы познакомились с решающими деревьями и способами организации композиций из решающих деревьев собственно на этом все в следующем занятии семинарском занятии мы с вами потренируемся выбирать модель в частности

все в следующем занятии семинарском занятии мы с вами потренируемся выбирать модель в частности посмотрим на camino практика работают модели редчайшего дерево решающего леса и градиентов бустинга в том числе спасибо за внимание всем всего хорошо

доброго времени суток когда вы осмотрели сегодня на сами семена связаны с общим pipeline am решения иметь задач рамках этого семинара мы с вами сначала напомним себе и слушателям что такое переобучение и некоторые способы борьбы с ним это нам пригодится непосредственно далее после этого мы с вами поговорим что такое pipeline решением или задачи из чего он состоит подобный это обсудим и перейдём непосредственно практике то есть мы с вами будем в рамках вот этого общего шаблона решением задачи то

практике то есть мы с вами будем в рамках вот этого общего шаблона решением задачи то есть такого pipeline а рассматривать такую тему как подбора гипер параметров и ансамбли перова нее модели но если снова по саванне и сами качество визуализировать данные все будет как но происходит на практике ну что же давайте начинать начнем мы с вами с напоминание что такое переобучение не некоторых методов борьбы с этой ситуации напоминаю что при обучении это ситуация какая ситуация из-за которой возникает

с этой ситуации напоминаю что при обучении это ситуация какая ситуация из-за которой возникает эффект нахождение в обучающей выборке некоторых слишком глубокие закономерности которые в общем случае не появляются то есть который в том числе не могут не присутствовать в тестовые выборки или вообще в принципе во всем выборочно пространстве что случается в принципе часто и иные места и можешь сказать что пойти и закономерности имеют некоторый характер совпадения понятное дело что вполне закономерно

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

таким образом переобучить модель более того известен факт что если мы построим достаточно глубокое дерево решающие дерево для некоторые выборки то на обучающей выборке можно добиться идеального качества просто потому что каждому элементу обучающей выборке будет соответствовать свои лист решающим дерево что же хорошо также очень наглядным примером является алгоритм к ближайших соседей и подстраивается под обучающий выбор почему потому что в обучающей выборке сайдик обливаешься сидим

и подстраивается под обучающий выбор почему потому что в обучающей выборке сайдик обливаешься сидим рассматриваемого объекта может находиться какой-то выброс или условно локальный шум и он приведет к ошибке всего перед мы потому что скучную рассматриваемого объекта он попадает опять же те самые к объектов которые по которым делать некоторый вывод наши текущего вверх но и некоторая линейные алгоритмы могут переобучаться поскольку для них необходим никто резонный размер выбор сколько если

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

ситуацию что чем больше сложность модели по сравнению с количеством элементов обучающей выборке тем чаще возникает илистые обучения вообще если говорить формально конечно переобучение имеет место быть всегда когда есть какое-то принять условия принятия решения в контексте неполных данных но это не всегда воспринимается то есть потому что мы всегда в контексте машина в обучении принимаем решение контексте неполных данных однако же на практике когда говорят про при обучении говорят значимое

контексте неполных данных однако же на практике когда говорят про при обучении говорят значимое отклонение качества на обучающей выборке сравнению с наградой старого типа страница обучающей выборкой что вы можете увидеть на текущем графики что ж давайте рассмотрим переобучение многочленов поэтому уже насколько я знаю говорили в лекции но мы еще раз напомним давайте сгенерируем некоторые линейной зависимости вокруг этой линейной зависимости разбросаем точки некоторые выборку из 20 точек и

зависимости вокруг этой линейной зависимости разбросаем точки некоторые выборку из 20 точек и отобразим эта нога разделим все на тест на обучающую выборку и тестовую выборку и отобразить собственно мы видим что вот бледно красная линия на графике это истинно зависимость которого нас есть синие точки это обучающая выборка разбросанный по обе стороны от нашей прямой и рыжий точке c стопе строю бака давайте попробуем приблизить наши точки некоторым полиномом то есть никто многочленом так и на

бака давайте попробуем приблизить наши точки некоторым полиномом то есть никто многочленом так и на стене . естественно мы будем увеличивать степень полинома и смотрите немного заменяется предсказываю зависимость и насколько она отличается от истинных данных то есть мы будем проверять качество на тесте здесь это происходит в коде я не буду на этом подробно останавливаться свой просто для каждой степени из списка 1347 920 по делаем то что я сейчас проговорил усло ну и рисуем сейчас на график эти

из списка 1347 920 по делаем то что я сейчас проговорил усло ну и рисуем сейчас на график эти рассмотрим результаты как мы видим с первой степени все хорошо нам даже повезло и на тесте у нас случилась качество лучше чем на trailer вероятно связано с тем что вообще в принципе у нас вот у этих двух синих точек разброс от изначального распределение оказался больше чем на остальных от и затем независимости прошу прощения но это везение в целом видим что предсказанная зрители довольно близко давайте

прошу прощения но это везение в целом видим что предсказанная зрители довольно близко давайте увеличить степень до трех мы видим уже что у нас получились и линейной зависимости они которое линейность по параметрам естественно но нелинейные с точки зрения функции она мы видим что графина стал гладкими этом смысле и начал изгибаться но по-прежнему довольно близок если независимости что мы видим и в значении цели квадратичную ошибку давайте продолжим увеличение вот мы видим что при давлении уже

в значении цели квадратичную ошибку давайте продолжим увеличение вот мы видим что при давлении уже четвертой степени свободы у нас добавлять дополнительные изгибы графика и естественно это означает что у некоторых местах мы отклоняемся от нашей истины прямо все больше из-за чего растет наследника вид тысячная ошибка на самом деле уже сейчас можно видеть что имеет место переобучение потому что мы подгоняем нашу зависимость с помощью дополнительных степеней свободы под малое количество точек

мы подгоняем нашу зависимость с помощью дополнительных степеней свободы под малое количество точек найдя какой-то внутренний за камерой слова обучающей выборке которой нет тестовых песня по всем выбрать bosanski ну и с увеличением степени то есть вот на седьмой степени мы уже стараемся уместить все точки максимально близко в этом вся суть собственно нашей обучающей выборке и на 9 20 степень у нас уже удаётся уместить все точки на наши обучающей выборке из-за чего на еще в марте на достигается 0

уже удаётся уместить все точки на наши обучающей выборке из-за чего на еще в марте на достигается 0 ошибка то есть они под отлично и потому что суммарное расстояние от почек которые лежат на кривой до самой ты кривой нос нулевое однако как мы видим это кривая очень специфично отображает некоторую глубокую закономерность которая завершит а только в обучающей выборке а потому она очень сильно отличается от и снять зависимости которая заложена в том числе в обучающих и обучающих естественно данных

от и снять зависимости которая заложена в том числе в обучающих и обучающих естественно данных но как мы видим из за этого синевир отличная ошибка сильно возросла что небольшое напоминание что такое но и собственно двумерном пространстве она задается следующей формы формируете можете видеть я на экране в мерном пространстве формула аналогичные ну и конечно мы здесь с вами говорим о квадратичной норме или что то же самое о 2 2 20 есть также любая к нормы в том числе один норма норма 20 пошли

норме или что то же самое о 2 2 20 есть также любая к нормы в том числе один норма норма 20 пошли сейчас виден то и нормой так далее об этом мы просто сегодня с вами разговаривать не будем но тем ни менее любознательные слушатели могут прочитать это дополнительных источников собственно первая идея борьбы с переобучения заключаются регионализации нашей функции потерь иными словами если мы просмотрим этой линейную регрессию для какой функция потерь выглядят следующим образом сумма квадратов норм

этой линейную регрессию для какой функция потерь выглядят следующим образом сумма квадратов норм наши остатку деленное на их количество есть их соединения мы будем устремлять минимум под нашим весом естественно случай регуляризации вы хотите добавить некоторый штраф на весах чтобы они не были слишком большие для того чтобы это сделать мы как раз добавляем снег на коэффициентов коэффициент называется коэффициент июля репутации пожалуйста будьте внимательны потому что в разной литературе

называется коэффициент июля репутации пожалуйста будьте внимательны потому что в разной литературе называется и документации из таких центр мобилизации можешь на 20 как число це таке число 1 делить на c мы добавляем некоторый штраф с этим коэффициентом и теперь когда мы обучаемся мы таки можно создаем ограничение что вклад суммарный 2 веса и прыгать и конкретные координате не может быть больше чем что-то заданной а потому что она будет перетягивать на себя если вклад будет слишком большой ток

что-то заданной а потому что она будет перетягивать на себя если вклад будет слишком большой ток официанта и значение в норму будет слишком большим ни одна не будет уходить минимум таким образом мы решаем полагал подгон на первом случае наших полиномов ну и такая версия линейно legacy называется репрессий собственно с за штрафам по 2 норме если мы возьмем ставку 1 0 то есть просто модуль это будет лас-вегасе а есть можно книг и по 1 на армии по 2 на это будет его степных опять же на этом мы

лас-вегасе а есть можно книг и по 1 на армии по 2 на это будет его степных опять же на этом мы сейчас не будем подробно раз land останавливаться потому что идея регуляризации уже рассматривалась лекциях но чтобы так стоит отметить это зафиксировать названием опять же особо любознательные могут прочитать по это дело в том числе в реализации сталин в документации есть довольно подробные формулы на случай если что-то забыли или что-то интересно узнать его это не знаю абсолютно аналогично можно

на случай если что-то забыли или что-то интересно узнать его это не знаю абсолютно аналогично можно записать функцию потерь логистической регрессии вы видите на экране и таким же образом добавить ней акценты реализации данной на но квадрате в случае мы здесь есть один не говори но обратного мы имеем 2 ну а мы просто тропическую нормы мы получаем с вами регулировочную версию логистической регрессии так это идея пробиться переобучение у которой мы тоже с вами уже знаем это где консолидации мы

так это идея пробиться переобучение у которой мы тоже с вами уже знаем это где консолидации мы будем с вами вместо одного эксперимента то есть 1 обучения проводить к обучению то есть по схеме к фолд к кусочков но здесь обычно используют наглецы заставляют слова фолд было не забыл часами на к коран соответственно разбивки нашу выборку на к all 2 тыс накажет . и на каждом эксперименте мы будем выбирать свой кусочек новый иска который бы мин называется в эволюционно остальных к -1 пол долл мы с

свой кусочек новый иска который бы мин называется в эволюционно остальных к -1 пол долл мы с вами будем обучаться и проверять качество то его лидировать на там самым выбранным отложено или зафиксировано вполне изначально на самом деле этот эта процедура довольно явно отмечено на текущий картинки почему это работает идейный смысл заключается в том что те глубокие закономерности которые содержали что вас выборки вы их разрушаете но вытаскивание один небольшой кусочек данных каждый раз при этом

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

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

часто разработки машины обучения собственно изначально у нас определяется некоторая задача условно например хочется рекомендательные системы одна из задач машинного обучения связано это место кластеризации пользователей и нужно учиться этим провозом решать просто мы сами определяем значения задачу после этого по определенной задачи понятно какие данные нам необходим иногда данные предоставляет заказчик иногда заказчик предоставляет только средства сбора данных в ком случае нужно также собрать

иногда заказчик предоставляет только средства сбора данных в ком случае нужно также собрать данные самому а в некоторых случаях никто вам между собой данными в этом случае вам приходится искать их каких-то открытых источниках или непосредственно придумывать где их можно получить после чего происходит был довольно долго происходит 20 секунд то есть вы разрабатываете модель возможно когда собираются некоторые данные для этой модели то есть углубляя разная модель пошел и и обучаете думаете нужны

некоторые данные для этой модели то есть углубляя разная модель пошел и и обучаете думаете нужны ли вам новые данные тогда момент происходит в каждый раз и придержите свои каждый раз получая данные вы не только них обучайтесь нашей тестируйте на этих данных и таким образом у каждого скучайте это качество моделей так далее и пока вас не устроит результат вы совершаете разработку моделей и их обучения наконец когда вы закончили вы внедряете ваши решения в непосредственно кто как бы the time spent

наконец когда вы закончили вы внедряете ваши решения в непосредственно кто как бы the time spent an action по сути то есть там где она будет крутиться собирать данные в случае рекомендательные системы нашего примера она будет работа в интернет магазине и просто поддерживаете потом есть опять же появляются новые задачи вы продолжаете если это то что касается практики в реальных компаниях что же касается одной конкретной задачи давайте поговорим об этом чуть подробнее на с вами обходимо некоторые

одной конкретной задачи давайте поговорим об этом чуть подробнее на с вами обходимо некоторые данные изначально то есть это данные по вот уж мы с вами были назвать девелопмента это это приказ эти данные необходимо было собирать на прошлом воображением этот эти данные у вас могут быть с разных источников помогли собрать иксами из задачи которые перед вами стоит напоминать и то что мы сейчас видим с вами на экране это именно pipeline какой-то одной задачи разработки одной задачи они в целом чего

с вами на экране это именно pipeline какой-то одной задачи разработки одной задачи они в целом чего да еще хорошо собственно мы сами будем продолжать таким образом изначально мы с вами получаем какие-то данные эти данные могут быть вашим сыром виде могут быть вообще каким-то образом сказать неудобны для обработки машинного обучения поэтому сначала вы их преобразуете в удобный вид извлекайте некоторые признаки в основном из числа мере признаки нам естественно и даже некоторым образом научить

признаки в основном из числа мере признаки нам естественно и даже некоторым образом научить вашу модель по данным которые у вас есть получать некоторые сказаниях вы знаете наш прошу модели почти сети работают только числами если аппетита готовый framework поэтому полчаса категориальные признаки или текстовые признаки вам тоже необходимо преобразовывать то мы с вами об этом сегодня еще поговорим собственно все что происходит дом но стазис клипе дейта разделения наших данных на обучающей и это

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

моделей как вы видите дарья и непосредственно тестирующую вы баку помощью которой будете измерять качество вашей модели я был обычным на обучающую bottom далее поставок мы получили с вами нужность мы с вами закончили работу с данными на этом этапе вот все что находится правее тренинги и sdk сайт мы с вами уже относим непосредственно к обучению и оценки качества моделей собственно в обучении модели мы сделаем следующее мы обучаем наш наши данные на обучающих на руси еще выборки возможно мы с

мы сделаем следующее мы обучаем наш наши данные на обучающих на руси еще выборки возможно мы с вами что-то времен обучение еще делаем а именно подбор модели лучше здесь выбираем оптимальную модель собсно в следующем такая с разделе мы с вами об этом не поговорим и выбираем лучшую модель предположим пили несколько лучших моделей после чего мы с вами получили какой-то готовые модели это могут быть например эта новость это могли быть разные модели могут быть одна большая модель сложная это все

например эта новость это могли быть разные модели могут быть одна большая модель сложная это все неважным и самим имеем некоторые черный ящик после этого в которой получают наши объекты на выходе соответственно дает нам предсказание собственно мы как раз вот этот черный ящик кладем на тестирую рыбаку и получается таким образом предсказания теста и сравнимо с реальное значение на 1000 такую-то метрику качество метрики качества бывают разные например в нашей задачи которые мы рассматривали

метрику качество метрики качества бывают разные например в нашей задачи которые мы рассматривали демонстрировали переобучение в первом разделе нашего сегодняшнего занятия это лето к было среднеквадратичную ошибку писем из я естественно не было ок разные мне три качества определяются исходя из задач и например назначены для классов и классовой классификацию неплохо выглядит эти россии задачи бинарной классификации неплохо выглядит метать урал паук но мы с вами сегодня еще об этом поговорим по

классификации неплохо выглядит метать урал паук но мы с вами сегодня еще об этом поговорим по конечно после того как вы получили некоторое качество не убедились в том что это качество вас устраивать если нет то конечно или приходится начинать все сначала причем возможно дело даже не в модели а в том что каким-то образом данными привозили неправильно поэтому именно все начинается сначала то есть доверять богу как бы можно попробовать сделать что-то столько с моделью обучиться обучиться ты

есть доверять богу как бы можно попробовать сделать что-то столько с моделью обучиться обучиться ты попробуй заново их пересчитать но в общем то есть лучше просматривать все потому что очень многие модели обучается долго не говорят нам что подбора гипер параметров и выбор оптимальных моделей это зачастую бывает не очень без процесс после чего мы с вами получили итоговой модель итоговой вскоре и мы с вами эту модель отправляем в никто deploy то есть мы выпускаем и уже на реальных данных можем

мы с вами эту модель отправляем в никто deploy то есть мы выпускаем и уже на реальных данных можем оценивать качество их здесь уже не на каких-то данных который нас есть изначально про тестовый кусочек данные а в эту модель можно скармливать новые данные постепенно непосредственно дело предсказание и если у нас есть дополнительно размеченные данные мы можем сделать протолкнул систему продолженные оценки то есть 5 не ускоренных систем которые уже будет реально времени оценивать качество нашей

оценки то есть 5 не ускоренных систем которые уже будет реально времени оценивать качество нашей модели хорошо нас поставленной задачи собственно именно в таком плане мы с вами и будем работать и вниз на что мы сами в наших учебных целях нибудь не делать это все что касается диплома удалось и последующей двух шагов дело в том что мы с вами как бы не заканчивать на качестве модели и считать что после этого уже ставить их это довольно технические задачи которые на сами сейчас не интересует нас

после этого уже ставить их это довольно технические задачи которые на сами сейчас не интересует нас интересует именно учебных задач замечательно сосна мы с вами еще раз напомнить будут действующим под пайку они мы получаем данные преобразуем данные делим на обучающую и тестовую баку обучаем модели на обучающей выборке также можем подбирать оптимальный бита параметры выбирать модели после чего берем тестовую выборку измеряем качество наших моделей на тестовой выборке нет на этом настаивать

берем тестовую выборку измеряем качество наших моделей на тестовой выборке нет на этом настаивать заканчивается но нужно иметь ввиду что после этого вашей модель можно использовать и дальше послужит с оцениваем количество оценим качество решений что ж давайте собственно переднем нашему основному да хоть его сделано сегодня потому что он наиболее практический а именно выбрать и мальной модели и на примере реальных данных деле реально ps это тоже ношу это сайте будет следующие данные она будет

на примере реальных данных деле реально ps это тоже ношу это сайте будет следующие данные она будет содержать некоторые признаки людей которые нас будет сейчас сами подал мне и посмотрим не буду сейчас на этом останавливаться и объекта целевая переменной адель также мы называем таргет переменная торги пылью которая отображает превышает ли средних зарплат человека 50000 долларов фильм не превышает что ж давайте мы начнем для этого мы сами были использует конечно попандос данные можно скачать

что ж давайте мы начнем для этого мы сами были использует конечно попандос данные можно скачать напрямую на можно воспользоваться встроенным скачиванием в pandas обратите внимание на адрес целители поливом но и просто для удобства назначив сами именно колонны и сразу обозначим индексы которые отвечают численно переменным и то есть и 5 гривен это нужно для того чтобы последующем последующие обработки обработать прошу прощения за тавтологию непосредственно категориальные признаки совершив с ними

обработать прошу прощения за тавтологию непосредственно категориальные признаки совершив с ними некоторое преобразование сколько опять же заставить можно можно заставить наш алгоритм воспринимайте федеральному признаки как что-то числовое ну и собственно дальше мы с вами и также избавимся доход по пусков в ребенка сайте у нас есть два вида по пусков это наны про есть но кто нам бы и вопросительные знаки поэтому сначала мы заменим все ? она не а после чего удалимся на союз . 11 и 13 на текущем

знаки поэтому сначала мы заменим все ? она не а после чего удалимся на союз . 11 и 13 на текущем текущей очень да и так же мы с вами преобразователь сразу целевую переменную в посади еще форматы мы хотим чтобы вы чтобы она была на единиц если работать больше 50 к нулю иначе при задача мишель что ж давайте также мы с вами разделим мы сколько нас с вами есть яндекс и за числовых вич и для реальных сразу скажу что fitch когда я говорю ты че я имею ввиду признаки это одно и то же просто некоторые

сразу скажу что fitch когда я говорю ты че я имею ввиду признаки это одно и то же просто некоторые slim естественно мы с вами получаем числовые данные содержались в числовых признаков икать реальные данных и содержались в сериале и давайте посмотрим не говорим что означает категориальные качестве сколько раз ты уже принес отразим нашу табличку собственно ки нас есть признаки например мы ведь not пapehь мы видим что вы категориальные признаки вообще во всех наших столбцах здесь содержит именно

пapehь мы видим что вы категориальные признаки вообще во всех наших столбцах здесь содержит именно некоторые строки почему категориальные признаки не текст и потому что я заранее знаю что их ограниченное количество ну так что их не так много что это не какие-то случайные тексты которые нужно несколько можем какими zerowatt а именно какой-то фиксированный набор значений например если мы рассмотрим с вами уникальные значения к столбце detection вы сами увидим что их всего 16 и собственно можно

с вами уникальные значения к столбце detection вы сами увидим что их всего 16 и собственно можно посмотреть фото мест собственно здесь и и перечислены вот так же очень важно в изучение каких-то так сказать реальных задач это работа с папками которой мы сами совершили довольно просто но на самом деле не всегда честно выбрасываете сам корпус дело в том что иногда их нужно типовых заметок полировать ну или заполнять каким-то иным способом потому что зачастую факт что в какой-то конкретной колонки

ну или заполнять каким-то иным способом потому что зачастую факт что в какой-то конкретной колонки стоит пропуск он также содержит важную информацию которая которой нецелесообразно отказываться однако в наших учебный задачах мы сейчас с вами будем совершать простую обработку пропуска поскольку это целая отдельная тема и не есть разными по дороге самый простой подход к этому просто игнорировать пропустил бросали обед содержит отлично бота ли каким-то образом данные но мы с вами еще не закончен

бросали обед содержит отлично бота ли каким-то образом данные но мы с вами еще не закончен напоминаю у нас с вами есть проблема в том что наш алгоритм нужно научиться воспринимать вот активы признать это все таки его значение признака 1 класс как правило ты серфинг line экономикам как это конкретное числа потому что нашего лимитов этого числа не будь это какой-то сложный на варочный блок замечательно значит нам нужно каким-то образом преобразовать наши категориальными значения наше значение 5

значит нам нужно каким-то образом преобразовать наши категориальными значения наше значение 5 грянет признаков в числа каким образом это сделать но самый простой способ который мы с вами можем придумать если немножко посидим это лэйблом коль он абсолютно неэффективны и и очень редко используется однако он покупается и простотой так сказать ими обязательно его немножко обсудим то есть как работа приклей van halen мы с вами прям вот и положим детей шин и просто кадр каждый каждого фиксированное

приклей van halen мы с вами прям вот и положим детей шин и просто кадр каждый каждого фиксированное значение здесь их 16 tb класс-f сковороде it и так далее мы с вами присваивая но число от 0 до 15 или от 1 до 16 это не особо принципиально и после этого просто заменяем все строчки байка вырос на 0 все строчки hs единичку и так далее это лейбл школьники так мы делаем внутри каждого столбца то есть для всех вас классов будет числа от 0 до как дикое количество разных категорий это называют из

есть для всех вас классов будет числа от 0 до как дикое количество разных категорий это называют из уникальных значением этого столбца для иди кейсы для mac но и толстый стоит пусть для теперь что делаешь лучше бы так далее собственно это очень эффективно потому что тогда у нас каждая категория имеет разных плата для в случае не мире гаси у вас категория с большим номером и одинаковом весе будет иметь больший вклад модель чем и неодинаковым естественно это несколько сбивает слова модель но

иметь больший вклад модель чем и неодинаковым естественно это несколько сбивает слова модель но давайте попробуем как-то по-другому справиться с этой ситуации применим тоже не сложный подход на и зачастую не самый эффективный однако он среднем работать гораздо лучше чем вывел cadenza все называется эта штука ваншот кодирование или вам подходит и основной ее принцип на самом деле мы сейчас можем с вами увидеть из работы продемонстрированный на картинке у нас есть сами столбец содержащий хотите

с вами увидеть из работы продемонстрированный на картинке у нас есть сами столбец содержащий хотите реально соответствующий категориальный какой-то вертикальную признаку нашем случае этот след него есть три уникальных значения тридцать три категории это ред я выберем естесно что мы делаем помогаем давайте для каждой категории затем новую фичу то есть новый признак новый столбец наш таблица и после этого будет поставить единичку этом столбце если в этой строчке значение цвета совпадало в цепи

этого будет поставить единичку этом столбце если в этой строчке значение цвета совпадало в цепи категорий так сделан для каждой категории но one package за каждый клик по сейчас мы с вами сделаем важное замечание после этого теста что у нас случилось до 1 строчки на секрет был красный поэтому строчкой 100 потому что цвет был казнен этом остаться это у нас единичка сосна делаю вернули снова красный снова 100 делал море 10 греем барбара де важным замечанием это про которое я говорил будет на

снова 100 делал море 10 греем барбара де важным замечанием это про которое я говорил будет на самом деле столбец green нам здесь не нужен ну и любой дпс хватит для к категории на всех хватит к -1 столбца потому что как столбец будет авто заполняться если строчки все нули это то же самое что был бы еще один столбец у которого стояла единичка если вставочки есть хотя бы одна единичка то это то же самое что мы брали один столбец и в бар и и потом был ноль поэтому значение однозначно могут

то же самое что мы брали один столбец и в бар и и потом был ноль поэтому значение однозначно могут восстанавливаться пока -1 кант минус одному признаку когда как категории всего к почему нельзя выбросить два столбца потому что это не нельзя будет понять к минус 2 0 ом телесно где ставить единичку собственно принцип работы опять же привести вам на картинке краткое описание можно прочитать будет ноутбуки если что то осталось непонятно но думаю что здесь все хорошо час просто берем наш к тигра или

если что то осталось непонятно но думаю что здесь все хорошо час просто берем наш к тигра или признак и разбивает его она к -1 к -1 новый признак или на как признаков как на картинке физика это количество категория изначального признака в каждом каждым новым полезно типа стаями единичку если у нашего объекта было значение наши оптимального признак равно категории соответствующие новую признаку мы получили собственно единички 0 и естественно у такого подхода есть два минуса во-первых мы получили

получили собственно единички 0 и естественно у такого подхода есть два минуса во-первых мы получили очень разреженную табличку то есть это табличку в которой очень много нулей всего одна единичка каждый раз а во-вторых мы в действительности очень могли очень сильно увеличить количество признаков ну то есть смотрите нас с вами о столбца или кешен было всего 16 значений это означает что мы взяли один столбец великий шин и размножили в 16 раз или в 15 с ним использовать колеса динамика то есть

один столбец великий шин и размножили в 16 раз или в 15 с ним использовать колеса динамика то есть количество fitch которая у нас была в и начальных данных очень сильно увеличивается это бывает плохо для некоторых методов связано это с проклятием размерностях котором мы еще скорее все поговорим позже хотя опять же особо любознательны и любопытны могут уже сейчас про него прочитать поэтому некоторые дилемму если коротко то суть заключается в том что с увеличением размерности методы например

дилемму если коротко то суть заключается в том что с увеличением размерности методы например основанные на расстояниях начинают плохо работать и за сходимости к одному и тому же числу что же отлично давайте продолжим а именно совершим то самое по кодированию которое нам необходимо было сделать но уже направить чудесно за нас уже все реализовали и действительности есть функция в пандах дед dummies да кстати новые признаки которые создаются посредством кодирования называются здание фьючерс или

да кстати новые признаки которые создаются посредством кодирования называются здание фьючерс или данный вирус дальний вами манекен кукла из замена получается и вот эти дамми-переменные микасы и зашиты в названии get donis собственно с вами получаем даме сейчас и после этого мы просто склеиваем их с начальными данными кстати вообще метод get dummies он довольно хорош том плане что он очень хорошо настраиваемый можно указывать на колонке необходимое можно указывать префиксы можно указывать

настраиваемый можно указывать на колонке необходимое можно указывать префиксы можно указывать собственно процесс вот два царства топа что я говорил что можно отказаться от одной из переменных чтобы было не и скакать и говорит получалось не к новых дамми-переменных а именно к -1 но мы с вами так сегодня делать не будем ставим для большей наглядности именно искать его я бы не получать к новых переменных замечательно теперь сами получили то что называется в модели x то есть мы сами как этики не

замечательно теперь сами получили то что называется в модели x то есть мы сами как этики не конкатенировать самые численные данных той были изначально и преобразованы и искать их реальных данных дамми-переменная и на сайте часа хранилище изначальные данные чуть позже нам пригодится беремся несколько минус 1 и минус 1 это как раз у нас с вами не что иное как ниган потому что последний столбец то есть сафари давайте рассмотрим что нас содержится сейчас в иксе мы видим здесь появилось очень много

сафари давайте рассмотрим что нас содержится сейчас в иксе мы видим здесь появилось очень много нулей и вах вы видите на эти кантри и дальше назначения и вести куча нулей не лень или ювеналий она где-то стоят винчи тоже самое свой класс и диалоговым vocal говорим о его так далее мы видим что здесь много нулей и они дальше уходят многоточие а здесь одна единичка собственно давайте посмотрим на то сколько у нас стало признаку сколько было размена стена стала 104 то есть теперь она стала 114 что

сколько у нас стало признаку сколько было размена стена стала 104 то есть теперь она стала 114 что 404 столбца а изначально и было 14 то есть мы по сути увеличили ну примерно в семь раз количество признаков не сказать что это хорошо или плохо скажем так же что для некоторых моделей мы усложнили задачу таким образом потому простое вычисление стали более затратным однако в любом случае это эффективнее чем лейбл inhaling изначально осуждает потому что качество получается лучше но конечно

эффективнее чем лейбл inhaling изначально осуждает потому что качество получается лучше но конечно справедливо было бы говорить об эффективности как о соотношении качества и скорости но в этот раз мы именно сделал предпочтение в сторону качество ну и конечно мы сами обозначен игр как целевую переменную то есть просто столбе целый возьмем прошла его же преобразовали единички и нолики самые первые чеки нашего этого района 4 раздела ну и давайте ещё раз обратим внимание на формы xx origin

первые чеки нашего этого района 4 раздела ну и давайте ещё раз обратим внимание на формы xx origin напоминание отличается тем что вы все у нас совершено ваншот кодирования fx ориджине совершено собственную видим что количество стал то есть количество объект одна и та же тогда как количество столбцов то есть количество признаков она отключается примерно 7 раз что же напоминаю что для pipeline а мы сейчас совершили некоторые переплаты сянган дальше у нас идет по нашему но папа наш мауля деление

сейчас совершили некоторые переплаты сянган дальше у нас идет по нашему но папа наш мауля деление на тесты на 3 опять же есть замечательная функция которая это уже делает она содержится в escalera могла сollection это тренд с ты просто мы получаем таким образом экстра next с тот тайный кортес из многих сари и игрока мы указываем что вы хотим разбить соотношение один к четырем при чтобы четыре пятых выборки были тренинг срезом можно указывать ps says можно указывать еще много чего собственно вы

выборки были тренинг срезом можно указывать ps says можно указывать еще много чего собственно вы можете почитать документацию если хотите и также мы указываем рамбам state какое-то фиксированный чтобы деление которое происходило на совершалось никто воспроизводимым образом у меня и у вас и в том числе если мы захотим ещё каким-то образом разбить какие-то данные чтобы деления произошло таким же образом чтобы те же объекты оказались трейни в тесте что ж давайте поговорим про именно подбор

же образом чтобы те же объекты оказались трейни в тесте что ж давайте поговорим про именно подбор параметра то есть мы с вами сделали несколько процентов теперь у нас есть ну и разбили нашу выборку на a trained давайте мы даже вернемся картинки чтобы напомнить выше с вами находимся вот здесь то есть для того чтобы продолжить носами необходимо сделать что нам необходимо с вами обучить нет той модели по активизировать гипер параметры и выбрать нужную модель после чего уже с помощью тестовой

модели по активизировать гипер параметры и выбрать нужную модель после чего уже с помощью тестовой выборке вручить качества по модели ну что же давайте разберемся как что же означает оптимизировать гиберт правит мы с вами это будем делать некоторым логичный способ называется поиск по сетке то есть так поиск оптимальный гипер проектов по сетке сокращенно пояс по сетку этого мы с вами будем использовать derrick rose валидации давайте подробно обсудим представим что у вас есть некоторые модели

derrick rose валидации давайте подробно обсудим представим что у вас есть некоторые модели которая есть памятью о бойце эти проекты они зависят за не задаются заранее то есть до обучения и остаются констант нами во время всего обучения какие параметры которые задают обучение остаются константами называются hydra параметры и именно эти девять примет мы его не сами артемизии то каким образом иными словами мы не станем подбирать значения b и c такие чтобы мат получившийся модель там наилучшее

словами мы не станем подбирать значения b и c такие чтобы мат получившийся модель там наилучшее качество то есть обычная на обучающей выборке модель стая подобранными нашими директорами to mean альбино лице malt была дома в наибольшее качество среди всех других а боится на тех же обычный на тех же обучающие данных при валидации на тестовых данных собственно летом мы с вами будем использовать поиск по сети 3g хотя уже неоднократно сказал за последние пять минут как она работает вы сами задаем

по сети 3g хотя уже неоднократно сказал за последние пять минут как она работает вы сами задаем некоторую сетку параметр что это означает мы задаем несколько значений а несколько значений б не что значение c получается некоторых меня на эффекты после чего переливаем всевозможные комбинации он боится до слез на чем больше у нас будет и для каждой из них мы обучаем модели о том каким образом это дело мы сейчас поговорим для каждой из них вы не писаем образом выбирает обучая модели и после этого

мы сейчас поговорим для каждой из них вы не писаем образом выбирает обучая модели и после этого выбираем лучше но если мы просто обучали нашей обучающей выборке инвестировали на тесте это могло бы быть не совсем честно попер потому что мы могли бы за переобучаться и тогда не может быть речи о какой-то лучшие модели потому что модель так модель будет лучше так при меньших и обучилась от не очень хорошо поэтому как раз в случае grid сердце используете по все-таки используют ту самую кросс

очень хорошо поэтому как раз в случае grid сердце используете по все-таки используют ту самую кросс валидации который мы с вами использовали прибор без переобучения то есть когда мы с вами будем подбирать модель и вместо того чтобы на одном и том же наборе параметров есть гипер френд обучаться один раз мы сами будем обучаться как раз напоминаю идею к фолдов то есть у меня участника 5 или 3 раза если кармы кремль идти и у соединять наш результат не могу за кожей отбирать модели поэтому средний

если кармы кремль идти и у соединять наш результат не могу за кожей отбирать модели поэтому средний собственный to mars and против знака стоит на практике поможет функция ведь все архиве опять же сколько надо selection давайте напишем одну большую функцию которую будет делать следующие она будет искать те самые оптимальные который мы будем передавать некую сетку ней параметр если основном будет нам совершать поиски показывать некоторые график зависимости качество отзыва точное значение гибель

нам совершать поиски показывать некоторые график зависимости качество отзыва точное значение гибель памира и даем в эту функцию данные то есть x и y саму модель которым вы не фильме эти дальше уже название параметров и сетку эти два бобра метастаз на отвечает за такую шкалу на нам рисовать обычную ли логарифмическую ordinarily лоб и следует лишь рисовать график по умолчанию нас будет стоять там что мы делаем время давайте зададим сетку все кто задается с помощью обычного словаря или dict тонет

мы делаем время давайте зададим сетку все кто задается с помощью обычного словаря или dict тонет который состоит вниз название параметра и непосредственно значение то есть тонкие значения могут приниматься эти правильности сна здесь мог быть может быть план на м1 например great 1 и так далее там пара на два и так далее это то есть и будет вас несколько но мы с вами пока для учебных целей рассмотрим один но опять же передать боже несколько параметров дальше мы с американцы используют то самое

один но опять же передать боже несколько параметров дальше мы с американцы используют то самое тот самый заимка шины имеет саша серии если мы с вами посмотрим документации мы увидим здесь довольно подробное описание значит что у меня обязательно же не передать у меня обижать можно передавать непосредственно модель когда мы подбираем диппер параметры например линейный грейси можем подбирать регуляризация или логоритмика ближайших соседей по 45 такой как раз получается гипер охранника потому что

или логоритмика ближайших соседей по 45 такой как раз получается гипер охранника потому что мука задаем до обучения и он и все время всего обучения далее мы передаем сетку сетка имеет как раз вот такой вид противопо живет а может быть несколько рынков в нашем случае там был всего один проекта мы сами задаем стратегию кросс валидации 100 тыс валидации на самом деле на самом деле может быть не обязательно комфорт я не бывает разное но в нашем случае мы с вами будем использовать именно комфорт и

комфорт я не бывает разное но в нашем случае мы с вами будем использовать именно комфорт и для того чтобы передать комфорт на самом деле достаточно написать эссе и равное комната число это число раз будет отвечать числу кобылка фол в принципе вместо себе как можете увидеть вот здесь я демонстрирую севи здесь может быть либо нет либо consolidation джон риттер о интервал собственно который определяет непосредственно стратегия кросс валидации и туда можно придать напиться генераторе крот и

непосредственно стратегия кросс валидации и туда можно придать напиться генераторе крот и преследуется вопрос облигационная об этом можно почитать подробнее непосредственно документации скалярных для наших целей да и на самом деле очень часто вообще в принципе хватает команда несчастна сюда очень часто придут именно число 3 или 5 scanning сосна это памятника по которой мы будем отбирать то есть модели тыс именно вот эта метрика будет вычисляться средний среди наших там 5 экспериментах на 1 стал

тыс именно вот эта метрика будет вычисляться средний среди наших там 5 экспериментах на 1 стал да не и вот лучше вот метрика а здесь будет указано как лучшая модель f1 мера эта метрика для бинарной классификации и и качественно ближе кинется муж собственно and jobs это количество потока параллельных который будет запущен для того чтобы совершать ваш пояс поскольку модель могут обучаться параллельно и независимо друг от друга можете задействовать здесь возможности вашего компьютера если она вас

и независимо друг от друга можете задействовать здесь возможности вашего компьютера если она вас мощный -1 означает задействует все возможные потоки но не удаляйтесь компьютер немножко будет в это время недееспособен так сказать да особенно не смотрели кита достаточно сложная и по метро вербовку нас говорит о поскольку часто нужно писать unica top лагера нет из некую информацию на самом деле когда нам тысячи вот это вы создали только весь класс после этого от действительности мы никаким образом

нам тысячи вот это вы создали только весь класс после этого от действительности мы никаким образом не передали ему начал обучаться какие данные нужно использовать для того чтобы перебирать ведь модели и это делается как асфальт плане как вы все моделям в сказал не то есть у вас есть эта модель а вот теперь нам нужно ее обучить то есть вы перри вы вызываете функцию fit указывая ей данные и попеременно то есть пиксель после чего в сирии моду вас будет есть внутренний внутреннее поле сибири зал то

то есть пиксель после чего в сирии моду вас будет есть внутренний внутреннее поле сибири зал то можно увидеть много чего интересного целая табличка мне есть например сидни скоро с пони не его и вертолет ну и собственно все что мы здесь с вами занесу и мы здесь с вами нарисуем здесь просто отрисовка графика я не буду на этом подробно останавливаться есть какие-то вопросы возникают вы можете написать об этом на самом здесь обычная подставка графика не слишком и отрисовываем здесь мы еще будем

об этом на самом здесь обычная подставка графика не слишком и отрисовываем здесь мы еще будем заполнять пространство между средней ошибкой и плюс-минус 2 не прошу вашей между средним склонить плюс-минус 2 ошибки отлично то есть плюс минус отклонения ботинок попробуем наши функции на практике для этого мы с вами покупок перебираюсь параметры для двух следующих моделей насчитать метод к ближайших соседей а имена классификатор на основе к ближайших соседей который лежит в и скалярный босс и скаляр

а имена классификатор на основе к ближайших соседей который лежит в и скалярный босс и скаляр сезон 3 сертификата на основе решающего дерево который фраз лежит в модуль искали am3 давайте сделаем это в одном цикле просто чтобы показать наглядности потому что мы записали общую функцию чтобы записать дважды назови модель даниил как один параметр для нее указываем значение для этого поэта указаны возможные значения то есть так называемая сетку и указываем непосредственно гадать все нашего графика

значения то есть так называемая сетку и указываем непосредственно гадать все нашего графика то есть какой шкале указывает ваше не абсциссу основной для грека ближайшие соседи будут передают количество соседей 8 разных значений от 4 до 30 и возьмем логарифмическую акциз у и в случае с идея мы будем сами рассматривать максимальную глубину диапазоне рано воды и собственно запускаем наш алгоритм как вы видите нам выводится некоторой информация что для пятно это первые то есть для этого их соседи

вы видите нам выводится некоторой информация что для пятно это первые то есть для этого их соседи этот лог ниже будет 2 у нас выводится информация потому что поскольку стратегия консолидации нас of алтай пока равна 5 то для каждого из восьми кандидатов хорошо играем 8 разных значений к 14 прошу прощение за коллизии заказе когда я говорю постоянно веду к исков о результатах и консультация тараска имел бы дальше соседи перебираем разное количество соседей от 4 8 разных . есть 8 разных кандидатов

имел бы дальше соседи перебираем разное количество соседей от 4 8 разных . есть 8 разных кандидатов моделей нас получается и каждый из них обучаем 5 раз дало нам когда мы подсказывает просто людей шин ведь архиве fit что всего будет 40 обучений и нам говорится что вот у меня на моем локальном компьютере совершается 8 потоков естественно это в два раза больше умереть а потому что каждый ведро у нас делится на физическое летуаль на ну и мы видим что вот за 14 секунд взгляд с лишним на все

у нас делится на физическое летуаль на ну и мы видим что вот за 14 секунд взгляд с лишним на все закончить видим немножко странные статус увеличение количества соседей у нас качество падает внимательный слушатель мог заметить еще почему это суть почему так произошло для того чтобы ответить на этот вопрос мы проведём некоторые манипуляции чуть позже пока что так сказать оставим этот вопрос открытым не заметим что что то сейчас не так в текущем графики мы также смотрим на поиск по сетке для сна

не заметим что что то сейчас не так в текущем графики мы также смотрим на поиск по сетке для сна решающего дерево из мы обучаем на 5 фондах 29 кандидаты всего 145 обучений и тоже совершили за 17 понятно что будет здесь у нас модели сложнее чем алгоритм как джаешу соседей мешающие дерево это могло быть сильно дольше или если данный была сильно больше обучение продлевают дольше чем сложнее модель чем дольше происходит обучение одной модели тем больше естественно происходит plays classic потому

чем дольше происходит обучение одной модели тем больше естественно происходит plays classic потому что он просто обучает много раз вы видите 45 об этом случае создавайте сделали выводы опять мы можем сравнить сами количество что при любом наше назначение время как бы дальше соседей сильно хуже чем решающий день в экране 9 единичной длины личный и кажется двойки а в основном мы можно найти некоторые оптимальное значение глубины до лишающие дерево ну то есть в районе семи восьми замечательно

оптимальное значение глубины до лишающие дерево ну то есть в районе семи восьми замечательно давайте теперь вспомним с вами что такое беден и связи с этим вспомнить что такое получение напоминаешь случайный лес это некоторая модификация be king потому что добавляется дополнительный случайность на место дтп и чтобы не реализовывать выйдет самим мы воспользуемся случайным лесами рассмотрим на качество собственно красота мы с вами здесь и сделаем здесь нам придется руками написать некоторые поиск

собственно красота мы с вами здесь и сделаем здесь нам придется руками написать некоторые поиск по сетке конечно можно было сделать это и не так но поскольку очень удобно обучить сразу куча деревьев и брать просто 1 несколько директ вук они обучаются независимо а можно сделать так чтобы обучение у нас произошло один раз вместо того чтобы обучать случайный лес несколько раз поэтому лучше напишем руками а не будем использовать две чаши сирии и собственно можно наглядно посмотреть каким образом

руками а не будем использовать две чаши сирии и собственно можно наглядно посмотреть каким образом это происходит я думаю что гром на этом остановиться нет смысла поскольку вся идея как раз заключается в том что мы каждый раз обучаем дерево вот волокна цикле нам в офис каждый раз мы с вами обучаем дерево которое прошение лес на каком-то префиксе степи все больше и больше известно случайные деревья посещали сами не склонных переобучению почти поэтому мы ожидаем на графике увидеть что страшно

посещали сами не склонных переобучению почти поэтому мы ожидаем на графике увидеть что страшно количество деревьев нас будет расти качество давайте это возник на графике и действительности мы видим штучкам большее количество деревьев тем у нас лучшего качества но как мы видим начиная с какого-то момента качество выдающегося незначительно гетто района 40 x 50 понятно что вот этот уровень когда мы говорим что разница защите незначительно определяете из каких-то практических соображений касательно

что разница защите незначительно определяете из каких-то практических соображений касательно задач в общем случае конечно говорить такое нельзя ну и как мы видим наш backing то есть ну наш модификация дадим грань именно случайный лес с головой побила качества как его таки нашего алгоритма для системе давайте подумаем что ж не так все-таки была в нашем случае suede поковыряешь у соседей это довольно частая ошибка которой допускается в решении задач машинного обучения и дело в том что метка

частая ошибка которой допускается в решении задач машинного обучения и дело в том что метка ближайшие соседи работает с некоторыми метриками 5 состояние за проблема метрика в том что они изначально не нормирован и поэтому у нас получается очень эффективный алгоритм давайте мы отправим от нормировать наши данные гарнировать наши признаки после чего снова поделать тот же алгоритм избежать увидеть мир соседней посмотрим как изменилось качество да это мы с вами будем использовать стандарт съели

мир соседней посмотрим как изменилось качество да это мы с вами будем использовать стандарт съели стандарт скелет совершает преобразование следующего витка вам и читает средний и делит на стандартное отклонение сводя к такому единому центрированным интервалу а все признаки но и работает примерно следующим образом мы создаем объект обучаем этот объект и ну то есть stuffit есть фильтр и дальше вызываем метод transform но поскольку можно сделать fit хамством тоесть methods with constant этой

вызываем метод transform но поскольку можно сделать fit хамством тоесть methods with constant этой посиделок и последовательно прошу обратить внимание что мы обучили скейлер на тестовый айпишник тренд на обучающей он преобразовали троих бранное под с помощью обычного скейлера над рейгана но и тест данные то есть мы позже преобразуем с помощью скейлер обычного на тренинг данных обратите внимание как мы обучить fit вызвано это экстрим и экспресс мы преобразуем тоже с помощью скейлер который

как мы обучить fit вызвано это экстрим и экспресс мы преобразуем тоже с помощью скейлер который обычно и кстати почему это нужно делать обязательно так потому что в нам случае у нас совершается утечка данных из теста тестера преобразуйте некоторым образом данное по тесту то когда алгоритм начнет работать на мерные данными он будет иметь некоторую информацию о том как вы хоть и имеют нашем тана и то есть хотя предсказание не должен ничего знать о сектор ставрида они должны работать как у склона

то есть хотя предсказание не должен ничего знать о сектор ставрида они должны работать как у склона вы даете в черный ящик один объект и он пересказывает подаете в один девчонки ящика и на гнев кофе он указывает для n объектов ничего не знаю после каждой из них он не да не знает какая информация других амину самом объекте но если вы скармливаете скейлер у с нефти статистики по x тесту то естественно что ваш алгоритм некоторым образом может узнать о стандартном отклонении среднем для теста выбор

что ваш алгоритм некоторым образом может узнать о стандартном отклонении среднем для теста выбор таким образом получить никто информацию о данных такая штука называется утечка данных то есть это дей толик иногда еще когда то же самое происходит с целевой переменное говорят thanked и так далее в общем чтобы такого избежать обязательно мы совершаем преобразование только с помощью статистик на обучающих бы поэтому обучение на премии после чего сделали трансформ и тройные теста ну и давайте

обучающих бы поэтому обучение на премии после чего сделали трансформ и тройные теста ну и давайте поставим то есть что у нас получилось вот уже заебали похожие на что-то реальное график но мы видим что качество в methodical лишь соседи даже старт миров как оказалось нашей задачи в нашей даче хуже чем не мешающий дерева и их случайного лес заключать на давайте попробуем улучшить наши качества с помощью долгих других некоторых методах в том числе я попробую использовать он сам ливане модель если

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

внутри одной какой-то модели но и нужно как бы подобрать модель которое будет наилучшим образом реагировать на наши данные то есть давать наилучшее качество давайте оценим итоговое качество мы возьмем с вами 50 деревьев сколько мы видим что здесь происходит прекращается значительный рост качества с дальнейшим увеличением количества деревья возьми сами 50 деревьев и обучаемся и посмотрим на финальное качество поэтому с вами будем использовать метрик урока лук то есть это репера перед крестик и

качество поэтому с вами будем использовать метрик урока лук то есть это репера перед крестик и on быков есть площадь по графикам кривой которая отвечает вот звонили северокорейцы наперёд и тестик должен об этом можно почитать в том что надо как можно просить приступ площадь должна быть как можно больше а максимальная площадь единичка давайте отобразим собственно мы видим что у нашего леса качество на 3 недели . причем хорошо уже обучился над на строения а на тесте я качеством аль день качество

на 3 недели . причем хорошо уже обучился над на строения а на тесте я качеством аль день качество довольно высокая вот этот ящик наш зеленая чита это просто упасите случайно классификация настраивая построенной это а у каждый 0 5 я для наглядности собственно и вот мы видим кривую оранжевая отвечающие за тестами и он у нас равен 9 10 ну чуть больше на 7000 но самом деле довольно хорошее качество давайте подумаем что можно было еще сделать во первых можно было искать не только численные параметры

подумаем что можно было еще сделать во первых можно было искать не только численные параметры но и category например полагает на ближайшие соседи можно было искать в метрику в и ты в решающей деве можно ближайшем дереве можно было искать это и ветвление в опять же решающие деле можно было искать по повысить искать другие ранят то есть не только в те кто интегрально еще все остальные на пятках в центре говорили зации естественно искать можно не только по одному параметру но сразу по многомерные

говорили зации естественно искать можно не только по одному параметру но сразу по многомерные сетки изначального века с вами об этом говорили но нужно понимать что чем больше вас параметров по каждой из осей тем больше их произведения сладостям большее количество вариантов не нужно забывать что вы еще и не по одному разу обучаетесь а по столько раз сколько требуется достаток асфальте нации и зато можем чтобы перебирать все точки можно передать некоторые случайные точки на беседки как называется

можем чтобы перебирать все точки можно передать некоторые случайные точки на беседки как называется randomizer или gate random search он работ примерно также как грейтесь архиве и собственно зывается дома и серсея в этом же ноутбуки он уплатил все вместе с 2ch серии можете его посмотреть у него выбирается количество точек которые нужно перебирать после чего просто играются ftp нужно количество точек из них выбирается лучше что ж давайте попробуем применить sticking то есть ту самую идею

точек из них выбирается лучше что ж давайте попробуем применить sticking то есть ту самую идею ассамблеи у меня связана с генерацией не предмета модели имеет собственного помощь или это призрак чтобы избежать переобучение в этом случае мы будем с вами использовать опять же идею просто лида цена к fold это случае на энфилде чтобы не было калязин наконец более солидно инфарктов и для предсказания на конфликте мы будем обучаться на всех стать легкой напоминаю кроме этого самого палка как сказать

на конфликте мы будем обучаться на всех стать легкой напоминаю кроме этого самого палка как сказать ответ будем но в этом одном выбранном к там полке собственно такую функцию отдельно можно такое посуду отдельно можно позже реализовать не она есть та же выскажу selection называется кого свалкой такое поведение предсказание полным-полна давайте напишем вычисление собственно шемет фичи и хотим ну то есть понятно штамп мы хотим нет образом улучшить качество то есть мы хотим увеличить эффективность

есть понятно штамп мы хотим нет образом улучшить качество то есть мы хотим увеличить эффективность с помощью 107 относительно случайного леса для этого мы с вами как раз используем послал предик но и случай если нашего метода нет есть наши модели нету методы прийти к раба то мы с вами еще обработать на исключение используем простуде что ж давайте рассмотрим снова случайный лес и давайте совершенством то есть мы добавим среди наших базовых моделей у нас будет логоритмика ближайших соседей на 30

то есть мы добавим среди наших базовых моделей у нас будет логоритмика ближайших соседей на 30 соседи логистическая регайся который мы за им портили из линейных моделей с конором два случайных леса один с максимальной глубиной 3 выводить с максимально 7 по 50 деревьев и одно решающий день в глубины гос секс на мы добавили это все в наши базовые модели после чего мы сами запускаем наше вычислениями то фичей на базовых моделей и создадим нашу мета модель станок обесточен панелях будет нас

то фичей на базовых моделей и создадим нашу мета модель станок обесточен панелях будет нас логистическая регрессия который мы уже склонен как раз место фичи которые мы посчитали вот беру ячейки 86 опасность измельчаете вы собственно обычно ношу эта модель и посмотрим на непредсказуем на трение на прессе теперь посмотрим на качество на самом деле мы увеличили на 7 тысячных нашей качестве ну на 7000 71 если быть точным с помощью сеттинга то есть вот на тест тест а вот у нас был 09 номер семь

7000 71 если быть точным с помощью сеттинга то есть вот на тест тест а вот у нас был 09 номер семь теперь стал 090 78 получается что танцем ливане модели поможет улучшить качестве как увидим мы их использовали довольно ну то есть послание со случайным лесом мы использовали и служение вес идти-то более простые модели самое сложное здесь модель конечно случае с отлично давайте теперь купоном всего пару star падите качество которое мы довольно усердно искали с помощью подбора или группами про с

пару star падите качество которое мы довольно усердно искали с помощью подбора или группами про с помощью sticking поста за используем готовые приборке для бустинга собственно будем использовать потом использует изгибу опять же можете установить модуль весь у вас его нет есть и чек с комментариями для этого собственно эксперимент gustin все делается довольно просто просто говорим создаем бусинка модов из капусты и казбек весь файл и создаем и на 500 деревьев и обучаемся все больше ничего не

модов из капусты и казбек весь файл и создаем и на 500 деревьев и обучаемся все больше ничего не делали такого подлоге ничего и рисуем график то есть это уже не считается это все просто график все обучение было здесь даже а быть нулевым все обучение вот здесь создание модели обучения это предсказание смотрим на качество и мы побили наше качество причем значительно повели относительно предыдущих улучшений мы победили качества на песок то есть настало на 96 же без лекции вы знаете что помимо

улучшений мы победили качества на песок то есть настало на 96 же без лекции вы знаете что помимо текста виллиан гуси cпасибо есть еще один busting эти другие реализации резидентного кустиков он все есть градиент бусин изыскали до познавательные любопытные могут попробовать в этом же мог будьте по им платить долги и бусинки и посмотреть на их качество и я очень рекомендую смотреть не только на качественную еще и на скорость который будет выполняться каждый из бусин гав как вы видите здесь у меня

еще и на скорость который будет выполняться каждый из бусин гав как вы видите здесь у меня за 20 секунд эта бусина посчитался light grey goose ник посчитал спасибо буквально за одну или за 2 секунды и давайте наконец посмотрим на поста котбус это отечественный производитель кабуз это индекс ни один кот не пострадал при создании как густо это просто 5g category августе категорий ковбойским сокращение от категорий ну и из документации как будто мы знаем вот такую замечательную фразу никогда

от категорий ну и из документации как будто мы знаем вот такую замечательную фразу никогда пожалуйста не используйте время и просто ваншотом calling это влияет как на скорость обучение так и на качество синтезирующие дело в том что такие названия как густо очень хорошо умеет работать с идеальными признаками сам поэтому мы с вами будем использовать тот самый низ origin прямо с вами сыграть сохранили изначально еще до того как совершили вам подкалиберами единственно что необходимо будет сделать

изначально еще до того как совершили вам подкалиберами единственно что необходимо будет сделать это указать те индексы которые были кости реальны ну и сами не давайте мы с вами запустим обучения в остальном здесь у нас совпадает с семантикой предыдущих бустинга обществе езды boost когда мы осмотрели и рассмотрим качеством тот же самый код связано с графиками и мы лучшие наше качество еще на две тысячных что в принципе хорошо то есть мы добили качество 093 ноль целых где 5320 и снова четыре

тысячных что в принципе хорошо то есть мы добили качество 093 ноль целых где 5320 и снова четыре десятитысячных из одного что в принципе довольно показывать довольно высокое качество для наша бинарная классификации и еще то о чем взять на стоит упомянуть потому что принципы подбора диппер параметр в котбус устроим по-своему у них есть своя функция грицевич опять же я оставляю здесь ссылку чуть выше вы можете ее посмотреть вот ссылка на документацию как будто она довольно хорошо написано там

выше вы можете ее посмотреть вот ссылка на документацию как будто она довольно хорошо написано там довольно все понятно и она работает замечательном он просто здесь можно лучше настроиться интерактивной модельки графике можно смотреть и я запустил здесь есть все для правильного и гуляли зации тест для реализации и смотрел что у нас будет получаться может в сеть график можете подбирать разные графики получите что нужно можете вместо лука рассматривать в туристический moss в общем это такая штука

получите что нужно можете вместо лука рассматривать в туристический moss в общем это такая штука довольно интересно чтобы в неё потыкаться на сегодня все большое спасибо что слушали если возникают какие-то вопросы обязательно пишите и не забывайте пайпа не машинного обучения в машинном обучении и в своих домашних работах обязательно перетяжек несет такого же предсказать шаблона не обязательно делать все одно и то же просто помните что у вас обязательно сначала идет работа с данными потом

делать все одно и то же просто помните что у вас обязательно сначала идет работа с данными потом деление данных на обучающие тесты в выборку потом никто работа с моделями и тестирование качества всем пока

Введение в нейронные сети. Часть 1. История развития Deep Learning

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=ZfXpX8tMg-w! This is most likely caused by:

Subtitles are disabled for this video

If you are sure that the described cause is not responsible for this error and that a transcript should be retrievable, please create an issue at https://github.com/jdepoix/youtube-transcript-api/issues. Please add which version of youtube_transcript_api you are using and provide the information needed to replicate the error. Also make sure that there are no open issues which already describe your problem!

Введение в нейронные сети. Часть 2. Механизм обратного распространения ошибки

итак как же строить нейронные сети и как вообще говоря понять что там происходит но для начала давайте начнем с простого и вернемся к основу вот линейная модель вообще говоря увидеть перед собой логистическую регрессию я думаю с ней замечательный знаком у нас есть некоторые признака описание объекта затем мы с вами используем линейное преобразование у которого есть некоторые параметры он и грибы при нем некоторые линейная функция активации нелинейную 7 в данном случае и получаем вероятность

при нем некоторые линейная функция активации нелинейную 7 в данном случае и получаем вероятность принадлежности допустим этого объекта к классу 1 ну потому что у нас есть некоторая функция потерь крым можем считать по факту и тула глаз или же кросс на тропе и бинарное и мы можем оптимизировать скажем так параметры наши модели используя просто-напросто градиентные методы чтобы подобрать оптимальную омегу б чтобы решать задачу наиболее хорошо но возникает вопрос а что делать в таких случаях вот

омегу б чтобы решать задачу наиболее хорошо но возникает вопрос а что делать в таких случаях вот пример типично неразделимы выборки у нас с вами зеленые точки находятся в пространстве обновленном красными точками и решить эту задачу с помощью линейных моделей с помощью той же самой логистической регрессии не представляется возможным но нельзя с помощью линейной модели разделить людей неразделимы выборки подходов к решению задачи можно придумать много можно призывать допустим деревья деревья

выборки подходов к решению задачи можно придумать много можно призывать допустим деревья деревья уметь строить не линию разделяешь поверхность а нет как сделать можно позвать svm использовать какой-нибудь ядро которое допустим позволит нам перейти в другой пространству gem скалярным произведением и в нем выборку уже будет ли неразделимо пример вы можете видеть краски справа можно придумать новые признаки для наших данных и опять же в этих новых признаках неплохо описать решение и получить

признаки для наших данных и опять же в этих новых признаках неплохо описать решение и получить решение но проблем чем помимо наверное деревьев и каких-то их ансамблей все остальные подходы требуют участия человека и человеческого день человеческого труда в том чтобы придумать новые признаки подобрать ядро и так далее это требует времени и сил а когда мы говорим про построение эффективных информативных моделей нам бы хотелось все таки максимально избавиться от какого-то рутинного труда по подбор

моделей нам бы хотелось все таки максимально избавиться от какого-то рутинного труда по подбор оптимальной структуры и так далее и максимально это все автоматизировать так вот нейронной сети это как раз и есть те самые механизмы и методы которые позволили автоматизировать подбор признаках пространств я все говоря авто визировать построение информативных признаков их описаний наших объектов что же как это работает давайте еще раз посмотрим на нашу логистическую регрессию например у нас есть

же как это работает давайте еще раз посмотрим на нашу логистическую регрессию например у нас есть некоторое описание наших данных в каких-то признаках затем у нас возможно есть некоторый ручной отбор признаков мы говорим эти признаки важны эти неважные так что вот эти оставляем эти выкидываем потом берем все попарно между ним и взаимодействия какие-нибудь и перемножения и до этих признаках строим нашу допустим линейно модель вот это третий блок после чего предсказываем нашу модельку это

строим нашу допустим линейно модель вот это третий блок после чего предсказываем нашу модельку это результат обучаем параметры модели и так далее но при этом отбор признаков происходит руками на основании просто наших решений это не очень хорошо автоматизируется так вот давайте автоматизируем не только подбор параметров классика тары которую видим справа но и подбор оптимальных признаков или их комбинаций то есть просто напросто наших первичных трактор будет параметрически зависеть будет про

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

логистической регрессии применяемые к исходным данным применяем линейное преобразование затем нелинейно какую-то активации например тот же самый 7 зачем нам не линейно активацией час поговорим после чего над этими признаками новыми уже использовали логистическую регрессию можно задать вопрос а зачем нам 2 логистические регрессии подряд а давайте скажем что это линейно модель скажем так она отображает из 10 измерений вот 50 то есть у нас есть 50 различных ленин комбинации сходных 10 признаков

из 10 измерений вот 50 то есть у нас есть 50 различных ленин комбинации сходных 10 признаков после чего мы помимо этого еще каждую эту линейную комбинацию отдельно просто-напросто покрываем 7 этой сверху и она из условного р переходит 01 зачем нам нужна а затем что после этого у нас на третьем блоке опять видим логистическую регрессию который по сути является линейной модели и линейная комбинация линейных комбинаций если не на комбинации я слизывал с вами примере не ранее на преобразование

линейных комбинаций если не на комбинации я слизывал с вами примере не ранее на преобразование здесь-то линейной комбинация не линейных комбинаций уже не является линейной комбинации сходных признаков или говоря по-другому вас вот этот шаг по сути что делает переходит из исходного признака про раз в какое-то другое с помощью использовать их то линейных преобразований а затем еще не линейно преобразовывает от самое пространство тоже самое что делал без вмс используем другого hydra только едрово

от самое пространство тоже самое что делал без вмс используем другого hydra только едрово подбирать руками а здесь в руками подбираете функции активации но зато все остальные преобразования делаются модели автоматически и в итоге что получается у нас есть вот этот блок который во первых и метки параметры внутри линейно модель а во-вторых от результатов работает в блока напрямую зависит решение задач потому что потому что это логистическая регрессия ну а теперь все понятно у нас логистическая

задач потому что потому что это логистическая регрессия ну а теперь все понятно у нас логистическая регрессия может обучаться с помощью допустим того что сам градиентный спуск может но при этом а я им ее результаты зависят от того что пришло и на вход логистической регрессии дифференцируема это линейно модель дифференцируема 7 это дифференцируема вся функция дифференцируема а значит градиентные методы все так же работают и все также могут помочь нам найти не только значение параметров для

методы все так же работают и все также могут помочь нам найти не только значение параметров для логистической регрессии но и значение параметров для линейной модели давайте этим займемся и для этого нам краски понадобится механизм дни обратного совершения ошибок градиентного спуска и так далее перед собой видите на экране типичную нейронную сеть на самом деле просто нейронная сеть у которой есть один скрытый слой по сути даже два года давайте скажем что едва и также можно обратить внимание на

один скрытый слой по сути даже два года давайте скажем что едва и также можно обратить внимание на то что даже нейронная сеть которая даже логистической регрессии является просто неровно сеть в который скажет слоев нет мы с вами сразу берем исходное признака описания и отображаемого в итоговый результат просто нейронная сеть мало и как бы малых размеров которые нету скрытых слоев поэтому нейронные сети это не какие-то волшебные коробки смоги внутри это просто-напросто несколько дифференцируемых

сети это не какие-то волшебные коробки смоги внутри это просто-напросто несколько дифференцируемых моделей которые помогают друг другу работать лучше и здесь и еще раз оговорюсь именно в структуре нейронных сетей в том что не все дифференцируемы кроется их сила что ж давайте разберем как же правильно строить нейронной сети и как вообще все это дело обучать для этого нам понадобится во-первых какие-то линейные преобразования понимаю про них мы только что сказали amiga x плюс b вот линейно

какие-то линейные преобразования понимаю про них мы только что сказали amiga x плюс b вот линейно преобразования во вторых пятне линейные преобразования зачем но чтобы каскад линейных преобразований не столкнулся в одной линейное преобразование можете сейчас прямо поставить ее на взываем досуге проверить если вы примените сначала вот а бега 1 умножить на скобочку амико 2x + b 2 скобочка закрылась плюс бы один можете переписать у вас получится что это то же самое что какая-нибудь amigos крышкой

плюс бы один можете переписать у вас получится что это то же самое что какая-нибудь amigos крышкой x плюс b с крышкой ну что линии на операции к линейной комбинации линейка 12 есть линейно комбинация все поэтому нам нужно не линии нелинейные преобразования краски чтобы этого не происходило и есть множество различных функций активации давайте разберем из них основные ее на самом деле их не так уж много и в сегодняшней лекции почти все из них мы покроем во первых это уже знакомый вам 7 до о чем 7

и в сегодняшней лекции почти все из них мы покроем во первых это уже знакомый вам 7 до о чем 7 на плохо на самом деле замечательно функция активации который позволяет нам число из erp перевести в 01 полезно удобно быстро и всем привычно это было давным-давно логистической регрессии во вторых есть гиперболический тангенс который на первый взгляд да все функции вы можете видеть и справа на первый взгляд он от 7 до отличается мало чем и да по сути это есть просто от колерованный 7 до теперь она не

он от 7 до отличается мало чем и да по сути это есть просто от колерованный 7 до теперь она не от 0 до 1 от -1 до 1 из плюсов теперь у него центрированный l put то есть у него от воздействия от -1 до 1 ул и значений в третьих есть какая-то сторона функция которая максимум от 0 до а и тут внимательный слушатель этот вопрос погодите вы требовали только что чтобы функции были дифференцируема максимум штук не дифференцируема вон там она нарисована это угол какой то он в нуле производными ну хорошо

штук не дифференцируема вон там она нарисована это угол какой то он в нуле производными ну хорошо а теперь давайте вспомним зачем нам это нужно на самом деле мы еще не разбирались своим б проб нам нужно с вами что нам нужно будет с вами в каждой точке скажем так оценить градиент для наших параметров если вы посмотрите на ту же самую лилу а именно так называется функций максим 010 а в обнаружить что при значении х больше 0 производная 1 при значениях меньше нуля производная 0 а в нуле вы можете

при значении х больше 0 производная 1 при значениях меньше нуля производная 0 а в нуле вы можете просто определить производным тогда в каждой точке вы можете почитать и производную по честному к то что вы ее знаете а гладкость функции мы на самом деле не требуем поэтому почему нет но есть множество различных функций типа софт флюс и луи так далее вы видите их на экране они используют не так часто но тем не менее и так функции активации нам нужны только для того чтобы получить не линейное

часто но тем не менее и так функции активации нам нужны только для того чтобы получить не линейное преобразование над нашим исходным при никами что ждем с ними дальше а дальше строить из них неровно сеть сейчас мы с вами видим некоторые понятия тут в увидите их огромное количество то что потом мы будем просто использовать шаг за шагом их прорабатывать разбирать во-первых в нем понятие слой слой будет некоторые структурные единицы наши нейронной сети которого как правило включает себя некоторое

некоторые структурные единицы наши нейронной сети которого как правило включает себя некоторое преобразование линейно как правило ну или не совсем линейное который может быть представлен в виде ленину например тот же самый ленин слой которому с вами только что под линейно преобразования и как правило в слой есть некоторые функции активации например та же самая 7 докторов ведь и здесь и так слой it некоторые структурные единицы которых раз приучать себя линейное преобразование свертки можно тоже

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

выделять отдельным своем и выходной слой это итоговое представление данных например если говорить и просочилась кации то это распределение вероятности по классам если задача регрессии только просто возможность число или вектор из чисел если это векторная регрессе и так далее и мы разберём с вами различные типы слоев например свершенные слои разберем рекурентные нейронные сети подумаем про то как можно работать графами возможно даже скором времени так что это все будет интересно и главное

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

что вот нас линейных слой с активацией какой-то иногда говорят что нас ленин слой и после него активация какая то есть функции активации применяется к результатам какого-то линейного или там не совсем линейного преобразования которые были перед ним и они всегда следуют друг за другом но вот как на этом графике чел что сделали потом примере активацию и есть карп достаточно большое количество различных функций активации 7 до тангенс ярилу много других были даже некоторые экзотические работы где

функций активации 7 до тангенс ярилу много других были даже некоторые экзотические работы где предлагали использовать какие-нибудь другие нейронные сети фуршет функции активации а почему бы нет но в целом книг правил требование одно мы должен уметь почитать производной в любой точке тогда но с более менее все устраивает плюс есть достаточно другие специфичные ограничения будь то ограниченная область значений но допустим от 0 до 1 от -1 до 1 чтобы не было каких то проблем с работой с выходами

значений но допустим от 0 до 1 от -1 до 1 чтобы не было каких то проблем с работой с выходами сайт функции активации но об этом поговорим соответственно при работе с рекурентные неровностями и в дальнейшем и все это многообразие все это великолепие обучается с помощью б про похищен который на самом деле является просто модным словом для производной сложной функции все а теперь мы краски с вами перейдем непосредственно к бак тропу посмотрев на те ящики которые бывают и так вот простой пример вкг

непосредственно к бак тропу посмотрев на те ящики которые бывают и так вот простой пример вкг 16 на самом деле серьезность идей которые в 2014 году показал отличные результаты на все том же и начинаете уже значительно превосходящие результата алекс нетто но тем не менее он был первым поэтому он также вошел в истории потому что он в принципе привел к такому всплеску его фишка раскурить здесь слои input слой 1 слой это то самое исходное представление наших данных затем несколько сварочных слоев

input слой 1 слой это то самое исходное представление наших данных затем несколько сварочных слоев про свёртка поговорим чуть позже если коротко нехорошо работа с изображениями учитывая пространственную структуру зодиаке этапу линги про них тоже будем говорить в лекции по свертком снова свертки снова полинга тра-та-та и в конце мы краски свей видим с вами несколько фацет пациента линейной слои facere потому что фули коннектор и в конце мы своими не краски софт макс который является функций

facere потому что фули коннектор и в конце мы своими не краски софт макс который является функций активации итоговой чтобы получить итоговое распределение над распределение вероятностей надменными классов но обучать такую сеточку еще вроде как понятно но они бывают глубже а бывают еще глубже это уже google нет а вы gaga все-таки по май 2013 года надо проверить и все эти сеточки обучаются с помощью обратного распространения ошибки как же это работает сейчас этим и займемся для этого нам

с помощью обратного распространения ошибки как же это работает сейчас этим и займемся для этого нам понадобится бак про повешен который является производной сложной функции и пример можете видеть на слайде а далее мы с вами разберём шаг за шагом его на нескольких простых примерах пока что пожалуйста вспомнить штука производной сложной функции опять же пример на экране и of завист от икса и от игрека и давайте скажем что мы цель зависит от f a thought of который является допустим z мы хотим

игрека и давайте скажем что мы цель зависит от f a thought of который является допустим z мы хотим посчитать производную lpx то есть нам придется посчитать дельта дизайна до z pdx принципе даже с точки зрения базового как бы записывание это операции мы видим что до z можем сократить del pdx и есть dtx я надеюсь вам знаком производной сложной функции и теперь мы с вами свободно переходим к механизм обратного распространения ошибки и поговорим о том как обучать нейронные сети хоть большие хоть

обратного распространения ошибки и поговорим о том как обучать нейронные сети хоть большие хоть маленький а теперь давайте вспомним в целом про механизм градиентной оптимизации и поймем зачем нам вообще нужны градиенты и причем здесь частные производные и так градиенты это направление в котором функция растет наиболее быстро это направление наискорейшего возрастание нашей функции если нас есть функция потерь то мы бы хотели знать направление скорейшего убывания то есть анти градиент для этого

потерь то мы бы хотели знать направление скорейшего убывания то есть анти градиент для этого нам нужны все частные производные по параметрам потому что посчитав их мо краски знаем направление градиента и соответственно анти градиента просто минусом направлены в другую сторону поэтому если у нас есть некоторых функций потерь допустим л и мы хотим знать как нам поменять значение икса нам нужно посчитать по частную производную точнее производную del dx но и напрямую не зависит от икса она зависит

по частную производную точнее производную del dx но и напрямую не зависит от икса она зависит от него только через z какую-то другую не знаю случай другое представление поэтому можно почитать частным производной по z затем производную dtx это и будет д-р pdx а это нам нужен краски для того чтобы посчитать градиент и знать в какую сторону нужно сдвинуть значение наших параметров чтобы уменьшить значение функции потеря это и есть наша цель теперь когда мы с вами поняли что именно происходит

значение функции потеря это и есть наша цель теперь когда мы с вами поняли что именно происходит давайте проиллюстрируем это на совсем простом примере например на вот такой простейший функция f от x и y и z где пусть x и y и z это некоторые параметры то есть по ним по всему будем считать производная и функциями такой вид x плюс y умноженное на z давайте сразу скажем что x + y у нас объединяется в некоторую куб промежуточную краски величину и в целом все наши функции можно представить нектаров

в некоторую куб промежуточную краски величину и в целом все наши функции можно представить нектаров граф вычислений теперь мы хотим посчитать df потоку dfp dex dfp y z а соответственно матче канадец под и клуб потому что это же некоторые промежуточные вычисления что же производная coupe x мы и так знаем это единичка coupe y тоже потому что производные сумма идут все понятно д.ф. кодеку опять же понятно это zdf падает атаку тоже понятно и производное произведение давай теперь посчитаем вот эти

понятно это zdf падает атаку тоже понятно и производное произведение давай теперь посчитаем вот эти три величин для начала мы уже знаем с вами что у нас есть df показать это штука этот куб тогда чтобы посчитать до f показать давайте начнем с самой f поэтому дпдз pdf pdf то есть 1 на dvd z то есть что здесь будет правильно тройка потому что к уровню тройки теперь посчитаем до f по деку потому что она нам понадобится дальнейшем это z z у нас равен чему правильно -4 поэтому здесь надо будет -4

она нам понадобится дальнейшем это z z у нас равен чему правильно -4 поэтому здесь надо будет -4 остался тверь почитать производной d ft xf по y ну как это делать мы понимаем этот dvd que nada que pdx и то есть двп dx то же самое для y и виду того что эти частные производные дички что у нас будет стоять правильно минус 4 и минус 4 что же поздравляю вы только что продифференцировать методом обратного из про стране ней ошибки и of по x и y и z вы спросите зачем нам это нужно что вообще здесь

из про стране ней ошибки и of по x и y и z вы спросите зачем нам это нужно что вообще здесь происходит давайте сделаем тоже самое но на более простом примере на более привычном нам примере не более простом потому что он будет добра сложнее воспользоваться теми же самым методами но для логистической регрессии выявить на экране и логистической регрессии то есть та самая нейронная сеть просто не дольше скрыт слов нет она сразу отображает признаки в ответ и формула увидите на экране а представление

скрыт слов нет она сразу отображает признаки в ответ и формула увидите на экране а представление ведь дикого графа вычисления вы видите опять же на экране и теперь у нас здесь с вами есть как параметры так и некоторые значения данные по которым нам во многих случаях и перед производное то не понадобится например по иксу мы в целом можем посчитать производные потому что почему бы нет но для того что x это какие-то данные мы поменять их не можем поэтому толку хотя на самом деле с помощью краски

что x это какие-то данные мы поменять их не можем поэтому толку хотя на самом деле с помощью краски производных по данным можно много чего делать интересного на это будет в дальнейшем уже разобрано ну например там kinder sorel так считать так далее итак давайте посчитаем производную но по-честному и в то же время второй раз по честному через мид обратно распространение ошибки на чем опять конца у нас есть f от x которая краски является по сути и fotomix является вот это вот сложной функций и

у нас есть f от x которая краски является по сути и fotomix является вот это вот сложной функций и теперь у нас есть внизу в знаменателе один плюс экспонента минус что-то мы знаем что производные экспоненты это экспонента производная линейной функции это коэффициент k раз таки а x это просто а ну и так далее давайте пойдем с конца в начало мы знаем что в конце у нас стоит в самой правой точке d f pdf поэтому там будет один правильно идем дальше дальше нас функция деление 1 делить на x еще раз

f pdf поэтому там будет один правильно идем дальше дальше нас функция деление 1 делить на x еще раз обращу ваше внимание 1 делить на эти смысле всего аргумент который пришел 1 делить на аргумент хай у нас производная 1 делить на x минус 1 делить на x квадрат верно поэтому двигаемся дальше проходим назад и теперь у нас получается -1 делить на 13 7 в квадрате умноженное на чтоб надев pdf на один получили медленно столь 53 теперь у нас там стоит производная минус 0 53 двигаемся дальше + 1

один получили медленно столь 53 теперь у нас там стоит производная минус 0 53 двигаемся дальше + 1 производная плюс 1 будет просто единичкой значит минус 0 53 двигается влево точно так же следите за происходящим а еще лучше поставьте на паузу и самостоятельно посчитать это мусорить на ответ получается минус 0 53 ровно потому что это df pdf на df по условно д степ минус 1 надо ставить минус 1 по 2 минус т д с т плюс 2 и так далее двигаемся дальше экспонента производные экспоненты это экспонента

минус т д с т плюс 2 и так далее двигаемся дальше экспонента производные экспоненты это экспонента поэтому нам придется минус 0 5 3 умножить на значение которое было экспонента что будет правильно я минус 1 на но минус 0 53 почему ми е в минус 1 спросите вы душ на вход экспоненте пришла минус единичка ok двигаемся дальше умножение на менса единицу придет просто к смене знаков у нашей производной теперь эта 02 теперь на сумма сумма как мы уже заметили просто-напросто раскидывает производные

теперь эта 02 теперь на сумма сумма как мы уже заметили просто-напросто раскидывает производные направо и налево одинаково поэтому вниз у нас пойдет что то же самое -02 вот просто 02 наверх тоже пойдет 02 теперь нас опять сумма опять про дублируется а теперь умножение по сути умножение просто перебрасывание производной друг другу с умножением на необходимое число но если посмотрите x умножить на y f равно x умножить на y dfp dx будет игры dfp деррик будет x ну что ж поэтому здесь у нас будет

y f равно x умножить на y dfp dx будет игры dfp деррик будет x ну что ж поэтому здесь у нас будет минус 2 и 0 39 а внизу она соответственно будет ну пример тоже сам тут вы можете задать вопрос погодите а почему у нас при умножении двух на 0 2 получилась 039 но вообще говоря это реальный пример поэтому там краски ошибка округления просто-напросто флотов до 2 знака если запятой это нормально это не связано с нейронными сетями это скорее про связан с визуализацией и так я надеюсь сейчас вам стало

связано с нейронными сетями это скорее про связан с визуализацией и так я надеюсь сейчас вам стало понятнее как работу до проб мы с вами только что шаг за шагом продифференцировать просто-напросто логистическую регрессию прошли с через секунду через все остальное но что самое интересное математику сломать нельзя поэтому мы могли сделать абсолютно тоже самое по счетам сразу производную допустите бой вот она и получить на выходе краски то же самое число 0 2 который мы могли почитать с вами и

бой вот она и получить на выходе краски то же самое число 0 2 который мы могли почитать с вами и напрямую поэтому и точнее шаг за шагом через b проб или напрямую знаю просто что и такая производная сложной функции и именно так это и происходит неровностях потому что вместо того чтобы считать это все шаг за шагом нейронные сети состоят из каких-то некоторых полезных функций удобных линейные преобразования 7 дэрилу тангенс так далее для которых мы знаем аналитическое выражение производной как до

7 дэрилу тангенс так далее для которых мы знаем аналитическое выражение производной как до 7 тоже там и а поэтому мы можем сразу знает значение которые пришли функции на вход и саму функцию почитайте производные тоже пришло это что мы знаем что и пришло справа другого конца виде производных тоже поэтому бог проб работать достаточно быстро и эффективно позволяя краски эффективно обучать что важно все параметры сразу то есть вы можете обучить параметр на 10 слой девятом восьмом седьмом и так

все параметры сразу то есть вы можете обучить параметр на 10 слой девятом восьмом седьмом и так далее используя один и тот же механизм и до тех пор пока сей дифференцируем вы можете делать пока не надо если пакостить не кончится другое дело что там начнут задавать градиенты там из них проблемы с неустойчивостью и так далее с этим краски будем бороться в дальнейшем например с помощью нормировки батч нормы и так далее но пока что это был просто бог проб и давайте посмотрим на него ещё раз но

батч нормы и так далее но пока что это был просто бог проб и давайте посмотрим на него ещё раз но теперь в матричной форме потому что как правило к при переходе от простых чисел к матрицам начинается вопрос начинает вопрос а что вообще происходит там вот все просто было все понятно а как на матрицу по матрица дифференцировать давайте ещё раз посмотрим пусть у нас y это некоторый вектор функция которая зависит от векторного опять же input а как f1 и f2 и так далее f от x и пускай она так со

которая зависит от векторного опять же input а как f1 и f2 и так далее f от x и пускай она так со зависит вообще максимально простым образом y равно x но таким образом тогда мы хотим продифференцировать до y по индексу тогда будет краски вектор из этих самых производных на bf1 от x на блеф 2x так далее то есть депо dxf 1x dpd xf-2 tix и так далее или расписать сказки матричной форме виду того что x это тоже вектор это dpd x1 f1 от x на первом месте dpd x2 f1 от x и так далее почему потому что

x это тоже вектор это dpd x1 f1 от x на первом месте dpd x2 f1 от x и так далее почему потому что вектор x у нас вектор производная по вектору будет что дефекта производные числа по вектору будет эффект виду того что у нас здесь получается y это вектор x то вектор производные вектор по вектору уже будет что правильно матрица выявить и саму prime самого правого края и это справа ведь краски общую форму записи потому что мы здесь пока не учитываем что y равно x если же мы учим этот факт и

общую форму записи потому что мы здесь пока не учитываем что y равно x если же мы учим этот факт и пересчитаем то получим совершенно простое преставление это будет просто диагональной matreshka единичка все форум ки выйти здесь на экране шаг за шагом поэтому посчитать производную вектор по вектору можно абсолютно свободно обладает базовыми навыками дифференцирования но при этом я прошу вас обратить внимание сразу на простую скажем так зависимость производной скаляру по скаляру будет скаляр

внимание сразу на простую скажем так зависимость производной скаляру по скаляру будет скаляр произвольно скаляры по вектору будет вектор производная вектора по скаляру все равно будет вектор производная вектора по вектору будет уже матрица но если продолжишь дальше производные матрицы по вектору можете подумать сколько будет измерений правильно 3 производные вектор по матрице тоже 3 земли не производной матрицы по матрице уже будет четыре измерения но и так далее в целом если вы хотите

не производной матрицы по матрице уже будет четыре измерения но и так далее в целом если вы хотите разобраться чуть глубже в матричном дифференцирование опять же можно сходить по ссылке там есть целая методичка по матричном дифференцированию от стэнфорда и на русском языке кому тоже есть что давайте двигаться дальше мы с вами разобрались как работает быть прав и теперь мы с помощью бог право краски можем посчитать направление в котором нужно менять каждый параметр потому что мы с вами посчитали

можем посчитать направление в котором нужно менять каждый параметр потому что мы с вами посчитали частную производную функции потерь по каждому из параметров а что теперь дальше делать ну правило обновлению ведь и справа сверху тоже сам границ спуск ново значение параметра это предыдущая минус learning рейд назначение краски производна значение гранит почему - потому что хотя монти градиент что такое лирник рейд величина градиентного шага и до от нее учительница зависеть от еще один гипер

что такое лирник рейд величина градиентного шага и до от нее учительница зависеть от еще один гипер параметр если градиент шаг слишком большой все разойдется потому что просто напросто наша сеть начнет болтаться из стороны в сторону с огромной силой если шаг слишком маленький то сходиться это все будет до скончания времен если шаг слишком большой носите не расходится она не сможет вся кисть к минимуму но представьте себе какой-нибудь ущелье asset ним не умеет ходить маленькими шагами она умеет

но представьте себе какой-нибудь ущелье asset ним не умеет ходить маленькими шагами она умеет только прыгать влево-вправо она перепрыгнет ущелье каждый раз она не может попасть внутрь но если learning райт оптимальный to wait a few плавник упадет падет падет упадет красиво и все усугубляется еще и тем что как правило помимо того что у нас лёрн грейт надо подбирать функция потери у нас не такая красивая и гладенькая точнее и реализация потому что мы считаемся как правило бачив и вылета на

красивая и гладенькая точнее и реализация потому что мы считаемся как правило бачив и вылета на примерно как видите справа поэтому она еще достаточно шумно и нужно использовать различные методы по избавлению от шумов по получению более устойчивой оценки градиента для получения эффективной оптимизации ну самый простой намеренно мент который вы уже знаете это стохастический градиентный спуск по бокам почему стохастический потому что если нас выборка в 10 миллионов объектов высчитать для всех 10

почему стохастический потому что если нас выборка в 10 миллионов объектов высчитать для всех 10 миллионов объектов градиент на всех 10 миллионов объектов градиент когда дорого если у нас решает grain только на одном объекте объект может быть просто шумовым бесполезным мы получим неправильные градиент и обновим модели поэтому выбираем что цели не берем некоторую случайную выборку объектов на них считаем градиенты и обновляем нашу модель вот этот случай под выбор два под выборг объектов и

них считаем градиенты и обновляем нашу модель вот этот случай под выбор два под выборг объектов и является почем тот я прошу вас обратить внимание случайно под выборку объектов из всех можно выбирать только если объект не упорядочит если объект упорядоченны то вы должны еще и сохранять структуру скажем так последовательности то что иначе быть как странно но об этом говорим в дальнейшем пока что просто предлагаем что у нас все объект независимы не упорядочены по этому можно брать как он выборка

предлагаем что у нас все объект независимы не упорядочены по этому можно брать как он выборка иди все довольно что же это был обзор бак проппа методов градиентом оптимизации крайне быстро и потому что я думаю вы с ними уже знакомы и всегда конечно можно к ним обратиться их освежить в памяти обратившись кучи-кучи методичек видео разборов семинаров и лекций и так далее а мы двигаемся дальше и сейчас будем говорить про функции активации

итак добрый день дорогие друзья меня зовут юлиер веков и в этом видео мы с вами поговорим подробно про полна связно нейронную сеть про то как она устроена и про то как на ней работает алгоритм обратного распространения в частности мы будем говорить про полна связано нейронную сеть для задачи классификации итак план нашего с вами видео сначала мы поговорим про модель нейрона более подробно опишем полна связную нейронную сеть для задачи классификации поговорим про топки у нее слои есть скрытые

полна связную нейронную сеть для задачи классификации поговорим про топки у нее слои есть скрытые слои и последний слой он нам будет особо интересен кроме того поговорим про обучение этих самых полна связных нейронных сетей обсудим какая может быть функций потеря для задач классификации и затем поговорим как для конкретный пал на создание ровной сети работает алгоритм бред про париж у нас в этом гонять ее будет много всяких формулу много всяких математических концепций которые зачали на прошлых

ее будет много всяких формулу много всяких математических концепций которые зачали на прошлых занятиях в общем я думаю что будет довольно интересно край мере постарались довольно подробно в этом видео всю проблематику осветить и кропотливо все эти формулы разобрать и так а для того чтобы нам удобнее было рассуждать о глаза неровности давайте сначала определимся стой задачи который мы будем решать мы будем решать с вами задачи классификации рукописных цифр которая стоит следующим образом нам на

мы будем решать с вами задачи классификации рукописных цифр которая стоит следующим образом нам на вход подаются черно-белое изображение размером 8 на 8 и на каждом изображении нарисовано 1 из 10 цифр получается всего 10 классов имея имеем задачу классификации изображений на 10 классов и естественно нашем распоряжении как всегда задача классификации имеется обучающая выборка размеченных изображений то есть ну скажем несколько тысяч изображений с известными классами ну чтобы писать модель

то есть ну скажем несколько тысяч изображений с известными классами ну чтобы писать модель нейронной сети нам необходимо выполнить два шага это означало описать модели собственно как она будет работать и затем поговорить про такое и обучать вот сейчас мы обсудим как описывается модель полна созданий ровной сети который кстати изображено здесь на картинке и так ну начнём мы естественно судовой нейрона взглянем на него более подробно что у нас здесь есть основной объект в нейроне это тело этого

взглянем на него более подробно что у нас здесь есть основной объект в нейроне это тело этого нейрона да вот такой кружочек у нейрона есть входы в данном случае у нейрона нашего три входа на вход ему подается никто и числа эти числа в данном случае 10 7 и 3 и входы нейроны мы обозначим как вектор x и расписано как x1 x2 и тогда алекс и данном случае на внутреннем на картинке кроме того у каждого ребра входящего есть никто вес в данном случае веса это 051 и 0.1 и мы обозначим веса через w равно

ребра входящего есть никто вес в данном случае веса это 051 и 0.1 и мы обозначим веса через w равно вектор w один дубль в два и так далее w вот ну и наконец как работает наш мир он по сути дела он вычисляет скалярное произведение векторов x и w то есть выход этого нейрона равен w 1 умножить на x1 плюс w 2 умножить на x 2 + и так далее дубль военные умножить на x ценная это как я уже сказал как скалярное произведение w и x после этого когда нейрон вычислил эту сумму в данном случае кстати на 12

произведение w и x после этого когда нейрон вычислил эту сумму в данном случае кстати на 12 . еда можете сами проверить посчитать не он спрашивает верно ли что наша сумма больше чем какое-то фиксированное число в данном случае это фиксирует число равно 10 и если ответ да то наш нейрон возвращает единичку если ответ нет то наш мир он возвращает нолик вот ну это такая наивная модель нейрона где по сути дела функция активации является пороговый и в когда мы строим реальные нейронные сети в том

по сути дела функция активации является пороговый и в когда мы строим реальные нейронные сети в том числе и полна связаны и мы естественно функции активации должны выбрать какую-то другую произвольную не пороговую в частности потому что они не дифференцируема а какую-то более прилично скажем так и очень часто в качестве такой функции активации выбирается собственно функция сигма in и вот она перед вами мы уже говорили катка прямые в предыдущем видео она вычисляется по формуле сигма т равна 1

вами мы уже говорили катка прямые в предыдущем видео она вычисляется по формуле сигма т равна 1 делить на 1 плюс i степень минус t и вот перед вашими глазами график этой функции заметьте что этот график симметричен относительно точки с координатами ноль , ноль . 5 относительно точки это график симметричен итак друзья таким образом мы полностью описали наш нейрон и в том числе указали как конкретно может выглядеть указали конкретные функции активации которые там они ровно можно соответствовать

может выглядеть указали конкретные функции активации которые там они ровно можно соответствовать но часто очень 7 еду в принципе использует на практике но еще чаще особенно для задачи фикации изображений используют функцию живу и так ну вот теперь когда мы разобрались с вами подробно с одним нейроном давайте теперь поговорим про многослойный персептрон что же такое многослойный персептрон это собственно простейший архитектура нейронной сети где каждый слой является полна связанным то есть

собственно простейший архитектура нейронной сети где каждый слой является полна связанным то есть каждый слой нейронов связан со всеми нейронами из предыдущего слоя но мы видим что если посмотреть на любой слой нашей картинки то все нейроны будут связаны между собой то есть у нас получается такой двудольный граф полный дурдоме граф между двумя слоями нерона ну и на выходном слое у нас есть 10 выходных нейронов в этих выходных нейронов скапливаются некоторые числа и эти числа мы интерпретируем

нейронов в этих выходных нейронов скапливаются некоторые числа и эти числа мы интерпретируем как классы которым относится наше изображение то есть в данном случае если мы решаем задачи классификации с бровями 10 классов то скажем если на вход нам выдается картинка на которой нарисована четверка то на выходе мы рассчитываем что наибольшее значение скопится на четвертом неронии вот вы видите что этот четвертый нейрон отмечен зеленым и мы получаем что нейронные сети на выходе выдает нам ответ 4

этот четвертый нейрон отмечен зеленым и мы получаем что нейронные сети на выходе выдает нам ответ 4 это вот наша идеальная ситуация когда на картинке рафис на 4 и на выходе у нас собственно стоит 4 все прекрасно вот но давайте посмотрим более подробно на эту картинку опишем как работает нейронная сеть пускай x1 и так далее гсэн это входы наше нейронной сети если изображение 8 на 8 то n в данном случае равно 64 потому что 8 умножить на быть прошу продолжаем вот рассмотрим произвольный нейрон

случае равно 64 потому что 8 умножить на быть прошу продолжаем вот рассмотрим произвольный нейрон последнего слоя он собственно действовать ровно так как мы описали картинку для одного нейрон у него есть выход y это который вычисляется по формуле 7 до примененная к скалярному произведению w&t , x плюс еще добавочка бы это и это ну сдвиг сдвиг по сути дела да это так называемое байс на нашем не роль здесь w&t это вектор весов этого нейрона то есть это вектор в котором вектор-столбец которым

роль здесь w&t это вектор весов этого нейрона то есть это вектор в котором вектор-столбец которым написаны собственно числа которые стоят вот на этих красных отмеченных легок а б с индексом это это свободный член то есть ну сдвиг до который определяет к чему именно мы будем применять 7 то есть мы все байду применяем не просто к скаляр на произведению ок скалярному произведению со сдвигом вот но если это мы запишем в более такой компактной форме то что у нас будет получаться 7 это от w&t , x

если это мы запишем в более такой компактной форме то что у нас будет получаться 7 это от w&t , x скалярное произведение плюс быт здесь на картинке в эти формулы быт knit но правильная форма написано здесь до сигма от скляр напряжения w&t , x плюс бы это вот мы и теперь если мы будем считать что функция сигма еды применённые к вектору это все равно что функция 7 до поэлементно применено к каждой компоненты то мы можем записать что выходной вектор равен функции сигма 7 до от вектора состоящего

компоненты то мы можем записать что выходной вектор равен функции сигма 7 до от вектора состоящего из скалярных произведений габариты , x плюс бы это вот ну а как мы можем проще записать вектор скалярных произведений это просто на самом деле матрицы дубль вы умноженное на x вот давайте поймешь такое w&w это матрица которой записаны все vesa нашего слоя нейронной сети но давайте посмотрим на карту ю строчку например накатаю на последнюю до строчку этой матрицы что в ней записано не записано веса

ю строчку например накатаю на последнюю до строчку этой матрицы что в ней записано не записано веса который соответствует к атому нейрону выходного слоя то есть все эти веса которые были отмечены красным вот ну и соответственно эти веса мы можем записать вот такой компактной форме в качестве строчки w с верхним индексом коты и у нас получается что матрица состоит просто иска строчек дубль высоким индексом 1 w с верхним индексом 2 и так далее дубль в с верхним индексом кадр ну тогда

высоким индексом 1 w с верхним индексом 2 и так далее дубль в с верхним индексом кадр ну тогда действительно можно убедиться что если б равно b1 b2 этот элемент а вот верхняя форма вода она справедливо действительно у нас такое выражение сворачивается в сигма от w x плюс b где w и x развиваются маточное произведение матрицы w умножить на вектор x по сути дела матрицы применённый к виктору x но отлично давайте пойдем дальше что у нас получилось да мы описали один слой наши неровности полна

но отлично давайте пойдем дальше что у нас получилось да мы описали один слой наши неровности полна связанный полностью описали на самом деле и давайте посмотрим теперь какие параметры будут в целом нашей нейронной сети это все матрицы каждого скрытого слоя w1 и w2 и w3 если последний слой на последнем слове у нас получается ну скажем если здесь и здесь у нас 100 нейронов допуская корона сотни и на третьем слое нас тоже спланируем но последнем слове у нас 10 нейронов есть получается что

и на третьем слое нас тоже спланируем но последнем слове у нас 10 нейронов есть получается что последние матрица w3 имеет размерность 100 на 10 и так же у нас есть три вектора свободных членов это b1 b2 и b3 вот получилась у нас такая вот совокупность параметров нашей нейронной сети которой изображено на картинке ну и вот промежуточные слои устроены и весьма естественным образом давайте посмотрим что происходит на последнем стоит на последнем слое у нас есть 10 нейронов каждый из которых

что происходит на последнем стоит на последнем слое у нас есть 10 нейронов каждый из которых соответствует одному из классов нашего изображения на то есть классы 0 1 2 3 далее 9 но дело родах у нас пока еще не было применено функция активации у нас здесь скопились просто скалярные произведения в вектор из предыдущего слоя умножить на вектор весов соответствующего нейрон ну то есть получились какие-то числа ведь произвольные вообще говоря да они не обязательно принадлежат отрезку от нуля до

какие-то числа ведь произвольные вообще говоря да они не обязательно принадлежат отрезку от нуля до единицы то есть они пока что не могут быть интерпретированы как вероятности более того они не просто могут быть больше единицы они принципе могут быть даже отрицательных ну вот возникает вопрос как эти самые выходы нейронов на последнем слое преобразует вероятности класса то есть как меру принадлежности класса преобразовать в вероятность подвижности классу мер отличать от вероятности тем что меры

класса преобразовать в вероятность подвижности классу мер отличать от вероятности тем что меры может принимать произвольное действительное значение а вероятность это все-таки число от нуля до единицы и так давайте посмотрим пускай и вот эти самые y0 y1 и и так далее greek 9 это наши выходы предпоследнего слоя вот посмотрим что нужно теперь с ними сделать чтобы они преобразовались вероятности как правило для этого действия мы используем специальную функцию активации которая называется софт макс

правило для этого действия мы используем специальную функцию активации которая называется софт макс и она устроена следующим образом но давайте у нас есть y но и так далее greek 9 что можем с ними сделать чтобы они были больше похожи на вероятности но для начала неплохо бы наверно сделать их всех не отрицательными или лучше положительными как мы это можем сделать мы можем применить любую функцию которая все чисто действительно переводят только в положительное одной из таких функций является

которая все чисто действительно переводят только в положительное одной из таких функций является функций экспоненты то есть мы из чисел y0 и так далее y 9 сделали числа е степень y0 и так далее есть степени y david хорошо а теперь эти числа положительно экспонентов сюда положительно но пока что они не дают в сумме единицу и такой же проблема давайте сделаем так чтобы они в сумме давали единицу это можно сделать вот например таким преобразованием которое называется нормирование собственно да мы

можно сделать вот например таким преобразованием которое называется нормирование собственно да мы берем все эти числа и делим их на сумму есть ирине y 0 и плюс есть степень y1 перестали есть степени green 9 и тогда уже вот эти 10 чисел сумме естественно дают единицу но мы можем это легко проверить если просуммировать это в числитель нас будет и степени y 0 плюс есть и книги где эти знаменателя то же самое поэтому уже вот эти числа можно интерпретировать как вероятности принадлежности к классам

же самое поэтому уже вот эти числа можно интерпретировать как вероятности принадлежности к классам к нулевому классу к первому классу и так далее к девятому классу итак наш следующий этап это обучение многослойная принцип трона молодцы лаэр персептрон для задачи классификации что мы имеем мы проходимся по элементам обучающей выборке предположим что у нас есть некоторое изображение на котором нарисована к цифры скажем 4 и мы в обучающей уборки знаем что действительно на нем изображаться ифриты

к цифры скажем 4 и мы в обучающей уборки знаем что действительно на нем изображаться ифриты мы берем этот объект эту картинку и прогоняем его через нейронную сеть и на последнем слове и неровной сети сформировались вероятности b равно 20 и так далее p9 поэтов на спектр вероятностей того что на нашем изображении нарисовано то или иное число скажем по 4 это наша искомая вероятность того что на картинке нарисована число 4 ну и таким образом мы хотим сделать по 4 как можно больше да чем больше по 4

нарисована число 4 ну и таким образом мы хотим сделать по 4 как можно больше да чем больше по 4 тем лучше получается нашу нейронную сеть справилась нашей задачи и аналогично мы хотим сделать для всех картинок не только для этой одно естественно мы будем по очереди прогонять наша картинка через нейронной сети для каждой мы хотим как можно большую соответствующим вероятность ну естественно есть там будет вы словно скажем цифры любое произвольное и то мы хотим чтобы это было как можно больше и

там будет вы словно скажем цифры любое произвольное и то мы хотим чтобы это было как можно больше и наша цель в обучении это подобрать матрицы w1 и w2 и w3 а также свободные члены b1 b2 b3 таким образом чтобы максимизировать произведение вероятностей правильной классификации по всем элементам обучающей выборке поэтому мы хотим максимизировать как я уже сказал произведение этих вероятностей и мы имеем на самом деле очень сложную задачу чистый оптимизации у нас есть некоторые выходы которые очень

на самом деле очень сложную задачу чистый оптимизации у нас есть некоторые выходы которые очень сложным образом зависит от входов и также они зависят от весов w1 и w2 w3 вот и естественно эту задачу оптимизации в явном виде выписать мы можем далеко не всегда то есть конечно если мы постараемся для этой конкретной сети мы и забежим но в общем случае до более сложных архитектур эту задачу оптимизации записать будет почти невозможно но благо это делать в явном виде не нужен и так пускай у нас есть

записать будет почти невозможно но благо это делать в явном виде не нужен и так пускай у нас есть некоторый икс игрек это элемент обучающие уроки от это это вектор параметров нашей нейросети то есть это это совокупность w1 и w2 w3 b1 b2 b3 что у нас ним слоя образовались вероятности принадлежности к классам вот и мы хотим как и случае логистической регрессии оптимизировать нашу кросс энтропию категориальные кроссандра пи для логистической регрессии это было бинарная кросно терапия для случая

кроссандра пи для логистической регрессии это было бинарная кросно терапия для случая много кого со своей классификации мы хотим оптимизировать но я классовую категориальные кросс энтропию которая так же известна как у ло gloss то есть для каждой пары x y мы хотим оптимизировать сделать как можно больше вероятность псм y от x потому что как раз таки с индексом y от x и то вероятность того что мы приняли правильное решение до скажем если бы его был 4 то мы бы хотели максимизировать b 4 от x вот

приняли правильное решение до скажем если бы его был 4 то мы бы хотели максимизировать b 4 от x вот ну или иначе говоря мы хотим минимизировать минус логарифм по y от x но если мы хотим оптимизировать произведений вероятностей то есть мы хотим сделать его как можно большем как я уже говорил то тогда мы наверное хотим оптимизировать сумму логарифмов вероятности потому что логарифм произведения это сумма логарифм и так итоговой задач оптимизации получается следующее мы суммируем по всем объектам

сумма логарифм и так итоговой задач оптимизации получается следующее мы суммируем по всем объектам обучающей выборке этот самый la gloss от y , p от x , ты-то где x это вход от это это вектор параметров и теперь делим это все на размер обучающей выборке и хотим найти такой вектор параметров ты то чтобы это значение было минимальным из всех возможных вот такая у нас получилась итоговой задачи оптимизации такая функция потери на которой мы теперь будем обучать нашу модель ну естественно давайте я

такая функция потери на которой мы теперь будем обучать нашу модель ну естественно давайте я сразу оговорюсь что если речь идет какую-то другую задачу несдачу классификации по можно оптимизировать и другие функции потеря например если мы хотим решать с помощью нейронной сети сдачи регрессии то мы оптимизируем ну например минскую ртр то есть среднюю квадратичную ошибку но давайте мы вернемся к нашим баранам к нашей задачи классификации и так как мы будем оптимизировать нашу нейронную сеть мы это

баранам к нашей задачи классификации и так как мы будем оптимизировать нашу нейронную сеть мы это естественно делаем с помощью алгоритма стохастического градиентного спуска а именно мы на каждом шаге нашего алгоритма выбираем никакой батч то есть никто и пачку буквально до примеров из обучающей выборке пачку картины берем вычисляем производную нашей функции потерь то есть логоса по всем весом нейросети да то есть для каждого до каждого каждого веса которой написано любом этом ребре и еще до

нейросети да то есть для каждого до каждого каждого веса которой написано любом этом ребре и еще до каждого свободного члена мы хотим вычислить производную нашей функции потерь по этому весу эта функция потерь сама зависит и от входов и от весов нашей нейросети ну поэтому это производная это производное сильно будет нетривиально вычитаться каким-то образом и после этого мы в соответствии с алгоритмом стохастического где этого спуска хотим обновить viso в направлении анти градиенты то есть по

стохастического где этого спуска хотим обновить viso в направлении анти градиенты то есть по сути дела вычесть значение лямда умножить на градиент нашей функции потери по всем весом и таким образом сделать шаг где этого спуска обновить веса и продолжать это алгоритм пока нейронная сеть не сойдется пока качества и и 1 скажут с той выборке не будет оптимальным возможно проблема заключается в том что вычислить эту самую производную функции потеть по всем весам нейросети это сдача очень это реально

вычислить эту самую производную функции потеть по всем весам нейросети это сдача очень это реально и поэтому нам необходим какой-то эффективный алгоритм который будет вычислять производные функции по всем весом нейросети и это алгоритм собственно тот самый алгоритм б corporation про который мы говорили предыдущем видео ну давайте его разберем в применении к нашей конкретный пола связно нейронной сети давайте сначала вспомним правила производной композиции а мы видим что у нас есть некоторые

сети давайте сначала вспомним правила производной композиции а мы видим что у нас есть некоторые некоторые объекты x1 и x2 можно считать даже что это нейроны можно считать что тут один из слоев нашей нейронной сети и это второй слой это там допустим хоть последниц но в данном случае это всего лишь какие-то абстрактные переменные переменные x1 x2 переменные y1 и y2 которые зависят от x1 x2 как сколько с помощью функции f датой получается что f от x 1 x 2 от вектора x это собственно вектор y

сколько с помощью функции f датой получается что f от x 1 x 2 от вектора x это собственно вектор y равный эрик один , y2 вот ну и союз в свою очередь у нас есть некая переменная z которая зависит от y1 и y2 с помощью функции же то есть z равно же от y1 и y2 или иначе говоря же от вектора y ну и наша цель это вычислить производную функции z по входам x1 и x2 то есть как бы если мы знаем производную функции же и знаем производную функции f то есть мы знаем что происходит на каждом из слоев по

функции же и знаем производную функции f то есть мы знаем что происходит на каждом из слоев по отдельности мы хотим теперь пора бросить этот градиент в обратную сторону и применить собственно наш замечательный вид на b profession но давайте сделаем нашем примере давайте посмотрим на производную д z под и что каиды spdy это просто по определению вектор из частных производных dz тпа д y1 от y1 и y2 и дзт y2 от y1 и y2 просто вектор из частных производных ну давайте тогда посчитаем с помощью

и y2 и дзт y2 от y1 и y2 просто вектор из частных производных ну давайте тогда посчитаем с помощью правила композиции производную dz тпа dx один скажу это bizet вода y1 надо y1 под x1 до первым способом z зависит от x1 через y1 и вторым способом z зависит от x1 через y2 то есть еще нам нужно прибавить д z под dy-2 частная производная на частную производную dy-2 pd x1 красным ну давайте тоже самое теперь выпишем для dvd x 2 все остается аналогично но вместо производные игреков по x1 у нас будет

теперь выпишем для dvd x 2 все остается аналогично но вместо производные игреков по x1 у нас будет производная y of по dx 2 теперь если мы теперь заботимся вопросом как записать вектор из частных производных то есть газет по dx то у нас есть вектор d zx1 и d z воды x2 и я напомню что мы эти значения же вычислили вот здесь и на самом деле вот это равен эти два равенства не записываться в более компактном виде как произведение матрицы из частных производных функции y по переменные x умножить на

виде как произведение матрицы из частных производных функции y по переменные x умножить на вектор из частных производных de zapada y1 дзт dy-2 ну вот давайте если мы эту матрицу обозначим через до y под x транспонированное да как самом краю этого слайда ну тогда мы получим собственно такую формулу чтобы z dx это до y пода x транспонированное умножить на d z под y ну почему мы хотим именно транспонировать эту массу до y pdx мы поймем чуть позже то есть это эту матрицу мы называем как раз таки да

эту массу до y pdx мы поймем чуть позже то есть это эту матрицу мы называем как раз таки да игрек по икс транспонировать то есть до y pdx эта матрица где вот эти два компонента мы поменяли местами но наша задача немножко более сложная потому что у нас есть не только производные по их сам но и производные по нашим виктором параметров может наша конечная цель и собственно вычислить производные переходом пара ну давайте по своим такое очень сложно нейронную сеть в нее есть какой-то выход z и этот

пара ну давайте по своим такое очень сложно нейронную сеть в нее есть какой-то выход z и этот выход формируется с помощью композиции функций у нас есть вход x 0 а после этого применяется функция f 1 который также содержит параметры w1 получать x1 и так далее как rx1 применяется f2 от x1 и параметров w2 и так далее и в конце концов все это приходит функцию z но z можешь это функций пакет ну и в итоге у нас есть вот такая сложная композиция функций где каждая из следующая функция принимает на

итоге у нас есть вот такая сложная композиция функций где каждая из следующая функция принимает на вход выход предыдущей функции и вектор весов которые нам нужен и собственность минировать ну тогда наша цель это посчитать производную и вернее градиент z по всем этим нашим виктором весов ну хорошо давайте это делать что мы можем вычитать изначально мы можем вычислить д z по dw42 что z напрямую зависит от вектор весов w4 поэтому в принципе с тем чтобы вычислить дзд w4 проблем у нас не возникает

от вектор весов w4 поэтому в принципе с тем чтобы вычислить дзд w4 проблем у нас не возникает кроме того мы можем вычислить dz тпа dx три потому что x зафер не напрямую зависит от x 3 потому что z равно f4 от x3 и дубль мечты что можно сделать дальше давайте озаботимся задачей вычисления производной нашей функции z по д w3 по весам 3 слоя ну как это делать мы можем записать такую формулу d z воды w3 это d x 3 под и w3 транспонированное умножить на d z pod x3 то есть до запада x3 это производная

w3 это d x 3 под и w3 транспонированное умножить на d z pod x3 то есть до запада x3 это производная которой она пришла с предыдущего слоя а dx 3d w3 это производная который соответствует нашему этому самому третьему слою и здесь просто написано то формула который мы видели на предыдущем слайде самом деле вот то есть dx 3d w3 мы знаем умножаем ее на ддз тпа dx 3 и получаем значение d z вот и w3 отлично мы вычислили градиент наши функции потерь по весам 3 ужасно дальше мы тебе должны сделать

отлично мы вычислили градиент наши функции потерь по весам 3 ужасно дальше мы тебе должны сделать собственно пропуск градиента назад для этого нам нужно выше 3d z по д x2 то есть по входам вот этого третьего слоя что это такое это аналогично абсолютно dx триподы x2 транспонированное умножить на d z pod x3 прекрасном и и теперь вычислили градиент по до x2 то есть пропустили градиент назад и уже мы можем перейти к вычислению градиента под и w2 и dx и dy они учащается полностью аналогична

и уже мы можем перейти к вычислению градиента под и w2 и dx и dy они учащается полностью аналогична предыдущему случаю мы имеем градиент из предыдущего слоя вернее со следующего слоя и пробрасывать этот день ты нас ну и так далее собственно в конце концов мы приходим к тому что вычисляем градиенты z вода x0 это до x1 x0 транспонированное умножить на d zx1 и получается что в левом столбце у нас очередь градиенты нашей функции потери по весам нашей не наносите а справа у нас получились градиенты

градиенты нашей функции потери по весам нашей не наносите а справа у нас получились градиенты функции потерь по входам вот градиенты по входам нам сами по себе принципе не интересны нам интересны ингредиенты по весам нашли наши неровные сети и вот как раз таки эти веса будет участвовать в процессе газетного спусков шага диету спуска и так мы приходим к так называемой абстракции слоя чтобы определить какой то спланированной сети необходимо задать две вещи первая вещь это ford focus то есть то

какой то спланированной сети необходимо задать две вещи первая вещь это ford focus то есть то какую функцию сдает наш слой и вторая вещь это backward if a mans то есть по как градиенты протекают из конца этого слоя в начало этого слова мы случае если наш слой реализует ну просто функцию да не средства и реализует какую-то конкретную функцию приветствовать drop out a который результат вероятностную функцию вот если функция обычная простая то тогда для backward мы используем правило вот такое dvd

функцию вот если функция обычная простая то тогда для backward мы используем правило вот такое dvd x то есть то как почитайте блядей and и входов по вине где ент и нашей функции потерь по входам равняется до y под экспонированная надо zd9 до y вода x транспонированное это параметры нашего слоя дзд y это то какие градиенты пришли нам на выход нашего слой ну прекрасно теперь давайте всю эту науку проделаем для линейного слоя будем говорить про бег пропади через две ними слой вот но здесь есть

проделаем для линейного слоя будем говорить про бег пропади через две ними слой вот но здесь есть небольшая путаница в терминологии формулировках ну давайте мы полна связным слоем будем называть композицию линейного слоя и функции активации а собственно линейным слоем в этой лекции мы будем называть линейное преобразование вектор x back pro публичный через полна связный слой будет представляется в виде композиции депо гейши и желез функции активации и бег проходящая через линейный слой хорошо

в виде композиции депо гейши и желез функции активации и бег проходящая через линейный слой хорошо как выглядит лени слой он выглядит вот так у нас есть на входе какой-то вектор x давайте для простоты он снова будет размер 2 на выходе из сектор y у нас есть функция f который связывает вектора x и y y равно f с индексом w от x и равно маточного произведению матриц и w умножить на вектор x ну и естественно f у нас в отличие от предыдущей картинке теперь уже имеет параметр это параметрическая

естественно f у нас в отличие от предыдущей картинке теперь уже имеет параметр это параметрическая функция параметра w матрица весов ну и давай это матрица весов обозначим вот так это дубы любой 11 w12 w21 w и 22 тогда что у нас получается y1 представляется в виде суммы w11 x1 плюс w12 x2 y2 представляется в виде суммы w21 x1 плюс w 2 2 x 2 это просто формула перемножение матриц и норе и мы знаем градиент d l d y который равен вектор из частных производных del todo y 1dlp dy-2 да то есть раздел

градиент d l d y который равен вектор из частных производных del todo y 1dlp dy-2 да то есть раздел там далеко есть функция по сей день и мы уже прошли какое-то количество шагов раз таки обратного распространения ошибки дошли до векторы y1 и y2 и мы знаем производные эль поэтому вектор y а хотим мы пройти немножко дальше то есть узнать до эльфа dx чтобы уходить дальше в нейронную сеть и хотим узнать по дельта d w чтобы собственно провести шаг где этого спуска по вектор весов w ну dlp dx это

узнать по дельта d w чтобы собственно провести шаг где этого спуска по вектор весов w ну dlp dx это вектор и частных производных производная функции по вектору a d l d w это матрица из частных производных да потому что дублирует и матрица это функция обычная до мерная за счет дает подойду гриба это тоже вот она написана до или под w11 дельта d w12 d l d w 2 1dlp w 22 прекрасно давайте их вычислять просто вот явном виде ручками записывай чему равны все эти частные производные сначала давайте

просто вот явном виде ручками записывай чему равны все эти частные производные сначала давайте посмотрим чему равно d y 1 под dx10 просто подставляем в эту формулу досмотрим что есть если мы продифференцируем y1 по x1 то у нас получится просто этот множитель w11 вот мы и записали ну и так собственно для каждого элемента этой массы частных производных можем записать до y1 pdx 2 равно w12 и но и так далее dy-2 пода x2 это w 22 прекрасно и информация которую мы имеем с нашего конкретного слой

и так далее dy-2 пода x2 это w 22 прекрасно и информация которую мы имеем с нашего конкретного слой нейронной сети но теперь мы хотим посчитать собственно производные длп dx но давайте запишем это по правилу производной композиции dlp день и кстати что это такое это да или под y1 надо y1 под x1 плюс dlp dy-2 надо эрик 2 pdx 1 то есть что нас получается эти значения мы знаем да y1 pdx 1 и да игорь глоба до x1 нас получается просто del todo y 1 на w11 + d эльфа dy-2 на w210 аналогично снизу до

глоба до x1 нас получается просто del todo y 1 на w11 + d эльфа dy-2 на w210 аналогично снизу до рпд x2 это равно дельта y 1 w 12 плюс dlp dy-2 aw-2 2 отлично теперь давайте сделаем наблюдение что этот вектор это собственно д.л. по dx да то есть то что мы хотим узнать ну вот а справа написан тоже какой-то вектор и этот вектор на самом деле является произведение матрицы весов w11 w21 w12 w 22 можеть на вектор d el todo y 1dlp dy-2 то есть это просто матрица w транспонированная да видите здесь

на вектор d el todo y 1dlp dy-2 то есть это просто матрица w транспонированная да видите здесь разбила дублер а сама нас есть боевые транспонированное добиться что здесь эти переменные w12 и w21 стоят не в том же порядке что и здесь умножить на вектор из частных производных функции эль по y вектор y es получается да будет распланирована до эль пано y отлично мы получаем что dlp dx это w и транспонирования дельта y получается что есть полное соответствие даст с тем что мы имели вот на предыдущей

дельта y получается что есть полное соответствие даст с тем что мы имели вот на предыдущей странице и формах мы имеем на предыдущем слайде раз производная dlp dx записаться как производную дельта y но еще умноженный на матрицу на транспонированную матрицу из частных производных и так теперь мы должны посчитать производную по матрице w давайте уже в общем случае записывать наконец с вашего позволения я просто запишу что такое d l d w d d жить это равно сумме до эль пано y1 надо y1 по дубль и

я просто запишу что такое d l d w d d жить это равно сумме до эль пано y1 надо y1 по дубль и выдержит и плюс дельта dy-2 на и dy-2 победу бы львы и ты жить но просто потому что эта функция или она зависит от дублей ты же это через две вещи y1 и через или два на самом деле можем заметить что только одно из этих слагаемых будет ненулевым потому что скажем если i равно же равно единице мы смотрим сюда да здесь у нас есть d w11 то тогда y2 не зависит от w11 а w11 зависит только y1 ну и

смотрим сюда да здесь у нас есть d w11 то тогда y2 не зависит от w11 а w11 зависит только y1 ну и следовательно если i равно же равно единице то второе слагаемое она будет за 0 c потому что там есть производная y 2 по w11 и если игривая не зависит от него то она просто ранно нулю вот но если вас получается дельта y это умножить на x жить и дело в том что до y1 под w11 в данном случае будет равна x 1 да и то в полное соответствие с тем что нас написано здесь ну и наконец мы готовы посчитать d l

x 1 да и то в полное соответствие с тем что нас написано здесь ну и наконец мы готовы посчитать d l d w стоит такое это до эль пано y1 на dlp dy-2 умножить на вектор x 1 x 2 но в общем не сложно проверить на самом деле что если мы возьмем такое маточное произведение этих двух матриц то есть если мы оба этих вектор будет предстовлять как матрица соответствующих размеров то тогда у нас будет что получаться д.л. вот под и игрек один нож на x1 и так раз таки то что написано там для и равного жедана

д.л. вот под и игрек один нож на x1 и так раз таки то что написано там для и равного жедана исправного единиц но если мы внимательно аккуратно проверим чему равно это произведение ареста действительно вас получится что это равно просто то есть одна матрица d l d w которые мы хотели бы найти но прекрасно то есть мы научились с вами для линейного слоя считать градиенты функции потерь по матрице весов этого слоя и кроме того проводить шаг алгоритм обратного распространения ошибки ну прекрасно

весов этого слоя и кроме того проводить шаг алгоритм обратного распространения ошибки ну прекрасно тогда в принципе если бы у нас была задача реализовать it- самый ливень слой то мы могли это легко сделать могли бы написать некоторых класс да то есть здесь мы производим расследование этого класса от класса модель имея в виду что линер будет слоем исследование должны быть две функции функция форвард и функция бэк бут которые в данном случае называется апдейт гад им путь но потому что такое back

и функция бэк бут которые в данном случае называется апдейт гад им путь но потому что такое back for через слой это по сути просто обновление градиента в нашем слое и пропускание нашего где ента назад но форвард в данном случае работает как матричное произведение входа на матрицу весов ну и прибавляется еще века свободных членов в том примере который мы с вами только что разбирали вектор свободных членов не прибавлялось а но в принципе нам бы ничего не мешалось почитать сети те же самые

членов не прибавлялось а но в принципе нам бы ничего не мешалось почитать сети те же самые производные что мы считали на предыдущем слайде ну и соответственно backward у нас работает тоже также да вот у нас мы здесь обновляем и градиент входа или здесь мы обновляем градиенты весов ну и возвращаем потом градиент входа чтобы подать его дальше некоторые никому говорить о который производит весь наш вычисление клиентов по очереди начинают последнему слой 1 прекрасно мы реализовали наш полна

наш вычисление клиентов по очереди начинают последнему слой 1 прекрасно мы реализовали наш полна связанный слой ну не сервер не полна связанные наши технологии мы рисовали линейный слой пока что да вот и нам еще нужно сообразить как устроен дппг через например свой седьмой вид или через слой любой другой поэлементной активация но на самом деле если вы посмотрите на эту формулу то становится все понятно как посчитать производную нашей функции постели по их сам по входам слоя до применения всегда

как посчитать производную нашей функции постели по их сам по входам слоя до применения всегда нужно просто взять эту матрицу до y pdx транспонировать ее и умножить на вектор d z под и y de todo y это градиент функции потерь на выходах нашей нашего слоя ну можете сами понять чему рана будет эта матрица до игрек по икс на самом деле она должна будет получится просто диагональной матрицы где на каждом элементе по диагонали написано просто производная нашей функции 7 или статье сочи точки но есть

элементе по диагонали написано просто производная нашей функции 7 или статье сочи точки но есть распланировать диагональной матрицы то ничего не изменится на прежнему останется та же самая диагональной матрицы и поэтому в общем как устроен допущено 6 7 бы я предлагаю вам понять самостоятельно и доделать это рассуждение да кабы логического завершения вот ну давайте произведем некоторые лиг от того что мы с вами узнали в этом видео мы говорили про модель нейрона как она устроена говорили про то

что мы с вами узнали в этом видео мы говорили про модель нейрона как она устроена говорили про то как эти нейроны связываются между собой в полна сразу неровную сеть для сдачи классификации у этой самой полна сознание ровной сети есть скрытые слои и есть собственно последний слой каждый скрытый слой устроен как линейный слой плюс функции активации например 7 до а на последнем слое у нас происходит так называемой активации софт макс softworks преобразование для того чтобы меры принадлежности

так называемой активации софт макс softworks преобразование для того чтобы меры принадлежности классом переделать в вероятности принадлежности класс также мы посмотрели как устроена обучение нейронных сетей поговорили про такая функция потеря нужно для зачем фикации и как собственно эту функцию потери оптимизировать с помощью алгоритма без проплешин ну и наконец разобрали бег проб для полна связного слоя нашей нейронной сети то есть на линейный слоем и его ее разобрали полностью и для функции 7

слоя нашей нейронной сети то есть на линейный слоем и его ее разобрали полностью и для функции 7 еды или для любой другой функции ситуации мы описали как он будет выглядеть но без доказательства которое собственно я оставляю вам самостоятельно изучения спасибо большое за внимание и до новых встреч в следующем видео мы будем говорить о том какие функции активации применяются для не равно сетей в том числе и полна связанных нейронных сетей а также поиграемся с полна связными нейронными сетями в

том числе и полна связанных нейронных сетей а также поиграемся с полна связными нейронными сетями в интерактивной среде без написания кода

Введение в нейронные сети. Часть 3. Функции активации. Краткий обзор применений CNN и RNN

что же за функции активации спросите вы мы про них уже говорили 7 до гиперболический тангенс лилу и так далее и это те функции которые позволяют нам сделать не линейное преобразование над нашими промежуточными при знаковыми представления данных внутри неровности и обращаю ваше внимание неровно сеть по сути шаг за шагом строить всё новое и новое и новое при знаковое представление исходных данных изначально она работала со сходными признаками после первого слоя оно получает новое признака

изначально она работала со сходными признаками после первого слоя оно получает новое признака представления того объект который пришел на вход потом преобразует его вторым слоем получать новые признака представления и так далее и чтобы эти признака и представления не линейно менялись то есть не были просто ленин комбинации сходных признаков представления используется нелинейной функции активации на самом деле их не спроста не так много и они все обладают своими свойствами поэтому давайте уделим

самом деле их не спроста не так много и они все обладают своими свойствами поэтому давайте уделим некоторое время во первых 7 до носик бой дыма на чаем потому что она во первых есть в логистической регрессии во-вторых мы с нее начали в принципе сегодня в третьих она неплохо интерпретируется sigma theta что это отображение ес и рф 01 который позволяет себя так или иначе интерпретировать еще как вероятность допустимые можно вывести краски и смет до наибольшего правдоподобия максимальном подобии

допустимые можно вывести краски и смет до наибольшего правдоподобия максимальном подобии итак в чем плюс 7 она неплохо интерпретируется 01 принцип можно считать вероятность активации нейрона и она краски было во многом вдохновлена изначально в ее использовании неровностях был во многом вдохновлено тем что нейрон а именно так и работают на первый взгляд они сначала на капли вот накапливают потенциал потом активируется то есть происходит некоторое пороговое активация а 7 до неплохо описывает

потом активируется то есть происходит некоторое пороговое активация а 7 до неплохо описывает пороговое правило которое при этом дифференцируема обращаю ваше внимание она дифференцированно но у нее есть проблемы во первых 7 до обладает значительными хвостами где производная будет 0 еще раз мы с вами считаем частную производную шаг за шагом производная вот в этой точке для конкретных компоненты будет почти ноль и до 7 до как все функции активации применяются по компоненты если вы вдруг это как-то

почти ноль и до 7 до как все функции активации применяются по компоненты если вы вдруг это как-то пропустили то есть нас получилось допустим признака представления 10 мерная после этого слоя мы применим 7 мы каждой компании этого вектора применяем 7 ду она про всех остальных общение и так во первых 7 до имеет вот эти вот хвосты которые почти плоские а что значит производные здесь почти ноль если мы подсчитаем частную производную получим около нуля если справа у нас от функции потери шлака это

мы подсчитаем частную производную получим около нуля если справа у нас от функции потери шлака это производная она умножилось на 0 мы потеряли производную от называется затухание градиентов после этого у нас ничего не работает потому что учиться дальше нельзя производный стала нулём всё что передатчик байды было мне поменять свои параметры все сломался во вторых у 7 да еще не центрированный выход а если вы вспомните про то что нейронной сети так или иначе представляет собой каскад каких-то

а если вы вспомните про то что нейронной сети так или иначе представляет собой каскад каких-то линейных и около моделей дней на модель любит нормированные данные нормированные и центрированы если у нас функции активации дает не центрированный out put значит после нее явно будет не центрированный выход но это не очень хорошо тоже не постоянно двигаем значения вправо в среднем это не очень хорошо и в-третьих оппоненту вообще говорят даровать считать под капотом в нашей машине то что я все равно

и в-третьих оппоненту вообще говорят даровать считать под капотом в нашей машине то что я все равно приходится как-то аппроксимировать с точностью доз какие-то знаков после запятой и это в принципе дорогая операция own а у нас есть как при форвард пасся то есть при подсчете предсказание ronski так и при backward пасе когда мы с вами пытаемся оценить производную то что произвольно 7 это тоже выражается через экспонент что же как можно сделать лучше человечество подумала подумала и решила а

выражается через экспонент что же как можно сделать лучше человечество подумала подумала и решила а давайте хотя бы избавимся от несимметричности откуда взяли растянулись мои до получился гиперболический танец теперь у нас вот тут центрированный в среднем 0 потому что это от -1 до 1 отображения но градиент все также затухают на хвостах и все также нужно читать экспоненту не очень удобно но здесь хочет создать сразу я вещь наличие вот этих вот ограничений на выходной значения очень важно и

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

область значений она нужно отображать куда-то в ограниченный отрезок ленты в остальном же тангенс хорошая функция активации которая чаще использовать чем 7 да и обычно используется именно в рекуррентных и радостях в виду специфичных ограничений остальные проблемы принципе сохраняются и так давайте думаем как нам добиться того чтобы наш во-первых градиент не затухал на хвостах а во вторых чтобы нам было недорого посчитать производную новые в принципе знаете как это делать как нам добиться того

было недорого посчитать производную новые в принципе знаете как это делать как нам добиться того чтобы градиент не затухал ну и чтобы не было таких хвостов как добиться того чтобы было проще считать производную и вообще не нас был считать экспоненту избавит от c избавиться от экспоненты и ровно отсюда и появляется лилу или же против от ли юлить максим из нуля и числа и здесь по сути почти все хорошо во-первых производной справа от нуля не слушает она всегда единица во вторых экспонента вообще

во-первых производной справа от нуля не слушает она всегда единица во вторых экспонента вообще читать не надо у нас либо ноль либо само значение икса производную тоже читайте абсолютно просто либо ноль либо один но out food не центрирована опять же потому что ну вы можете сами видеть что средний здесь я вне 0 и во-вторых слева на хвосте опять же стукают градиенты это явно и это понятно в 0 мы можем просто определить до определить производную нулем и тогда все дифференцирование которые нам

можем просто определить до определить производную нулем и тогда все дифференцирование которые нам необходимо будет работать и так как же нам починить то что выход из этой функции активации такой не центрированный ну мы же хотим с вами не линейных функций активации правильно давайте сделаем идет чуть менее несимметричный и добавить небольшой уклон и слева тоже называется или кириллу и принципе тоже хорошо работает и теперь outlook чуть более центрированный плюс нерона теперь скажем так не

тоже хорошо работает и теперь outlook чуть более центрированный плюс нерона теперь скажем так не умирают градиент не умирают не затухают потому что слева от 0 у нас тоже есть маленькое производная она конечно маленький но она есть поэтому теперь у нас производная равна 0 вообще там капнули допустим всех остальных . она как это определено красиво удобно работает часто используется но и обычно виллу тоже часто используется что можно еще с этим придумать а давайте сюда внимательно посмотрим вот

тоже часто используется что можно еще с этим придумать а давайте сюда внимательно посмотрим вот тут на стоит 001 правильно а почему мы выбрали 0 0 1 1 0 0 5 или 0 2 или 10 нас 4 также подумали исследователи и предложили параметре крыло где сказали а давайте у нас альфа будет вообще настраиваемый коэффициент поиска нейронная сеть сама решает кай и там нужен коэффициент уклона и да это легитимно функция активации от что это какая-то функция дифференцируема или функция которому видим справа если

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

что же можем сделать еще ну стрелу вроде все понятно достаточно неплохая интересно функций активации а также можно поговорить про силу это другая скажем так функций активация которая пытается зайти с другой стороны и уже быть гладкой например как видите на экране она себя ведет примерно вот таким образом справа от нуля на x просто опять же линейно но слева от нуля она никак лилу является нулем или никак ли кириллу является как другой просто линейной функцией а плавники гладенько переходит то

или никак ли кириллу является как другой просто линейной функцией а плавники гладенько переходит то есть попытка сделать функций более гладкой красивая удобная имеет почти все плюс ярилу кроме того что опять обладать exponent ой ой о считать дорого экспоненту на минуточку считать настолько дорого что реалу работает быстрее чем танки с примерно в шесть раз это на самом деле значимо если у нас вами огромной глубокие сети что же это был маленький маленький обзор функций активации и про не хочешь

огромной глубокие сети что же это был маленький маленький обзор функций активации и про не хочешь сказать одну вещь функций активации должна подходить под решаемую задачу поэтому некоторых функций активации выбирайте именно изображению задачи решают например как я уже говорил в текстах его рекуррентных сетях используется и либо 7 до либо тангенсы плюсы байду можно использовать иногда как именно некоторую промежуточную скажем так функции активации дающий нам путь вероятность например то

именно некоторую промежуточную скажем так функции активации дающий нам путь вероятность например то происходит волос т.м. это типа рекуррентных сетей про этом будем говорить дальнейшем поэтому функции активации лучше выбрать каким образом либо понимаете какая функция активации подходит и тогда все хорошо ну либо можно использовать силу как бы и зла им поход если у вас нет ограничений на то каким должен быть out put вашей функции активации манипулу попробовать ли кириллу или илу если вам нужна

должен быть out put вашей функции активации манипулу попробовать ли кириллу или илу если вам нужна какая-то ограниченная какое-то ограниченное значение на выход с ваши функции активации ждите тангенс ну а 7 до используется только если вам допустим уж надо что-то типа вероятности в остальных случаях пожалуйста использовать танец и в целом правило простое если вы знаете что использовать используйте то что вы считаете нужным если вы не знаете что использовать лучше про ли пользоваться правилом

то что вы считаете нужным если вы не знаете что использовать лучше про ли пользоваться правилом большого пальца и использовать совета который вы допустим видите на экране а теперь мы можем поговорить уже прокрас и более сложно нейронные сети чем просто fully connected полна связано неровно сети да кстати фоли connect от они же полна связные нейрон сети также часто называют dance потому что папа опять же полна связный и поэтому можете услышать различные слова dance в cf или connected полна

опять же полна связный и поэтому можете услышать различные слова dance в cf или connected полна связано это все в одном и том же это о линейных слоях который друг другом идут а теперь давайте поговорим не только про линейный слои а про то какие еще бывают нейронные сети и какие задачи они могут решать что же infox но фэнси я на самом деле просто потому что они чуть интереснее чем просто фулика над давайте начнем наверное с рекуррентно неровностей которая позволяет работать хорошо с текстами на

давайте начнем наверное с рекуррентно неровностей которая позволяет работать хорошо с текстами на самом деле не только с текстами с любыми последовательными и мы не будем сейчас углубляться в структуру рекрутинг неровностей это будет некоторый тизер чтобы вам потом был интерес ними разбираться слева видите пример поездишь каспера посередине видите пример как раз таки не которого от свирского в lathe he текстах математического с кем-то формулами графиками и так далее на справа в детей исходный

he текстах математического с кем-то формулами графиками и так далее на справа в детей исходный код на плюсах который является частью ядра linux или кстати даже возможно сих пор сетки на плюсах но интерес другом все эти три примера могут быть сгенерированы и по моему даже были сгенерированы с помощью грех неровностей их не люди писали подробнее можете почитать как раз таки вот в этом замечательном блоге андрея курпатова в принципе один из замечательнейших наверно преподавателей ученых области

блоге андрея курпатова в принципе один из замечательнейших наверно преподавателей ученых области искусства интеллекта автор курса cs 231 n1 завтра в курсе 231 стэнфорде по компьютерному зрению иди пленку и в целом его курс от 2016-го года где он читает лекции приятно посмотреть даже сейчас не смотря на то что он движется вперед там классно и достаточно лаконично рассказывать многие вещи а это классная статья про android android на был эффективность во фронт fox скажем так не обоснована

это классная статья про android android на был эффективность во фронт fox скажем так не обоснована эффективность рекуррентных неровностей написана еще в 2015 году но от этого не потерявшая своего шарма и информативности и так прикурив неровные сети могут генерировать и тексты допустим одной из классических домашка является генерация текстов шекспира на английском или текстов пушкина на русском понятное дело не прямо оригинальных текстов а чего то что обладает похожим стилем похожими свойствами

дело не прямо оригинальных текстов а чего то что обладает похожим стилем похожими свойствами как поедешь пушкин и и любого другого деятеля культуры по это и так далее но интерес представляет себя интерес есть в другом рекуррентной нейронной сети настолько хорошо my генерировать текст что даже ударом 2015 году они уже были способны генерировать валидный с точки зрения интерпретатора того же самого си плюс плюс или с точки зрения компилятора компилятора си плюс плюс или с точки зрения компилятора

си плюс плюс или с точки зрения компилятора компилятора си плюс плюс или с точки зрения компилятора потеха или с помощью интерпретатор питона код поэтому они могли научиться генерировать код вай потехи такой что он будет собран в итоговое скажем так представление возникают статьи или написать какой-то ход на плюсах которых sohc компилируется не понятно что он будет делать но он компилируется а значит что рекуррентный урон сеть смогла уловить грамматику этого языка и понять вообще какие именно

что рекуррентный урон сеть смогла уловить грамматику этого языка и понять вообще какие именно там преобразование должны происходить что нужно запоминать какие-то перемены и сначала их вводить потом делать снимки действия и так далее и все это они делают только на примерах реализации то есть например текст шекспира и на примеров корректных текстов лакйки или например краски репозитория где находится ядро linux их никто не учит этому явно им просто дают набору данных говорят учись они учатся это

ядро linux их никто не учит этому явно им просто дают набору данных говорят учись они учатся это очень классно и об этом мы с вами поговорим еще один красивый пример и от наверно это байка которую обычно рассказывают как говорят говорят про рекуррентные сети я расскажу про него наверно прямо сейчас и так есть к байка что когда исследователи увидели что рекуррентной нейронной сети так классно работают их обучили их смысле не исследователей ари current нейронной сети на множестве статей краски по

их обучили их смысле не исследователей ари current нейронной сети на множестве статей краски по алгебраической геометрии по-моему проще что было посложнее пострашнее хотя может и следовательно этих статьях обучали после чего сгенерировали много-много-много статей с помощью рф неровностей но те которые собрались как бы выбрали вы читали времени прочитали и отобрали из них 10 наиболее адекватных который боле мене читается лаконично причем нейронной сети даже кита формулы генерировали вводили

который боле мене читается лаконично причем нейронной сети даже кита формулы генерировали вводили различные ли мы пытались графики рисовать ведь их справа от краски сэмплы из тех самых статей после чего выбрали 10 наиболее правдоподобных статей и подали их в онлайн журнал три из них приняли но после этого конечно написали письмо редакции со словами ребят вы издеваетесь вообще читаете что публикуйте это сгенерировал нейросеть поэтому это полнейший бред но ответ был лаконичен на примерно таков

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

да это некоторая байка но тем ни менее код который генерируется нейронными сетями реально может быть собран в итоговый результат ну а сейчас развитием языковых моделей и допустим gp3 который был презентован в мае это уже ни для кого не новость сейчас уже есть целые скажем так стартапы и принципе продукты которые предлагает вам текстом описать что вы хотите от вашей модели а нам на выход даст какой-нибудь код на питоне и или какую-нибудь формочку которая работает реальном вебе и так далее то

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

целой отдельной лекции но сейчас я надеюсь я разогрел у вас интерес и вам хочется узнать об этом подробнее еще раз сошлюсь на их замечательно статью андрей карпат ago рекомендую ее почитать и еще один короткий пример кода уже который генерирует сеть мы видим что здесь есть и какие-то in cloud и правильные комментарии и так далее а теперь давайте поговорим про сверчка нейронной сети про них вы тоже вскоре услышите и про не хочет варить две вещи во-первых с них началась современная история

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

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

человека воздействовали определенным образом показывая ему различные палочки вот такого вот такого рода вот такого наклонные точки и снимали с помощью фотографии какие части его мозга активировались и обнаружили что различные группы нейронов отвечают за различные визуальные стимулы например вот такие палки вот такие вот такие и так далее так что интересно в сварочных неровностях автоматически выучиваются скажем так ядра который реагирует пока что мы не владели понятие дрон тем не менее

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

менее очень классно и красиво это кстати пример краски слайдов я далеко на краске автор леонид и в принципе один из наиболее значимых ученых в этой области но это лишь хотел бы сослаться на замечательную статью про adverse ареала таки и про нейронные сети в жизни природе в живой природе и у человека и о том как именно зрительная кора работает допустим у различных животных например здесь можно почитать как совершить ad-ver-sary all атаку на птенца чайки и получить некоторые интересные результаты

как совершить ad-ver-sary all атаку на птенца чайки и получить некоторые интересные результаты если коротко птенец чайки виду того чтобы птенец и мозг пока маленький и требует как бы не может потреблять много энергии птенцы чайки обучились ходе эволюции отличать мать краски по наличие вот этого красного пятна на клюве и при виде красного пятна на клюве просить есть но добрый следователи были заинтересованы а что если убрать пятно на клюве реакции меньше а в то что если использовать не пятно на

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

естествен нейронная сеть заточен на раз позвонить их стимулов в природе полки с тремя красными полосками не встречаются а ученые нашли к раскрыть и сигнал который вызывает еще больше отклик у мозга птенцов чем происходит на самом деле это была еще одна маленькая ремарка маленький реверанс сторону сферах неровностей просто чтобы вам было интереснее про них слушать встречах лекциях а если вам интересно почитать про птенцов чайки да конечно с ними все хорошо их и накормили матери отдали просто

почитать про птенцов чайки да конечно с ними все хорошо их и накормили матери отдали просто интересные результаты можете почитать замечательно статью на хабре в остальном же мы подошли с вами практически концу этой лекции разве что я рекомендую вам сейчас поставить видео на паузу и перейти вот по этой ссылочке на playground чтобы просто напросто по работы с нейронными сетями буквально руками там вы видите простой интерфейс где окраски можете выбрать один из четырех доцентов среди кстати есть

вы видите простой интерфейс где окраски можете выбрать один из четырех доцентов среди кстати есть тот самый ксор где у нас четыре группы точек который направлен на расположены крест-накрест и попытаться прижать эту задачку с помощью неровных сидеть и линейных моделей в различных признаков что у вас здесь есть первый столбец это признаки который доступен на наши модели изначально это x1 x2 но вы так же можете добавить какие-то квадраты x1 x2 умножение x1 и x2 и так далее синус косинус а также

так же можете добавить какие-то квадраты x1 x2 умножение x1 и x2 и так далее синус косинус а также можете варьировать число скрытых слоев это раз размера скрытых слоев то есть сколько нейронов или говоря по-другому сколько признаков будет использоваться чтобы построить новое признака и представление где-то в глубинах неровности также можете варьировать вот здесь сверху это будет функции активации которой есть ну и различные вещи типа лёрн грейт и так далее попробуйте пожалуйста воспользоваться

которой есть ну и различные вещи типа лёрн грейт и так далее попробуйте пожалуйста воспользоваться линейной функции активации посмотреть на разделяю поверхность что будет а также решить если вам это интересно самый сложный из этих всех скажем так 4 наоборот самый сложный случай где две такие закрученные спирали нет ли у вас получится решить ее почти без ошибок то есть вас будет построен разделяющая поверхность которая отделяет одну спираль а другой то замечательно в остальном же мы подошли с

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

на них во вторых подводя небольшие итоги говоря непосредственно про нейронные сети можно увидеть их на экране или уже услышать принципе сопоставив одно с другим нейронной сети это замечательные методы которые позволяют решать просто ошеломительно хорошо сложной задачи но поэтому но для этого необходимо выбирать правильный набор данных и правильно структуру сетей правильно сформулированной задачи и правильно структурированная сеть позволяет добиться отличных результатов в первую очередь неровно

и правильно структурированная сеть позволяет добиться отличных результатов в первую очередь неровно сеть краски показывают личные результаты в тех случаях когда дана обладает некоторой внутренней структурой будто изображения тексты графа и так далее во вторых на данный момент нейронной сети должны составить полностью из дифференцируемых операций почему на данный момент потому что если уйти далеко вперед и посмотреть допустим на обучение с подкреплением там появится методы которые позволят даже

вперед и посмотреть допустим на обучение с подкреплением там появится методы которые позволят даже для не дифференцируемых операций аппроксимировать градиенты но до тех пор пока вы не изучите эти методы пожалуйста не пытайтесь пределы дерево решающих нейронной сети в то что градиента сломается ничего обучаться не будет на данный момент все должно быть дифференцируемой линейное преобразование функции активации какие-то функции потерь все что вы пытаетесь оптимизировать все должен в

функции активации какие-то функции потерь все что вы пытаетесь оптимизировать все должен в дифференцируем в третьих не стесняйтесь смотреть вокруг себя потому что многие тех некоторые используется в целом машинам обучения и конкретно в deeply ринге были вдохновлены природой физикой какими-то здравыми идеями просто здравым смыслом и вполне возможно их там еще много поэтому не стесняйтесь думать о простых мыслях о простых идеях и пытаться их акт имплементировать тот же самый батч норм который

о простых мыслях о простых идеях и пытаться их акт имплементировать тот же самый батч норм который будет разобран в одной из следующих лекций по факту крайне простая операция который в принципе позволило ускорить сети в несколько раз и добиться доселе невиданных результатов ну и в четвертых пожалуйста не стесняйтесь изучать новое задавать вопросы отвечать на вопросы ваших коллег и делать это как в чатах так и в каких-то со звоном очно-заочное так далее если вам что то непонятно вы можете

как в чатах так и в каких-то со звоном очно-заочное так далее если вам что то непонятно вы можете написать в чат или в личку в остальном же я рад знакомству с вами по ссылке которая здесь продублирована вы можете найти что-нибудь еще на почитать и в целом терзайте знать до новых встреч

добрый день меня зовут александр миленьким и сегодня мы переходим к блоку изучение о нейронных сетей и для того чтобы нам легко конструировать и проектировать нейронные сети нам нужен какой-то для этого инструмента и вот один из самых популярных сейчас for work of для нейронных сетей этапа и торт для питона существует конечно же множество других форм уроков которые там позволяют буквально по кусочкам собирать вашу задуманную архитектуру как инструктор лего вот мы не будем подробно

по кусочкам собирать вашу задуманную архитектуру как инструктор лего вот мы не будем подробно останавливаться на каждом из них вот и упомянем только от ндфл от гугла который отличается от по и творч а тем что он использует строение статического графа вычисления в отличие от динамического как в python это означает что каждый раз когда мы создаем нейронную сеть на тендер flow мы должны прописать все необходимые модули при этом они должны быть в жестко фиксированном порядке и после этого при

все необходимые модули при этом они должны быть в жестко фиксированном порядке и после этого при началом учение архитектуры неровности фиксируется и таким образом у нас происходит компиляция в по и тот же некоторые динамический дизайн то есть сам граф вычисления носит динамический характер и поэтому вы можете быстро собрать необходимые модули вашей нейронной сети и проход по модели уже будет выполняться не как-то запланирована только во время выполнения вашего кода в данном случае сразу можно

не как-то запланирована только во время выполнения вашего кода в данном случае сразу можно увидеть некоторые различия за счет этого мира в тендер flow нельзя получить результаты каких-то промежуточных стадий уж тем более результаты внутри каких-то различных модулей чего нельзя сказать про python дима очень этом легко гибко можем изменять поведение нашей сети и можем там очень какой-либо признак сказать что при толщине это очень жесткую базу различных документацией если вы можете ознакомиться с

что при толщине это очень жесткую базу различных документацией если вы можете ознакомиться с ней на официальном сайте основным контрибьютором python является facebook а и research очень хорошие ребята спасибо что они нам дали такой прекрасный инструмент как по edge приступим к синтаксису пойду арч начнем то что импортируем нам в ноутбук поэт ворчишь и теперь поговорим про некоторые его особенности если вы знакомы с тампой и всевозможными нам парижскими массивами этом векторами и матрицами то

если вы знакомы с тампой и всевозможными нам парижскими массивами этом векторами и матрицами то синтаксис python на вам покажется очень знакомым я бы сказал даже чтобы практически знаете уже обращаться с тендерами в python основной кстати единица и работы с данными в python является penser и вот в нам по это массивы а в поток chateau тендера по сути своей это этом те же многомерные на польские массивы они имеют очень похоже функции по синтаксису как в нам пай но есть несколько особенностей

массивы они имеют очень похоже функции по синтаксису как в нам пай но есть несколько особенностей которые отвечают по и торчат нам по я и вот одна из них это то что вы свои вычисления можете производить на gpu то есть если по это же представить в виде формул эту это по сути нам pipe плюс куда автоград и вот куда означает что вы можете переносить ваше вычисления на графические аппаратные ускорители то есть на этом на видеокарты и можете проводить вычисления по сути в памяти графических этом

то есть на этом на видеокарты и можете проводить вычисления по сути в памяти графических этом видео карты и потом уже рассчитаны вычислением переводить на от обратно на cpu также 3 есть особенность передача по которым мы поговорим чуть позже это автоматическое вычисление градиентов это тоже очень важная составляющая проект рычаг которая очень сильно упрощает реализацию архитектур нейронных сетей но об этом поговорим чуть позже сначала давайте разберемся с иными действиями стендерами в притвор

но об этом поговорим чуть позже сначала давайте разберемся с иными действиями стендерами в притвор поймем как они строятся какого вида они могут быть в какие основные операции они имеют также когда напали у нас есть различные типы которые могут подаваться принят инициализации массива как параметр d type of war thunder фол тут мы можем создавать тендеры сразу с названиями в качестве классов и это всякие там hold тендеры флот тендеры тендеры wong тендеры и так далее самые ну конечно же популярные

там hold тендеры флот тендеры тендеры wong тендеры и так далее самые ну конечно же популярные давайте создадим какое-нибудь наш первый тендер использую использую список и вот и если мы передаем в наши там флот тендер список из двух элементов то вот на выходе мы получаем объект тендер с двумя элементами если мы посмотрим его размерность тут мы получим чего размерность два попробуем создать более сложный тензор из двумерного массива то лучше они посмотрим на форму видим что теперь у него

более сложный тензор из двумерного массива то лучше они посмотрим на форму видим что теперь у него размерность g23 мы добавили муж вторую размерность также для создания тендера можно подавать уже готовые размеры для которых вы хотите создать ваше тендер аналогично можно создавать запрос передавая параметр размера давайте посмотрим какой у нас получается размер тендера в этом случае вот видим что таком случае у нас создается тензор размера стон то есть по сути тандыр из 100 элементов помимо флот

случае у нас создается тензор размера стон то есть по сути тандыр из 100 элементов помимо флот тендеров мы конечно же можем создавать тандыры там других любых типов например хен стандарт и вот легко видеть что он считается там тендер заданного размера которые мы прописали выше единственный нюанс что когда у нас и генерируется таким образом наш сендер она наполняется таких я бы сказал мусорными каким назначениям которые просто были взяты из памяти но это не проблема потому что мы можем легко

каким назначениям которые просто были взяты из памяти но это не проблема потому что мы можем легко переопределить наш наше значение в кинзы и использовать его под наши дальнейшие нужны инсталляции цензоров также мы можем инициализировать какой-то там вот enter и с помощью функции zara мы можем его давайте чуть-чуть припишем для примера а за гулять то есть у нас есть несколько способов как создать 0 отель центр состоящий из нулей вот и обратите внимание что вообще-то говоря в как и в нам по я у

0 отель центр состоящий из нулей вот и обратите внимание что вообще-то говоря в как и в нам по я у python есть несколько реализаций одной и той же функции первая реализация это без нижнего подчеркивания и одна с нижним подчеркиванием то есть реализация с нижним подчёркиванием это так называемое моя imi place реализации которые возвращают вам то есть изменяет вам объект напрямую то есть вы могли переписать наш пример вот в таком виде и получить точно такой же результат мы можем принять

могли переписать наш пример вот в таком виде и получить точно такой же результат мы можем принять инициализацией нашего обзора наполнять его значениями из нужного нам распределения например используя функцию рандом и задавая размер нашего тензора мы можем генерировать в нем элементы из нормального распределения со средним 0 и стандартным отклонением один например аналогично мы можем выбирать любое другое распределение например дискретная равномерно нормальная со средним 0 и единицей

любое другое распределение например дискретная равномерно нормальная со средним 0 и единицей распределение бернулли с какими то там параметром при и так далее и сразу обратите внимание что мы велась из также на вирилизации там and plays с подчёркиванием и без а теперь поговорим про изменения формы тендеров с помощью функции view у нас как в напоим есть похожая функция a view вы нам поэта функцией шейп который меняет форму вашего тендера вот мы видим что у нас был какой-то тендер б размера

шейп который меняет форму вашего тендера вот мы видим что у нас был какой-то тендер б размера пропишем размером 2 на 3 и после того как мы применили к нему убью 3 на 2 он стал же размера внезапно 3 на 2 обратите внимание что view не меняет ваш тензор то есть он разрешает вам копию это сделано для того чтобы избегать некоторых там ошибок спамить его если вообще обсуждать как у нас хранятся элементы в наших массивах так же как в нам по я но это логика наследуется также из нампо я то есть у нас

в наших массивах так же как в нам по я но это логика наследуется также из нампо я то есть у нас тендер это по сути набор но последовательность назначений упорядоченное и мы просто храним представления этой последовательности штендер это по сути представление той последовательности там например какими-то странными папа на размерность там например дискорд фермент 1 до по 1 размерности чтобы перейти от первого элемента к следующему по 1 размерности нам нужно передвинуть центре элементов вперед

от первого элемента к следующему по 1 размерности нам нужно передвинуть центре элементов вперед если мы там критик двойки-тройки потом только мы попадаем на четверку не спускаемся на следующие время или например мы можем спуститься на один элемент вниз по второй размерности тоже сменить элемент еще раз обратим внимание что view не меняет наш тендер то есть вот он возвращает нам копию той формы эту размерность которую мы хотим в одной старый тандер остается без изменений также у нас есть еще

эту размерность которую мы хотим в одной старый тандер остается без изменений также у нас есть еще метод решив кто-то тоже позволяет нам изменить нашу форму нашего тендера хорошо поговорим теперь про изменение типа тензоров то есть мы можем создать какой-то например flow тендер то есть тендер который у нас имеет значение вход типа а дальше перевести его с помощью методы types к типа например м32 то есть перевести к его к int n дыру или мы тоже самое сделать с помощью метода тут но тут нам уже

то есть перевести к его к int n дыру или мы тоже самое сделать с помощью метода тут но тут нам уже нужно заранее указать явно указать тот тип который которому мы хотим перевести аналогично работает для or боя для любого другого типа которым их как которому мы хотим кастовать наш массив ok давайте поговорим про слайсы и индексы в тендерах принципе они ничем не отличаются от нам по я тут точно такой же синтаксис а что мы индексы указываем через запятую а слайсы тоже указываем через запятую

такой же синтаксис а что мы индексы указываем через запятую а слайсы тоже указываем через запятую абсолютно все так же как в нам поэта если вы умеете работать с индексами и ссылаясь именно поэтому имейте работы с ними и в python что ж теперь поговорим про что-то более интересное про олимпий арифметические операции для тендеров потрачу нас также определены сложения как через оператор плюс так и через функцию id аналогично мы можем там их вычитать друг из друга снова складывать и так далее и тут

функцию id аналогично мы можем там их вычитать друг из друга снова складывать и так далее и тут я снова замечу что у нас для каждой функции есть реализация которая изменяет ваш объект inplace на вот например обычная функция сантана у вас складывает a + b но если вы используете меда через нижние подчеркивания то он вас его меняет in place датой смотрите первую мы ячейку сколько бы не запускали она остается одно это уже если мы запускаем ячейку интро из то она меняется потому что при каждом

она остается одно это уже если мы запускаем ячейку интро из то она меняется потому что при каждом запуске это ячейке у нас меняется тендерах все точно так же как в нам по если мы хотим по элементам но жить матрицей можем использовать мат оператор вложения можем использовать метод му как альтернативу делить как через оператор слыша так и через также метод div хорошо точно так же мы можем использовать логические операторы то есть создавать всякие маски которую дальше использовать как условия для

логические операторы то есть создавать всякие маски которую дальше использовать как условия для фильтрации нашего тендера например сравнивать элементы двух массивов а потом эти сравнения используют для того чтобы отфильтровывать элементы нашего а тензора например вот у нас какой то элемента и мы хотим вернуть все значения тендера а которые у нас например больше чем элементы соответствующие элементы и стенды рабы и вот она возвращается условно говоря списком эти элементы хорошо также

элементы и стенды рабы и вот она возвращается условно говоря списком эти элементы хорошо также поддерживается векторизация то есть мы можем использовать применять наши функции ко всему тендеру поэлементно то есть например мы можем взять функцию там синуса и он применится полимент на каждому элементу нашего тендера тут есть еще пример ли тангенса экспонента и логарифма вы можете сами свою функцию написать и точно так же на полимент на отработают для каждого элемента вашего тендера вот есть чем

написать и точно так же на полимент на отработают для каждого элемента вашего тендера вот есть чем прогрессирующей функции они немножечко отличаются от тех которые мы рассмотрели выше суть в том что они например в зависимости от того какую функцию мы используем на про если эта функция суммирования то она умеет складывать элементы вашего тандыра по какой-то оси или по нескольким и сям готовы хотите посчитать среднее как по всему озеру так и среднего по какой-то определенной оси там по вертикали

посчитать среднее как по всему озеру так и среднего по какой-то определенной оси там по вертикали или по горизонтали и тут можно встретить первое отличие от ламп а я-то что вы на buy обычно когда мы там читаем используем агрегирует функции мы используем параметра hexis здесь же используется параметр дим вот это такая особенность синтаксиса в python теперь поговорим про активное оси иногда нам нужно изменить немножко размерность нашего тендера для того чтобы например сложить его с каким-то

нужно изменить немножко размерность нашего тендера для того чтобы например сложить его с каким-то другим тендерам или например мы хотим чтобы у нас явный broadcasting между массивами был явный и мы можем просто рожать наш сендер там добавить ему какую-то еще одну размерность для того чтобы наш там операции происходили более явно и вот пример того как у нас был цензор размера 2 на 3 3 на 3 мы ему добавляем еще одну размерность с помощью на на и если мы отразим и во времена сегоднем что

3 мы ему добавляем еще одну размерность с помощью на на и если мы отразим и во времена сегоднем что размерность у него же 313 поговорим теперь про фиктивной россия бывают случаи когда нам нужно наш сендер сложить каким другим тендерам другой размерности и чтобы у нас размерности совпадали мы можем расширить наш тендер то есть добавить ему какую-то размерность сделать это можно с помощью с помощью на на то есть на нужную позицию а где нам нужно добавить размерность ставим нам и получаем что у

на на то есть на нужную позицию а где нам нужно добавить размерность ставим нам и получаем что у нас добавляется 1 размерность то есть вот у нас был тендер размера 3 на 3 мы добавили ему еще одну безмерность 90 размерности 3 13 вот и аналогично мы можем создавать размерность по любой другой оси давайте реализуем какую-нибудь теперь простенькую задачку например зайчик где нам нужно посчитать вектор средних значений по нашей матрицы по вертикали вот у нас есть какая-нибудь матрица например кто и

средних значений по нашей матрицы по вертикали вот у нас есть какая-нибудь матрица например кто и штендер какой-нибудь давайте например у 14 дал для удобства здесь еще черную размерность дадим так вот уноси-ка котоматрица посчитаем вектор средних для этой матрицы для этого тендера по вертикали так вот если мы остановимся на другом шаге то есть просто подсчитаем средние о том посчитать среднее для всей матрицы нам нужно по конкретной оси давайте попробуем подряд по оси вернет нам 2,05 да и видим

всей матрицы нам нужно по конкретной оси давайте попробуем подряд по оси вернет нам 2,05 да и видим что действительно это средние не по вертикали а пока что это средняя по горизонтали то есть он посчитал среднее между 14 и средняя между 2 7 то есть мы с вами спутали ось по которой мы хотим уследить строится значит вариант с нулем и вот мы действительно получаем вектор и средних по вертикали ты среднее между 1 и 2 этап утра и вот мы получаем новых 2 и вот как не допускать эту ошибку с осями то

между 1 и 2 этап утра и вот мы получаем новых 2 и вот как не допускать эту ошибку с осями то есть как не путайте размерностью то есть не путать . которую вас происходит операция то зачем простое правило что если у вас что операция производится по трассе которая исчезнет после прими меня операции и вот например вы хотели произвести соединение по вертикали и у нас вертикальная ось как раз таки пропала и вот вертикальная ось это у нас как раз и был угла размерность 0 перейдём к следующей задаче

и вот вертикальная ось это у нас как раз и был угла размерность 0 перейдём к следующей задаче более интересной давайте реализуем наверно нормировка изображения нам часто при работе с с изображениями нужных нормировать и давайте попробуем с помощью синтак там простых операций при торт это совершить пусть у нас на вход будет какой-то патч картинок размеров batch сайт то есть например 64 там картинки у нас для каждой картинке три канала то есть картинками состоит из трёх цветов rgb и вот три

у нас для каждой картинке три канала то есть картинками состоит из трёх цветов rgb и вот три конопли канал соответствии с цветами и еще два канала точнее две размерности на ширину и высоту картинки хорошо берем наш этот патч изображений и чтобы посчитать среднее среднее по картинке по высоте и ширине мы можем сразу задать не одну размерность сразу две то есть нам нужно усреднить по 2 3 размерности сразу задаем 2 3 которую третью ось посмотрим что нам вернет давайте лучше даже посмотрим на форму

сразу задаем 2 3 которую третью ось посмотрим что нам вернет давайте лучше даже посмотрим на форму которая нам разрешается вот разрешается действительно танца размера 64 на 3 то есть мы из хлопнули где размерности средний нас осталось 2 отлично давайте это такая некая заготовочка к нам для реализации наши функции то есть мы берем нашу матрицу читаем про ней средние по осям 2 и 3 и пусть это у нас будет среднее аналогично чтобы совершить вот это вот вот эту номеров q нам нужно вычесть средняя и

будет среднее аналогично чтобы совершить вот это вот вот эту номеров q нам нужно вычесть средняя и поделить на стандартное отклонение тасс теперь нам нужно еще посчитать сигму отлично теперь нам нужно от этой матрицы от нашей отнять средняя и поделить на стандартное отклонение давайте это сделаем вот но сразу заметим что вот если мы хотя бы просто попробуем отнять средняя то мы столкнемся с проблемой что м имеет размерность 64 на 3 а матрица а ими 4 размерности в то время как вектор средних

что м имеет размерность 64 на 3 а матрица а ими 4 размерности в то время как вектор средних имеет всего лишь 2 то есть нам нужно расширить наше этот вектор средних до размерности такой же как у размерность матрицы а это можно сделать с помощью способа которые мы рассмотрели выше то есть по первой оси мы ничего не делаем по второй оси тоже ничего а по следующим двум осям мы расширяем наш тендера аналогично также мы расширяем сигму на которую хотим и поделить и смотрим что у нас на выходе так

аналогично также мы расширяем сигму на которую хотим и поделить и смотрим что у нас на выходе так отработала без ошибок давайте теперь распечатаем средняя мы с вами договаривались что при анале миров ки наших изображений нас средний должно быть равно 0 и мод видим что действительно все значения средних у нас очень близки к нулю то есть у нас там порядок 10 минус 9 10 минус 8 давать еще для простоты увидим шейп и вот видим что действительно средняя по картинке по всем трем каналам она у нас 0

увидим шейп и вот видим что действительно средняя по картинке по всем трем каналам она у нас 0 давайте теперь посмотрим стандартное отклонение по всем изображением видим что она у нас единица почти во всех случаях все отлично мы справились с вами с этой задачей то есть мы от нормирование наши изображения давайте пойдем дальше и deuter поговорим про более сложной операции над матрицами это матричной операции также как и в нам по и мы можем нашу тендеры транспонировать то есть отражать

матричной операции также как и в нам по и мы можем нашу тендеры транспонировать то есть отражать относительно диагонали значения то есть мы по сути менять местами яндекс по строке и столбцу то есть у нас а у нас был например значение 10 она была у нас с индексами 1 го стало с индексами 21 то есть отразилось относительно диагонали и при этом наш тендер не поменял свой первоначальный вид есть вот этот транспонирование она возвращает нам копию скалярное произведение его можно делать с помощью dot

транспонирование она возвращает нам копию скалярное произведение его можно делать с помощью dot точку продукт вернем наши черепа и действительно у нас а когда мы пьем применением и скалярное произведение для вот этих двух наших кондеров по итогу казался один элемент можно использовать оператор собака для того чтобы та ну логично перемножить наши прямой уже начал 2 тендера и вот видим что как тендер был до операции так цензор на выходе и остался хорошо матричные произведения несколько нужно

тендер был до операции так цензор на выходе и остался хорошо матричные произведения несколько нужно перемножить две матрицы можно использовать либо специальную функцию м м то есть для матричного произведения матриц самом как бы matrix matrix либо также использовать на собаку до того же перемножить две матнас если мы перемножаем матрицы и вектор то мы можем использовать в любом опять-таки собаку либо использовать либо использовать метод м.в. matrix вектор для того чтобы опять таки перемножить

либо использовать либо использовать метод м.в. matrix вектор для того чтобы опять таки перемножить эти две матрицы обычное когда у нас матрица много можно запутаться в том как у нас будет присоединить при умножении и тут достаточно простое правило что перемножении у нас происходит по двум последним размерность team наших матриц то есть приумножаются две последние размерности матрицы мы немножко познакомились с python и мы постоянно его сравнивали с нам по им непонятно что и пальто рачки нам по

с python и мы постоянно его сравнивали с нам по им непонятно что и пальто рачки нам по это два очень пиксельных и удобных приборка иногда бывает полезно перевести из пай тортом на формат намба я из нампо я в по и творч это делать на самом деле не очень сложно и специально специальный метод from лампой который принимает ваш нам пай на вход и разрешают вам на выходе уже торт штендер и при этом обратите внимание у нас сохраняется и размерность эдип тех значений которые у нас были изначально и

обратите внимание у нас сохраняется и размерность эдип тех значений которые у нас были изначально и более того у нас все сделано так что нас не происходит копирование элементов то есть у нас тех же ячейках памяти хранятся эти элементы которые записаны тендере torch а как это можно проверить вот если мы увидим что мы как бы занулим б то у нас изначальный массив а нам polski и а тоже за на улице вот он был имел какие-то значения случайны и тут вдруг стал нулевым и наоборот если мы хотим

улице вот он был имел какие-то значения случайны и тут вдруг стал нулевым и наоборот если мы хотим конвертировать из торчал нам нам поль то мы просто берем . нам поль и нам возвращается из torch а нам павский нам по и вский массив и при этом все время сохраняется форма и типа да и видим что если мы меняем элементы в компонента у нас меняются эти элементы которые были в торчат это говорит о том что у нас элементы хранятся все тех же ячейках памяти отлично давайте теперь же реализуем еще одну

что у нас элементы хранятся все тех же ячейках памяти отлично давайте теперь же реализуем еще одну простенькую задачу реализуем простой нейрон нейронной сети царицы ватт с активацией 7 дней что нам для этого нужно вот у нас есть какой-то вектор объектов то есть наши признаки пусть он в этом размера 3 на 2 и у нас есть матрица весов размер 2 точнее размера 2 на 1 реализуем функцию на нашего нерона то есть мы с вами знаем что у нас в nero не происходит перемножении наших признаков навис а дальше

то есть мы с вами знаем что у нас в nero не происходит перемножении наших признаков навис а дальше они суммируются и на них еще накладывается там функция активации в данном случае мы воспользуемся 7 lei то есть у нас есть какой-то вектор признаков мы его перемножаем свои пусть это будет называться логин и теперь мы хотим просто их перевести к перевести в вероятностью что для этого нужно сделать надо применить функцию активации и вот видим действительно у нас из трех объектов которых было по два

применить функцию активации и вот видим действительно у нас из трех объектов которых было по два признака когда мы их перемножили с нашими сами и активировали нас получилось также три объекта и при этом они еще имея от нормированные от нормированы имеют диапазон от нуля до единицы таясь имеют как бы значение вероятности хорошо отлично теперь настало поговорить про вторую особенность поэту арч это то что вычисление на python могут производиться на графических программных ускорителях так повелось

то что вычисление на python могут производиться на графических программных ускорителях так повелось что в мышином в сфере машинного обучения очень часто используют графические процессоры фирмы видео и с использование технологии cuda которая тоже была разработана этой компания и давайте поговорим как можно перевести и вам вычисление с циpкa на gpu как перевести наши объекты с из памяти нашего дам компьютера на память видеокарты и как это делать обратно и что делать в случае если мы хотим удалить

на память видеокарты и как это делать обратно и что делать в случае если мы хотим удалить из памяти видеокарты там наши элементы которые уже этом не используются хорошо давайте создадим какой-нибудь тендер с с равномерным распределением и проверим находится ли он сейчас на куда с помощью метода есть куда которое решать нам truly фолз мы видим что наши тендер сейчас не на куда еще можно использовать менеджер памяти видеокарты 7 видео терри сми которым показывает нам состояние нашей карточки вот

менеджер памяти видеокарты 7 видео терри сми которым показывает нам состояние нашей карточки вот видим что у нас сейчас доступна тесла к 80 который на который сейчас свободна и которым мы можем загрузить давайте сделаем следующее с помощью метода куда мы переведем наш сендер в памяти видеокарты вот видим что какое-то время оно подгружается калом в это время нам выделяет какое-то какую-то память на карте и видим что теперь когда мы запускаем менеджер памяти на видеокарте у нас теперь какое-то

на карте и видим что теперь когда мы запускаем менеджер памяти на видеокарте у нас теперь какое-то количество памяти на видеокарте уже задействованы вот это говорит о том что мы успешно перевели наш тендер память видеокарты и теперь если мы его распечатаем то увидим что теперь у нас есть такая при близко девайс то есть это место где я то есть тот девайс на котором сейчас расположен наш сендер видим что он не раз находится на кубе и еще есть индекс 0 это просто номер той карточке на которой

видим что он не раз находится на кубе и еще есть индекс 0 это просто номер той карточке на которой находится наш тендер если мы вдруг хотим перевести его обратно на циpкa то просто используем метод . циpкa посмотрим что произойдет видим что теперь после того как мы перевели объект на цикл у нас к сожалению в нашей памяти все еще осталось за хашира ван тот объем памяти который был вы он падает это мест вот зачастую нам не хочется чтобы эта память оставалось задействовано мы хотим ее почистить

мест вот зачастую нам не хочется чтобы эта память оставалось задействовано мы хотим ее почистить вот это можно делать с помощью торт . куда . им тикать которые пытаются почистить зафиксированную память который уже не используется и вот мы видим что после того как мы прописали . mdk у нас количество памяти немножко уменьшилась вообще есть более умный способ как переводить и куда на циpкa использовать функцию куда из его любым то есть накладывать такое условие что если нам доступно куда-то мы

функцию куда из его любым то есть накладывать такое условие что если нам доступно куда-то мы разрешаем девайс куда а если нет то тогда различаем циpкa таким образом с помощью оператора то есть еще не туда ту мы можем переводить легко наш объект на куда если вдруг у нас доступна какая-то видеокарта и на циpкa если вдруг она недоступна обратите внимание что метод то мы уже использовали когда хотели перевести тендер какому-то другому типу мы тоже использовали метод у когда мы к ставали тендеры вот

перевести тендер какому-то другому типу мы тоже использовали метод у когда мы к ставали тендеры вот здесь точно также можно использовать на метод тут для того чтобы переводить на девайс вот хорошо давайте теперь перемножим наши какие-то два тендеры на на куда потом переведем на куда дальше мы их перемножим и леди вернем на цпу и вот у нас есть матрица которая хранится уже на цпу но была переложена на видеокарте вот но если вдруг мы попытаемся наши объекты которые находятся на разных местах то

на видеокарте вот но если вдруг мы попытаемся наши объекты которые находятся на разных местах то есть один объект у нас будет spa 2 на куда-то если мы вдруг попытаемся что-то с ними сделать там сложить или перемножить то у нас мы даже у нас возникнут ошибка о том что мы так делать не можем вот поэтому нужно осторожно это быть осторожным перед тем как проводить какие-то операции между тендерами нужно хранить их в одном месте и вот один такой пример вот как раз таки с помощью тоже куда и зевали

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

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

мы хотим вычислить и по ходу того как мы его вычисляем python запоминает все эти параметры которые использовались для его вычисления и более того он сохраняет производные выходов по тем параметров и от которых зависит наше выражение и когда мы хотим посчитать а как же у нас зависит наше выражение от тех правил от входных параметра в то мы можем использовать метод б проб то есть алгоритм обратного распространения и мы можем пройтись по нашему графу вычисления в обратную сторону используя те

распространения и мы можем пройтись по нашему графу вычисления в обратную сторону используя те параметры которые сохранились и использую правил этого chain rule мы можем легко вычислить ингредиенты нашего выражения которое зависит от во входных параметров это может быть немножко сложно но что очень приятно то что на практике нам не нужно париться над тем какие там градиенты находится под капотом как они вычисляются мы можем сможем легко их использовать набрать хорошо мы поговорили про градиенты

они вычисляются мы можем сможем легко их использовать набрать хорошо мы поговорили про градиенты то что в python вычисляются градиенты автоматически давайте попробуем воспользоваться этими градиентами для того чтобы решить небольшую задачку регрессия именно мы сейчас будем предсказывать цены на жилье в астане используя python импортируем наш data set который уже встроен в внутри dc торцы кеплер и построим вопрос посмотрим как он выглядит и вот видим примерно так у нас выглядит цены на какие-то

построим вопрос посмотрим как он выглядит и вот видим примерно так у нас выглядит цены на какие-то объекты в нашем даже с этим созданием матрицу весов и при этом создать матрицу свободных весов которым мы будем прибавлять к значениям получены после перемножения наших признаков на матрицу весов извлечем наши значения нравятся театра то есть наши наши объекты наши признаки и правильные ответы те значения которые нужно предсказывать и вот если мы хотели бы что-то предсказать представим что эти эта

которые нужно предсказывать и вот если мы хотели бы что-то предсказать представим что эти эта матрица весов у нас не случайно она у нас верно и то мы бы просто умножали матрицу весов на наши аргументы на даче на наше назначение наших признаков и дальше прибавляли бы значение b и считали было с как бы мы стали lose вот это было бы значение предсказанная минус истинно то есть мы допустим хотим посчитать метрикой вас я то есть квадрат отклонения от истиннаго значения и смотрим разницу между

посчитать метрикой вас я то есть квадрат отклонения от истиннаго значения и смотрим разницу между предсказанным и истинным значением возводим в квадрат и считаем среднее по каждому объекту дальше поэтому лоссу мы считаем backward то есть вычисляем градиенты от которых that i lose зависит врачом и вот если бы мы хотели эти мы уже с вами вы выделите градиенты по сути эти градиент и это то как и зависят наши классы от наших каких-то параметров например от матрицы b или от матрицы b или twitter б

наши классы от наших каких-то параметров например от матрицы b или от матрицы b или twitter б вроде реализуем простой цикл обучения в котором будут использоваться наш игредиент и мы очень часто будем писать подобный цикл обучения сейчас я просто реализуем с целью посмотреть как нас вычисляются great move как у нас автоматически вычисляются ингредиенты хорошо первое что мы будем несколько итераций делать эту операцию первое что мы делаем что вы часа делаем предсказание пор по использую матрицу

делать эту операцию первое что мы делаем что вы часа делаем предсказание пор по использую матрицу сов которую мы инициировали инициализировали выше и теперь по этой матрицы весов нам жира высчитать лосс давайте возьмут выше где мы реализовали сабля им сюда и теперь нам нужно поэтому лоцию еще сделать обратное распространение чтобы посчитать градиент вы считали backward теперь нужно сделать шаг градиентного спуска по матрице весов то есть поменять этом от изменить эту матрицу весов чтобы наша

градиентного спуска по матрице весов то есть поменять этом от изменить эту матрицу весов чтобы наша модель начала предсказывать чуть лучше ну давайте это сделаем и у нас есть центр весов ну вытаскиваем его и значения и дальше на делаем по нему шаг градиентного спуска пусть он будет сыт умножением на константу то есть на конца на который называется обычно лёнинг или еще ее называют шагом градиентного спуска не умножаем дальше еще на градиента которого за были вычислены когда мы сделали bk хорошо

спуска не умножаем дальше еще на градиента которого за были вычислены когда мы сделали bk хорошо аналогично мы делаем для матрицы лесов b так проверяем что у нас все да еще конечно же надо именно взять значение хорошо сейчас мы совершили градиентный спуск по нашей матрицы теперь еще важно обнулить наш игредиент и потому что при каждом цикле попытки предсказать настоящие цены на жильё нас эти градиенты будет накапливаться и чтобы каждый раз и использовать нужны ингридиенты нам нужно их 1

градиенты будет накапливаться и чтобы каждый раз и использовать нужны ингридиенты нам нужно их 1 обнулять ну чуть позже будем говорить об этом более подробно сейчас просто их обнуляй град да это и сделаем как жира используя им place метод это мы сделали шаг обнулили градиенты pb давайте сделаем ещё пол в так отлично теперь детстве все мы сделали правильно то по идее у нас должна модель научиться предсказывать наше значение так и вы видите сейчас процесс обучения то есть вначале вы видели что

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

эти хорошо на этом все то есть обратите внимание как мы использовали наши ингредиенты которые подсчитывались то есть после каждого вычисления лосса мы делали backward и в этот момент вычисляли градиенты которые у нас дальше уже использовались для того чтобы совершить шаг оптимизации хорошо давайте реализуем такую простую нейронную сеть мысль двухслойную нейронную сеть что мы сделаем мы создаем наши входные данные потом используем создаем 1 матрицу весов для первого слоя и вторую матрицу весов

входные данные потом используем создаем 1 матрицу весов для первого слоя и вторую матрицу весов для автора весла и указываем для них рик вальс град то есть требованием то что наши клиенты должны быть снят завершаем преобразование над нашим входными данными с помощью первой матрицы весом используем функцию стрелу которая просто загуляет все значения которые меньше нуля и опять при умножаем с матрицей весов в 2 и получаем лосс хожу посчитаем запустим и посмотрим что у нас получилось и вот теперь

весов в 2 и получаем лосс хожу посчитаем запустим и посмотрим что у нас получилось и вот теперь если мы обратимся к нашим элементом через . да мы увидим что для них всех выселились ингредиенты вот хорошо но вот если мы посчитаем градиент для loss мы увидим что у нас ничего нет это потому что вот вот этого значения lose она нас не являлась каким-то элементам нашего нашего графа мы его просто сами вычислили и вот чтобы все-таки сохранять вот эти вот градиенты мы можем использовать метод или train

и вот чтобы все-таки сохранять вот эти вот градиенты мы можем использовать метод или train град и в таком случае у нас сохраняться градиенты для высчитываем их элементов для нашей на примеров функции loss вот видим что нас сохранился градиент вот но те объекты которые не требовали нашего греть не требовали вычисление градиентов они к сожалению вот если мы обращаемся к ним через точку рад они нам ничего не доверяю потому что я не градиенты не считались то есть у нас нет этих там клиентов которые

не доверяю потому что я не градиенты не считались то есть у нас нет этих там клиентов которые помещаются в поле через точку град вот и бывают случаи когда нам вообще-то говоря эти градиенты считать и не нужно то есть например когда вы обучаете вашу модель вам нужно необходимо учитывать градиенты чтобы у вас подсчитывались там функций ошибок но когда вы его лидируете вашу модель то есть вы используете только форвард пропадешь им вам не нужно рассчитывать эти градиенты к тому же вычисления этих

только форвард пропадешь им вам не нужно рассчитывать эти градиенты к тому же вычисления этих градиентов требует большего количества времени и чтобы не подсчитывать эти клиенты вы можете использовать контекста менеджер пойдешь дочь пальто рж . наград под которым у вас операции которая будет происходить они не будут требовать вычисления градиентов а не будет явным говорить культура потрачу чтобы он не вычислил дне вычислял градиенты не тратил на это время и от этого у вас вашей алгоритмы будет

он не вычислил дне вычислял градиенты не тратил на это время и от этого у вас вашей алгоритмы будет работать только быстрее хорошо сегодня мы разобрали синтаксис и семантику python мы поговорили про основные его отличие от нам по и мы убедились что очень похож на нам поль но у него есть такие отличия как возможность впечатления на графических обратных скриптов то есть вычисления на видеокартах при этом мы разобрали то что в по турчак и мочить его автоматически вычисляются градиенты от этого нам

этом мы разобрали то что в по турчак и мочить его автоматически вычисляются градиенты от этого нам становится проще жить проще вычислять функция ошибок вот какие то дополнительные материалы которые использовались для написания этого ноутбука приведены здесь в ссылках на этом сегодня мы заканчиваем наш разговор про питер дж оставайтесь с нами и увидимся на следующем семинаре

всем привет меня зовут александр и миленьким и мы продолжаем блок работы с нейронными сетями сегодня мы разберем как можно на python обучать какие-то простые архитектуры чтобы решать например задачу классификации то крыша прием к ноутбуку начнем с того что импортируем опять классические наш python и поговорим теперь про dtc на котором сегодня будем решать задачу классификации назад представляет из себя набор рукописных цифр все всего у нас есть к 60 тысяч изображений это изображение 28 на 28

из себя набор рукописных цифр все всего у нас есть к 60 тысяч изображений это изображение 28 на 28 пикселей на каждый каждому изображению соответствует класс соответствующего числа то есть от нуля до девяти там у нас серые фиксили то есть у нас изображение плоские эту семей всего лишь один канал давайте попробуем импортировать этот над высоты посмотреть его размера видим что у нас в тренировочной выборки у нас находится 60 тысяч изображений и в тестовый у нас еще 10000 для того чтобы

выборки у нас находится 60 тысяч изображений и в тестовый у нас еще 10000 для того чтобы варьировать модель сами изображения на состоят из имеет размерность 128 на 28 здесь как я сказал у нас первый это канал и дальше у нас высота и ширина изображения теперь поговорим про такой полезный инструмент python когда-то лоадер в общем чтобы упростить работу с вашими данными в данном случае с картинками формочки использует этот удар который автоматически умеет разбивать ваши набор до ваши набор данных

формочки использует этот удар который автоматически умеет разбивать ваши набор до ваши набор данных инаба че то есть на небольшую группу картинок в данном случае на ваш размер 128 на 128 картинок это сделано для того чтобы сразу не подгружать в оперативную память сразу все изображения потому что скри села низом не поместятся вот мы будем подгружать только небольшую их часть совершать обучения и дальше подгружать новый патч data logger когда мы по нему интегрируем ся он умеет автоматически

и дальше подгружать новый патч data logger когда мы по нему интегрируем ся он умеет автоматически группировать эти бача при этом он умеет еще [музыка] их если нужно как-то шарф лить то есть миксовать чтобы у вас модель мне обучалась сначала на одном классе потом на другом потом на третьем чтобы она обучалась сразу на случайном наборе классов и вот видим что если мы возьмем один одну итерацию по нашему воды тула удару то мы получаем вот матч размера 128 на 128 на 128 получается у нас в одном

нашему воды тула удару то мы получаем вот матч размера 128 на 128 на 128 получается у нас в одном наборе в этом бачуна 128 изображений и который имеет размерность 128 на 28 и при этом у нас еще есть набор правильных ответов то есть набор классов которые к которому принадлежат соответствующие изображения ради построим небольшую такую простенькую моделями классификации изображений и причем как моя построен построен давайте поговорим вообще говоря о том что нам нужно для построения модели вот у

построен построен давайте поговорим вообще говоря о том что нам нужно для построения модели вот у нас есть какой-то наш тендер обычно помимо наших данных нам еще нужно определиться с функцией потерь то есть с функцией ошибки которые мы будем пытаться автоматизировать данном случае мы воспользуемся функцией кровь энтропией которая берется обратите внимание от влаги тов то есть от выходов вашей нейронной сети и сама уже работает с риме ланит эмитентом нормируют ей так как не нужно но вот то есть

сети и сама уже работает с риме ланит эмитентом нормируют ей так как не нужно но вот то есть мы не работаем с уже готовыми вероятностями то есть мы не используем весь софт ваться то есть мы работаем с среди выходами и вот вот давайте напишем простой слик обучение с мы проходим по количеству вздоха эпоха это проход по всему по всему нашему data set у заходим одну эпоху и дальше тренируемся по нашему дотла удару то есть перебираем наши матчи который у нас формирует наш data laughter данном случае

дотла удару то есть перебираем наши матчи который у нас формирует наш data laughter данном случае наше так как наша картинка имеет размерность 28 на 28 пикселей мы сейчас сделаем совсем по-простому мы просто быть и мне им нашу картинку в вектор печей то есть вода у нас будет просто не картинка а вытянутый список значений то есть просто вектор дальше мы вычисляем по нему по нашему большом то есть так так как мы реализуем сейчас однослойную нейронную сеть то есть мы и не цари инициализировали

так так как мы реализуем сейчас однослойную нейронную сеть то есть мы и не цари инициализировали какой-то тендер весов при этом еще как-то от нормированный и при этом еще учитывающий что он требует градиентов то есть для него будет подсчитываться градиент и мы для этого некоторые весов использует одет крыса умножаем наш на наш больших значений считаем вероятности и дальше мы подсчитываем функцию функцию ошибок то есть берем наши вероятности считаем там от них логарифм усредняем и дальше делаем

функцию ошибок то есть берем наши вероятности считаем там от них логарифм усредняем и дальше делаем backward по нашему по нашей функции ошибок то есть по нашей функции которая является по сути там некой ошибкой того как наша модель предсказала плюс на для этим для этой функции g бог известные loss мы вычисляем эти ингредиенты дальше делаем следующее мы делаем некий шаг градиентного спуска то есть у нас известны ингредиенты для нашего для нашей матрицы и лесов и мы просто-напросто делаем шаг по

у нас известны ингредиенты для нашего для нашей матрицы и лесов и мы просто-напросто делаем шаг по по этой матрицы то есть по то есть совершаем некий градиентный спуск умножая при этом на lernen крейг наш наши градиенты и отнимая это вот наши матриц и в конце мы обновляем vesa обновляем наши градиенты это сделано для того чтобы они не накапливались и у нас не было какого-то аномального поведения работы нашей сети вот видим что у нас совершилось три эпохи если теперь мы проверим как у нас

работы нашей сети вот видим что у нас совершилось три эпохи если теперь мы проверим как у нас менялся функций ошибок за по всем этим большим за три эпохи мы получим примерно вот такой вид видим что действительно нас функции функция ошибок уменьшалось по ходу обучения от сети то сидим хорошее поведение значит у нас должно быть какая-то адекватная точность и видим что за три цикла обучения на шинирования сеть выучилась до точности в 90 процентов то есть в девяти случаях ли снести мы будем верно

сеть выучилась до точности в 90 процентов то есть в девяти случаях ли снести мы будем верно угадывать класс который изображен на картинке хорошо но обратите внимание сейчас мы почти в в ручном режиме прописывали это обучение то есть мы сами не целях инициализировали матрицу весов то есть мы сами совершали вычислении вот этой функции потерь сами производили оптимизацию матрица весов и это не очень удобно можно вообще-то говоря выйти немножко на более высокий уровень то есть увеличить уровень

удобно можно вообще-то говоря выйти немножко на более высокий уровень то есть увеличить уровень абстракции и сильно упростить я во первых код и вот река себе задачу как это можно сделать во первых на потёр чем же можно использовать разные уровни абстракции то есть можно использовать уже готовые различные модули которые позволяют вам писать меньше кода хорошо поговорим теперь про более сложные модели python что-то достаточно гибкий фреймворк для построения любой нейронной сети и тут существует

python что-то достаточно гибкий фреймворк для построения любой нейронной сети и тут существует несколько уровней абстракции например первый уровень абстракции которые мы как раз использовали выше называется br бон это когда мы напрямую манипулируем тендерами то есть пишем бери перемножаем тендеры там напрямую руками там напрямую пишем оптимизацию весов этих тендеров вот это такой вот хороший способ но у него очень высокий уровень гибкости потому что мы можем сами кодировать там любые моды вот

но у него очень высокий уровень гибкости потому что мы можем сами кодировать там любые моды вот но при этом уровень комфорта достаточно низкий то есть нам все вещи приходится заново переписывать руками мы заново пишем слои бывают достаточно сложный слои не возникают какие-то не очень приятные вещи вот потому что сложность нейронной сети она может сильно варьироваться и у нас могут возникать всякие там сложности которую нужно учитывать партнерш конечно их там решает при работе с цензорами они

там сложности которую нужно учитывать партнерш конечно их там решает при работе с цензорами они там такие какие-то сложности решены но все равно есть некоторые трудности вот есть второй уровень абстракции м моделям достаточно распространенный он более иначе его чаще используют потому что у него также уровень гибкости высокий но при этом уровень комфорта средний вот мы уже выше чем чем когда мы пишем когда мы оперируем на нам тендерами вот при этом если мы говорим про антенный модуль нас и уже

когда мы оперируем на нам тендерами вот при этом если мы говорим про антенный модуль нас и уже реализовано большое количество слоев там линейные слои своей активации слои для последовательностями пудинги дропауты batch нормы про все эти вещи мы еще поговорим о в курсе при этом использованы различные ajax функции то есть функции потерь том круз энтропии она не глаз и но множество других там для задачи регрессии там м с е loss и так далее то есть уже очень много готовых решений когда мы можем

задачи регрессии там м с е loss и так далее то есть уже очень много готовых решений когда мы можем просто вставлять себе в год ношу архитектуру использовать вот есть третий способ тоже один из способов один из уровней абстракции и the man in a second шел он более такой мини гибкий но при этом достаточно удобно давайте сейчас про него как раз и поговорим в если мы захотели бы реализовать тот тут же нейронную сеть которая была выше то мы могли это сделать следующим и берем в качестве первого слоя

нейронную сеть которая была выше то мы могли это сделать следующим и берем в качестве первого слоя линиями слой которая на вход подаются наши признаки которых там 28 на 28 на выходе у нас шестьдесят четыре слоя дальше мы используем функцию активации и еще один слой который будет переводит переводить еще один ленин слой который будет переводить наш там 64 выхода в количество классов вот уже видим что намного комфортнее так как мы нам не нужна охрана и хранить несколько центров потому что по сути

намного комфортнее так как мы нам не нужна охрана и хранить несколько центров потому что по сути каждый линейный слой это тензор весов если бы мы оптимизировали такую сеть на уже три двухслойном бы уже бы так просто так просто бы не пришлось нам бы пришлось оптимизировать каждый из слоев использовать их там перемножением и это было бы труднее вот таком виде задача решается уже намного проще обратить внимание при задачи классификации нам не нужен софт макс сов макс на выходе потому что если мы

внимание при задачи классификации нам не нужен софт макс сов макс на выходе потому что если мы используем нам функцию потерь она уже умеет работать с лагерями то есть выходами измененного слоя если даже у вас нейронная сеть очень длинное или там архитектуры сложное вы можете в так руками не прописывать последовательно все слои а просто использовать метод get модуль для цикла решала и там в каком цикле интерактивно по вставлять ваши нужны слои вашу вашу архитектуру офис скрытие вот есть удобный

цикле интерактивно по вставлять ваши нужны слои вашу вашу архитектуру офис скрытие вот есть удобный такой метод самаре действия торчи самаре которые позволяют вам легко вашу архитектуру отрисовать хорошо давайте попробуем обучить вот это вот модель чуть выше и перед тем как и обучать мы с вами еще раз обсудим какие при вещи нам нужны для обучения первое это конечно же модель второе это функция потерь или ajax and function это та функция которую мы хотим оптимизировать то есть мы верим что если

или ajax and function это та функция которую мы хотим оптимизировать то есть мы верим что если мы пытаемся уменьшаем эту функцию то есть еще мнение минимум и при этом увеличив какой-то точность нашей модели водки трети от оптимизация оптимизация ты там по сути оптимизатор который пытается как раз таки минимизируют нашу функцию потерь и когда мы переходим в python с помощью всех этих трех для всех этих трех шагов нас есть соответствующий модуль например для модели у нас есть и на нём модуль для

этих трех шагов нас есть соответствующий модуль например для модели у нас есть и на нём модуль для функции потери у нас есть также ннн модуль или еще есть модуль н infarction пожить этом уже реализованные функции потерь и если мы говорим про какие-то оптимизатор это у нас есть . obtain в котором был сохраняться различные оптимизаторы вот такие как например адам сгд то есть старый статистический ингредиенты спуск один из тоже способов оптимизации арамис пробов к которым люди там узнали из по

ингредиенты спуск один из тоже способов оптимизации арамис пробов к которым люди там узнали из по которым нет статьи о нем знают как как какие-то слайды на лекции домой преподавателей вот и все ссылается на эти хорошо давайте для нашей задачи мы возьмём в качестве функций потерь кровь энтропию а для оптимизации мы возьмем оптимизатор адам с уже с целебным cray там 10 единственное 10 в минус 3 из некоторыми параметрами бета хорошо запускаем нашу модель и вот смотрите уже используя ту модель

из некоторыми параметрами бета хорошо запускаем нашу модель и вот смотрите уже используя ту модель которую мы написали выше с помощью их она нэнси cancel на скот уже стал более читаем и то есть уже намного комфортно с ним работать но давайте поэтапно разберем что здесь происходит первое мы также загружаем наши большие тыс вытянутый в линию переводим его на девайс то есть на данном случае на липу и далее делаем следующее мы прогоняем его через нашу модель и получаем наши выехали нашего гиты

и далее делаем следующее мы прогоняем его через нашу модель и получаем наши выехали нашего гиты которые мы используем для того чтобы посчитать нашлось то есть выше мы определили джорджем то есть в функцию потерь помещаем в нашу функцию потерянное хоть подсчитаны лаги ты и правильные значения классов и получаем лосс мы уже записываем чтобы потом от прессовать его поведению а далее поэтому лоссу мы делаем бекфорд то есть рассчитываем градиенты чтобы узнать как наша функция потери зависит от

мы делаем бекфорд то есть рассчитываем градиенты чтобы узнать как наша функция потери зависит от параметров модели и чтобы эти параметры дальше мы использовать эти градиенты и после оптимизировать оптимизировать веса параметры нашей модели мы используем optimizer делаем optimizer . стать то есть делаем шаг градиентного спуска и обратите внимание на некую магию наш optimizer как-то оптимизируют наши параметры нашей моделью хотя мы ему по сути их не подаем в явном виде суть очень проста когда мы

параметры нашей моделью хотя мы ему по сути их не подаем в явном виде суть очень проста когда мы этот параметр тогда мой optimizer наш задавали мы ему на вход передали в модели нашей парами параметры нашей модели и теперь optimizer учат говоря про них знает и каждый раз когда мы делаем нос backward наши градиенты обновляются и дальше optimizer делает шаг игредиент вас пуска боя по параметру про которым уже знает вот и теперь если мы обучаемся в три эпохи теперь обретите мир они у нас сейчас уже

уже знает вот и теперь если мы обучаемся в три эпохи теперь обретите мир они у нас сейчас уже двухслойная сеть и посмотрим на поведение функций потерь вот она имеет примерно вот такой вид то есть всего пять хорошо и при этом получаем точность уже 93 процентов то есть выше чем когда мы использовали модель в один слой что уже логично потому что мы сложите усложнили архитектуры нашей модели и как вы увеличили соответственно ее точно на этом у нас сегодня все давайте еще раз кратко пробежимся

вы увеличили соответственно ее точно на этом у нас сегодня все давайте еще раз кратко пробежимся потому о чем мы сегодня поговорили то есть когда мы строим нашу нейронную сеть мы говорим первых про модель которую мы выбираем второе это функцию потерь которую мы будем оптимизировать и дальше третье это наши оптимизаторы который мы используем для того чтобы нашу функцию потерь оптимизировать вот и давайте еще запомним важные шаги для того чтобы совершить это обучение то есть совершить наш тренер

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

не можем оперативной памяти хранить сразу все дальше по проход по нашей сети по нашей неровной сети и получаем водицы то есть выходы нашей нейронной сети подсчитываем функцию потерь подсчитываем градиент и от которых зависит наша функция потери и делаем шаг оптимизации вот ну и конечно же еще пару таких нюансов просто помните про них-то то что вам нужно обновлять бриллиант если вы не хотите какого-то аномального поведения вашей сети потому что каждый раз когда вы когда вы производите вычисления

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

можно это делать в любой момент но только лишь не не между тем как вы вычислили эти градиенты и пытайтесь по ним оптимизировать то есть в любой момент но только не между лосс backward и optimizer стать вот на этом давайте заканчивать мы сегодня разобрали такую популярную технику обучение нашей нейронной сетки при этом мы с вами почти руками написали нашу какую-то простую архитектуру 2 наши двухслойную модель показали что она достаточно хорошо справляется с классификацией что мы можем спокойно

модель показали что она достаточно хорошо справляется с классификацией что мы можем спокойно на не очень высказал сложной архитектуре добиться достаточно хороший точности все на этом давайте прощаться

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

точных нейронных сетях и очень сильно помогает при обучении и в конце мы поговорим про то какие вообще задачи компьютерного зрения существуют давайте начнем с ума нет и начинает эта база данных содержащая картинки разделенный на тысячу классов в этой базе данных на момент записи этого видео находятся больше 14 миллионов изображений эта база данных начала собираться 2010 году и собирается до сих пор с помощью краудсорсинга тогда же в 2010 году стартовал конкурс на основе этой базе данных конкурс

с помощью краудсорсинга тогда же в 2010 году стартовал конкурс на основе этой базе данных конкурс по классификации картинок и начнет конкурсантам нужно придумать такую модель машинного обучения которое может обучиться на картинках из и начинает и по новые картинки потом предсказать какому классу из этих тысячах картинка относится ну короче нужно решить задачу классификации картинок на тысячу классов здесь на слайде вы видите начало таймлайна этого конкурса 2010 2011 году лучше на тот момент

здесь на слайде вы видите начало таймлайна этого конкурса 2010 2011 году лучше на тот момент модели машинного обучения имели 2825 пациентов ошибок и тогда это считалось довольно хорошо нужно отметить что эти модели машинного обучения были не на основе нейронных сетей к тому моменту конечно нейронной сети уже существовали более того существовали даже свёрточная нейронные сети но в тот момент они были довольны слабыми и люди думали что для обработки изображений не не получится хорошо использовать

довольны слабыми и люди думали что для обработки изображений не не получится хорошо использовать нейронные сети не свёрточная необычные то есть люди считали что изображение это довольно сложная штука и чтобы хорошо решать задачи классификации изображений нужно использовать стандартные методы так вот в 2010 2011 году вот эти модели которые выигрывали в этих годах конкурс и мадинат были на основе обычного машинного обучения давайте рассмотрим пример как можно обрабатывать изображение без deep

обычного машинного обучения давайте рассмотрим пример как можно обрабатывать изображение без deep learning а то есть как до эры deep learning a и раз вертексных нейронных сетей которые началась 2012 году люди обрабатывали изображение вот на слайде представлена идея метода которая называется хоб или гистограмму friend от градиент я расскажу только общую идею методы на деле он намного сложнее там присутствуют еще много разных доработок и улучшений но как бы мы поговорим об основной идеи идея

присутствуют еще много разных доработок и улучшений но как бы мы поговорим об основной идеи идея следующие на слайде вы видите картинку . давайте рассмотрим маленькую часть этой картинки которые я выделила синеньким квадратиком эта маленькая часть 5 на 5 пикселей вы знаете наверное что картинки в компьютеры представляются матрицами пикселей матрицами чисел так вот вот эта маленькая часть картинки который я выделила синеньким это маленькая матрица размера 5 на 5 и у неё и средний пиксель которая

который я выделила синеньким это маленькая матрица размера 5 на 5 и у неё и средний пиксель которая здесь 85 давайте для этого пикселя посчитаем градиенты для пикселя будет два градиента горизонтальный и вертикальный считаться они будут очень просто вертикальный градиент для пикселя это будет просто разница пикселей выше этого пикселя и ниже этого пикселя то есть смотрите наш пиксель 85 выше 5068 ниже 56 и значит вертикальный градиент градиент по оси y будет 6850 68 таким образом что это

5068 ниже 56 и значит вертикальный градиент градиент по оси y будет 6850 68 таким образом что это горизонтальный градиент мы считаем разницу правого и левого печные правой пиксель 89 левой 78 градиент 11 таким образом мы посчитали для нашего среднего пикселя 2 градиента горизонтальные и вертикальные таким же образом мы можем почитать градиенты для всех пикселей картинки что мы потом с этими ингредиентами будем делать смотрите давайте немножко подумаем если мы возьмем пиксель картинки который

будем делать смотрите давайте немножко подумаем если мы возьмем пиксель картинки который лежит на пересечении как бы собаки и фона то есть примерно там где кончается голова собаки и начинаются фон картинки то тогда для такого пикселя градиенты будут по модулю довольно большими потому что именно около этого пикселя начинается фон и кончается собака то есть вот пиксель выше pride принадлежать пикселю фона а пик сильнейший пикселю собаки они будут иметь совершенно разный цвет и когда мы отнимем

фона а пик сильнейший пикселю собаки они будут иметь совершенно разный цвет и когда мы отнимем код 1 2 то получится достаточно большое значение а если бы мы взяли пиксель который лежит чисто внутри собаки то есть вокруг него все перешли примерно одинаково вы рыжего цвета или чисто внутри фона то есть пиксель сам белый и вокруг него пиксели тоже примерно белые тогда оба градиенты горизонтальной и вертикальной были бы довольно маленькими по модулю потому что мы брали обозначения как бы белого

и вертикальной были бы довольно маленькими по модулю потому что мы брали обозначения как бы белого пикселя и белого пикселя тут то есть получается что градиент и пикселя они как бы определяет некоторую информацию про этот пиксель где этот пиксель находится находится ли он на пересечении нескольких объектов на картинке находится ли он и пресечение текстур разных цветов элементов на картинке или нет так вот мы возьмем и для изображения для каждого пикселя этого изображения выделим по 2 градиента

так вот мы возьмем и для изображения для каждого пикселя этого изображения выделим по 2 градиента если на изображение было всего 200 пикселей например то градиентов у нас будет всего 400 отлично вот эти 400 градиентов это будет как раз фичи которую или из картинки и на этих вещах дальше мы обучим какой-нибудь обычный классификатор например венам forest или логистическую регрессию на задачу классификации то есть под line будет такой у нас есть картинка из картинки мы выделяем фичи или признаки с

то есть под line будет такой у нас есть картинка из картинки мы выделяем фичи или признаки с помощью вот таких вот градиентов и у нас есть классификатор который берет вот эти вот фичи и которые мы выделили из картинки и по ним выдает ответ как бы какому классу картинка принадлежит вот так просто повторюсь что на самом деле гистограмма форинтов градиент это немножко более сложная алгоритм и там еще есть такие вещи как нормализации для того чтобы там картинки с разными освещенностью с разными

еще есть такие вещи как нормализации для того чтобы там картинки с разными освещенностью с разными цветовыми гаммами обрабатывались адекватно еще некоторые вещи кроме градиентов но в любом случае идея методов которые были основаны не на нейронных сетях в эру до нейронных сетей стоит следующим мы берем картинку каким-то образом выделяем из картинки фичи которые что-то нам говорят о картинке и на этих вещах тренируем обычный классификатор с помощью обычного машинного обучения которым вы

и на этих вещах тренируем обычный классификатор с помощью обычного машинного обучения которым вы познакомились ранее например решающий деревья кнн линейные функции и так далее и так это то что происходило до 2012 года что же произошло в 2012 году 2012 году в конкурсе победил алекс нет наверное по названию вы уже догадались что это нейронная сеть смотрите алекс нет когда победила в конкурсе и и процент ошибок составлял всего 15 процентов то есть по сравнению с предыдущим годом где победила

и процент ошибок составлял всего 15 процентов то есть по сравнению с предыдущим годом где победила некоторая не нейронная модель это очень большой прогресс прошлая модель имела 25 процентов ошибок а модель алекс нет уже имеет 15 процентов ошибок более того это была не просто нейронная сеть это было свёрточная нейронная сеть в этот момент люди как раз поняли что нейронной сети обладают большим потенциал он задача связана с картинками и более того что это именно свёрточная сети которые могут

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

что здесь происходит ничего страшного в следующем видео я расскажу что такое свёртка что такое свёрточная сеть и как понимать вот эту архитектуру алекс на но пока что посмотрите на следующие здесь всего восемь слоев то есть это довольно маленькой нейронная сеть который состоит всего лишь из нескольких свертков 100 слоёв нескольких полна связаны слоев и активации реву вот конф это свёрточная слои канва лишь на свои пол это пулим про которые мы тоже поговорим сегодня после сывороточных слоев

канва лишь на свои пол это пулим про которые мы тоже поговорим сегодня после сывороточных слоев ярилу эта функция активации которая используется после каждого слоя сети и вот полна связанная с часть нашей сети тоже линейные слои плюс активации лилу ничего сложного и вот такая простая архитектура в 2012 году выиграла конкурс и начинает показала 15 что еще можно сказать смотрите конечно когда начался бум сетей все стали придумывать лучшие архитектуры спор точных нейронных сетей после олег сны

бум сетей все стали придумывать лучшие архитектуры спор точных нейронных сетей после олег сны 2013 появился zf нет дальше 2014 конкурс выиграла в ддв 2014 же году была представлена в google нет в 2015 было представлено сеть ресниц и это тоже в каком-то смысле был прорыв почему смотрите вот тут вот перед 2015 годом на таймлайне вы видите надпись съемок и 50 это значит что у человека на и начинайте в среднем получается сделать пять процентов ошибок что это значит это значит что если посадить

в среднем получается сделать пять процентов ошибок что это значит это значит что если посадить человека и дать ему классифицировать картинки и маринетт то в среднем человек совершит пять процентов ошибок у рис note 3 и 6 процента ошибок это значит что ресниц классифицирует картинки лучше чем человек это в некоторым обрыв образе некотором смысле прорыв но еще обратите внимание на то сколько слоев содержит каждой из этих сетей у алекс нет повторюсь 8 слоев у zf над которая пришла ему на смену

содержит каждой из этих сетей у алекс нет повторюсь 8 слоев у zf над которая пришла ему на смену тоже 8 слоев у бога нет уже 19 слоев у google лет двадцать два слоя у ресниц сто пятьдесят два слоя то есть смотрите сети растут в год вы наверное уже поняли почему то чем мы занимаемся называется deep learning потому что мы строим глубокие сети с очень большим количеством слоев и данный прорыв то есть построение таких больших сетей их обучения было бы невозможно если бы не было прорывов технологиях

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

судьбу графику процессор юнит процесс ряду позволяет обучать нейронные сети намного быстрее чем происходит обучение на обычных циpкa которые у вас компьютерах ну на этом мы завершаем introduction в историю с карточных нейронных сетей надеюсь я вас убедила что свёрточная нейронная сеть и это очень круто и что они не даром используются для задач связанных с картинками и в следующем видео мы с вами познакомимся с тем что такое свёртка и свёрточная нейронная сеть

привет в этом видео мы познакомимся с понятием свертки и свёрточная нейронная сеть и давайте рассмотрим datasette мне ст этот datasette рукописных цифр поделенных на 10 класса собственно цифры от 0 до 9 каждая картинка в этом дата сайте размеры 32 на 32 не оно чёрно-белое повторим что черно-белая картинка в компьютеры представляется матрицей чисел двумерной матрицы чисел и каждое число принадлежит отрезку от 0 до 255 это число и число выражает яркость пикселя обычно 0 это черный пиксель 255 это

отрезку от 0 до 255 это число и число выражает яркость пикселя обычно 0 это черный пиксель 255 это самый яркий белый пиксель здесь правда у меня на слайде наоборот вот картинка черно-белые восьмерки и восьмерка черные а фон белый и вот здесь вот маленький числа представляет собой белый цвет а большие числа черный цвет но в принципе это не суть важно картинки вот это с эти 32 на 32 поэтому вот это вот восьмеркой в нашу туда этом nist представляется матрица и двумерной размерности 32 на 32 то

это вот восьмеркой в нашу туда этом nist представляется матрица и двумерной размерности 32 на 32 то есть в ней всего 1024 числа давайте подумаем сначала как мы могли бы решать задачи классификации картинок и зато с этом вниз на 10 классов с помощью обычной полна связанной нейронной сети о которой вы говорили на прошлых уроках что вы могли бы сделать мы могли бы взять картинку она у нас размера 32 на 32 и растянуть ее вектор вектор размерности 1024 как бы мы это сделали очень просто мы берем

32 на 32 и растянуть ее вектор вектор размерности 1024 как бы мы это сделали очень просто мы берем картинку берем ее первую строчку берем вторую строчку вот конкатенировать вторую строчку с первой устройство получаем один такой вектор а у которого размерность будет 32 на 2 364 берем третью строчку кондиционируемые с первыми двумя плюс еще трассе два и так далее то есть мы как бы разворачиваем картинку вектор когда мы разве вот так картинку вектор кстати процесс представлен вот на гифке на

картинку вектор когда мы разве вот так картинку вектор кстати процесс представлен вот на гифке на слайде у нас получится 1024 значения на гифке на слайде тут написано 786 784 потому что на гифке показана картинка размерности 2828 у нас картинка размерности 32 на 32 поэтому у нас получится 1024 числа в этом векторе и этот вектор в которой мы растянем нашу картинку будет собственно входным вектором нашу нейронную сеть то есть это будет значить что в наша полна связано нейронной сети на первом

нашу нейронную сеть то есть это будет значить что в наша полна связано нейронной сети на первом слое должно быть 1024 нейрона и а наша как бы полна связанной нейронная сеть будет принимать на вход вот такой вектор который мы получим из картинки и прогонять через себя и классифицировать нашу картинку на 10 класс для этого не и в конечном слоя самом последнем должно быть 10 нейронов каждый из которых представляет собой один из 10 классов и выдает вероятности принадлежности класса какие бы здесь

представляет собой один из 10 классов и выдает вероятности принадлежности класса какие бы здесь были недостатки почему построить такую нейронная сеть было бы сложно на самом деле главных больших недостатков здесь два первый недостаток это в том что в первом слое неру носите получается слишком много нейронов смотрите у нас в нашем эта сеть и числа всего лишь 32 на 32 то есть картинки размерности всего лишь 32 на 32 это довольно маленькие картинки если мы захотим работать с картинками из реальной

лишь 32 на 32 это довольно маленькие картинки если мы захотим работать с картинками из реальной жизни там и людей картинками которые имеют размерность там 512 и 1024 то у нас в первом слое сети после растягивания такой большой идите картинки вектор будет очень-очень-очень много нейронов а чем это чревато тем что у нас тогда в первом слое сети будет очень много весов она же сеть полна связано это значит что нейроны input слоя соединены с каждого нейрона 2 слоя и весов будет очень много обучаемых

что нейроны input слоя соединены с каждого нейрона 2 слоя и весов будет очень много обучаемых параметра будет очень много сеть будет очень тяжелая и очень быстро переобучаться и вторая причина почему так делать плохо или точнее почему так делать не очень оптимально это потому что оно сломается пространственные отношения на картинке то есть смотрите вот здесь вот был на гифке пример с девяткой мы девятку растягивали вектор мы когда смотрим на девятку мы видим что ни есть связанный элемент что

девятку растягивали вектор мы когда смотрим на девятку мы видим что ни есть связанный элемент что девятка это некоторые связанный объект которые представляются кружочком и вот такой вот палочка внизу если вы растяните картинку вектор у вас вот этот кружочек он будет присутствовать совершенно разных местах этого вектора и как бы полна связаны нейронной сети будет очень сложно работать вот этим кружечку как с единым целым потому что он будет как бы разделен по разным местам этого вектора то есть

как с единым целым потому что он будет как бы разделен по разным местам этого вектора то есть мы не даём наши полна связно нейронной сети никакой пространственной информации оказалась бы мы как люди когда смотрим на картинке мы очень хорошо оперируем пространственной информации и она могла бы нейронной сети также очень сильно помочь классификации картинок вот две причины почему полностью разные нейронные сети не справляются с хорошей классификации картинка это как бы еще одно убеждение для вас

сети не справляются с хорошей классификации картинка это как бы еще одно убеждение для вас почему свёрточная нейронная сеть и такие классные и очень хорошо работу давайте теперь попробуем перенести вот эту идею сохранение пространственных пространственной информации на картинке и использования нейронной сети этой информации давайте попробуем построить твердость и нейронную сеть давайте во-первых подумаем что отличает четверку от восьмерки давайте предположим что мы решаем задачу классификации

подумаем что отличает четверку от восьмерки давайте предположим что мы решаем задачу классификации не на 10 классов сейчас министра она 2 класс что у нас есть только картинки четверок и картинки восьмёрок если бы мы решали такую задачу классификацию то мы бы подумали что отличает четверку от восьмерки как мы можем их отличить друг от друга на самом деле для человека до довольно очевиден у четверки на картинке преимущество на горизонтальной и вертикальной линии то есть четверка она вся состоит

на картинке преимущество на горизонтальной и вертикальной линии то есть четверка она вся состоит из горизонтальных двух таких палочек и вертикальный а у восьмёрки нет ни одной горизонтальной и вертикальной линии но зато есть много изогнутых линий то есть мы когда люди смотрим на эту картинку мы понимаем в плане некоторых шейпов половине которых паттернов вот у четверки есть паттерн и горизонтальных и вертикальных линий восьмерки есть паттерны изогнутых линий при этом у четверки паттернов

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

есть изображение уже знакомая нам восьмерка представлена виде матрица 32 на 32 введем понятие ядра или фильтра ядро и фильтр это одинаковое понятие взаимозаменяемыми они либо kernal либо фильтр на английском языке либо ядро либо фильтр на русском языке ядро или же фильтр это некоторая квадратная матрица размера н.н. например 3 на 3 как у меня на слайде мы сейчас этим ketron будем сворачивать наше изображение будем проходиться по изображению и сворачивать его как мы будем это делать сначала мы

изображение будем проходиться по изображению и сворачивать его как мы будем это делать сначала мы возьмем наше изображение и положим фильтр на левую верхнюю часть нашего изображения то есть закроем вот этим вот фильтром размера 3 на 3 в квадрате v 3 на 3 и на нашем изображении сверху слева вот здесь вверху я показала какой квадратик изображение закрыть сейчас фильтром дальше мы проведем операцию свертки этой части изображения этим фильтром что такое операция свертки это мы поэлементно умножаем

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

не на нуле она единицы и мы поэлементно будем умножать эти элементы которые накладываются друг на друга мы таким образом получим 9 чисел у нас же фильтр 3 на 3 значит 9 элементов он закрывает и значит 9 чисел мы получим потом мы эти девять числу сложим вот этот процесс представлена здесь вот виде не уравнения но в виде в виде уравнения в общем тут показано что вид я единицу умножая на 0 прибавляя к этому 2 умножить на 0 прибавляя к этому 3 умножить на 0 и так далее единице умножить на единицу

к этому 2 умножить на 0 прибавляя к этому 3 умножить на 0 и так далее единице умножить на единицу это единственный ненулевой элемент в этом сложение получится и получая в итоге единицу вот полученная после такой операции одно число будет новым числом первым пикселям нового изображения которое мы получим после операции свертки нашим фильтром вот этого изображения восьмерки и так получается что мы только что свернули одну часть нашего большого изображения с помощью фильтра 3 на 3 и из вот такого

только что свернули одну часть нашего большого изображения с помощью фильтра 3 на 3 и из вот такого вот квадратика 3 на 3 у нас получилось новое одно число это 1 пиксель нашего нового изображения что происходит дальше дальше мы подвинем наш фильтр на картинке немножко влево немножко на 1 пиксель теперь наш фильтр закроют новую часть картинки вот тут наверху показано какую часть картинки он теперь закрываем тут опять же часть картинки где всего один ненулевой элемент и когда мы сделаем ту же

закрываем тут опять же часть картинки где всего один ненулевой элемент и когда мы сделаем ту же самую операцию свертки который состоит в том что мы поэлементно умножим элементы нашего фильтра на элементы картинки на которых он стоит и все сложим то получится что сложение будет один ненулевой элемент это единицу умножить на -5 и в итоге новый 2 пиксель нашего итогового изображения будет минус 5 вот все просто наверное вы догадались что будет дальше дальше мы подвинем наш фильтр ещё на 1 пиксель

все просто наверное вы догадались что будет дальше дальше мы подвинем наш фильтр ещё на 1 пиксель и сделаем здесь тоже самое наш фильтр будет закрывать уже новую часть карте и тут мы проделаем то же самое по элементу можем фильтр начать картинки и сложим смотрите здесь уже наш фильтр закрывается два ненулевых элементов это вот элемент единицы под четверкой и элемент единицы под двойкой тогда и сунул под полученная сумма у нас уже будет 1 умножить на 4 плюс 2 умножить на 1 равно 6 вот 6 новые

сунул под полученная сумма у нас уже будет 1 умножить на 4 плюс 2 умножить на 1 равно 6 вот 6 новые пикси нашей картинки таким образом мы будем двигать наш фильтр в правый вправо и вправо по единице и получать все новые пикселя нашего нового изображения когда мы дойдем до конца то есть когда наша фильтра будет стоять вот здесь вот в конце мы просто перейдем на строчку ниже мы подвинем наш фильтр на 1 пиксель вниз опять же придвинем его влево и так же пойдем слева направо только уже как бы по

на 1 пиксель вниз опять же придвинем его влево и так же пойдем слева направо только уже как бы по второй ступени нашей картинки и будем получать новые пикси результирующие картинки уже на второй строчке вот здесь например мы стоим вот на этой части картинки и здесь мы получаем 4 умножить на 14 итак мы пройдем по всей картинке мы будем идти постоянно сверху вниз слева направо таким образом мы с вернём нашу картинку вот такой проход фильтра по картинке и получения новой картинки и старые

мы с вернём нашу картинку вот такой проход фильтра по картинке и получения новой картинки и старые называется как бы свёрткой этой картинке данным фильтром обратите внимание на следующие что если у нас изначально я картинка была размерности 32 на 32 то после свертки такой картинки фильтром размерности 3 на 3 у нас получится новая картинка размерности 30 на 30 то есть смотрите оно меньше чем была картинка изначально было 32 на 32 стала 30 на 30 то есть таким образом получается что результирующая

изначально было 32 на 32 стала 30 на 30 то есть таким образом получается что результирующая картинка будет размерность меньше и вот это результирующая картинка называется карта активации я позже объясню почему она так называется станет все понятно пока что посмотрим на следующее что я сказала только сторону только что поняли что наша картинка после операции сварки начинает уменьшаться то есть если мы свернём нашу картинку фильтром 3 на 3 или же фильтром там 5 на 5 7 на 7 то размерности карта

мы свернём нашу картинку фильтром 3 на 3 или же фильтром там 5 на 5 7 на 7 то размерности карта активации которая получится после свёртки будет меньше чем размер исходной картинки чтобы этого избежать можно сделать padding bathing это когда мы нашу картинку обрамляем некоторые рамочкой из пикселей то есть вот смотрите наш изначально картинка это красненькая картинка внутренняя вот это вот и мы ее как бы обрамили еще одним слоем нуле и вокруг слоем нулевых пикселей и из картинки 32 на 32 мы

ее как бы обрамили еще одним слоем нуле и вокруг слоем нулевых пикселей и из картинки 32 на 32 мы получили картинку 34 на 34 зачем а затем что если мы свернём уже такую картинку с помощью того же самого фильтра размерности 3 на 3 то полученная карта активации будет иметь размер из 32 на 32 то есть будет иметь ту же самую размерность что и наша изначальная картинка до применения padding таким образом с помощью паттингу можно манипулировать и размерностью карт активаций в которой у нас получится

с помощью паттингу можно манипулировать и размерностью карт активаций в которой у нас получится так же вот здесь нам предыдущих слайдах вы могли заметить что у меня здесь есть надпись строки и написано 1 вот страсть это то насколько я двигаю пикселей мой фильтр каждый раз когда прохожусь по картинке когда сворачиваю картину здесь я говорила что я постоянно двигаю мой фильтр на 1 пиксель влево и на 1 пиксель вниз на самом же деле можно конечно двигать его на несколько пикселей вот здесь например

1 пиксель вниз на самом же деле можно конечно двигать его на несколько пикселей вот здесь например есть гифка где показан процесс свертки изображения размерности 7 на 7 фильтром размерности 3 на 3 с тройным 2 это значит что каждый раз как вы можете заметить на гифке мы двигаем фильтр по картинке на два пикселя влево и на два пикселя вниз они найди обратите внимание что в таком случае конечно разлетелись в пикселей на результирующий картинки будет меньше и картинка сама будет меньшего разрешения

в пикселей на результирующий картинки будет меньше и картинка сама будет меньшего разрешения то есть если бы мы двигали фильтр 13 по такой картинки со встроенным один у нас бы получилось картинка размерности 5 на 5 а так со спрайтом 2 нас получится картинка размерности 3 на 3 то есть вот так вот из свертки ядром размерности 3 на 3 картинки размерности 7 на 7 у нас получилась картинка размерности 3 на 3 карта активации размерности 3 на 3 вот такие дела теперь еще один момент прежде чем мы

3 на 3 карта активации размерности 3 на 3 вот такие дела теперь еще один момент прежде чем мы перейдем к тому что же значит эти свертки зачем мы сворачиваем картин какими-то фильтрами и что такое карта активации заметим что до этого мы рассматривали картинки министра эти картинки были черно-белыми и мы говорили что они представляются матрицей двумерной в компьютере размерности 32 на 32 но чаще всего в жизни мы будем работать с картинками которые цветные они черно-белые и цветные картинки в

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

вот такой вот трехмерный про египет эта картинка как же ее сворачивать на самом деле есть два способа как сворачивают размерную цветную картинку первый способ это использовать 3d свёртку то есть фильтр вот этот kernel ядро которое мы используем будет тоже не двумерным а трехмерным она будет иметь размерность нет 3 нутри а 3 на 3 на 3 то есть днем вместо 9 чисел будет двадцать семь чисел на всякий случай здесь скажу что конечно же фильтры ядра не всегда иметь размер из 3 на 3 они могут иметь

случай здесь скажу что конечно же фильтры ядра не всегда иметь размер из 3 на 3 они могут иметь размер из 5 на 5 4 на 4 7 на 7 сколько угодно на сколько угодно н а н просто 10 примером мы используем размеры с тремя 3 ну вот и вот такой вот 3d свёртка и 3d фильтром мы будем точно так же слева направо и сверху вниз проходиться по нашему трехмерному изображению и в результате получим карту активации который будет двумерный вот так есть второй вариант как сворачивать цветную картинку с помощью

который будет двумерный вот так есть второй вариант как сворачивать цветную картинку с помощью [музыка] как сворачивать цветную картинку фильтрами можно цветную картинку который имеет размерность аж на в на 3 где as это высота вы это ширина а3 это количество цветовых каналов можно поделить ее под цветовым каналом на 3 двумерные картинки и каждый из этих двумерных картинок свернуть отдельным двумерный свертком таким образом из цветной одной картинке мы получим 3 двумерный карт активов по одной

свертком таким образом из цветной одной картинке мы получим 3 двумерный карт активов по одной для каждого цветового канала как вы здесь нарисована справа так надеюсь это понятно и теперь мы наконец переходим к тому что такое фильтры и зачем мы сворачиваем катетами нашу картинку и что у нас получается в картах активации фильтры это способы реагирования на присутствие на изображении некоторых паттерн и сейчас объясню смотрите давайте допустим что у нас есть картинка четверки вот здесь вот слева

и сейчас объясню смотрите давайте допустим что у нас есть картинка четверки вот здесь вот слева она изображена и у нас есть некоторые трехмерный фильтр допустим что у него вот такие вот значения вот видите этот фильтр 3 на 3 у него весь левый столбец минус единицу в средний столбец двойках и правый столбец тоже весь минус единицах если мы свернём картинку четверки вот таким фильтром то мы получим вот такую карту активации четыре на четыре ну допустим если там и картинка четверки было

мы получим вот такую карту активации четыре на четыре ну допустим если там и картинка четверки было размерности шесть на шесть мы свернули его таким фильтром внутри получили код активации 44 и если мы свернём картинку 4 таким фильтром мы получим такую карту активации и заметим что в этой карте активации довольно большие по модулю числа это значит что данный фильтр активировался на эту картинку и поэтому как раз вот это вот карта активации называется картой активации то есть карта активации

и поэтому как раз вот это вот карта активации называется картой активации то есть карта активации показывает насколько сильно фильтр активировался на картинку и таким образом можно сказать что вот этот фильтр он реагирует на наличие на вот этой картинке вертикальных или горизонтальных линий ну то есть это фильтр такой фильтр что он производит карту активации в которые довольно большие числа только в том случае если на картинке который он сворачивают присутствуют вертикальной или горизонтальной

в том случае если на картинке который он сворачивают присутствуют вертикальной или горизонтальной линии то есть фильтр это некоторый способ поиска точнее не поиска а реагирования на присутствие на картинке некоторых патронов вот этот фильтр который изображал внизу это например фильтр который реагирует на изогнутые линии тогда если мы таким фильтром свернем нашу картинку четверки то результирующая карта активации получится такой что в ней будут довольно маленькие по модулю числа то есть она

карта активации получится такой что в ней будут довольно маленькие по модулю числа то есть она будет не активированным почему потому что на картинке не был изогнутых линий она  то реагирует на изогнутые линии мы свернули этим фильтром нашу картинку на картинке не была согнута клиник фильтр не активировался на эту картинку и результирующая каждой активации получилось вот такой вот в маленьких числах то есть смотрите фильтры это как лампочки которые загораются если на картинке присутствуют

числах то есть смотрите фильтры это как лампочки которые загораются если на картинке присутствуют какие-то определенные паторны например можно сделать фильтр который будет реагировать только на вертикальной линии то есть такой фильтр которым если свернуть картинку на которой было много вертикальных линий то карта активации результирующего получится с большими значениями а если свернуть ей картинку на которой было мало вертикальных линий ну например картинку восьмерки результирующая карта

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

картинка в которой есть вертикальной и горизонтальной линии и вот такой вот фильтр если свернуть вот эту картинку вот этим фильтром поразительно вся картинка получится вот такая заметил что на результирующий картинки на карте активации оставив только горизонтальные линии то есть по сути это значит что наш фильтр он среагировал только на горизонтальной линии и совершенно проигнорировал все вертикальной линии которые были на этой картинке то есть можно сказать что этот фильтр реагирует на

вертикальной линии которые были на этой картинке то есть можно сказать что этот фильтр реагирует на горизонтальной линии а вот этот фильтр другой если им свернуть эту картинку то получится вот такая карта активации на ней остались только вертикальные линии то есть можно считать что наш фильтр реагирует только на вертикальной линии cry центральную линию он игнорирует если бы здесь была картинка на которой есть только горизонтальные линии но нет вертикальных привод свертки вот с таким фильтром у

которой есть только горизонтальные линии но нет вертикальных привод свертки вот с таким фильтром у нас получилось бы картинка с полностью белая то есть на ней не было бы активирован и вообще никакие пикселю это был значило что наш фильтр не нашел на картинке ни одной вертикальной линии и карта активация было бы ну не активирована на всякий случай скажу следующее здесь может показаться что карта активации содержат элементы изначального изображения то есть может показаться что фильтры это как

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

из него только ту информацию которая им нужна то есть например у нас есть изображение на котором много изогнутых и вертикальных и горизонтальных линий и у нас есть фильтр который реагирует на вертикальной линии тогда этот фильтр на изображении он принимает во внимание только вертикальной линии и делает карту активации которая будет иметь большие значения если на изображении есть вертикальной линии все что там есть кроме вертикальных линий ему все равно но они правда что на карте активации будут

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

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

изображена не будет на ней будут большие по модулю числа если фильтр активировался и маленький по модулю числитель фильтр не активировался так теперь зачем это все надо было как собственно теперь сделает так чтобы у нас метод машинного обучения заработал то есть как то сделать классификации изображения то собственно давайте рассмотрим вот у нас есть картинка четверки и давайте допустим у нас было два фильтра первый фильтр он реагирует на горизонтальной линии второй фильтр реагирует на

нас было два фильтра первый фильтр он реагирует на горизонтальной линии второй фильтр реагирует на вертикальную линию вот мы свернули эту четверку с помощью этих двух фильтров получили 2 карта активации вот одна для горизонтальных линий карта активации вот одна для вертикальных линий карта активации что мы сделаем дальше дальше мы с этими полученными карт intiqam дальше мы с этими полученными картами активации сделаем ровно та же что делали бы с картинкой если вы хотели скормить ее обычно полна

активации сделаем ровно та же что делали бы с картинкой если вы хотели скормить ее обычно полна связности мы эти карты активации развернем вектор вот просто развернем вектор вот эту карту активации получим вектор вот развернем векторы нижнюю карту активации получим тоже век то есть это операция называется флотами нг флагом английский ну как бы сделать картинку плоско и то есть двумерный сделать и одномерный растянуть ее вектор дальше два полученых вектора из двух карт активаций мы с конга

и одномерный растянуть ее вектор дальше два полученых вектора из двух карт активаций мы с конга тонируем в один большой вектор и вот этот один большой вектор уже будет [музыка] входным вектором в обычном полноценную нейронную сеть вот этот вектор по сути будет представлять собой фичи картинки которые мы с помощью сверток только что из картинки получили и по вот этому вот вектору который будет представлять собой как бы информацию о изначально картинки вот этой четверки полна связано нейронная

собой как бы информацию о изначально картинки вот этой четверки полна связано нейронная сеть будет учиться понимать четверка там находится или восьмерка ну это в случае в классовой классификации 4k восьмерок в случае 10 класса классификация нейронная сеть будет учиться понимать четверку эта тройка двойка и так далее то есть смотрите на самом деле мы сделали примерно тоже что делали люди до 2012 года когда они сначала выделяли сити с картинки а потом полученные фичи вы помните я рассказывал про

когда они сначала выделяли сити с картинки а потом полученные фичи вы помните я рассказывал про фокси че там где вот лента там брались после выделения из картинки этих печаль не подавали на вход обычного классификатору машинному обучению там rainforest или чему-то подобному на самом деле здесь кажется делаем примерно то же самое мы придумали какие-то свертки свертки это как хок фичи этом способ выделить фичи из картинки мы сворачиваем нашу картинку четверки с помощью двух сверток как мы здесь

выделить фичи из картинки мы сворачиваем нашу картинку четверки с помощью двух сверток как мы здесь делаем получаем какие-то фичи вот эти векторы когда тонируем эти в ч и говорим что вот этот вектор это как бы ну представление информации его картинки и его уже засовываем классификатор единственное что у нас классификатор это тоже нейрон к они rain forest или логистической регрессии вот так это было свёрточная нейронная сеть она выглядит вот так то есть у нас есть входное изображение дальше одно

свёрточная нейронная сеть она выглядит вот так то есть у нас есть входное изображение дальше одно изображение проходит через несколько слоев сверток как сделать несколько слоев сверток часто же расскажу вот потом после последнего слоя сверток у нас получается много карт активации которые мы flat к нему то есть которому разворачиваем векторы concat и мира между собой и подаем на вход обычные полна связаны нейронной сети который называется классификатор которая собственно и принимает решение

связаны нейронной сети который называется классификатор которая собственно и принимает решение какому классу принадлежит нашу картинку теперь про несколько слоев сверток смотрите только что мы разговаривали о классификации цифр извне ст это довольно простая задача мне ст ну то есть довольно простая задача определить на картинке 8 или четыре там можно действительно просто взять и сделать 2 карта активации с двумя фильтрами один из которых реагируют на горизонтальные другой не вертикальные и что

с двумя фильтрами один из которых реагируют на горизонтальные другой не вертикальные и что тогда будет если мы подаем корзинку четверки то оба этих фильтра они активируются на картах активации будут большие числа и вот на результирующем векторы будут большие числа и наше нейронные сети вот это полное связанная она поймет ага большие числа значит здесь четверка фильтр активировались а если мы подадим восьмерка сюда то после их фильтров которые реагируют на горизонтальные вертикальные линии у нас

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

это не четверка значит восьмерка то есть вот так было бы просто сделать как бы нейронную сеть или относи покати четверка восьмерка нам потребовалось бы всего этом 2 свертки может быть даже 1 1 с йорка которая реагирует на вертикальной линии вертикальной линии есть значит четверка нет значит восьмерка ну что делать с нормальным изображениями у нас же в реальной жизни dota четверки восьмерки у нас картинки довольно сложных структур например вот лицо лицо это гораздо сложнее чем просто набор

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

лицо мне кажется у всех на лице есть не какие-то горизонтальные линии поэтому так не получится для этого потребуется несколько слоев черт давайте сначала поговорим о том как сделать несколько слоев вот смотрите есть изначально изображение давайте допустим что нам 32 в первом сварочном слое у нас будет 5 ягер пусть будет 5 ядерно самом деле мы можем варьировать количество явер слоях пусть будет 5 лидеров размера 3 на 3 мы с вернем эту картинку каждом из пяти лидер независимо получим 5 карт

5 лидеров размера 3 на 3 мы с вернем эту картинку каждом из пяти лидер независимо получим 5 карт активации если мы свернули картинку 32 на 32 пятью я драме 3 на 3 с астрой дам один то мы получим 5 карт активации каждый из которых будет иметь размер из 30 на 30 на 5-ой каждый из которых будет иметь размер из 30 на 30 они будут вы верны но вместе как бы они будут составлять трёхмерную картинку который будет размерность 30 на 30 на 5 можно смотреть на это как на картинку которой 5 цветовых каналов

будет размерность 30 на 30 на 5 можно смотреть на это как на картинку которой 5 цветовых каналов то есть когда мы разговаривали про цветные картинки и говорили как сворачивается на и картинки мы говорили что цветная картинка это трехмерная картинка у которой три цветовых каналов вот полученные 5 карт активации после первого сварочного условий сети можно рассматривать как картинку которой 5 цветовых каналов ну или просто 5 каналов то есть это некоторый объект трехмерной размерности 30-35 после

каналов ну или просто 5 каналов то есть это некоторый объект трехмерной размерности 30-35 после этого мы не будем сразу вот эти 5 карт активации разворачивать вектор из конкатенировать и подавать на вход полноцветной сети а мы сделаем еще один карточный слой на втором свёртыш нам слое кадры будут уже трехмерные и они будут иметь размерность 3 на 3 на 5 на 5 последний размер нас будет 5 потому что у нас вот 5 карт активации они представляются как бы объектом размерности 30 на 30 на 5 то есть

что у нас вот 5 карт активации они представляются как бы объектом размерности 30 на 30 на 5 то есть таким образом как мы трехмерные трехмерным ведром учились сворачивать трехмерные цветное изображение также мы здесь трехмерными ядрами у которых 3 размерность 5 будем сворачивать вот эти 5 карт активации которые получились после первого сварочного слоя то есть можно считать что вы 5 карт активации то как изображению которых 5 цветовых каналов и мы на втором свёртыш нам слое применяем к этому

то как изображению которых 5 цветовых каналов и мы на втором свёртыш нам слое применяем к этому большому изображение трехмерные ядра если у нас на втором сварочном слое 3 ядра размерности 3 на 3 на 5 и опять же мы свернем со стыдом один то тогда после второго свёрточная слоя у нас получится три карты активации размерности 2828 на 3 ну и собственно так можно продолжать дальше мы вы могли сделать 3 сверхточный слой у которого тогда я при имели бы 3 размер из 3 потому что здесь всего 3 карта

3 сверхточный слой у которого тогда я при имели бы 3 размер из 3 потому что здесь всего 3 карта активации сворачивали бы вот эти 3 карты активации получали мы новые карты активации и так далее так далее так далее его пока не надо есть либо пока у нас карта активации не выродиться в слишком маленькие смотрите у нас здесь постоянно уменьшается размерность была картинка 32 на 32 карт активации первого сварочного слоя получились размера с 30 на 30 на 5 после второго отличные условия же 2828 на три

сварочного слоя получились размера с 30 на 30 на 5 после второго отличные условия же 2828 на три и так далее ну конечно вы всегда можете применить padding и поменять троит чтобы манипулировать размерности мы карт активации ну и в итоге свёрточная нейронная сеть у нас будет выглядеть вот так входное изображения в одно изображения проходит таким образом через четыре своей сверток или вообще в общем случае через n своем сверток и после того как последний свой сверток пройден полученный карта

общем случае через n своем сверток и после того как последний свой сверток пройден полученный карта активации после последнего слоя разворачиваются вектор иконка тонируются и подаются на вход полна связано нейронной сети которая еще называется классификатор которая на основе этих данных принимают решение как ну что ж за картинка у нас пришла на вход то есть если бы здесь была картинка не лица одного из чисел монисто то есть например единица двойка из того да ты сатанист то это значило бы что у

из чисел монисто то есть например единица двойка из того да ты сатанист то это значило бы что у нас вот это вот сетка она для классификации картинок на 10 классов и вот это полна связанная сердца держала бы в последнем слое сети 10 неронов каждый из которых ответственна за 1 класс от нуля до девяти вот и последний слой нероном содержал вы вероятностью принадлежности картинки к одному из 10 классов вот таким вот образом теперь смотрите я повторю ещё раз и дальше тоже повторю еще раз что фильтры

вот таким вот образом теперь смотрите я повторю ещё раз и дальше тоже повторю еще раз что фильтры они как лампочки они как механизмом которые реагируют на определенные паторны на картинке они не делают карта активации на которых эти паттерны и нарисованы то есть не будет такого что вы свернете картинку вот этого лица фильтрами первого слоя сверток и получите карту активации на которой изображены там вертикальной и горизонтальной линии или глаза нос рот такого не будет карт активации это они

там вертикальной и горизонтальной линии или глаза нос рот такого не будет карт активации это они просто показывают насколько активировался фильтр у них будут просто больше по модулю значения если фильтр сильно активировался и меньший по модели значение если фильтр слабо активируют что здесь тогда изображена внизу у меня на слайде смотрите у меня здесь на слайде изображены внизу такие картинки которые если падает на вход нейронной сети то соответствующее свёрточная слои отреагирует на них

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

свёрточная нейронная сеть и которая обычно различать лица то после первого слоя сверток будут такие карта активации нет не так то есть если такие картинки подать на вход наши нейронной сети то фильтры первого слоя сверток на них активируются наиболее ярко то есть мы таким образом можно заключить что первые слои сверток первый фильтр и первого слоя они больше всего активируются на присутствие на картинке низкоуровневых паттерн дальше если мы пойдем дальше то мы обнаружим вот у нас нейронная сеть

низкоуровневых паттерн дальше если мы пойдем дальше то мы обнаружим вот у нас нейронная сеть вот эта большая она допустим обычно распознавать лица и мы обнаружим что если мы возьмем вот такие картинки как здесь вот посередине расположенного здесь в картинке где есть некоторые паттерны кусков лица например губ кусков нос и вот глаз брови или что-то вот если мы одну из таких картинок подадим на вход нашими роной сети и посмотрим на то насколько активируется фильтр средних слоев то мы увидим что

нашими роной сети и посмотрим на то насколько активируется фильтр средних слоев то мы увидим что вот как раз на такие картинки есть какие-то паторны но сорта глаз или волос средние слои сверток фильтр и средних своего сверток активируются наиболее всего то есть если подается на вход какую-то картинку которая совсем не содержит никаких паттернах которые есть на лице то есть если подать например на вход картинку чайника то средние слои сверток не будут активироваться карта активации после второго

вход картинку чайника то средние слои сверток не будут активироваться карта активации после второго слоя сверток будут содержать довольно маленькие числа она и большие числа карта активации после второго слоя сверток будет содержать если входная картинка содержала вот такие паттерны но с глаза брови уши или что-то подобное в конце самые последние звездочные слои у них фильтры наиболее реагируют если на изначальном изображение присутствовал паттерн полностью лица то есть если подать качестве

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

карта активации будут содержать в очень большие числа то есть таким образом что мы можем из этого заключить что бы то что мы делаем несколько слоев сверток это помогает научиться выделять какие-то вас коровы признаки смотрите вот первые слои сверток они реагируют на довольно простые вещи то есть на наличие каких то я горизонтальных вертикальных линий и делать несколько карт активации каждая карта активации по сути содержит информацию насколько явно какие-то низкоуровневые паттерны присутствуют

активации по сути содержит информацию насколько явно какие-то низкоуровневые паттерны присутствуют на изначальной картинки 2 свой сверток принимает в качестве им put a card активации первого слоя свёрток он смотрит на них и пытается собрать воедино ту информацию которая была на первый слой свора так то есть ага вот этот вот эта карта активации бти равносильно а я такая активация отвечает за вертикальной линии карта активации который отвечает за горизонтальная линия активирована слова карта

линии карта активации который отвечает за горизонтальная линия активирована слова карта активации который отвечает за изогнутой линии активирована сильно это значит что здесь наверняка есть такой паттерн как нос это как-то интуитивно примерно так то есть второй слой сверток он уже по информации которые выделили первый слой сверток пытается понять есть ли на картинке какая-то более сложная структура чем вертикальные и горизонтальные и диагональные линии то есть вторые третьи свои сверток средние

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

они уже принимают в качестве входа те карты активации которые были выданы средними слоями сверток и смотрят на них и пытаются понять есть ли иные картинки собственное тело и лицо или нет вот так вот каждый слой сверток передается более такую сложную информацию дальше следующем своем сверток так и в конце после последней после последнего слоя сверток последний карта активации они по сути содержит самую высокоуровневую информацию потом мы растягиваем эти карты активации вектор канг тонируем

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

снова слоя как и собственно после каждого полна связного слоя используется функция активации самая популярная хорошо работающий на базе на сиденье функции активации это лилу эта функция активации которая чаще всего используется для промежуточных слоев сте-не для последнего слоя сети для последнего слоя сети надеюсь как вы помните используется софт макс для классификации как использовать функцию активации нас йорке на самом деле очень просто смотрите у нас есть светка это получение карт

активации нас йорке на самом деле очень просто смотрите у нас есть светка это получение карт активации было изображение мы свернули фильтром получили карту активац карта активации это матрица двумерная чисел вы просто каждому из этих чисел применим функция активации то есть таким образом можно к картам активации применять функцию активации слишком много слов активация мечта поделать вот и последнее это то что у нас здесь как и в обычной полноценной сети если у нас задача классификации то

это то что у нас здесь как и в обычной полноценной сети если у нас задача классификации то последний слой будет содержать ровно столько нейронов сколько у нас классов и последним условие будет применяться функцию активации софт макс кириллу и обучать мы серий будем с помощью кроссандра пили до обучается полна связанная точнее обучается свёрточная нейронная сеть точно также как обучается полна связанный нейронная сеть с помощью год пропадешь сейчас мы правда должны понять еще одну вещь где

связанный нейронная сеть с помощью год пропадешь сейчас мы правда должны понять еще одну вещь где собственную обучаемые параметры понятно что здесь есть обучаемые параметры выпал нас разные нейронные сети но вот свертках если обучаемый параметр на самом деле они есть все ядра обучаемый параметр возможно у нас у вас уже до этого возникал вопрос как подбирать я да то есть вот есть yantra которые реагируют на вертикальные линии есть театры который реагирует на горизонтальные линии есть кадры

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

как делать на самом деле ничего подбирать не на нейронная сеть процессе обучения сама должна обучить я то есть она сама должна понять какие я другие нужны какие паттерны ей выгоднее всего извлекать из картинок для того чтобы полна связно нейронная сеть потом поняла что за объект находится на картинке то есть если например я построил вот такой вот твердость на нейронную сеть для классификации изображения мне ст то наверняка сетка в процессе обучения поймет что лучше всего ей сделать такие

изображения мне ст то наверняка сетка в процессе обучения поймет что лучше всего ей сделать такие фильтры такие йаджаны вот этих слоях которые будут реагировать на горизонтальные и вертикальные изогнутые линии но чтобы определять четверка восьмерка девятка нолик там есть и что-то подобное а если я захочу обучить например нейронную сеть которая классифицирует кошек и собак то что отличает кошек и собак ну я думаю что отличает лучше потому что у кошек например есть вот такие вот чаще всего

и собак ну я думаю что отличает лучше потому что у кошек например есть вот такие вот чаще всего торчащие треугольные лучше а у собак таких ушей нет и неудивительно если процессе обучения наша сеть научиться научит какой-то фильтр то есть обучит какой-то свой фильтр вы реагировать на паттерн наличие острых ушей как у кошки и если этот паттерн ей сто полна связная нейронная сеть потом получив карта активации она поймёт что это наверняка кошка а если такого паттерна нет если карта активации

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

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

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

еще раз на всякий случай сейчас повторю что свертки они работают как лампочки которые загораются сильнее есть на изображении есть определенный паттерн и слабее если его на изображении нет например на втором слое сверток мог бы быть фильтр который реагирует на нос тогда соответствующая карт активации будет яркой будет иметь большие числа если на карте здесь нос и небольшие числа если нет носа и еще раз на картах активации вы не найдёте ни какого понятного рисунка карта активации ничего не

и еще раз на картах активации вы не найдёте ни какого понятного рисунка карта активации ничего не выражает они не содержат никаких элементов изначальной картинки они как они отражают насколько ярко зажегся фильтр вот так и напоследок наверное нужно сказать что [музыка] обучается нейронная сеть вот эта вся нейронная сеть вместе с кадрами и лесами полна связанных слоев с помощью бад пропадешь ну то есть помощью того же самого градиентного спуска будет проходить на которую вы обсуждали на

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

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

обучаемых слоев обычной полна связанной сети и с помощью всей и собственно все ее параметры можно обучать помощью бад про по вечно то есть эта дифференцируемая функция поэтому можно не брать производную и все параметров участвуем логично включая параметры лидер то есть вот эти вот элементы я тир 3 2 1 - делают по -3 они обучаются помощью год прокатишься на таким же градиента спуска там он мигает у равно х минус альфа умножить на груди вот на этом всё по поводу свёрточная нейронная сеть и дальше

равно х минус альфа умножить на груди вот на этом всё по поводу свёрточная нейронная сеть и дальше видео мы поговорим про еще одну еще один слой который используется сварочных нейронных сетях он называется pulling слой надеюсь что все было понятно

этом видео мы поговорим про pulling pulling эта техника уменьшения размерности карт активации или по английски down sampling зачем нам вообще нужно уменьшать размерность карт активации давайте вернёмся к презентации немного назад и посмотрим на то как у нас происходит свёртка картинки входящий наша картинка входящие например имеет размерность 32 на 32 она поступает на вход свёрточная нейронная сеть и если у нас на первом слое свёрточная нейронная сеть и 5-я dia размера 3 на 3 мы не применяем

сеть и если у нас на первом слое свёрточная нейронная сеть и 5-я dia размера 3 на 3 мы не применяем картинки padding и используем строить равны единице то на выходе этого сварочного слоя у нас получается 5 карт активации каждый из которых имеет размерность 30 на 30 дальше у нас 2 карточный слой и если мы опять применяем я др и размерности 3 на 3 на 5 и используем не используем padding и используем straight единицы то на выходе тросе точно условий сети у нас получается карта активации

используем straight единицы то на выходе тросе точно условий сети у нас получается карта активации размерности 28 на 28 и так далее как видите при таком применение фильтров со слайдом единица у нас конечно меняется размерность картинки каждый раз после каждого сорта снова слой сети но не сильно то есть размерность картинки после каждого слоя уменьшаются но при этом не очень сильно было изначально 32 на 32 потом стала 30 на 30 потом 2828 конечно размерности карт активации можно регулировать с

32 на 32 потом стала 30 на 30 потом 2828 конечно размерности карт активации можно регулировать с помощью strider i по din гав а при использовании по 1 га размерности карт активации увеличиваются при использовании строй да тем больше строить тем размерность карт активации будет меньше но давайте допустим что ножи входное изображение размерности намного больше чем 32 на 32 например 512 на 512 а тогда чтобы добиться того чтобы карт активации имели достаточно маленькую размерность нам придется

тогда чтобы добиться того чтобы карт активации имели достаточно маленькую размерность нам придется потратить на этом слоев и много сверток то есть много фильтров это значит что в нашей нейронной сети будет довольно много параметров конечно первый вопрос зачем нам нужно чтобы карта активации были маленькой размерности смотрите когда мы с вами говорили зачем нужны свёрточная нейронная сеть и мы рассматривали как мы могли бы классифицировать картинки использование свёрточная обычный полна связаны

как мы могли бы классифицировать картинки использование свёрточная обычный полна связаны нейронные сети тогда мы поняли что проблемой в таком подходе в использовании обычных полна сложностей для классификации было бы то что когда бы мы растягивали нашу картинку вектор и подавали на вход полна связанной нейронной сети у нейронные сети на первом слое было бы очень много весов смотрите если здесь в твердость на нейронной сети после нескольких слоев сверток после последнего слоя свертки у нас карта

на нейронной сети после нескольких слоев сверток после последнего слоя свертки у нас карта активации будут имеет довольно большую размерность скажем 50 на 50 или 32 на 32 тогда когда мы их все и развернём вектор и сканка тонируем у нас опять получится вектор довольно большой размерности то есть там будет довольно много элементов это будет значить что на входе в полна связанную чай сети должно быть много нейронов и мы опять приходим к той проблеме что у нас получится много связей то здесь даже

много нейронов и мы опять приходим к той проблеме что у нас получится много связей то здесь даже на самом деле две проблемы первая проблема это то что нужно в полна связанной части сети палит иметь много весов вторая проблема на самом деле тоже что у нас будет много весов но уже в свёрточная части сети то есть для того чтобы сжать большую картинку несколькими свёрточная слоями в картинку поменьше понадобится много фильтров со многими параметрами чтобы уменьшить такой эффект чтобы можно было

понадобится много фильтров со многими параметрами чтобы уменьшить такой эффект чтобы можно было работать с большими high resolution картинками в сверхточных нейронных сетях используется полем как раз техника уменьшения размерности карт активации как это работает на самом деле очень просто допустим у нас есть карта активации четыре на четыре вот оно показано на слайде давайте разобьем эту карту активации на [музыка] ячейки размерности 2 на 2 то есть вот эта карта активации размерности четыре на

на [музыка] ячейки размерности 2 на 2 то есть вот эта карта активации размерности четыре на четыре разобьется у нас на четыре части размерности 2 на 2 и дальше у нас есть выбор какой pulling применить давайте рассмотрим например макс пурим что значит макс pulling макс pulling это когда мы из каждой части на которые мы разбили нашу карту активации берем только максимальный элемент то есть максимально активированный элемент и оставляем только его смотрите например вот наша карта активации

активированный элемент и оставляем только его смотрите например вот наша карта активации разбилась на четыре разноцветных квадрата и вот из красного квадрата мы берем только максимальный элемент это 2020 более чем 12 больше чем 12 больше чем восемь и желтого квадрата мы возьмем только 30 и синего квадрат мы возьмем только значение 112 и зеленого квадрата мы возьмем значение только 30 и вот из такого большого квадрата 4 на 4 у нас останется всего четыре значения которые мы вот так вот расположен

большого квадрата 4 на 4 у нас останется всего четыре значения которые мы вот так вот расположен в квадрате два на два вот этот квадрат 2 на 2 которое наверху здесь расположена с вот этим и как раз максимальными значениями из каждого квадратика 20-30 112 37 это этот квадрат 2 на 2 представляет собой результат у линга вот такой карта активации размеры 4 на 4 то есть мы по сути разбиваем нашу карту активации на зоны и из каждой зоны оставляем максимальный элемент это вот такой вот dancing есть

активации на зоны и из каждой зоны оставляем максимальный элемент это вот такой вот dancing есть другие подходы когда он сам пленку когда например мы все так же разбиваем нашу карту активации на зоны и на 4 равные части но теперь из каждой части берем не максимальный элемент а например средний по всем элементам вот если взять или нет средний вот в красном квадратике то получится 1313 это просто среднее арифметическое всех элементов в этом квадратике это будет называется и в ручку link но в

среднее арифметическое всех элементов в этом квадратике это будет называется и в ручку link но в любом случае смысл буллингу в том что вы из карт активации размерности n получаете карту активации меньшей размерности каким-то образом выкидываете какое-то количество информации из вашей карты активации и получаете карту активация меньшей размерности конечно просто уменьшение размерности карт активации это не единственное зачем пыльник можно было бы наверное такого эффекта добиться и по-другому

это не единственное зачем пыльник можно было бы наверное такого эффекта добиться и по-другому например сильнее уменьшать размеры нисходящей картинки там если например у нас картинки с эти размерности 512 на 512 то мы могли по их рисовать сразу нас размерность 100 на 100 скажем и сделать какой-нибудь нейронная сеть свёртыш ную без пилингов но там с большими строй даме или что-то подобное но вы pulling off есть ещё одна причина которых можно использовать это уменьшение чувствительности сверток

off есть ещё одна причина которых можно использовать это уменьшение чувствительности сверток положения объектов на картинке давайте я поясню что это значит давайте вот рассмотрим такой пример вот вверху есть картинка вам уже знакомая когда показывала варианты фильтров я уже показывал эту картинку вот с такими с таким вот рисунком внизу и та же картинка но рисунок который сдвинуть немножко вправо и вниз то есть вот это как в этот рисунок только сдвинуты вправо и вниз давайте свернем два этих

и вниз то есть вот это как в этот рисунок только сдвинуты вправо и вниз давайте свернем два этих рисунка одним и тем же фильтром вот какой результат получить если свернуть рисунок который верхней этим фильтром и ниже видите результат который получился свернуть вот эту ошибочную картинку то есть двинуты вправо и вниз этим же фильтром мы видим то что карта активации полученная из 1 2 картинки они будут немножко разные то есть вот здесь есть в карте активации есть разница в расположении

они будут немножко разные то есть вот здесь есть в карте активации есть разница в расположении активированных пикселей почему это плохо давайте допустим что мы хотим классифицировать кошек и собак у нас есть много фотографии кошек и собак но понятное дело что не на всех фотографиях кошки и собаки находятся прямо в середине фотографии есть фотографии где например в середине мячика собачка бежит за ним и она находится справа внизу картинки есть картинки где например кошка сидит рядом с чем-нибудь

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

что на этой картинке находится кошка они собака ну вот представьте себе теперь что вот этот вот узор который я здесь показываю на экране и узор который ниже который сдвинуться вправо и вниз это на самом деле собака и вот этот верхний узор это собака которая стоит посередине картинки а внизу эта собачка которая сдвинута немножко вправо и вниз картинки мы хотим чтобы наши нейронная сеть на обе такие собаки выдавала примерно один и тот же ответ ну то есть в конце полноцветный сеть выдавала что это

собаки выдавала примерно один и тот же ответ ну то есть в конце полноцветный сеть выдавала что это это это собака но смотрите если у нас на две картинки собаки которые мы будем сворачивать одним и тем же фильтром получается разные карта активации это значит что после первого слоя сверток у нас получится разные карта активации а это знаете что и после второго слоя сверток у нас получится разные карта активации 1 на вход приходят разные карты активацию мы сворачиваем их одним и тем же свертками

активации 1 на вход приходят разные карты активацию мы сворачиваем их одним и тем же свертками потом получим тоже разная карта активации и так далее получается что она входит полна связанной нейронной сети после всех слоев сверток подается разную информацию от картинки где собака стоит посередине и от картинки где собака стоит в право внизу это плохо то есть нейронная сеть в итоге не сможет выдать на последнем своем слове одинаковые ответы для 2k sinok там где собака посередине там где собака

на последнем своем слове одинаковые ответы для 2k sinok там где собака посередине там где собака справа внизу pulling с этим немного помогает смотрите давайте рассмотрим вот эти две карты активации которые у нас получились вот такой картинки которая в середине стоит и картинки которые сдвинуто вправо вниз если мы применим 2 макс pulling два на два каждая из этих карт активации мы получим вот такие результаты 2 на 2 и все что значит что я как разделю карту активации на квадратики размерности два

результаты 2 на 2 и все что значит что я как разделю карту активации на квадратики размерности два на два можно конечно применять pulling деля карту активации на квадратики раме на стене 2 на 2 3 на 3 4 на 4 и сколько угодно разница будет просто в том сколько информации вы потеряете если вы делите на сегменты 4 на 4 и из квадрата 4 на 4 оставляете всего один элемент то информации вы потеряете больше так вот на слайде вы видите результат применения два на два макс полинга картам активации

больше так вот на слайде вы видите результат применения два на два макс полинга картам активации смотрите карт активации были размерности шесть на шесть мы из них было четыре карты активации новая после буллинга размерности 4 на 4 и на них вот активированные пикселя уже расположены более инвариант на более похоже для вот этих вот двух изображений которые были то есть таким образом можно сказать что макс pulling он поддерживает некоторые инвариантность расположения информации на картах активации

макс pulling он поддерживает некоторые инвариантность расположения информации на картах активации то есть вот помогает при случае когда у нас объект на картинке он на расположен по разному теперь куда же засовывать pulling leer слой буллинга в нашу нейронные сети ну обычно это работает таким образом вот у нас входное изображение мы его сворачиваем ядром то есть это вот свёрточная слой получаем карту активации английских и чумы и вот после того как мы получаем карту активации мы кладем слой

карту активации английских и чумы и вот после того как мы получаем карту активации мы кладем слой буллинга после полинга pulling ход видно что эта карта активации делят на зоны и дальше зависимости от того какой pulling вы используете у вас получится ли поверх и либо нижней вариант то есть внизу показано как это будет примерно кони вы берете входную картинку прогоняете через канва леушин слой навешивать и функцию активации опять же надо не забыть потом делаете pulling и это все уходит следующий

и функцию активации опять же надо не забыть потом делаете pulling и это все уходит следующий канва лишний слой если нет следующего can валюша условиях да это все уходит полна связаны нейронную сеть ну и вот как я обещала в начале нашего сегодняшнего занятия мы подошли к тому что мы опять смотрим на архитектуру алекс нету алекс нет здесь на этом слайде представлен как одна из архитектур сверхточных нейронных сетей смотрите алекс нет имеет восемь слоев 5 из которых это свёрточная нейронная

нейронных сетей смотрите алекс нет имеет восемь слоев 5 из которых это свёрточная нейронная свёрточная слои три из которых это полна связанный с ней вот слой input а дальше слой input to input картинка проходит через я одра который сворачивают картинку в то есть входная картинка в алекс на эти обычно имеют размер из 227 на 27 причем у нас цветная смотрите это 3-х канальная картинка 227 на 227 внутри потом оно проходит через свёрточная слой который в итоге сворачивать эту картинку в карта

внутри потом оно проходит через свёрточная слой который в итоге сворачивать эту картинку в карта активации размерности 55 на 55 причем смотрите карт активации 96 это очень много то есть вот карта активации после первого сердечного слоя имеют размерность 55 на 55 96 это значит что тут 96 карта активации разминки 55 на 55 надо заметить что видимо здесь очень большой straight раз у нас такая [музыка] маленькая размерность как-то активация получилось 55 на 55 исходной картинки размер 227 две

маленькая размерность как-то активация получилось 55 на 55 исходной картинки размер 227 две ситуации дальше после второго сорта снова слоя здесь из 55 на 55 получается карта активации размер из 2727 и этих карт активации уже 256 тоже очень много дальше это все опять сворачиваться еще одним слоем в карта активации размерность 13-13 их триста восемьдесят четыре штуки дальше происходит такая вещь как свёртка и кедром размерности один-на-один то есть вот мы с вами рассматривали свёртку ядром

как свёртка и кедром размерности один-на-один то есть вот мы с вами рассматривали свёртку ядром размерности 3 на 3 и понятно как сделать свёртку ядром размерности 5 на 5 7 на 7 4 на 4 а вот здесь вот применяется свёртка ядром размерности один на один если интересно зачем такое применяется мы поговорим об этом в занятии про архитектуры cnn там подробнее разберем еще устройство алекс нетто и там поговорим о том зачем такие съемки я дрима рядный насти один и один вообще нужны но суть в том что оно

о том зачем такие съемки я дрима рядный насти один и один вообще нужны но суть в том что оно здесь применяется карта активации после 3 слой остается 384 потом это проходит еще один канва леушин слой и тут вот тоже к январю шин слоя свёртка размерности один на один но карта активации уже 256 здесь просто другое количество ядер на этом слове вот и где-то здесь между can валютными еще есть пудинги и активация во всех она удачно своих используются лилу дальше после пятого слоя свертки все двести

и активация во всех она удачно своих используются лилу дальше после пятого слоя свертки все двести пятьдесят шесть карт активации которые мы получили флаг танец и разворачиваются вектор вектор иконка тонируются и подаются на вход полна связно нейронной сети здесь вот это вот размерность 256 карт активации входная размерность картинки пуль инге и страйты подобраны так чтобы когда мы получим исходящий картинки последней карты активации после 5 сварочного слоя и когда мы их всех развернем как-то

картинки последней карты активации после 5 сварочного слоя и когда мы их всех развернем как-то резко до таниры у нас получился вектор размерности 4096 смотрите вот здесь вот 1 линейный слой полна связанной сетки имеет размерность 4096 дальше второй полноценный слой размерность это 4096 и последний размерность тысяч ну размерность тысячи понятно почему потому что мы решаем ставь классификации изображением знатно тысяч в классов вот так выглядит сеть алекс нет принципе ничего кроме can валюша но

знатно тысяч в классов вот так выглядит сеть алекс нет принципе ничего кроме can валюша но в пудингов активацию луи линейных слоев здесь нет то есть такая простая сетка в следующем видео мы с вами обсудим задача компьютерного зрения которые бывают а она про пылинки и на этом все

в этой части видео мы обсудим задачи компьютерного зрения или компьютер vision по-английски давайте начнем с самых простых и эта классификация детекции сегментации они идут вместе потому что проще всего объяснять их примерно на одной картинке с классификации вы уже знакомы классификация это та задача где вам данку картину какой-то 500 картинок и задачи это определить какому из заранее заранее заявленных классов эта картинка принадлежит но хороший пример это классификация картинок imagined вы

классов эта картинка принадлежит но хороший пример это классификация картинок imagined вы обучаете свою нерон q классифицировать картинки тренировочного datasette а на тысячу классов вы знаете что классов у вас 1000 вы делаете на последнем слове ваши нейронной сети тысяч нейронов и когда новая картинка приходят вы просите свою нейронную сеть сказать какому из этих тысячи классов картинка принадлежит принципе просто дальше ей задачу детекции что такое задача детекции задача детекции это когда по

принципе просто дальше ей задачу детекции что такое задача детекции задача детекции это когда по картинке вам нужно понять есть ли иной картинки какой-то определенный объект и если на картинке он есть то обвести его в bound in box то есть смотрите вот здесь удача datex иллюстрируется среднем средний фотографий вот здесь сидит мужчина и у него вокруг сидят код и две собачки и вот задача эта лекция состоит в том чтобы детектировать все объекты которые есть на этой картинке и заранее опять же

состоит в том чтобы детектировать все объекты которые есть на этой картинке и заранее опять же какого-то оговоренного пула объектов то есть мы говорим что мы будем решать задачу детекции людей и животных больше ничего вот это прерывать не будем это значит что мы обучаем нашу нейронную сеть принимает на вход картинку и выдавать на выходе картинку и mountain боксы то есть вот эти вот прямоугольники для всех объектов только людей и животных которые есть на этой картинке то есть если на картинке

для всех объектов только людей и животных которые есть на этой картинке то есть если на картинке например есть чайник но мы заранее не сказали что мы будем обучать нашу нейронную сеть и дать и чайнике то начальник наши нейронная сеть обращать внимание не будет вот здесь вот например результат работы нейронной сети который умеет детектировать там собак кошек и человека видите вот человек она обвела bound in box кошка белла боуден бокс и собак тоже вела блогингу есть 3 похожую задачу которая

bound in box кошка белла боуден бокс и собак тоже вела блогингу есть 3 похожую задачу которая называется сегментации сегментация это ну похоже на акцию с каком-то плане это когда вам нужно на картинке определить есть ли на картинке какой-то объект если есть то как бы [музыка] покрасить все пиксели принадлежащее этому объекту в какой-то определенный цвет то есть как бы нужно взять картинку и на картинке отделись объекты друг от друга найти их края и найти какие части картинки принадлежат к

на картинке отделись объекты друг от друга найти их края и найти какие части картинки принадлежат к какому объекту вот здесь например показано задача сегментации где сегментированный человек и животные опять же мы говорим что задача сегментации мы будем сегментировать какие-то определенные объекты не все друг от друга мы будем уделять вот здесь вот на фоне скамейка например не сегментировано не покрашена не каким цветом трава и стена сзади тоже не покрашены покрашена только человек и животные

покрашена не каким цветом трава и стена сзади тоже не покрашены покрашена только человек и животные вот здесь сетка даже поняла смотрите что вот эта рука которая обнимает собака принадлежит человеку даже если она не связанный то сетка поняла что вот этот рука принадлежит человеку и всего человека все что предложить ему покрасила оранжевый цвет и вот разные объекты покрасила разными цветами то есть вот здесь она поняла где кончается одна собака начинается другая и покрасила их разными цветами

вот здесь она поняла где кончается одна собака начинается другая и покрасила их разными цветами вот такие три задачи классификации инфекции сегментации еще немножко про сегментацию на всякий случай у нас будут отдельные занятия продать акцию сегментацию вы конечно же узнаете как делать нейронные сети которые могут решать задачи инфекции сегментации сейчас мы просто говорим о том какие в принципе задачи существует так вот сегментация это очень важная задача для медицины сейчас в эру машинного

задачи существует так вот сегментация это очень важная задача для медицины сейчас в эру машинного обучения природе пленка как бы deep learning он проникает везде и в том числе и в медицина медицине сейчас это очень популярно пишется даже статьи которые направлены именно на медицинскую тематику то есть например применение некоторые моделям машинного обучения для такой то задача медицины и в медицине одна из очень хороший больших задач это сегментация вот пример такой задачи которые здесь может

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

цвета в один цвет было бы покрашены все ткани которые не поражены никакими опухолями а опухли половые покрашена данным другим цветом вот это например задача сегментации которая очень хорошо решается нейронными сетками в медицине также стандартная задача сегментация медицине это сегментация клеток то есть у вас есть например фотка клеток под микроскопом и они там разделены клеток много и они разделены между собой стен очками и вам нужно сегментировать где начинается одна клетка где она

они разделены между собой стен очками и вам нужно сегментировать где начинается одна клетка где она заканчивается где между ними стеночки вот так вот и как можно видеть здесь на слайде сегментации тоже решаются с сердечными нейронными сетями и здесь вот тоже есть канале уснула и рай активации pulling layers но еще какие-то странные dick in value шины и ампуле ncalayer и которых мы поговорим на занятии по сегментации теперь еще где-то используется эти задачи вообще или нет конфет конечно да

занятии по сегментации теперь еще где-то используется эти задачи вообще или нет конфет конечно да давайте рассмотрим одну из опять же самых популярных z nich последнего времени это беспилотные автомобили беспилотные автомобили это вообще очень сложная технология и вы наверное представить себе не можете сколько всего там какие только задачи не надо решить чтобы построить нормальный беспилотный автомобиль беспилотный автомобиль он смотрит вокруг у него есть камеры или дары но давайте про лидера

беспилотный автомобиль он смотрит вокруг у него есть камеры или дары но давайте про лидера пока забудем становимся на камерах бесплатно фото мобильных есть камеры которые смотрят вокруг какие задачи нужно решать для этих камер на камеру поступает изображение как бы что мы с этим изображением должны делать во первых нужно решить задачу детекции кого нужно зафиксировать нужно редактировать машины которые у нас есть вокруг нужно редактировать чтобы избегать столкновений нужно детектировать

которые у нас есть вокруг нужно редактировать чтобы избегать столкновений нужно детектировать пешеходов мы тут на картинке видно красно покрашена пешеход точнее они покрашена его в один бокс покрошить красным ну понятно зачем вы детектировать опять же чтобы избежать столкновений нужно редактировать дорожные знаки нужно детектировать светофоры возможно нужно детектировать что-то еще чего нет на этой картинке короче задача дать опция тут важно дальше задача классификации когда мы за редактировали

картинке короче задача дать опция тут важно дальше задача классификации когда мы за редактировали что вот есть знак нам нужно как бы вырезать картинку этого знака и понять что за знак перед нами вот тут вот на картинке например знак 50 видимо что скорость нельзя делать выше чем 50 километров в час это задача классификации также нужно классифицировать цвет светофора цвета формы за детективе ага а теперь посмотрим какой объем цвет желтый зеленый красный или это вообще не светофор дальше задача

а теперь посмотрим какой объем цвет желтый зеленый красный или это вообще не светофор дальше задача сегментации вообще можно как бы сегментировать все подряд вокруг но хотя бы точно нужно сегментировать полосу движения то есть вы смотрите по какой полосе вы едете вы смотрите что на дороге есть какие полосы сплошная прерывистая там бордюр и бы сегментируйте вот это вот все что находится впереди вас чтобы выделить именно свою полосу вы красите свою полосу своим цветом и по ней едете ну грубо

вас чтобы выделить именно свою полосу вы красите свою полосу своим цветом и по ней едете ну грубо говоря так дальше здесь решается интересная задача которая называется поиск по изображениям пример беспилотники едет и часто так бывает что [музыка] gps немножко плохо работает и немножко плохо определяет где весь плод находится точнее немножко плохо они точно но любая неточность такой слой задачи как беспилотник оно чревато плохими последствиями поэтому нужно точно убедиться где находится

как беспилотник оно чревато плохими последствиями поэтому нужно точно убедиться где находится беспилотник и один из способов это сделать это сфотографировать местность вокруг и попробовать поискать в базе данных фотографий города похожи местности то есть понять где мы находимся и так действительно работает то есть так беспилотники действительно делают можно по фото из переднего стекла машины понять где беспилотник сейчас находится дальше еще одна задача это оценка положения я говорила что нужен

где беспилотник сейчас находится дальше еще одна задача это оценка положения я говорила что нужен редактировать пешеходов нужно проектировать машины чтобы с ним они столкнутся но какой смысл редактировать их если ты не понимаешь где относительно них ты находишься нужно не только редактировать машину нужно еще уметь понимать на сколько далеко ты от нее находишься и можно ли ехать вперед или лучше затормозить чтобы ее не сбить вот эта оценка положения кроем беспилотников оценка положения тоже

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

положения руки относительно коробки вот здесь на этом слайде наверное этот слайд резюмирует то что я говорю про беспилотный автомобиль и здесь показана примерно как видит мир беспилотный автомобиль когда он едет давайте посмотрим вот тут видно что тут цементируется полоса по которой он едет детектируется разные объекты вот боуден бокса 3d mountain бокса здесь и сейчас вот он доедет до светофора и тут будут детектируются другие объекты классифицироваться сигнал светофора но вот пешехода на

и тут будут детектируются другие объекты классифицироваться сигнал светофора но вот пешехода на смешно ходят желтый такие и классифицировал еще знак вот здесь так следующая задача в которой используется свёрточная нейронная сеть и задача компьютеры vision эта задача оси or то есть optical корректоре как ниши что это такое это задача где нужно по тексту который написан на бумаге по фотографии текст распознает что это за текст ну на самом деле это задача на стыке нлп и heaven но себе в ней

текст распознает что это за текст ну на самом деле это задача на стыке нлп и heaven но себе в ней конечно же присутствует потому что нужно распознать текст по фотографии где это используется например автоматический перевод вы наверное знаете что в гугле уже можно загрузить фотографию и перевести текст с этой фотографии на другой язык вот это хороший пример оси а дальше улучшение качества фотографий документов ну например у вас есть документ который вам очень важен вы его залили кипятком кофе об

документов ну например у вас есть документ который вам очень важен вы его залили кипятком кофе об этом высушили он стал отвратительно выглядеть в нем поехали чернила и все такое и вы можете его сфотографировать допустим и программа нейронная сеть распознает что на нем было написано и выдаст вам pdf версию этого документа в котором весь текст написан красивая без эффекта залитого кофе и так что чернила не расползлись ну вот и более какое-то такое прикладное и каждодневное применение и тосканы

чернила не расползлись ну вот и более какое-то такое прикладное и каждодневное применение и тосканы скан чеков визиток всего прочего вы наверное знаете что есть такие приложения уже можно скачивать google play в магазине пол где вы можете просто сфотографировать щитовидку ней распознается всей информации дальше что-то поинтереснее а еще один вид задач компьютер vision это описание того что происходит на видео или на фото вот справа здесь например описание того что происходит на фото вот мы

на видео или на фото вот справа здесь например описание того что происходит на фото вот мы просто тур нейронную сеть загрузили вот такую фотку теннисистки которые стоит все-таки от клипа просили нейронные сети писать что здесь происходит нейронная сеть должна выдать текст связанный грамматически правильный вот бу man in white dress стали вести они из реки ты так далее и плюс еще показать откуда она собственно эту информацию взяла то есть в туман она говорит что тут вован стоит и показывает

она собственно эту информацию взяла то есть в туман она говорит что тут вован стоит и показывает bound in box этой вуман собственную ну и так со всеми словами опять же эта задача на стыке синопе но себе в ней присутствует полной мере какие еще могут быть примеры субтитры к видео генерация субтитров к видео субтитры могут быть как и распознавание речи рта так и просто описание типа что человек делает этом видео например если робот кладёт что-то в коробку то субтитры к видео будет выглядеть как

этом видео например если робот кладёт что-то в коробку то субтитры к видео будет выглядеть как робот идет что-то в коробку она это экшен describes он собственно и последняя здесь это пол за стены шин полости меньше надо то что увидите на гифке вот здесь внизу пол застелен шнек этапа видео человека нужно понимать где находится ключевые точки человека ключевых точек здесь порядка 15 штук это сгиба суставов и ключевые точки лица и как бы нужно вот в реальном времени по видео понимать как эти точки

и ключевые точки лица и как бы нужно вот в реальном времени по видео понимать как эти точки движутся возрасте машин сам по себе наверное непонятно зачем нужен типа прикольно вот человечек с какими-то разноцветными штуками как будто подол марионетка такая ходит но поза steam machine чаще всего являются средней точкой для решения других задач компьютер вижу я сейчас вам покажу каких но давайте сейчас посмотрим на еще примере computer vision не забудем про ганы данные это генеративные нейронные

посмотрим на еще примере computer vision не забудем про ганы данные это генеративные нейронные сети это сети который генерирует новые картинки среди них есть такие примеры как стал трансфер ставил трансфер от когда у вас есть вот картинка какая-то и вы хотите эту картинку сделать с каким-то другим эффектом то есть нанести нанести вот стилю вот вот такая картинка этого представляет собой стиль а вот справа я самая картинка это результат применения стиля вот этого среднего к левой картинке это

вот справа я самая картинка это результат применения стиля вот этого среднего к левой картинке это ставил трансфер его кстати уже скоро научитесь делать сами дальше есть еще ему среди ганов там можно придумать много примеров использования там дополнение картинок придумывании новых картинок ну вот одна из моих любимых или например дополнения картинки вот это нейронная сеть которая училась по скетчу по маленькому наброску как бы дополнять картинку и учился на дополнять картинку котами то есть

по маленькому наброску как бы дополнять картинку и учился на дополнять картинку котами то есть дорисовывать картинку котов и вот ей нарисовали тут хочу здание хлебушка но так как неровная сетка училась дорисовывать котов дорисовал она здесь карта получился к это хлебушек ну и собственно мы подходим к концу и я хотела вам показать одно из последних достижений ганов опять же генеративных нейронных сетей вот как раз где в качестве промежуточного этапа используется поза steam и шин и это

нейронных сетей вот как раз где в качестве промежуточного этапа используется поза steam и шин и это генеративный нейронная сеть которая умеет переносить движение одного человека на друга то есть у нас есть соурс видео сейчас будет где один человек там делать какие-то движения есть видео где второй человек делает совершенно другие движения и у итоговом видео мы перенесем движение первого человека на движение 2 человека давайте посмотрим чтобы было понятнее вот это вот там где написано соурс

на движение 2 человека давайте посмотрим чтобы было понятнее вот это вот там где написано соурс видео это человек действительно танцует а вот здесь свойства торги 3 зал это девочку заставили танцевать так как танцует source [музыка] если что-то здесь есть ссылки на эти видео здесь я пока закончу чтобы закончить лекцию но по этим ссылкам вы можете посмотреть полное видео использование этого гана там есть еще и другие примеры самые интересные из них наверное это то как людей заставляет танцевать

есть еще и другие примеры самые интересные из них наверное это то как людей заставляет танцевать балет просто это очень прикольно выглядит ну вот мы подошли к вот здесь кстати про балет на следующем слайде было мы подошли к концу нашего занятия про основы sehnen мы поговорили про историю развития сверхточных нейронных сетей про свертки про сверхточные нейронные сети про pulling и про то какие задачи компьютерного зрения бывают надеюсь что было интересно striking

всем привет мы продолжаем наш семинар посвященный свёрточная нейронная сетям и во второй части этого семинара мы рассмотрим как создавать модули в python для начала сгенерируем datasette с которым мы будем работать и от рисуем его как мы видим у нас datasette из трех классов классы линейной неразделимы поэтому решать задачи линейными методами не представляется возможным зато ее можно решать с помощью ниро сетей и для того чтобы передавать данные внутренние раз те нам нужно привести их к тендерам

ниро сетей и для того чтобы передавать данные внутренние раз те нам нужно привести их к тендерам причем для иксов то есть ли координат точек мы будем использовать float тендер а для игреков мы будем использовать long бендер это связано с тем что координаты это действительные числа по этому слову тендер а y этой метке классов и это целые числа поэтому мы можем использовать long тендер на прошлом семинаре вы уже научились тому как создавать с нейросеть с помощью класса и нам цикла шоу в который

семинаре вы уже научились тому как создавать с нейросеть с помощью класса и нам цикла шоу в который просто передаются своей в том порядке в котором вы хотите их применить но бывают ситуации в которых мы хотим иметь больший контроль над тем что происходит в внутри сетки и возможно посмотреть на какие-то размерности или назначения каких-то параметров и деклан шел не дает нам такую возможность зато мы можем пойти другим путем и завести свой класс и 1 следовать его . моды nn . модуль это базовый

мы можем пойти другим путем и завести свой класс и 1 следовать его . моды nn . модуль это базовый класс для всех слоев python и для того чтобы инициализировать нашу сетку в конструкторе класса мы сначала вызываем конструктор класса н н . моды и далее просто в качестве полей класса перечисляем тесла и которые мы хотим применить в нашем случае это два линейных слоя для того чтобы задать обучение в мире сети нам нужны две вещи первая это форвард поста есть прямое распространение сигнала второе это

сети нам нужны две вещи первая это форвард поста есть прямое распространение сигнала второе это backward пас то есть обратно и распространение сигнала поэтому давайте переопределим метод форвард который передается pics то есть данные на которых обучается нейросеть для этого мы просто вызываем 1 линейный слой оборачиваем его в нелинейной стрелу и затем вызываем второй слой и перед тем как вернуть значения вызываем софт макс тут хотелось бы остановиться немного подробнее поскольку мы решаем

значения вызываем софт макс тут хотелось бы остановиться немного подробнее поскольку мы решаем задачу на к классовой классификации мы используем софт макс функцию для того чтобы определить вероятности принадлежности объекта к тому или иному классу напоминаю что софт макс выглядит вот таким образом и если на вход софт макс функции подается какой-то тензор из действительных чисел то на выходе мы получаем тендер из чисел из интервала от нуля до единицы который интерпретируется как вероятность

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

а как мы помним из обучения логистической регрессии там использовалась логистическая функция потери подобно тому как мы можем 7 до обобщить на случай нога классовые классификации и получить saw макс мы можем обобщить функцию потери la glace и получить кросс энтропию что мы делаем здесь мы суммируем по всем классом логарифмы отцов макс attacks то есть по сути логарифм вычисленной нами вероятности принадлежности классу и умножаем его на метку класса который принадлежит x то есть y это это вектор

принадлежности классу и умножаем его на метку класса который принадлежит x то есть y это это вектор из нулей и одной единицы которая стоит на том месте который соответствует классу которому принадлежит x то есть у нас являются все слагаемые которые отвечают неправильным класса и в правильном классе у нас будет минус логарифм вероятности принадлежности этого класса далее мы будем минимизировать минус логарифм то есть будем увеличивать вероятность принадлежности нужному классов давайте рабочим

минус логарифм то есть будем увеличивать вероятность принадлежности нужному классов давайте рабочим нашу сетку я немножечко подробнее остановлюсь на цикле обучения то есть мы запускаем стоит и рации обучения и для того чтобы вызвать форвард вас достаточно просто в моду передать аргумент то есть наши данные такая конструкция внутри себя вызывает метод форвард и далее мы получаем наше предсказание после этого по предсказаниям и истинным меткам классы мы считаем лосс сохраняем его далее достаточно

этого по предсказаниям и истинным меткам классы мы считаем лосс сохраняем его далее достаточно важный шаг мы за 0-ем градиента для чего это нужно дело в том что когда мы делаем backward пас когда мы хотим пересчитать наши градиенты то значение президентов обновляются и если мы не занулим градиенты полученные на предыдущем шаге то новые президенты приплюсуются к старым и мы будем делать шаги градиентного спуска не в том направлении куда нам этого бы хотелось поэтому мы вызываем метод сиро град

спуска не в том направлении куда нам этого бы хотелось поэтому мы вызываем метод сиро град после этого вызываем backward паз и делаем шаг optimizer давайте посмотрим на обучение модели у нас всего лишь 100 итераций поэтому модель обучается быстрее мы видим что функция потерь действительно уменьшается давайте посмотрим как же получать параметры из nn . модель потому что как вы могли заметить когда мы вызывали когда мы создавали optimizer то мы сюда положили модуль . параметр давайте попробуем

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

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

просто нужно использовать nn . модуль лист для случая когда мы хотим передавать список из параметров а если вы хотите создать какой-то свой параметр то нужно использовать смен . параметр и передавать поле рекорд град труб это нужно для того чтобы у этого параметра считались градиенты чтобы он был обучаемым ну и соответственно также как модуль есть можно создавать параметр есть которую мы передается список из параметров давайте посмотрим на параметры этой модели и как мы видим у этой модели уже

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

мы не перри определяли потому что в тот момент когда мы задаем архитектуры сети backward вас уже однозначно определяется и он вычисляется внутри на этом все вторая часть нашего семинара подходит концу и в следующей части мы будем с помощью nn . модель создавать свёрточная нейросеть и обучать ее на различных фотосетах спасибо за внимание

всем привет меня зовут артем нему латинов и мы продолжаем изучать нейронные сети сегодняшний наш семинар посвящен такой теме как свёрточная нейронные сети план семинара такой он будет состоять из трех частей в первой части этого семинара мы поговорим про операции свертки и буллинга и решим пару задач на эту тему во второй части семинар мы поговорим про то как создавать модули в python и зачем это нужно для обучения нейро сетей и в третий самый такой практической части мы обучим свою собственную

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

ну как правило фильтры квадратные поэтому будем сказать что размер нас фбр затем мы окном такого же размера проходимся по исходному изображению и поэлементно умножаем наш фильтр на значение пикселей и складываем эти изображения и записываем их вот в результирующей тандер а как правило в большинстве архитектур если у нас многоканальное изображение чаще всего 3 канальная то есть какая высота умножить на ширину умножить на 3 то фильтр берется такой размерности чтобы последняя размерность в число

на ширину умножить на 3 то фильтр берется такой размерности чтобы последняя размерность в число каналов совпадало с числом каналов исходного изображения и тогда поэлементно и произведение будет браться пока всему объему тендера помимо размера фильтра у операции свертки есть еще два важных параметра первый это straight это величина шага с которым мы проходимся вот этим окном то есть вот на данной гифки straight равен единице а также п ding a passing нужен для того чтобы регулировать размер

гифки straight равен единице а также п ding a passing нужен для того чтобы регулировать размер изображения которые у нас получается после применения свертки для того чтобы применить поединка мы окружаем наше изображение по краям нулями или чем-либо еще и таким образом мы можем регулировать размер изображения которое получается на выходе свёртка изображение с разными фильтрами вообще говоря может иметь самые разные эффект для этого изображения например существует такой фильтр как фильтр гаусса

иметь самые разные эффект для этого изображения например существует такой фильтр как фильтр гаусса который размывает изображение ну и многие другие которые усредняются значение пикселей там берёт максимум так далее на эту тему есть хорошая статья на хабре можете потом с ней ознакомиться мы из этой статьи возьмем код и загрузим изображение для того чтобы посмотреть как разные фильтры влияют на изображение тут реализованы некоторые операции вот мы загрузили изображения и далее будем применять вот

тут реализованы некоторые операции вот мы загрузили изображения и далее будем применять вот такой фильтр тут стоит заметить что мы применяем одинаковый фильтр ко всем трем каналам то есть красному зеленому и синему цвету поэтому цвета изображение у нас поменяться сильно не могут только единственное что может произойти это изображение станет либо более размытым либо на нем появятся какие-то артефакты ну вот сейчас увидим что произойдет если мы применим такой фильтр вот мы видим что у нас по

ну вот сейчас увидим что произойдет если мы применим такой фильтр вот мы видим что у нас по краям появились различные артефакты и вообще изображение немножечко исказилось далее вы можете попробовать сами выбрать понравившийся вам фильтр и посмотреть что изменится операция свертки меняет размер исходного изображения и для того чтобы понять как именно он будет меняться давайте немного потренируемся решим пару задач вот первый пример у нас есть изображение размером 50 на 50 на 3 мы применяем к

решим пару задач вот первый пример у нас есть изображение размером 50 на 50 на 3 мы применяем к нему свёртку размера 3 на 3 с стройдом равным единице будем вычислять для того чтобы вычислить мы посмотрим на то да какой границы мы можем дойти если мы будем идти окном 3 на 3 получается что крайним экселем у нас будет excel как раз таки с номером пятьдесят -3 минус размер фильтра + 1 то есть 48 то есть если мы будем начинать с первого пикселя окном размера 3 на 3 потом 2 3 и так далее мы сможем

есть если мы будем начинать с первого пикселя окном размера 3 на 3 потом 2 3 и так далее мы сможем дойти до 48 у нас изображение квадратные по высоте все аналогично то есть исходный размер был пятьдесят на пятьдесят после свертки мы получаем 48 на 48 второй пример немножечко сложнее потому что тут у нас во первых изображений не квадратные 1024 на 768 и во-вторых straight уже равен 2 давайте посмотрим что будет происходить это нагляднее показать на картинке мы начинаем с 1 пиксель опять и окном

что будет происходить это нагляднее показать на картинке мы начинаем с 1 пиксель опять и окном размера пять на пять но straight уже равен двум поэтому второй раз мы будем проходиться уже не с первого ace 3 пикселя далее мы пойдем с 5 7 то есть стартовый пикселей по ширине у нас всегда будет нечётным числом давайте посмотрим где мы остановимся у нас последний пиксель имеет номер 1024 если мы отложим от него 5 то получим 1020 пикс но 1020 это четное число поэтому на него мы попасть не можем

отложим от него 5 то получим 1020 пикс но 1020 это четное число поэтому на него мы попасть не можем потому что мы идем по нечетным поэтому последние пиксель который на котором у нас остановится можно сказать наше окно это будет exist номером 1019 таким образом размерность ширина результирующего изображения это будет количество нечетных чисел от 1 до 1000 19 включительно ну или от 1 до 1000 21 тоже и можно посчитать и заметить что таких чисел будет 510 аналогично мы рассуждаем применяя фильтр в

и можно посчитать и заметить что таких чисел будет 510 аналогично мы рассуждаем применяя фильтр в высоту то есть здесь последнее место где мы можем применить фильтр это 764 пиксель и таким образом считаем все нечетные числа их получается 382 и таким образом мы получили что размер результаты 510 на 382 тут есть ещё одна задача которую вы можете сделать чтобы потренироваться что вы поняли как это вычислять теперь поговорим про операцию буллинга pulling главная цель полинга заключается в том что

вычислять теперь поговорим про операцию буллинга pulling главная цель полинга заключается в том что мы хотим уменьшить размерность исходного изображения для этого мы берем окно определенного размера и ко всему этому окну применяем какую-то операцию и результат этой операции записываем в результирующей тендер операции которые можно применять они совершенно различные можно применять максимум усреднения брать медиану и так далее но самые популярные это максимум соответствует называется макс

усреднения брать медиану и так далее но самые популярные это максимум соответствует называется макс pulling и средние то соответственно зайца и врач pulling вот здесь на картинке мы можем видеть как применяется макс полинг то есть мы делим исходное изображение на окна и размеры 2 на 2 и затем из каждого окна мы берем наш максимум и записываем его в результирующей танцы здесь же можно увидеть пример и гришку линга тут тоже самое только каждому окну мы применяем операцию средняя они максимум

пример и гришку линга тут тоже самое только каждому окну мы применяем операцию средняя они максимум далее здесь вы можете ознакомиться с различными полезными ссылками на различные туториалы либо на другие курсы давайте подведем итог мы сегодня рассмотрели операции свертки и полинга а посмотрели как они меняют размерности исходных изображений и решили пару задач на эту тему а спасибо большое за внимание в следующей части мы поговорим о модулях в python и о том как с их помощью конструировать

внимание в следующей части мы поговорим о модулях в python и о том как с их помощью конструировать нейронные сети

всем привет мы продолжаем изучать свёрточная нейронная сеть и и в третий и финальной части нашего семинара мы обучим свою собственную нейронную сеть на 2 дата сетах am вниз и и цифр 10 для начала давайте посмотрим как устроены свёрточная нейронная сеть поскольку мы решаем задачу нога классовой классификации наши нейронная сеть будет состоять из двух частей первая часть это так называемый вечер экстрактор он состоит из свёрточная слоев и pulling off задача фичер экстрактора как следует из его

экстрактор он состоит из свёрточная слоев и pulling off задача фичер экстрактора как следует из его названия заключается в том чтобы превратить наше исходное изображение в набор каких-то вещей как это происходит дело в том что когда мы выполняем операцию свертки то фильтр который проходит по изображению он ищет в нем какие-то паттерны и далее эти паттерны запоминаются и они используются как фичи уже на следующем этапе это классификатор классификатор по сути это полна связанная многослойная

уже на следующем этапе это классификатор классификатор по сути это полна связанная многослойная нейронная сеть аналогичная той с которым вы уже работали то есть линейные слои и ними и настя давайте импортируем все необходимые классы и также такой момент что поскольку сейчас мы будем работать уже с более тяжелыми нейросетями по сравнению с теми которые мы работали в прошлой части нам бы хотелось обучать нашу сетку дага полка лобби это можно сделать так достаточно сменить среду выполнения и

обучать нашу сетку дага полка лобби это можно сделать так достаточно сменить среду выполнения и поставить в аппаратном ускорители кто ну и в torchi есть метод штучку куда . is available который проверяет доступна ли в данный момент или нет теперь 1 dada секс который мы будем работать это вниз мне ст это вот такой вот набор рукописных начертаний цифр от 0 до 9 в нем 70 тысяч изображений из которых 60000 обучающая выборка и 10000 тестер и соответственно наша задача будет заключаться в том чтобы

60000 обучающая выборка и 10000 тестер и соответственно наша задача будет заключаться в том чтобы классифицировать изображение на 10 классов по количество цифр давайте загрузим наш загружаемый вас помощью тоже хижин . да да секс и здесь стоит заметить что мы передаем такой параметр как transform дело в том что при работе с изображениями часто применяются некоторые трансформации возможно иногда вам захочется уменьшить размерность изображение как-то обрезать его а иногда возможно вам захочется

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

и на тестовой выборке где-то оказывается изображение на котором кот сидит справа если мы применяем аргументации такие случаи она уже не пропустит далее для того чтобы загружать данные в мире сеть мы используем до талуда ему ему передаем почитай то есть размер бача который будет загружаться нам workers это для распараллеливания и параметр shuffle стоит обратить внимание что когда мы загружаем данные для обучения мы поставили shuffle равны метро а когда данные для тестирования to shove огромный

для обучения мы поставили shuffle равны метро а когда данные для тестирования to shove огромный falls с чем это связано это связано с тем что как правило перемешивать данные на обучение это хорошая практика потому что не будет гарантирован возникать такой ситуации в которой сетки на вход сначала поддаются все элементы одного класса а потом все элементы другого класса это плохо потому что пока сетка будет обучаться она забудет о том что у нее были элементы другого класса не обучиться просто на

будет обучаться она забудет о том что у нее были элементы другого класса не обучиться просто на том что было последним но когда мы тестируем то есть когда мы применяем нашу сетку к тестовым данным мы выставляем shuffle равный фолз потому что нам важен порядок для того чтобы понять мы вообще правильно распознать или нет то есть если мы будем перемешивать по сути у нас не будет соответствие между изображением и ответом который выдает нейросеть потому что все эти перемешивания случайной мы просто

и ответом который выдает нейросеть потому что все эти перемешивания случайной мы просто не будем знать какое изображение пошло на for ну и дальше создадим класс s-class из это просто числа 0 до девяти то есть классах которые будут который будет принадлежать выборка для того чтобы посмотреть на размерность можно вызвать метод тренда то мы видим что на 60 тысяч изображений и размерности 2828 мне ст это черно-белое изображение поэтому 3 размерность у нас нет там число каналов равно единице и

ст это черно-белое изображение поэтому 3 размерность у нас нет там число каналов равно единице и соответственно в тестовых данных у нас 10 тысяч изображений также через методы . тренда то можно вывести картинку то есть вот у нас вылился какой-то тендер пока по нему не очень понятно что это вообще такое поэтому давайте закрутим его в matplotlib но для того чтобы загрузить вам а клуб vip нам нужно сначала привести этот концерт compair и это можно сделать с помощью метода . домбай вот мы получили

сначала привести этот концерт compair и это можно сделать с помощью метода . домбай вот мы получили изображение размерности 2828 и теперь давайте посмотрим что это но это похоже на цифру 5 ну и стоит заметить что когда мы вызываем matplotlib . им шоу по умолчанию он применяет какую-то такую жёлто-зелёная синюю цветовую палитру если вы хотите ее сменить допустим на черно-белую то нужно передать параметр симов в данном случае это grey потому что мы хотим черно-белое ну и изображение будет

параметр симов в данном случае это grey потому что мы хотим черно-белое ну и изображение будет выглядеть вот так также можно вывести какой-нибудь случайно цифры чтобы посмотреть что у нас там много цифра 6 чем удобен дотла удар это тем что по нему можно очень просто и тренироваться давайте запустим одну итерацию по дотла удара посмотрим что он нам выдает по сути он нам выдает патч на котором мы будем обучаться из четырёх элементов поскольку быть союз у нас тут 4 и метки классов тоже 4 теперь

будем обучаться из четырёх элементов поскольку быть союз у нас тут 4 и метки классов тоже 4 теперь давайте создадим нашу сетку будем создавать я наследуют от н н . модуль как мы делали в предыдущей части нашего семинара что здесь стоит обсудить первая часть нашей сетке 1000р extractor то есть у нас два сердечных слой разделенных полингом число входных каналов у нас равно единице поскольку изображение одноцветная чёрно-белое число выходных каналов мы задаем сами то есть all channels это по сути

одноцветная чёрно-белое число выходных каналов мы задаем сами то есть all channels это по сути сколько сверток мы хотим применить к изображению и размерность окна которую мы идем пять на пять дальше мы применяем макс pulling после него применяется еще один сверхточный слой здесь уже один член будет равен 6 поскольку на выходе у нас здесь 6 каналов ну на выходе мы поставим 16 каналов и также будем мыть ей окном размером 5 на 5 далее нам нужно сделать следующие нам нужно превратить выходы с

будем мыть ей окном размером 5 на 5 далее нам нужно сделать следующие нам нужно превратить выходы с ленточного слоя в одномерный тендер поскольку с ним умеет работать . линер этому будем делать форварде мэтт еще обсудим а для того чтобы сейчас задать линейной слой нам нужно знать размерность которая получится при этом преобразовании здесь можно пойти двумя путями первый это тот который мы обсуждали в первой части нашего семинара то есть просто взять и посчитать то есть у нас применяется свёртка

в первой части нашего семинара то есть просто взять и посчитать то есть у нас применяется свёртка макс pulling а еще одна свёртка и мы знаем что находим нас было 2828 изображения ну и можно прикинуть что будет на выходе но есть и более простой способ если вы не любите считать когда вы сделаете форвард можно здесь поставить какое то число которое вам кажется адекватном когда вы делаете форвард просто вы видите шейп выхода последнего свёрточная слоя давайте я 1 комментируемой статьи и посмотрим

вы видите шейп выхода последнего свёрточная слоя давайте я 1 комментируемой статьи и посмотрим что у нас будет то есть мы заведем нашу сетку возьмем один патч можно сделать таким образом и передадим этот матч внутрь нашу сетку следующий раз при допустить поскольку изменение не сохранить вот мы увидели что у нас размерность четыре на 16 на 4 на 4 первое число и табачной он у нас должен остаться неизменным а вот три последних числа это по сути размерности выходного слоя поэтому в линейном слой у

а вот три последних числа это по сути размерности выходного слоя поэтому в линейном слой у нас будет стоять произведение 4 на 4 на 16 ну и дальше мы применяем еще два длинных слоя и теперь поговорим про формат в начале форварда все достаточно стандартно я снова закомментирую эту строку потому что иначе при обучении будет постоянно выдавать размер не очень удобно но мы применяем сверхточный слоем применяем нелинейность применяем pulling два раза все стадо далее нужно сделать следующее у нас на

применяем нелинейность применяем pulling два раза все стадо далее нужно сделать следующее у нас на выходе трехмерный тендер ну точнее четырехмерный где 1 размерности почитайте а мы хотим сделать его двумерным то есть почитай на некоторую размерность для этого существует метод в.ю. ему мы передаем то размерность которую мы хотим получить 4 на 4 на 16 и поскольку первую мы хотим оставить неизменной мы ставим здесь число минус 1 минус один это значит что первое размер нас остается ну и далее все

мы ставим здесь число минус 1 минус один это значит что первое размер нас остается ну и далее все стандартно также применяем линейные слои применяем не дней давайте рабочим нашу сетку с помощью метода то перенести на этот класс необходим для того чтобы отображались прогресс барр то есть чтобы мы видели сколько времени у нас будет вообще обучаться поскольку у нас задача много классной классификации в качестве lost функции выберем красный терапия в качестве оптимизаторы выберем адам просто потому

в качестве lost функции выберем красный терапия в качестве оптимизаторы выберем адам просто потому что адам как правило это самый лучший выбор если вы не знаете что выбрать и будем и тренироваться запустим цикл обучения примерно такой же как мы запускали раньше так обучение занимает некоторое время после которого мы также построим график у вас функция ну вот даже сейчас можно видеть что функция потеря нас уменьшается то есть цветка обучается все в порядке а итак обучение сетки у нас закончилась

нас уменьшается то есть цветка обучается все в порядке а итак обучение сетки у нас закончилась как мы видим функция потерь стабильно падает так что в целом мы можем ожидать достаточно хорошего результата и давайте проверим что же у нас получилось для этого нам необходимо протестировать нашу сетку на тестовых данных для этого предназначен такой цикл здесь мы используем то что наугад потому что мы не хотим обучаться не хотим обновлять градиенты и давайте запустим также стоит отметить что когда мы

хотим обучаться не хотим обновлять градиенты и давайте запустим также стоит отметить что когда мы считаем юрася нам необходимо наше предсказание переместить обратно на цикл потому что вот после вызова вызова форвард от сетки нас все лежит на готов а наши лейблы лежат на цикл мы не можем работать с данными которые лежат на разных девайсов поэтому для того чтобы сравнивать их нужно переместить ну как мы видим на всех классах у нас получилась достаточно хороший кирасе то есть все классы мы

ну как мы видим на всех классах у нас получилась достаточно хороший кирасе то есть все классы мы предсказываем хорошо а теперь давайте перейдём к следующим dtc тур это zafar 10 это уже даты с цветными картинками они имеют размер 32 на 32 ну на три потому что rgb также 60 тысяч картинок и классы вы видите на рисунке здесь мы применим еще одну трансформацию к нашему data set у то есть помимо того чтобы просто перевести его в тендер мы применяем нормализацию то есть значение каждого пикселя мы

чтобы просто перевести его в тендер мы применяем нормализацию то есть значение каждого пикселя мы вычитаем среднее и делим на дисперсию для того чтобы применить несколько трансформаций используется trance force . кампус в который передается лист из этих трансформаций ну и тут все стандартно только мы увеличили немного почесать сделали его равным 128 и класс и соответственно у нас уже не просто цифры а это слова давайте посмотрим на случайную картинку но скорее всего это кошка но видимо да

цифры а это слова давайте посмотрим на случайную картинку но скорее всего это кошка но видимо да давайте посмотрим на размерности то есть 128 это обычно из 3 это число каналов красный зеленый синий и 32 на 32 это размерность изображения здесь все стандартно за исключением того что в линейном слоем нас уже будет не 4 на 4 на 16 как было a6 на шест на 128 поскольку мы задались другие all channels и исходное изображение нас имело другой размер точно также можно вывести x . шейп если у вас есть

и исходное изображение нас имело другой размер точно также можно вывести x . шейп если у вас есть затруднения с подсчетами размерности которые необходимо получить в остальном процесс обучения такой же давайте обучим нашу сетку она обучается быстрее чем предыдущие за счет того что мы взяли больше почитать и сразу же посмотрим на я керосина тестовой сети после того как обучение закончится итак наши нейросеть обучилась и мы посчитали керосина тестовой выборке как вы видите качество у нас

итак наши нейросеть обучилась и мы посчитали керосина тестовой выборке как вы видите качество у нас получилось хуже чем в прошлый раз ну это обусловлено тем что мы взяли более сложный ds et во первых изображений цветные они черно-белые во вторых распознавать цифры заметно проще чем распознавать машину или птицу просто за счет того что там более сложные паттерн и ну и на этом все в этом ноутбуке также есть еще задания для самостоятельного выполнения и полезные ссылки на различные заторе аллы и

также есть еще задания для самостоятельного выполнения и полезные ссылки на различные заторе аллы и курсы по deep learning сегодня мы рассмотрели с вами как обучать свёрточная нейросети как считать качества и мы сделали это на двух различных тестах на этом всё всем спасибо пока

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=6CvpMOO-DB4! This is most likely caused by:

что же регуляризация это в принципе техника которая позволяет вам использовать чуть более эффективно вашу модель чуть более умным образом внедрить какое-то понимание внутреннее понимание задачи в процесс обучения модели и принципе добиться лучших результатов ну сразу можно вспомнить про эль 102 реализацию в линейных моделях где мы с вами просто накладываем к это ограничение навеса говорим так веса сумма квадратов весов должна быть меньше когда используем или два реализацию или сумму модули весов

сумма квадратов весов должна быть меньше когда используем или два реализацию или сумму модули весов тогда или один плюс на самом деле это является по сути наложением кого-то предположение что у нас visas отчетливо нормальном распределении либо распределение лапласа это приводит к сбору признаков короче там куча следствий но идея простая вы сделали предположение вы его внедрили допустим в форме новый член функций потерь чаще поговорим как еще можно использовать реализацию в глубоком обучении и

член функций потерь чаще поговорим как еще можно использовать реализацию в глубоком обучении и зачем нам нужно использовать регуляризация вот наша функция потери допустим на трение и про значения разных объекте поэтому он такой достаточно шумно и но можно посмотреть на i курсе допустим на эволюционной выборки и на обучающей и видим что на обучающей и кроссе растет гораздо быстрее чем на вальдо ционной и как правило вот этот гэп он почти всегда есть но если достаточно большой разрыв между tray

и как правило вот этот гэп он почти всегда есть но если достаточно большой разрыв между tray нам валидации это сигнализирует о том что мы перри обучаемся причем особенно это явно наблюдается когда у нас этот разрыв еще и растет с каждой итерации с каждым шагом так что следить за качество модели всегда необходимо вот такие графики вам всегда вообще нужно мониторить особенно правый если вы что-то обучаете благо для этого есть огромное количество различных так удобных инструментов даже самый

обучаете благо для этого есть огромное количество различных так удобных инструментов даже самый тандыр барда или что-нибудь который позволит вам эффективно смотреть на качество вашей модели вообще где-нибудь в браузере с телефона или вообще в облаке для этого тоже есть различный инструмент но как же нам добиться того чтобы наша модель не перри обучалась для этого нам и нужно во-первых регуляризация она верна в нулевых то что-то более важная часть это правильно подготавливать данное и

она верна в нулевых то что-то более важная часть это правильно подготавливать данное и использовать подходящий архитектуры то что если взять монисто и пытаться на нем выучить какую обучить какую-нибудь не знаю там в какой 19 причем просто minisd вот на 6 тысяч объектов скорее всего счет переобучаться достаточно быстро то просто у модели настолько огромная способность к запоминанию что ей проще запомнить этот сет что чем что-то там изучать давайте же это починим но перед тем как мы будем

запомнить этот сет что чем что-то там изучать давайте же это починим но перед тем как мы будем говорить с вами непосредственно про регуляризация в чистом виде тот же самый dropout давайте поговорим про нормировка данных пробочки норм потому что это на самом деле та же техника регуляризации но у нее есть глубоко идущие последствия и так вот наш хидан и мы можем не посмотреть и не представлен в двумерном пространстве у нас две оси x или допустим или x1 x2 как вам удобнее и мы видим с вами что

двумерном пространстве у нас две оси x или допустим или x1 x2 как вам удобнее и мы видим с вами что во-первых это краски выборка у неё средняя смещен относительно нуля мы видим что центр мозги это вот здесь во вторых у нее вдоль оси y больше скажем так разброс в наших данных чем вдоль оси x почему это может быть плохо ну потому что если мы используем с вами какую-то модель допустим линейную который пытается разделить краски наше облако точек давайте предположим что у нас вот как-то по

который пытается разделить краски наше облако точек давайте предположим что у нас вот как-то по перекраске проходит разделение граница между классом это облако очень сильно вытянута вдоль одной оси и очень слабо вдоль другой сплющена ну а ситуация просто здесь уже были такими грустными медными нарисована что мы тогда видим что вот это условно разделяющая гипер плоскость она не очень устойчиво почему то что мало изменение угла наклона будет приводить к сильным изменениям в качестве классификации

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

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

дисперсию ну теперь у нас будут посмотрите наши данные и по крайне мере с каким-то уровнем доверия сказать что смотрите мы взяли наши данные и теперь у нас с вами 0 среднее 0 средней дисперсии по каждой из компонент вроде как похоже на стандартное нормальное распределение сэмплы в него да конечно мы ничего не говорили про то что признаки могут быть зависим лишь собой и так далее но хотя бы на 0 средней дисперсии каждый компонент это хорошо и от краски позволяет нашу модель гораздо более

на 0 средней дисперсии каждый компонент это хорошо и от краски позволяет нашу модель гораздо более устойчиво подходить к разделению этих классов пример виде справа здесь уже гораздо шире условных бег между ними потому что все перетащили к нулю и теперь уже можно эту кривую как-то покрутить не кривую прямую разделяю гивер площадь и при этом все не так уж и сильно сломается так что нормировка данных это добро вам всегда стоит нормировать данный если вы пользовались логистической регрессии

данных это добро вам всегда стоит нормировать данный если вы пользовались логистической регрессии линейной регрессии записей скорее всего вы перед используем нормирование данные потому что это а полезно б если вас логистической регрессии было его скалярно или просто это было регрессия в которой все линейных логистической 2 есть регуляризация без нормировки данных регуляризация могла пойти даже во вред а не в пользу поэтому нормировка была нужна ну и профессий это уже стоит сказать если у вас

во вред а не в пользу поэтому нормировка была нужна ну и профессий это уже стоит сказать если у вас есть бассейн нет главных компонент и вот подает туда нет нормированные данные топи сей вам выделить не оптимальная линейной комбинации из данных которые покажу какой то разброса признаки у которых больше всего шкале бушере всего шкала тип от минус миллион до миллиона что же нормировать данный хорошо и это можно краски выразить будет некоторый концу некоторые скажем так крылатой фразой которая

и это можно краски выразить будет некоторый концу некоторые скажем так крылатой фразой которая когда-то еще услышал когда учился а покажи давайте же посмотрим почему нам нужна нормировать данные не только на входе мадриде вот наши данный а у нас они есть как это облака . но как-то вытянута и мы говорим что линейная модель не хочет получать на вход не от нормированы данные и это раз за разом повторяют чтобы вам достал понять если все понятно там сейчас будем двигаться дальше можно всегда вы

чтобы вам достал понять если все понятно там сейчас будем двигаться дальше можно всегда вы поставить там x 125 x полтора если хочется итак нам нужно формировать данные для нашей линейной модели теперь давайте посмотрим на нашу нейронную сеть что здесь есть у нас есть множество слоев допустим вот нас in put out вот и два скрытых слоя 2 скрытых слоя но теперь давайте посмотрим на мир с точки зрения допустим 2 скрытого слоя что с ним происходит мы с вами берем нашу функций потерь считаем где-то

допустим 2 скрытого слоя что с ним происходит мы с вами берем нашу функций потерь считаем где-то лосс в футляре и начинаем пробрасывать его назад обновляя параметры сначала 2 скрытого слоя потом 1 скрытого слоя то вот этом слое и так далее что же можно сказать давайте сюда посмотрим тогда внимательно у нас есть какие-то слои и стойки тренер допустим make- давайте я буду показывать вот на это представлении с точки зрения 2 скрытого слоя ему на вход просто приходит данные из какого-то

на это представлении с точки зрения 2 скрытого слоя ему на вход просто приходит данные из какого-то пространство какое-то признака описание данных второй скрытый слой понятия не имеет о том что он 2 он ничего не знает кроме того что ему сзади пришли какие данные мы сказали на обнови умножить на какой-то матрицу применив вам с активации а спереди к нему пришли градиенты сказали так смотри клиента вот такие пожалуйста исправьте выявится потому что иначе плохо он не знает на каком он есть стоит

вот такие пожалуйста исправьте выявится потому что иначе плохо он не знает на каком он есть стоит поэтому для каждого скрытого слоя то чтобы не на него приходит сзади это и есть данные из исходного признака пространство для него ответственно то что на него приходит спереди градиент и это то как он должен обновить свои параметры чтобы лучше классифицировать данные пришедший сзади а теперь давайте внимательно посмотрим сюда у нас есть вот этот вот последний допустим второй скрытый слой он сейчас

внимательно посмотрим сюда у нас есть вот этот вот последний допустим второй скрытый слой он сейчас моргает мы с вами обновили его параметры потому что нам пришли градиента мы обновили как мы с вами обновляем параметров как правило мы берем наши градиенты которые пришли спереди но вот д-р падает на ted pdx затем мы дифференцируем краски путь при дифференцировании мы учитываем то же нам пришло на ход какие-то признаку описания которые пришли на вход полу что у нас градиенты при условии такого

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

на вход следующем слой раз мы поменяли на то что приходит на вход слечь ему слой знать что он сделал свое собственное обновление вот это вот каким образом используя не релевантные данные он использовал данные которые пришли в одном виде а после того как он обновился данные поменялись ну если приводить совсем такие примеры сказали вот смотри вот тут стоять стена на нее можно опереться чтобы отдохнуть после чего наш второй слой оперся на стену после этого пришел первый слой и забрал эту стену

после чего наш второй слой оперся на стену после этого пришел первый слой и забрал эту стену второй слой полу все расстроились то есть целом когда мы с вами меняем выходы первого слоя после того как второй слой обусловил на предыдущий выхода первого слоя мы несколько ломаем наша модель вносим некоторую разрядку я думаю сейчас вам понятно то что когда мы идем вперед в форвард паз у нас вами сначала выдается выход первого слоя потом 2 когда идем назад сначала получать брезент второй слой потом 1

выдается выход первого слоя потом 2 когда идем назад сначала получать брезент второй слой потом 1 и меняем их что compares 2 потом первый это проблема это не очень удобная и более того это надо учитывать более того можно даже подумать и давайте тогда использовать как бы одновременно всех обновлять но нет потому что вы когда будете считать градиенты для второй слой к трубите пробрасывать назад в обусловить их найти входы которые в него пришли тут без вариантов и это на самом деле есть та

в обусловить их найти входы которые в него пришли тут без вариантов и это на самом деле есть та проблема который предлагает починить бочок чтобы вот этого он так вот это разгадке не происходило с началом обновили 2 при слой 1 потом поменяли первый второму сломали жизнь тут наверно стоит сказать верить во первых как с этим боролись раньше раньше с этим боролись простым образом а именно брали и понижали лёрн грейт до каких-то маленьких значений то что если вас очень слабо применялся первый слой

лёрн грейт до каких-то маленьких значений то что если вас очень слабо применялся первый слой не очень слабо поменялся all тут поэтому достаточно незаметно для второго слоя изменения и все более-менее сходится но в принципе есть вот эта краски замечательная цитата вообще говоря хорошая идея нормировать вход в вашей модели если она ленин и а если мы с вами вспомним пока что всё что мы видели здесь все наши слайд кит линейное преобразование плюс помогите нелинейно активации но линейное

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

и тут приходит краски башня замечательной техника которая появилась аж 2015 году хотя вроде техника абсолютно естественно а кто нам мешает собственно взять и вычесть средний поделить на дисперсию по каждой отдельной компоненте это вектор там или мотрич который пришла на вход то есть по каждому признаку по сути вот в этом представлении на каждом шаге никто не мешает это называется по шнуру что происходит у нас есть некоторый батч мы считаем теперь как бы для каждого скажем так промежуточного

происходит у нас есть некоторый батч мы считаем теперь как бы для каждого скажем так промежуточного представление представление объектов из патча в ком-то скрытом пространстве ну допустим вот здесь представление после первого слоя представлений после второго слоя так далее это по сути что это набор значений признаков которые опять же описывает весь назвать новом скрытым признаком пространстве а теперь мы с вами хотим в новых признаках описывать наши данные после чего берем считаем среднее

а теперь мы с вами хотим в новых признаках описывать наши данные после чего берем считаем среднее считаем дисперсию минус средний делить на корень дисперсией наконец квадрат дисперсии короче минус мы делить на корень из 7 в квадрат и все довольно получаем что у нас пели 0 средняя лично я теперь вся и это ты классно потому что теперь наша модель следующие следующие слои наши модели снова смотрит на данные с нулевым среднем и днищем дисперсий это замечательно и теперь можно повышать льер не

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

что нам нужны какие-то усредненные заполнены значения среднего и дисперсии чтобы мы могли на них нормировать все новые объекты потому что удалось пришел один объект вы не можете посчитать по нему средней дисперсии прошу среднее значение объекта а дисперсия ну быть чему она равна 0 и вообще может не определено от не очень хорошо поэтому давайте запоминать средний дисперсию краски за все время обучения краски можно использовать то же самое специально сглаживание которые уже упоминалось не раз

краски можно использовать то же самое специально сглаживание которые уже упоминалось не раз андрей сейчас вам понятно такое специально сглаживание как вы как про него прочитать в конце опять же лекции будет список ссылок на который можно по которым можно перейти и почитать там и пробач нормы и про дропауты про адам и так далее посмотреть на красивые картинки которые я использовал и в том числе против специально сглаживает также можем почитать что ж теперь же давайте скажем про оригинальный

против специально сглаживает также можем почитать что ж теперь же давайте скажем про оригинальный алгоритм вот буквально скриншот из оригинальной статьи и у вити что происходит пример то же самое средняя считается прост как средняя дисперсия посчитали поделили а вот здесь что то не понятно с кейлин shift какой-то появился это вообще что такое проект мы пока не говорили но тут на самом деле очень интересное наблюдение это реально skill and shift и если вы сюда обратить внимание это некоторая

интересное наблюдение это реально skill and shift и если вы сюда обратить внимание это некоторая линейно операция где мы домножаем на константу добавляем другую константу что это такое ну вообще говоря авторы небезосновательно предположили что нормировать наши данные эт конечно хорошо потому что наша модель она тогда получает на каждый следующий слой от нормированы данные но возможно в среднем и дисперсии или в чем-то там задержался щеткой той информации которую мы нашу модель хотела бы из а мы

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

преобразование уже обучаем а то есть если наша модель захочет она выучить себе вот такие константы как допустим усредненное значение среднего дисперсии если не захочет она выучит их допустим один и ноль соответственно и теперь наши модель сама контролирует куда она тампе армируют наши данные ты сначала мы все пришли 01 потом сказали модель так хочешь там 10 125 пожалуйста это твои дела градиенты тебе в помощь сама пошел в делать опять же классная техника и здесь я одна это обращаю внимание

тебе в помощь сама пошел в делать опять же классная техника и здесь я одна это обращаю внимание потому что на уровне даже какого-то отдельного как процесса нормировки данных процесса построения модели происходит простой скажем так использую просто иди давайте не будем терять часть информации вот добавляя возможность нашему преобразования стать тождественным но потому что если вы выучите и подходящие параметры гамма и бета то это будет тождественно преобразования почти тождественный терпит уж на

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

замечательная техника появилась 2015 году хотя выборки нормирование гораздо раньше в принципе дума это классическая операция привычная почти все и стоит про него сказать маленькую вещь это краски график который тогда поверг многих шок в принципе произвел серьезное впечатление это причина по которой сейчас без батч нормы или других методов нормировки данных то что помимо патч нормы есть плеер нормы берем других норм of вы можете увидеть качество моделей которые были достигнуты тогда и сейчас

берем других норм of вы можете увидеть качество моделей которые были достигнуты тогда и сейчас собственно есть вот сеточка inception я думаю когда вы разбирали краски различный тип архитектуры inception это известно сеточка которая достаточно неплохого качества добилась и она выходит на необходимое качество порядка 72 и двух процентов бы за 31 миллион шагов и это на тот момент был эксперт поход что произошло после того как добавили batch норм простак сеточки чтобы она сходила быстрее количество

произошло после того как добавили batch норм простак сеточки чтобы она сходила быстрее количество шагов снилось в три раза вот видеть краски красненький bnb celine если сделать его чуть более скажем так адекватным то мало того что количество шагов и драматически падает вообще в 10 раз даже больше чем за 2 миллиона шагов модель сходится до 73 процентов и крусе так она еще и доходит до более высоких значений и кроссе до более высокого качества на эволюционный выборки что в принцип показывает что

значений и кроссе до более высокого качества на эволюционный выборки что в принцип показывает что модель смогла сойтись еще и дальше но краски вот пример вы видите на графике вот черная пунктирной линии это исходный inception которые куда-то долго сходился а вот синие сплошная линия это как раз таки то чего удалось добиться первых все сошлось гораздо быстрее во вторых еще и дошло гораздо дальше до каких-то гораздо более значимых результатов и это краски показалось что простая идея о том что

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

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

значит результаты лучше значит все гораздо более довольны поэтому начнем с тех пор стал стандартом де-факто и сейчас почти всегда везде вы или его увидите или какие то похожие на него техники другие техники нормировки но они есть ну допустим в нлп сейчас используется лэр норм потому что ну там он полезен чтож это классная техника это был ваш норм и а вдруг outro наверно простой 2015 год переворачивается области пленка во многом потому что теперь больного и стандартом де-факто идея крайне

области пленка во многом потому что теперь больного и стандартом де-факто идея крайне простая и таких идей на самом деле было много и скорее всего еще будет 0 поэтому не стесняйтесь пробовать какие-то простые естественно для вас идея возможно это приведет каким-то классным результатом мы позволит вам добиться лучшего эффекта лучшего решения лучше решить куда прикладной задачи у написать статью на них и так далее что же сейчас предлагаю двигаться дальше и поговорить непосредственно про проблему

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

чинить нам нужно регуляризация 1 регуляризация которую вы уже скорее все видели это краски у и дикий как вы час называют короче это ограничение навис а вот наш функций потерь плюс мы добавляем культа лямда р-р революционный член который ограничен значения шприцов допустим есть иль два и ледяного стихнет как сумели 102 и здесь вопрос с вами используем норму вектор весов но если это у нас какие-то не знаю тендеры we saw the вытягиваем вектор я пересчитаем в норм качестве квадрат vectra весов

не знаю тендеры we saw the вытягиваем вектор я пересчитаем в норм качестве квадрат vectra весов отель 2 сумму модулей или 1 и так далее и мы его с вами минимизируем зачем это нужно я думаю краски разбиралась на занять по линейной регрессии но если коротко если у нас вами допустим признаки в коррелированы то у нас вами не единственное решение с помощью брезент метров находится у нас решении стоящих потому что можно поменять два параметра скажем так перекинуть с 1 5 в другой у нас получается два

потому что можно поменять два параметра скажем так перекинуть с 1 5 в другой у нас получается два параметра разные стали при этом того что они с коррелированы признаками итоговый вклад сохраняется модель неустойчиво сходимся хуже выборки тв ума дальше метод нехорошо солиден еще классные свойства что оно еще имеет признаки нам отбирать потому что краски у нас все признаки как так у нас есть хороший шанс показать получить нулевые коэффициенты при ненужных признаках опять же простая 102 реализация

шанс показать получить нулевые коэффициенты при ненужных признаках опять же простая 102 реализация это не тема сегодняшней лекции я опять же ссылку на то чтобы почитать про или 102 я оставлю в подборке материалов как и было в прошлый раз поэтому можете перейти туда или задать вопросы в чате в комментах на youtube и где-нибудь и леди 0 2 или 1 плюс 32 класс на технике регуляризации но здесь я хотел бы обратить внимание на простую вещь на эти вот нас там справа стоят коктейлям д-р да еще раз мы с

бы обратить внимание на простую вещь на эти вот нас там справа стоят коктейлям д-р да еще раз мы с вами предполагаем что нам нужно получить параметры по сути решения так чтобы это решение было устойчива к с коррелирована признаках хотя бы частично как мы это делаем мы налагаем дополнительно ограничения на наш вектор весов мы с вами поняли что есть проблема перевели это в математической форму вложили в нашу модель пример то же самое сейчас будем делать только уже с мирона месте и есть техника

в нашу модель пример то же самое сейчас будем делать только уже с мирона месте и есть техника dropout на самом деле классическая техника которая предлагает а давайте будем случайным образом занулить какие-то значения вот в этой вот признаком представления и заставлять модель работает только на частично признаком писание но что здесь на сезону вот эти краски кружочки теперь свою нас горизонтальная не вертикально это или стараться из оригинальной статьи и так что здесь видите вот нас оригинальные

не вертикально это или стараться из оригинальной статьи и так что здесь видите вот нас оригинальные признака описание новое новое и итоговое предсказание что можем с ним сделать а давайте теперь будем случайным образом занулить какие-то из этих краски признаков не выкидывать вот сейчас говорят выкидываем признаки мы не выкидывание какие признаки потому что она с вами признака пространств фиксирована размерности мы просто за 0 им какие-то значения признаков то есть на 0 или на первом шаге на

размерности мы просто за 0 им какие-то значения признаков то есть на 0 или на первом шаге на втором на третьем вот результат ведь и на правом все что у нас получил нулевые значения соответственно вкладывается не как во предсказание поэтому они помечены крестиком и получаем результат и может задаться вопросом а зачем вообще такая техника мы же вроде часть информации тире до теряем но мы делаем это а смысле давай представим такой стаса у нас есть некоторая вот не знаю рабочее пространство там

это а смысле давай представим такой стаса у нас есть некоторая вот не знаю рабочее пространство там сидит 30 человек и причем эти 30 человек какие 31 человек 531 человек поделены на 4 группы краски первая группа занимается тем что не знаю чистит какую-нибудь кожу или овощи что-нибудь вторые допустим делу какой-то промежуточную обработку третьем рубать да вот давайте овощи 1 моют вторые чистит 3 0 байт в салат причем каждый умеет рвать только один тип не знаю фруктов овощей и со всеми остальными

байт в салат причем каждый умеет рвать только один тип не знаю фруктов овощей и со всеми остальными не умеет работать ну потому что случилось а в конце стоит шеф-повар который все это сваливает в одну кучу перемешивают и отдает к клиентам что все были довольны давать происходит у нас один из работников просто-напросто заболел не вышел на работу виду того что никто другой как можно сказали не умеет рез конкретный тип овощей вот такая была святая обязанность у нас стоит весь процесс потому что

рез конкретный тип овощей вот такая была святая обязанность у нас стоит весь процесс потому что теперь у нас второй слой не может получить все необходимо грец 1 3 2 и так далее кинер нас мойка чистка ваще не очень хорошо подходит просто себе не знаю какой нибудь коллектив по разработке по вот этот человек допустим я рисовал кнопочки теперь у нас всего пол без кнопочек у нас ничего не рабо короче но все зависит от всех поэтому вы выпадение из процесса любого скажем так селена править тому что

но все зависит от всех поэтому вы выпадение из процесса любого скажем так селена править тому что все сломалось как можно сделать но можно придумать такой скажем так естественно пример тут а скорее давайте зайдем sky страны нам нужно чтобы люди умели замещать друг друга и работать даже когда что-то сломалось вроде как простой пример то есть если вот василий заболел пётр за него сделал пусть чуть хуже но часть его работы процесс идет все довольны как нам научить людей это делать можно проникнешь

но часть его работы процесс идет все довольны как нам научить людей это делать можно проникнешь тренинги можно подойти как deep lerner и давайте прямо в процессе обучения нашей сети заставим ее постоянно работать только на частично признаком писание естественно краски каждый признак вот каждый вот этот кружочек это что это отдельный сотрудник который выдает результат своей работы уникальный тоже тон краски с агрегировать себе информацию передал вперед теперь мы случайным образом за 0-ем каждого

краски с агрегировать себе информацию передал вперед теперь мы случайным образом за 0-ем каждого из них на каждом шаге просто просто подбрасываем монетку им так ты будешь работать не будешь работать и оставляю модель учиться таком виде чему это приводит к тому что теперь наша модель в процессе обучения понимает что она не знает конкретно какие признаки будут обнулены поэтому она старается агрегировать информацию со всех из них как-то день реализовать обобщать и использовать уже вот это общее

информацию со всех из них как-то день реализовать обобщать и использовать уже вот это общее представление при принятии решений по сути это делает нашу модель более устойчиво каким-то аномально значений признаков к переобучение на священников конкретного признака ну допустим она могла вот здесь предсказывать что-то очень похоже на мид классно при обучении поэтому теперь остальные свои просто берут и пробрасываю значение вот эту признака теперь если мы можем во занулить то при этом взорвется

и пробрасываю значение вот эту признака теперь если мы можем во занулить то при этом взорвется волос и модель будет пытаться и остальных того что то вы это крайне простая естественной лаконичная техника которая тем не менее появился опять же не так давно под стать я официально опубликован 14 годов принцип с 13-го года про дропал достаточно серьезно говорят и это простая техника которая используется память опять же почти повсеместно причем она может принимать различные формы есть вор dropout где

память опять же почти повсеместно причем она может принимать различные формы есть вор dropout где слова выкидывают в языком моделирования и есть много других подходов и slim fit замечательно модель которых принципе возводит dropout как не в абсолют но до серьезных уровня использования и позволяет его использовать здесь здесь здесь здесь здесь и дел хорошая модель но это будет когда-нибудь дальше в будущем про это возможно поговорим что ж вот моделька обучаясь простым образом стоит сделать

в будущем про это возможно поговорим что ж вот моделька обучаясь простым образом стоит сделать ремарку что вообще говоря при ходи и strain of test стоит также перри нормировать наши данные потому что если вспомнить краски батч норм то там если посмотреть сверяет с точки зрения мы с вами приводили распределение из которого приходит данные к одному и тому же на каждом шаге то что у него всегда 0 средний и нижний дисперсия а до этого без batch норма tamb стоял менялась распределение средняя ехала

и нижний дисперсия а до этого без batch норма tamb стоял менялась распределение средняя ехала дисперсии ехал так далее здесь может обратить внимание это я уже оставлю в качестве не которого я думаю самостоятельного занятия на семинаре пожелать пред вопрос можете обратить внимание на то что при использовании допустим 50 нейронов которые принимают не нулевые значения и 5 нейронов которые принимают не нулевые значения у вас как раз таки средняя если они ищут митрич может сохраниться а вот

не нулевые значения у вас как раз таки средняя если они ищут митрич может сохраниться а вот дисперсии можете rios так поменяться просто попадаете на это обратить внимание поэтому нужно перри нормировка краски на in friends но как правило там просто делит на вероятность drupal то эдак как работает drupal для каждого слоя это просто отдельно скажем так маска из нулей гниц хотите и ставьте хотеть нет них правило из просто вероятность группа то есть вероятность того что нейрон будет знали как

нет них правило из просто вероятность группа то есть вероятность того что нейрон будет знали как правило там нужно 5010 25 процентов зависит от задачи вопрос на про simpler уйти себе краски мотрич культом вектор из 0 единиц где-либо к примерно 50 0 единиц и 100 50 процентов либо 25 либо 75 сколько вы хотите накладывайте просто дам ножа и типа элемента сверху и получаете краски новые представления и так же стоит обратить внимание наверное на то что dropout можно рассматривать как ансамбле

и так же стоит обратить внимание наверное на то что dropout можно рассматривать как ансамбле рование огромного количества сетей то что когда у вас вот при посмотреть на право это у вас одна сетка над душой и обучения том и другие нейроны знали ли там 3 4 5 10 тысяч и не знаю 100 сороковые а потом вас все вот эти очки как бы вы их на клад друг мэру потому что вы на каждом шаге обучать по сути только под сеть из всей сети и начинать предсказывать целиком всей сетью по сути выкраски усреднять

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

этой техники и drupal у ту же по сути выступает некотором роли как ансамбль внести ну а теперь остается поговорить наверное про аугментации данных и про аргументацию данных стоит сказать что это еще одна техника регуляризации мы уже с вами разобрали регуляризация на уровне параметров модель мы уже разобрали по сути на уровне архитектур модели мы добавляем какой-то слой который за 0 такие толпу ты а теперь давайте рассмотрим ее паки на уровне даже параметров и функций потерь то есть реализация

а теперь давайте рассмотрим ее паки на уровне даже параметров и функций потерь то есть реализация параметра функции потерь на уровне структуру модели остались данные давайте добавим регуляризация на уровень данных как можем сделать вот у нас есть выборка допустим . локации у нас есть котик и мы с вами хотим получить больше данных например или просто хотим показать наши модели что если котика допустим отразить ее чуть-чуть поменять цветовую город ур там яркость контраст что ни будь то это все

отразить ее чуть-чуть поменять цветовую город ур там яркость контраст что ни будь то это все школе выживите что эта котика это котик правильно а для наши модели это два совершенно различных изображения для которых сварки будут по-разному использоваться и так далее по ним будут разные вещи map строить поэтому албин тации данных это способ добавить преобразование в наши данные которые сохраняют смысл например вот здесь видите что это котик можно чуть-чуть повернуть это все еще будет котик вот

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

не меняют значение целевой перемены то есть если мы с вами знаем как такие преобразования можно сделать за счет того что мы с вами как люди понимаем как сделать как следователи как люди которые снимаются всем этим прямо сейчас руками мы можем сделать добавить в нашу данной краски аргументации и тут сразу двух зайцев по сути ловим во-первых мы с вами увеличился объем кричащий выборки в несколько раз но допустим каждое изображение можно отразить ее понять цвета а можно еще чуть-чуть повернуть

раз но допустим каждое изображение можно отразить ее понять цвета а можно еще чуть-чуть повернуть можно еще чуть-чуть накидать небольшой шум и так далее у вас гораздо больше выборка а данные это всегда добро чем больше выборка тем устойчивее будут результат скорее всего и лучше они будут во вторых ваша модель становится устойчивой к таким краски тем по типам преобразований допустим если мы учим с вами классифицировать автомобили у нас во всех данных были только автомобиль которые едут вот туда

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

стоит оговориться что аргументация тоже не делал в разумно пределах почему потому что обобщающего способность модели фиксированная она конечно машина нашу модель не может запомнить больше чем у неё возможности на основе параметров поэтому если вы используете слишком много комментов они слишком сложные той скорее может сыграть злую шутку и понизить качество ну допустим у краски переворачивание котика инвертирование цветов мы как люди все еще сможем там был различить ну возможность первый взгляд

инвертирование цветов мы как люди все еще сможем там был различить ну возможность первый взгляд для модели это абсолютно другое изображение ей придется абсолютно учиться как бы на другом домене с другими изображениями работать она на это потратить часть свои обобщающие способности станет хуже работает основной задачи поэтому пожалуйста не перебарщивайте все хорошо использует сумму то же самое на самом деле с дропа у там если говорить про drop out the добавление группа вот с одной стороны это

самом деле с дропа у там если говорить про drop out the добавление группа вот с одной стороны это релиз регуляризация и получение более устойчивости а с другой стороны у вас эффективный размер сети при обучении на каждом шаге по сути снижается то есть если вы условно на каждый слой выкидываете 50-процентный родов у вас эффективно учиться на каждом шаге только 50 процентов нейрон в то есть вас сеть на самом деле половинка сети которую построили поэтому она будет когда вы все обратно включить и у

на самом деле половинка сети которую построили поэтому она будет когда вы все обратно включить и у вас будет более устойчивые будут более устойчивые результаты но при этом у вас задачи которые могли решить только сети размера как бы целиком целого размера в прыжке сеть которая размером в половину этой сети вряд ли сможет решить принципе то есть тут нет никакого бесплатного удобства здесь вы платите за устойчивость по сути способность решать более сложные задачи но при удачном стечении

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

априорные предположения особенно как человека или просто как не знаю знание человеческие за многие годы допустим какие-то физические знание туда внедрить или как знание всего коллектива в вашу модель в процесс обучения в данной куда-нибудь чтобы получить в решении эти значения уже как переработаны то есть еще раз вас какие знания вы их внедряете в модель и пытайтесь адаптировать их в тот вид чтобы модели они были понятны но в принципе все делать это может не только на уровне весов потом уже

модели они были понятны но в принципе все делать это может не только на уровне весов потом уже делать на уровне данных на уровне архитектуры на уровне распределение из которых пришли данные огромное количество техника регуляризации я бы скорее здесь хотел обратить внимание что это все техники регуляризации и услышите фигура головой за еще регуляризация мы регулируем или просто мы ограничиваем наш модель мы говорим не так делай вот так как правило это приводит к каким-то хорошим результатом есть

модель мы говорим не так делай вот так как правило это приводит к каким-то хорошим результатом есть лет правильной регуляризация но за это есть и цена как и всегда как и всегда а именно если вы используете регуляризация что вы получаете смещенное решение что такое священное решение спросите вы но наверное тоже стоит сказать вот наш или 102 смотрите мы с вами хотели бы минимизировать или максимизировать функции качества или минимизировать функций потеря как-нибудь а теперь давайте посмотрим на

функции качества или минимизировать функций потеря как-нибудь а теперь давайте посмотрим на решение если у нас там с вами вместо только функция потерь появился щелкает дополнительный член допустим сумма 0 весов то при минимизации функций потерь и сумма норм лесов мы получаем решение которое не функции потер минимизирует а минимизировать потери при условии наименьшего потом конечно значение норме лесов решение смещено относительно просто минимизации функция потери именно об этом я говорю поэтому

решение смещено относительно просто минимизации функция потери именно об этом я говорю поэтому как правило у всех этих техник есть как плюсы и минусы как причину так и следствия и она и стоит обращать внимание но и маленькие скажем так вывод из все лекции оптимизационные методы это классно в нейронах себя почти всегда используется градиентные методы оптимизации пожалуйста используйте их с умом правило большого пальца адам классная начальная инициализация 3 на 10 и черт если вас подходящие

правило большого пальца адам классная начальная инициализация 3 на 10 и черт если вас подходящие задачки и вам хочется использовать эту константу подходящее значение лёрн грейт а если вы понимаете какого подобрать подобрать можно несколькими запусками i do during райт играет роль и для адама и для rms проппа для многие другие конечно он еще больше играет используйте link wray дикий следить за качество модели и используйте регуляризация в любом подходящем формате главный не перегибайте палку

качество модели и используйте регуляризация в любом подходящем формате главный не перегибайте палку аугментация данных допустим в компьютерном зрение это в принципе стандарт де-факто это всегда используется наверное днем сдавите и девяти процентов случаев для этого целой отдельной библиотеке есть например замечательная билетика аргументация которая классно позволяет вмонтировать данные на лету и делать это эффективно и там кучу классных преобразований если же говорить более широким масками то

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

спасибо за внимание ссылка на слайды и ссылку на балканы и материалы будет под видео я желаю вам всего доброго и крепкого здоровья и до новых встреч

привет сегодня на семинаре мы приложим изучать то что вы уже изучали лекция именно два новых слоя ваши нормы dropout его 2 часть разные оптимизаторы разные возможности использования при этом чем ну и так далее вот зачем мы с баши нормы дропал да по этому как будет устроена эта клубу мы сейчас сделаем pipeline для обучения модели обучим модель просто посмотрим что у нас получится и потом будем добавлять туда башню грамма и смотреть снова что получается вот начнем с загрузки dtc то ну здесь как

туда башню грамма и смотреть снова что получается вот начнем с загрузки dtc то ну здесь как всегда стандартная загрузка из торчишь на мы создаем для сайта оборачиваем do the laughter ну и все хорошо наверное стоит сказать что такое datasette в понимании при торчат это вообще абсолютно любой объект у которого есть ли определенный метод и китай там то есть это все у чего мы можем написать член вот этого объекта и получить собственно какой-то там чат и допустим элементы если 10 меньше чем длина

этого объекта и получить собственно какой-то там чат и допустим элементы если 10 меньше чем длина любая такая вещь может быть это садом и и можно засунуть в data logger что сделает дату loader он превратит сам готовит в матче да все если раньше мы когда оперировались по нашему готов этом мы получали какой-то один элемент за раз the total удар во первых обернет все это в бочке . люди модерироваться мы будем получать baci он применит перемешивание чтобы на каждой и новым новой эпохи у нас были с

мы будем получать baci он применит перемешивание чтобы на каждой и новым новой эпохи у нас были с по-разному перемешанные baci и он делает помираю самую полезную вещь которую очень сложно писать самостоятельно руками он распараллелить процесс загрузки дело в том что обычно когда вы загружаете картинки вы не можете их постоянно хранить в памяти компьютера и вам приходится их погружаетесь диска это достаточно долгое действие и потом после того как вы без друзей надо еще какую-то предобработки

это достаточно долгое действие и потом после того как вы без друзей надо еще какую-то предобработки сделать ну вот например как здесь нормализовать их используя какие-то стандартные статистики по которым уже знаю проданы datasat возможно там отразить добавить бликов еще что-то в общем море возможностей и обычно все это приходит не очень быстро если использовать только один поток для загрузки данных и вообще не делать загрузку данных параллельно с обучением самой нейросети то есть с расчетом вот

и вообще не делать загрузку данных параллельно с обучением самой нейросети то есть с расчетом вот этих вот перемножения матриц тогда все это будет очень долго и ваше обучение станет возможно возможно намного дольше благодаря тому что существует data logger а уже встроены его притороченным ободом думать не нужно они берут и за нас раз параллели вают процесс загрузки очень удобно ну хорошо а теперь давайте определим функцию fit которая принимает количество эпох который надо обучать саму модель

давайте определим функцию fit которая принимает количество эпох который надо обучать саму модель лосс функцию оптимизатор train in data set и валидации точнее до the laughter они datasat здесь мы опять пройдемся по очень стандартному 3 лупу который мы уже писали в домашки и тренируемся по эпохам начинаем обучать нашу модель надеюсь вы помните что когда мы пишем модуль . train мы просто берем и переключаем нашу модель в состоянии обучения когда мы пишем модуль точкой вал мы переключаем нашу

и переключаем нашу модель в состоянии обучения когда мы пишем модуль точкой вал мы переключаем нашу модель в состоянии предсказаний некоторые слои вот как раз мы сегодня про них поговорим это большой барабан они работают по разному во время обучения и во время предсказаний и поэтому нужно так обязательно делать не забывайте теперь мы берем мы тренируемся по нашему дотла пудру она дает нам бачек собачьи игреков мы их перемещаем на нужный девайс здесь мы если возможно выбираем расчеты на

бачек собачьи игреков мы их перемещаем на нужный девайс здесь мы если возможно выбираем расчеты на видеокарте или если не сложно то расчет не циpкa и когда мы вот так вот делаем мы перемещаем данные на нужный девайс ну то есть если это цикл то данные никуда не перемещаются а если девайс это какая-то видеокарта то они копируются вот туда теперь у нас новые объекты мы применяем модель считаем лосс прибавляем лоск сумме ну и делаем шаги для оптимизации собственно ничего нового уже 100 раз такое

прибавляем лоск сумме ну и делаем шаги для оптимизации собственно ничего нового уже 100 раз такое видели здесь для в авиационной части примерно тоже самое теперь мы еще сделаем и вспомогательную функцию плод тренинг она будет делать вот такие вот два графика первый это лосс зависимости от средней лосс во время эпохи и вот здесь средний апельсин для после каждой эпохи ну я здесь не стал делать вещи для обучающего сайта почему мы просто не захотелось теперь определим очень-очень простую модель

для обучающего сайта почему мы просто не захотелось теперь определим очень-очень простую модель это тот самый линетт про который вы скорее всего узнали уже в домашки все мы теперь определяем нашли нет определяем лосс определяем оптимизатор и вызываем нашу функцию fit и все прекрасно сейчас я не буду ее запускать потому что она вот и достаточно долго на то что здесь всего лишь 10 apple это примерно примерно 10 с чем-то минут так что заново запускать мы не будем давайте сразу посмотрим на то что

примерно 10 с чем-то минут так что заново запускать мы не будем давайте сразу посмотрим на то что получилось у вас падает все замечательно и крисси растят ну после самой первой эпохи нас было точность и крысы точнее 4070 половиной процент и вот после 10 63 где-то 64 процента правильному угадываю это сайт на котором мы работаем это цифра десять я здесь даже не стал показывать картиночки из него потому что нам совсем без разницы что там за данные сейчас я объясню почему это просто дата сайт

потому что нам совсем без разницы что там за данные сейчас я объясню почему это просто дата сайт состоящий из картинок у которого 10 классов вот типичный задачи классификации как мне столько чуть-чуть поинтереснее ну и у него разрешение у всех картинок 32 на 32 пикселя небольшие почему нам не очень важно что за данные и что за модель ну потому что мы сейчас будем рассматривать больше норм и до полки они обычно помогают когда у вас есть более менее глубокая какая-то модель и поэтому вот такой

полки они обычно помогают когда у вас есть более менее глубокая какая-то модель и поэтому вот такой вот простом ли нити мы скорее всего не заметим положительных каких-то эффектов и нужно было бы использовать что-то более глубокое что то что вы например можете попробовать следующий домашки который будет через неделю где вам будет предложено еще одно соревнование на кадре с кем-нибудь заданием на классификацию картинок скорее всего вот так что мы не ожидаем какого-то улучшения мы просто хотим

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

такое на лекции вы обсуждали что как он работает но давайте я еще раз повторю когда мы говорили о линейных моделях еще она очень далекий реакциях наверно 3 4 стакана да мы говорили что когда вы подаете какие-то данные в линейной модели очень важно их нормировать потому что иначе возникает куча проблем вроде того что модель они учатся получается не стабильные результаты много плохих вещей и это правда не только линейных моделей когда вы подаете какие-то данные на вход в нейронную сеть очень

правда не только линейных моделей когда вы подаете какие-то данные на вход в нейронную сеть очень важно их тоже нормировать потому что нейронные сети ещё более чувствительна к тому что вы подадите какие-то плохие данные но мы хотим нормировать данные не только на входе было больше хорошо если мы смогли придумать какой-то способ как от минировать данные вот на внутренних слоях то есть чтобы у нас есть слой него подается какой-то вход который является выходом предыдущего слоя и вот он скорее

нас есть слой него подается какой-то вход который является выходом предыдущего слоя и вот он скорее всего имеет средняя не 0 и дисперсию не один а мы хотели бы чтобы это было так ну и что мы можем сделать применить башня ну или еще много других методов номеров ки признаков они по сути просто по-разному смотрят на то что именно нужно нормировать и поэтому применимы в разных местах ну пышном это самое традиционное то что вы чаще всего увидите как работает большой смотрите ну во-первых башням это

традиционное то что вы чаще всего увидите как работает большой смотрите ну во-первых башням это такой слой и у него есть всего лишь два веса гамма и бета ну на самом деле это виктора и вы сейчас увидите почему что мы дело во время обучения мы для каждого патча который поступает на вход когда мы обучаемся мы обучаемся патчами мы считаем среднее мы считаем стандартное отклонение теперь мы из наших признаков вычитаем среднее по признакам и делим на корень из корня дисперсиями то есть на

из наших признаков вычитаем среднее по признакам и делим на корень из корня дисперсиями то есть на стандартное отклонение плюс себси получаем новый какой-то выход уже от нормированный у которого распределение которого дисперсии единица и средний 0 ну потому что мы прям только что в учит мучая средние определением теперь на стандартные отклонения и после этого мы вот такую нашу хорошую причину умножаем на константу умножаем на вес и прибавляем b с то есть еще один вес и у нас получается что мы

на константу умножаем на вес и прибавляем b с то есть еще один вес и у нас получается что мы сначала от нормирование наши данные наши признаки которые поступают на вход batch норму а потом как ты их сместим зачем так делать ну потому что если не добавляйте вот этот шаг где мы используем веса когда можно посмотреть что очень часто градиентный спуск будет из за того что у вас патчи разные он попытается изменять очень быстро vesa ну и в общем ничего не получится все сразу сломается и поэтому вот

изменять очень быстро vesa ну и в общем ничего не получится все сразу сломается и поэтому вот это смещение и умножение константа очень важно вставлять потому что периодически для того чтобы ваш следующий слой дал наилучшие предсказание вам все-таки нужно чтобы признаки на входе были чтобы к средней было не 0 и стандартное отклонение было каким то другим вот мы заставляем ношение ромку выучить какой именно это распределение должно быть а во время предсказание мы хотим делать ну понятное дело что

именно это распределение должно быть а во время предсказание мы хотим делать ну понятное дело что то очень очень похожи но есть одна проблема когда мы делаем наше предсказание но скорее всего нет никаких бачей ну и вообще не очень приятно если мы будем делать предсказания и наши предсказания будут зависеть от того какой batch подобрался мы предсказываем для одного примера что-то и его предсказание зависит если бы мы точно также применяли в шторм она бы зависело от того что еще лежит пакет для

зависит если бы мы точно также применяли в шторм она бы зависело от того что еще лежит пакет для которого мы делаем предсказание разве не хорошо поэтому мы хотим взять и вместо вот этих статистику бачу использовать глобальные статистика просто посчитанные на всем обучающим года сети после обучения нашей модели прекрасно ну есть только одна проблема мы все таки не хотим их их использовать потому что ну еще раз прогонять нашу не ромку но всем обучающему это сайте после обучения не очень хочется

что ну еще раз прогонять нашу не ромку но всем обучающему это сайте после обучения не очень хочется им можно получить очень хорошее приближение настоящих средних и настоящего со стандартного отклонения по всему datasette у если мы просто будем использовать сходящие среднее ну или специально затухающие средние смотря как его называть что это значит мы просто храним внутри слоя каждый раз когда мы во время обучения вычисляем вот эту статистику для патча мы как-то и усредняем всем что мы раньше

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

стоящими но на деле ничего не дает доход большой дает он действительно помогает нам обучать наши нейронные сети быстрее за счет того что мы можем поставить больше ли a great и мы можем обучать более глубокие сети которые бы ну без больше норма просто не учились пошлем дает нам регуляризация и в целом если мы учились сеть которую мы могли без больше нормы учить с большим она просто лучше учиться у него будет более хорошее качество хорошо следующий пункт о которой я бы хотел поговорить это то как

него будет более хорошее качество хорошо следующий пункт о которой я бы хотел поговорить это то как считается большим для сверточек слоев если вы посмотрите на эти формулы то увидите что ну вот это какие-то вектора это тоже виктора средний вектора мы как бы рассчитываем что вот так баш норм работал бы для них а обычно выдается слоя обычно упал на связанного слоя когда наш матч это набор векторов случае с картинками с выходами сверток снова слоя на шабаш это набор трехмерных матриц трехмерных

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

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

обошла мы не будет обладать успешным детальность и это действительно плохо ну и как мы можем это в итоге пофиксить просто давайте считать что в качестве координаты мы берем только номер канала что имею ввиду это наверное было не очень понятно давайте вот здесь есть пишу доклад я сейчас в объясню я взял его ответа на такой flow вы можете посмотреть его вот по этой ссылочке смотрите пусть нам больше нам подается выход все росло тогда это четырехмерный тандер где первая координата это размер матча

нам подается выход все росло тогда это четырехмерный тандер где первая координата это размер матча вторая координата высота 3 ширина и 4 канал как бы считался batch но если бы мы пользовались вот таким методом мы выбрали средний вот так стандартное отклонение вот так и просто вы читали бы вот ice-t и из-за этого экземпляра из этого примера мы вычитали среднее по бачу и делили бы на стандартное отклонение что мы делаем на самом деле что происходит в большом голодает которое определенных

отклонение что мы делаем на самом деле что происходит в большом голодает которое определенных проторчал мы берем среднее по не только по координате которые обозначают batch но и по координатам которые обозначают позицию на картинке то есть по 1 2 координате в том числе тогда если вот здесь средняя это был тендер из трех измерений с размерностью аж wc то в данном случае среднее будет вектором и стандартное отклонение тоже будет вектором ну и тогда вычисляться нас точно будет вот так хорошо вещь

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

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

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

давайте теперь немножко изменим нашу модель поменял здесь совсем немножко я добавил распашной 2 башни и три башня причем башням вам нужно передать количество каналов большое количество каналов которые будут во входном тендере то есть вот это вот размерность c в данном случае это 6 10 по 16 и здесь я применяю почти норм 1d которые работают вот так как здесь написано в этих формулах и сюда нужно передавать размерность ликторов которые в моче применяется он точно так же как любой другой слой вот

размерность ликторов которые в моче применяется он точно так же как любой другой слой вот здесь вот я выделяю разницу в коде ну и посмотрим что общий меняется да вы еще можете заметить что я не применял башням перед последним пола связным слоем почему есть такое более-менее стандартное мнение что ваш норм добавляет регуляризация и когда ваша модель делает предсказание на последнем свою то ваще норм перед вот этим было связано последним слоем он скорее будет мешать давать точные предсказания и

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

для таких моделей так что случилось то что получилось достигла она намного больше волос а чем модель без ночного но опять же проблема просто в том что нашу модель не подходят для овощного и весь смысл в том чтобы показать как вообще просто поменяете давайте теперь посмотрим на очень интересный эффект если вы вспомните как работает большой и уже очень много раз про это говорил за последние пять минут то здесь вот мы делим на корень из дисперсии и если в нашем паче всего лишь один элемент то вот

то здесь вот мы делим на корень из дисперсии и если в нашем паче всего лишь один элемент то вот это вот стандартное отклонение дисперсия нам будет равно нулю здесь мы конечно делаем плюс описала чтобы это нам не особо сильно мешал но если мы попробуем подать нашу модель batch размера единички и геката слой баш норма выкинет ошибку и скажет что и подожди подожди и что ты не так делаешь у меня всего лишь один элемент бачей одну я ничего не могу посчитать такими так что давайте теперь посмотрим на

лишь один элемент бачей одну я ничего не могу посчитать такими так что давайте теперь посмотрим на дропал это еще один необычный слать которые работают по разному во время обучения и во время предсказаний в чем я идея но у него есть один гипер параметр это вероятность того что конкретное число в ходе не будет заново ног до полотно так он называется потому что он как бы дропает выкидывает какую-то часть входа обычно на вход пришел enter ну то есть переменная matreshka с числами и теперь мы

часть входа обычно на вход пришел enter ну то есть переменная matreshka с числами и теперь мы каждое число на 0 им с вероятность типа ну вот допустим p равно на 5 это достаточно популярное значение которое часто используется программа убираем половину всего ухода и превращаем ее в ноль и просто дом в следующий слой и оденься что он там как-то обучиться но при этом кажется что просто замерять входы не очень хороший день мы хотим чтобы дисперсия чтобы дисперсия признаков для 1 экземпляр

входы не очень хороший день мы хотим чтобы дисперсия чтобы дисперсия признаков для 1 экземпляр оставалось примерно такой же после как дав входом на наш для палаток и после и поэтому мы не только за 0-ем с вероятностью п но еще умножаем оставшиеся числа на 1 делить на 1 - pi ну тогда иди дисперсия как бы для одного экземпляра оно не изменится оба премиум предсказание мы вообще ничего не делает связаны с тем что когда мы заменяем какие-то части мы очень сильно осложняет жизнь нашу модель но мы

с тем что когда мы заменяем какие-то части мы очень сильно осложняет жизнь нашу модель но мы собственно этого и хотим дропал от это очень мощная штука для регуляризации нашей модели мы стараемся сделать себе проще во время обучения мы как бы затрудняем ей жизнь надеюсь что она выучит какие-то более правильные вещи а во время предсказаний понятное дело что ничего затруднять мы не хотим и поэтому наш dropout превращается в слой который вообще ничего не делает что при этом дает применение дропал

наш dropout превращается в слой который вообще ничего не делает что при этом дает применение дропал это благодаря тому что с какой-то вероятностью каждый признак может стать нулем наши сеть она вынуждена не полагаться на какой-то один признак слишком сильно ей приходится создавать более устойчивые представления на внутренних слоях и это хорошо и это помогает во первых избегайте переобучению как я уже говорила . мощными для регуляризации и в целом в конце концов повышает качество нашей модели

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

в целом мы выкидываем долю п нейронов предыдущего слоя потому что мы позволяем и если посчитать хорошо стол получится что применение дропал это это как бы усреднения результатов на каждом свою по очень большому количеству ниро сетей вот с меньшим количеством нейронов на каждом слое и судя по всему это хорошо и это похоже в каком-то смысле на вот та усреднение которые мы использовали для того чтобы улучшать работу деревьев ну еще утро болт есть иногда очень интересный эффект который возникает

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

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

ну и за счет того что вначале наша модель очень очень быстро учатся то очень большой нос в начале который был на самых первых шагах в эпохе и среди них намного меньше мозге который дает который получается на последней shimmer плохи вот он дает большее значение лосса для train выбрать и чем для вы radisson и которые в самом-самом конце эпохи когда наши модели же самое хорошее рассматривается давайте теперь еще говорим про то как между собой зима действует больше нормы то палка когда вы в первый

теперь еще говорим про то как между собой зима действует больше нормы то палка когда вы в первый раз изучаете что к его шнура мудро палок и завете что это прям очень хорошие слои которые постоянно везде используются хочется их использовать вместе и по надеяться что благодаря этому ваши модели станут еще лучше но скорее всего вы столкнетесь с проблемой который следуется вот в этой статье на которую здесь вот есть ссылка и она пытается объяснить почему очень часто когда вы используете больше норм

здесь вот есть ссылка и она пытается объяснить почему очень часто когда вы используете больше норм вместе с до болтам качество итогами модели получается хуже чем если бы вы использовали только что-то одно ну если очень-очень краткость суммировать что люди предлагают в этой статье получается что ваш норм он когда считает внутри себя вот эти вот статистике который используется во время предсказаний он полагается что выше предыдущего слоя но каким-то образом распределял но если выше предыдущего

он полагается что выше предыдущего слоя но каким-то образом распределял но если выше предыдущего слоя как-то завязано на 2 палате то во время обучения и во время предсказания распределение будет разным несмотря на то что мы вот дела вот этот мир миров q скорее даже благодаря эту воскресение для каждой конкретной фичи для каждого конкретного признака получится разным и по вот эти статистике которые посчитал бы шторм они будут неправильными ничего не получится и во время теста наша модель будет

посчитал бы шторм они будут неправильными ничего не получится и во время теста наша модель будет следующим плохо вести как такое тогда можно исправить ну самый простой вариант просто не ставьте по шнуру после дропал а то и всю вашу жизнь прекрасна но наверное это очень сильно ограничивает простор фантазии тут вроде бы и других фиксов они пока не предлагаю давайте теперь научимся применять дракона тупо и торчат если вы посмотрите то опыт арчер целом есть два варианта как вы можете применить

тупо и торчат если вы посмотрите то опыт арчер целом есть два варианта как вы можете применить дропал во первых это просто функция из python истор . nn . фарш на которой обычно вот импортируется как и большое можно вызвать вот так как функцию и можно создать объект слоя в чем отличие ну смотрите когда вы применяете drupal как функция вот так да он применяется обязательно вне зависимости от того в каком состоянии находится ваша модель сейчас происходит предсказание или обучение он применит

в каком состоянии находится ваша модель сейчас происходит предсказание или обучение он применит дропал притом нужен лид примерно долю pay вот из этих чисел которые поступили мы на вход в то же время если вы и станции ru эти слой ну то есть создадите объектов и положите его вот так вот ваш сопла смотрят-то когда вы вызовете модуль . train или модуль точкой вал пойдешь посмотрит на все вот эти вот переменные которые здесь определены посмотрит кто из них является модулями и для всех модулей и моду

которые здесь определены посмотрит кто из них является модулями и для всех модулей и моду листов поменять их состояние на обучение или предсказания тоже так что если вы не хотите задумываться о том как с помощью как руками переключать исполнении для fly кушона версии до болота просто используйте слой и будет вам счастье в общем немножко измененная модель по сравнению с самой первой моделью мы здесь вы добавили просто пропала и вот здесь его применили почему добавить только один после сверточек

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

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

dropout по сути нет смысла то есть скорее да святочных слоев или полна связными имеет смысл ну и давайте посмотрим как выглядит наша кривая обучение в целом если вы посмотрите то он на самом деле с дропал там нашу модель стал обучаться даже лучше чем без drop out a хотя казалось бы это какой-то регуляризация и она должна обучаться медленнее вот так вот счастливая случайность хорошо мы посмотрели на то как применять новые два слоя давайте теперь посмотрим на то как применяются разнообразные

на то как применять новые два слоя давайте теперь посмотрим на то как применяются разнообразные оптимизаторы в при торчат

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

разнообразных оптимизаторов при топча очень-очень простое раз поэтому что благодаря этому прекрасных рывок самый популярный оптимизатор вообще это вариант стасик гредин де сента называется надо здесь вот есть прекрасная статья вроде bag 16 года которая сравнивает очень много разных покорив активизация белок но не приходит к выводу что адам подходит для большинства случаев и это стандартный алгоритм когда вы по следу особых предпочтений вы просто берете использовать адам по сравнению с обычным

когда вы по следу особых предпочтений вы просто берете использовать адам по сравнению с обычным поклоном обучение меняется еще очень мало мы просто вместо optane . сгд вызов создаем объект оптим . да и придем у него те же самые параметры такой же mini grey ну и какие то еще в свои параметры которые конкретно для дома существует вот эти вот bettas но вам почти никогда не придется их изменять стандартный работают прекрасно давайте теперь посмотрим на то какое получилось обучение в данном случае

работают прекрасно давайте теперь посмотрим на то какое получилось обучение в данном случае разницы почти никакой нету так что не знаю что сказать опять же я чаще маленькая модель просто запомнить их что адам это то что вы хотите использовать обычно с такой тигре 1 мне кажется его сейчас вообще применяют только в каких-то научных статьях когда вам обязательно нужно чтобы ваш оптимизационного алгоритмами был простой чтобы там подтвердить какие-то гипотезы всех же техника которые мы хотим

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

колоссу сумму квадратов весов вот из наших матриц и умножаем на такой параметр который передается оптимизатор передается он как двое детей собственно почему эта техника называется в детей дело в том что с каждым шагом если вы запишите производную лосса по каждому весу мы как бы вычитаем как бы сначала дополнительно умножаем наш вес на какое-то число меньше единички ну собственно если вы детей 0 1 точнее 02 леди сокращение нашего 011 слишком много если нашего и дикин 1001 то его применение это

1 точнее 02 леди сокращение нашего 011 слишком много если нашего и дикин 1001 то его применение это все равно что просто перед каждым шагом градиентного спуска мы все веса будем умножать на 099 ну и таким образом понятно что чем больше шагов мы делаем тем больше наши веса как бы детей становится меньше и угасают именно поэтому называется детей и периодически очень полезная техника для регуляризации вашей нейросети следующий пункт это грейс келли раз кегеля дело в том что периодически мы хотим

вашей нейросети следующий пункт это грейс келли раз кегеля дело в том что периодически мы хотим чтобы наши элен great изменялся с течением обучения для чего это нужно ну наверное дело в том что мы не всегда можем идеально подобрать лене great для всех ситуаций поверхность функции ос она очень по-разному выглядят в разных местах и подобрать один или для всех для полной оптимизации периодически очень сложно и не в целом вообще подбирать или in great без использования лир fine дробей с ним это

очень сложно и не в целом вообще подбирать или in great без использования лир fine дробей с ним это неприятное занятие в то же время мы можем просто взять и поставить в начале какой-то большой он играет относительно естественно чтобы наша мисс они взрывались или постепенно его уменьшать тогда в какой то момент мы дойдем до хорошего уровня люди great а и преступление он постепенно начнет сходиться к чему-то такая стратегия когда мы просто берем и уменьшаем называется наверное самое популярное то

к чему-то такая стратегия когда мы просто берем и уменьшаем называется наверное самое популярное то экспоненты дикий когда мы просто каждый раз уменьшаем нашу my great фиксированное число 1 ну допустим с каждой эпохой умножаем его там 20 5 или 0 1 и научимся применять я игра из кедра для этого нам нужно будет совсем немножко поменять нашу функцию фильм мы добавляем еще один аргумент или апскейлер который собственно и будет нашим объектам скиннера и вот здесь сразу после того как мы полностью

который собственно и будет нашим объектам скиннера и вот здесь сразу после того как мы полностью прошли по мы делаем лев skad . ставь как выглядит аллерс кедр вот так мы получаем наш экспонент ширли грейс келли мы передаем у него оптим оптимизатор который на котором будет будет изменяться и great и гамма то есть тонны сколько умножать really great каждый раз когда вызывается только став таким образом когда мы делаем лев следует . 100 он просто залезает вот в этот вот объект оптимизатора

образом когда мы делаем лев следует . 100 он просто залезает вот в этот вот объект оптимизатора изменяет люди great умножая его на на 5 ну и все в целом мы можем опять запустить нашу обучение и получить что то вот такое прекрасно все учатся и последнее наверное достаточно важная тема чехонте я не особо хотел ее разбирать потому что во первых есть прекрасный tutorial который даже не требует знание английского официальный от при торчат вот так что я надеюсь что вы сможете его сами посмотреть и

английского официальный от при торчат вот так что я надеюсь что вы сможете его сами посмотреть и все понять и там уже это прям совсем несложный речь так что просто посмотрите на эту ссылку и все станет понятно

привет меня зовут тони гальцева и сегодня я приведу занятия посеянное на архитектура и транс филиале мгу план занятия следующий в первой части мы поговорим о том какие архитектуры сверточек не раз сетей существуют какие самые популярные какие за ними стоят идеи и разберем что такое скидка in action во второй части занятии мы поговорим про транспорт леоненко давайте начнем с архитектур карточных нейронных сетей давайте вспомним что такое и начинает им начинают эта база данных картинок поделенных

сетей давайте вспомним что такое и начинает им начинают эта база данных картинок поделенных на тысячу классов на данный момент это базы данных насчитывает более 14 миллионов картинок в 2010 году на основе этой базе данных стартовал конкурс и начинает участникам нужно было придумать модель машинного обучения которая могла бы обучиться на картинках из этой базы данных и потом подходящие картинки предсказать какому из тысячи классов эта картинка принадлежит на слайде вы видите timeline этого

предсказать какому из тысячи классов эта картинка принадлежит на слайде вы видите timeline этого конкурса такой же вы видели на слайде лекции про свёрточная нейронная сеть напомню что 2010 и 2011 году конкурс выигрывали модели которую не имелись не розетками ничего общего это были модели которые каким-то образом выделяли фичи из картинки а потом эти фичи подавались на вход обычным классификатором в радиальном форесте или линейной регрессии которая выдавала собственный ответ какому классу

в радиальном форесте или линейной регрессии которая выдавала собственный ответ какому классу принадлежит картинка 2011 году выиграла модель xr сие и у нее процент ошибок был 26 и это было тогда довольно хорошо 2012 году этот конкурс первый раз выигрывал свёрточная нейронная сеть алекс нет у нее был очень крутой процент ошибок 16 4 это было очень круто по сравнению с процентов ошибок 26 в прошлом году и это было нейронная сеть свёрточная тогда люди поняли что свёрточная нейронные сети они имеют

году и это было нейронная сеть свёрточная тогда люди поняли что свёрточная нейронные сети они имеют большой потенциал и начали их развивать пробовать новые архитектуры придумывать новые идеи 2013 году другая свёрточная нейронная сеть уже имела 11 процентов ошибок в 2014 году сеть кгб имела 7 и 3 процента ошибок в том же самом году была представлена сеть google нет которая имела еще меньше процентов ошибок 2015 было представлено сеть вес нет которая имела уже меньше процентов ошибок чем обычно

ошибок 2015 было представлено сеть вес нет которая имела уже меньше процентов ошибок чем обычно делает человек и в 2016 году была другая реинкарнация сети google нет google на этого и 4 у нее было вообще 33 процента ошибок 3 и один даже при вращении давайте посмотрим на алекс нет олег стоит это первая сеть которая 2012 году выиграл этот конкурс конечно люди пытались делать с нейронные сети для работы с изображениями и раньше и свёрточная нейронная сеть и леди тоже пытались сделать для работы с

с изображениями и раньше и свёрточная нейронная сеть и леди тоже пытались сделать для работы с изображениями раньше но у них не получалось и алекс это первая успешная архитектура которая наконец смогла выдавить этот конкурс двенадцатом году давайте посмотрим из чего она состоит на самом деле алекса это довольно простая свёрточная нейронная сеть она состоит всего лишь из сверток cooling of рылу нескольких линейных слоев и также актива царила между ними ну на всякий случай после последнего слоя

линейных слоев и также актива царила между ними ну на всякий случай после последнего слоя активации конечно же софт макс потому что мы решаем задачу классификации и в конечном последнем слое у нас тысяч нейронов потому что нас тысячи классов вы начинаете но идея в том что алекс нет это довольно простая архитектура которая состоит прост и сверточек слоев полинга факте воцарила между ними 2 полна связанного слоев также с активацией рифму между ними давайте обратим внимание вот на что олег снег

связанного слоев также с активацией рифму между ними давайте обратим внимание вот на что олег снег принимает на вход цветное изображение 3 канала у которого размерности 227 на 227 после первого свёрточная слоя карта активации получится размерности 55 на 55 то есть размерность сильно уменьшилась это достигается тем что в первом цветочном слой у alex sneg используется довольно большие по размерности фильтры 11 на 11 и довольно большой straight 4 после первого святочного слоя получается 96 карт

фильтры 11 на 11 и довольно большой straight 4 после первого святочного слоя получается 96 карт активаций они идут во второй карточный слой который тоже сильно понижает размерность карт активации и размерность уже 27 на 27 это достигается опять же тем что размерности фильтров довольно большие на втором слое они там пять на пять дальше это все идет в третий слой и заметим что 3 4 и 5 свои они никак не меняют размерность карт активации как было 13 13 так и останется 13-13 это происходит потому

не меняют размерность карт активации как было 13 13 так и останется 13-13 это происходит потому что размеры фильтров на этих слоях один-на-один казалось бы странной немножко использовать фильтры размерности 11 как бы какую новую информацию они там могут вычленить кажется что это немножко странная и информация не получит мало но на самом деле в этом есть смысл 1 смысл это в том что такие слои могут используются для манипуляции количеством карт активации вот посмотрите после четвертого слоя карта

используются для манипуляции количеством карт активации вот посмотрите после четвертого слоя карта активации было 384 а после пятого слоя уже 256 во вторых добавления к январю сам слоев фильтрами 1 и 1 это добавление нелинейности в сетку то есть мы помним что после каждого can ванюшин слоя используется функция активации в данном случае случае олег сне то эта функция активации лилу и лилу эта нелинейность и чем больше у нейронной сети нелинейности на самом деле тем лучше потому что тем более

и чем больше у нейронной сети нелинейности на самом деле тем лучше потому что тем более сложные функции может выражать нейронная сеть наверное вы знаете и понимаете что если сделать два последовательно полная связано слоя без активации между ними то в принципе это тоже самое что сделать один полна связанный слой с активацией ну потому что композиция линейных функций она линейной на самом деле свёртка это тоже линейная функция и как бы смысла делать 2 свертки подряд без функции активации между

это тоже линейная функция и как бы смысла делать 2 свертки подряд без функции активации между ними тоже мало так вот к январю шина один-на-один используется во первых чтобы манипулировать количеством карт активации и во вторых чтобы добавить нелинейность в сетку что делает ее более универсальный ну и вот после того как мы получили все карты активации последнего 5 сывороточного слоя или 256 и они размерности 13 13 мы их разворачиваем векторы конко тонируем и подаем на вход первым упал на

и они размерности 13 13 мы их разворачиваем векторы конко тонируем и подаем на вход первым упал на связанные условия у которого количество нейронов 4096 прогоняем через два плана связных слоя и на выходе получаем 100 нейронов с ответами вот такое устройство алекс нету но что же действительно сделала алекс над таким крутым по сравнению с другими архитектурами которые люди пытались завести в то время что вот алексей победил вы начинаете другие архитектуры не смогли ну вот главное достижение

время что вот алексей победил вы начинаете другие архитектуры не смогли ну вот главное достижение алексей это состоят в следующем во-первых автора олег сна это использовали в качестве функции активации промежуточных слоев лилу вместо gain социальной функции активации которая в то время была очень популярна как вы видите использование реалу действительно может сильно улучшить performance сетки далее авторы использовали параллельная тренировку сетки на нескольких gpu это как бы не сильно влияет

авторы использовали параллельная тренировку сетки на нескольких gpu это как бы не сильно влияет на performance и это как бы не архитектурное решение сетки но это влияет на то как долго вы будете тренировать сеть и как много экспериментов с архитектуры вы можете провести то есть это намного ускоряет эксперимент и третья тоже не относящийся сильно к архитектуре но относящиеся к процессу обучения святочных нейронных сетей авторы использовали аргументацию данных аргументация данных это на самом

святочных нейронных сетей авторы использовали аргументацию данных аргументация данных это на самом деле очень сильная штука которая действительно помогает улучшить performance карточных нейронных сетей особенно тогда когда лен их мало вот эти три поэта помогли автором алекс но это как бы стать первыми авторами крутой нейронной сетки которая имела успех на imagine эти давайте пойдем дальше в г.г. через два года была придумана ведь в г г г г г на самом деле это тоже обычная простая свой отлично

через два года была придумана ведь в г г г г г на самом деле это тоже обычная простая свой отлично нейронная сеть в чем же ее отличие от alex не это главное отличие от alex на это оно глубже то есть у нее больше слоев у него больше суета что в слоев у неё больше полна связан с лет полна связано слоев мне стало три а сверхточных слоев у нее стало больше сколько именно я скажу на следующем слайде кроме этого у нее есть еще одно отличие от alex нету у неё канва лю шэн слои имеет фильтр и

слайде кроме этого у нее есть еще одно отличие от alex нету у неё канва лю шэн слои имеет фильтр и размерности 3 на 3 напомню что алекс на это первый convallis нам слой имела флейта размерности 11 на 11 почему иметь канва лю шэн слои с фильтрами размерности 3 натрий как бы лучше потому что если у вас фильтры размерности 11 на 11 то это значит что это значит что когда этот фильтр проходятся по картинке слева направо и сверху вниз то каждый новый пиксель карты активации он как бы содержит

по картинке слева направо и сверху вниз то каждый новый пиксель карты активации он как бы содержит информацию о довольно большой части исходной картинки отчасти исходной картинки которые находятся в квадрате 11 на 11 пикселей то есть это значит что на самом деле этот сверхточный слой он не может не может реагировать на какие то очень локальные паттерны которые например есть в квадратике 3 на 2 пикселей и четыре на четыре пикселя потому что он в любом случае будет кодировать информацию из

2 пикселей и четыре на четыре пикселя потому что он в любом случае будет кодировать информацию из квадрата 11 на 11 в 1 пиксель карта активации то есть это свёрточная нейронная сеть просто не сможет обратить внимание на какие-то локальные признаки бога г решает эту проблему просто делая все свертки размерности 3 на 3 и эти свертки уже могут реагировать на какие-то локальные паттерны которые вот находятся в квадратиках размерности 3 на 3 пикселя и так почему же я не сказала сколько карточных

находятся в квадратиках размерности 3 на 3 пикселя и так почему же я не сказала сколько карточных слоев по г на самом деле потому что бывают разные варианты впг с разным количеством свёрточная если вы зайдёте на документацию torch vision modules трачу vision модуль 100 некоторых об моделей откуда вы можете ваш кот скачать готовые архитектуры разных моделей которую мы сегодня будем обсуждать так вот если вот это зайдете вы заметите что там есть несколько вариантов и г.г. бу-га-га 11 га га га

вот если вот это зайдете вы заметите что там есть несколько вариантов и г.г. бу-га-га 11 га га га 13-го g16a когда 19 и также batch норм варианты всех этих различных воды д 11 13 1619 это отражает количество слоев чаще всего используется в gaga 16v gaga 19 ну отчасти потому что они показывают лучший результат на и начинаете вот можно посмотреть здесь что произошло дальше вот есть алекс нет есть улучшенная версия обычной свёрточная сети в d&d но она все еще обычной отверточные сеть но она имеет

версия обычной свёрточная сети в d&d но она все еще обычной отверточные сеть но она имеет больше слоев чем алекс смит ну решили люди наверное логично что чем больше слоев тем все так лучше и на самом деле в применении карточным зеленым сетях в это действительно правда логично что если сделать больше своих личных нейронных сетей наверно станет лучше ну почему потому что на предыдущем занятии по cnn мы с вами говорили что разные слои выделяют разную информацию о картинке первые свёрточная слои

cnn мы с вами говорили что разные слои выделяют разную информацию о картинке первые свёрточная слои они реагируют на какие-то низкоуровневые паттерны то есть на вертикальные и горизонтальные линии диагональные следующие слои они реагируют на какие-то более высокоуровневые паттерны они уже реагирует на присутствие каких-то более сложных линейной картинки например спиральных закрученных еще каких-нибудь и так далее каждый следующий сывороточный слой он реагирует на более высокоуровневые паттерны

и так далее каждый следующий сывороточный слой он реагирует на более высокоуровневые паттерны и пока последний чердачный слой и там не будет реагировать на присутствие там целого объекта на картинке например собаки кота лица или чего то подобного ну и казалось бы если сделать больше сварочных слоев то у нас будет больше различных слоев которые будут реагировать на разные аспекты картинки о картинке у нас сложные у нас там сложные объекты находятся корабли и котики и собачки люди поэтому как бы

у нас сложные у нас там сложные объекты находятся корабли и котики и собачки люди поэтому как бы нужно довольно много слоев сверток чтобы они все обучились и последний стюартов действительно могли реагировать достаточно высоко уровневую информацию но вы тут вот стала проблема что оказывается нельзя просто взять и сделать огромную сердечная нейронную сеть с очень большим количеством сверток и нормальное и обучить почему потому что там начинается проблема затухание градиента затухание градиентов

и обучить почему потому что там начинается проблема затухание градиента затухание градиентов эта проблема характерна для очень глубоких сеток что ж это такое давайте посмотрим на примере вот у нас здесь есть самая простая нейронная сеть которая состоит из четырех слоев в каждом слое у нас один нирвана вот x0 и x1 x2 и x3 и между ними связи 1 0 1 0 до 2 выход x3 вам подается в функцию потерев л лосс мы эту нейронные сети быть айбэк пропадешь на когда мы обучаем это нейронная сеть back pro по

лосс мы эту нейронные сети быть айбэк пропадешь на когда мы обучаем это нейронная сеть back pro по девственному нас о нуга 0 обновляется как он уже 0 минус альфа умножить на дельта 20 где альфа это лёрн грейт del подобного 0 это производная функция потери по весу 1 0 собственно также обновляется омега 1 он мега 1 равно и мы гладили - олив модель подобна годин ну и она g2 то же самое давайте распишем деле под вами ганой дельту днк 1 и далеко домик 2 распишем мы согласно правилу градиенты сложной

деле под вами ганой дельту днк 1 и далеко домик 2 распишем мы согласно правилу градиенты сложной функции смотреть отель подобию co2 на самом деле это дельта x 3 умножить на dx 3 пойду mk2 кажется логично дальше адель подобного один уже немножко сложнее формула тут уже будет мне два множителя 3 это дельта d x 3 сначала потом dx трипода x2 а потом до x2 подъеме g1 если мы хотим вычислить del todo va mega 0 то там будет еще больше множителей 4 уже множителя что здесь происходит чаще всего вот эти

mega 0 то там будет еще больше множителей 4 уже множителя что здесь происходит чаще всего вот эти вот градиенты dx по диагонали до x2 pdx 1 и так далее они все меньше единицы и когда мы перемножаем много чисел каждой из которых меньше единицы мы получаем число довольно как люк то есть получается что d или по 20 это число довольно близко к нулю потому что вот здесь приближается целых четыре числа каждое из которых меньше единицы потом модель подобна году умножаем на альфу альфу это лёрн грейт

каждое из которых меньше единицы потом модель подобна году умножаем на альфу альфу это лёрн грейт чаще всего она тоже меньше единицы причем сильным получается что альфа умножить на дельта друга 0 будет довольно близко к нулю а это значит что наш лунного 0 практически не изменится после обновления веса то есть 1 0 останется примерно это кожа а это значит что наша нейронная сеть она практически не обучиться точнее что ее первые слои практически не обучиться а так как мы изначально инициализируем

обучиться точнее что ее первые слои практически не обучиться а так как мы изначально инициализируем нашу нейронные сети рандомными весами то в принципе после нескольких таких итераций обучения весах первых слоев нашей нейронной сети они останутся примерно такими какими были изначально примерно рандомными то есть это значит что наша сеть работать будет плохо вот это называется проблемой затухания градиентов то есть градиент пока он доходит через все слои до первых слоев нейронной сети он

градиентов то есть градиент пока он доходит через все слои до первых слоев нейронной сети он затухает он становится очень маленький и это происходит вот из-за того что градиент вычисляется как произведение множителей каждый из которых меньше единицы также здесь можно отметить что из-за этой проблемы нежелательно использовать функцию 7 в качестве функции активации промежуточного слоя в сети почему потому что вот у нас есть функция 7 до она обозначена здесь синеньким на графике и есть функция и

потому что вот у нас есть функция 7 до она обозначена здесь синеньким на графике и есть функция и ее производные она обозначена красным сыр на линии вы видите что каждый раз когда их становится больше четырех или меньше -4 производная 7 до практически ноль и если вот здесь где то при вычислении градиентов использовался как 1 7 2 а он использовался если она была функция активации какой-то из этих слоев тогда вот это произведение она будет очень сильно близко к нулю потому что она отображается на

тогда вот это произведение она будет очень сильно близко к нулю потому что она отображается на градиенте моды которые очень близка к нулю и это делает так что по сути использования 7 до она только усугубляет проблема за дыхание градиента то есть градиент затухает еще сильнее uri луна против такой проблемы нет у лилу градиенты всегда по модулю довольно большие и это делает как бы силу очень хорошей функции активации для диахит н слоев нейронной сети ну вот мы рассмотрели проблему затухание

функции активации для диахит н слоев нейронной сети ну вот мы рассмотрели проблему затухание градиентов для игрушечной сердце где у нас каждом слове было по одному нейрону но я думаю понятно что если мы рассмотрим нормальную нейронную сеть которой в каждом слое нисколько не родов то произойдет то же самое когда мы распишем градиенты то получится что градиент и del poder amiga нолик делаем угнали это первое vesa первого слоя сети они будут довольно маленькими сеть не будет обучаться то есть пока

первое vesa первого слоя сети они будут довольно маленькими сеть не будет обучаться то есть пока а градиент любых групп одессе не он доходит до начальных слоев нейронной сети он становится очень маленьким и vesa этого слова почти не изменяются вот это есть затухание градиентов для решения этой проблемы люди придумали такую вещь как skip connection что такое skip connection вот здесь вы видите картинку которая обычная стандартная каноническая такая для иллюстрации skip конечно но давайте я

картинку которая обычная стандартная каноническая такая для иллюстрации skip конечно но давайте я наверное приведу сначала пример что такое скидка на экшн на нашем игрушечном примере вот у нас была вот такая вот сетка тут x3 выход этого слоя вытеснялся как x2 между md2 просто выход предыдущего слоя домножить на матрицу у весов там еще функции активации но давайте пока об этом забудем тогда мы и делали богинь шин у нас вот он выгнал изменялась вот таким вот образом по этой формуле и del подруга

богинь шин у нас вот он выгнал изменялась вот таким вот образом по этой формуле и del подруга 0 был вот таким а skip connection это connection который идет от одного слоя сети через несколько слоев сети в другой поэтому называется скидка на экшн он вскипает несколько слоев нейронной сети то есть раньше у нас нейронной сети каждый нейрон и каждого слоя были связаны только с нейронами следующего и pride гусева слоя через один слой никаких связей ни шло а вот сейчас мы сделаем такую связь что она

pride гусева слоя через один слой никаких связей ни шло а вот сейчас мы сделаем такую связь что она будет означать что x3 теперь у нас будет вычисляться никак x2 новыми g2a x2 плюс x1 ну и тут еще должна быть функция активации обратите внимание что у skip collection они от веса то есть на вот этом вот ребре не присутствует никакого веса поэтому ребро течет чистая x1 и выход этого слоя обозначается как x2 мвд 2 + просто x1 ну вот давайте посмотрим что будет когда мы будем такой нейронную сеть

как x2 мвд 2 + просто x1 ну вот давайте посмотрим что будет когда мы будем такой нейронную сеть обучать помощью бог пропадешь на будет все еще то же самое то есть он много 0 все еще будет обновляться как у него ноль минус альфа модель подобный d0 модель подобного 0 будет читаться уже чуть-чуть по-другому из за того что у нас функция x3 изменилась цель 0 будет равна дельта d x 3 а дальше это нужно домножить на dx 3  0 но смотрите x3 у нас теперь является сумма вот этих двух величин каждый из

домножить на dx 3  0 но смотрите x3 у нас теперь является сумма вот этих двух величин каждый из которого зависит от рн гной из 2 зависит от . 0x один зависит от 0 до 0 поэтому чтобы взять dx трипода вами гной нам нужно сложить производные каждой из этих частей от x3 вот тут вот в этой первые скобочки это производная x2 по доме г 0 а здесь производной вот этой части то есть dx трипода x1 на dx 1200 дальше я здесь перепишу следующим образом вот здесь 2 скобочках у нас есть одинаковые множители до

дальше я здесь перепишу следующим образом вот здесь 2 скобочках у нас есть одинаковые множители до экселем подруга 0 я его вынесу за скобочкой получу вот это дальше заметим следующая так как у нас узкий конечно нет никакого веса и вот идет чистый x1 то dx 3 pdx один будет равно единице ну даже если посмотреть на здесь вот формула то получится что дрэг-стрипа до x1 равна единице поэтому это приписываются вот таким вот образом теперь что произошло смотрите у нас теперь del подобный ганой это не

вот таким вот образом теперь что произошло смотрите у нас теперь del подобный ганой это не просто перемножении вот этих четырех величин как было до того как мы сделали skip connection это перемножении вот этих трёх величин плюс перемножении вот этих двух величин а вот эти две величины приумножены между собой они по модулю намного больше чем вот эти четыре величины приумножены между собой ну просто потому что вот эти до x3 pdf2dtp dx12 верняка меньше единицы сильные меньше единицы и поэтому если

потому что вот эти до x3 pdf2dtp dx12 верняка меньше единицы сильные меньше единицы и поэтому если до них нет обнажать вот эти вот два множителя умножены между собой они довольно большие по модули и таким образом смотрите у нас получается что мы добавляем довольно большую величину kadel по два мига 0 таким образом получается что благодаря вот этому ским connection у когда градиент мы считаем до или подруга 0 он получается по модулю намного большее чем если бы он был дерзкий connection то есть

или подруга 0 он получается по модулю намного большее чем если бы он был дерзкий connection то есть мы по сути то решаем проблему затухание градиентами давайте рассмотрим на примере вот здесь как раз и тогда каноническая картинка proskit конечно нарисована и вот эта левая часть это что было бы если бы у нас не было скрипт connection а правое что было бы если бы у нас была скидка in action давайте посмотрим на левую картинку вот у нас обычная нейронная сеть вот какой-то вход x вот это один слой

посмотрим на левую картинку вот у нас обычная нейронная сеть вот какой-то вход x вот это один слой сети дальше релог потом еще один слой сети и потом дальше проходит информации еще ниже давайте допустим что мы это сети обучаемых пропадешь ну и у нас отсюда приходит градиент 1 10 и чтобы его протолкнуть дальше нам нужно его умножить на градиент этого слоя давайте допустим что он тоже 1 10 тогда дальше градиент потечет 1 10 умножить на 10 одна сотая дальше нам нужно умножить на градиентный

дальше градиент потечет 1 10 умножить на 10 одна сотая дальше нам нужно умножить на градиентный градиент этого следующего слоя давайте допустим что тоже одна десятая тогда вот сюда к иксу потечет градиент уже одна тысячная если мы потом за хотим обновить weeks а мясо-то обновлять их мы будем как икс равно икс минус альфа умножить на 1 тысячи альфа это у нас learning рейд он обычно тоже очень маленький например где-нибудь одна тысячная также получается что мы будем обновлять секс на одну

маленький например где-нибудь одна тысячная также получается что мы будем обновлять секс на одну миллионную что довольно мало то есть практически не обновим что теперь произойдет если мы будем использовать skip connection у нас все еще отсюда придет к где ент одна десятая но теперь он раздвоиться потому что у нас теперь вот здесь вот есть плюсик скидка national благодаря поэтому функция которая как бы олицетворяет вот этого часть сети она не просто fx она f от x плюс x игредиент 01 он потечёт и

бы олицетворяет вот этого часть сети она не просто fx она f от x плюс x игредиент 01 он потечёт и в этой части которая внутри skip connection тогда здесь тоже самое получится одна сотая здесь одна тысячная но еще он потечет по вот этому скидка никсона вот сюда и вот здесь тоже останется 0,1 потому что вот здесь вот функция skip connection это идентиф то есть x и в итоге получится так что градиент который придет сюда коксу будет одна тысячная + 1 10 то есть уже что одна тысячная стой одна

который придет сюда коксу будет одна тысячная + 1 10 то есть уже что одна тысячная стой одна тысячная этот градиент будет 100 раз больше чем было бы если бы не была скидка на экшн и это значит что когда мы будем обновлять наш вес икс икс равно икс минус альфа умножить на одна тысячная ой сто-сто одна тысячная тогда мы обновим наш вес уже не на одну миллионную она одну десятитысячную то есть на величину которое в 100 раз больше чем было бы если бы не было skip конечно вот как skip collection

величину которое в 100 раз больше чем было бы если бы не было skip конечно вот как skip collection выглядеть в коде это слайд здесь для того чтобы показать что сделать skip connection очень-очень просто смотрите вот это код из официального репозитория git хаба торчки жена там где находятся все модели и и вот это код модели ресниц точнее это форвард который делает форвард пас на одной из части на одном из блоков на одной из части интересно это смотреть на самом деле здесь происходит что то же

одном из блоков на одной из части интересно это смотреть на самом деле здесь происходит что то же самое что если бы было без keep конечно вот мы берем x и прогоняем его через канва леушин слой базисную обрело канва леушин батч норм и здесь конце реву чтобы добавить skip connection нам нужно просто в какой-то момент сказать что out plus равно айдентики где айдентики это то что нам пришло на вход x то есть вот две строчки мы добавляем по тщательный connection мы просто к выходу после какого-то

x то есть вот две строчки мы добавляем по тщательный connection мы просто к выходу после какого-то момента например вот к выходу после обычно 2 добавляем то что приходило у нас в самом начале то что мы прогоняли через все наши слои и все больше ничего вам делать не надо когда вы так напишите при обучении нейронной сети при точном посчитать нужны ингридиенты и градиенты потекут правильно как вот на этой картинке справа итак что такое скидка на x давайте подведем итоги skip connection это метод

на этой картинке справа итак что такое скидка на x давайте подведем итоги skip connection это метод борьбы затуханием градиентов когда у вас есть добавляются в нейронной сети новые connection и между не последовательными слоями вашей сети используется скидка на excel чаще всего cnn логично почему потому что впервые в истории глубокие сетки потребовал строить именно кормлю ционные сетки то есть люди захотели строить очень большие сетки с большим количеством слоев именно свёрточная и тогда как

люди захотели строить очень большие сетки с большим количеством слоев именно свёрточная и тогда как раз возникла эта проблема затухания градиентов и для ее решения для сварочных сетей было придумано вот этот скит конечно и skip конечно помогает борьбе с дыханием градиентов но у него есть еще плюс один он на самом деле помогает протолкнув нижний слои сети информацию из верхних слоев что я имею ввиду давайте посмотрим на эту картинку раньше когда нас не было skip connection x3 этот слой он

ввиду давайте посмотрим на эту картинку раньше когда нас не было skip connection x3 этот слой он получил информацию только от x2 теперь он получает больше информации он получает информацию из x2 а еще информацию из x1 x2 и x1 это разная информация ну допустим если бы x2 и x1 были сверточек ими слоями это бы значило что из 2 выделяем более высокоуровневой информации чем x1 помните мы обсуждали что свои сети карточные близкие к началу они выделяют более низкоуровневой информацию более такую

что свои сети карточные близкие к началу они выделяют более низкоуровневой информацию более такую простую а чем свои дальше они выделяют более вас к уровню информации таким образом x3 получит как бы не сразу несколько разной информации о входной картинки и более высокоуровневые более низкого уровня вот то есть получить более полную с тем самым сможет как бы более раза разнообразные фичи выделить больше понятие картинки короче сделает это точно не хуже больше информации не хуже чем меньше вот и

больше понятие картинки короче сделает это точно не хуже больше информации не хуже чем меньше вот и ко всему и вся была к тому что ресниц это архитектура нейронной сети которая соединяет себе обычный свёрточная нейронная сеть is kept in action и единственное что часто в ресницах skip конечно называется rise to walk in action это то же самое что сгиб collection ну то есть это примерно синонимы и ты считал конаковский connection иногда просто resin doll collection упоминается именно в контексте

ты считал конаковский connection иногда просто resin doll collection упоминается именно в контексте рис нетто то есть там специфические архитектуры внутренних блоков skip connection а skip correction это как говорят о еде и которая только что рассказала и понятное дело варианты блоков внутри skip connection могут быть совершенно разные то есть какие vesa какие больше нормы или какие активации применять внутри блока близких connection есть они могут быть совершенно разнообразными вот здесь вот

внутри блока близких connection есть они могут быть совершенно разнообразными вот здесь вот самая левая картинка иллюстрирует то что мы увидели в ходе то есть вот приходит x на входит он проходит через канва леушин большой рубль look in value шин большой потом он суммируется с самим ходом x который был изначально здесь вот происходит типа skip конечно потом скидка на экшн и потом применяется виллу конечно можно по-разному можно например этот rifle ужасную не внутрь скидка на метильного третья

конечно можно по-разному можно например этот rifle ужасную не внутрь скидка на метильного третья картинка об этом можно по четырем вынести наоборот за skip connection вот вторая картинка такая можно придумать совершенно другую архитектуру вы можете придумать свой архитектуры это в любом случае будет skip connection вот как выглядит ресниц рисует опять же как и ввг может быть совершенно разной то есть много разных вариантов раз надо которые отличаются количеством слоев здесь на картинке

то есть много разных вариантов раз надо которые отличаются количеством слоев здесь на картинке представленны ресниц с количеством слоев 34 ну потому что 34 хотя бы на картинку нормально влезает как видим признают это принципе обычный к январю шум сетка только с кучей resin doll collection of или скидка никсона вот черненьким жирненьким и тут обозначены эти skip конечно внутри каждого скидка nexen блок вот он выглядит именно так как мы с вами разбирали вот на всякий случай еще код то есть канва

блок вот он выглядит именно так как мы с вами разбирали вот на всякий случай еще код то есть канва люсия ночной брелок in value шин больше норм ярилу вне блока то есть после того как произошло skip connection refused что применяется между соединениями это стандартный ресниц и улиц надо опять же один слой здесь чей классов вот какие варианты размеров существуют их существует больше чем вгд потому что рис на эту же могут быть глубже канонические варианты такие сны от 18 204 4950 и так далее 152

что рис на эту же могут быть глубже канонические варианты такие сны от 18 204 4950 и так далее 152 конечно не отличаются не только количеством слоев но и архитектуры блоков то есть там в одном рис ленте например весны до 152 может быть несколько разных видов резиновых блоков но не суть важно еще пара слов ресниц интересный факт люди проводили такой эксперимент обучали рис на это потом выкидывали из него несколько слоев и оказалось что в принципе результат этого не теряет в качестве но почему

из него несколько слоев и оказалось что в принципе результат этого не теряет в качестве но почему так наверное логично люди объясняют это тем что улиц на это есть несколько способов как информация может попасть из одного слоя в другой слой ну то есть вот в обычной нейронной сети у нас есть первый слой он передает информацию 2 слоя он передает третьему он придает четвертому и так далее и чтобы и четвертый слой получил информацию ну то есть есть только один путь из первого слоя 4 слой с только

четвертый слой получил информацию ну то есть есть только один путь из первого слоя 4 слой с только один путь через 2 3 если мы отрубим какой-нибудь слой выкинем просто веса то получится очень плохо то есть это как будто мы отрубили провод между двумя там телефонами я не знаю а в ресницы у нас есть resin doll collection и которые позволяют как бы делать некоторые обходной путь у нас теперь есть не только один путь через все слои между слоем один из своем 4 но есть ещё вот такой skip collection

только один путь через все слои между слоем один из своем 4 но есть ещё вот такой skip collection если отрубить один путь останится все-таки другой путь который будет придавать достаточное количество нужная информация вот такие вот дела теперь есть еще другая архитектура сети которая тоже основана на идее skip конечно только skip collection здесь применяется немножко по-другому идейно по-другому она называется dance and dance нет это тоже свёрточная нейронная сеть и она тоже состоит из блоков

она называется dance and dance нет это тоже свёрточная нейронная сеть и она тоже состоит из блоков только блоке меню называется super dance блоки в ней очень простая идея смотрите это обычная свёрточная нейронная сеть но только теперь каждая новая сверхточный слой получают информацию не только предыдущего но и от всех предыдущих слоев свёрточная то есть что у нас было раньше раньше было что вот у нас есть первый свой свёрточная нейронная сеть и допустим у него ты фильтра тогда мы получаем 3

у нас есть первый свой свёрточная нейронная сеть и допустим у него ты фильтра тогда мы получаем 3 карта активации после этого вот эти 3 каюты активации приходят во второй сверхточный слой допустим во втором карточном слое 4 фильтра значит мы получим 4 карта активации и потом в третье святочный слой идут только вот эти четыре карты активации то есть только выход из 2 сердечного слоя а давайте просто возьмем и в третий слой подадим не только четыре карты активации которые получились из второго

возьмем и в третий слой подадим не только четыре карты активации которые получились из второго сорта снова слоя но сколько тренируем их еще с теми тремя картами активации которые получились после первых сверхточного слоя с контейнером получим 7 карт активации и подадим в третий слой ну понятно что 3 слоя тогда будет иметь фильтре трехмерные которых 3 размялись будет 7 потому что мы подаем уже семь карт активации ну вот эта идея представлена на картинке здесь вы видите по 2 как выдается карта

карт активации ну вот эта идея представлена на картинке здесь вы видите по 2 как выдается карта активации все предыдущие карта активации так тонка тренируются вместе и подается дальше ну и понятно какая здесь стоит идея идея такая что на самом деле мы ее уже упоминали когда или proskit connection что каждый следующий слой свёрточная нейронная сеть и будет получать более полную более общую информацию о картинке тем получал бы без keep конечно то есть каждый следующий слой получает все карты

о картинке тем получал бы без keep конечно то есть каждый следующий слой получает все карты активации всех предыдущих слоев он получает а входной картинки как низкоуровневую информацию которую выделяет 1 свёрточная слои так и высокоуровневая информацию которая выделяет последующей сеточный слой и поэтому как бы может заметить там какие-то более сложные паттерны и более интересные фичи выдать вот на этой картинке может быть будет понятнее чем на гифке что происходит вот у нас есть входной вектор

этой картинке может быть будет понятнее чем на гифке что происходит вот у нас есть входной вектор входная матрица например это какой-то input с шестью каналами 6 фильмов эти средств и тимаков подаются в 1 dance слой который состоит из большой брелок evolution после этого получается 4 новых и чем а повод зелененькие они и дальше в следующий такой dance слоем поддаются не только вот эти четыре зелененьких ведьмаку но еще и вот эти красненькие вот здесь вот есть вот эту связь они когда тренируются

ведьмаку но еще и вот эти красненькие вот здесь вот есть вот эту связь они когда тренируются и подается до 10 в чем апов через этот слой проходят получается новых 4 вич map и дальше следующий слой опять конкатенировать и фиолетовые и зеленые и красные то есть подается уже 14 чем apple ну и так далее и у dance на это есть такая такой параметры который называется gross weight гроуз рейд по сути определяет насколько больше каждый свой точный слой будет получать карты активация чем получала его

определяет насколько больше каждый свой точный слой будет получать карты активация чем получала его предшественника то есть на самом деле это сколько карт активации каждая сверхточный свой выдает ну потому что каждый раз мы подаем все что было раньше плюс то что выдал наш следующий слой вот у этого до нас на это которой вы видите на картинке гром фрейд 4 потому что каждый карточный слой блок выдает 4 карта активации новые вот как принципе выглядит dance нет он выглядит чуть-чуть сложнее чем

4 карта активации новые вот как принципе выглядит dance нет он выглядит чуть-чуть сложнее чем ресниц раз на это были просто кучу резных блоков связанных между собой здесь у нас между дан с блоком есть еще как это странные блоки где к январю шины пулек используются но сейчас обсудим вот импульс во-первых input картинка подается с начала в обычный can валюша то есть без какого-либо блока просто 1 1 к январю шим слой вот светило по которой из него получается поддаются уже на вход первый модем с

1 к январю шим слой вот светило по которой из него получается поддаются уже на вход первый модем с блоку после первого dance блока и перед вторым есть специальный лазер который называется transitions mayer transitions д-р состоит из канва лишены и буллинга что такое транзишен леер зачем он нужен и так люди решили что будет хорошо если каждый dance бог будет принимать в себя city map в одинаковой размерности то есть если city map который принимает dance блок 1 будет той же самой размерности что

размерности то есть если city map который принимает dance блок 1 будет той же самой размерности что принимая dance блок 2 так вот этот конюшенный pulling это две операции нужны здесь чтобы сделать выход fitch map of ice dance блок один такой размерности которая принимает dance блог 2 то есть по сути этот transitional air он подгоняет размерности к нужным вот ну и понятно что внутри блока там используется как обычно свёртку reel pouch норам и здесь еще в дан сметах иногда используется один на

как обычно свёртку reel pouch норам и здесь еще в дан сметах иногда используется один на один к январю шин напомним что 11 канва нужно использовать для подгонки количество фильмов вспомним что у нас каждым dance блоки каждый раз растет количество фичи map of и нам бы надо их уменьшить перед тем как подавать разрешает не в следующий индекс блок поэтому используется один на один к evolution один стоит на самом деле очень интересная архитектура и у него есть много плюсов но первый плюс это конечно

на самом деле очень интересная архитектура и у него есть много плюсов но первый плюс это конечно носки по connection то есть трон градиент flow это тот же самый плюс что skip конечно то есть это значит что он помогает в том чтобы градиенты не затухали второй плюс это то что количество слоев и параметров 1 сны это не очень большое ну что это значит благодаря тому что у dance на это каждый к январю шин слоя принимает в себя информацию о всех предыдущих бенстед он довольно оптимально эту

к январю шин слоя принимает в себя информацию о всех предыдущих бенстед он довольно оптимально эту информацию обрабатывает и это значит что для успешного обучения dance нетто данный сайт может содержать меньшее количество слоев всем потребовалось бы для какой-нибудь другой архитектуры сети чтобы обучить на той же задачи и значит будет содержать меньшее количество параметров что довольно хорошо дальше к январю что слои выделяет более разнообразные фичи но это связано с тем что как большинство и

к январю что слои выделяет более разнообразные фичи но это связано с тем что как большинство и принимают больше разной информации от всех предыдущих слоев нейронные сети это мы уже обсудили в четвертом пункте на самом деле написано рассуждение разворот 3 пункта и есть еще такая приписка что это все помогает да нас нет лучше обучаться на маленький dtc то то есть 11 ты на самом деле меньше выраженными проблемы переобучения на маленьких dtc то это связано и с тем что количество слоев параметров у

проблемы переобучения на маленьких dtc то это связано и с тем что количество слоев параметров у него не очень большое мы с вами знаем что если у нейронной сети большое количество параметров то на склонах переобучению больше ну и связано еще с тем что у dance на это каждый слой принимает информацию от всех предыдущих а значит из самых первых и может обращать внимание на какие-то более выражены фичи для каждого из классов кто так так теперь один такой комментарий что я вам тут рассказываю что рис

для каждого из классов кто так так теперь один такой комментарий что я вам тут рассказываю что рис на это единство это состоит из блоков сне состоит из 10 блоков донсэн состоит из без блоков но если вы пойдете в git хак пайтор ча и будете смотреть на код лесные это единственное то вы увидите что там на самом деле есть два варианта блоков есть обычный блок который используется для построения residence нет а есть еще but i'll на их блок вот что такое battle.net блок кратко вот так это вообще

нет а есть еще but i'll на их блок вот что такое battle.net блок кратко вот так это вообще узкое место то есть ботаник это вот бутылочное горлышко как переводится дословно и от типа самое узкое место для бутылки и это метафора для узкого места какой-то система так вот battlenet блоки используется в сетках чтобы уменьшить размерность карта активации и уменьшить количество параметров которые требуются нейронные сетки для обработки этих картинок то есть battle.net блоги как бы такие прокачанные

нейронные сетки для обработки этих картинок то есть battle.net блоги как бы такие прокачанные макс пуль инге вот в основные блоки по архитектуре тоже могут быть разными вот например battlenet блок который выглядит как один-на-один канва любим 3 на 3 канва лишь на 11 can evolution а вот перри медальный бутоны которого там разные размерности слоев но смысл вот примерно такой подстроить поменять количество карт активации и размерность размерности карт активации чтобы уменьшить количество нужных

карт активации и размерность размерности карт активации чтобы уменьшить количество нужных параметров дальше мы сейчас разобрали с вами несколько архитектур нейронных сетей это алекс нет в кадре снег dance нет на самом деле их конечно намного больше которых вижу modules если вы откроете то увидите какие есть архитектуре которая чаще всего используется для сдачи смотрите здесь алекс нету gaga ресниц squeeze на эту дэн знает inception b3 опять же не собственных много разных есть сейчас уже есть в

squeeze на эту дэн знает inception b3 опять же не собственных много разных есть сейчас уже есть в 4 google нет который на основе inception а shuffle нет мобайл на интересный от x ну и так далее среди этого всего хочется немножко цель про мобайл нет смотрите как только люди научились строить довольно большие нейронные сети которые хорошо работать на задачах например если ты ли там google и mitten section все порадовались и стали решать нейронными сетями сложные задачи например машины переводы

section все порадовались и стали решать нейронными сетями сложные задачи например машины переводы это все хорошо одно угла есть машинный перевод на мобильных устройствах и хочется делать оффлайн мобильный перевод то есть когда вы не подключены к интернету вы открываете свой телефон открываете google translate пишите хочу перевести вот это предложение иван приводит это предложение для того чтобы это делать по макси нейронной сети нужно нейронная сеть скачать на мобильное устройство и нужно ее

это делать по макси нейронной сети нужно нейронная сеть скачать на мобильное устройство и нужно ее прогнать то есть нужно то предложение которое вы хотите перевести через это сеть прогнать если сеть довольно большая то прогон предложения через нее будет занимать довольно большое количество времени на мобильном устройстве потому что на мобильном устройстве достаточно слабые процессоре мало оперативной памяти то есть тут есть на самом деле две проблемы то что большая нейронная сеть будет очень

памяти то есть тут есть на самом деле две проблемы то что большая нейронная сеть будет очень долго работать прогонять ваше предложение чтобы получить перевод во вторых что она требует много оперативной памяти который есть не во всех устройствах почему проблема во времени ну наверно потому что вы не захотите стать пять минут когда google translate переведет ваш несчастное предложения для контрольные по английскому поэтому тут возникла такая проблема что нужно как-то адаптировать нейронные сети

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

в том что она использует легковесные к evolution и что это такое вы можете почитать там на медиум и делитесь он на самом деле там все довольно просто но сама идея прикольная то есть мобайл нет он экономит память оперативную сетка не занимается только памяти и она работает быстрее чем обычные сетки и практически все сеты мобильных устройствах а не на основе был нет но мы с вами давайте разберем последнюю из архитектуры которые здесь представлены это инсершн только что мы разбирали как бы две

последнюю из архитектуры которые здесь представлены это инсершн только что мы разбирали как бы две главные идеи архитектуры первое это алекс на этого г.г. обычная свёрточная архитектуры и рисует один снят который нас новицким connection скидка на x на них реализуется по разному но независимо от этого это скидка на экшн у inception совсем другая архитектура смотрите здесь вместо того чтобы конкатенировать все слои предыдущих идиотские connection и и подавать их следующему слою нейронной сети

все слои предыдущих идиотские connection и и подавать их следующему слою нейронной сети здесь используется несколько параллельных can валюша смотрите вот мы получаем выход из некоторого слоя сети и подаем его одновременно в четыре параллельных слоя 3 из которых канва люкшин один из которых макс pulling эти четыре слоя на выходе выдадут совершенно разную информацию которую выделят из того что пришло вот чего слоя то есть из предыдущего слоя там пришла какая-то карта активации мы эту карту

пришло вот чего слоя то есть из предыдущего слоя там пришла какая-то карта активации мы эту карту активации прогоняем через букеты 11 к январю шин через три на три к январю шин через пять на пять канва лишь и через макс pulling и на выходе всех этих четырех слоев у нас получится разные карты активации то есть выделиться разную информацию о входящий карте активации а дальше мы из конко тонируем и подадим дальше находят нейронной сети здесь идея похоже на идея dance нет что следующий слой

и подадим дальше находят нейронной сети здесь идея похоже на идея dance нет что следующий слой нейронной сети получит разнообразную информацию о предыдущей картинке то есть вот это вот предыдущие карты активация прогоните через четыре разных слоя четыре разные слоя выделят разную информацию о ней кто-то более высоко уровневую кто-то более низкоуровневую кто-то менее локальную это более локальную дальше мы всю эту информацию вместе подойдём дальше на вход сети таким образом сеть будет узнать

дальше мы всю эту информацию вместе подойдём дальше на вход сети таким образом сеть будет узнать больше информации о входящий картинки но на самом деле это не единственная идея которая используется в в inception смотрите и цешин это тоже довольно большая нейронная сеть ну на самом деле все нейронные сети которые сейчас хороши на и машины идти на картинках они в принципе глубокие она глубокая но оно не имеет как таковой skip connection of она имеет вот такие вот параллельные блоки кстати

но оно не имеет как таковой skip connection of она имеет вот такие вот параллельные блоки кстати заметьте что параллельные блоке тоже могут быть разными они могут не только иметь вот эти вот 4 и мы на таких слоя они могут иметь по два параллельных слой и так далее но не суть inception немецким connection of а это значит что в принципе у нее будут затухающий игредиент но в inception не решили по-другому с этим бороться как смотрите мы вместо того чтобы иметь 11 blogs полна связанных слоев

по-другому с этим бороться как смотрите мы вместо того чтобы иметь 11 blogs полна связанных слоев который будет выдавать нам ответ на задачу мы будем иметь таких 3 и смотрите мы их будем иметь в разных моментах сети то есть вот здесь мы возьмем выход из вот этого слой сети и прогоним его через fully connected блок который будет нам выдавать ответ на задача дальше в следующий час 10 немножко поглубже мой опять возьмем выход сети здесь и прогоним его через еще один стакан этот блок когда будет

мой опять возьмем выход сети здесь и прогоним его через еще один стакан этот блок когда будет нам также выдавать ответ на задачу и в конце сети мы также выход всей сети прогоним через хулиган этот блок который тоже будет выдавать выход на задача то есть у нас будет как бы три головы у сити каждую из которых мы будем обучать на то чтобы она правильно выдавал ответ на задачу то есть здесь и здесь и здесь у нас будет на последнем слое фоли connected тысячи классов и мы будем использоваться вт макс

здесь у нас будет на последнем слое фоли connected тысячи классов и мы будем использоваться вт макс и будет одна и та же функция lose a cross энтропия после того как мы получим выход здесь здесь здесь посчитаем 3 loss мы их сложим и будем вот пропотеть этот сложный лосс то есть это значит что когда у нас будут градиенты вот здесь считаться в этой части сети то сюда придут градиенты и отсюда и отсюда и отсюда а так как вот эта голова она довольно близко к первой части сети то это значит что

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

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

я хотела рассказать на этой лекции это наверное главный dea архитектур последняя inception она была для того чтобы вы понимали что skip конечно это не панацея и можно как-то по-другому посмотреть на мир и делать другие архитектуры в следующей части лекции мы поговорим про транспорт лёнинг

привет в этой части занятия мы поговорим про трансфер лёнинг что такое трансфер юленька зачем им нужен часто dtc под какую-либо задачу машинного обучения содержит довольно мало объектов и если обучить сеть на этом сайте с нуля то сеть наверняка переобучаться примерами таких задач могут служить задача детекции опухоли на медицинских изображениях или машинный перевод с мало распространенных языков например с татарского смотрите чтобы обучить хорошую модель машину вы обучения которое будет

языков например с татарского смотрите чтобы обучить хорошую модель машину вы обучения которое будет переводить текст из татарского на русский язык мне нужно довольно много параллельных данных параллельные данные это предложение на русском языке и их переводы на татарский язык вот таких параллельных предложений в природе существует очень мало и чтобы получить больше не нужно будет нанимать какого-то человека который будет сидеть и переводить текст с русского языка на татарский а это довольно

человека который будет сидеть и переводить текст с русского языка на татарский а это довольно долго и дорого по деньгам и так вот у нас есть задача обучить модель машинного обучения на каком-то да да сети но datasette содержит очень мало объект что же делать давайте подумаем на самом деле мы знаем что практически все идеи в deeply регионе берутся с того как работает человеческий мозг а как работает человеческий мозг на самом деле люди практически никогда не обучаются под какую-либо задачу шнура

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

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

и многого таких вот разных примеров жизни давайте вот эту идею того что я обучилась одной задачи а потом используя знания об этой задачи и обучаясь под вторую задачу перенесем на нейронная сеть идея будет звучать следующим образом у нас есть одна нейронная сеть которая обучилась надо то сайте номер один причем обучилась довольно хорошо и у нас есть сеть номер два которую мы хотим обучить с этим номер два но дата совет номер 2 содержит довольно мало объектов и мы хотим некоторым образом

с этим номер два но дата совет номер 2 содержит довольно мало объектов и мы хотим некоторым образом использовать знания сети номер один чтобы помочь сети номер два обучиться надо с этим номер 2 ну это все конечно при условии что задачи у этих двух сетей похоже то есть они содержат что-то общее в эту например как моем примере изучение английского и испанского обе задачи это изучение каких-то каком-то смысле похожих языков давайте рассмотрим один из подходов как такое провернуть на самом деле вот

смысле похожих языков давайте рассмотрим один из подходов как такое провернуть на самом деле вот эта идея того что мы будем обучать вторую сеть используя информацию 1 сети она как раз и называется трансфер лёнинг то есть по сути мы транспортом знание 1 сети на вторую сети и один из самых популярных самых работающих и самых простых подходов это до обучения сети или по английски это fine tuning что это такое давайте допустим что нас сеть рисует есть и мы ее обучили надо с этим мужчиной обучилась

это такое давайте допустим что нас сеть рисует есть и мы ее обучили надо с этим мужчиной обучилась она довольно хорошо как вы помните сети знают умеет обучаться так что она показывает нам три процента ошибок на и маринетти так как сеть обучилась довольно хорошо это значит что она что-то поняла об этом dt сети то есть что-то поняла в принципе том как устроены картинки теперь давайте допустим что у нас есть вторая задача классификации изображение диких животных на 10 классов и давайте допустим

у нас есть вторая задача классификации изображение диких животных на 10 классов и давайте допустим что у нас изображение диких животных довольно мало ну просто потому что они там дикие животные прячутся саваннах в лесах и довольно сложно найти их и сфотографировать но при этом задачу классификации картинок дети животными на 10 классов мы хотим решить обучает сети 0 было бы глупо потому что она перри обучилась бы что же нам делать давайте на самом деле сделаем практически то же самое что мы

перри обучилась бы что же нам делать давайте на самом деле сделаем практически то же самое что мы делали бы если вы обучали сеть с нуля но только изначально vesa нашей сети инициализируем не рандомными значениями а весами сети которая была перед обычно на ему гнить то есть по сути мы сначала сеть обучаем на имидже нити а потом берем и меняем dtc то иду обучаем это сеть на новом dts эти диких животных таким образом идея такая что когда наша сеть обучается на и начинаете она понимает какую-то

таким образом идея такая что когда наша сеть обучается на и начинаете она понимает какую-то информацию картинках а учитывая что какие-то животные были среди картинок и начинает а то наша сеть поймет что то я животных тоже какую-то такую вот общую информацию когда мы будем до обучать и иногда сети диких животных все что ей останется это выучить специфическую информацию от диких именно животных и кажется что маленького dtc то с картинками диких животных достаточно чтобы выучить именно какой-то

кажется что маленького dtc то с картинками диких животных достаточно чтобы выучить именно какой-то маленький специфичный кусочек информации то есть нашей сети уже не нужно будет учить всю информацию с нуля какая здесь есть проблема в таком подходе проблема номер 1 это то что нас у сети которая обучалась надо достать ее начинает в конце самым последнем слове содержится 1000 нейронов ну потому что ему жена тысячи классов а в нашем новом эта сеть и 10 классов это значит что в последнем слое

что ему жена тысячи классов а в нашем новом эта сеть и 10 классов это значит что в последнем слое нейронной сети должно быть 10 нейронов просто так взять и ту же самую сейда обучает на она умрет с этим и не сможем что же делать на самом деле все просто давайте после обучения наш осетины и начинайте просто выкинем последний слой весов и заменим его на новый слой в котором уже будет 10 выходящих нейронов они 1000 и он будет инициализирована рандомными весами то есть мы теперь будем до обучать

нейронов они 1000 и он будет инициализирована рандомными весами то есть мы теперь будем до обучать нашу сеть которая будет инициализирована практически вся весами то есть эти которая была обычно на и начинаете но вот последний слой у нее будет совершенно новый и in these равана какими-то ран домами и вот такую сеть мы будем обучать на нашем же с эти диких животных на самом деле в этом есть смысл есть смысл выкидывания последнего слоя сети и замена его на новый слой почему потому что смотрите

есть смысл выкидывания последнего слоя сети и замена его на новый слой почему потому что смотрите когда наша сеть вот это первая которая училась на и начинаете когда она обучалась последний слой сети он обучался брать информацию которую выдавал предпоследний слой сети и выдавать вероятности принадлежности картинки к одному из тысячи классов вот он обучался именно под эту задачу и эта задача специфичные для до досыта и начинает потому что именно в сети мощная тысяч глаз и последний слой сильно

для до досыта и начинает потому что именно в сети мощная тысяч глаз и последний слой сильно подстраивался под эту задачу у нас задача новое у нас всего десять классов диких животных и логично выкинуть в этот слой который подстраивался именно по imagenet и заменить его каким-то новым слоем которые процессе до обучения нашей сети будет подстраиваться уже под нашу новую задачу то есть под классификацию картинок на 10 класс хорошо теперь у нас осталась еще одна проблема теперь мы пришли к тому что

картинок на 10 класс хорошо теперь у нас осталась еще одна проблема теперь мы пришли к тому что у нас есть сеть которая при добыче на на им один эти мы выкидываем из нее последний слой нейронов заменяем на новый слой нейронов с другим количеством классов вида обучали на самом деле так будет все равно плохо потому что сеть все равно переобучаться то есть здесь мы не сделали ничего кроме как поменяли инициализацию сети перед обучением раньше она инициализировал ася на домом и теперь ниц и

поменяли инициализацию сети перед обучением раньше она инициализировал ася на домом и теперь ниц и лидирует себе сами другой сети но на самом деле проблема почему сеть переобучаться никуда не ушла у нее все еще очень много весов которые обучаются в процессе обучения и поэтому она переобучаться что же делать решение это заморозка слоев давайте просто заморозим несколько первых слоев city заморозка свое сети означает что в процессе обучения эти слои не будут обучаться то есть через них не будет

свое сети означает что в процессе обучения эти слои не будут обучаться то есть через них не будет течь градиент и при backward пасе там не будут обновляться vesa вообще таким образом мы можем заморозить несколько первых своих сетей и до обучить только несколько последних стоимостей таким образом процессе обучения новым это сети обучаться будут только какое-то маленькое количество параметров нашей сети и поэтому сеть как бы не переобучаться как это будет выглядеть наша задача вот у нас наша

сети и поэтому сеть как бы не переобучаться как это будет выглядеть наша задача вот у нас наша задача классификации изображения диких животных и наша сетка давайте заморозим первые слои а точнее все слои кроме последнего которые мы инициализировали рандомом и будем до обучает только вот этот последний слой сети то есть по сути мы будем делать следующие мы будем брать выделять информацию о картинки из сети которая была обычно на и начинаете и обучать последний слой классификаторы этой информации

из сети которая была обычно на и начинаете и обучать последний слой классификаторы этой информации на новые 10 класс ну вот и таким образом обучаться будет всего лишь очень мало параметров и в процессе обучения наша сеть она не переобучаться на самом деле конечно мы можем выбирать какие слои замораживают какие слои заменять то есть мы можем замораживать не все свои кроме последнего а например первые 10 оставшийся там 5 оставите надо обучение мы можем выкинуть не только последний слой мы можем

10 оставшийся там 5 оставите надо обучение мы можем выкинуть не только последний слой мы можем выкинуть например два последних слоя заменить их на а рандомные какие-то веса и добыча этих с нуля это можно миксовать давайте немного про это поговорим с каким образом понимать какие слои выкидывать какие слои и замораживать какие слои до обучать во-первых понятно что нужно замораживать верхние то есть первые свои нейронной сети они же не иду обучать почему так происходит мы понимаем что верхние то

первые свои нейронной сети они же не иду обучать почему так происходит мы понимаем что верхние то есть первые свои сети они выделяют некоторую низкоуровневую информацию о картинках то есть вот на акции просеянной мы говорили что первые слои выделяют там информацию о простых паттернах типа горизонтальных и вертикальных диагональных линиях нижние слои уже более абстрактной информацию например если сети подается там картинка с лицом человека то на последних слоя сети там выделяется информацию о

сети подается там картинка с лицом человека то на последних слоя сети там выделяется информацию о наличии нос губ и рта или целого лица на картинке так вот низкоуровневая информация вот эти вот простые паттерны и это то что на самом деле общее между картинками любого домена то есть между картинками и magenta и картинками нашего data set a диких животных эта информация которую выделяют свои сети она полезна она как бы кросс domain она универсальная информации если вот говорить в терминах

сети она полезна она как бы кросс domain она универсальная информации если вот говорить в терминах английского и испанского языка это вот как раз такая низкоуровневая информация типа [музыка] устройства синтаксического предложения или грамматике то есть некоторые общие информации чем дальше мы идем по своим нейронной сети тем более абстрактную и специфическую для задачи информации они выделяют и на самом деле мы хотим использовать сей для решения другой задачи и мы хотим оставить из этой сети

на самом деле мы хотим использовать сей для решения другой задачи и мы хотим оставить из этой сети только ту информацию которая будет полезна для решения новой задачи и эта информация находится в первых слоя сети поэтому всегда замораживаются верхней первой своей сети то есть они перестают до обучаться у них уже нужной информации есть а до обучаются нижние слои сети они должны выучить новую абстрактную информацию которая специфична для новой задачи теперь сколько слова замораживать зависит

информацию которая специфична для новой задачи теперь сколько слова замораживать зависит конечно от различие между gt цветами сложности задачи объема до трассы то для для обучения то есть если у нас в таргет задачи то есть во второй задачи в которой мало данных если в ней тренировочных данных не слишком мало то есть если их довольно много то можно позволить себе да обучать не только последний слой но несколько последних слоев то есть грубо говоря можно позволить себе обучать больше параметров

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

под новую задачу но нужно сбалансировать то есть если вы будете до обучать все параметры сети тона переобучаться если будете обучать мало параметров сети то она не дай обучиться то есть вот нужно иметь какой-то баланс и нужно еще смотреть насколько ваши две задачи соус и таргет они отличаются между собой то есть на сколько они похожи если они похоже это значит что сеть которая обычно на первой задачи она содержит очень много информации которая пригодится для решения второй задачи а если задача

она содержит очень много информации которая пригодится для решения второй задачи а если задача не похоже то получается что там начиная уже где-нибудь в 3 не знаю слой сити информация которая в них содержится в слоях сети сети которую обычно на первую задачу вот эта информация на будет уже не релевантно для второй задач то есть вот получается что если ссоры с таркой задач в общем походами то можно позволить себе заморозить довольно много слоев и надеяться что вот на выходе этих слоев информации

позволить себе заморозить довольно много слоев и надеяться что вот на выходе этих слоев информации будет нужна а если slardar 5 задача довольно разные то нужно как бы больше слоев до обучать чтобы сеть лучше переобучить из первой задаче под струю как-то так конечно можно то есть миксовать эти две вещи можно там не знаю первые 10 свое заморозить остальные пять оставить и из остальных пяти например два последних слоя выкинуть и заменить на рандомные вот эта сеть до обучать то есть вам решать

два последних слоя выкинуть и заменить на рандомные вот эта сеть до обучать то есть вам решать сколько замораживать сколько дабы чайки сколько слоев новых сколько слоев закидывать и старых и засовывать в них новый слой итак мы сейчас рассмотрели идеи fine tune в готовить до обучение сети но конечно transforming на этом не заканчивается то есть вариантов того как передать информацию из относите другой и ее на самом деле этих вариантов все очень много давайте для начала поговорим о семантике то

и ее на самом деле этих вариантов все очень много давайте для начала поговорим о семантике то есть о классификации вариантов трансфер леоненко о классификации проблем трансфер юнга давайте сначала скажем вот что на самом деле есть три понятия которые похожи между собой и to transfer лёнинг domain адаптер снимался то сквиртинг ним четкого разделения какая задача подходит под какой из этих понятий они как бы очень сильно пересекаются у некоторых людей есть разные мнения на этот счет и я говорю

они как бы очень сильно пересекаются у некоторых людей есть разные мнения на этот счет и я говорю это для того чтобы вы просто не удивлялись если вы случайно там где этого места трансфер лёнька увидите домой надо печени или monsuto скрининг или наоборот то есть они в каком-то смысле взаимозаменяемые так вот давайте посмотрим в общем случае на сдачу трансфер лёнинг вот у нас есть соурс домен то есть этот домен на котором достаточное количество данных и на которых мы можем обучить нейронную сетку

этот домен на котором достаточное количество данных и на которых мы можем обучить нейронную сетку с нуля то есть это тот домен откуда мы будем передавать информацию в другую сетку вот называем vds модель когда обучается на этим до менее она должна выучить распределение на лейбл и при условии данных этого домена то есть она выучивает распределение на лейбл и которые есть при условии данных из этого домена и у нас есть торги домен то есть dtc в котором маленькое количество тренировочных данных и

домена и у нас есть торги домен то есть dtc в котором маленькое количество тренировочных данных и чтобы обучить сетку на этом на свете мы должны будем использовать некоторую информацию из сета которые были обучены на сердце и здесь модель тоже должна выучить распределение вероятностей на любую то есть вероятность y t плюс u и dt в нашем примере с дикими животными 42 минуты и начинает торги домен этот это за диких животных и вот мы будем делать трансфер lining is дсдт первый вариант задачей

этот это за диких животных и вот мы будем делать трансфер lining is дсдт первый вариант задачей трансфер линга это когда у нас не совпадают пространства признаков 2 доменов то есть смотрите пример такого такой задачи может быть следующий вот у нас есть два tts это текстов на двух разных языках но на русском и на английском на самом тут можно сказать что пространства признаков 2 доменов разные почему потому что просто буквы разные и слова разные то есть вот признаки это то есть его состоится

почему потому что просто буквы разные и слова разные то есть вот признаки это то есть его состоится ордами грубо говоря и пространства признаков пространство языков они разные но при этом мы все еще можем надеяться каким-то образом использовать знание моделей которые обычно нас у рта менее чтобы обучить модель на паркете ну например если это там не знаю русский и польский языки они русские и английские русские польские языки они все еще пишутся разными буквами 1 латынью другой и кириллицей но

русские польские языки они все еще пишутся разными буквами 1 латынью другой и кириллицей но при этом содержит очень много общей информации поэтому можно ожидать что если мы обучим какую-нибудь модель машинного обучения на русском языке мы каким-то образом сможем передавать информацию от нее модели которая будет обучаться на польском языке вот то есть 1 класс задач transfer during это те задачи где пространства признаков доменов разные 2 класс задач это когда распределение признака в двух

где пространства признаков доменов разные 2 класс задач это когда распределение признака в двух доменах разной и вот именно такой трансфер link вот такая постановка задачи обычно называется домой adaptation что значит что распределение признака в двух доменах разной смотрите давайте допустим что у нас есть два винта сета один data set review на фильма на кинопоиске на русском языке и 2 dtc treeview на мобильное приложение в google play тоже на русском языке смотрите пространства признаков

на мобильное приложение в google play тоже на русском языке смотрите пространства признаков одинаковые это это на русском языке это это пишется одним и тем же словами то есть у нас есть всего один словарь и ревью на фильмов кинопоиске написаны словами из этого словаря и ревью на приложение в google play тоже написано словам из этого словаря но при этом распределение признаков этих двух доменах разными что значит распределение признаков разные тексты про фильмы они содержат больше слов кинофильм

что значит распределение признаков разные тексты про фильмы они содержат больше слов кинофильм режиссёра что-то подобные тексты про регину мобильные приложения не содержат там мобилка связь что-нибудь подобное то есть вот распределение насколько часто конкретное слово встречается в тексте профилем или в тексте про мобильные приложения они разные то есть это значит что распределение признака у доменах разные грубо говоря это значит что смысл и текстов разные вот так вот дальше третий вариант это

разные грубо говоря это значит что смысл и текстов разные вот так вот дальше третий вариант это тогда когда у нас не совпадает лейблы не совпадают пространство лэйбл af или можно перефразировать что условное распределение вейбулла и преуспевай доменов не совпадают давайте здесь приведем пример тоже давайте допустим что у нас есть отыскать лиц людей одних и тех же лиц один и тот же dtc но с одним и тем же dtc то можно решать две разные задачи задачи 1 этой классификации лиц по половому признаку

и тем же dtc то можно решать две разные задачи задачи 1 этой классификации лиц по половому признаку то есть нужно просто по картинке лица определить мужчине или женщине принадлежит лицо а задача номер два может быть классификации лист по расовому признаку то есть по картинке лица нужно определить какой из четырех раз там стандартный раз это эйзен кавказе an african и еще какая-то вот а indian какому из классов расе принадлежит это лицо смотрите лица одни и те же dataset один и тот же но при

какому из классов расе принадлежит это лицо смотрите лица одни и те же dataset один и тот же но при этом с этим дата сайтом мы можем поставить совершенно две разные задачи то есть эти задачи разные полые бы в одном случае на слои было всего 2 классификация на два класса это два пола с этим конечно можно поспорить но давайте пока допустим что у нас всего два пола и во втором во второй задача это классификация лист уже на 4 класс т.е. здесь у нас встречаются лейблы и конечно же отличаются

это классификация лист уже на 4 класс т.е. здесь у нас встречаются лейблы и конечно же отличаются условное распределение лейблов при условии данных так в целом вот эти вот это конечно разделение на три класса они такие довольно не знаю может быть может быть это сложно довольно осознать в чем именно здесь разделение надеюсь примеры вам помогли но можно на самом деле немножко это как бы собрать в кучу в разделении на 2 на 2 разных на две разные идеи transform'а линга это трансфер лётен когда у

кучу в разделении на 2 на 2 разных на две разные идеи transform'а линга это трансфер лётен когда у нас два разных домена и две разные задачи что такое разные домены разные домены это когда задача одна и та же например вот классификации изображения цифр на 10 классов одна и та же задача но при этом домен разные то есть datasette разные смотрите вот слева и т.д. сатанист который вам наверняка уже знаком а справа это сайт сын это то же самое что datasette вниз то есть он содержит все те же

уже знаком а справа это сайт сын это то же самое что datasette вниз то есть он содержит все те же картинки чисел от 0 до 9 и задача все тоже классифицировать эти картинки на 1 из 10 классов но при этом выглядят эти картинки по другому то есть на самом деле можно считать что распределение данных у места и он сын они разные картинки выглядят по-разному распределения данных разные разные задачи это когда у нас есть различие в лейблах вот как раз тот пример с определением раз определением пола

это когда у нас есть различие в лейблах вот как раз тот пример с определением раз определением пола правда здесь у меня на картинке здесь теперь две задачи определения раз и определения эмоций тут то же самое а смотрите у нас есть одни и те же лица и на одних и тех же лицах можно поставить 2 задач либо определить какой расе принадлежит лицо либо определить какую эмоцию выражает это лицо вот это разная задачи так и последнее деление которое можно о котором можно подумать трансфер лемминги это

разная задачи так и последнее деление которое можно о котором можно подумать трансфер лемминги это деление на супер его я стану супер вас трансфер ленка отличие в том есть ли лэйблы для торги домена то есть пример он с 1 ст трансфер линга может быть такой вот у нас есть дата светлеть людей которые мы собрали в московском метро мы обучили на нем не знаю систему распознавания лиц и у нас оно очень хорошо работает и мы хотим не зная ее продать в другую страну другую страну энди люди выглядит

хорошо работает и мы хотим не зная ее продать в другую страну другую страну энди люди выглядит немножко не так как россии ну например какую-то африканскую страну но чтобы собрать этот сет африканских лиц и отлей блин их африканских лица то есть лица с грешниками кому как какое лицо принадлежит нам нужно очень много денег и времени чего у нас нет но у нас есть просто очень много фоток лиц людей из этой страны вот это получается что у нас есть dts лиц людей которые они размечены то есть просто

из этой страны вот это получается что у нас есть dts лиц людей которые они размечены то есть просто просто картинки не знаю к какому классу какая картинка принадлежит вот это закрываясь трансфер living мы хотим использовать систему которое мы обучили в москве чтобы она умела распознавать лица людей в африканской стране при этом у нас нет это сайта который бы был с лейблами лиц из этой free канской страны так вот это примерные деления трансфер лётен гана на классы что ли вот эти три деления

страны так вот это примерные деления трансфер лётен гана на классы что ли вот эти три деления потому что есть разное разное либо распределение либо домены либо лейблы разные закрывают супер вайс и разные задачи или разные домены давайте теперь немного поговорим про то какие идеи же используются для того чтобы сделать эти модели для трансов радио минга что люди поняли на самом деле то что мы затрагивали еще когда говорили о фан тюнинге когда нейронные сети обучается а научиться выделять из

затрагивали еще когда говорили о фан тюнинге когда нейронные сети обучается а научиться выделять из объектов информацию и эта информация делится на две части интер домен интро domain интер domain это та информация которая характерна для в общем для объектов это вот это сета то есть давайте допустим что у нас есть 250 и лица людей опять же лес людей например разных рас в улиц людей разных рас есть какая-то информация которая характерна для всех них в общем например то что он примерно в одном

какая-то информация которая характерна для всех них в общем например то что он примерно в одном месте расположены глаза нос и рот например то что нас расположен выше рта что практически у всех есть волосы практически у всех там овальное лицо и что-то подобное такое то есть интер domain эта информация которая сеть выделяет при обучении и при этом и эта информация она верна для source домена и для торги домен а есть и метро дамы информация эта информация которая характерна именно для то вот эта с

домен а есть и метро дамы информация эта информация которая характерна именно для то вот эта с это на котором наши модели обучается вот в примере с лицами когда например модель обучается на дату сайте лица людей определенной расы она может обучиться на цвет лица или широту глаз ну разных рас разные разрез глаз немножко разный цвет кожи и это прочее и на самом деле чтобы сделать хороший трансфер йоник чтобы взять и использовать модель обученную на одном датасете для обучения на 2 тыс этих нам бы

чтобы взять и использовать модель обученную на одном датасете для обучения на 2 тыс этих нам бы хотелось уметь брать из модели обычно на первом это сайте только ту информацию которая характерна для обоих это сетов то есть только интер domain информацию люди придумали несколько идей как это делать первые идеи мы уже рассматривали это фантик да и обучение на самом деле если подумают афонин сегодня подходит под эту про digma то есть что мы надеемся что когда мы обучим нашу сеть на первом это сети

подходит под эту про digma то есть что мы надеемся что когда мы обучим нашу сеть на первом это сети и потом добычу в ее на втором dts эти мы надеемся что сеть процессе до обучения она выкинет ту информацию которая была характерна чисто для первого бита сета оставить ту информацию которая была характерна для боев это сетов и до учит ту информацию которая характерна только для второго datasette есть конечно другие идеи 1 класс идей другой класс идей это как раз он для ansa 1 ст трансфер линга то

конечно другие идеи 1 класс идей другой класс идей это как раз он для ansa 1 ст трансфер линга то есть для такого transforming а где на торги домене нет лейблов он такой давайте будем каким-то образом с помощью некоторого лосса заставлять нашу сеть делает так чтобы на выходе на выходе после некоторых слоев сети распределения распределение выхода слоя сети для картинки и source домена и картинки из торги домены была одинакова тоесть что я имею ввиду вот когда мы обучаем сеть только на сердце вы

торги домены была одинакова тоесть что я имею ввиду вот когда мы обучаем сеть только на сердце вы давайте допустим у нас таргета нет ему просто закрываясь обучаем нашу сеть на 40 до меня вот мы ее и обучаем и потом мы можем что сделать мы можем взять одну картинку и 40 домены и одну картинку с торги домена прогнать через сеть и получить выхода и и слоев и вот окажется на самом деле что например выход третьего слоя после 40 домена после картинки с домены и после картинки торпедо мена они

выход третьего слоя после 40 домена после картинки с домены и после картинки торпедо мена они распределены по разному то есть вот есть некоторые разницы между тем что получается после выхода сети для ссор с картинки или the ragged картинки и подумали люди наверное чтобы сделать так чтобы сеть хорошо вела себя и на таргет картинках и носов с картинках можно сделать так чтобы у нее просто распределение выходов после каждого слоя сети на source таргет до менее были одинаковы ну вот есть некоторые

выходов после каждого слоя сети на source таргет до менее были одинаковы ну вот есть некоторые разные варианты как этого добиться люди придумали их уже очень много один из них вот вы можете почитать по ссылке в презентации остальные можно почитать в в статье которая в принципе описывает и собирает все идеи дома и над аптечные за последние годы даже не домой надо трещин или транс в районе нга за последние годы ссылка на это на эту статьи из гетто дальше в слайдах я скажу какая она будет какая

последние годы ссылка на это на эту статьи из гетто дальше в слайдах я скажу какая она будет какая еще одна идея есть другая идея основана не на вот этим вот как бы не на том чтобы сближать распределение выхода в сеть и после картинки source и после картинки торги домена а на том чтобы поделить архитектурную сеть на две части и заставим одну часть сети учить информацию которая характерна для конкретного домена а другую часть эти учить информацию которая характерна для обоих доменов и вот когда

домена а другую часть эти учить информацию которая характерна для обоих доменов и вот когда такая идея появляются появляется вот такие вот эти монстры смотрите вот эта сеть состоит из кажется 5 частей из шести лоссов и и обучать очень сложные вообще это все выглядит очень сложно и обучать долго вот я не буду вам рассказывать как здесь все устроено но вот идея в том чтобы некоторым образом архитектурные разбить сеть на несколько частей каждый из которых будет обучать что-то свое и с помощью

разбить сеть на несколько частей каждый из которых будет обучать что-то свое и с помощью лоссов разных заставить эту сеть обучаться так как нужно то есть заставить одну часть сети обучает только то есть заставить одну часть сети выучивать только информацию и активную для конкретного домена а другой часть сети выуживать информацию которая характерна для разных доменов и вот в общем такая идея давайте дальше вдаваться в подробности мы не будем вот если что можно почитать в статье по вот этой

давайте дальше вдаваться в подробности мы не будем вот если что можно почитать в статье по вот этой ссылке есть также экстремальный сути transforming ну я так называю их экстремальные то есть это какие-то нестандартные сеттинге нестандартные с этим может быть например таки когда у нас есть сеть обычная на каком-то большого это сети и хорошо обученная и мы хотим использовать информацию за этой сети для обучения какой-то новой сети на маленьком dts эти но проблема в том что сеть которая обычно на

для обучения какой-то новой сети на маленьком dts эти но проблема в том что сеть которая обычно на большом dts эти она у нас не имеется то есть у нас нет доступа к и рисом и к и архитектуре все что мы можем это засовывать нее картинки и получатель бединге которые она выдает грубо говоря такой blackbox но при этом мы можем как-то все-таки сделаем трансфер лёнинг как мы это можем сделать мы можем взять нашу новую сеть которые будем обучать но новой задачи и с помощью лосса например и мы съели или

нашу новую сеть которые будем обучать но новой задачи и с помощью лосса например и мы съели или например логоса сделать так чтобы выход сети нашей новой на конкретной картинке был похож выходу вот этой вот black box сети на это картинки то есть мы берем картинку вот например котика прогоняем ее через большую сеть который у нас нет доступа получаем выходы этой сети и берем эту же картинку прогоняем через нашу сеть получаем выходы нашей сети и с помощью некоторые волос и делаем так чтобы выходы

через нашу сеть получаем выходы нашей сети и с помощью некоторые волос и делаем так чтобы выходы сети большой они были похожи на выходы нашей сети то есть вот так сближаем выход таким образом наша сеть как бы как то косвенно будет учиться у большой сети и она приобретет таки некоторую информацию об этих картинках использую большую сеть конечно нужно использовать не последний выхода сети то есть не те которые делают классификацию а предпоследний предпоследний слой сетей то есть нужно сближать

не те которые делают классификацию а предпоследний предпоследний слой сетей то есть нужно сближать предпоследний слой сети они слоя сети которые выдают вероятности принадлежности классами последние три слайда про идеи тоже 4 что вот качестве идея может использоваться fine tuning в качестве идея может использоваться вот такая идея сближения распределение выхода в сети для ссор с таргет картинок идея архитектурного некоторого разделения сети на на смысловые части и вот эта идея как бы сетей

идея архитектурного некоторого разделения сети на на смысловые части и вот эта идея как бы сетей учителей сетей студентов которые учатся там где сеть студент учится выдавать те же выходы на одну и ту же картинку что и учитель вот этим я хотела показать что на самом деле есть очень много разных идей как делать трансфер лёлик их на самом деле еще на много больше чем я вам показывал но все мы разобрать конечно не сможем потому что даже сама статья где собраны вот эти идеи последних лет по трансфер

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

очень важно особенно очень важно в последние года вот на слайде представлен человек эндрю надеюсь вы знаете кто это если не знаете эту загуглите пожалуйста и знаете вот он на туториале нипс гипс это одна из самых больших и важных конференции по машинному обучению в мире вот он на нет 2016 высказал идея что трансфер лёнинг это будет то чтобы это обеспечивать успех индустриального машинного обучения в будущем что это значит вот сейчас deep learning и машины обучения они стали проникать во все

в будущем что это значит вот сейчас deep learning и машины обучения они стали проникать во все слои индустрии то есть даже компании которые занимаются там продуктами и тип банков типа с компанией связи там мтс мегафон и вообще все подряд компании они уже стали как-то внедрять в свои системы машинное обучение и deep learning и это было будем последних лет то есть компания начали внедрять они начали там появляться голосовые помощники рекомендательные системы на нейронных сетях все подобное это

там появляться голосовые помощники рекомендательные системы на нейронных сетях все подобное это был успех но мы приходим к тому что людям хочется все больше задачи решать с помощью deeply рнга как мы видели есть задачи для которых сложно собрать большой dtc данных и сложно обучать как бы с нуля нейронные сети под эти задачи и поэтому я drain считал 2016 году считает наверное до сих пор что следующее десятилетие успех коммерческого вот этого использования нейронных сетей будет обеспечивать

десятилетие успех коммерческого вот этого использования нейронных сетей будет обеспечивать именно трансфер лёнинг то есть скоро всем компаниям потребуется очень много изучать транспорт лёнинг применять трансфер leading чтобы решить вот эти свои хотелки по использованию нейронных сетей в продакшене вот картинка из его выступления которое говорит что на самом деле начинает 2012 года в ihop крайней мере предположение что вот начиная 2016 года использование transforming и научных статей и

крайней мере предположение что вот начиная 2016 года использование transforming и научных статей и коммерческого использования его будет расти в такой вот прогрессии то есть очень сильно и вот я уже сказала почему трансфер лёнинг становится собственно все более популярным это потому что все больше задач в индустрии есть которые хочется решать помощью hyper ринга но на которых данных малых и есть еще вторая причина почему трансфер денег довольно популярным будет в ближайшие годы это потому что

еще вторая причина почему трансфер денег довольно популярным будет в ближайшие годы это потому что очень сильно развивается место симуляции данных то есть смотрите у нас например мы хотим сделать распознавание лиц людей но у нас мало фотографии лиц людей и законом запрещено ходить там не знаю по улице и фотографировать лица людей поэтому непонятно откуда взялись этот сет но я могу например сделать симуляцию лиц людей то есть я могу сделать на генерить очень-очень много хоть миллион и фоток лиц

симуляцию лиц людей то есть я могу сделать на генерить очень-очень много хоть миллион и фоток лиц людей которые сгенерирует мой компьютер то есть это будет не реальные лица людей не фотография каких-то реальных живущих людей но вот какие-то фотографии сгенерированы скажем так и могу на обучить на них свою нейронную сеть вот но тут на самом деле есть проблема если бы здесь не была проблема была бы все просто мы на genelec учились людей как бы обучая на них нейронную сеть вообще нам не нужен

бы все просто мы на genelec учились людей как бы обучая на них нейронную сеть вообще нам не нужен большой datasette мы можем просто сгенерить обучить нейронная сеть проблема в том что у симулированные данных распределения все-таки отличается от реального то есть для человека это практически не видимые различия если вы посмотрите на картинку сгенерированного лица человека и на картинку реально в лице человека вы вряд ли сможете отличить где реальные где сгенерированы но для сети есть разница

в лице человека вы вряд ли сможете отличить где реальные где сгенерированы но для сети есть разница почему-то эмпирически было установлено что если вы сгенерируйте много разных лиц людей и обучиться на них нейронную сеть то она на реальных лицах людей будет работать плохо то есть так просто не работает а значит это как раз кейс трансфер леоненко здесь как раз нужен трансфер leaning симулировать можно конечно не только лица люди симуляция на чаще даже не про лица людей а про бесплатные

можно конечно не только лица люди симуляция на чаще даже не про лица людей а про бесплатные автомобилей например то есть очень сложно набрать много разных видео проездов автомобилей по разным дорогам особенно учитывая что в европе не распространены такие вещи как у [музыка] камеры которые ставятся вот перед передним стеклом это не называются вот сложно набрать такое это сет но зато можно симулировать то есть открыть некоторые симулятор где будет такой мир практически похоже на наш на там какой

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

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

на симулирована данных и надеяться что все будет работать на реальных вот комбинация этих признаков делать трансфер лёнинг просто вопросам десятилетия то есть на него обращаются очень много внимания ну это все что я хотел сказать надеюсь что было полезно спасибо до свидания

всем привет добро пожаловать на семинар по трансфер рингу ним познакомимся с этой техникой заключается в том что мы используем уже при добыче ную модель на какой-то удачи для уже нашей задачи которые как право похоже или напоминает то что было в начальном большому это свете на которых обучалось модель вообще описание метода что что мы делаем в суринаме придумаю данную архитектуру какой-то сердечной сети невыгодное нерентабельно выбрать угадаете какая съесть работает такая нет так же напомню что

сети невыгодное нерентабельно выбрать угадаете какая съесть работает такая нет так же напомню что зачем вообще не внесены семен это некоторые фичи экстракторы на который уже дальше обучаться классификаторы то есть в самой сверхточной сети подбирается какие-то фичи и управления на свертки да то есть если кусочек изображения похож на свёртку то это дает большую активацию и собственно вот одна фича она как бы имеет большое значение и дальше уже вот по этим речам которые не руками созданы она

фича она как бы имеет большое значение и дальше уже вот по этим речам которые не руками созданы она которые отмечаемые мы уже сверху бы чем куда классификатора как правило это 2-3 слоя обычные полноценной сети с активация my промежуточных рф и это неплохо работает собственно в чем заключается fantini нет анти подмножество трансфер линга что мы делаем мы берем кельского большую обученную сеть и не просто заново и обычаям отберем уже загруженные vesa которые были погружения и после этого мы

и не просто заново и обычаям отберем уже загруженные vesa которые были погружения и после этого мы пытаемся немножко изменить эти веса так чтобы они удовлетворяли уже условиям задачи которые необходимы нам обычно все большие сетки обучаются на дата сайте называемый не жмет он там состоит насколько помню из тысячи классов он очень большой по объему и сам обучать натянута сети у нас нет никакой возможности поэтому мы пользуемся уже выжженными моделями которые приучили до нас какие-то небольшие

поэтому мы пользуемся уже выжженными моделями которые приучили до нас какие-то небольшие компании стартапы и так далее так вот пони тюнинг почему заключается мы можем во-первых заморозить фичи просто которые есть нашей съемочной сети и просто обучать откуси катер заново во-первых да какая при добыче на модели идут с последним слоем размерности равно тысяч как раз число классов вы начинаете нам не всегда нужно 1000 классов тогда нужно скажем 2 класса дайте более классификаторы вот очень на какую

всегда нужно 1000 классов тогда нужно скажем 2 класса дайте более классификаторы вот очень на какую ты там свои классы она возможно аналитики это другие и поэтому мы просто заново инициализирует эти последние слои которые являются классификаторами и меняем размерность выходного слоя обычно вся суть заключается в этом тут приведены некоторые инструкции можете в принципе почитатель на в основном всегда всех стратегиях лучше всего к ней transfer during нежели чем просто обучать все эти 0 во-первых

всех стратегиях лучше всего к ней transfer during нежели чем просто обучать все эти 0 во-первых потому что обычно сети с нуля она как бы быстрее города перри обучается если у нас допустим кассат маленький то учили фичи хорошим из него не получится то есть он просто как-то переобучаться на уборку которую нас есть строение особенности на неё и не станем смотреть на как бы общую совокупность печей которая нам нужна формально да вообще чем больше данных тем лучше и даже если данные не похоже то

которая нам нужна формально да вообще чем больше данных тем лучше и даже если данные не похоже то скажем нас угла сдачи классификация мы хотим сейчас но не знает там детекции сегментация которое вы узнаете позже все равно использует обычно вот эти вот фичи это в на практике давайте начинать сделал необходимые все импорт и и сегодня мы будем классифицировать картинки муравьев и пчел с ответственным классом для этого давайте загрузим это сет сделал это с помощью команды winged перед венеты на

классом для этого давайте загрузим это сет сделал это с помощью команды winged перед венеты на стоит искать с не знак это показывает то что у нас команда выполняется в терминале и собственно дальше у нас идёт ссылка на этот это satrip и после этого мы делаем мандип то есть просто распаковываем архив с sing to графин давайте так вот мы получили китае изображения в ней просто packard и выгрузили давайте поговорим о мутациях что это такое а бен тации также позволяет бороться с переобучение они

давайте поговорим о мутациях что это такое а бен тации также позволяет бороться с переобучение они вообще созданы для того чтобы каком-то смысле увеличить datasette тренда и за счет чего это достигается допустим у нас был изображение пчелы и вдруг ночью повернули допустим просто отразили зеркально горизонтали это пчела осталось чего и собственно и наша сеть должна а ровно также понимать что это фотография пчел и вот здесь за это отвечает и как информация как ринном horizon кухне и что он идиот

пчел и вот здесь за это отвечает и как информация как ринном horizon кухне и что он идиот она там связанности 05 берёт просто первач изображения и таким образом мы как бы случайно иногда расширяем наш data set который был в самом начале а также мы используем нормализацию для нашего сета а откуда эти числа дерутся на а вот тут значит нас есть вектор из средних до по трем каналам и with rice стандартное отклонение как правило его берут из самой при добыче най сети при добыче на сеть на случалось

отклонение как правило его берут из самой при добыче най сети при добыче на сеть на случалось на имидж найти поэтому неплохим выбором в принципе будет нормализовываться так именно теми же числами что которые были получены на нужно найти то есть что там происходило просто берем с подонком все картинки между собой делим на и в число получаем как средние значения и потом мы делаем так чтобы это среднее значение было измениться и стандартно по ней тоже было единицы то есть мы там сначала вычитаем

значение было измениться и стандартно по ней тоже было единицы то есть мы там сначала вычитаем среднее он делим а когда поклонение хочу заметить что на валидация мы вот эту случайного и горизонтального поворота мы не делаем почему потому что мы хотим чтобы наблюдаться у нас всегда как бы datasat было день тот же данные на которых не вы лидируете должны быть детерминированным поэтому здесь место флипы здесь стоит просто центр укроп здесь у нас как мы едим да тоже считает трендом ресайз кого что

здесь стоит просто центр укроп здесь у нас как мы едим да тоже считает трендом ресайз кого что делать рен вместо стол он как достаточно берет и обрезать наше изображение по размеру которому ему акционер то есть у нас там был 1 забрали 50 60 из 56 не взяли обрядами его до 244 204 таким образом как правило объект не оскорбление terranova попадает в выборку то есть у нас была избрана пчела на взяли как-то обрезать а быть может чего сместил без google на это все равно ставится чего и мы хотим чтобы

обрезать а быть может чего сместил без google на это все равно ставится чего и мы хотим чтобы наша сеть также это понимал как нам придется брать как номинации визирует сам datasette значит у нас есть какое-то вот специальная структура достаточно файлов могу видеть у нас есть значит принимаю папку они и дальше у нас есть валидация к своей нации и не значит по класс проспи значит изображение вот одна папка и внести соответствующую глубине пчела из муравьем и strain у нас есть челы и если значит

папка и внести соответствующую глубине пчела из муравьем и strain у нас есть челы и если значит пчелы находятся в директории принятого мы будем очередным пихать их trends to set также из с муравьями вот есть у нас есть такая структуру папок как здесь то мы можем воспользоваться уже встроены в турч вишен так скажем класса называется имидж мэра что он делает он как раз таки осталось найти структуре делает наш сосед то есть сразу же говорю что вот этот тремя это тест и сразу же как бы выплевывают

делает наш сосед то есть сразу же говорю что вот этот тремя это тест и сразу же как бы выплевывают тандыр из изображений и собственно классом классно сразу же переводит там и из вот мини сеанса в ноль и один общем все у нас написано очень полезная штука поэтому когда я уйду вас это все о семьи хранят в таком формате что у нас тут у нас заданных значит директориях который лежит и дальше собственному просто принял по валидации достаем нужные нам изображений также хочу обратить внимание что она

просто принял по валидации достаем нужные нам изображений также хочу обратить внимание что она принтера с этим нам нужно поставить утру точно так почему это так потому что допустим нас всегда один и тот же порядок да и мы обучаемся много эпох мяч и там 1 мы допустим идут изображения больше изображение скажем с пчелой а потом с муравьями и получается так дальше то вначале позже наша сеть постоянно будет предсказывать пчел а в конце mlp уж там будет обучаться потихоньку и на графике лосса вы

будет предсказывать пчел а в конце mlp уж там будет обучаться потихоньку и на графике лосса вы увидите такую характерную пиву мне сказать или того что в конце эпохи 7 lite о том что нас вообще-то исчести пчелы потому что не были только вначале вот и поэтому вот такой скачок и поэтому чтобы такого не было мы ставим шофар оботру в нато лоу мире у равен это сатин все мы знаем два часа из на workers это число потоков которыми мы будем угрожать картинке вообще тем больше тем лучше но ставить больше

это число потоков которыми мы будем угрожать картинке вообще тем больше тем лучше но ставить больше чем у вас скажем тяги процессор нет никакого смысла из за того что я думаю всем понятно снова распределенных вычислений и здесь соответственно стоимость у нас нет любу а у меня сейчас от кого не всегда то это будет вот эта переменная будет равна трем давайте инициализирует сайт наконец и посмотрим их размера мы видим что в 13 у нас видите s4 именно матча на войда 153 давайте посмотрим на

их размера мы видим что в 13 у нас видите s4 именно матча на войда 153 давайте посмотрим на изображение которое дает нам выдаст ну вот например изображений значит у нас 1 2 это пчёлы я вижу пчёл есть здесь муравьи я тоже вижу на меня все в порядке мы нигде не ошиблись собственник акрил библиотеки ну например ну тогда у нас тендер из трех каналов не какие-то числа давайте теперь напишем наш основной алгоритм общее в машинном обучении этого при ну то есть то как внутреннюю нашу модель здесь для

алгоритм общее в машинном обучении этого при ну то есть то как внутреннюю нашу модель здесь для скажем так как экономии строк кода написано сразу и валидация и тренинг часть то есть ну тут как бы используем один и тот же цикл за некоторым остатком который мы сейчас обсудим для обучения делами дается не так что то происходит ну во-первых первый цикл самое большое это очевидная цикл пор плохо да вот хочу обратить внимание есть 5 класс не уже знакома что делать она показывает эту полоску прогресса

хочу обратить внимание есть 5 класс не уже знакома что делать она показывает эту полоску прогресса не очередь поставить на чистописания что вот эта полоска прогресса 17 по эпоху то есть это грубо говоря перед nand этому такая букву т это вот как раз таки означает что я буду повозку показывать если просто не круто некой полоски не будет я думаю совсем очевидно следующее что мы делаем это мы оперируем все подводим фазу здесь у нас это фрейм и валидация то есть на каждой эпохи мы сначала поеданием

все подводим фазу здесь у нас это фрейм и валидация то есть на каждой эпохи мы сначала поеданием пленту досыта потом не смотрим на то как у нас изменилось качество ничего сложного не буду есть а вот кости изменению крышка говорил от фазы у нас собственно зависит владения сети это очевидно то есть на 3 нему и и обучаем наблюдаться на ее не трогаем и никак не оптимизированы и взаимодействия совсем азерам что у нас здесь здесь у нас [музыка] прошиваем понял давайте назначить scheduler делается у

азерам что у нас здесь здесь у нас [музыка] прошиваем понял давайте назначить scheduler делается у нас есть модель котор переводится в режим 3 на отключать у нас нет ключа непал ты не переводит большой моего специальный режим не у нас месяц значит другой случай когда фазу у нас предаться что делать она наоборот переводит наша сеть то есть эта строчка на эквивалент если бы я написал модуль . да то есть приводит такой режим блевать отвечай на болты и там говорит что больше статистиками

. да то есть приводит такой режим блевать отвечай на болты и там говорит что больше статистиками накапливаем по большому что дальше вот теперь как на самом внутренний цикл это по самому угадал удару мы каждый матч пропускаем через сеть как она сама гача-гача на следующее у нас как бы это типу из двух объектов первый объект рецепт тендеры то есть они изображения там то что зерно от первой такой трехмерный тендер то есть нас тут 3 матрицы соответствующей каждому каналу и собственно нитки классов

тендер то есть нас тут 3 матрицы соответствующей каждому каналу и собственно нитки классов метки классов тоже тендер на такая примерно из 1-го числа и сам буду или того что у нас еще два часа из есть какой-то почитать 4 насколько я помню то есть четыре метки с присущей и соответствующей нем четыре изображения значит если нас есть к плутону и перекидываем горбач на gpu ничего нового если у нас сейчас идет приняты на учет начал разные ингредиенты перед пропусканием через сеть и финально вот здесь

идет приняты на учет начал разные ингредиенты перед пропусканием через сеть и финально вот здесь ни тени занимаемся собственно давайте посмотрим на тот момент ещё одно различие собственно если у нас и фраза сейчас валидация то ничего зверем что градиент и нам считать не нужно именно поэтому мы делаем точно у град то есть чем отличие между там . train . я дал модели и не сторож наград еще раз . . приводит саму модель просто вот свои какое-то слайде модели вырежем при этом мы можем в принципе

. приводит саму модель просто вот свои какое-то слайде модели вырежем при этом мы можем в принципе сделать том углу . я бы и дальше читать президента на 0 даст нам это не нужно иногда диетический такого множества но это сейчас за рамками семинара так вот и поэтому нам нужно еще отключать ингредиенты патча градиентов на валидации потому что мне как-то оптимизирована шум сеть и вот все что написано после вы старший брат все вот это пространство условно day 2 day and a считаться не будет тут можно

после вы старший брат все вот это пространство условно day 2 day and a считаться не будет тут можно еще что-то написать танки тетрадь интернете здесь если вы делаете bradford вопрос к штурму легендах не мы их мы подсчитывали это ускоряется вычисление то есть валидации он проходит быстрее то прений именно на самом по этой причине что мы делаем дальше из собственного опыта модели мы получаем предсказании как это сделать собственно вот я допустим а соседи дает получается тензоры дух начинены потом

как это сделать собственно вот я допустим а соседи дает получается тензоры дух начинены потом из нее как-то можно получить реальности не важно важно то что как бы чему больше значения выходного тандыра тем больше от нас класса значит есть с классом большая точении мы будем предсказывать его ему поэтому мы не смотрим кришну еще не привели бы просто наши вероятности нашего а опыт они все равно будет ну думаю оставить с ростом исходных значений с этими поэтому делаем марк макс макс мы делаем по

ну думаю оставить с ростом исходных значений с этими поэтому делаем марк макс макс мы делаем по последнему размерности сети мы считаем что вас будет cross in 3d волос поэтому мы просто можем ехать мимо толпы ты со слоя до меняли на руку ситуации напоминаем мы можем также использовать воцарилась так называемый бондарика сан-тропе и для него нам нужен опыт из одного нейрона то есть и снова значения и то есть условно говоря если там приводится не потом вероятности есть от большего 05 там игрушки 1

и то есть условно говоря если там приводится не потом вероятности есть от большего 05 там игрушки 1 класс если меньше чем на 5 2 класс все просто и еще раз если у нас фаза принято мы к краске делом backward то есть год проб вот этот момент считается все градиенты и начислены и делаем этим others that который vesa модель берет градиент и vesa моделей как ты их применять и если накоплю на статистику как мы это делаем для лосса мы просто прибавляем крутых неслось потом читаем среднем для активации

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

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

есть выбор ему на него сдаем описание то есть это вот тот текст который с ним будет отображаться отсюда мы значит кладем фазу с тремя либо валидация муки руси его среди айподе также мы сохраняем лучше модель то есть у нас валидация некую россия стала лучше чем было лома сохраняя модель след не картам и модель не сохраняем то есть как бы леса и остается нажать тренироваться но эту перемену мест но думы и он записывается кого-то еще и погружает с виса лучше модели мы хотим что так был получен

но думы и он записывается кого-то еще и погружает с виса лучше модели мы хотим что так был получен причин да так же у нас есть функция для опрессовки предсказанием не на похоже на то что было вот здесь я просто 3 сотки классов и с выражение и собственно здесь у нас функция для измерения качества модели книги серьезную тренируем вопрос пропускаем через вы и дацана металл да не смотрим на том какое значение получилось ну что же давайте не вице практике мы сейчас попробуем учить несколько

какое значение получилось ну что же давайте не вице практике мы сейчас попробуем учить несколько архитектур значит не будем пробовать ван тюнить их разным образом не заниматься транс триллер ногам для . ну вот немножко разными способами ответный начнем с обычный алекс нет надо у сиона я знакома 1 тонированной сеть которая что то смогу вообще сделать против обычных in крафта свечей то есть те которые руками люди придумывают как я загрузить значит опять же круто модулей строчке жена что листочком

руками люди придумывают как я загрузить значит опять же круто модулей строчке жена что листочком указываю модель мы хотим и после этого у нас идет флаг препринт если он тут а ну еще так давай будем не сайты модели и собственно загрузим их в скелет модель а если он холст он просто инициализируем как-то это модель стучание давайте посмотрим что внутри архетипы 100 кг она загрузится лично модель посмотрим что внутри какие слова ничего нового но надеюсь вы для себя не увидели свертки вело макс по

что внутри какие слова ничего нового но надеюсь вы для себя не увидели свертки вело макс по свёртка любом обскуру такие вот значит модуля их тут получается четыре штуки и после этого у нас нет арочку линк и как превращаем наше печенье из такого-то вытянутого видно то есть там маленькие изображения и много каналов обычных такой полоска представляет них представляем простуду в этом мире то есть один миг этот вектор у нас размер 9 6 16 водку расцвета очень говоря вот это часть моделям как бы

один миг этот вектор у нас размер 9 6 16 водку расцвета очень говоря вот это часть моделям как бы верхние первый слой называется вещей экстрактор как я и говорил стоит из карточных слоев в основном а после нее идет вот наш классик азар ничего нового у нас просто он связно сеть здесь индра болтами нелинейности не люблю ну по факту здесь вот видим три слоя один скрипт вернее и очень две акции а царем как я говорил самом конце у нас аутфиттерс филаменте тысячи что с этим делать давайте разбираться

как я говорил самом конце у нас аутфиттерс филаменте тысячи что с этим делать давайте разбираться число вещей которые приходят на вкладку 9 216 зафиксируем это число а теперь скажем что вот этот классификатора он просто давайте будет равен именно условия и запивает краски большой один вектор из девяти тысячей в уме эти две фичино мы будем брать как предсказание моделей ну как это можно делать мы просто берём вот наш модель через точку вызываем классификатор вот мы здесь сделали им просто горю

просто берём вот наш модель через точку вызываем классификатор вот мы здесь сделали им просто горю что ты теперь вот не sequence и он там из трех слоев и просто января как-то с начальницы лизин она кстати то есть вот сейчас прямо эта модель на использует нельзя ее надо как-то добычи и 4 вот этот секатор научился тем вещам которые выдает нам фича extractor проложим модели gpu тоже горе будем использовать красоты волос и в качестве оптимизация возьмем выбор сильно улучшила дома как правило не

красоты волос и в качестве оптимизация возьмем выбор сильно улучшила дома как правило не прыгнешь о чем не думал знаете что адам это как бы такой оптимизатор сейчас помощью и попробуешь scheduler я обещал что происходит значит ну на первых этапах обучения сок себе обучение она происходит более активно то есть если он посмотрит на лосс обрезка продают у нас после этого мы хотим чтобы наша сеть делала более маленькие шаги что она выпустила кого-то маленького камилла минимуму при вашем йорн кроить

более маленькие шаги что она выпустила кого-то маленького камилла минимуму при вашем йорн кроить у нас просто будет как-то очень сильно прыгать модель у представителя себе параболоида увидеть картину большой лоренет у нас вот так прыгает просто а маленький о-ринг рейд нас как бы она вот скатывается его находится самый самый минимум такой что здесь происходит на каждом седьмом шагу 7 позже мы уменьшаем нашли арни кроить наган из на 01 что значит каждый 7 и плохо delrin creed уменьшается в 10 раз

нашли арни кроить наган из на 01 что значит каждый 7 и плохо delrin creed уменьшается в 10 раз давайте собственно преступника обучения функция может подготовили все аргументы у нас есть к чему бы не начать самое интересное так что мы видим да вы нижнюю полоску нас есть которая как ты быстро мелькает из за того что у нас идут итерации под это не есть верхняя полоска которую рыба начнете свой пол украсть у час доедем шестая эпоха никакие говорим в может на вечер там у редакции проходит быстрее

украсть у час доедем шестая эпоха никакие говорим в может на вечер там у редакции проходит быстрее чем принять будем акира исида нас получается сразу скажу что достаточно неплохая валидации 90 процентов 90 процентов мы ну то что друга драма уже как бы предсказываем burn a minimum что на трение у нас ось выше это логично как бы в том что внутренние опираясь выше чем наблюдаться это ещё не значит и обучение просто она вполне может как бы как спасти параллельный then игру не выдать это будет

и обучение просто она вполне может как бы как спасти параллельный then игру не выдать это будет уменьшаться ну да мы уже видим что принципе наблюдаться было 90 сейчас 88 чуть чуть упало качество ну ничего страшного нет сохранили выше модель дождемся окончание и поговорим немножко о том как общение бляшки построить и думаю это уже знаете на я покажу такие как их делать более красивыми значит есть такая библиотека для статистики нас по 1 пользуются отзываться seabourn давайте импортируем sen bor

такая библиотека для статистики нас по 1 пользуются отзываться seabourn давайте импортируем sen bor что можем делать мы можем первое что и нравится облачным графика давать из чего построен он маленький у него отделение нас очень маленького шрифты будут чуть вылазит еще значит объект сам по себе человек и что еще сделать смотрите я делаю sns . во-первых и бурные какие-то стили свои для давать я воспользуюсь стиль мбайт grid что значит значит фон белым и букет а во-вторых вот это вот шипы да вот

стиль мбайт grid что значит значит фон белым и букет а во-вторых вот это вот шипы да вот на осях он слишком и талкинг к отмене кажется я думаю большинство со мной согласен я делаю его по 40 процентов больше после этого отнести он должен создать чем как бы класс жмуры и задач его размерам здесь не слишком маленькими хотим их чуть большего сделать не используем мозг будет сотрудничать экрана стандартный выбор неплохой 12 8 и чтобы вот это вот не выходила я делал код . шел от до после него вот вот

выбор неплохой 12 8 и чтобы вот это вот не выходила я делал код . шел от до после него вот вот это вот выхода служебному словно него не будут хотя посмотрим на результат на как по мне получила гораздо более приятно на соседка мы можем как сами и что мы видим как я говорил 7 достаточно быстро обучается и после этого вот оранжевым нас validation novotel я сделаю чтобы было видно что эта валидация не видно синюю настроен дать оранжевый не вот у нас теленку вот мимо потом потихоньку раз темному вы

видно синюю настроен дать оранжевый не вот у нас теленку вот мимо потом потихоньку раз темному вы сохранили вот эту вот наш лучший модель и давайте еще раз меняемся сырым мясом именно в память жесткого диска нет этим загрузим чтобы вы несли что все порядке измерим керосин и люси нас 88 вполне достойно какие еще и способы и еще и способы [музыка] containing a phone снова загрузим модель и что мы теперь будем делать сейчас мы обучаем слита все слои это в принципе нормально но может привести к

теперь будем делать сейчас мы обучаем слита все слои это в принципе нормально но может привести к переобучение то есть вот те фичи которую модель долго обучал на большом дата сайте они могут портиться и спуститься как бы в сторону тренинга тасс это нашего и как нам это исправить да мы хотим сейчас зафиксирует эта фича extractor и обучать только курсе кота как это сделать собственно каждого параметра модели есть такое атрибут как и пальцы по умолчанию как видим здесь мантру моларо бросать и of

модели есть такое атрибут как и пальцы по умолчанию как видим здесь мантру моларо бросать и of us epa и том же как бы поймем что вот для этих вот тендеров которые являются весам модель ему ленты не считаем 5 укажем число вещей она осталась неизменна классика то мы будем обучать поэтому здесь как бы мы руки клик вас град фолз не делай такие 10 шт она давайте про воду простите луче не время не попробуем запустить посмотрим результат вообще говоря сейчас мы очень инертно происходить еще быстрее

запустить посмотрим результат вообще говоря сейчас мы очень инертно происходить еще быстрее так как мы для ленты считаем для меньшего числа параметров принцип на остановке полторы минуты до например настолько кстати обшит можно объяснить тем что сейчас на какую-то сидят . маленько на то он и помещается том числе нее были менее параллельно делается и давайте опять повторим процедуру сохранить качеству от немножко подросла еще один метод заключается в том что мы не замораживает полностью наш вич

от немножко подросла еще один метод заключается в том что мы не замораживает полностью наш вич extractor а мы замораживаем только первые слои почему это может быть выгодно если посмотреть внутрь сверток алекс нету там увидим что первое слоя не содержат какую-то такую базовую информацию до условно если там горизонтальной полки полки руслан горизонтальной линии на фотографии если там вертикальные как способ кита округлости а вот скажем свертки которые ближе уже как курсе которого некие там поле

как способ кита округлости а вот скажем свертки которые ближе уже как курсе которого некие там поле сложные танки то скажем круги на правом углу при этом палка [музыка] как-то так это не в общем сложные и кажется что их тоже можно до обучения для нашей задачи а вот те которые это основные их не трогать они вполне себе под огонь давайте в 3 служило людям наш элекснет и введена во времена этого число слоев фичи экстрактора которую мы хотим возможность и дальше мы делаем рекорд град фолз только

слоев фичи экстрактора которую мы хотим возможность и дальше мы делаем рекорд град фолз только для первых слоев остальным мы тренируем опять делаешь тоже самое классификатор делаем клык . размер настигла top fun собаки интересно что мы кладем 2 адам в этом мы кладем руки на туннель только те слои которые нам нужны то есть те которые разморожены ecu секатор можем просто плюс делать как бы раз такой лист из параметров получится scheduler написано сколько давайте запустим тренировку так мы

такой лист из параметров получится scheduler написано сколько давайте запустим тренировку так мы получили качество 8 954 это лучше чем первый способ чуть хуже чем 2 суть в том что изначально вот просто глядя на нас это возможность кажется будет лучше и что хуже и поэтому пробоваться наконец-то кимчи нету этом со звездочкой немного в чем заключается вместо заморозки слоев давайте будем пробовать делать разные лёрн грейт и накажу слои как-то сделать собственно первый этап ничем не отличается

делать разные лёрн грейт и накажу слои как-то сделать собственно первый этап ничем не отличается давайте загрузим алекс над и сразу это поменяем дни и курсе кота теперь что мы делаем нам не нужно ни как вставлять и quoris град мы уже урон где будут ручки что нам нужно нам нужно как-то по-другому лицензировать наши оптимизатор обычным первым параметром оптимизаторы : является там скажем модуль . params в нашем случае это будет не совсем так у нас будет низ чем вы состоять каждую я ставлю никто

params в нашем случае это будет не совсем так у нас будет низ чем вы состоять каждую я ставлю никто не дать ему рукава параметрам собственно то есть 1 минута и скажем давайте сначала выставим модуль . курсе файл . параметр туз но пока что не были лирник рыть не буду выставлять а вот дальше кажется чуть-чуть [музыка] здесь надо просто по факту что улик я ваще происходит мы просто говорим документы нам передвигаться на 4 равных будет говорит давайте если мы выйдем на костика вставить один минус

нам передвигаться на 4 равных будет говорит давайте если мы выйдем на костика вставить один минус 4s на посмотри на -5 то есть единица на пятом месте плотными и теперь можем как бы указать базовый michelin great 4 число элементов от этого места которого качеству термин params много быть в принципе каким угодно то есть мы можем даже на каждый слой прям выставить свой ли рынка ит который был как-то линейный например растянем к концу то что конце классика то который мы хотим тренировать иногда это

линейный например растянем к концу то что конце классика то который мы хотим тренировать иногда это помогает как ты лучшим улучшить на домен давайте посмотрим как получится у нас оптимизатор есть критерий теперь есть швы давайте скоплений у нас он мог рублёв то есть раз не ровный пол нормально лицензировать или пекине вокруг и начнем тренировку наряду мы готовы на как миниатюра сила самого высокого сказал числе сам не зна получат свои лучшие дни но получилось лучше . да вышел чего 90 процентов

сказал числе сам не зна получат свои лучшие дни но получилось лучше . да вышел чего 90 процентов сейчас это 98 единственной стороны в общем надо когда раз пробовать смотреть у не ограничивать светлый поднимет ну а теперь прогреваю поговорим немножко поверку говорим про в архитектуру как я уже сети сейчас бывает ну то есть начнем скажем кажется 2013 года алекс 15 м году у нас была выгода что в ней в не просто чуть больше слоев на самом деле так же у нас есть мы видим такими покидали свёртка

ней в не просто чуть больше слоев на самом деле так же у нас есть мы видим такими покидали свёртка свёртка дальше max payne то есть если раньше только на свёртка было и дальше pulling сейчас несколько тут у нас на данный момент на экране и включим также можно и без разделения между pitch экстрактором и котором тоже весьма классическая схема вот единственное что до больше чем 19 слоев до 19 блоков вы в ней никогда не увидите из-за того что не один ты уже начинают когда ситуация в этом говорить

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

просто руки не было чуть чтобы делали замораживали весь экстракта ее тренер вальта классика давайте двигаться дальше следующий день такая обычных сетях для который мы рассматривали выше там у нас свертки по изображения не фиксированного размера не одни и те же и как бы возможно что здесь у нас будет круто маленький объект они - реагируют если он будет большим и то он уже не будет реагировать и это вроде как один и тот же объект вот примеры туда совать и обрели на него вставлять у нас такая

и это вроде как один и тот же объект вот примеры туда совать и обрели на него вставлять у нас такая большая к смысле кроме относительно всего изображения собак на дальше чуть правее сама крови чуть меньше имя самой правой картинке у нас самая маленькая такая собака относительно размера направлены вообще по размерам что можно сделать с этим вот давайте тогда возьмём свертки игр 1-го размера но собственно для большой собаки прибыть всего пять на пять для средней 3 на 3 и медали и потом дети

собственно для большой собаки прибыть всего пять на пять для средней 3 на 3 и медали и потом дети сварки группируем посмотрим на них и придадим следующие сам простая версия дальше здесь у нас как бы уже ваш кумир доверься если у нас можем изменять число каналов маска слоя вообще для вот изменение против двух каналов правило делать с таким трюкам как свертки 11 их можно увидеть очень часто вы скажете ну что за глупости тоже просто по пикселей на как-то непонятно да с первого раза ну что они

скажете ну что за глупости тоже просто по пикселей на как-то непонятно да с первого раза ну что они делают они берут и и факт они как-то уменьшать число каналов и увеличу большим подгонять нужно нам число каналов которое было привычный станет на следующем вот можно добавить такие схватки что еще как я уже говорил в предыдущей модели нас нет смысла ставить больше чем 19 слоев дочь качество почему это происходит ставят слишком много ингредиенты самого начала не доходят до конца в общем качество

это происходит ставят слишком много ингредиенты самого начала не доходят до конца в общем качество падает и не нас самих фичей получается не очень хороших первых слоя как с этим борется принцип шина датчики наговицын suction оказалось несколько таких ветвей они делать низко классификаторов таким образом скажем после тело slowdown встретились который после там 5 прозрению сам конца таким образом мы читаем лосс на только вот самом конце да на нашем основном классе катаре а еще вот здесь вот на

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

момент авторы статей лучшие качественную смеси за счет того что они начали подавать и изображением большего размера но 244 пятен весело 4 a200 нас непобедимости деле поэтому нам понадобится немного другой лета сайт доктора войта укрываются и управлением месяцев 4 размера 200 нет нет давать его инициализируем и попробуем принимать нашу модель так сейчас точно убежусь что ну программами кажется внутренним делом давайте попробуем сделать его сам натру на и предлагаем заморачиваться на это не хотим

делом давайте попробуем сделать его сам натру на и предлагаем заморачиваться на это не хотим просто мы обратимся модель ночи ставлю код из предыдущего пункта исключением при вы строки но давайте все-таки заморожен до 1000 выпуска и так как я говорил в inception у нас несколько поэтому процедуры хантинга здесь только выключаться давайте загрузим могло экстрактор и тут а нужно будет заменить сразу два слоя потому что у нас алпатов 2 и как бы суммируются breath сцене и что-то в итоге все остальное

слоя потому что у нас алпатов 2 и как бы суммируются breath сцене и что-то в итоге все остальное нас не отличается и давайте запустим тренировку ну пока тренируемся давайте обсудим ещё парочка архитектурка там тоже попробовать которые есть в библиотеке торчишь но первые три знать собственно с проблему затухание градиентов можно бороться по разному можно не только добавлять какие-то классификаторе середины сети можно еще и делать такие так называемый residual connections то есть на каждом слое

середины сети можно еще и делать такие так называемый residual connections то есть на каждом слое мы берем и перебрасываем на следующий дано из предыдущего тимур за градиента на осмотр он прокидывать всю сеть и обучить и недель не останавливаться и фичино сам при росте включается довольно гибкими и такая классика сейчас я наверное тоже было ними не использует но все же свое время она давала хорошие результаты и так как 1 к настоящему глубокая сеть можно делать такие 100 писем молока и так далее

результаты и так как 1 к настоящему глубокая сеть можно делать такие 100 писем молока и так далее качество от этого только растет но тут как будет снова возникает проблема что свертки одни и те же и нам хочется сделать как бы несколько литников данные могут идти как это сделать в отличие от обычного блока резная то идем еще одно можно сказать размерность которых они будут говорить о числе путей которые могут идти данными в оригинальной статьи это называется координате чем больше кардинале чем

которые могут идти данными в оригинальной статьи это называется координате чем больше кардинале чем больше путей и в итоге как бы выход кого-то слой это сумма вот этих вот сечений давайте теперь твоим ножкам оптимизация как эту сеть можно оптимизировать и мне архитектуру ну вот сама левой картинка здесь справа но чем во первых да на этом изображении втором на самом деле все эти архитектурные q ленты давайте разбираться почему так самое первое вместо того чтобы для каждого пути расширяет число

давайте разбираться почему так самое первое вместо того чтобы для каждого пути расширяет число каналов тут есть и 6 32 раза как на картинке мы можем сначала перед увеличении размерности их конкатенировать по каналам то есть вот у нас с каждой сети до выходят 4 канала видео из второго канала 4 из 2 пути у хоть четыре канала и так 32 раза получать 128 каналов да и мы их вот друг на друга как бы наставляем получать такую полоску и уже после этого мы 128 приходит 256 это ускоряет паштете и плохо

получать такую полоску и уже после этого мы 128 приходит 256 это ускоряет паштете и плохо кто-нибудь становится эквивалентно любом случае то есть и слева и справа 7 штук семью это не те живых зависимости идем дальше тут немного сложнее как нам превратить 1032 пути в одну свёртку много необычная групп kongo южная называется куковать верстка мир так редко говорить в общем цветов для что свертки есть еще один параметр называется групп так как бы число по факту группе я дерут этих у сверток сейчас

еще один параметр называется групп так как бы число по факту группе я дерут этих у сверток сейчас будем разбираться что это такое слово что такое обычно себя качество если ему находит приходит с один канал 2 каналов целом мы можем сгруппировать статья ног свертки таким образом но все-таки повозки длина карты полоски циане то есть 6 входных каналов что мы делаем очень грубо говоря когда это опускаем картинку числа мы для каждого канала к меня мы берем первый канал первую свёрткой зато полоски

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

получаете каждый такой по розочки у нас c1 свёртка и всего полосок c21 и нажим на c2 очень просто теперь как на можно уменьшить число параметров сейчас будет маги смотрите давайте теперь выходное выходное на две части канала и теперь давайте просто подумать день надо берем первую часть переводим ее u2 первую часть ролл тендера как это сделать ну наверное нам понадобится теперь нас их 1 размерность 1 пополам выходная c2 значит нам нужно c2 вам полосок размерности длиной ценим повторную бронницы

1 пополам выходная c2 значит нам нужно c2 вам полосок размерности длиной ценим повторную бронницы один пополам канал и того сколько нам понадобится нам понадобится садим пополам и умножить на 32 пополам сверток я засек теперь давайте проделаем то же самое с второй части вторую часть 31 stanger c2 план то есть у нас все параметры для сколько получится 2 умножить на c этим пополам а нам-то что на 2 1 1 5 1 которой часть так вот этот применении к 1 к 2 части называть как раз таки [музыка] что

на 2 1 1 5 1 которой часть так вот этот применении к 1 к 2 части называть как раз таки [музыка] что происходит мы можем во-первых части разделять она in частей и вот это н это как раз таки число каналов и таким образом мы вроде как приводим один тендер другое но при этом делается с гораздо меньшим параметров и очень узко награбим что он здесь видим здесь если мы поставим групп 32 то есть мы как раз таки разделим на наши исходу этой цели на 32 части и вот эти отметки на это будет трудный

как раз таки разделим на наши исходу этой цели на 32 части и вот эти отметки на это будет трудный ковалентно тому что он будет делать дальше вот операция таким образом чисто внешне если возьмем обычный блок резне то и вот то что нас здесь получилось они они очень похожи и местных отличия этого группа восьмерки только что показали что ты группа ваз велта нам дает как раз таки тридцать два типа который может идти изображение вот так а и еще один бонус значит отличаются сеть который рассказывал

может идти изображение вот так а и еще один бонус значит отличаются сеть который рассказывал насколько я понимаю это все до 2015 года резник сколько помню 2015 выбрать же посмотреть какой-то 1708 2020 года кстати статья интересная с нанесенным детищу много графика вдовой допустим последний союзник 100 признак сайт костаки дорожки которым мы разбирали как видим у нас тут меньше и еще они исследовали одну штуку в общем они увеличили число а вот этих вот слоев и сравнивали это с тем что мы

одну штуку в общем они увеличили число а вот этих вот слоев и сравнивали это с тем что мы увеличим число этих путей кардинале тьi догадалась что на бой лугано краски ничего чисто путей то есть не за такое количество параметров мы получаем лучшее качество такие интересные обязательно очень ссылка есть можете почитать потом мяча с расскажем о чем-то более современным полностью я вряд ли расскажу об этом но вот какое то представление будете иметь в чем суть значит сейчас всё больше и больше людей

этом но вот какое то представление будете иметь в чем суть значит сейчас всё больше и больше людей [музыка] заботит не просто качество сети а то качество которое она выдает при своих размеров условной даже если там кто-то придумает сейчас нас текстура с огромном количестве нами так кто мешает идеальной задачу и использует ну ты не сможете то что не слишком много параметров и на север она влезть не всем денег хватит чтобы обслуживать такой сервис на котором работает это неровных сеть что можно

не всем денег хватит чтобы обслуживать такой сервис на котором работает это неровных сеть что можно сделать можно как-то а вторая проблема это какая что обычно у торги текстуру которой есть мы придумали люди и они в принципе так то просто по своему чутью сделали столько то количество фильтр здесь такой размер изображения здесь настолько там как-то грубо говоря увеличена в два раза там 3264 вот это все не очень сейчас встречается еще 24 тысяч 48 цирке там магически немного константа что если это

все не очень сейчас встречается еще 24 тысяч 48 цирке там магически немного константа что если это не совсем эффективно способ и вот google 2015 году представил новый архитектуры люблю архитектуру сетей называется фешен пек что не делали они во первых а поделили то есть давайте посмотрим щик каким параметрам можем увеличивать сеть там число каналов размер входного изображение число слоев и как далее в общем что они сделали для начала нет а мы запустили глиссер что есть просто по искали по всей

в общем что они сделали для начала нет а мы запустили глиссер что есть просто по искали по всей сетки вот это вот гипер параметров что-то оптимально потом обучили еще не алгоритмы этой сетки суть в том что их алгоритм он выдает на для такого размера выдает как бы оптимальную архитектуры с точки зрения лосса и скорости без которой тренера вносить работа что у них получилось не получился такой у архитектура здесь мы видим до свертки из мам равны то мы сейчас не будем покрывать но суть в том что

здесь мы видим до свертки из мам равны то мы сейчас не будем покрывать но суть в том что если мы смотрим на график да у нас здесь по оси снизу изображена го числа параметров по вертикальной оси у нас и звено собственно керосина и том же самом ужинаете и мы видим что вот сейфе черт это не скажем при размере признаться 152 это как мы видим ждите смелых параметров с не может сравниться вот и fishing net b1 который меньше 10 миллионов параметров она даже лучше с этим тоже можем поиграться внизу я

net b1 который меньше 10 миллионов параметров она даже лучше с этим тоже можем поиграться внизу я оставил код как можно погружать модели фишек это суда может он b12 поставить и так далее в общем если у вас будет время то отсюда можно просто скопировать уже курт который для обучения был создан и посмотреть какой керосин о водоеме принципе вот сейчас до сих пор используют модификации пишет на это и это вполне современной архитектуры это то что можно использовать вот реально мире сейчас давайте

и это вполне современной архитектуры это то что можно использовать вот реально мире сейчас давайте посмотрим я думаю совершил уже отработал так печатал учитесь у нас 4 он чуть выше чем magic но неплохо в принципе я не сильно оптимизировала как-то по методов intune нгам на этом я думаю все в принципе можете тут все ссылки есть на история лапой торчат по трансферу бы там собственного трон это mitas это используется также то ссылки на курсе я 231 ну и здесь тоже они есть собственно про круг

mitas это используется также то ссылки на курсе я 231 ну и здесь тоже они есть собственно про круг свертки если вы чё-то не по навету можно почитать доступным языком написано всем удачи в изучении св терпения и всего доброго

привет меня зовут то мигом сова и сегодня у нас занятия по сегментации план сегодняшнего занятия такой сначала мы обсудим что такое задач пигментации какие виды задач сегментации бывают дальше мы обсудим как исторически развивались идеи решения этой задачи и какое в итоге является стоит zart & дальше обсудим архитектуры конкретные применяемые для задачи сегментации и трюки которые в этих архитектурах присутствуют давайте начнем задача сегментации здесь на картинке вы видите визуализацию трех

присутствуют давайте начнем задача сегментации здесь на картинке вы видите визуализацию трех разных задач это детектив semantic segmentation и интенсивным . детекция это задача который мы сегодня разбирать не будем она будет власть на следующей лекции но стоит упомянуть для понимания разницы между акции сегментации детекция это когда нам на картинке нужно найти местоположение некоторых объектов например здесь на картинке находятся пять человек и и сетка для детекции видим на обучалась находить

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

задача сегментации не только в том чтобы найти местоположение объектов но еще и понять для каждого пикселя картинки каком объект она принадлежит принадлежит ли она объекту который мы ищем или она принадлежит другому объекту например фон и задача сегментации бывает разное бывает semantic сегменты шин по русски тематической цементации и интенсивным пишем если честно я не очень знаю как это будет по-русски они отличаются следующем семантической сегментация вам нужно найти какие пиксели принадлежат

они отличаются следующем семантической сегментация вам нужно найти какие пиксели принадлежат конкретному классу объектов какие не принадлежат то есть смотрите здесь все пикселей которые принадлежат хотя бы одному человеку покрашенный в один цвет то есть по сути semantic сигни печь на это значит что все пикселя которые принадлежат объектом 1 класса до покрашенный в один цвет объекты других классов будут покрашены другой цвет install segmentation отличается тем что тут нужно покрасить пиксели

будут покрашены другой цвет install segmentation отличается тем что тут нужно покрасить пиксели объектов каждого из объект отдельных в разные цвета то есть смотрите здесь пять человек и пиксели всех пяти людей покрашены в разные цвета ты сетка понимают что от синие и желтые люди хотя они стоят рядом что это разные люди редко понимает где кончается пиксель одного человека и начинается пикселей другого человека в этом состоит разница между задачами инстансе дмитрий шин и семантическими вещи

другого человека в этом состоит разница между задачами инстансе дмитрий шин и семантическими вещи хорошо а еще бывает такое различие задачка секунд ации бывает задача где нужно сегментировать всю сцену то что мы видим на картинке чаще всего по английски называется сен русские как бы сцена картинка вот слева вы видите картинку где все пикселя картинки покрашена какой-то цвет это значит что наша сетка должна определить для каждого пикселя каком объект она принадлежит например голубые пиксели это

должна определить для каждого пикселя каком объект она принадлежит например голубые пиксели это люди синие пикселя это собаки красные пикселей тары вот то что то странное например лисы и зеленые пикселя это форм или травах справа вы видите ту же самую картинку только сегментировано немножко по-другому здесь сегментированы только живые существа скажем так то есть эта сетка она обучалась только находить на картинке определенные классы объектов и только их раскрашивать то что там есть какие-то

находить на картинке определенные классы объектов и только их раскрашивать то что там есть какие-то другие классы и и в принципе не интересуют в принципе вот такие различия бывают постановка задачи сегментацию принципе эти различия не играет сильно большой роли о том как решать задачу dignitas поэтому давайте просто пойдем дальше давайте строго сделаем постановка задачи сегментации ну что это значит мы определим что должна подаваться сетки на вход и что сетка должна выдавать новых вот давайте

мы определим что должна подаваться сетки на вход и что сетка должна выдавать новых вот давайте рассмотрим картинку вот этой женщине которая здесь стоит а на выход сетка которая будет делать задачу сегментации должна будет выдать картинку такого же размера что и входная картинка где для каждого пикселя входной картинки будет определено какому классу этот пиксель лежит то есть мы должны заранее знать классы на который мы будем делить нашу наших одно изображение то есть например я хочу а

знать классы на который мы будем делить нашу наших одно изображение то есть например я хочу а редактировать людей собак кошек и деревья это 4 класса а может быть я хочу детектировать собак кошек людей деревья и еще 5 класс все остальное бы грант то есть я хочу чтобы вся моя картинка была покрашена какой-либо какие-либо цвета заранее нужно знать для сдачи сегментации на какие классы вы будете сегментировать вашу картинку вот здесь на этом примере на слайде я качусь имитирует мою картинку на

сегментировать вашу картинку вот здесь на этом примере на слайде я качусь имитирует мою картинку на классы 0 будет класса но он то есть все остальное грубо говоря и 5 каких то понятно классов 1 класс это люди 2 класс эту сумки третий класс это трава 4 дорога и пятое издание и я хочу чтобы моя сетка в итоге выдавала для каждого пикселя номер классы которые можно приближать ну на самом деле вы понимаете что сетка номер класса выдавать не будет она скорее всего будет выдавать вероятность то есть

что сетка номер класса выдавать не будет она скорее всего будет выдавать вероятность то есть на самом деле у нас до сдачи очень похожие задачи классификации задачи классификации у нас тоже была сколько-то классов и у нас последний слой имел активацию softworks и после активации софт максим задержал он содержал для каждого он содержал во-первых только нейронов столько у нас классов то есть если 6 класс авто 6 нейронов и в каждом не роль никакого было записано вероятность принадлежности каждому

класс авто 6 нейронов и в каждом не роль никакого было записано вероятность принадлежности каждому классу вот здесь у нас будет примерно тоже только у нас будут вероятностей принадлежности для каждого пикселя каждому из класс то есть это значит что для каждого из пикселей у нас будет out пути 6 чисел вероятности принадлежности к каждому из класса то есть получается аллах вот у нас будет такой вот трехмерный как трехмерный фильмах в асино вот здесь вы видите что как хотелось бы чтобы наша сеть

трехмерный как трехмерный фильмах в асино вот здесь вы видите что как хотелось бы чтобы наша сеть выдавала ответы вот здесь красненький это один это класс person вот это как раз покрашена область который соответствует женщине 5 the building как раз там где вот примерно здание ну и так далее вот это то что мы хотим чтобы наша сеть выдавала ну и в качестве loss мы будем как бы использовать тот же самый суд настолько он будет пиксель барс не каждого пикселя независимая мы будем рассчитывать лось

самый суд настолько он будет пиксель барс не каждого пикселя независимая мы будем рассчитывать лось то есть кадры персей он будет уступать как отдельным молоку там нашей сетке к которым будет принимать применяться лосс классификации мы будем понимать насколько сетка хорошо классифицировала это вот такая постановка задачи сегментации давайте перейдем к идеям решения сначала мы рассмотрим самые примитивные идеи решения которые были придуманы на заре и развитие deeper него есть задач сегментации

идеи решения которые были придуманы на заре и развитие deeper него есть задач сегментации давайте рассмотрим теперь другую картинку на нем будет сейчас коровок но мы помним что классифицировать нам нужно каждый печь в принципе мы понимаем что на прошлом слайде мы свели задачу сегментации по сути задачи классификации каждый пиксель нам нужно классифицировать а что мы можем сделать давайте мы просто поделим нашу картинку на кучу кучу окон а то есть для каждого пикселя мы возьмем окно с центром в

поделим нашу картинку на кучу кучу окон а то есть для каждого пикселя мы возьмем окно с центром в этом пикселей и скажем высотой 5 пикселей то есть вот такое вот окно будет 10 на 10 или 5 на 5 или высоту считать как середины в этом пикселей и вы для каждого пикселя мы возьмем такое окно и вот эти окна мы будем пропускать через какой-нибудь обычный все для классификации скажем через ресниц и эта сеть она нам будет выдавать какому классу собственно этот пиксель средний принадлежит например здесь

она нам будет выдавать какому классу собственно этот пиксель средний принадлежит например здесь я хочу сегментировать коров либо корова лейбл background поэтому моя сетка для классификации будет выдавать либо налево единицы то есть либо корова либо трава поговорим вот таким образом мы возьмем маленькая кошка для каждого пикселя и вот это окошко прогоним через сетку которая нам классифицирует этот пиксель середине но это у нас был классифицирован каждый пиксель собственно мы решим задачу

этот пиксель середине но это у нас был классифицирован каждый пиксель собственно мы решим задачу пигментация соберем из итоговых ответ для пикселей целую картинку и покрасим ее соответствии со от это ми нашей сетки для классификации наверное вы уже поняли какие проблемы есть у этого подходит во первых это очень дорого считать потому что нам для того чтобы сегментировать одну картинку нужно сделать очень много проходов через сетку для классификации если мы для каждого пикселя делаем такое окошко

очень много проходов через сетку для классификации если мы для каждого пикселя делаем такое окошко и прогоняем эта кошка через сетку для классификации то получается если пикселей в картинге там 256 нам нужно будет 256 рад сделать инферн сети для классификации что очень долго ну и наверное что еще хуже эта точка на самом деле качество такой сетки наверное будет не очень хорошее ну почему потому что кажется что вот в одном таком окошке если она довольно маленького размера соберусь с довольно мало

кажется что вот в одном таком окошке если она довольно маленького размера соберусь с довольно мало информации и не всегда сетка повар одному такому кусочку где нарисована пуха сможет понять что или действительно кусок коровы наверное даже человек еле сможет понять что это точно кусок короллу потому что это похожее на грязь или камень или все-таки польши но если делать большего вида картинку то будет сложно сети понятие какому классу принадлежит именно средний пикселей например если у вас будет

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

возьмем нашу сетку и дальше применим к ней несколько сверточек слою и сделаем так чтобы после каждого свёрточная слоя размер карты активации который получится совпадал с размером исходной картинке мы с вами умеем это делать мы разбирали это на уроках бассейна достаточно просто сделать поди то есть здесь у нас сетка будет состоять из канва левшинов одинакового размера с 1 га так что после каждого can валюша на размер карта активации будет равной размеру исходного изображения и у нас будет не

can валюша на размер карта активации будет равной размеру исходного изображения и у нас будет не будет линейных слоя слоев это будет чисто falling in value шины я плох и а лампу там будет последний карта активации для того чтобы последний карта активации было а вот потом она должна иметь размерность htc где h0 ну ты высота на ширину и цвета количество класс то есть должно быть c карт активации в последнем слое ну мы уже разбирали зачем для того чтобы у каждого пикселя был вектор размерности c с

слое ну мы уже разбирали зачем для того чтобы у каждого пикселя был вектор размерности c с вероятностями принадлежностей этого пикселя каждому из класс такие же здесь проблем на самом деле эта идея намного лучше предыдущей идею так сетка действительно будет учиться но есть недостаток опять же это очень дорого почему очень дорого и потому что здесь у нас очень большие комбинационные слой и это значит что у нас будет очень много пар она меньше параметрах мы можем сделать тем что сделаем меньше

что у нас будет очень много пар она меньше параметрах мы можем сделать тем что сделаем меньше слоев но это тоже будет плохо потому что на уроках по цене мы с вами разбирали что каждый слой последующей в revolution и network он прореагирует на более сложные паттерны и чем предыдущий и для того чтобы сетка канва лекционная она была хорошей хорошо обучилась нужно по крайней мере достаточно большое количество карточных слоев чтобы первой своей материале низкоуровневой информацию вторые более

количество карточных слоев чтобы первой своей материале низкоуровневой информацию вторые более абстрактную треть еще более абстрактные так далее и чтобы они друг друг другу подстроить поэтому в любом случае здесь будет очень много параметров а учитывая что мы хотим сегментировать довольно a high resolution изображение 1024 на 1024 тут будет просто бомбическое количество параметров что довольно плохо хорошо идем дальше давайте подумаем здесь у нас как бы все хорошо единственная проблема что

плохо хорошо идем дальше давайте подумаем здесь у нас как бы все хорошо единственная проблема что очень много пранков что значит нужно сделать значит нам нужно каким-то образом сжимать информацию которая была во входной картинки и уменьшать количество параметров нашей сети тут мы на самом деле приходим туда откуда начинали к сеткам для классификации смотрите какая идея давайте мы возьмем нашу знакомую сетку для классификации например в garry's mod inception или любую которую вы вы учили на

знакомую сетку для классификации например в garry's mod inception или любую которую вы вы учили на предыдущем уроке возьмем нашу картинку с коровами и прогоним ее через эту сетку ну допустим выкинем у этой сетки еще курит и на письме и потом в конце мы получим какую-то карту активации она будет размерности меньше чем наш изначально картинка так давайте просто потом идет об сэмплер то есть об сэмплинг это значит мы просто повысим ее резолюцию по вы семью resolution у каким-нибудь тупым способом

это значит мы просто повысим ее резолюцию по вы семью resolution у каким-нибудь тупым способом например вот не размер на ибо подходит это когда вот вы вот такую маленькую картинку вот такого вида 1234 вы ее апс-м птицы в два раза просто вот дела из иного пиксель четыре пикселя то есть вот такой вот велимир или мире сна и бар interpolation и получим таким образом картинку который будет по размеру равна исходной нашей картинки будет из коровы принципе это работает то есть вот здесь вот картинка

равна исходной нашей картинки будет из коровы принципе это работает то есть вот здесь вот картинка которую можно увидеть в интернете по поводу этого подхода чаще всего вот у нас опять же какая-то картинка на сервис с котом и собакой вот она проходит через обычную сетку для классификации и вот в конце бах и она вот так абсент лица то есть интерполируются и из последней карты активации делать очень большая картинка и мы очень человеку так используя наш floors чтобы вот эта большая картинка в

большая картинка и мы очень человеку так используя наш floors чтобы вот эта большая картинка в итоге полученная было карте сегментации можно на самом деле и не выкидывать фальконе ты славик можно вывести составила 10 для классификации fully комета слои и потом просто после например предпоследнего слоя это предпоследний слой он виде вектора можно его разворачивать в картинку и потом ее опция в принципе так тоже делать это тоже работают так вот это действительно работает но этого конечно же тоже

так тоже делать это тоже работают так вот это действительно работает но этого конечно же тоже есть недостатки кажется что сегментации после такого будет ну не очень не очень не очень точно почему потому что у нас есть вот этот вот скажем так тонкое место там где мы делаем комплект абсент линкольн ниоткуда новую информацию не берет то есть у нас вот агавы картинку историю же информации сколько и в последнем фичу майки который содержал довольно много информации на потому что вы просто по

и в последнем фичу майки который содержал довольно много информации на потому что вы просто по размерности было меньше изначальной картинка ну и собственно вам плохо устанавливать информации поэтому кажется что сегментации наборе довольно шумный дальше когда мы прогоняем нашу картинку начальную через сердечную сетку down сэмплинг вот макс pulling я имею ввиду который присутствует обычно в ссор точных сетках и большой строить но по-крайней мере строить 2 хотя бы в конвекционных слоях они

ссор точных сетках и большой строить но по-крайней мере строить 2 хотя бы в конвекционных слоях они разрушают пространственную информацию но мы с вами про это говорили когда рассуждали пуссен и вот здесь кстати тот пример который я приводил в лекции посеяны почему строитель дан сэмплинг совершает преступную информацию тогда я говорила что это хорошо реклассификации потому что собачки могут быть в разных местах картинки и на самом деле макс пулен истра или они некоторым образом даже помогают

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

пиксель и собаки именно в том месте где они находились в начальной картинки то есть и данные задачи на нужно наоборот не потерять пространственной информации вот так и склеила variability на самом деле это проблема она под проблема скажем так 2 пункта на на всякий случай я скажу а не отдельно это никогда на собак может быть в разных местах картинки а тогда собака может быть разных размеров то есть нам нужно уметь детектировать и сегментировать точнее собаку и больших размерах когда на занимают

нам нужно уметь детектировать и сегментировать точнее собаку и больших размерах когда на занимают там треть картинки и когда она довольно маленькой занимает он не знаю нам двадцатку карте вот такие дела я говорила что на самом деле такие вот то что мы сейчас рассмотрели вот этот подход свёрточная нейронная сеть и и потом аптек лингам он на самом деле работает и он работал довольно долго до 2016 года точно но что делали любили чтобы улучшить вообще результат сегментации то есть мы с вами сейчас

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

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

для классификации поэтому абсент ведь а потом еще делает пост-процессинг она живет она нормальная то есть ее можно использовать и на самом-то деле это то что лежит в основе и самых самых новых и самых стоит уже арт подходов к решению задачи сегментации вы это увидите в следующем видео здесь опять же повторюсь что то идея которую мы только что разобрали идея cnn плюс аb сэмпл лежит в основе самых модных подходов к семи наций которые мы разберем следующем видео

Семантическая сегментация. Трюки: Deconvolution, Dilated Convolution

итак предыдущем видео мы поговорили о том что такое задач сегментации и какие идеи для решения этой задачи придумывали люди на протяжении времени также мы обсудили какая идея является основой для современных методов сегментации давайте напомню что это за идеи она проиллюстрирована вы тут внизу и эта идея следующее мы берем нашу картинку которую хотим сегментировать прогоняем их через сердечную часть любой сетки которые шея задачу классификации дальше после последнего свёрточная слоя мы получаем

любой сетки которые шея задачу классификации дальше после последнего свёрточная слоя мы получаем фичу маг и этот фичи маг оцеплен до картинки размеры такой которая у нас была изначально и учим сетку такую чтобы она в этом последнем абсолютной причем обе выдавала как раз карту сегментации для наших начальников этот подход называется fully ты валишь на network и у него конечно же есть недостатки недостатки у него следующий во первых это апс-м пунк то что мы используем оценка это плохо потому что

у него следующий во первых это апс-м пунк то что мы используем оценка это плохо потому что об сэмплинг вообще плохо восстанавливает информацию точнее он ее никак не устанавливает он просто resizer последние письма то большого размера это плохо потому что значит что у нас не будут хорошо прорисованные границы сегментации потому что у нас просто будет 30 большая картинка ну а это очень плохо цементация будет довольно шум и вторая проблема это то что когда мы прогоняем нашу сетку через вот эту

будет довольно шум и вторая проблема это то что когда мы прогоняем нашу сетку через вот эту канва леушин часть там есть страйты и макс пылинки и большие страны и маг спутники в этом месте они разрушают пространственную информацию об одной картинки ну а это для сдачи имитации довольно плох и 3 проблему которая на самом деле является под проблемой 2 это скилл и variability это значит что но архитектуры которое мы сейчас видим она не позволяет нам полной мере прошло сегментировать как большие

которое мы сейчас видим она не позволяет нам полной мере прошло сегментировать как большие объекты так и маленькие объекты на ну то есть это под проблем этой проблемы что пространственная информация разрушается как же это решать давайте пойдем по порядку решает будем с по одной проблеме рассмотрим первую проблему то есть об со мной плохо устанавливать информацию давайте заменим abs onclick на что-то более умное в итоге наша сетка будет выглядеть теперь вот так левые и часть стану где будет

что-то более умное в итоге наша сетка будет выглядеть теперь вот так левые и часть стану где будет подаем картинку на вход останется неизменной она все еще будет к январю шин частью то есть это все еще будут канва лишь на своей как у всех или задачи классификации но лучше того как мы получим последний фичи map из этой can ванюшин сетки мы не будем его просто обсыпать а прогоним через еще одна часть нашей сетке который будет называться бег на валюту дней будут какие-то свои и вся эта архитектуры

нашей сетке который будет называться бег на валюту дней будут какие-то свои и вся эта архитектуры тоже будет называться back on a dick and нет наверное по названию вам кажется что здесь происходит какая-то магия что-то обратно и операция свертки то есть вот мы раньше нашу картинку сворачивали несколькими фильтрами вот здесь вот а здесь мы будем ее как ты полному разворачиваться на самом деле да или нет сейчас мы поймем что же вот здесь происходит на самом деле свои которые находятся вот здесь в

нет сейчас мы поймем что же вот здесь происходит на самом деле свои которые находятся вот здесь в дек на валюту метр они называются транс пост can валюша конечно можно встретить название декана валюша своим чаще всего они наверное так и пишутся но на самом деле это немножко неправильное название этих слоев потому что так можно легко запутаться back in value шин заставляет вас думать о том что там происходит какая-то магия обратные к инволюции то есть вот было свёртка у вас изначально в левой

происходит какая-то магия обратные к инволюции то есть вот было свёртка у вас изначально в левой части сети а теперь проходит что-то обратная операция sword но на самом деле это совершенно не так давайте я расскажу что такое транс поиском болезнь вот у нас есть допустим фильмам 2 на 2 и мы хотим применить к нему операцию для кан валюша вы наверное по архитектуре сети уже поняли что операции дэк инволюция она служит для того чтобы каким то образом сделать из молекул причем апофис мог побольше но

она служит для того чтобы каким то образом сделать из молекул причем апофис мог побольше но вот в итоге мы так делаем побольше побольше и разворачиваем наш маленький фичи макэвоя картинку до размера исходного с карты сегментации так вот допустим у нас есть наших и чем об размера два на два я хочу сделать из него вечером размер опущу что я делаю сначала я сделаю abs ампул в sampling вот такого вида то есть я растянул эту картинку два на два картинку побольше например картинку размерности пять на

то есть я растянул эту картинку два на два картинку побольше например картинку размерности пять на пять как я это сделаю я вот поставлю двойку по телеку 413 и между каждыми вот этими пикселями 2413 поставлю панельку и так же слева и сверху каждого пикселя тоже поставлю по номер то есть у меня есть fitch ума по два на два получится писем от 5 на 5 и это всем клинкса стройдом 2 что это значит straight 2 значит что между двумя пикселями исходного маленького письма по у меня будет два пикселя то

2 значит что между двумя пикселями исходного маленького письма по у меня будет два пикселя то есть вот с двойки мне нужно сдвинутся на 2 вправо чтобы прийти в пятерку вот это значит стоит 2 я могла об смотреть мою маленькую фичи маку со спрайтом 34 5-7 10-15 как угодно и получить тогда вот этот большой фичу маг не 5 напиться там 10 на 10 1718 что угодно но здесь вот я об сам плюс с тройным 2 и дальше что я делаю это я вот этот вот большой фильм об которая получила после об самого просто

2 и дальше что я делаю это я вот этот вот большой фильм об которая получила после об самого просто сворачиваю некоторым хитром то сделаю операцию сварки обычную операцию с лодки такую же как у нас вот здесь вот в левой части сети никакую не другую магическую чисто простую операцию суркис ветру и вот после операции свертки ядром 3 на перевод этой большой фильмах у меня получится вот такой фишман клинике то есть таким образом нем все-таки увеличила размер этого фильма по помощи от sand king и

клинике то есть таким образом нем все-таки увеличила размер этого фильма по помощи от sand king и потом операции свертки но при этом увеличила не просто интерполировать все значения то есть у меня вот здесь вот получилось совершенно не то что получилось бы при интерполяции у этого фильма по а что под руку вот это называется опираться transport in value шин или операция также известны как бекон в лесу то есть transport in валюта это абсолютный плюс can валюша самый вот накидки можно посмотреть

лесу то есть transport in валюта это абсолютный плюс can валюша самый вот накидки можно посмотреть как он выглядит на самом деле здесь вы можете заметить что здесь вот синенькая это то что у меня два на два пикселя изначального фичу могу пыли и вот вот эти вот границы которые в общем вот эти вот границы это то что пиксели нолики которое добавит вы можете сказать что вот тут вот на самом деле как то неправильно потому что вы здесь же мы об самом деле вот таким вот методом что мы подпишем 254 13

то неправильно потому что вы здесь же мы об самом деле вот таким вот методом что мы подпишем 254 13 и потом одинаковое количество ноликов сверху внизу и между пиццу на а тут между пикселями получилось 10 это здесь в fb2 но на самом деле здесь все в порядке потому что здесь мы сделали абсолютным со встроенным 2 и еще пойдем добавить вот здесь внизу экрана если вы посмотрите на скриншот из репозитория точнее из документации по и торчат вот увидите что в torchi есть своя который называется can

точнее из документации по и торчат вот увидите что в torchi есть своя который называется can transform 2d которые собственно и есть развозка на валюту и вот у него есть параметры straight это как раз на параметры строить 2 например вот такой вот будет которая использовала есть параметр padding то есть поэтому стали можно добавить еще padding если я добавлю к этому стародуб один из нулей то получив брать вот такую картину что идут и дальше я сверну вот это вот fitch могу большую полученную с

брать вот такую картину что идут и дальше я сверну вот это вот fitch могу большую полученную с помощью 1 3 на 3 и будучи валюта уделяете фильма то есть и свеча нам по два на два я в итоге получилось и чем от 5 на 5 вот вот другой вариант транс пуском валюш на которые может получиться здесь смотрите получился straight 1 то есть я уже не засовывала нолики между пикселями изначально и чем мапо стоит один потому что 1 5 м нужно 1 сдвинуться для другого и сделал об 120 она вот и также свернула керна

один потому что 1 5 м нужно 1 сдвинуться для другого и сделал об 120 она вот и также свернула керна вам размера 3 на 3 получила итоговую письма от размера 6 на 6 и 4 на 4 получилось 6 мешать вот этот рассказ convallis и это то как работает распутство лишь бы поттер че на самом деле конечно можно считать что транспорт он валюша это просто применено и друг за другом операции об simply гаек инволюцию что я этим хочу сказать этим хочу сказать что на самом деле не важно каким образом сделано по

что я этим хочу сказать этим хочу сказать что на самом деле не важно каким образом сделано по темпу вот здесь мы делали обстоятельным именно таким образом то есть вот со строевым 2 так что вот когда я вас люблю вот эту картинку со стендом 2 получается вот именно такая картина но можно сделать на самом деле разными способами можно не ноликами заполнять чем-то другим или чем-то чем-то еще или как ты вообще по-другому и можно считаем что любое об simply и следом can валюша это собственно и есть

ты вообще по-другому и можно считаем что любое об simply и следом can валюша это собственно и есть только evolution 100 давайте рассмотрим какие акцент на gilt.com а точнее какие объем книги вообще применяются на практике вот есть один из самых простых вариантов абсент инга это не ресниц вот у нас есть fitch могу два на два десять двадцать тридцать сорок и я ее растягивайте чувак четыре на четыре стадии очень просто я беру каждый пиксель и из каждого пикселя делаю на 5 планет во настоящие

стадии очень просто я беру каждый пиксель и из каждого пикселя делаю на 5 планет во настоящие полностью с таким же пикселей вот из десяти получился квадратик 25,6 из 20 вот такой квадратик и страсти такое 40 такой и вот удобный и чумак размер 44 это не развилась дальше есть вариант от самсунга которое называется бадов mills он тоже довольно простой тут вот происходит примерно то же что там у меня происходило составим 20 чуть по-другому здесь у меня из 2 на 2 получается тоже 4 на 4 и я оставлю

происходило составим 20 чуть по-другому здесь у меня из 2 на 2 получается тоже 4 на 4 и я оставлю вот сюда вот десять двадцать тридцать сорок в такие места этого фильма по четыре на четыре остальные заполняя здесь немножко несимметричны получается но ничего страшного понятно почему это называется пэдов nails потому что ты эти нолики здесь они очень похожи на шапке гвоздей которые воткнуты в наших весьма дальше есть вариант абсолютными которые называются миллионеров это один из наверное самых

весьма дальше есть вариант абсолютными которые называются миллионеров это один из наверное самых популярных вариантов of sand king и когда вам очень по простому нужную присоветовать картинку из маленьких большую использовались вот именно такой вариант ресайза самсунга веление он немножко сложнее чем два предыдущих вариантов точно про то как он образуются вы можете почитать в интернете но скажу что там примерно такая идея что каждый пиксель вот здесь является взвешенным среднем 4 пикселя вокруг

там примерно такая идея что каждый пиксель вот здесь является взвешенным среднем 4 пикселя вокруг него так и четвертый самый наверное интересный вид интерполяции называется максом pulling и тут интерес состоит в том что что вы сделать этот путник нужно знать как вы делали макс полем в самом начале сети что я имею ввиду смотрите давайте допустим наша сетка она симметрична и вот эта сетка которая показывала мы изначально и вот тут у нее были несколько макс полинга вот они обозначены праздники и

показывала мы изначально и вот тут у нее были несколько макс полинга вот они обозначены праздники и вот здесь вот у нее есть комплекса и это вот так инвалюту network она состоит затулинка слоев i can эволюционным слоев и здесь вот нам полем кун валюта есть этом валюша слой так вот здесь макс полин здесь он полем макс pulling on the link и вот смотрите они соответствуют друг другу сетка симметричные поэтому можно сказать что тут макс pulling соответствует этому антуриум вот этот макс полем

поэтому можно сказать что тут макс pulling соответствует этому антуриум вот этот макс полем соответствует вот это моим полем глух но и так да и что я буду делать давайте допустим что я хочу здесь вот в этом on пилинги мою fitch ума по которой пришло отсюда абсолют вот мои ключ ума по один два три четыре я буду я апс-м 5 вот таким вот способом я сделала 4 на 4 какие-то четыре пикселя этой фильма об учителе на 4 посажу вот эти значения 1234 остальное заполнить для но как я пойму куда посадить вот

учителе на 4 посажу вот эти значения 1234 остальное заполнить для но как я пойму куда посадить вот эти четыре значения я посажу их туда откуда я в симметричном фича марки который я которому я применяла макс потом вот здесь вот здесь вот те пиксели которые тогда были максимальные в каждом из вот этих вот отделений этой фиче map и вот в те же места вот эти переписали здесь я посижу вот мое значение сейчас я попытаюсь еще раз смотрите вот здесь мы применяли макс пулю у нас была весьма по 4 на 4 и

сейчас я попытаюсь еще раз смотрите вот здесь мы применяли макс пулю у нас была весьма по 4 на 4 и мы делали из нее фичи map размеры два на два как мы это делали мы нашу фильма примеры четыре на четыре делили на четыре части по 2 на 2 и в каждой части из колена и больше любят вот здесь был 5 вы здесь 6 здесь 80 получили пять шесть семь восемь здесь мы запомним в каком месте вот этого квадратика два на два у максимальный лимит u10 был справа внизу каком месте квадратика вот этого был

два на два у максимальный лимит u10 был справа внизу каком месте квадратика вот этого был максимальный элемент деле плывут шествует внизу и вверху слева вот в этом квадратике максимальный элемент был внизу что здесь внизу справа и вот здесь симметричном анку линги когда мы будем из маленькой хочу на поделать большой ну вот ровный в эти места квадратика во 2 на 2 и посадим вот эти элементы то есть единицы пойдет вот сюда в нижний правый угол где была пятерка двое к пойдет вверх верхний левый

единицы пойдет вот сюда в нижний правый угол где была пятерка двое к пойдет вверх верхний левый угол где обула шестерка ну и так далее то есть таким образом мы используем некоторую информацию из вот этой can валютным сети это называется максом пули то есть иронии в том что люди сделали макс pulling а здесь вы теперь делать какой-то обратная операция monsun туда и такой унизительной часто используются так пока лингам это все давайте теперь посмотрим на нашу декан болезни который мы придумали

так пока лингам это все давайте теперь посмотрим на нашу декан болезни который мы придумали итак наша теперь новая сетка оно будет состоять не просто исккон валюша детки и апс-м king оно будет состоять из наболевшем сетки и в дайкон evolution сетки где отдай канва лишний сетка будет содержать свои on буллинга и канвы лишь на то есть страны оз convallis на своей are calling in value сам конечно же между вот этими слоями evolution сети и дикон валютам сети вы применяете активации чаще всего это

между вот этими слоями evolution сети и дикон валютам сети вы применяете активации чаще всего это лилу как обычно не забываем и если хочется почти можно применять здесь он pulling а потом ещё 2 конволле сам слой то есть он pulling up эта магазин pulling инволюции на пудинге могут быть раза а еще стоит упомянуть что здесь не обязательно это сетка должна быть центричной то есть вы можете здесь делать канва лишним цвет у там семью слоями odeco на волю салфетку с пятью слоями это в принципе не

делать канва лишним цвет у там семью слоями odeco на волю салфетку с пятью слоями это в принципе не запрещается вы же помните что изначально у нас вообще было сетка грег него лишь на свое было много этих сходен appsymap лидера тоже работаю единственное что у вас не получится тогда применить вот это слое баксом полинга общественной работой бурю и так это было решение проблемы о том что всем плохо устанавливает информацию и сейчас все 100 этого завтра же не конечно же использует back in валюш на

устанавливает информацию и сейчас все 100 этого завтра же не конечно же использует back in валюш на слои используют вот такой то есть и но у нас остается все еще две проблемы давайте попробуем каким-то образом решить проблему того что макс pulling большой straight разрушает пространство информацию на картинке но решить до конца мы эфирно не сможем но пытаемся про нее что-то с этим сделать давайте рассмотрим новый вид can валюша слоев на самом деле не очень новый пас мест измененной назовем его

рассмотрим новый вид can валюша слоев на самом деле не очень новый пас мест измененной назовем его daylight откажусь также они часто встречаются в литературе видео от рук инволюцию я не знаю правильно я произношу это французское слово но вот оно произошло вот из этого вот из этой фразы алгоритм true вот и выглядит он вот так как показы многих наверное вы уже догадались что здесь происходит здесь вот это синенькое это та та картинка которую мы сворачиваем вот эти уделяем фильтров но сворачиваем

вот это синенькое это та та картинка которую мы сворачиваем вот эти уделяем фильтров но сворачиваем и июне как обычно то есть не кладём этот зеленый фильтр 3 на 3 на кусок три на три картинки и не ходим вот так вот слева направо и сверху вниз а теперь мы некоторым образом обсыплем наш вид к той смотрите из фильтра три на три мы получили по сути фильтр 5 на 5 тем что между каждыми двумя пикселем нашего фильтра вы посадили еще 10 и это получилась такая канва лично с дырками есть по-русски просто

фильтра вы посадили еще 10 и это получилась такая канва лично с дырками есть по-русски просто я не знаю перевода дойла этот канва лежу на русский кроме как к этого лишены с дырками вот и формул его вот представлена на экране очень простая то что это элемент фичи мака которые вас получается это x и ты + r умножить на k элемент в начальный картинку умножить на значение фильтра америка ты и.р. если единица и это по сути значит что у вас обычный can валюш им то есть не доела этот без дырок если r

единица и это по сути значит что у вас обычный can валюш им то есть не доела этот без дырок если r единица то есть вы берете и три на право идти вниз если как бы сворачивается если р больше чем единиц то это значит что вы перескакиваете через один пиксель когда вы сворачивается то есть да и не тот ковалев конечно r может быть не только единицы как вы здесь на гифке она может быть и двоек и троек что можно еще вот так вот раздуть тут есть как 1 фотография в чем же вообще на самом деле profi 3

что можно еще вот так вот раздуть тут есть как 1 фотография в чем же вообще на самом деле profi 3 дойла what can валюша меня тут на человек говорить про проблему того что с тройные imax пулен где-то там пространственную размерность точнее про странную информацию съедают причем туда и в этот evolution во-первых ударил этот канва лишь небольшой рецепте field то есть это значит что используя всего три значения в kernel и мы можем на самом деле захватить большие пространства картинки смотрите вот

три значения в kernel и мы можем на самом деле захватить большие пространства картинки смотрите вот здесь вот слева это обычный канва лишь на три на три мы его посадили вот среди на изображении как бы захватили только от 9 петель из даже если мы сделаем из него invented in value шин с единицей вот нолик между каждыми двумя пикселями добавим то мы захватим уже больший кусок картинки этой канва люцией а если еще больше сделаем то заплатим еще больше кусок картинки то есть смотрите если вы

люцией а если еще больше сделаем то заплатим еще больше кусок картинки то есть смотрите если вы сделаете из чернила 3 на 3 daylight от керну какой-то то по сути это замене вам страсть то есть если вы находитесь вот таким вот керном как здесь посередине по картинке то картинку вашей уже будет иметь меньшую размерность чем она имела бы если бы вы проходили вот такие маркерной вам принты то есть на самом деле валютных здесь делает то что делал раньше строить раньше мы делали строить большое чтобы

самом деле валютных здесь делает то что делал раньше строить раньше мы делали строить большое чтобы у нас фильма был меньше в размере чтобы у нас было меньше параметров ну чтобы сетка не переобучать но это же мы можем сделать помощь ударил и кого душу ну и на самом деле дал этот канва лишним заменит также и пулю смотрите вот эта картинка из то есть такие которые предлагают использовать для сдачи 15 лет этак на валюша что они говорят вот есть картинка например с овощами который я хочу

для сдачи 15 лет этак на валюша что они говорят вот есть картинка например с овощами который я хочу сегментируйте что я делал бы раньше без доли видкон валюша я бы ну моей архитектуре там обычно как полинку канва леушин по линкам values металлы я бы тогда эту картинку спалила пополам например вот сделала будет два раза меньше по ширине и по высоте потом применила будет ней can валюша а потом в конце мы сам плела ее то есть об сам плела обратно чтобы карту сегментации получить того лежат меру

конце мы сам плела ее то есть об сам плела обратно чтобы карту сегментации получить того лежат меру что иммани картинка вот получилось бы примерно так но теперь я не буду делать макс планк на нашу картинку а просто пройдусь по ней помощью дает инволюкс вот рейд 2 то есть r20 и я сразу получил картинку примерно такого же размера и семи наций карты на ней уже будет лучше чем было бы вот при таком подходе и на самом деле действительно получается лучше то есть действительно л этот канва нюшу

подходе и на самом деле действительно получается лучше то есть действительно л этот канва нюшу некоторым образом выигрывает у подходы когда вы делаете просто move pulling и конгресс вот это было была попытка решения того что у нас наши и сетки большой стране ты мог pulling разрешает пространственной информации на самом деле до конца в эту проблему никогда не решить и потому что у вас в любом случае картинка она сужается пока идет по сетке карточный и сколько информации но всё-равно потеряете но

картинка она сужается пока идет по сетке карточный и сколько информации но всё-равно потеряете но далее этот can валюш на каким-то образом все таки помогает сделать эту проблему в менее выражен ну и давайте рассмотрим такую проблему скейла и на самом деле здесь тоже делает валюш не помогут потому что смотрите вот давайте допустим у нас есть две фотки . 1 вели песик большой другая вещь маленький и мы применим к ним конвекционные слои большому персику применим коновалюк шим условий большим р а л

мы применим к ним конвекционные слои большому персику применим коновалюк шим условий большим р а л и и тот кто лишь носу с большим р сильный растянем наш керну а к маленькому братику не сильно растягивать керна и посмотрим смотрите на самом деле здесь элементы пиксели наши выкинуло на большой картинке находится на теле же самых идейных местах что и вот на маленький картинки то что я имею ввиду вот здесь вот этот вот средний пиксель первой строки он находится примерно на носу и около глаз .

вот здесь вот этот вот средний пиксель первой строки он находится примерно на носу и около глаз . здесь тоже самое здесь вот нижний пикси находится вот на середине нижней и загривке или как это называется здесь вот он находится тут же на самом деле то есть по сути наша картинка обставленная вот вот песик об сам пленный персик вот этот вот и к январю шин deleted мы тоже как бы оксанку зависимости от высоты персиков и если мы свернём нашего левого . инволюкс мы получим примерно ту же информацию

от высоты персиков и если мы свернём нашего левого . инволюкс мы получим примерно ту же информацию что если с при нём маленькую спасибо с вот этим делает evolution и таким образом у нас будет инвариант информации и разных размеров это конечно хорошо только мы заранее не знаем какого размера объекта на картинке будут вы заранее не можем сказать сетки такого размер дал этот can валют нужны но ничего принципе страшно давайте применим ту же самую идею что применял inception когда мы рассматривали

принципе страшно давайте применим ту же самую идею что применял inception когда мы рассматривали на себя пущу на предыдущем занятии про архитектуры и сделаем просто несколько параллельных далее заткнулись то есть мы одну и ту же картинку подадим отверточные в 4 сверл точно слоя но например 4 можем там 7 и 8 сколько угодно правильных своего с разными р то есть вот мы свернем нашу картинку с с помощью дело идет к revolutions raid 6 свернем и иже с помощью был этот канва ли шанс рейд 12 и и же все

дело идет к revolutions raid 6 свернем и иже с помощью был этот канва ли шанс рейд 12 и и же все это 18 и и расследоваться 4 а потом то что мы получим 4 чем от и мы их просто слой и в итоге в сложной офисе марки будет как бы информация со всех четырех до но этот к нулю шинах и наверняка среди них будет нужной нам информацию об объекте но тут мог возьми ментальный маленький вопрос что фильма по полученные после этих четырех давай детка evolution будут иметь разный размер но в принципе это не

полученные после этих четырех давай детка evolution будут иметь разный размер но в принципе это не беда потому что можно их потом протолкнуть через такие ним слои чтобы эти слои выровняли размер чтобы можно было просто сложить а можно и просто сходить на самом деле сложить то есть там где нет информации просто дополнять и он реально вот это называется молча скилл контекст агрегатор и он действительно очень помогает то есть он действительно идет профит в сегментации есть предложенные другими

очень помогает то есть он действительно идет профит в сегментации есть предложенные другими людьми другой статье другая идея как побороть вот эту проблему с размерами объектов на картинке давайте допустим что делает от канва лишь неси они придумали и тогда как бороться с тем что у нас есть разные размер объектов на картинке на самом деле очень просто вместе далее that can валюш но мы распределим пулей то есть pulling основе вместо 4 pro или ngoen этот канва лишь на слоев у нас будет четыре

пулей то есть pulling основе вместо 4 pro или ngoen этот канва лишь на слоев у нас будет четыре параллельных пулек свой вот у нас будет им вот имидж мы ее прогоним трясины а дальше вместо одного буллинга мы сделаем четыре полинга такие что 4 полинга свернут на одну карту активации в четыре разные карта активации разного размера вот например одна новая карта активации будет вообще ими кратно растений другая карта активации в это иметь размерность два на два другая 3 на 3 3 на 6 например и дальше

другая карта активации в это иметь размерность два на два другая 3 на 3 3 на 6 например и дальше мы их прогоним через конго лишь на свой один-на-один чтобы у всех них 3 размерность уменьшит и единицы потом все их четыре разных карт активации полученным и об сам длину до одного и того же размера и только тонируем то есть вот такой вот будет выхода этого полем слоя и вот это дальше раз когда тонированные карт активации нас подается дальше ковалев настройки там дальше тоже могут быть еще своей с

карт активации нас подается дальше ковалев настройки там дальше тоже могут быть еще своей с проверенными пингом такие слои называются парень pulling нету принципе тоже помогают и так здесь мы в этом видео с вами рассмотрели несколько трюков секундах какие они были давайте напомним во-первых декан плюс на канва лю шэн этот трюк из которого сейчас уже советую взять не может то есть ни одной нет архитектуры states and который бы использовала прогоне картинки через cnn а потом просто абсент там уже

states and который бы использовала прогоне картинки через cnn а потом просто абсент там уже точно должны быть до нас полоску на валют на свои дальше это дойла этот канва лишь нас тоже очень полезная штука дальше молодцы скейл контекст агрегатор это там где параллельные делает от инволюции дальше парень pulling network это вот вот это с пулеметами и последний трюк который мы не рассмотрели на самом деле я упоминал его в первом видео это конечно реальном field это чтобы который используется для

деле я упоминал его в первом видео это конечно реальном field это чтобы который используется для пост-процессинг на самом деле как я упомянула когда мы говорили про да этот канва ли шанс до конца вы избавиться от эффекта того что у вас теряется пространственной информации никогда не сможете и в результате у вас сегментация все равно получится немножко шумный то есть там они будут четко прорисованной границы объектов например отделения объекта от бэкграунда и вам в любом случае нужно некоторые

границы объектов например отделения объекта от бэкграунда и вам в любом случае нужно некоторые постпроцессинга это пусть processing в этом очень сильно помогает вот я показывал вам картинку со скамейкой но картинка со скамейкой была очень плохая в том плане что там будет ацетил изначально был ужасен но вы можете посмотреть картинку с елочкой вот елочка изначально вот и и сегментации некоторые сеткой а вот три дальше это разные подходы конечного реальном филда то есть некоторые разные имитации

а вот три дальше это разные подходы конечного реальном филда то есть некоторые разные имитации конечно ренфилд и которые делают пост-процессинг вот этой елочки и получает новые 2 последний по крайней мере очень хорош + tab pro кондишн ренфилд вы можете почитать в интернете можно мы сегодня просто не успеем и я начал еще про архитектурой про архитектуры и название архитектуры в принципе еще ничего не говорили мы говорить только про трюки конечно люди когда пишут разные статьи и предлагают какие

не говорили мы говорить только про трюки конечно люди когда пишут разные статьи и предлагают какие то решения там деле этот канва лишние что-то прочее они предлагают свою архитектуру для 7 таций который как назвать давайте рассмотрим и архитектуры вот я сюда написал архитектуры которой я знаю 1 это sega нет собственно сегменты шин бет который является просто декан валюша сеткой собственно она выглядит точно так же как на картинке где я показывал симметричную декан ванюшин сетку дальше есть

выглядит точно так же как на картинке где я показывал симметричную декан ванюшин сетку дальше есть диплом у тёплого целых четыре варианта правда я ошиблась здесь дипломы 4 не бывает вместо в 4 deep love v3 plus менеджер страшно где плохой один это сетка которая использует трюки 2 это обратите внимание что она не использует валюша то есть это еще тот подход где вы просто брали картинку засовывали ее в карточной нейронной сети потом об sempre или просто результат но это просто было предложено

ее в карточной нейронной сети потом об sempre или просто результат но это просто было предложено довольно давно но она уже используя дали этот канва лишены и использует конечно ренфилд дальше было 2 реинкарнация де плаваю в 2 она использует кроме 25 еще трюк 3 то есть там были уже параллельные дела идут к эволюции и они действительно дали boost дальше deep love и 3 вот тут наконец-то дошли до dick in value снов это уже но одна из лучших вариантов этой сетки и последний вариант сетки для плотвы

in value снов это уже но одна из лучших вариантов этой сетки и последний вариант сетки для плотвы 3 плюс там уже ничего супер нового на самом деле нет как вы видите там все еще те же трюки 1235 там просто некоторые такие локальные улучшения которые уже не по идею того как сегментируют поэтому собственно на называется вы 3 плюс у него четыре не слишком новое есть еще перестанет она использует 12 и 4 трюки то есть там для того чтобы продлить разного размера объекта там использоваться как раз не

и 4 трюки то есть там для того чтобы продлить разного размера объекта там использоваться как раз не параллельные дойла этот канва лишь на параллельные пуль инге вот оттуда как раз этой статьи вот эта последняя идея про криминальной пулю я кстати возможно упустила что наверняка письменное тоже используется пост-процессинг но я не уверен на самом деле это еще не все это еще не последняя идея сегментации которая есть не не последняя индия не последнее архитектура и не последний труп который можно

которая есть не не последняя индия не последнее архитектура и не последний труп который можно применить сегментации еще мы с вами поговорим про юные но поговорим в этом следующем видео

в этом видео мы рассмотрим еще одной архитектуру для задача сегментации и этой и nat genet это архитектура для сдачи сегментации которая была предложена в 1015 году и предложено она была для конкретной задачи сегментации медицинских изображений это не значит что мне есть какие то идеи которые мне могут быть применены к другим задачам сегментации но в ней собраны тереть и который для сегментации медицинских изображений наилучшим образом себя показывают чем же на самом деле отличается задача

медицинских изображений наилучшим образом себя показывают чем же на самом деле отличается задача сегментации медицинских изображений от другие задачи сегментации чаще всего это два пункта первый пункт это то что в сегментации медицинских изображений очень важно точно и хорошо сегментировать очень маленький объект то есть вот здесь пример сегментации фотографий клеток и смотреть пока я должна на сегментацией она должна быть очень точные прям и белизна то здесь вот точно должна быть обозначена

сегментацией она должна быть очень точные прям и белизна то здесь вот точно должна быть обозначена где границы клеток где пространство между ней и чаще всего медицинской сегментации она бинарная то есть сегментация все на 2 класс либо объект ибо нет вот как здесь либо клетки либо пространство между клетками и чаще всего карта сегментации черно-белое получается так вот архитектурой birds которая была предложена и тысячи пятнадцатом году она нарисована вот здесь не картинки на самом деле это

была предложена и тысячи пятнадцатом году она нарисована вот здесь не картинки на самом деле это архитектура тоже состоит из канва люцианом слоев и дать ему лицо на слоев и без великолепно в своем совсем то есть на самом деле эта архитектура похожа на ту архитектуру декан валюш на который я показывал на предыдущем видео вот здесь можно видеть что есть серые это свои сеток и стрелочку он показывает отчет информацию сухого слоя куда и какая-то на вот тут показан источники стрелочки они

показывает отчет информацию сухого слоя куда и какая-то на вот тут показан источники стрелочки они соответствуют канаве лишь на свою красненькие стеллаж бумаг спаленки а желтой стрелочке это up up in валютную то есть по сути дек инвалют мы и литра сказка evolution и и зелененькие стрелочка это camping интернет если забыть так апрака опять конфетами то это будет действительно просто архитектуры сети которые я показывал в предыдущем видео причем здесь даже дали этот канва лишь нет ничего такого

которые я показывал в предыдущем видео причем здесь даже дали этот канва лишь нет ничего такого интересного нет . малюшин или ломок спарринги и транспорт кубы лишь но вся соль как раз зеленых connection of и они по сути являются step конечными если вы смотрели предыдущий урок про архитектуры него на седеют вы знаете что вы так смотрите step кончины здесь все сделано в том же самое то же самое единичные скрип конечно в dance нити то есть здесь which a map и через проходит через несколько слоев

скрип конечно в dance нити то есть здесь which a map и через проходит через несколько слоев сетки и конектится с этими чуваками другими и потом поддаются дальше на вход брегенц немцы то есть смотрите здесь вот это вот серенькая ты чего которая получилась она подается здесь когда тренируется в стадо серенька печеного которая получилась после об канва лично здесь и сканка тонированные они подаются на а дальше на фоткались получается 5 весьма . валюш ну почему и дальше вот здесь опять же вот этот

на а дальше на фоткались получается 5 весьма . валюш ну почему и дальше вот здесь опять же вот этот вечерам который получился он когда тренирует со switch-ем а вам отсюда вот беленький и подается дальше заметен также что эта сетка симметричная то есть в ней каждом углу лишь на свою слева соответствует декана values на слой справа и skip поникшими как раз идут от свое к январю шину асимметричным им своем дик андрюшка то есть это тоже одна из главных особенностей и не то как я говорила раньше что

своем дик андрюшка то есть это тоже одна из главных особенностей и не то как я говорила раньше что тогда мы рассматривали просто такой уволишь на сетку что она не обязательно должна быть симметрично чтоб она работала так вот я не должна быть симметрично чтобы она работала может быть резким конечно которое стоит асимметрично слоев друг другу и она поэтому получила свое название потому что она из-за своей семье 3 от этого рисунка очень похожа на букву теперь зачем вообще вельский connection и

своей семье 3 от этого рисунка очень похожа на букву теперь зачем вообще вельский connection и почему они так крыша года но мы знаем в целом почему ступе ночные помогает потому что не обеспечивает некоторые прирост информации но почему вот именно эта информация с асимметричной свое помогает в нету смотрите давайте обозначим вот эти две части к на валютной додумались на слой на этой сети как энкодеры depot но на самом деле мы можем это сделать это логично потому что можно сказать что вот этот

depot но на самом деле мы можем это сделать это логично потому что можно сказать что вот этот слой канва лишена он подберет картинку и с помощью фильтров с помощью к январю шин слоев он как бы кодирует информацию об этой картинке он выделяет из ними некоторой информации но это правильно потому что мы знаем что клуба лишь на свои они как бы выделяют некоторую полезную информацию искать и один кадр это слой а точнее часть сети которая берет вот эту вот информацию который выделил encoder и

кадр это слой а точнее часть сети которая берет вот эту вот информацию который выделил encoder и пытается ее эту информацию расправиться обратно и для этой информации найти пространственное ее место на итоговый картинки сегментации то есть дико дыры на самом деле есть очень важные задачи из той информации которую выдал он колер нужно понять всю пространственной информации которую мне находится и выбрать хорошую карту сегментации так вот вот эти skip connection и которые здесь есть они как раз

выбрать хорошую карту сегментации так вот вот эти skip connection и которые здесь есть они как раз помогает пространством информацию добыть потому что как мы говорили на предыдущем видео чтобы вы ни делали все равно у вас вы картинку канва лично вы снимаете потом тыкнул лишь нажимаете немножко пространственной информации теряется вот эти мистик конечными мы очень сильно помогаем сетки эту информацию пространственное обратно получить смотрите когда мы взяли вот эту картинку и сжали ее вот досюда

пространственное обратно получить смотрите когда мы взяли вот эту картинку и сжали ее вот досюда получил этот фильм а в этом which i might и осталось больше пространственной информации чем было осталась здесь потому что здесь мы прошли еще через несколько инвалют на свое сожалеешь о польше так вот так пространственная информация которая осталась здесь она может помочь декодера на вот этом этапе восстановить некоторые пространственную информацию которую может восстановить здесь вот он и и

восстановить некоторые пространственную информацию которую может восстановить здесь вот он и и востанавливать с помощью вот этого вот этой карта активации которой вы здесь помощью skip конечно к нему тоже приходит идет дальше а дальше мы дойдем декору еще больше пространственной информации которая была вот здесь вот из вот этого фильма по запретом почему еще больше пространства информации чем вот здесь даем и ios помощь тип конечно дико дыру и он ее восстанавливать тоже то есть таким образом

здесь даем и ios помощь тип конечно дико дыру и он ее восстанавливать тоже то есть таким образом декатрон шаг за шагом получает достаточную информацию от меньшего количества большему количеству от нижних слоев энкодеров большим своим кадра и шаг за шагом устанавливается больше пространства информации и таким образом может сделать намного лучшую карту сегментации чем было бы без skip конечно так у юны то есть еще два трупа которой он меня давайте их рассмотрим давайте вспомним что такое операции

юны то есть еще два трупа которой он меня давайте их рассмотрим давайте вспомним что такое операции сорт вот у нас есть картинка вот такая вот пять на пять мы сворачиваем бедром ты внутри мы получаем city map размеры тоже длина давайте обратим внимание что вот есть у нас пиксели левый верхний самый и что в итоговом фичи мать о нем информации сохраняться буквально мало ну потому что единственный раз когда он используется в операции святкина когда я вот этот вот кирилл он стоит вот на этом месте

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

например участвуют во многих свёртка пока вот этот фильтр идет вот так вот до конца от права потому спускается вниз идет вправо впускать внесет вправо что это значит это на самом деле плохо для наших консультации потому что в нашем генетика достаточные слои за мы берем это санта картинку и прогоняем все ссор дачной стаи и на самом деле выполняться транспортом валюша повторы суточный получается что информацию о границе нашей котейкин а пока мы будем проходить через всю эту сеть она потеряется то

информацию о границе нашей котейкин а пока мы будем проходить через всю эту сеть она потеряется то есть вот иллюстрация нас получается вот это изначальная картинка наших клеток и только то что красный рамочке на самом деле хорошо затем имитируются в итоге вот то что было до этого об этом информации после sort of содержаться будет очень мало как бы если мы захотим это тоже сегментировать то получите плов на самом деле и найти решили эту проблему так изначально когда удается вот такая большая

плов на самом деле и найти решили эту проблему так изначально когда удается вот такая большая картинка сегментировать и только то что он находится праздновалось то есть здесь его хватает информация а что делать с тем что находится в нерабочем мы дополним нашу картинку тем что отзеркалим эту рамочку то есть вот вот возьмем вот этот кусочек коричневый и отзеркалим его и призванием сложен и к этому применим еще одной итерации винить то есть мы таким образом делаем некоторые padding padding с

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

как раз нанести имитируются а это как россия вся картинка который нам нужно вот такой вот трюк используется генетик а называется а варлок тейлз 3g и есть ещё одна на самом деле проблема которое возникает venetia оно раскроется в том что юнит wonder медицинских изображений медицинских изображениях есть очень такие тонкие линии которые нужно сегментировать вот пример здесь на картинке вот такой вот infant нужно сегментировать вот тут вот клеточки между ними такие элитные края и вот этот вот вот

infant нужно сегментировать вот тут вот клеточки между ними такие элитные края и вот этот вот вот ground руб то есть то что мы хотим увидеть на выходе у нашей сердце но только черно-белая то есть то что между клетками должно быть черненьким то что на фоне тоже должна быть черной вот то что мы хотим видеть на фоне нашей сетке на выходе нашей сети действительно что мы хотим получить вот белые это все клетки фон черный и мы хотим чтобы границы каждой клетки были очерчены то есть вот таким вот

все клетки фон черный и мы хотим чтобы границы каждой клетки были очерчены то есть вот таким вот маленьким маленьким [музыка] маленькой ниточкой была очерчена границы каждой клетке но это на самом деле очень сложно сделать почему потому что давайте вспомним как у нас обучается наш сет мы по выходу нашей сетке считаем какой-то loss потому глубокой позиций и мы помним какой лот считается поставьте сегментации мы по сути каждому пикселю считаем ассоциации в пакете обратно вы пропадете мы ну не

сегментации мы по сути каждому пикселю считаем ассоциации в пакете обратно вы пропадете мы ну не знаю беря мин или сумму по всем пикселем saw макса и наверное когда наша сетка будет обучаться наибольший эффект на обучение будут оказывать именно вот эти пиксели фона они вот эти вот маленькие ниточные пиксели между клеткой то есть грубо говоря сетка обучаясь она будет акцентировать свое внимание на то чтобы очень хорошо фон а тут внутренность клеток а вот на эти вот маленькие ниточки аносова

на то чтобы очень хорошо фон а тут внутренность клеток а вот на эти вот маленькие ниточки аносова обращать внимание не будет особо не будет обучаться действительно их действительно их сегментировать и прорисовывать между клеткой и для этого в 2 нити и сделали писать то есть когда вы считаете на выходе сетки лосс вы лоссом вот этих вот пикселей между разными клетками есть маленький вы даете очень большой лосс вот здесь вот лоссов и получаются то есть синий это там где [музыка] там где вес этого

большой лосс вот здесь вот лоссов и получаются то есть синий это там где [музыка] там где вес этого пикселя и без вас этого пиксели маленький а красный там весьма с этого пикселя большой и как вы видите вот здесь авторы далее веса пикселем которые до красноты между разными клетками очень башни весах и это помогает заставить сетку больше внимания обращать на эти пиксели между клеточками и хорошо прорисовывать границы между мы на самом деле делает это все то есть это вот такая простая архитектура

границы между мы на самом деле делает это все то есть это вот такая простая архитектура двумя трупами с аврил об тейлз 3g и с вот таким вот и самый на лосс можно в нашу табличку с р с с мельчайшими капельками и сегментации архитектурами внести еще 3 step collection он конечно же применяется не только две нити сейчас мы применяется и в других или signatech на и текст можно внести еще один и он использовать руки 16 века evolution и скитались на самом деле все проще которые мы сейчас мы забрали

руки 16 века evolution и скитались на самом деле все проще которые мы сейчас мы забрали они не самые новые а не придумал 2015 1618 года есть еще несколько подходов рекомендации которые отличаются немножко те которые мы разобрали сейчас и самый крутой да наверно маской осины но есть причина почему я не стала вам сегодня рассказывать а не стала рассказывать more маск р cnn потому что для того чтобы понять москве asian and вам нужно знать что такое арсенале что такое постоянно что такое faster сны

понять москве asian and вам нужно знать что такое арсенале что такое постоянно что такое faster сны а это зеркале сдать в тельце вы не узнаете в следующих выпусков нашей программы и когда вы о них узнаете когда вы даете тельцу вы тогда можете прочитать о том что такое маска сины знание сегодняшний потомство такой сегментации как она решается плюс знание о том что такое ир сена и следующего раза вам хватит чтобы понять как работает маска цены пока скажу что мастер cnn работает так что вы сначала

хватит чтобы понять как работает маска цены пока скажу что мастер cnn работает так что вы сначала решать задачи акции собственно для чего рассеянными создан а потом внутри банды бокса для детекции лжи делаете удачу сегментации на самом деле это звучит очень логично потому что так по сути вы упрощаете виде сетки вы уже говорите где секте нужно искать машину или человека в каком банке боксе точно есть человек или машинной где ей нужно искать для сегментации пикселей машины или человек ну и вот

есть человек или машинной где ей нужно искать для сегментации пикселей машины или человек ну и вот маска cnn это одна из стоит он взял ты прочь с для имитации есть видео о том как сейчас работать в сегментации то есть на сколько сейчас хорошо решать задачу сегментацию вот как-то так хотя на самом деле не идеальный конечно но мы уже говорили про проблемы которые за этим стоят но мне кажется вполне себе идеально по сравнению с тем что был несколько лет назад и вот здесь еще сегментацию если

себе идеально по сравнению с тем что был несколько лет назад и вот здесь еще сегментацию если что-то задача убирание фон с картинки это тоже значит имитации вам нужно сегментировать форм от объектов которые находятся перед ним и вот здесь сегментации выполнять мне и видео на самом деле 8 минут и работать вот смотрите здесь примеры того как все имитируется человек выставляется другие формы это просто просто реально работы если такое было фотошопе согласятся есть вот принципе вот сейчас я вам

просто просто реально работы если такое было фотошопе согласятся есть вот принципе вот сейчас я вам хотела сказать спать на не лезь было известно полезно всем пока

Лекция. Нейронная детекция объектов. Классификация (повторение).

всем привет дорогие друзья меня зовут илья захаркин и сегодня мы с вами поговорим про детектирование объекта с помощью нейронных сетей до этого у вас было классификация из компьютерного зрения уже было классификация была сегментация сегодня вот мы задачку это дотация имени интересная и не менее практично задачка ну сначала скажу немного себе то и такой я диску с самого его основания и возможно даже видели уже макет видеоуроки по зрению всячески кстати рекомендую посмотреть запись прошлого года и

видели уже макет видеоуроки по зрению всячески кстати рекомендую посмотреть запись прошлого года и позапрошлого года мои лекции по редактированию знаете по зрению это довольно таки связано сегодняшнем занять у меня стараюсь делать занятия не похожие друг на друга то есть важно рассказывать разные вещи разные текстуры но и поэтому они вполне друг друга дополняют вот ну в общем я заканчиваю фото и сейчас я учусь на что курсе вместо туры тоже на физтехе одновременно в калтехе работу я сейчас

и сейчас я учусь на что курсе вместо туры тоже на физтехе одновременно в калтехе работу я сейчас самсунге инженером к мировоззрение и делаю собственный стартап с нашей отличной командой мы как раз таки интегрируем которые зрение в игры начали мы с того что сделали управление жестами доступным на компьютере с камерой просто и можно прям управлять спецэффектами объектами просто махая руками перед вэбкой и все будет real time ago точно работать но мы сегодня про это мы сегодня про задачи

перед вэбкой и все будет real time ago точно работать но мы сегодня про это мы сегодня про задачи редактирования тоже значит зрение перед тем как говорить правду про сама дать акцию помощью ner сетей давайте обсудим их не вспомним вспомним какие есть классификационная структура не вестей потому что будем использовать часто слова big bowl backbone это синоним слова ну для нас это будет синоним буквально слово классификационное не растить потому что в качестве вот борьба он это будет часть

буквально слово классификационное не растить потому что в качестве вот борьба он это будет часть невского детектора и видим в качестве полном обычно берем какую-то из riser листик тур для классификации поэтому их повторить далее поговорим про основу же самой задачки редактирование про метрики которые не используются про что такое interception в reunion вспомним а если кто-то еще не завтра узнаем соответственно мы все это обговорим далее мы перейдем к 200 один вектором изначально появились имена

мы все это обговорим далее мы перейдем к 200 один вектором изначально появились имена ней потом рассмотрим как можно делать доктор и 2 статьи 1 ст1 у которого одна стадия это когда не нужно генерировать отдельно про посланным и все это увидим и потом поговорим про современные с текстурой у той себе и последних двух-трех лет которые используют акции и обсудим задачки которые значки которые когда является под задачами детекции то есть тоже детекции начнет специфичного например в 3d и обсудим

является под задачами детекции то есть тоже детекции начнет специфичного например в 3d и обсудим какие то могут быть проблемы какие к ним сегодня чувствует решения и так повторим классификацию изображений напомню что значит классификации ставится как у вас на вход есть изображение виде тендера аж наверно c1 случае 100 ширина и количество каналов у данного изображения всегда 3 rgb подается на вход нейросети у которой есть так мило фичер extractor часть и часто классификации ну вот фичер

на вход нейросети у которой есть так мило фичер extractor часть и часто классификации ну вот фичер extractor часть хотя называть будем мы б полном чаще всего нашем детекторе вот это есть ни что иное как вот фичер extraction часть любой классификационной city можно брать виде обогнул на и до типичная схема что выглядит так что у нас от fischer xc тракторе набор консул слоев то есть как она к нулю шин pulling нарушен cooling и после каждого канва левшина или полинга то что те тендеры которая

шин pulling нарушен cooling и после каждого канва левшина или полинга то что те тендеры которая существует между свертками и коллегами то есть секунд по нир стиль называется фичер мама не то есть после сорске изображения одни все швы слоем получается первых вечер map потом пулек это там следующий вечер map и так далее и вот похода нейросети фичер map и tts тендеры которые текут они обычно принимают форму такого вытянутого тендера но маленького пласте по вася ширине то есть из на входе нас

форму такого вытянутого тендера но маленького пласте по вася ширине то есть из на входе нас картинка там может быть допустим 1000 на 1000 пикселей то в конце фичер экстрактор сети после свёртка буленков у нас кресел будет что-то в духе пять на пять высота и ширина но зато канала будет не 3 а 1024 канал или 512 каналов или 2048 канал и потом уже это на природе с какой-то global pulling усредняется в каждый в каждом канале фич ермак усредняется значение в 1 получается один на один на тысяч 24

в каждый в каждом канале фич ермак усредняется значение в 1 получается один на один на тысяч 24 часа тест олег т-34 чисел подается на вход полна связан не рвите данном случае два там повысятся слоя и плескаются класс от нуля до девяти льда звучит цифра вот так работает не рассеять обучается классика цена помню с помощью кросс-кантри пилот с помощью до кровь энтропией и перед тем как говорить архитектуры мы вспомним всю историю не вестей красивой классификации но мы кратко поговорим именно здесь

мы вспомним всю историю не вестей красивой классификации но мы кратко поговорим именно здесь показана ошибка это картинка из интернета на самом деле специально взял какую-то картинку до из интернета просто вот классический рассказ до был алекс нет до нее было что-то вообще не точны да потом александ позволивший там с точностью 83 6 процента получается предсказывать среди топ-5 правильный классно топ-5 рот и когда это количество ошибок когда верным потекла ним считается что среди первых первых

топ-5 рот и когда это количество ошибок когда верным потекла ним считается что среди первых первых пяти power of типы склонения ждите есть класс истины класс вот и топ 5 топ5 предсказания это 5 ошибок когда среди пяти не тот оба истиннаго класса и вот был алекс а потом после кстати джиджи угол нет ресниц ну и дальше что это продолжалось вплоть до сих пор соревнования но сейчас уже большой упор на то насколько быстро можно тренироваться на мир знаете но тогда вот еще убили за проценты качества и

то насколько быстро можно тренироваться на мир знаете но тогда вот еще убили за проценты качества и вот 35 ошибка топ 5 топ5 ошибка у лизы это и вот интересно если посмотреть например вот что остальные думает про эту ошибку в плане вот текущие сайте да где стрит-арт при портиться так где написано это вызов текущей поп фикации то можно видеть такую картину это вот папе свой скот как скот сайт где ну сегодня многие пользуются танкистки современные то не раз сети измеряются по качеству и скорости

ну сегодня многие пользуются танкистки современные то не раз сети измеряются по качеству и скорости записываться вот с ними такие таблицы сравнительные и в этой таблице можно найти что сегодня топ 5 а классе но это некоторый вызов полгода примерно сделан назад скриншот по качеству 9080 ошибка примерно 1 3 процента этот сильный рост но очевидно что это фишек нет но ok но посмотрим на какой виде таблицы ошибка вылезает а и вот можно видеть что она как-то не очень сходится к табличке данными ту 95

ошибка вылезает а и вот можно видеть что она как-то не очень сходится к табличке данными ту 95 с plain и а там 96 5 то есть кажется что жизнь как ты меня на сайте в плюс года имплементация на века будто бы менее точная казалось бы странно давить отель должен проверять фильме жмурки должно всходить и со статьями вот но просто если присмотреться к самой статье видно что они речь провод как говорят про резне ты этом графике до 3 спальни процента это ошибка на тест с эти вот она валида шного людей

про резне ты этом графике до 3 спальни процента это ошибка на тест с эти вот она валида шного людей шион ошибка побольше было то пятеро видно что она 449 и вот уже расходится на т.е. нужно каждый раз думать нужно каждый раз думать что за щика на каком свете да топ 5 она начни топ-1 и проверять время сколько она сходится с реальностью вот дал случае вывода никакого на самом деле нет то есть так и есть что вот например свой скот у нас одна одно качество авто тьерри порцию другой возможность

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

его максимально много данных а на каком сайте измерялось данный ком честно лет вообще сравнение этого качества с другими да-нери стоят отдельно общаясь кусты вопрос как нормально померить качества нефти как нормального сравниться стальными поэтому всегда задумываетесь она чем эта ошибка на каком железе мирилась какие были условия чтобы услових студентов всех были равные 0 и только тогда можно держать чтобы это добились нового стоит ваза вот это было такое скорее лирическое вступление а теперь

чтобы это добились нового стоит ваза вот это было такое скорее лирическое вступление а теперь мы с вами просто вспомним richtig туры как они выглядели collect оссификации 1 алекс нет да но довольно поста архитектура который просто есть флакон втулку втулку стул и появился в даже con в блог да то есть это был конфу конфу он в пунктах 22 царский подряд но ничего ничего такого архитектуры интересного мне не было кроме того что она обучался в гпу сразу они на одной потому что не помещалась на одну

мне не было кроме того что она обучался в гпу сразу они на одной потому что не помещалась на одну в терминах 2 четырнадцатом году не помещалась только сверток если уж они даже эффективнее чем полосатые слои и помещалась на долгий путь делали на 2гб у поэтов для таких ветки и соответственно после алекс это популярных стала как не изобрели нейросетей 3g она стала одной из таких основных на самом деле в том же переносе стиле дартса ривена вторила даже сегодня использую часто поскольку в ней очень

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

тяжеловесное по стране например там каким-нибудь афиша твиттере бизнес вот поэтому и и ну проду проду продолжали развивать тему классификации делать более точной более легкой вот но vigy по сей день используется часто в плане в плане интерпретируем интерпретируем вести а при муже ночных предсказаний вот ампер картинкой которые например вы не могли видеть связаны с тем что вот первый слой видит какие то уголки и линии там второй слой уже какие-то полукруги и и там допустим 5 6 7 и так далее там

то уголки и линии там второй слой уже какие-то полукруги и и там допустим 5 6 7 и так далее там 10 свой видят уже кита лиц и на картинке да видит тоже нужно пояснить что именно под виде то максимально активации нейронов например это или максимальный патч картин которые активируют данный нейрон на the sea salt в результате на вас кое какие картинки приводят часто приводит меня везете потому что бы у неё просто архитектура и легко говорю что в такой слой конкретно да без всяких визе дуалов даже

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

конечно используется использовали легковесны далее inception архитектуры была интересна тем что я появился целый блок авторы подумали что надо скидывать эффективнее и кажется что эффективность не сидится если сделаем придумайте свой блог который позволит не потерять качестве но потерять в параметрах чтобы облегчить сеть и вот придумали такой блок который сначала richard and за приходит предыдущего слоя и сворачиваться сначала свёртка 11 именно ссылка 11 не меняет напомню не в студии ширину

слоя и сворачиваться сначала свёртка 11 именно ссылка 11 не меняет напомню не в студии ширину фирма по но меняет по количеству каналов то есть по глубине вот допустим огуна было 1000 4.11 меньше в 206 потом все в кадре отвертка пять на пять уже идет о менее глубокому тендеру и делает вас но там глубоким то есть новый здесь все шесть тысяч до 4 канала и он придумал такой блок авторы сделали более оптимальной архитектуру в плане по точности она была даже точнее 4g ну тут еще они сделают это прям

оптимальной архитектуру в плане по точности она была даже точнее 4g ну тут еще они сделают это прям как deep супер vision это когда вы как можно на схеме заметить уже обращение было немножко кашель такой суровый 2020 год можно иметь на схеме как есть выходы 2 дважды есть выход классу до конца сети то есть основной лосс где собственном измеряется и откуда идут где-то в самом конце если поставить на схему он выше выше всех дойдет снизу вверх картинка и вот он выше всех на вот эти вот 2 желтых

на схему он выше выше всех дойдет снизу вверх картинка и вот он выше всех на вот эти вот 2 желтых блока это еще два выхода классу такой же лосс просто выход раньше с более ранней слов чтобы градиент тек лучше что среди дала ничего не придумали но уже знали что есть ошибка с дыхание клиентов что он и вертикаль этот во первых слов и чтобы дать и колгатин более равномерный по sittitek чтобы чуть более эффективно обучалась на ранних слоях они сделали вот такие вот выходы наполнитель и выходы

более эффективно обучалась на ранних слоях они сделали вот такие вот выходы наполнитель и выходы университе веточки отходы классу пораньше в архитектуре не только в конце чтобы ну что вот он подсчитывал еще раньше и сеть обучалась эффективнее поэтому и позволить более точнее чем вырежи это позволит сделать архитектуру и плюс легче и за счет section блог далее было ресниц знаменитое и до сих пор любит это основная за текстур классификации вообще от скал самое популярное потому что как же она

любит это основная за текстур классификации вообще от скал самое популярное потому что как же она простая как и джиджи но у нее просто есть и еще и виду конечно который позволяет и и обучать эффективно да и она еще плюс весит тоже не весит к концепту тоже очень эффективно ну занимает по памяти по параметрам остановки идея была breathid блоге еще за счет коты это это на снимке слева один блок это просто на самом деле когда у вас течет есть вот which are more да то есть картинка условно почитался

на самом деле когда у вас течет есть вот which are more да то есть картинка условно почитался по ней все точный слой и получился карман какого-то такой же встречают недопустимости делаем про те кто не меняется но другой по глубине более глубокий чем картинка вот допустил ли pulling балан поделили размер и ширину ласку а глубина не изменилось потому что полях нет глубины и а после этого такой вот тендер идет по счёту свёртку и он же идет в другой ветке запоминать как корпуса вначале а пропускаем

идет по счёту свёртку и он же идет в другой ветке запоминать как корпуса вначале а пропускаем его по двум свертком еще до последовательно и прибавляем к результат этих двух сверток то что было до них просто плюс то есть один тогда плюс другой для этого шума не по размеру совпали допов с тех явлений по глубине прямо ползти по всем ногам совпали уж просто полимента складывать enter вот ну для этого мы собственно в этом лесу блоки то есть бог это вот часть между этой боковой стрелкой свертки вот

мы собственно в этом лесу блоки то есть бог это вот часть между этой боковой стрелкой свертки вот между ними мы не меняем размерность каналов оставляем такой же и все шире не делаем по и деньги так чтобы тоже менялась соответственно этому можем сложить и вот такой шутка позволял оказывается такие свойства что вот не затухать градиенты поскольку если от производной тут будет 1 плюс производная f от x вот если плюс x и делать то может быть 0 его за того что нужно где-то нажать и 0 просто но очень

x вот если плюс x и делать то может быть 0 его за того что нужно где-то нажать и 0 просто но очень маленькой почти число да и игре затухает acea и данном случае производное может остаться и 0 а минимум один из за этого ну конечно может f штрих от x будет отрицательный но там минус x тоже может от минус 10 до 10 и до того что он станет моим много много меньше чем когда мы не делаем этот блок из-за этого градиента лучше текут по сети в том плане что они не слушают медленно потому что просто

из-за этого градиента лучше текут по сети в том плане что они не слушают медленно потому что просто банально умножаем их на не ноль . что-то там она один . что-то из простым языком вот направьте конечно нужно еще все это проверять насколько сильно правда это это отдельно деле статью еще можно сделать проверяем резные там проверяемся то что это все правда но а если просить у подробно и по ты к самостоятельно обычаи обучения результата можно убедиться что я сильно так что клиенты затухают

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

в уши течь далее придумали резник сыта чуть прокачанный резни том плане что пытались совместить ну не на самом деле совсем то ли совместить inception среды там потом пытались смеситель называть так называется резник просто вместо вырезал блоки как можно видеть слева в лоб типичный вот 206 каналов нас четыре канала потом к 4 4 4 5 6 вот возник те придумали делать так чтобы они исследователь прочитали и поняли что делать вот такой вот блок тоже самое по параметрам то же самое то есть по весу да и

и поняли что делать вот такой вот блок тоже самое по параметрам то же самое то есть по весу да и поучительным вычислительной мощности то же самое что делать раздел блок из тридцати двух веток кажется которых на 10 от 64 каналов адреса 6 на 4 например вот как можно видеть на схеме справа и заменяя вот такой блок каждый раз на сумму таких вот 32 веток данном случае прессовать такого динамики называют они буквы обозначают можно добиться даже лучшего качества магазина это нет ни вливаю в параметрах

они буквы обозначают можно добиться даже лучшего качества магазина это нет ни вливаю в параметрах то есть выселить то мощность настолько легковесно архитектуры это интересно чем не забыла она и по сей день прокачивает можно встретить в прокаченный архитектур дать 4 данном случае 4 то количество каналов в этих вот 32 ветках даром о четырех до насчет далее был нас нет вам когда тоже рассказывали идея в основном его того что почему бы если мы а если мы увидел блоки прокидываем то что было на входе

в основном его того что почему бы если мы а если мы увидел блоки прокидываем то что было на входе через сколько-то сверток и складывать эти почему бы нам не дратини складывать после каждых и выход после каждой свертки в этом блоке то есть прям вот если опять после каждых пяти сверток берем фичино прибавляем к конечному результату нас учетки схемки на на схеме стрелки все боковые стрелки это вот сложение соответствующих вечер мапса последним которые после вот здесь уверенно складываем все вот

сложение соответствующих вечер мапса последним которые после вот здесь уверенно складываем все вот эти вечера после каждой сверток то есть такой сумочки танцы в данном случае и они все должны были создать по размеру там для этого костко делается так как купюру чтобы не менялся разгар полости ширине и глубине и это позволило сет на самом деле еще больше облегчить сделать ее еще более эффективно это мне двадцать двадцать один слой сделать например чтобы весело очень мало в то время как с 272

это мне двадцать двадцать один слой сделать например чтобы весело очень мало в то время как с 272 слове часть очень большая разряд обычно там жизни по 1750 это еще более менее нормальные по размеру не раз эти ваши парни что без чисел но просто не совсем про кафе catia лекция вот поэтому мы говорим так болеешь обзор на но факт том что до 12 явки чем близнец и качество также позволяет добиться даже лучшего типа салюта график то ошибка и тестирование меньше параметров как они пишут три раза меньше

лучшего типа салюта график то ошибка и тестирование меньше параметров как они пишут три раза меньше поэтому вот birds and довольно полезная serve на хороший архитектуры 2013 году кажется вышла после этого придумали еще с кузиных station тоже шанс там будет нас там году это на сам деле пас такой блок как residual блок только ну друга у нее другая суть этот блок игра только кого вижу отель семействе угодно это когда мы можем течет which are the entrance fee chapman мы берем его делаем гобл

угодно это когда мы можем течет which are the entrance fee chapman мы берем его делаем гобл pulling по каждого из каналов то есть был там аж на в на c стал 11 вот мы его так сделали потом мы делаем обучаемый слой который просто вот как справно съемки подаём после глобулинов уникальных слайда ножа я эти числа на какую тома . эти вот 111 чисел то есть просто 3 чисел делом климату снова fully connected и получаем на выходе у кита новые c чисел и домножаем на соответствующее число каждое

connected и получаем на выходе у кита новые c чисел и домножаем на соответствующее число каждое соответствующих каналов который вы вначале до этого блока то есть как бы так и размазываем c чисел мы как были каждый канал предсказываем однако это число которые потом до которой потом умножаем весь канала который был до этого даудом случае один цвет с одному числу и как бы как как бы размазываем это число по канала да я так называю это и так называют таким образом мы подчеркиваем канала важнее

это число по канала да я так называю это и так называют таким образом мы подчеркиваем канала важнее какие какие они важны вот каналов и charmo по вот это вот кризисных ситуаций с я оси блока 7 лет 7 лет использовала все блоки поэтому так назывались кузик station at work после этого или примерно в это же время вышел он даст нет это одна из первых секунд подобранные натсом то есть народ эффект чертёж подходом гугла который позволяет искать в нейронных структурах вам ушли нейронных сетей то есть

подходом гугла который позволяет искать в нейронных структурах вам ушли нейронных сетей то есть не automobiled и придумывать не дразнить нужны ли такие ну мы уже а не знаю что придумал бог придумали сквозь лепкой думали . если ты ешь и придумали что же нам еще придумать но вот дадим не россия в самим придумывать что же добавит к также юнит самих себя но на самом деле в этом есть это довольно большие ограничения каждый раз специфичное компании что мы задаем какое-то количество какие-то блоки из

ограничения каждый раз специфичное компании что мы задаем какое-то количество какие-то блоки из которых сеть может состоять есть уже не полную свободу в них к это какое-то ограничение виде того что в данном случае например вот видно что блок должен можем должен либо такой вид иметь либо вот такой точнее мне может быть какое угодно количество вот этих вот подумай под модулей но какой именно какими модуль вот специфицирует search space пир блок да вот либо этих великанов а какой какой то не

модуль вот специфицирует search space пир блок да вот либо этих великанов а какой какой то не вернулся из то есть мы с ним к это количество мигрантов какое-то пространство я сидел в этом про станции перебирает не вообще во всем среди всех возможных тип турда то есть на рнк просто клане запихнет внутрь внутрь канва лютер сверток но нам случай после ищем оптимальные сердечных нервов детей вот это позволило им получить 1 тура которая точно и вот это что у нее топ 1 апельсина между найти получился

им получить 1 тура которая точно и вот это что у нее топ 1 апельсина между найти получился 77 процентов до топ-1 причем вот хорошая карта хороший результат и она могла 10 fps номер секунд на мобильном циpкa на даче пройдет цикл или группу продо такими опыту истекут это вообще круто вот то есть нагнали жене графическом процессоре ян фрид это не раз сеть на мобильных устройствах это круто ну так можно какую себе позволить сегодня или видео может быть то есть компании которых огромный класс это

можно какую себе позволить сегодня или видео может быть то есть компании которых огромный класс это вот это вот поиск нас она требует очень больших и сильных ресурсов там кластер наверное с 1000 г чтобы это все глаза от образуем на неделю вместе перебралось вот и начал в стальных лаборатория это занимает огромное количество и поэтому она есть статьи на тему того как эффективно нас сделать там есть есть лабораторный принимаете который занимается но в общем нас не что-то построить на кнопочку все

есть лабораторный принимаете который занимается но в общем нас не что-то построить на кнопочку все новинки запустил подбор нет к сожалению не так но тем ни менее крутой прорыв далее классификация была пишет на это одна из крутых самых любимых этих дур потому что она это вот как раз таки найдено на сам не носить мне было там я бы шли наса назвал такой который еще перебирал более точно параметры слоев но в итоге вот опять же сервис google а получили пишет нет нас и мы обогнали всех хищников эти

но в итоге вот опять же сервис google а получили пишет нет нас и мы обогнали всех хищников эти как можно видеть на графике или знают они бы на лице шин по соотношению количества параметров и качеству на и между тест но вот видео чтобы 7 уже порядка смесь четырех процентов top100 она b0 уже 77 есть уже видно чтобы 0 по качеству как им нас нет вот а по количеству параметров у нее видно что даже примерно видимо 5 миллионов параметров и b0 вот видно вот вот я секретную точку бы 0 вот примерно 5

примерно видимо 5 миллионов параметров и b0 вот видно вот вот я секретную точку бы 0 вот примерно 5 пример 7 7 процентов качество примерно 5 минут параметров а у нас нету и все параметры диска то поэтому сразу время приведена но я осмелюсь догадаться что она даже бы 0 было легче чем он нас нет или или сравнимое и как сравнимые вот подход тот же но этот но они сделали более эффективно модульную структуру что позволено делать несколько ее уровне b0 d1 d2 d3 то есть и и прокачивать я все больше и

что позволено делать несколько ее уровне b0 d1 d2 d3 то есть и и прокачивать я все больше и больше чем более прокачено тем большую пути ласкать то тем больше параметров но тем больше качество это одна из самых крутых людях архитектуры пишет нет вот мы и еще вспомнить ну и потом ещё была гаснет я честно говоря уже даже статью полностью сам не читал но видел что они добавили новый какой-то блок похож на сказать excitation только более какой конкретно вида сверху то есть если не делали squeeze

похож на сказать excitation только более какой конкретно вида сверху то есть если не делали squeeze excel и что потом жкк тильта что было досками тексты песен и видимо но суть в том что тоже не то чтобы что-то супер равно это кризис был бы свое время это не прибавило в качестве там на 5 процентов например но ну там потоп один император не какой-то супер прорыв но это к тому что сегодня поиск оптимальности туры на между эти все еще продолжается вот и картонные ящики все еще выходят новые хоть и

туры на между эти все еще продолжается вот и картонные ящики все еще выходят новые хоть и кто на этом и закончим мы закончим часть создаются разговоров про нефть для классификации далее мы поговорим про то что такое редактирование так а в чем она отличается нашей классификации чем нам классика цик не может помочь и как и существует детекторы кисти тут так цене tricky что с помощью них вообще и зачем нужно мерить

приветствую всех дорогие друзья это вторая часть занятие о детектировании в 1 мы поговорили про университе классификации в этой части занятия мы уже обсудим тактирование чем отличается очень классификации чем похоже что можно использовать их классификации и какие общие идеи за тактирование используются и для того чтобы предсказывать вот например такие балдин бокса показанные слева видео что такое вообще детекция объектов это задачка в которой мы хотим предсказать положение каждого объекта

такое вообще детекция объектов это задачка в которой мы хотим предсказать положение каждого объекта интересующего нас на изображение изображение когда тошно мечта и вкусе карточку это тензор цветная картинка до вас нашли на на 3 и нужен приказом баунти бокс это ограничивающее прямоугольники вокруг каждого из объектов которые мы хотим увидеть например на случай машина велосипед собака и все хотим и такими точными не мог сами вместе почему мы на бокс в верхней маской ну москве потом тоже

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

людям и деле треугольником с сыром быстрее чем сегментации по пиксель на ну и вообще как обычно в эти мигающие прямоугольники представляют их можно в виде представлять завалили два формата мы еще их подробнее посмотрим на первый формат который мы рассмотрим это который будет играть голове это формат а левый верхний угол прямоугольника правый нижний то есть top left и потом right corner или работа и а обычно это как раз таки сокращением называют мтлб то есть лев top right bottom вот здесь

работа и а обычно это как раз таки сокращением называют мтлб то есть лев top right bottom вот здесь немножко наоборот на слайде но это не так важно важно что мы можем всего 4 начисленным представить прямоугольник до когда ты пикселей верхнего правого нижнем потому что потом просто прямоугольник дополняем до этих координат и внутри каждого типа искать имя класса собака автомобиль велосипед классов может быть много 80 100 тысяч а можно 3 класса можно 1 класс киска просто искать что-то minor надо

может быть много 80 100 тысяч а можно 3 класса можно 1 класс киска просто искать что-то minor надо есть человек и сущность там наш друг на фотографии или нет конкретно обучили на него все предсказуем 1 класс и каждый класс предсказывается как классификации не просто им там там индексом класса до какой-то каких-то скором какой-то по вероятностью этого класса называемого can't find and случае уверенность в право билете вероятность класса в этом боксе ты каждого бокса приказу свой класс и свои 4

в право билете вероятность класса в этом боксе ты каждого бокса приказу свой класс и свои 4 числа виде координаты для верхнего про в нижнем гадость пять чисел вот ну здесь частью сесил написано потому что по идее в некоторых структурах например вайола еще предсказывается отдельно приз кажется класс score отдельно предсказатель на confident в этом по вскоре как бы это отдельная и на кон стенд сам можно отдельно сам контент самого бокса то есть насколько уверен сам по себе то что здесь какой то

можно отдельно сам контент самого бокса то есть насколько уверен сам по себе то что здесь какой то есть объект да и потом уже если уверенно и пока не мог суд а какой именно класс скоро внутри этого бокса то есть 6 и 7 км до но чаще даже про пять чисел это на 4 числа координаты и одно число и такой the score класса i tried a box of который взят из распределения вероятности на всех классов и маевского сведите допустим чисел например говорить про архитектуры решения такой задачи на опускании таких

сведите допустим чисел например говорить про архитектуры решения такой задачи на опускании таких боксов их у всех интересующих нас объектов мы поговорим про какие-то to set и какие данные какие них объемы да и как они вообще как они выглядят ну вот сам и заменить из этого для детекции называются паскаль бук несколько выгляжу найти я сейчас детекции и google open имиджа сегодня пост лидер в этом самый большой сосед насколько я на возможность уже больше новая традиция популярный большевика свитов

большой сосед насколько я на возможность уже больше новая традиция популярный большевика свитов коду копированию сегментации есть от сегментации и такие через просто этих их любимых мы простых качественный сайт интересном люди готовят на gopro очень очень очень долго очень прозрачно и время несколько ну а поскольку стоявший на сколько еще действующей на нем часто смотрят как шифровка microsoft common объект или контекст кукол в нем вида справа дерева классов но и дерева классов нет акции

common объект или контекст кукол в нем вида справа дерева классов но и дерева классов нет акции captiva ксива вообще классу который там есть иерархическая структура а детекции кажется то что вот слева tanks теннис ракеткой в общем и всего 80 в детекции 8 классов то есть это распылению радости-то 80 числом из них 80 score of и в нем вот с 20 тысяч изображений обучение 5000 полиции 40000 до 120000 завершения вас просто сколько нужно картинок чтобы что-то обучить ну вот если для меряются надо

завершения вас просто сколько нужно картинок чтобы что-то обучить ну вот если для меряются надо достать оковами сколько например на него 120 тысяч изображений и так много 18 давать его изображение разные по качеству то есть они разные по варьируются по ширине и высоте ну нам случае сайты quality at одно и то же quality to в плане а если quality как resolution то есть разрешение она как бы просто складывается из обычно расти еще важность кидает одна из сторон нам случае короткая сторона тысяч

складывается из обычно расти еще важность кидает одна из сторон нам случае короткая сторона тысяч 8920 в виде поэтому quality sites стороны тоже данном контексте синонимы да но вот к книге варьируются по размерам но пока что можно считать ещё там есть блюр на танке да вы просто такие жизненные фотографии такой связано телефон вот так как движения китае аккуратно но там есть такая фотографии студийные есть аккуратные взять интернет и картинки поэтому это все вот такой вариативный тсн большое за

есть аккуратные взять интернет и картинки поэтому это все вот такой вариативный тсн большое за 20000 но он не помещающихся в вашем компьютере вашем диске легко на нем можно выучить детектор уже и пусть какое-то разумное качества на 8 классах до самых частых от человек дверь стул собака кошка банан и так далее ну и дальше был сосед гугла панели джесс после насколько вышел такой он больше можно сказать в 10 раз поскольку видели в бокс с 14 миллионов баксов в случае не давайте по картинкам читать

в 10 раз поскольку видели в бокс с 14 миллионов баксов в случае не давайте по картинкам читать о строении на миллион 700 тысяч картинок здесь 120 тысяч то есть нолика не хватает на больше чуть больше чем 10 раз больше ним картинок это вот именно для детекции размеченных поэтому до примерно 10 раз больше и тесты валидация плюс-минус и это вот google упали my jay's называется или просто появилось два этапа ними жизнь д т о о н сокращены справа видна ссылочка на ковер солила некоторые прошла

два этапа ними жизнь д т о о н сокращены справа видна ссылочка на ковер солила некоторые прошла недавно по поводу этой акции на этом to the city она часто открывается каждый год google открывает и слева ссылочка на сам сайт то можете перейти посмотреть он реально интересно сайта можно посмотреть какие картинки в нем есть там есть explorer нажимаете классно человека играть и кольцевые крепим человек там то можно выбрать отфильтровать и салатик ильин картинки часто на данные смотреть очень

человек там то можно выбрать отфильтровать и салатик ильин картинки часто на данные смотреть очень полезным подкласса всего 600 для боксов да это больше чем 80 еще почти в 10 раз то есть он такой огромный как 10 наскоку соответственно далее мы поговорим про данные мы проговорили до мы проговорили что есть во сколько есть клапаны неджес посмотрели их объемы до 16 гигабайт ну значит google по нами джесси сыр 10 раз больше что он и весть пример в 10 раз больше да значит скорее всего ну так об

джесси сыр 10 раз больше что он и весть пример в 10 раз больше да значит скорее всего ну так об активируя гигабайт 200 до примерно он весит если тот видит камер на 25 примерно по 200 205 может весит google apple magic но тоже еще подъем на можно себе скачать он просто за одну ночь может скачать и а появятся сетов для для успешного шины в редакции нам нужно знать а какие не используются в один очень метрики то есть на этих высотах мы читайте вот берем дать с этим несколько обучаем некий директор

метрики то есть на этих высотах мы читайте вот берем дать с этим несколько обучаем некий директор мы познакомимся с ними какие именно бывают до обучаем потому что данные есть всем на чем можно обучить разметка есть здесь чем закрываясь без разметки можно обучать на это больше сторону данных например детектив 1 давали мало статей поэтому собирать все и задачи мы хотим искать вот бокс и вокруг объектов и а то есть вот они размечены есть чтобы поискать нам нужно еще поставок мы же pascal померить

и а то есть вот они размечены есть чтобы поискать нам нужно еще поставок мы же pascal померить качество этого детектора до какого померить ну начнем с того что нам нужно уметь мере пересечения в другом боксов потому что вы например близко не какой-то бог the prediction доктора джона на статичной картинке и есть ground труда до осени как понять что мы попали на что мы близко ли правильно нужно найти их в данном случае пересечения это вот overlap на картинке справа на стенке начнет справа вот мы

их в данном случае пересечения это вот overlap на картинке справа на стенке начнет справа вот мы просто делим пересечении двух прямоугольников на их общую площадь объедение площади да не на сумму площадей потому что мы включим пересечении она супа филе минус пересечения дано его вот и когда мы делим одно другое больше число от нуля до единицы вот можно легко проверить до крайних лучше просто каждый слушание пресекаются 0 пресекается ровно 1 этаже куда он солнцева пересекается по всей площади

слушание пресекаются 0 пресекается ровно 1 этаже куда он солнцева пересекается по всей площади наш тюнин равен пересечения что и и а он удаляется число и вот там замерим сколько они пресекаются этого синтеза новых юнин то просто название формулы и так часто играет а ею сокращенно называют его считают как индекс для карда нуи можно так наказывать и джек от звучит конечно много более умная но я слизываю потому что за этим стоит просто сразу формула сразу определить на union помимо знания что так

потому что за этим стоит просто сразу формула сразу определить на union помимо знания что так ой ой ой у нам нужно знать что такое позитива штукой негативы трупа и стив он снега типов против true негатив то есть данном случае каждое предсказание она имеет какую-то ну то есть когда мы предсказали на картинке боксы и когда у нас на картинки зико он трус бокса до ground уста истины мы хотим понять не просто как попали мы не попали да а как бы понять вообще так также хорошо работает нет он может

не просто как попали мы не попали да а как бы понять вообще так также хорошо работает нет он может предсказывать очень-очень много бокс да вообще везде и только возможно попасть конечно же во все windows потому что пускал по 100 баксов а ground руссо всего два конечно то у них на это попадет мужских дофига предсказал но такого такого доктора будет высокая доля как раз таки фолз позитив рейд то есть видно что на картинке слева например трубой зив дауны по раунд rus который красный рамочка

то есть видно что на картинке слева например трубой зив дауны по раунд rus который красный рамочка выделят предсказывает желтая черт да птиц класс правильно предсказали пересечения ее ну наверное где то больше ну точно больше на 5 да какое ну какой а ее какому при чтении так как бы 4 опыта следует но можно просто по да такое упражнение на 10 минут и просто взять функцию написать и а померить поводить картинки зато сета и поводить какой сейчас ею конкретного бок с другими как ты мог сам на и

картинки зато сета и поводить какой сейчас ею конкретного бок с другими как ты мог сам на и посмотреть на работать интуицию как ой-ой-ой у равен какому-то к какому как бы качеству пересечения но это это это ладно это упражнение так вот можно сделать если наш бокс пересекает истинный бог сказанный перси качественный бокс а ей больше на 5 данном случае поставить такой порог 05 то мы считаем что это то позитив правильно предсказаны предсказание если мы предсказываем наш бокс power controls бокса

то позитив правильно предсказаны предсказание если мы предсказываем наш бокс power controls бокса но либо put in close да не тот класс кошка на либо мы пересекаемся очень мало играл труса но класс правильный ибо если мы просто вне не пересекаемся сыгран трусом то это считается в пол с позитивом то есть мы как бы среагировали да то есть и реагирование предсказали данном плитка ли неправильно фолз то есть позитив потому что мы среагировали у этих регионах но неправильно поэтому фолз и есть фолз

то есть позитив потому что мы среагировали у этих регионах но неправильно поэтому фолз и есть фолз негатив и такая ошибки талибов освоить их либо фолз негатив вот правильно клипа трупа есть и струне g force негатив это когда мы не предсказываем когда вот бокс есть а мы его не предсказали вообще да то есть можно кажется фоткой стив когда нет overlay по да и фолз негатив от одной тоже науки совсем тут фишка в том что кола говорим про фолз негативы мы говорим про ground трус бокс и непокрытые

тут фишка в том что кола говорим про фолз негативы мы говорим про ground трус бокс и непокрытые предсказаниями вот это такие такого рода ошибки которые не покрывают наши это когда количество groundmoves вообще которые не покрыты непокрытые предсказание не какими-то вот фолз negative halls не предсказанные ложно не предсказаны а когда мы говорим про полз позитив это что мы ложно среагировали теста брат ложно предсказанное то есть там случае вот пресечение мы говорим на прав prediction бокс .

брат ложно предсказанное то есть там случае вот пресечение мы говорим на прав prediction бокс . говорим про поспорить и мы говорим про ложно предсказанный боксу то есть про предсказание когда мы говорим про фолз негативно говорим про истинным бокса программ трус не покрыты вот такая вот разница вот из этих вот поезде в negative до трупа и стив opposite фолз негатив еще true негатив это когда мы верно не предсказали но в детективе значит что мы верно не нарисовали бокс там где вы совать не нужно

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

как раз таки вот количество количество добавить его плоскости фолз негативов вот это вот те самые который здесь и легко я лично мнемонические так напоминаю что фолз позитивы точнее что при хижине определили кол это это это это тру позитива до поделить на что-то на то вы платите поделить на труп позитива плюс что-то даже вот так из них общей части с трех компаний из двух компонентов 3 вот то есть у них с детства когда с лагами и знаменателе которую престижен of oz позитив аурика lafox негатив

у них с детства когда с лагами и знаменателе которую престижен of oz позитив аурика lafox негатив вот я запоминаю это как поскольку престижность буквы п и фолз позитив посетив та же буква п то есть вступает понятно но пусть xp a negative с буквы н т о престижно и т.п. значит поспорить и под я так что у него ничего запомнил это сам деле кучу раз помогала мне и так какой бы глупой правило досада стали потому что никак тематические связано с топографически но ответственный проза ты понимаешь о

стали потому что никак тематические связано с топографически но ответственный проза ты понимаешь о престиже на тупой то ппфп а recall the по остаточному принципу этот пп 5t + r все и потом ты уже помнят формулу для клана а значит pericol этот этого доля не по кодируют долю не покрытых т.е. чем больше не покрытых gold русов чем больше на детектор не видит объектов да этот тем меньше ли кол потому что мы делим на большее количество снега и наоборот престижен тем меньше тем престижнее меньше чем

что мы делим на большее количество снега и наоборот престижен тем меньше тем престижнее меньше чем больше мы подсказываем боксов как попало да вообще не повергал трус просто где угодно поэтому детектор песка за много много много дотаций боксов prediction of покрывает покрывает все грант рустам что их дофига да дофига бокса предсказывает но сами боксов очень много лишних то это у него быть маленький престиж высокий кол и наоборот если мы рассказываем мало-мало боксов все попадают довольно точно

престиж высокий кол и наоборот если мы рассказываем мало-мало боксов все попадают довольно точно нашими он трус и но какие-то gown трусы не видно там не видит машин да вот не видит наша нашу не раз сеть там эти две машины до to recall будет panaboard престижен будет высокий oricon будет маленький потому что покрытый не всегда он трус такой вот объяснение долгое 2 довольно простых метрик но они очень важный важных помните роль gone помимо этого в дирекции очень полезно выводить когда классов

очень важный важных помните роль gone помимо этого в дирекции очень полезно выводить когда классов много да когда классно едва не 31029 и даже подотри полезно говорить такие как ozai к призракам фьюжен матрицы матрицей я всем советую хвалить это вот здесь представлена просто выписываете все классы по строкам все классы по строкам все классы по столбцам и у вас по строкам грубо говоря можно тут уже нормированные танки это число от нуля до единицы ну а мы допустим можно писать их и нормировано

уже нормированные танки это число от нуля до единицы ну а мы допустим можно писать их и нормировано просто подсчитывать количество вот по строкам возьмем то что мы предсказываем а по столбцам и the ground русь и вот мы считаем сколько то есть мы считаем в каждый в каждой строчке до строчка это вот был первый класс допустим backside кабинет вот бойца камень от мы предсказываем по всем картинкам нами которых размечены бокса до истины во всем практикам дата сайте допустим насколько мы идем по

нами которых размечены бокса до истины во всем практикам дата сайте допустим насколько мы идем по классу bcd и говорим сколько как бы мы считаем сколько из боксов которые мы предсказали и класс которых класс когда предсказали предсказанный боксов класс который правит беседками нет сколько из них имеют айове больше 0 5 звук сами каждого из классов из остальных классов да если допустим 200 таких боксу это садись которые мы больше о ее 0 5 и у них классном тоже bc кабинет то у него будет там

боксу это садись которые мы больше о ее 0 5 и у них классном тоже bc кабинет то у него будет там подпишем эту чеку bc кабинет на базе кабинет этого число а если допустим часто предсказываем на месте телевизора bc от кабинета у нас в строчке был конец два столбца тиви будет большое число вот то есть мы туда кладем наше чеслав наши по сути фолз позитива и вот мы подсчитывать таким образом какой класс предсказывается или накладывать на какой истинный мы мы по сути считаем этой матрицы на имеем

класс предсказывается или накладывать на какой истинный мы мы по сути считаем этой матрицы на имеем полных масса там какие классы с какими другими классами наш детектор путай да то есть мы имеем как бы такую точны точно анализ ошибок потому что можно говорить о а молоко будет с кефиром потому что вот у нас в таблиц написано что когда плескаться молоко оно вице-как кефир очевидно как ваш то нужно посмотреть может мы перепутали метки этих видов dts эти или там на вроде ли на фотографии сникет

посмотреть может мы перепутали метки этих видов dts эти или там на вроде ли на фотографии сникет кефир молока общее одно и тоже и их невозможно различить то есть можно какие-то выводы делать таблицы по лекалу престижу довольно сложно можно конечно класса вывести тоже что-то сказать она то есть допустим вот молоко почему-то часто не предсказывать у него прикол низкий но в об этом от земной сказать точно что молоко не предсказывается и к что вместо него предсказывать или с она тупо не

сказать точно что молоко не предсказывается и к что вместо него предсказывать или с она тупо не предсказывается то ты сообщи не как-то это фоллз негатива то это капает в он у нас учит background класс вот такой класса деле выделяют вот чтобы все . 7 на востоке денег и вот таким образом можно очень подробно на рекультивацию водя вот эту контужен matrix то есть матрицу ошибок класс с каждым классом сравниваем да если к метрика которую использую статьях часто под и так сильно зация минаева лишь

сравниваем да если к метрика которую использую статьях часто под и так сильно зация минаева лишь престижен или map сокращенно не будем на нее сейчас самом деле тратить время не очень хочу это делать потому что она ну объяснение довольно долгое чтоб прям понятно объяснить о сути и довольно сложно 3 политеру и мая эта метрика обычно там не достигает он даже 0 5 часто ну свое при каком пороге также там пару ли вот но почему-то метрика скажем так она использует посижу прикол просто там перебираются

пару ли вот но почему-то метрика скажем так она использует посижу прикол просто там перебираются несколько уровней несколько вариантов confidence а до порога по кампусу порог опа ой ой у перебираются дашу понять никак наш детектор прево данном конкретном а.ю. или там какая-то вход пороге конфетница работает а как он работая в целом у средняя по всем там 10.11 рaдость вот и вот там при каждом порой код 13 пусть каждый раз за recall при каждом уровне рикулло есть какой-то уровень престижа и вот

код 13 пусть каждый раз за recall при каждом уровне рикулло есть какой-то уровень престижа и вот мы строим и or кривую и под это pr к его читаем площадь и от равно и брюки сижу на даиш престижно то площадь 1 pr кривой сказал кажется совсем там кажется перекрывает вск набор rico love & наборы престижен да водку . мы строим кривую и вот площадь под всем этим графиком это и есть и bridge престижный при всех этих я бросил один по всем по в итоге всем этим уровнем ли колы один лишь престижно амин

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

как среднее но обрешетка кого тут средние подающий кривой площадь под кривой амин это средний по всем классом то есть мы берем по всем классом кошка собака человек усредняем значение площади под крепостью под pr подпер кривой для каждого пятого класса вот получается такой мин eurjpy же но чтобы мы выкрутим туристы довольно сложно нужно проявлять смотреть примеры с вами тут детекторы но т.к. общими такой везде пишут и страницу youtube принципе можете рассматривать а удобно саня контакт с другим

такой везде пишут и страницу youtube принципе можете рассматривать а удобно саня контакт с другим пам об этой самолет одно число тут одно тут если новых японского если точнее и берете его там без их применения но into thin рассуждать матом как и классных ошибки почему такой надо это вот легче пока фьюжен matrix тот же самый а именно сама просто приводить статьях как вот одно одно число в списке начальником легко говорит наш это вот так а это качественные там допустим 50 и 100 да они там писала

легко говорит наш это вот так а это качественные там допустим 50 и 100 да они там писала чего матриц в какой с каким объектам путает то есть разные целью разных метре будет иметь хороший отель можно быстро конечно рассказать кому-то какое-то качество и сравниваться быстро пока мы же матрицы легко делать именно выводы анализ ошибок вот эти то это нужно знать и помнить но 5 как перейти какие бывают нужно смотрели то сайты мы рассмотрели задачу мы рассмотрели метрики владельца с тем что нужно того

нужно смотрели то сайты мы рассмотрели задачу мы рассмотрели метрики владельца с тем что нужно того чтобы освоить редактирование полностью но президент перейти к уже существующим архитектура не растим которые были созданы исследователями крутыми да мы придумаем свой собственный давайте просто подумаем а вот как можно решить такую задачу мы решали классификацию мы умеем и сегментацию как имеем эти две идеи можно владели только классификации даже пригодится можно свалить эктор написать ну вот

эти две идеи можно владели только классификации даже пригодится можно свалить эктор написать ну вот давайте искать использование сетей но давайте таки использование растить да да классификации до представим что здесь не просите для классификации который классифицирует картинки любого размера возьмем пусть оно просто полностью а точно еда в несколько слоев поэтому можно картинку любого размера подавать и на обучили на большом надо сети который имеет разно размерные картинки на круто его это к

и на обучили на большом надо сети который имеет разно размерные картинки на круто его это к что 95 процентов классификации than топ-1 кости классификатор них сетевой давай его картинку в лед на верный класс 1 из 80 до на кукла допустим обучит ну а для кукол эти который только для классификации его замучили такой кофе кадр и хотим что сделать мы хотим теперь держись значительных не только какой на карте which is close да а где объект этого класса вот как бы мы такое решали ну на самом деле идея

карте which is close да а где объект этого класса вот как бы мы такое решали ну на самом деле идея намного проще даже чем там что-то сложное придумывать можно прям брутфорсом друг говорил о пришить так мы берем и берем какой-то фиксер нам размера прямоугольник до и идем просто папик сильно этим окном по картинке предсказывая каждый раз вот мы взяли окно до попали на карте какой-то регион и в этом окне вырезали вот этот регион да как отдельную картинку вот мог с вылези какая картинку патч crop

окне вырезали вот этот регион да как отдельную картинку вот мог с вылези какая картинку патч crop так называемый подали в классификатор наш крутой и получили ответ она в этом боксе нас объектом такой такого-то класс или background а мне как объекта нет да либо там велосипед кошка попалась она попали боксом круто ну вас не получали даже вероятность нужен game score класса круто а ну вот так перебираем циклом for высоте по ширине пикселей до о круто предсказали мы это очень долгий процесс но это

циклом for высоте по ширине пикселей до о круто предсказали мы это очень долгий процесс но это точный процесс ну и поскольку объекты бывает разного размера да мы возьмем ее такой подход сладили windows называется скользящее окно скользим окно по всей картинке слева направо и сверху вниз и предсказывать внутри этого окошечко нашем классе котором нейрона the number классификатор мне нейронным какой объект 3 этого окна сейчас и окно перебираем по размерам до делаем его более вытянутым вниз и более

объект 3 этого окна сейчас и окно перебираем по размерам до делаем его более вытянутым вниз и более чем там ширину то есть разные меня аспект рейши так называемые соотношение сторон высоты ширины меняем у этого окна площадь до общего большой маленькой остановить маленькие люди большие эти камыши перебирай там 100 разных параметров окон и каждый раз перебирали цикла по картинке предсказывали каждый раз центре патча когда 3 внутри 2 патч укропа до вкусно картинки класс нашем классе котором мы

раз центре патча когда 3 внутри 2 патч укропа до вкусно картинки класс нашем классе котором мы лежали редакции мы находим а вот на этом ригой нас такой толстой катере такой так вот здесь такой так вот здесь и просто потом оставляем бокс и оставляйте боксы которые имеют высокий скоро до высокой грят из класса все делаем пороков и класса 09 а сталин только бокс 09 все рисунок картинки наши итоговые боксы которые оказались крут с которым 2 которых оказались объекты довольно уверены и таким образом

боксы которые оказались крут с которым 2 которых оказались объекты довольно уверены и таким образом мы придумали свой простой детектор использующий для классификации но это было нейросеть то это было бы чтоб конте своем для классификации мы легко можем ждать от акции без каких-либо нейросетей да в принципе этого могло бы работать даже и первых отхода работали очень похоже на это и мы на это дальше посмотрим дальше будет 2 ст 1 и они ведь очень похожую идею который только что описал скользящего

посмотрим дальше будет 2 ст 1 и они ведь очень похожую идею который только что описал скользящего окна согласитесь идея очень простая то есть ничего мудрёно мы не придумали им просто сделали брутфорс 20 цикла этот дико долго потому что пикселей может быть там даже 330 уже а 90000 итераций до 12000 предсказаний гостинку секатора даже с тобой стал говорит это уже квадрат это очень плохая ночь доклад начальника это довольно большую которую на скорости предсказание до классификация нас таких боксов

начальника это довольно большую которую на скорости предсказание до классификация нас таких боксов еще 100 то есть это уже там 9 миллионов 8 будет ядра итераций и каждый драцена проходим сине россии на секунду не растение классификационное то очень долго но 1 вход был очень похож на это двух стадий казаться ир сен и если тоже то очевидно это работало бы мы обсудили что такой за все акции мы посмотри какие есть datasette и мы поговорили пирог есть метрики до полосы полете вопрос негативы ну то

какие есть datasette и мы поговорили пирог есть метрики до полосы полете вопрос негативы ну то есть точно такой positivity вообще так есть фолз true и обговорили использование таким об они используются в конфе же matrix как подсчитывать до объекты предсказанной и истины и мы провели под так как способствует эктор изобрести линии без всяких там мудреных сложных конструкций далее мы поговорим про то как какие архитектуры сегодня существуют с чего все начиналось ну и дальше будет интереснее

про то как какие архитектуры сегодня существуют с чего все начиналось ну и дальше будет интереснее поверьте мне собственная часть нашего занятия только только начинается

приветствую в третьей части занятия под и тактирование мы уже поговорили про не россетти классификации вспомнили какие они есть мы обсудили с вами как изобрести свой собственный детектор поверили под стас этой метрики про задачу редактирования то есть мы теперь владеем всем что нужно чтобы переселить последствий constic туром редакции и сейчас мы начнем с вами уже обсуждение посредства решений значит лекций съемочных сетей начнём мы с core идеей то есть главный идей и потом уже рассмотрим

значит лекций съемочных сетей начнём мы с core идеей то есть главный идей и потом уже рассмотрим отказами двух стадий редакторы в этой части в следующей части мы поговорим про одну стадию дикторы я подробно остановимся на си глушат multibox детекторе и так core идея то есть идея который лежит в основе всех алгоритмов детектирования несетевых это четыре основных вещи я выделил лично я стану некоторые могут согласиться могут выделить свои другие 5-6 частей я выделяю 4 главных которые нужно иметь

могут согласиться могут выделить свои другие 5-6 частей я выделяю 4 главных которые нужно иметь голове чтобы успешно решать задачи редактирование которые вы сходу могут быть очевидно первая вещь это то что мы мы они предсказываем нивелируем новые бокс и грубо говоря каждый раз из ниоткуда мы имеем некий набор заранее заданных современного стадиона имеют некий набор заранее заданных от экземах дефолт боксов да то есть мы уже на картинке мы имеем там заранее заданные априорные ну пусть десять

дефолт боксов да то есть мы уже на картинке мы имеем там заранее заданные априорные ну пусть десять тысяч восемь тысяч до боксов много-много боксов таких вот прямоугольников просто них не рисуем допрос тут мы имеем томми который файл в котором они записывают априорные априорное знание о априорно нашим как бы предположение где же будет объект на картинке они как бы понятно не могу подходить под все картинки сразу да но мы делаем их столько что скорее всего там под любую картинку определенного

все картинки сразу да но мы делаем их столько что скорее всего там под любую картинку определенного размера мы сложим их таким образом эти дефолт предсказания а фильтровать и получить местоположение объекта фильмы на этой картинке на то есть по сути все что нам остается имеем такие заданные заранее дефолт боксе до это дефолт по умолчанию фокси помолчали априорные нам необходимо просто выбрать из них подмножество местам 3 10 подходящий под наши конкретно изображения до остальные там с 7 тысяч с

них подмножество местам 3 10 подходящий под наши конкретно изображения до остальные там с 7 тысяч с лишним допустим с 8 до тысяч не рисовать ну не предсказывать вот вот такой подход он сегодня работы рабочий чем из неоткуда брать координаты и предсказывать борисова xbox и ложить голове у себя что бокса всегда заранее фиксированное количество пока не мере власти в подходах которые не кинет устоишь алан стейдж это вообще для всех них верно и начали там просто не смогут работать вот чтобы решить

алан стейдж это вообще для всех них верно и начали там просто не смогут работать вот чтобы решить проблему с тем что у нас непонятно на картинке да вот смотрите в чём отличие задачи классификация детекции принципиальные в значит классификации приходит находит на вход приходит картинка и мы знаем что она принадлежит ну то есть мы предсказываем 1 из 10 классов да мы не предсказываем один из всех возможных классов которых может быть там четное количество да мы предсказываем просто какой-то один

возможных классов которых может быть там четное количество да мы предсказываем просто какой-то один конкретный мы знаем сколько класса всего и какой из них предсказать и соответственно за это я такого не дотации мы как бы знаем что у каждого бокса фиксированное количество china количество классов да это мы знаем это круто но чтобы этот бокс найти мы не знаем сколько бокса на картинке может быть сколько собак на карте кильского кошек мы заранее не знаем его чтобы откроем решить многого им она мы

собак на карте кильского кошек мы заранее не знаем его чтобы откроем решить многого им она мы не знаем сколько всего заранее собак кошек но мы можем сказать что у нас мы заготовим столько боксов что мы не будем то есть что у нас всегда фиксированное количество мог цена нужно сколько их нужно у нас всего их восемь тысяч максимум и мы зато максимума сколько-то оставлять там 310 записей сюжет картинки вот чтобы поесть какие оставлять боксы да и как может подтюнить под наши стены под картинку это

вот чтобы поесть какие оставлять боксы да и как может подтюнить под наши стены под картинку это уже будет не рахите узнавать организма нашим но заранее их это какое-то фиксированное количество вот это 1 1 прочего идея 2 3 они про одно это одно про одну такую мысль что мы разрешаем классификации мы как делали там был один last курс intropia который по сути ну мерил ошибку между там предсказаниями вероятности классов предсказанных до истинных там распределения истина распределение то есть матч

вероятности классов предсказанных до истинных там распределения истина распределение то есть матч после 2 распределения сопоставляют и другом подвал телку машина обучалась чтобы здесь идет обучаемым мы решаем по сути две задачи ну я говорю что мы заранее в игрока это бокс и заранее задано множество данном случае мы не совсем примут выбираем там говорит не предсказывает индексы нужный боксов он все-таки регрессирует координаты выбран из там 3 10 баксов то есть в общем мы не с нуля правда

он все-таки регрессирует координаты выбран из там 3 10 баксов то есть в общем мы не с нуля правда регрессируем координаты доберем так числа 4 числа и там enzo резиновых нулями и предсказываем их там до чтобы они совпадали за ground трус бокса каким-то да а мы берем и даже там 8 тысяч баксов заранее заданных на какое-то количество раненых дефолт бокса мы до всех восьми тысяч баксов для всех из них пытаемся регрессировать их надо разные координаты к к истинным к нашему data соблюдали глиссировать

пытаемся регрессировать их надо разные координаты к к истинным к нашему data соблюдали глиссировать в плане чтобы вот 4 числа соответствующей каждому дефолт максу были как можно ближе к четырём числам бокса который нашей разметки вот и вот каждый за 7000 меняет свои свои локации лео верхнего правого угла он их меняет как так там специальный лосс мы еще рассмотрим подробно не спеша чтобы это все выжили но вот ключ воде в том что мы регрессируем то есть мы предсказываем вещественные числа 4 часа

но вот ключ воде в том что мы регрессируем то есть мы предсказываем вещественные числа 4 часа до каждого бокса вменяемых исходя из начальных заранее заданных четырех чисел каждого дефолт бокса то есть или phone box иране skip там свои 4 числа и на их репрессированных меняем так чтобы они больше походили на grant us in уже внутри каждого такого среди сирого немножко изменили координаты его был большой стал поменьше чтобы спадать с истинными боксом собаки dance лучше да и предсказано 3 него класс

стал поменьше чтобы спадать с истинными боксом собаки dance лучше да и предсказано 3 него класс ну класс мы знаем заранее поэтому просто делать тоже просмотра пию на классификацию уже не картинки родовую ты кусочку картинки внутри бокса то есть ничего такого тоже классификации но кабы кабы ты вы много раз ушами классификацию да много боксов потому что долго картинок вот имея эти две вещи или кресел и классика с одновременно мы переходим самом деле в никогда не которые больше класс задач чем

и классика с одновременно мы переходим самом деле в никогда не которые больше класс задач чем решили раньше пульта ду какой-то сейчас мы решаем после 2 знач одновременно на говорим где и что то есть две задачи к диета при весе что классификация и вот решает виде значит называется по сути мультитаск уже мульти задача то есть мы предсказываем и положение и что внутри то есть в коллегой запускать фикации это мультитаск лосс так называемый такое общество не до колоса мультитаск у нас а ну точнее мы

это мультитаск лосс так называемый такое общество не до колоса мультитаск у нас а ну точнее мы его в ну и такой локэйшн лосс плюс по сути классикой schloss то есть сумма двух лоссов вот мы будем вот так обучаться и последний важный пункт когда мы уже поняли как бокс располагается на как обучать то есть как лосс для этого всего делать как что мы регрессировал которым мы должны как-то ну хорош больше практических ок что но в итоге все равно предскажи мне идеально а при скажем больше боксов чем

практических ок что но в итоге все равно предскажи мне идеально а при скажем больше боксов чем нужно скорее всего собака будет покрывать и трожьте футболк saw много-много-много до 8000 там на собака попадать это штук 15 у нас истинный один на 18 нужно по сути оставить один потому что они все подходят на нефть и газ к сдвинуть на пару пикселей но чтобы оставить один мы даже дурно фильтрует берем из них самые уверили до самой самого самым большим скором класса собака оставляем если 15 1 и вот

из них самые уверили до самой самого самым большим скором класса собака оставляем если 15 1 и вот процесс того что мы оставляем один из там многих пересекающихся называется обычно но максу прощение это подавление не максимум подавление тех боксов у которой у которых не максимальная вероятность класса собака в данном случае а сталин только максимум вот да это слайд про то что вот дефолт боксу называется altro боксы то есть якорные мопсики якоре которые мы немножко регрессируем который множко

altro боксы то есть якорные мопсики якоре которые мы немножко регрессируем который множко изменяем регрессии косяк остаются одновременности вот эти свидания с моей-то это делаем сразу же вместе пытаемся зрачки решить когда на двух стульях духе и мы мы говорим еще что мы последовать фильтруем фильтруем боксы как именно ну мы берем пересекающиеся опять же на один объект такой the ground ru секс это не накладывается много-много бог саду с другом там на самом деле не зависит ли он трус а просто

это не накладывается много-много бог саду с другом там на самом деле не зависит ли он трус а просто если много пересекающихся предсказал предсказанный боксов там с солью больше 07 да и из них берем просто самоуверенный это нравится но наступаешь на нем с вот такие вот ключевые четыре идеи очень важны для понимания того для понимания при изучении с редактор ну все с редактором ner сетевые которым будем как это рассматривать сейчас они все так или иначе используют эти идеи всех реализациях и в

будем как это рассматривать сейчас они все так или иначе используют эти идеи всех реализациях и в своих своих схемах вот какие то больше какие-то меньше какие то не всех пользу дефолт боксы но так иначе вот к сегодняшнему дню почти вся которую к этому пришли что и заранее которые заранее заданы множество ifunbox да вот наша схема по которой будем говорить оставшуюся часть нашей акции это жирным выделены те архитектуры про которые мы поговорим про которые мы поговорим этого торсион инфо автор

выделены те архитектуры про которые мы поговорим про которые мы поговорим этого торсион инфо автор сильный фактор всегда маска все текущие части поговорим это 200 один вектор и следующая steam поговорим про ssd и ела ну там на самом деле будет yoola by один они ветре мы говорим про ssd ела архитектуры и очень подробно рассмотрим ssd прям вот от 0 от начала и до конца чтобы вы сами ко мне после лекции пойти или описать 0 свой с д а я вас уверяю вас получится если вы будете просмотреть лекции

лекции пойти или описать 0 свой с д а я вас уверяю вас получится если вы будете просмотреть лекции просто по ходу слайдов или завывать разные части тем более что этом ссылочку на ресурс который в принципе на который при себе целью жарили зону может быть себя проверить то есть это все все вполне реализуемо вполне pump кажется очень даже до логичным простым и есть такая point бей современные подходы и фишер это подход найдены с помощью от неровно поисках личку тоже гуглом как классификация

подходы и фишер это подход найдены с помощью от неровно поисках личку тоже гуглом как классификация решительно только пишет bad ну да прослеживается какая разница последовать а точнее одинаковость по названию вот мы про все это поговорим подробнее остановимся на single shot multibox редакторе ssd потому что он один из самых простых paristic туре и потому что они на самом деле один из самых часто используемых и просто заменяем ним big ball не раз нить можно парировать его качества как делал его

используемых и просто заменяем ним big ball не раз нить можно парировать его качества как делал его очень точным и довольно медленным как так и делай его доволь достаточно точно но быстрым и вот дай спички почему рассказываю среди сегодня подробно на перроне и вы как пошли ко дну ела дело пошло году был faster силен лишний рассказывал в позапрошлом году будет леску и рассказывал yolo и вот по опыту рассказов этих ней родительский apple что обе они довольно сложно устроены и в итоге их сложность

рассказов этих ней родительский apple что обе они довольно сложно устроены и в итоге их сложность их внутреннего устройства не сильно стоит того потому что они все таки а похож на ssd которую встроен довольно просто но не и метки 2000 которые позволяли немножко вылить в качестве дарить это скорость но с де сам по себе как то надо ментальной ли тура идеален и на сегодня мы рассмотрим надеюсь что после этого сами поймете как ела изучите как фарси она работает в общем последовав за эти вытащить из

этого сами поймете как ела изучите как фарси она работает в общем последовав за эти вытащить из понимание того как работ детектора них сетевые мы уже на пути к этому уже четыре идеи изучили это уже очень важных понимать уже понимает вы все до конца поймете сможем потом рассказывать как все устроено эти магические прямоугольнички показывающие это цена камерах там когда мы людей детектирует что ты еще таблица и так далее итак приступим обсудим с вами сначала 200 один детектор и 2 вы которых есть

еще таблица и так далее итак приступим обсудим с вами сначала 200 один детектор и 2 вы которых есть 2 2 2 это понту стоишь почему ты стоишь ну потому что таких методов не или сетевых предсказания боксов всегда реализуется в два этапа что логично первый этап это генерация пропал залов боксов то есть как я говорил останови здесь сегодня это иметь заранее какой-то 8 тысяч баксов да но 200 один мы на самом деле имеют они такого не имея по камере 1 вот токсины яда старый первый режим basic english

самом деле имеют они такого не имея по камере 1 вот токсины яда старый первый режим basic english in your network на просто основанный регионов совершении раз сеть сама первом старте 12 карской до 14 14 но короче не незадолго после там после alexeev после первой кого люблю сердца сети начали решать редакцию и придумали что сначала не придумали заранее бокс иметь но и такой же был больше практически навеянной практикой хакк а подумали что мы будем делить боксы как-то как она каким-то алгоритм то

навеянной практикой хакк а подумали что мы будем делить боксы как-то как она каким-то алгоритм то название селектив сеть в скобочках на схеме написано картинка потом кайт некий ближе проползу то есть мы предсказывает эти регионы интереса так называемые рой режимов фильтра режим pro поза вы то есть это по сути вот песка zenbooks и вот как-то накидываем грубо говоря их случайным образом ну не стянуть это некоторым образом который говорит нам что вы скорее всего в этой в этой части картинки есть

это некоторым образом который говорит нам что вы скорее всего в этой в этой части картинки есть какой-то объект вот интеллекте все вот этот режим пропажу метод генерирует нам просто бокс и как-то не очень точно совсем не обязана точно это делать потом он приводит к одному размеру их но это это не то не стадия первая стадия генерация боксов и обычно вот плести к этому размеру входит в этот метод в первый этап а второй этап это уже вот каждый бокс который нам накидал наш selective чуть взять и по

первый этап а второй этап это уже вот каждый бокс который нам накидал наш selective чуть взять и по каждому ксу предсказать вершине руси дигоксин предсказать предсказать какой классно трение данном случае человек там с ложки дано будет человек скорее всего его больше были по площади или по смыслу вот это просто бог с ней точно самом деле вот и не просто подкласс да но если написано в небе регрессор судьба unimax регрессоров то есть прогоняем картинку через все шесть фичер экстрактор до получаем

судьба unimax регрессоров то есть прогоняем картинку через все шесть фичер экстрактор до получаем вечер тендер предсказываем а также двойную за крышами и класс внутри этого бокса и уточняем ага нам select и все всего не очень точно сгенерил скорее всего левой ярким по праву ниже немножко надо изменить как именно изменить ну вот мы и наши в нашем регрессор am там дополнительным и все слоем которые там ну просто банально приказу 4 вещественных там отступа доу текущую там с 4 числа лигров не

там ну просто банально приказу 4 вещественных там отступа доу текущую там с 4 числа лигров не правой нижней там до пикселя на пиксель x и y там пиксель x y вот там нужно к ним поправки к куб лиц когда поправки то есть нужно сдвиги овцы ты нужно к ним в центр предсказать как мы изменим каждый четырех чисел вот это есть агрессии этих вот сдвигов и возьмете снега предсказываем отдельными там остановиться слоем регрессоров до 4 часа ничего сложного нету предсказывать и классифицирован класс

остановиться слоем регрессоров до 4 часа ничего сложного нету предсказывать и классифицирован класс распределения классов предсказываем и пациент даже по спросу а также лина сделаем то есть потому что мы искали много-много-много боксов там покрывается человек там 3 до 4 мы делаем но макс упряжь и подробнее рассмотрим как на макс украшена картинке выглядит это довольно просто пройдя представить и в описании просто но мы это увидим схемы на самом деле не мое это картинки из одной из классных

и в описании просто но мы это увидим схемы на самом деле не мое это картинки из одной из классных очень статей который называется обзор современных сетевых редакторов я его я эту ссылочку прикреплю обязательно к презентации после после лекции вот нужно всем потому что рекомендую почитать здесь посылочки не указал после арсенального там через год примерно вышла fast арсен а потому что все можно и что был медленно почему потому что а помните но и сами его придумали свой собственный в предыдущей

что был медленно почему потому что а помните но и сами его придумали свой собственный в предыдущей части этой лекции придумать свой собственный садик на основе скользящего окна детектор это то же самое . если то же самое только вместо скользящего окна на какой-то более google алгоритм более умного ритм придумывает где эти регионы эти боксы достали что мне передать все множество да он и ребята как-то полном участника снова select и все я смотрел подробно том что сейчас уже не используется в

как-то полном участника снова select и все я смотрел подробно том что сейчас уже не используется в современных методах но он как-то по лунному боли он это делает чем просто скользить окном всех возможных размеров вот он дело до полного но тем не заметить что мы на каждом боксе там будет 20 30 мы запускаем сервер не растёте прикиньте на одной картинке запускать там какой-то виде жида большую сеть тогда было примерно по размеру на была большая неэффективно большую не раз сеть которые работают там

было примерно по размеру на была большая неэффективно большую не раз сеть которые работают там в секунду на картинке запускаем 30 секунд одной картинке all other хотя бы 100 тысяч картинок до 100000 картину там бы пусть даже тысячи картинок на каждой картинке на 30 раз запускаем сеть который 30 секунд это тысяч умножь на 30 секунд это 1 это 1 одна итерация по сути то есть один проход по каждой картинка нам нужно много-много раз там 10 и повода по стоит 1 то есть это в обучался просто

каждой картинка нам нужно много-много раз там 10 и повода по стоит 1 то есть это в обучался просто бесконечность вот и из за того что это медно работала не только обучение ладно обучения пусть и с вами обычная раз правильно много навыков у то новый ференци в реальных использовать до в реальных умениях как он просто невозможно ты ведь просто где как-то редактируйте участок дружескими all to me особенно сегодня то есть реально время нужно быстро и как бы это было невозможно чтобы как-то ускорить

сегодня то есть реально время нужно быстро и как бы это было невозможно чтобы как-то ускорить облегчить жизнь схему изменили тоже придумали fast арсен то есть бы строишься но в чем и скорость на самом деле ровно то же самое то же самое что и тогда что и было видит пункты не меняются меня столько схема потому что имеется посоветовать действий мы сначала по картинке при прогоняем картинку через сердечную не взять получая некоторые черты задает фичер map здесь написан project и 3 proposals на

сердечную не взять получая некоторые черты задает фичер map здесь написан project и 3 proposals на схеме 3 3 после вторых стрелке вот эта фирма мы уже поет него поверх поверх того что он выдает всего 6 7 мы поверх этого switcher мото предсказываем региону не поверх картинки регионы ага ели все легче все чем эти регионы вот бокс и поверх kechir мало то есть в процессе признаков вот там пойду что считает за по высоте и ширине уменьшу картинка новых модель на основе мы как-то можно спасать родной

за по высоте и ширине уменьшу картинка новых модель на основе мы как-то можно спасать родной картики размер вчера по и там прикинуть какой бог сначала к будет какую область занимать на картинке но просто домножить на коэффициент в зад и ширины и там и там и все четыре числа боксу домножить рецепт соответствующий и вот генерирует поверх этого мы избавляемся от прогона не сидит 30 раз мы прогоняем сюда на карте один раз а генерирую фичи рта фирма про генерируем наших интересах вещи прямоугольники

на карте один раз а генерирую фичи рта фирма про генерируем наших интересах вещи прямоугольники добавлю макс и уже их мы приводим к этому размеру потому что нас мы пока не менее не умеем расщеплять с разной размерными тендерами работать на пятом батч у нас того чтобы помочь им хотя бы обучался уже все когда вы размера была во вторых ну даже картинка волшебного размера была и а тут мы и нам нужен подать на вход вот набор из предсказанных роли герои регионы на регионов интересно на вход

нужен подать на вход вот набор из предсказанных роли герои регионы на регионов интересно на вход классификатору регрессора до слоя вот эти вот 2 unibox регрессорами мульти класс классификация классификации классе котором слоям и вот чтобы они накопили котик сильно размеров kechir тендер на какой-то там бендер ли матрицу то нам нужно нам нужно привести к этому размеру it называется вот данном случае рой pulling отвечать команда это как бы процедура рой пуль инга origin of interest pulling это не

рой pulling отвечать команда это как бы процедура рой пуль инга origin of interest pulling это не как обычный пули кто уменьшаем размер там папа ландо это такой умной пулей который в итоге всего уменьшает размер всех сгенерированных поверх вечер мапо регионов интереса к одному размеру то есть роль pulling приводит к этому размеру что вы могли их составить и подать как один большой размерный тендер монолитный в на вход слоев классификации и регрессии или глиссировать комбинаты каждого из них и

монолитный в на вход слоев классификации и регрессии или глиссировать комбинаты каждого из них и поискать кажется из них класс далее они придумали да напомню что вот части на который стекает признаки совершить которых декад признаки называется big balloon он русский то позвоночник по-английски но просто потому что основа позвоночника то снова потом еще увидим интересную налоги с анатомией нейросетей борьба он называть это не растить который по сути я первое вычисление которое вычисляет основную

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

еще одна какие-то модуль который потом еще у порядок есть шеи вот университе это аппетитом спеша пирамид пулек например вот и есть голова голова она как говорит ответ она предсказывает нам либо когда ты бокса они либо никогда макса и класс то есть но сочи говорят что это у нас голова детектор состоит из двух голов от типа двухголовая первая была под голова говорит регрессию отвечает нам координаты таро голова говорит нам классификации весь класс то есть вот такая составная звук голов голова шее

таро голова говорит нам классификации весь класс то есть вот такая составная звук голов голова шее у эти крушение нет после докладов модулей рой пуль и к совсем то это как просто процедура и есть вот позвоночник big ball виде все же не гасите это принципе классические термины они используются частные да вот так вот анатомически странный но вот хитник big ball есть во вторых cnn это следующая модификации то есть был арсенин fast ир сена и факторы то есть еще быстрее вот ну это это тоже самое

то есть был арсенин fast ир сена и факторы то есть еще быстрее вот ну это это тоже самое чтобы факт картина но здесь ровно одно отличие можете заметить появился оказываемый рпн вот он появился не видите раньше был select и все который и картинку как бы на вход брал и против верил в регионы все таки образных на картинку и служит гарантом их пропорционально из лужи коэффициентом их алисой зил и накладывал на фичер map здесь это делает отдельный модуль называется режим проползал network вместо

накладывал на фичер map здесь это делает отдельный модуль называется режим проползал network вместо select и все очень просто используются некий обучаемый мод который мы обучаем предсказывать стать регион интересы да вот эти бокс и xbox орган интерес от одно и то же вот эти боксы предсказывают отдельной сеткой а не какие-то там уровень select и те которые там как реализован дори все знают что он устаревший вручную фишка том что было заберем ручных список в этом говорить надо детерминированные

устаревший вручную фишка том что было заберем ручных список в этом говорить надо детерминированные там на языке купцы плюс а вот пены то обучали алгоритм это не россии обучаю на которое отдельно просто такой легковесная которое там допустим это не всего 6 да там может быть вообще 26 которые просто генерирует нам регионы интереса вот на основе of data set а потому что обучают учимся одарена и предсказывать и боксы вот этим же они селятся все чем а вот них а откуда именно дома вот прям не раз

и боксы вот этим же они селятся все чем а вот них а откуда именно дома вот прям не раз сетью и не раз сети уже потом и обучали уточнять обучать уточнять координаты этих бокс у каждого из них и говорить класс внутри них также есть маска арсенин это это следующий модификация факторах селена отличия у него видите по чуть-чуть отличие у них буквально в чем-то он был до сначала был расселен у него был какой-то вот реализуется 4 база в идее которые мы с вами обсуждали кроме дефолт боксов потом потом

какой-то вот реализуется 4 база в идее которые мы с вами обсуждали кроме дефолт боксов потом потом мы перешли к счастью мы просто поменяли генерацию боксов с предсказанием признаков никак сети местами потом мы добавили вместо 3000 мы изменили его на видео про позорное товар к то есть три таких последний хороших изменения и далее мы я просто добавили еще в нашу голову нашу голову которых и сказала нам регрессию координат боксов и классно 3 каждого бокса мы добавили еще одну третью под голову

нам регрессию координат боксов и классно 3 каждого бокса мы добавили еще одну третью под голову виде масках и то есть маска prediction prediction маски ну потому что нас картин поэтому название она предсказывать помимо бокса до помимо четырех чисел видели верхнего правого угла и класса там человек он предсказывает точную маску человека введена внутри этого бокса то есть и к instant сегментация так называемая отсюда вытекает и это всё это решение значится с сегментацией одновременно сад отчалит

называемая отсюда вытекает и это всё это решение значится с сегментацией одновременно сад отчалит акций то есть такой снова мультитач до к нашей тоски классификации тоски и агрессии появляется тоска предсказание по сути москвы сегментации учета сюда времен 3 задачи круто но вот это говорю о том что в принципе такой модульный принцип не раз не очень интересное то есть можно кого угодно голов можем еще одну голову сделать на то чтобы предсказывать текстовое описание внутри бокса ждет еще в голову

еще одну голову сделать на то чтобы предсказывать текстовое описание внутри бокса ждет еще в голову еще который будет приказывай глубину внутри этого блока суда там ну третья координата есть позицию да это же очень интересно поизучать если будет на свет на эту тему вот дату можно покрасить попробуйте некоторые статьи да семейства задачи доходит до 7 задач а я смотрел например вот конференцию выступления андрей карпаты которые я глава разработки вот неэффективных методов его тесла искусство

выступления андрей карпаты которые я глава разработки вот неэффективных методов его тесла искусство директор tesla и там машины когда едет до сандра века он смотрит камерами на все вокруг или хайд очень много задач одновременно он предсказывает где сейчас светофоры где сейчас люди есть с машиной как бы все так каждый начальник седана это как бы все это отдельно задач отдельного класса то мне это все отдельные ветки вводит и у них там он доходит вплоть до ста ста задача дольмена то есть

мне это все отдельные ветки вводит и у них там он доходит вплоть до ста ста задача дольмена то есть мультитаск волос в виде 100 to suck одновременно стал задача очень много но вот есть такая гипотеза что одна тоска обучение одной из дач помогает обучение в другой например москве удалось вот москве удалось улучшить качество акции с помощью дополнительного supervision а виде данном случае масок то есть в виде того что еще внутри бокса маска предсказать масло помогает немножко раздвигать бокс бокс

в виде того что еще внутри бокса маска предсказать масло помогает немножко раздвигать бокс бокс ну за ней бокс помогает более точного спрессовать они в таки можно друг другу болью более помогают и таким образом качества и так этом памятнике map да вот на этой грядке в позапрошлой части нашей лекции по на 3 км а получается выше редакции потому что вот мы еще морские дали дали допустили данные плясали дополнительных супер vision дополнительный то есть дополнительные дополнительно учителя как бы в

дополнительных супер vision дополнительный то есть дополнительные дополнительно учителя как бы в этом плане да ты учитель 5 маски вот такой интересный game oscar селена на этом мы закончили часть двух стадий редакторов мы не будем подробно прям рассматривать еще подробнее что там внутри них происходит мы подробно так вот вся на ssd на сингл счет 1 стадия так это потому что я опять же повторюсь он просто очень достаточно простой в реализации вы сможете сам сайта парализовать и на основе него

он просто очень достаточно простой в реализации вы сможете сам сайта парализовать и на основе него понимается как работают детекторы до стабильные и понимать еще лучше у студийный и в целом вообще вы понимаете как работает детекция прямо с нуля с множеством собеседование объяснить сможете любому человеку другу объяснить это достаточно просто мы женимся на красивых картиночках которые тоже деланья наталья ссылку уже указал на великолепный ресурс вот до встречи в теле счастье нашего занятия

уровень служители приветствую всех в четвертой части нашей лекции мы уже обсудили с вами повторили классификацию мы с вами обсудили что вообще задача такая детекция и детектирование объектов что какие бывают с этой метрики поговорили про основную идею редактирование дайте 4 пункта к и основные ключевых идей дефолт боксов регрессии на таймере классификации и но максу прошит в подавлении не максимумов на предсказаниях и теперь поговорим про 1 стадии доктор и подробно рассмотрим си глушат multibox

на предсказаниях и теперь поговорим про 1 стадии доктор и подробно рассмотрим си глушат multibox detector да вот напомню что у нас выглядит вот так и структуры схема текущих походов за тактирование это не все не растить а все которые есть конечно же их намного больше но это основные из тех которые общи упоминают в час на практике и ну или где-то в истории когда рассказывается про нейросети и данном случае мы приходим к dust1 им там где нету отдельного выглядит которые генерируют нам регионы а

случае мы приходим к dust1 им там где нету отдельного выглядит которые генерируют нам регионы а это просто одна монолитная архитектура не возите там где все делать мужа свёртка буллинга никаких ручных алгоритмах таких западных модулей там нет все достаточно логично выглядит и просто это конечно достигается на самом деле все таки сложность архитектуру некоторые сложности реализации в отличие от 2 шт 1 га но там тоже довольно сложный то есть просто другая идея аналогичный подход как от господина

шт 1 га но там тоже довольно сложный то есть просто другая идея аналогичный подход как от господина только без доп это алгоритмы генерации там select и все чили режим проползал настолько да я говорил в прошлом и смотреть на прошлых слайдов я говорил 2 два момента которые точно сказать первый этаж насладись написано геологи 3 мы рассмотрим просто обычный yolo сейчас делаю три будет в последней части в следующей части лекции мы чуть-чуть поговорим про или ламетри именно ела первой версии сейчас

в следующей части лекции мы чуть-чуть поговорим про или ламетри именно ела первой версии сейчас покажем увидим а еще при 1 части и говорил что ключевая идея дефолт боксы которые заданы заранее которых 8000 например да и что например всех их используют на самом деле 200 один из этих точек используйте только одна ставили на говори про ваарси lenovo старина factors in moscow cidade вот faster арсенале mask арсен уже точно использует дефолт боксы они называют их именно помаде phonebook сорян carbox

mask арсен уже точно использует дефолт боксы они называют их именно помаде phonebook сорян carbox и то есть это якорные вот бокс относительно которых они же регрессируют координат то есть режим проползал network там рпн до уау фарсен она генерирует опять же не с нуля или бокса на бег это подмножество и дефолт боксов и каких-то их комбинаций то есть это это идея 1 накручивая на всё верну прослеживается во вселенных fast арсений best of best мастер эти и дефолт боксов еще насколько помню ни было

во вселенных fast арсений best of best мастер эти и дефолт боксов еще насколько помню ни было но вы среди идем она есть и так yolo 3 вот какой умный лукман потому что тебе не нужно несколько раз по 5 до сеть по как это было в арсен тебе не нужно несколько раз генерировать и нужно делать отдельный режим проползал ветку как в этом факторы все на нее ты просто прогоняешь просто догоняем картинку через вечер x-factor через дак бунда получаем некоторый некоторых фирмах и здесь на рисунке голубенький

вечер x-factor через дак бунда получаем некоторый некоторых фирмах и здесь на рисунке голубенький и чертах вечер map и уже папа потом по верхнему генерируем верховой фичер лапа мы предсказываем положение каждого из боксов и утренних приказы и клану кажется легли слишком просто да ну вот последняя стрелочка на самом деле довольно tricky довольно с довольно неочевидный переход там происходит от вич и рмапо к казалось бы так уже классу вот этот переход подробно рассмотрим в ssd здесь оставим его

и рмапо к казалось бы так уже классу вот этот переход подробно рассмотрим в ssd здесь оставим его просто как есть хорошо допустим так это работает на стабильный карточном просто убрали пены все работает ну вот но если сделаете как и ведь это работает и взяла эта вот очень похожим образом просто там дело предсказывается не на 3 скиллах на на одном стиле то есть на одном ну мы увидишь такой скейл вот насчет того как какие идеи у ван стоит же да вы тут 4 пункта это вот тоже стоит основные пункты

вот насчет того как какие идеи у ван стоит же да вы тут 4 пункта это вот тоже стоит основные пункты во иди основные идеи no one стрижи этого то что мы прогонять через бэтмен сразу никаких там никакие заранее делаете актив очень прогоняй получили вечер map и предсказывать поэтому фичер мапу вот полноценно слоем новый фичер map ну то есть новый фьючерса до загнанный grid нам случись agree that только видел такую это вот как этого гридо мы предсказываем уже бокс и снова делаем с опять же я не

только видел такую это вот как этого гридо мы предсказываем уже бокс и снова делаем с опять же я не углубляюсь как или нам предсказывать боксу приду это самое ничьи этой части мы рассмотрим в ssd и так что же такое ssd упрощенно схема выглядит вот так те же 4 пункта но картинка другая добавилось по сути если приглядеться только то что вот этих вот грейдов несколько тайских тут три нарисовано 3 голубики гридо здесь он один вот выходы к мульти классу регрессии одинаковые да а но можно погреться

гридо здесь он один вот выходы к мульти классу регрессии одинаковые да а но можно погреться первых что здесь для она еще не написана в for each grid для каждой где-то написано делаем вот поскольку эти классы регресс бокс а здесь for each спрошу локэйшн написано фактическая шила конечно внутри detection бог создал зелененького то есть тут немножко отличается архитектурный совет ела но они очень похожи по идее и в реализации можно ли сдавать их тоже очень похожи но высади основная фишка то что

похожи по идее и в реализации можно ли сдавать их тоже очень похожи но высади основная фишка то что после съемок первой версии ела это чтобы создать несколько несколько положениях или несколько слоев у которых вы берете фирма вы предсказываете по ним боксы и классы боксах объема такой один был самый последний вот вот и это см отличие между ними именно так 1 версиями но мы а вот написать такси multispace и here maps вот это такой мульти скилл ты когда мы берем несколько лапы на каждом

такси multispace и here maps вот это такой мульти скилл ты когда мы берем несколько лапы на каждом предсказываем но мы сейчас не спеша обсудим именно из и здесь это просто фраза к тому что отточить что-то одно но до идеала это наш сегодняшний девиз этой этой части лекции потому что мы не будем и пытаться удержать голове все архитектуры детекторов и точно знать там все как устроены досконально мы уже много изучили музыка 2 шт 1 и мы изучили ayol а сейчас ее слизи и так кратко схематично вот

мы уже много изучили музыка 2 шт 1 и мы изучили ayol а сейчас ее слизи и так кратко схематично вот этого схематично достаточно чтобы рассуждать о детекторах но подробно и уметь реализовывать не будет иметь ровно 1 это ssd на мы там увидите что хватит чтобы и обучать его и как быстрый сектор как и так так же как и точно детектор мы увидим на проект на на в практической части у нас будет такое сиськи обучения и inference ssd и растите и а мы увидим что на самом деле это очень хороший пример на

обучения и inference ssd и растите и а мы увидим что на самом деле это очень хороший пример на которым можно обучиться и все последующие секторе который граффити реализовывать взять и льна они будут очень довольна проста реализованному что вы уже имеете четкий фундамент виде вот 1 какая-то структура стиль глушат multibox и диктора которые используя самом деле ну я бы сказал очень много где он очень популярный в любомле по истории она есть по детекции поэтому оттащим ровно 1 ssd но от о чем это

популярный в любомле по истории она есть по детекции поэтому оттащим ровно 1 ssd но от о чем это очень хорошо рассмотрим это подробно начинается все на самом деле это повторение того чтобы свертка с такой pulling не повторять не будем потому что ну то есть мы повторимся вкусных вот но я просто хочу навести чтобы все голове была одна и та же технология до чтобы сами говорили на дону там языке я горю много раз вечер над и говорю много раз свёртка просто напомню что это значит напомню что у нас

горю много раз вечер над и говорю много раз свёртка просто напомню что это значит напомню что у нас картинка который стоит из высота на ширина пиксели да и три канала rgb красный зеленый синий нам случае и мы мы используем свёртку операцию который мы напомню это просто мы берем некоторые filters верстки или ядро свирский кивнул и проходим с этим ведром буквального цикла for как мы делали с владик window проходит все эти окна окном снег шагом до войны с тройным можно с шагом 1 пиксель обычно

window проходит все эти окна окном снег шагом до войны с тройным можно с шагом 1 пиксель обычно берут если хотим менять размер полости ширине идем шагом или пиксели то сеткой слева направо сверху вниз так придем сканирую нашу картинку каждый раз прикладывая ее этого тензор 3 на 3 к региону изображение 3 на 3 на 3 по элементных умножая и складывая получая одно число то есть 1 1 1 свертки с таким вот тендерам 3 на 3 это одно число записываем это число в фичер map вчера об это результат вычисления

тендерам 3 на 3 это одно число записываем это число в фичер map вчера об это результат вычисления выгрузят выполнение операции свертки ну и вообще это результат выполнения операции внутри сердца нейросети в общем тренера сети их называют в чернобыле карты признаков то это вот текущие при знаковое описание входного изображения после первых верстка но вот такое после там пули gamo изменилось пласте ширине после новосибирского снова менял чисто внутри обучаем на параметры напомню что в сверл

ширине после новосибирского снова менял чисто внутри обучаем на параметры напомню что в сверл точных местах они лежат или на фильтрах свертки то есть обучать своих вечер map & fitch об это просто статичная тензоры да если угодно таких тензоры чисел тоже как картинка бы стал ширина насколько этого каналов просто канавки 3 органов обычно больше уфе читеров avast ширина обычно меньше потому что мы хотим кажется что потому что там проверки гипотезы что необязательно нам сохранять касту ширину что

хотим кажется что потому что там проверки гипотезы что необязательно нам сохранять касту ширину что можно пулев делать до пополам делить и мы сохраняем количество признаков так что в качестве можем не терять поэтому поэтому в чернота как картинка только на некоторые и другой уже представление внутренней красить и не в таких фирма портоса каждый слой новый появляется на новый получается хейтер map карта признаков и называется просто и фичи вот этот скaчaть и чем об это наш основной сегодня герой

карта признаков и называется просто и фичи вот этот скaчaть и чем об это наш основной сегодня герой повествования с ними часто знает название еще и термин точнее обучаем параметры отвертка в свертках вот сами веса фильтра свертки 33 данном случае 9 чисел и вот таких вот фильтра все-таки обычных версию слоем помню много может быть вот сколько таких фильтров йорке столько у нас будет канала фуфыча рмапо после свертки вот то есть каждый фильтр свой собственный канал производит вот и вот понимать

рмапо после свертки вот то есть каждый фильтр свой собственный канал производит вот и вот понимать очень важно ну что дим будем довольно погружаться в это когда будем предсказывать по вечерам апу предсказывать когда ты боксов и класс внутренних нам нужно будет делать вашу такой высота ширина как вы движетесь отверткой и что такое глубина фирма подобен affirmative это количество каналов количество каналов равно количеству фильтров йорке все в этом слове все просто а у всех условий каждую фильтр

каналов равно количеству фильтров йорке все в этом слове все просто а у всех условий каждую фильтр свертки именно вот у каждой фильтр сорске стороны каналов сколько входного фичи рмапо все все настолько просто все это было но их нужно дорогое помнить именно будем называть ячейкой целом да ячейкой целом 1 1 локация и да если угодно это такой вот это пиксель фича рмапо да вы по завершении пикселя одна ячейка который имеет свои координаты ежи вот с ушами фирма ты просто там это тоже петельки черно

ячейка который имеет свои координаты ежи вот с ушами фирма ты просто там это тоже петельки черно по просто он по сути такой здесь ноль сам поставщика крупно это самом деле он у маленький это вот одно из ашу множественного чили просто чисел а точнее положение оно вот такое оно идет через и канала будет чекать ты все канал что мы воспринимаем это как одно какое-то кассирши нейронные выше называют ну это уже другая тема на самом деле там кто как немного поздно называется вершине роной кто-то

ну это уже другая тема на самом деле там кто как немного поздно называется вершине роной кто-то называть ваши мироном одно число в человеке то называет все каналы считает но вот просто помним что одна ячейка молодой джеко называть это один google pixel пещер на по у него есть свой ежи свои индексы строки и столбца вот и по глубине мы берем просто все числа в него здесь если тысячи 24 часа полудня там берёмся передать 4 говорю что 1124 это та ячейка вот ячеек таких фирма понятно столь как у кого

там берёмся передать 4 говорю что 1124 это та ячейка вот ячеек таких фирма понятно столь как у кого вы стола нож . возможно слишком подробно погрузился нам надо просто пригодится рассуждений и так насчет ssd мы будем погружаться в него сверху вниз точнее вот так и смотрел сверху вниз pipeline такой подъем картинку в сеть как уже вида был на схеме до проверять рис big ball получаем фичи фича мы получили фичи map вы старше насколько ты каналов поэтому тендеру предсказываем уже бокс на трещины и

фичи map вы старше насколько ты каналов поэтому тендеру предсказываем уже бокс на трещины и класс скорой внутри каждого внутри каждого бокса и вот как это происходит третий пункт из первого пункта понятно мы с этим pussycats и кучера следил 3 пункта подробно рассмотрим вопрос на котором нужно отвечать вся голове когда мы говорим про дирекцию это сколько боксов на генерируем то как понять сколько нам нужно чебоксар до нам случайно нас будет просто много-много дефолт боксов много-много зараза до

нам нужно чебоксар до нам случайно нас будет просто много-много дефолт боксов много-много зараза до 8732 пока помню боксов каждый из которых просто мы будем немножко изменять и фильтровать потом оставлять их там 3-10 да например на место картинки обычно 3-10 объекта какой размер картинки должен быть это нужно понимать потому что ну я отвечу на вопрос сейчас сразу потому что потом к ним возвращаться может и не будем но нужно понимать что ограничение размер картинки накладывается на вещами

может и не будем но нужно понимать что ограничение размер картинки накладывается на вещами технически технически да это вообще говоря agonisas только одним это архитектура нейросети если вырастет у нее лизать и есть место где мы требуем конкретных фиксирована заданное количество признаков на вход то у нас должен быть фиксированный размер картики который дает нам ровно вот это количество признаков на вход например полна связаны с лавандой осени ожидает охоты сюда 4 числа который получается после

на вход например полна связаны с лавандой осени ожидает охоты сюда 4 числа который получается после global буллинга например до того пулек костяком приводит к одному размеру я уже не важно короче если в мерсине то google toolbar приводит все к этому размеру да а что сейчас кажется уже редкостно частью везде есть край какой тип брата который приводит нести все когда мы размер что все работа на любой картинки но словно вот нужно знать не только спасла легкого радист ограничения сидеть не имеет

картинки но словно вот нужно знать не только спасла легкого радист ограничения сидеть не имеет полностью слоев она полна свёрточная да то скорее всего на работу любой картинки какие-то еще более там странных модулей потому что свертки а не помним они просто будут разные размеры фичер мата но в конце это будет итоге какой если конечно не будет такого что spent in which a nap размера 2 на 2 а свирская размера 3 на 3 да он прыгать что фильтр сорский размера больше чем вечер мат на такого овощи

размера 3 на 3 да он прыгать что фильтр сорский размера больше чем вечер мат на такого овощи только такое случается обычно свертки чуть его со спинингом размер практике либо не меняется либо делать скукота pulling off вот то есть там нужно следить архитектурой есть рисунок при лечении нет то любая картинка находкой сможет технической приниматься и что-то на выход будет выдаваться а вот насколько адекватно и новых и будет удаваться вот это зависит уже от вашей быть а чей выбор потому что все

адекватно и новых и будет удаваться вот это зависит уже от вашей быть а чей выбор потому что все обучали на выборки при которой вы что кнут плазе батч чтобы положить в бочке тандыр вам нужно чтобы не все поля того разряда погостишь или не потому что ну и по глубине то что был боишься 4 например да насколько насколько насколько это вот сколько тасков сколько должно быть все у всех танцоров картинок соврать входных и вот у чтобы точно совпадало высоко таможенная руководителя 300 на 300 до и вот

соврать входных и вот у чтобы точно совпадало высоко таможенная руководителя 300 на 300 до и вот привели все каких-то размер 300 300 это может очень плохо выглядите картика сильно-сильно горизонтально панорама таваса живых 300 300 просто сжимаем горизонтали это очень плохо как бы выглядит так но это как бы гарантирует нам что не весить обучиться она все на одном размере и вот эта маска она будет максимально хорошо работать поэтому вот такая идея что в детекторах часто все в зрении приводить к

максимально хорошо работать поэтому вот такая идея что в детекторах часто все в зрении приводить к книге к одному размеру это нормально это нормально рис 1 просто рисовать как делается на рисовом из картинки в 3030 другой вопрос так низко методов down and megan то есть ресайза там например с интерполяцией в линейное просто по какому-то принципу вычисляем по принципу допустим берем все кроме коэффициентами в каком-то пикселя берем его соседей тем самым мы заменяем 4 персонально 1.5 как сен 1 вот

в каком-то пикселя берем его соседей тем самым мы заменяем 4 персонально 1.5 как сен 1 вот и таким образом мы очень некоторые методом интерполяции уменьшаем размер то есть и хотя заранее фермент который приводит нашу картинку к фиксирую размеру где он тогда всех картинок получать 300 300 его что ваш отель модель работала хорошо на всех входных картинках в жизни давно преференции до в стадии тестирования вам нужно все книги вроде как 300 на 300 у вас не сломается ничего если будет предсказывать

вам нужно все книги вроде как 300 на 300 у вас не сломается ничего если будет предсказывать по картинке 1089 и 920 скорее всего да но вас будет и капризка не потому что вся такая я никогда не видела что это за вечер маpш в лемке топчи другие совершенно числа потому что я никогда на вход такое количество не не видела я видела только ну числа которые случаются при ходе котейка перес на 300 то есть это заповедь своим быть а чем распределением поэтому чтобы вот мочить тестова распределения я боюсь

это заповедь своим быть а чем распределением поэтому чтобы вот мочить тестова распределения я боюсь расстояние картинок вы всегда подавайте 1 на вход картинки такой же размера которые подавали на обучение но обычно все современные программисты нормально они ставят где-то явно assert или там ошибку вырыв когда размер нет не совпадает с тем на котором обучали пойти причине ssd часто называют если для ssd 313 это после среди идет число характеризующий размер изображения размер завершение который

для ssd 313 это после среди идет число характеризующий размер изображения размер завершение который на понимать на вход 303 стали 512 поэтому это 2 2 на ответ на второй вопрос размер должен быть такой на котором есть по сути обучалась вот ну и под которой на спроектированный смерти трудное при ограничении в архитектурном до 2016 года они часто были и как обучать а вот как сделать утилизированы тоже поговорим это нужно специальным образом вот то что мы предсказали это бокс наши классно других

тоже поговорим это нужно специальным образом вот то что мы предсказали это бокс наши классно других подавать gloss определенным образом мы увидим каким ok начнём говорить про садик с дед архитектура 700 multibox так и шифруется напомню обнимать на ход картинку а на картинке у нас чтобы обучиться той detector обучить мы используем разметку уфе дьявол этим баксов размеченных каким-то людьми а со светом или автоматические машины мне важно у нас есть набор бокса на каждой картинке который мы хотим

или автоматические машины мне важно у нас есть набор бокса на каждой картинке который мы хотим уметь предсказывать истинных и каждый буксир пыли писали формате называется космин игроками xmax играх макс это вот тот самый эль тбр формата есть лифт top right bottom формат который говорил ли гражданку правый нижний угол на 100 раз уж даже создали в этом формате видно что в данном случае вот это пиксель номер 640 по иксу и спешить по игреку это номер пикселя 546 по иксу 970 на 970 по игроку кажется

номер 640 по иксу и спешить по игреку это номер пикселя 546 по иксу 970 на 970 по игроку кажется нет брюс и . 770 по иксу и 520 по игроку мы берем две точки в них есть вот эти 4 числа botany в пикселях обычно картинку на мир уютно обычно их для пиксель и делят на ширину и высоту картинки чтобы нормировать от нуля до единицы ну там что ж сам нам просто нажимаем на константы вот такие числа только до единицы в размер картинки эта форма часто приводит другому формат в которой мы дальше будем

до единицы в размер картинки эта форма часто приводит другому формат в которой мы дальше будем работать на формат я называю его x y wh то есть x y таш это формат x y ширина моста то есть мы предсказываем центр бокса и предсказываю какая у нее широко vista ну а центр можно считать пополам берем высоту получаем 0 верхний угол до пополам берем ширину прибавляем получаем правом нижнем углу то есть принципе это одно и то же оно представлено одно в другое конвертится то есть ну взаимно обратно тоже

это одно и то же оно представлено одно в другое конвертится то есть ну взаимно обратно тоже есть но мы просто так проще так вот устроена просто регрессе в ssd сразу скажу что появилась ссылочка в промажем агу слайдов эта не просто так это случай с которой эти картинки великолепные по качеству взяты это очень хорош что творилось мне кажется нам учитель повезло что существует я просто не претендую на то что я допустим с нуля рисовать эти картинки просто я считаю что очень важно находить

на то что я допустим с нуля рисовать эти картинки просто я считаю что очень важно находить правильный ресурсы и уже на основе них мы умер важно стоит правильное понимание в относились встроен уже встроен новых для хорошее понимание того что происходит в среде и детекторах и вот рекомендуйте постите дополнительную ссылочку там тоже самое объясняется похоже на мое объяснение я конечно собственно комментариями собственным опытом с какими-то может сообщение минут английском поясняется тоже устроить

собственным опытом с какими-то может сообщение минут английском поясняется тоже устроить ssd и реализации даже с нуля предварительно можно только может проглядывать если желание ну вот суть такая что мы изучаем на по некоторым материалам я надеюсь что вам после этого будет понятно итак картинка на вход определись бокс в формате x y wh я пыталась его x и y ваш центральный пиксель и а ширина бокса все каждый бокс представлен так которые дадите тушь поделили на ну в терминах картинки напомню что

все каждый бокс представлен так которые дадите тушь поделили на ну в терминах картинки напомню что это все шин и литых траков да это пересечение двух боксов поделить на их объединения ровно как это представлено здесь оформились на форум вообще визуально это очень легко представить точнее в голове корона так и должна представляться и начнем нас архитектура стоит сначала из big bounce bounce в данном случае высадить но впервые вариации в первые статьи состоит из режим да вижу в доме три группы 10

случае высадить но впервые вариации в первые статьи состоит из режим да вижу в доме три группы 10 которая до 400 году вышла и она конечно помним что большая жирная толстая но она просто и устройстве это помогает просто период все вечер матами случае просто песка типичность turnigy кажется 1619 слоев точно даже не знаю но не так важно пас такой the backbone после которого одном случае даже еще не отрезали попалась один слой на который предсказывает еще класса ты еще классов это дал случае тысячи

попалась один слой на который предсказывает еще класса ты еще классов это дал случае тысячи классов сколько их вы начинаете даты берем просто птицами жене the backbone до видит в качестве падавана окей круто тысячи тысячи есть классах ну чтобы избавиться полностью цепных отрезаем потому что мне нужно предсказывать сейчас классно нужно предсказывать чернов просто доставить фичи можно картинки поэтому отрезаем три последних слоя и оставляем мы делаем вместо них можно увидеть как вот сейчас

поэтому отрезаем три последних слоя и оставляем мы делаем вместо них можно увидеть как вот сейчас добавили еще два зеленых слове ты все две семерки вероники свертки красной тапу лиги добавились где свертки ядро 3 на 3 до с пингом там стекала встретила 4 канала и еще отвертка 11 которая что делает на на по сути просто как полностью сложно вычислять просто вычитаем описание меняющий данном случае эту ширину и не меняющие и не смотрящие на какой-то регион картинки чисто как классификатор

случае эту ширину и не меняющие и не смотрящие на какой-то регион картинки чисто как классификатор действующие ну добавили вот авторы архитектуры которые не имеют количество тоже просто такое умножение по сути числа линейной операция и а дальше мы берем и важно мы берем фичер map и мы берем фирма польских слоев это вот и к баллону уже прям вот этот болт первый вечер map запомним его мы берем его с после даже не последнего слоя наших реже да а после какого то из слоев пока у них бежит он хочет

с после даже не последнего слоя наших реже да а после какого то из слоев пока у них бежит он хочет это слой номер can в 6 кажется он 1 2 3 4 блока он в четыре по сути так он 43 потому что это четвертый блок 3 свёртка в нем наберем фирма после да вот 43 это этапе charger тендеры полученные после 3 свертки в четвертом блоке вот то есть ну вот берем его он 3830 712 получилось данным путь на восток каналов было в нашем общем слой вот в этом за pulling off картинка 300 на 300 было стала потом стоят

было в нашем общем слой вот в этом за pulling off картинка 300 на 300 было стала потом стоят 150 потом 75 75 потом настала 70 примерно 38 38 накормили verde будет чувствует 838 то есть вот она результате размер acer такие сроки не меняли размер постижение потому что p1 был соответствующий да по этих было все ходите один поединка размер ядра 3 если делаем поединка виде 1 это 2 то есть в общем вычисляя по формуле там аж минус плюс 2 п поделить на straight + 1 донатов ломала филе размера после

по формуле там аж минус плюс 2 п поделить на straight + 1 донатов ломала филе размера после свертки получаем то что у нас не меняет свёртка размер области ширине а только пули меня if it alone все очень логично вот из 333 838 на скалку что в нас фильтром было наше число и супер это наш первый вечер map запомнила а второй такой же вечером берем уже не после этого слова берем после паса просто слой которыми добавили до самого последнего еще два раза уменьшить размер потому что мы добавили еще

которыми добавили до самого последнего еще два раза уменьшить размер потому что мы добавили еще один pulling 4 на 3 со слайдом один вот такой необычный cooling но вот такое делали авторы и и 1080 канал потому что вы тут свертки увеличили количество мы взяли вот тот 838 1919 подаем 1919 дальше в ну это все фигурой среди напомню там просто белиджи по сути да берем тот вечер map оттуда после этого мы добавляем еще шесть сверток на 8 но это кажется статье всяких там шесть изначально вот это не суть

добавляем еще шесть сверток на 8 но это кажется статье всяких там шесть изначально вот это не суть суть в том что вы берем берем 4 фичер mopar ok в общем подъемов и чернов который платит а после после vigy на которой мы навесили еще 20 хадж и слоя берем этот вечерам где таз подаем его дальше-то сделаем еще вот 8 соток данном случае сейчас секундочку я кажется понял здесь просто нарисованы еще редакционные инфекционные сетки возможно один на один да в общем на этой схеме просто представлена то

инфекционные сетки возможно один на один да в общем на этой схеме просто представлена то что мы еще накидываем после city tour by g еще сколько так занят экстра убивает рак экстра слоев или активы слоев не близки это синоним то есть дополнительных слоев которые предсказывают ну просто подсказывают дальше подъема где-то в 19 все число вставим 2 теле в чем план размер будет 10 на 10 и там с округлением ещё раз на 2 5 на 5 вот еще раз тут уже дальше без этого просто тянут поединка 0 получается

ещё раз на 2 5 на 5 вот еще раз тут уже дальше без этого просто тянут поединка 0 получается минус 2 плюс 3 на 3 и так вот доходе пока не получаем в самом-самом конце рецептура ssd мы получаем сам к нам конце всех слоев один-на-один 206 тендер вечер map и вот эти финики адресованы питчер motta пост соответствующих слоев нейронной сети с с д то есть вот после 82 после 9 209 номер блока давать номер терке блоки всего один со блоков не версии 11 как бы блоков и сверток в каждом блоке вот здесь

терке блоки всего один со блоков не версии 11 как бы блоков и сверток в каждом блоке вот здесь подвес свертки вот супер то есть мы в итоге вот эти шесть вечера матов запомнили и взяли просто какие-то тендеры которые в университете круто просто каких-то этапах берем их сохраняем куда то вот эти шесть что мы дальше с ними делаем дальше с ней мы делаем операции что ну мы хотим прогах них мы хотим то что мы хотим предсказать фокс и на картинке круто но вот мы берем эти шесть наши песни map и

то что мы хотим предсказать фокс и на картинке круто но вот мы берем эти шесть наши песни map и говорил что вот окей помнишь назади футболка заранее заготовленные заранее заготовлена некоторые боксы на картинке да там 8000 лента для говорил хасан посчитаем откуда их столько получается идея такая мы говорил что вот у каждого это фирма по скажем что вот для ячейки для для каждые целые чайки помочь мне говоришь со витёк это не пишет и чирва подводилась квадратик мы будем предсказывать от 4 до 6 ну

говоришь со витёк это не пишет и чирва подводилась квадратик мы будем предсказывать от 4 до 6 ну и либо 4 либо 6 дефолт баксов то есть в каждой теме к будто бы заданы 4 или 6 уже был не боксов да если в серых нарисовать их в каждой чеки и картику нанести то их будет там очень очень много и вот где бы даже даже не видим что это бокс и но в общем вот настолько это явно что он берет говорим вот она в каждой эти каждой ячейки это вот каждый из шести ричер вов мы присвоим некоторые номера до из

она в каждой эти каждой ячейки это вот каждый из шести ричер вов мы присвоим некоторые номера до из общего из общего порядка нашу дефолт боксов присвоим некоторые номера там 4 или 6 дефолт box вот здесь я на схематично показано вот одна ячейка как бы вот фрукты и здесь красным нарисованный тифон боксы 6 вот берем один бокс квадратных драмах разных отношений чтобы каждый defund бокс он как бы к своему размеру мог лучше регрессировать сюда чтобы считали их горизонтальной вы выиграли выбрали

к своему размеру мог лучше регрессировать сюда чтобы считали их горизонтальной вы выиграли выбрали дефолт бокс горизонтальные и вертикальные вертикальность квадратный толокна квадратный вот мешать что у таких предсказывает у каждого свой заранее заданный соотношение сторон до 100 ширина если заранее заданное положение положение за счет то есть положения и футболка за счет за счет положений ячейки до фичер маты то есть в чехии снег три икс игрек аскольда ежи номерах и чермак этой записи потому

до фичер маты то есть в чехии снег три икс игрек аскольда ежи номерах и чермак этой записи потому что уже 38 38 лет триста 300 но это некоторые такой крупный пиксель потому что смотрит на большой регион до рецептики помню но большой регион на картинки вот это крупный пиксель имеет шесть за детальный дефон боксов разных с отношений сторон stage 1 и вот каждый этих боксов мы хотим уточнить регрессировать к максимально похожему на истинный но если нашей выборке вот если посчитаем количество боксов

к максимально похожему на истинный но если нашей выборке вот если посчитаем количество боксов каждом из этих вот тэтчер map of вот они слева нарисованы вот они код 4 3 4 блока 3 свёртка седьмой блок 8 2 2 сек от идет доктора сила включали доктора сетка здесь во 2 сек а у них вот такие соответствующие высоты и ширины совершенно одинаковых обратно-то наскучит уж 330 на входе и мы не меняем и фильтры все квадратные у нас здесь какой-то приор скейл ну у каждого из поскольку у нас если бы дефолт

все квадратные у нас здесь какой-то приор скейл ну у каждого из поскольку у нас если бы дефолт бокс и все как бы одинаково расценивали да что они как будто бы какого-то одного размера то вот было бы нечестно по 100 страниц последний например последний супер пиксель дайте посмотрю в рецепте тут он сам большой на всю картинку смотрит потому что у нас были пуль или делаю как нику сможет поэтому бокс который который фиксируется в этой последней он должен быть большим на из копий картинки а вот эти

который который фиксируется в этой последней он должен быть большим на из копий картинки а вот эти а в этих и checkbox и будут маленькие потому что они смотрят на меньшие рецепте healthy могут прогрессировать меньше истины и боксы поэтому поэтому вот мы нажали некоторых офицера дефолт бокс все соседи футбо ксо этого печального нажали f3 коэффициент который заранее тоже задаем руками просто вот это отношение сторон дефолт бокс увидит их 4 где-то 6 баксов с разными соотношениями сторон 1333 когда

отношение сторон дефолт бокс увидит их 4 где-то 6 баксов с разными соотношениями сторон 1333 когда ну и а мы соответственно считаем просто количество боксов как разведет очень прост теперь в каждой ячейке у нас по 4 бокса до 4 умножить на 38 . 38 ну поверьте эта 5080 680 38 нож на 4 карточки battery box тоже самое делаем здесь 2106 и вот так мы поскольку мы на 6 термах мама пах как бы от 6 герман задаем для каждого из него дефолт боксы для кажется финала декарт ячейки в чем опа и просто есть

задаем для каждого из него дефолт боксы для кажется финала декарт ячейки в чем опа и просто есть сложить количество суммарными сколько мы в итоге бокс всего регрессируем да и предсказывает этих классы их всего 8732 да не смотрела 732 вот столько заранее заданных дефолт боксов у нас в single shot multibox детекторе в текущей архитектуре как как мы и построили 2 то есть мы уже дошли до по когда мы можем предсказать можем предсказать не может как мы понимаем откуда берутся эти бог знаний в каждой

можем предсказать можем предсказать не может как мы понимаем откуда берутся эти бог знаний в каждой они как бы пока что мы его так gps визуально ну и в коде реализуем мы присваиваем каждой заданной позиции как ее ракета дефолт боксы их строго их регрессируем а вот как сильно происходит регрессии но как именно вообще предсказываю ц'ада когда ты бокса и класс предсказывается с помощью сверток а как же мы берем здесь такая схема надо 11 здесь родились в такой полоской полоской потому что вот здесь

же мы берем здесь такая схема надо 11 здесь родились в такой полоской полоской потому что вот здесь просто свёртка три натрия отвертка 3 но здесь на самом деле не может быть например вот здесь сверху 33 а точно 11 отсюда идет в общем идея в том чтобы предсказывать чтобы предсказывать свёрткой параметры каждого сифон баксов как бы по глубине предсказывать что имея ввиду давайте я поясню подробнее вот вот как это пример фичи рмапо берем вчера после этого блока 2 свертки до 5 на 5 3 6 named размер

вот как это пример фичи рмапо берем вчера после этого блока 2 свертки до 5 на 5 3 6 named размер вот он вот он где два вот берем тот фирмах 9-го по нему называть размер 5 на 5 6 потому что же был много пудингов и уже был много сверток у него шесть каналов 5 до 5-го места ширина мы предсказываем новых 2 тендер с помощью двух с помощью одной свертки 1 собственно слой 1 100 что слой мы предсказываем некие новый принтер 5 на 5 ну мы не меняем размера по высоте и ширине да это актёр ким и правдивым

некие новый принтер 5 на 5 ну мы не меняем размера по высоте и ширине да это актёр ким и правдивым поединка 143 на 3 делаем падик один но мы меняем количество каналов было 206 хотим сколько а вот хотим столько столько каналов чтобы в них сохранить всю информацию о предсказываем их для этого вечера по боксов а именно мы хотим для каждый когда идём в свёрткой 3 до 3 до мы идем 43 не попали вот с pixel который посидит до кучи нарисован да мы сейчас идем свёртка и по пикселю который в самом центре

который посидит до кучи нарисован да мы сейчас идем свёртка и по пикселю который в самом центре нашего фичи рмапо 5 на 5 и чернов мы вот пришли в если туле отсчитывать у него нет x 222 вот и равно 2 жираф на 2 вот мы берем 3 на 3 rca сворачиваем одним фильтром свернули одни фильтра получили один канал ну то есть одно число получили одно число в одном из канал выходов и термо по далее далее мы берем мы говорим говорим что нас будет столько фильтров то есть только ягер свертки сколько мы хотим

мы говорим говорим что нас будет столько фильтров то есть только ягер свертки сколько мы хотим чтобы было каналов а сколько мы хотим что было каналов мы хотим чтобы у нас на каждый дефолт бокс до заранее задний фон боксов этому этому фидером произвольно 66 и фон боксов у каждой ячейки то есть у этого у этого вот текущего пикселя с индексом i равно дважды равна 2 у него задано заранее 6 дефолт боксу где там записано файле мы присвоили их номера тому этому это этой очечки в этом фичер mapi и мы

где там записано файле мы присвоили их номера тому этому это этой очечки в этом фичер mapi и мы говорим о а вот каждый 6-ти боксов мы хотим этих боксов но они хотели зачем мы хотим искать для них сдвиги их ли агарты угла правого нижнего угла нам случаев сдвиги их x y представление виде центра и шелест и сдвига этих дисков 4 часа до каждого не пускать у нас таких боксов 6 для каждого мог искать 64 числа получаем 6 в ночь на 4 24 числа и вот мы говорим что мы будем для этой ячейки в канал номер в

числа получаем 6 в ночь на 4 24 числа и вот мы говорим что мы будем для этой ячейки в канал номер в каждой следующих каналов на канал фирма по мы будем записывать в соответствующее число скажем что ok у нас первое первые четыре канала и выходного фича рмапо это будут сдвиги 1 дефолт бокса по x и y до вычета с 4 канала получили потом еще один бокс хотим регрессировать да еще четыре канала you to cut шесть раз то есть каждый каждое конкретное число каждого бокса регрессирует отдельным фильтром

cut шесть раз то есть каждый каждое конкретное число каждого бокса регрессирует отдельным фильтром вот это основная суть для понимания так это делается с ним берем фич ермак 5 на 5 и на в 256 берем один фильтр селедки размера 3 на 3 на 256 потому что но помним что столько же канал сколько у входного fitch мапо умножаем поэлементно получаем 1 на 1 на 1 просто дно число записываем это число в канал соответствующий этому фильтру он первый канал да это это допустим этот канал будет отвечать за ну

соответствующий этому фильтру он первый канал да это это допустим этот канал будет отвечать за ну соответствующего первых положением записано потому что мышц врачу сетку в носу часть середине два на запишем в в итоге выходной выходной песню тоже будет ванна 2 то есть и равно дважды равно 2 в положении 2 2 2 мы запишем число соответствующий свертки это вот этого нашего фильтра 406 на регионы kaptika 336 и регион в чем а по пять на пять запишем это число соответствующие например сдвигу центра 1

336 и регион в чем а по пять на пять запишем это число соответствующие например сдвигу центра 1 дефолт бокса потом берем следующий следующие дров свертки предсказуем теперь сдвигу центра крат координаты y центра да там было x центра крота игры центра потом третье число берем третий фильтр свертки получаем сдвиг ширины 1 дефов бокса вот получили таких 4 фильтра берем еще четыре фильтра свертки сворачиваем с не и получаем еще четыре часа еще четыре сдвига для следующего дефолт бокса это ячейки и

с не и получаем еще четыре часа еще четыре сдвига для следующего дефолт бокса это ячейки и вот способность ячеек пять на пять столько же у нас будет где он padding 1 до чтобы у нас не не менялась постишь или нет то есть каждый каждый каждый ячейка каждый из квадратиков этого фирма по 1 да он будет в центре свертки когда-то его сказал с этой свертки напишем соответствующее число в наш выходной вечер map какой то же быть пять на пять на 24 потому что ну мы делаем столько мы делаем 24 фильтра

вечер map какой то же быть пять на пять на 24 потому что ну мы делаем столько мы делаем 24 фильтра свертки то есть в итоге мы сворачиваем наш вечер map пять на пять 206 фильтром свертки в котором размер фильтров 3 на 3 и фильтры в таких 24 штуки каждый фильтр линию соответствующее число соответствующую дефолт бокса для каждой из ячеек по которой мы прошли вот такая фича тендер на плате на выходе после вот одного из таких вот 6 вот таких для каждой из шести мы делаем ровно то же самое получаем

после вот одного из таких вот 6 вот таких для каждой из шести мы делаем ровно то же самое получаем там 3838 на 24 1919 2410 на 1024 5 на 5 и 24 ну а 4 это потому что 604 допустим у этого 4 fun box of к обечайке поэтому будет четыре на четыре 16 24 24 24 1616 этого предсказываем x и y в добычу есть смещения нашего точно регрессируем а если предсказать еще около из классных не прихоть складно окошко собак там или никакой дотану не робби граната чтобы вот обучить что там ничего нет это мы хотим

собак там или никакой дотану не робби граната чтобы вот обучить что там ничего нет это мы хотим предсказать еще три канала то есть каждый канал тут будет соответствовать еще 40 классу классу то есть мы а также до каждого дефолт бокса вся логика только для каждого боксом предсказан теперь не смещение центра атомикс y wh да не не локэйшн да не позицию регрессируем а мы классифицируем score предсказывать классификацию score каждого из классов то есть s-класса в 3 данном случае и баксов 63 на 618

классификацию score каждого из классов то есть s-класса в 3 данном случае и баксов 63 на 618 для каждого ксапо 3 скоро предсказываем 3 скоро тут три скоро тут 3 скоро в боксе скоро этого бокса и так вот весь наш канал то есть каждый фильтр даже подсказывает какое-то одно число для одной ячейки которые равно какому-то из скоро в каком-то из классов какого-то из боксов то есть еще 8 ласковых припал всего мы получаем из нас при 24 канала то есть сорок два канала для ссор обогнал фичи рмапо который

всего мы получаем из нас при 24 канала то есть сорок два канала для ссор обогнал фичи рмапо который является выходом после съемочного слоя которые предсказывают нам регрессию и классификацию по вечерам по пять на пять позже чего по который берем в девятом блоке после второй свертки вот то есть вот настолько это поучаться логично это вот схематично еще можно показать так почему 150 число объясню смотрите мы взяли 5 на 5 на весит 6 получили 5 на 5 и 24 что предсказать мы слушали ну сдвиг по

смотрите мы взяли 5 на 5 на весит 6 получили 5 на 5 и 24 что предсказать мы слушали ну сдвиг по центру и 5 5 на 18 получили скорый классов году из класса для каждого дефолт бокса смотрите дефолт бокса всего шесть надо случает этого чувака в каждой ячейке ячеек всего 55 2520 у нас наше 150 то есть просто это все бокса до текущего фирма по это 150 вот таких устройств которых 4 числа это их вот сдвиги по недель находится где да и что внутренних то есть скорый классов их по три по три числа то есть

по недель находится где да и что внутренних то есть скорый классов их по три по три числа то есть всего семь чисел для каждого бокса который лежит в каждый зайчик этого фичер мапо который мы взяли после 1 сверток нашего по сути борьба у на наших сверток в сети сама архитектура ну вот дальше мы просто берем получаем что если мы возьмем ска с каждого здесь ради провели что у нас колечки там поскольку ты мог saw фашистам или по 4 мы вообще ячейки все боксы всего 8132 если взять вот со всех этих и

ты мог saw фашистам или по 4 мы вообще ячейки все боксы всего 8132 если взять вот со всех этих и поискать свертками отдельными конечно совершим слоями по каждому отдельный слой для вот оно в чем а под любой слоте для другого вчера по таких вот 6 слоев отдельных слоев детекции детекция так регрессе прусской акации да не говорю то есть аким следует x это мы получаем всего 8132 на семь чисел потому что нас по четыре часа для каждого бокса и еще по к чисел где кати количество классов + 1 + 1 потому

нас по четыре часа для каждого бокса и еще по к чисел где кати количество классов + 1 + 1 потому что еще каприз 1 то есть общая формула для количество чисел для каждого бокса это 4 плюс к 4 + к + 1 по сути вот настолько это логично и теперь умеем при поздравим предсказывать мумию на предсказывать положения боксов до регрессируем координаты заранее заданных и что внутри них находятся круто нам осталось только одно нам осталось понять как нам логос подавать все это дело ну как подавать лосс ну

только одно нам осталось понять как нам логос подавать все это дело ну как подавать лосс ну вот представим что красные бокс это наше предсказаны да уже после сдвигов наш из этих слоях вот мы предсказали красный да вот вот они появились допустим здесь их довольно малой должен быть 8000 но пока что для простоты рисуем вот только эти и желтое the ground rus да ну понятно как бы они совпадают с истиной стоп лосс мы с матчем с матчем предсказанные боксы с и стинга он трус но отношусь 7 красных и три

стоп лосс мы с матчем с матчем предсказанные боксы с и стинга он трус но отношусь 7 красных и три желтых вод и мы каждому из красных найдем посчитаем а ею для каждого из истины на каждой картинке мы так сделаем ну это легко критически делается посчитаем пересечении и присвоен каждый предсказанный бокс говорим что мы призываем его к тому ground rus боксу с которым у нас пересечение наибольшее случайно 75 пресечения среди них 3 у этого бокса у этого дефолту дефолта приор это синоним априорный

75 пресечения среди них 3 у этого бокса у этого дефолту дефолта приор это синоним априорный дефолтный box on carbox профессионально бог при скажем ну дефолт уже с замененными уже с измененными когда ты ли нашими сёрдж их слоями да они уже предсказали кит новые числа и вот мы предсказали смочили получили вот такое число разберем каждый раз максимум по строкам где просто по строке да мы берем максимум по столбцам для каждой строки вот и приз и говорим что вас тут номер когда номер один номер два

по столбцам для каждой строки вот и приз и говорим что вас тут номер когда номер один номер два номер три для каждого все бокса вот здесь вы их выписали вот мачты gt смочили и говорить дальше вот такой тип тип это то есть папой и правда ли что этот приор будет бокс мочиться нормально с этим gt смотрим но вот видно что вот этому какой-то присвоили да ну как бы совсем плохо пресекается но присвоен к это прям 1 для просто так вот а 0 а у этого вообще маленькой печенье там нужно ли 5 до 3 но мы ему

это прям 1 для просто так вот а 0 а у этого вообще маленькой печенье там нужно ли 5 до 3 но мы ему сил присвоили но очевидно что он у него падает под него очевидно почему потому что мы делаем порог а.ю. мы делаем порог а ею фото 05 джакарта вернет для карты до синонима new мы говорим что если нас тут наш предиктор бокс имеет по истечении с канту сам меньше нам 5 то мы говорим что нет это негатив это в общем это в общем ну по сути позвали the force позитив но здесь поднять он приподнимается

это в общем это в общем ну по сути позвали the force позитив но здесь поднять он приподнимается негатив матч потому что ему присвоится background метка написано что иначе мы говорим здесь ниже поезде книга не то что мы говорили об поезд в там кроме греха и другие это другая стала не путать есть позе в негатив это в плане матча правильно мы смочили неправильно вот и данном случае мы неправильным матча который уменьшил 5 присваиваем метку бэкграунда вот и а далее мы хотим регрессировать ним и

матча который уменьшил 5 присваиваем метку бэкграунда вот и а далее мы хотим регрессировать ним и опять же мы хотим регрессировать случилос хотим посчитать регрессировать не не все буксы которые здесь нарисован а только те которые максимально пересеклись gown трусами то есть вот здесь который приставка с первым со вторым третьим и вот это тоже с третьим пересекся ничего что-то дважды на 2 на 1 потому что потом мы на месте should run ну будет нас там два бокса плескаться всегда рядом там зато

потому что потом мы на месте should run ну будет нас там два бокса плескаться всегда рядом там зато они будут на один тоже gold rus хорошо мочиться на про стали местом их и фильтруем но максу кришну у вас это лост выглядит как это так формула такая мы просто берем и а вот smas матч или вот и для каждого из машин для каждой смачных пар берем predicted 4 числа до бокса и берем grand tour 4 часа для бокса и просто берем и считаем по михайлиди грубо говоря до модуль разности ну с мусор ледяная

для бокса и просто берем и считаем по михайлиди грубо говоря до модуль разности ну с мусор ледяная когда мы берем модуль разности ну это вашему такая форма то есть когда мы приготовили так что он немножко к параду ловиться у начала 0 чтобы были резко чтобы производной было лучше да чтобы это затем чтобы мы не за 0 ли производной в общем и она была чуть более информативной когда бы игредиента течь потому что эта песня этого число часто около нуля чтобы она была лучшим идем smooth ну это как бы

потому что эта песня этого число часто около нуля чтобы она была лучшим идем smooth ну это как бы хак в практически авторы сделали статья ssd до предела мтс must как пора было начало а потом ведется как модуль функция такая и вот формула вот так x как ты как бы ну это уже разность это уже пора вот то есть на форму принципе написано пером ground русские щуку там y сну координаты x центра бокса разве смогут модуль разности берем там если он ну просто разберем если она модуль меньше единицы то это

смогут модуль разности берем там если он ну просто разберем если она модуль меньше единицы то это 0 5 на разность квадратов иначе просто берем их модули -05 вот то есть вот такая форма для мусора dinos грубая просто модуль разности карт из этих чисел ок освещение центра весна ширина каждого бокса так где он для каждого бокса таким образом мы и делаем регрессе помним и любим сели в с помощью наследоваться до квадратичной либо потому что модуля носу чем его такой умный модуль такой между между м

до квадратичной либо потому что модуля носу чем его такой умный модуль такой между между м с ей моделям такая функция просто авторе придумали такой вот смысл один использовать его придумали и дальше мы делаем классификацию что мы же хотим поискать что внутри бокса до что какой внутреннего объект 3 него объект какой ну для него один из трех классов либо кошка любит собак олег background вот самом деле сразу же скажу что здесь еще написано про за как никаких манник что оно значит вы давайте

деле сразу же скажу что здесь еще написано про за как никаких манник что оно значит вы давайте разберемся ну вот мы считаем по всем позитив до которых таблица полить его это вот хороший матч и там где мы сильно смачивать раз box 2 box 3 боксовый 4 бокс четыре матча у нас в этом показаны спустив матчей читаем просто терапию говорим попытаемся кошку собаку предсказывать и каждого из них здорово а вот все которые не нашли себе да grand rue zbox они называются негатива негативы ну то есть много

а вот все которые не нашли себе да grand rue zbox они называются негатива негативы ну то есть много значений не в том старом который мы там во второй части нашего лектора смотрю негативных поле тела а вот в новом значении когда негатив то есть матч они нашли истину и и комачи и нашли называется негатива и вот когда мы мы считаем мы говорим что вот негативы негативы им нужно присвоить класс background мы присвоили его и говорим что хотим чтобы они выпускались поговорим кросс энтропию посчитай

мы присвоили его и говорим что хотим чтобы они выпускались поговорим кросс энтропию посчитай нам с background с background классом а затем с классами кошка собака то есть вот таким образом мы разграничиваем делом так что взять предсказывала боксы только скажем так бокса который не попадать на граунд rus предсказывали класс background а который попадает и grant us предсказывали классы которые мы там конкурсы лежат . собака вот но есть такая тема такая тонкость что он случае негатив будет много

там конкурсы лежат . собака вот но есть такая тема такая тонкость что он случае негатив будет много больше просто представьте что дефолт боксов 8 тысяч с лишним для объектов у нас три dance 4 объекта нужен 3 боксов итоге остались ну там вот не лишь уже после доноса и вот идея в том что негатив намного много больше чем позитивов именно в плане матчей и вот чтобы не обучить сеть не предсказывать ничего если будет слишком нога подавать негативов суть обучиться что и нужно предсказывает лучше не

ничего если будет слишком нога подавать негативов суть обучиться что и нужно предсказывает лучше не предсказывали ничего предсказывать сюда background что такое не произошло нужно ограничить количество этих негативов когда читаем лосс и вас подавать только все позитивы и только количество негативов это 3 умножить на количество пультов то есть четыре позитива там будем еще 4 позитивов с ними подавать 12 никаких там 8000 вот мясо как выиграть 8000 как выбирать 12 да вот эти наши негативов а очень

12 никаких там 8000 вот мясо как выиграть 8000 как выбирать 12 да вот эти наши негативов а очень просто назвать hard негатив манник почему ну вобщем моника это добыча про английского на русский переводим hard тяжелое то есть как добыча тяжелых негативов негатив считаться тяжелым когда сеть в нем предсказывает высокий score какого-то класса типа кошка или собака вот если в боксе в приоре номер три скоро score собаки 01 да а у всех уксуса left alone по 700000 сколько это вообще-то мы возьмем этот

скоро score собаки 01 да а у всех уксуса left alone по 700000 сколько это вообще-то мы возьмем этот бокс как hard потому что себе говорит что внутри него как будто бы собака то есть и как бы сложно сложно и сложно учиться потому что говорит блин музей должна быть собака но здесь но по факту background она говорит мне сложно то есть лидами это хард негатив она для тебя это факт негатит я добавлю тебе и волос чтобы ты здесь точно предсказывала background и вот мы ищем все вот такие сложные

тебе и волос чтобы ты здесь точно предсказывала background и вот мы ищем все вот такие сложные примеры сложные боксы для сети именно их подаем вот чтобы она именно запомнил что именно их я не нужно предсказывать штампует объект есть этот называется hour негатив майне когда мы май ним hour бегать сюда когда мы говорим о самые сложные бокс и обучаем не раздеть предсказывать и background самой самой сложной ошибки для нее как бы учись на своих самых сложных ошибках они на меня просто всех вообще

сложной ошибки для нее как бы учись на своих самых сложных ошибках они на меня просто всех вообще ошибках и начали я будешь и ничему и в итоге лосс мультитаск лосс да если выглянула 20 multibox статьи в общем часто тучи мультитаск лосса который общей случае будет адская это вот любые тоски вообще здесь 19-я задача это регрессия классификация мы просто берем и для каждого loss которые мы посчитали мы их просто складываем цыпленок коэффициентом складываем классификация кровь энтропии да ну

мы их просто складываем цыпленок коэффициентом складываем классификация кровь энтропии да ну который уже сумма двух по сути но понять ему по позитивом и складываем с несколько sentence алассана регрессию это вот такой вот мультитаск лосс multibox лосса вы называй статье поздравляю мы с вами научились делать inference ночь мы сделали операцию предсказания боксов и классификацию и куска центре боксов дифференцируемой то есть мы сделали дифференцируемы лосс который мы знаем уже использовать в poль

дифференцируемой то есть мы сделали дифференцируемы лосс который мы знаем уже использовать в poль торчи мы используем сервал операции свертки и заметили не использую ничего вообще тут такого что не использовали в классификации все или просто регрессии ну представлю защелками так ции как классификация по сервисе который мы уже хорошо знакомы это самая прекрасно что вот есть теперь мы умеем же задача детекции с помощью по сути задачи регрессе классификация где надо просто нужным образом построил

детекции с помощью по сути задачи регрессе классификация где надо просто нужным образом построил текстуру и разместив свертки канал и пока предсказывая числа характеризующий боксы в каналы по моему это гениально до последняя деталь напомню что по стокам предсказали боксы то есть это все это все вам не нужно так это что-то еще мы прошли то есть мы закончили мы обсудили связи вы можете присмотреть там 40 минут это ровно то что есть детекция тронута как устроен кусок multibox детектор я никак не

там 40 минут это ровно то что есть детекция тронута как устроен кусок multibox детектор я никак не игрушка а возможно где-то мог маленькое совершить там оговорку да но надеюсь что вот сообществу и в целом весь pipeline вот как он вычисляется возглавить час остался и рекомендуют сейчас его и уложить потому что вот ничего кроме сверток опять же пули гав мы не использовали в операциях и воз и мы использовали только те которые мы знаем просто по нужным каналам по в нужных ячейках но все это по

использовали только те которые мы знаем просто по нужным каналам по в нужных ячейках но все это по нужному вычисляли вот вычислив от аккуратно реализовав так вы обучите нейросеть редактировать прямоугольники на собраниях предсказывать для них нужные классы это очень практичная задача и одна из самых крутых задач сегодня нас напали задач в зрении предсказал бокса также напомню мы можем поискать много уверенных боксов машины да там на природу 4 бакса вот так рядом друг с другом и то они все будут

уверенных боксов машины да там на природу 4 бакса вот так рядом друг с другом и то они все будут правильно не всеми алиев больше но лично больше 0 8 даже до сгон трусом нам нужно выбрать один очень выглядит сюзерену не не презентабельно выглядит кому как-то начальнику покажу что у тя машина 3 на боксами как-то некрасиво фильм такой не вставишь чтобы сайт фильм нужно делать она мест но макс упряжь выбираем один самый уверенный бокс из них просто вычисляем между всеми предсказуемыми а.ю. если и

выбираем один самый уверенный бокс из них просто вычисляем между всеми предсказуемыми а.ю. если и берем из всех пересекающихся по ею больше там на 8 друг с другом и на нужды и ground руссо может друг друга пересекающихся на польшу 0 8 оставляй самоуверенный по скоро машина по скоро у какого-то которым предсказанное также ли максимуму скоро уже какой то уже какое-то число вот поэтому скоро машины берем максимальный box ну наглядно это выглядит так но здесь видно что собаки на свет лай собаки 2

берем максимальный box ну наглядно это выглядит так но здесь видно что собаки на свет лай собаки 2 бокса и на кошке 2 бокса вот так и не отфильтрованы по одному потому что confidence conference данном случае у одного из боксов кошки 074 и 088 у собаки в nokia s60 801 здесь мы фильтруем grandeur 8 ст1 набираем на 74 так выглядит наглядно надеюсь что это у вас не осталось вопросов как реализовывать точнее как у вас обществе как это реализовать но у вас не осталось вопросов как это бы только

точнее как у вас обществе как это реализовать но у вас не осталось вопросов как это бы только работает но я вас уверяю что если вы сейчас сидите еще раз при смерти лекцию или просто чтобы еще садите и аккуратно к голове еще раз обдумайте то вы точно сможете реализовать свой детектор single shot детектор я скажу пока еще комментарий что можно ведь и backbone обратили g а любую любую не россии до классификации вообще любую все любой текстуру по идее х термин куда можно запихнуть просто big ball

классификации вообще любую все любой текстуру по идее х термин куда можно запихнуть просто big ball что то что вы нажать на печи вот нам нужно как-то из и лично чтобы фирма по брать эти шесть фильмов чтобы взять нам нужен был нужно к те которые выдает фичей вот берем может любой может и fishing nets можем взять осмент можем взять алекс найт может какой угодно вот заменяемая модульность модульность это одно из самых прекрасных пришлось дипломники этот магазин budget помогает понимать что

это одно из самых прекрасных пришлось дипломники этот магазин budget помогает понимать что происходит на тренера сетей поэтому пользуйтесь используйте название ан-2 благо релиза реализовывать со своими руками это очень важно пишите если что если есть вопросы сам или здесь простой мы с 13 лсд и подробно подробно обсудили среди поздравляю вас в последней части завершающей нашего лекции мы поговорим просто проще некоторые подходы более новые но которые не значит они более точны или были быстро не

просто проще некоторые подходы более новые но которые не значит они более точны или были быстро не просто новее просто новые идеи и задачи которые случаются на практике редактирование какие именно какая именно детекция нам часто нужно

Лекция. Нейронная детекция объектов. Современные подходы и задачи.

уважаем служители приветствую в последней части нашей лекции по и тактирование объектов про современные подходы и современных задач в редактирование вот начнем с обсуждения какие же подходы современные то есть что я называю новыми идеями и потом поговорим ура провала задачки конкретной специфичные обсудим в каждый каждый задач обсудим какие то моменты которые характерны ну а также схема который мы видели в предыдущих частях лекций сейчас мы обсудим именно ела оговорюсь там увидела первый в

мы видели в предыдущих частях лекций сейчас мы обсудим именно ела оговорюсь там увидела первый в предыдущей части вон statistics сейчас это говорим именно ела в 3 или 4 посмотрим даже к новой не раз сеть и мы обсудим ее в на торце интернет статьи обществе с point то есть предсказание детекции на основе точек именно и поварим что же мы пишем дед такого это найти турага угла то есть три таких новых идей первое это yoola by 3 на самом деле то есть юля и only look vans не носить который мы уже

идей первое это yoola by 3 на самом деле то есть юля и only look vans не носить который мы уже говорили что в архитектура похоже на ssd просто у нее нет риски loading скейл ну высадиться деле 6 м м да если посмотреть там убрали 6 вечера мафов разного размера это все некий скинул некий размер при которой мы еще сделал где то кто то есть 6 размеров 6 скилов взяла в первой части был только один скин я помню в третьей части трески его как минимум точно есть это вот график того как ела автор любим

я помню в третьей части трески его как минимум точно есть это вот график того как ела автор любим вообще любит свою не раз сеть дозу фред он сделать графике слева звездочки этого ты ела то есть на сколько бы стояли даже график не вмещается в предыдущих университетом receive данном случае retina это вот новый не все дела на использовать focal лосс вот но мы не рассматривали просто потому что на такой довольно таки еще что-то обещает дельтян удалите лекции и и идея востока loss и обучение но одна

довольно таки еще что-то обещает дельтян удалите лекции и и идея востока loss и обучение но одна из хороших невеселый редакторов университете обогнала ёлки 3 и вот он стал с таким образом интересный на график дай можно решить ssd подобран б она где-то вот среди 321 том случае обычно но где-то внизу слева вот как бы по скорости может как-то и достает третью звездочку доела примерно примерно 50 миллисекунд на но видя что по качеству прикрывает 10 процентов map ёлки 3 поэтому 2000 до встречи на

на но видя что по качеству прикрывает 10 процентов map ёлки 3 поэтому 2000 до встречи на ssd и точнее как бы но повторюсь в елгаве 3 был быстр и точно что того что он использовал самом деле свой собственный интернет на сервиза ты сам самореализация было лучше чем ssd да там который на питоне написано допустил и еще у него собственный backbone собственно не носить позволен даркнет 53 вот то есть не какой-то там vigy а не какой то там нет а вот свой софт оптимизированы и optima довольно хороший

не какой-то там vigy а не какой то там нет а вот свой софт оптимизированы и optima довольно хороший архитектура которое эффективнее чем на разлив на самом деле поэтому поэтому так и получилось а не потому что ты так на вас и на сам такой по себе идея доктора там такая же похожа на из дел очень мало просто больше физически технических трюков сделаны рецептурой lg три выглядит таким образом то есть мы даже пропускаем через биг бенда случае это розовый в квадрате такой выйдем выделенный блок этот

мы даже пропускаем через биг бенда случае это розовый в квадрате такой выйдем выделенный блок этот дублон после этого фичер map видно что здесь явно отличие сразу видны между yolo и как минимум два хороших больших отличия вот в на схеме плюсиком выделено конкатенации о сложении как в резину блоки а умножением конкатенации да не путать как 11 склеивание по глубине о сложении на прямо поэлементно сложили 2 tender и вот велела мы к кате не руин тэтчер мат с некоторых еще многом после абсент него

сложили 2 tender и вот велела мы к кате не руин тэтчер мат с некоторых еще многом после абсент него вот первое отличие то что наша политика какие рукой то вечер map screen to do второе отличие основное вот ssd то что 10 об сэмплинг на зеленые блоки это вообще того что не было мы использовали о таком не в с этим мы использовали только свертки пуль или и дали все разного размера прост свертком 11 иногда 33 а здесь мы использовали еще увидеть абсолютный уровень слой отсыплет слой который нам

11 иногда 33 а здесь мы использовали еще увидеть абсолютный уровень слой отсыплет слой который нам увеличивает просто нас на размерность картинки фирма по точнее да то есть он увеличивать никак кулик уменьшать и увеличивать ну например декан валюша довести трассы на по транспортом валюш некоторые обучаемые абсент так называемый да можно абсент это же белене интерполяции опять же да после алгоритм то есть заранее заданным правилам вычисления заполнение между пикселей то есть мы каким-то образом

то есть заранее заданным правилам вычисления заполнение между пикселей то есть мы каким-то образом апс-м плен и вот это центре такого в этот день я была здесь есть это такая отличительная черта что опять же вот оценок нужно того что вы видите тут три желтых ветки это вот метки детекции и вот так название yoola lr lr это когда вот у нас этого желтые желтой ветке акции они устроены примерно также как устроены в ssd то есть они так цели регрессионный канала есть каналы для нужд и чермак их

также как устроены в ssd то есть они так цели регрессионный канала есть каналы для нужд и чермак их выходной канал и детекции каналы и классификации до скорых и черно по но данном случае их 3-го хмурьтесь тельность кисть у нас появляется в 3 и он вместо того чтобы как мы шли в ssd мы по пути забирали просто хочу напоминать или здесь дело доходит до конца предсказывает 1 скейла крупный скейл потом она апс-м плит чтобы увеличить чтобы можно было на большем разрешении до детектировать то есть петя

она апс-м плит чтобы увеличить чтобы можно было на большем разрешении до детектировать то есть петя что здесь собачки крупные как бы чеки да вот целы здесь отсылками поменьше здесь целый еще мельче вот и вот это вот риски его вот в этом и на этом этапе мы до сюда ходи мы все уберем с кем а вот здесь а ела это проходит и потом kappapride здесь скейл абсент снова скилл то есть вот такое отличие оно видно что нужно заранее понятно что с бы сказать лучше работать да потому что без не просто глубже

видно что нужно заранее понятно что с бы сказать лучше работать да потому что без не просто глубже просто на здесь сделано заметим там была леди же вообще здесь анализе долл то есть розовый резинку блоки это все же связал connection ими еще несколько тренируется это вообще идея взята из юнита а . котируется то что было до опция книга и после поэтому есть такие соответствие дерись резет идея in эта идея координация и плюс просто глубже сеть чтобы он понятно что все это вместе приведет к

in эта идея координация и плюс просто глубже сеть чтобы он понятно что все это вместе приведет к улучшению на самом деле базы где этаж вот так мы создали канал и все это нос это все камин также работает вот тогда вплоть до технические до технические детали реализации вот такого тела ветре и появился ловить 4 в этом году конце мая или в апреле мне автор статьи написаны на хабре что вышло их новости туры и что вот взгляни круто действительно впечатляет если посмотреть статью вот ссылка приведена

туры и что вот взгляни круто действительно впечатляет если посмотреть статью вот ссылка приведена на хабр там есть ссылка на статью и видят что они обогнали тоже пишем для тела ветре и в общем что они в общем многих обогнали и он оптимальным и полет оптимальным алгоритмом вот среди детекторов но это еще почитать статью я сам лично глубина в такие подробности но вот вышли на шею 94 от автора самом деле от алекса б такой ник и он сначала он просто дорабатывал даркнет за автором завтра галдите а

деле от алекса б такой ник и он сначала он просто дорабатывал даркнет за автором завтра галдите а теперь он самостоятельно он сделал настолько популярным настолько более удобный чем закрыт оригинальный что он стал сам автором новый лови 4 очень интересной истории по сути один автор перенял у другого вот такую любовь к редакции крайолы кредиту риола и его доработал ее своей но он кажется там еще больше хищниц то ли там их очень много вот есть этот список посмотреть то он такой то есть у нее есть

хищниц то ли там их очень много вот есть этот список посмотреть то он такой то есть у нее есть это же пункте говорю с биг бенда есть шея ник и head который предсказывает хоть как уиллоби 3 то есть это у нас такая такая же устройство также то есть также по каналам там нет активного слоями как мило 3d баллон берем нас есть вида кэтрин 350 легко витрин только доработанный с эспио помню расшифровку часто не использовать модуль но это cross stitch пошел connections то есть это какой-то какая-то

часто не использовать модуль но это cross stitch пошел connections то есть это какой-то какая-то прокачку еще надо резиновыми и с вершину с южных пить 8 вечера матки там мотивируем и бесплатном но в принципе более у но ничего мир сетях вот в цветочных вот этих блоках всегда у на называющихся вич по более умного обычно чем конкатенации сложения друг другом не происходит просто нужных местах нужды катятся нужно сложением вопрос нужно понять что с чем и какая мотивация этого я вот российским читал

нужно сложением вопрос нужно понять что с чем и какая мотивация этого я вот российским читал статью но он добавил такое улучшение бикбова и v шея шея никто-никто прожиточный слой а я сам лично его не использовал детекторов но это некоторые модуль который например сливает фичи вот спешу permit pulling это некоторые еще одна ветка которая тоже друга запоминает фирма по на разных слоях и потом вместе в первых к этому размеру и к котируется подается как скоординированный как бы тензор

и потом вместе в первых к этому размеру и к котируется подается как скоординированный как бы тензор характеризующий все где фичер лапы вдоль тренера сети до подающий дальше вы тоже в дирекцию то есть это такая прокачка еще как бы еще больше наполнения сети фичами чтобы еще больше в конце лосада что чтобы в конце у detection и его слоев был еще больше информации то есть перед головой его на такую шею который подпитывает и и фичами вот я очень рассказал водянистая и гуманитарно вот как это

такую шею который подпитывает и и фичами вот я очень рассказал водянистая и гуманитарно вот как это устроено точно нужно просто гуглить вспышку кермит pulling там вот пан это все просто брать отдельно и паз и гришин вот то нужно все то отдельно братья смотреть очевидно что на миг совался да еще разных хаков типа что вот на закрытый шин как миксов гришин классный был smoothing что он был лишь активация то есть не этом не арену domyos это новый тип акции столько mesh была слишком это просто вот

то есть не этом не арену domyos это новый тип акции столько mesh была слишком это просто вот все спит и краст достичь пришел connections но очень кратко fashion написано сайте он это все добавил это все ну пробовал оптимальные параметры вот и все в этом месте вот куча таких вот кисти хаков вместо красивый дереза просто кущей хаков таких практических а не дала дали ему что он называет оптимального соотношения скоростью качестве 4 ну и коне русь опередили довольно хорошая текстура и можно

соотношения скоростью качестве 4 ну и коне русь опередили довольно хорошая текстура и можно использовать ее в парк на практике очень хорошо он приводит скорость на разных и пулы в разных форм-факторах это очень-очень полезно да далее после в 4 но не после этого точнее выше тони от интернет но идея другая совершенно чем там у всех все того что вы суток до сих пор но она важна и и это важно центрифуг удача движется зрение вот все эти дискриминационные подходы это подходы который предскажу что-то

удача движется зрение вот все эти дискриминационные подходы это подходы который предскажу что-то по картинке а есть как бы я рыгнул разделяю генеративные дистрибутивные так не явно не формально генеративный генерируют картинку это вот ганы например да и сегментация принципе тоже можно отнести генеративным диск ремейк не номинативный этого что то что именно просто говорить так какой точке это какой-то класс это вот классификация детекция в общем и прекрати точек это больше диски нативные подходы

класс это вот классификация детекция в общем и прекрати точек это больше диски нативные подходы и вот вот эти диски нативных вот такие пойнта стены что и сколько точек тоже станете подход на там свои использует тонкости и хаки это деле задачу полностью мишин простаки планете мишн но оценки . но в данном случае это использовать акция идея проста проста мы в разметке берем и высказывания верхний правый нижний угол бокса а мы берем среднее получаем центр бокса есть представляем просто формате

правый нижний угол бокса а мы берем среднее получаем центр бокса есть представляем просто формате центр ширина высота да и теперь мы можем регрессировать точку центра именно вот в принципе также не чем отличается среда тоже мы там присказку центр от этой меры webasto ширину и так и дело вода но здесь они помимо этого 10 как бы сам путь предсказания немного другой формат keepon так уж такой то есть центральный key point дальше остались но вот ниже карточка есть видно что во-первых что что

то есть центральный key point дальше остались но вот ниже карточка есть видно что во-первых что что предсказывается во-первых много всего одновременно то есть не приколочу и глубину то есть речь координату до чтобы в 3d предсказывать key point и плюс они предсказывают самом деле там не совсем по искание прям регрессе делся там делается скорее как носитель больше похоже там делается условно на выходе а сети не там четыре числа да и скоро классов там делается набор из этот обзор у которого много

а сети не там четыре числа да и скоро классов там делается набор из этот обзор у которого много каналов кажется каналов это представляет собой такую карту вероятностей где в каждом пикселе этой вот это вот эндера расположена вероятность нахождения в этом говорят нахождения в этом канале точке этого класса вот так то есть для каждой точки для каждого класса настолько каналов и мы там условно этим предсказываем там голову точку головы человека но при этом канале с канал такая карта вероятностей

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

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

сохраняя точки тела вот определенного класса там рука нога вот и так далее вот идея можно просто рискнул таким же предсказывать точки и отделить наталка сильно только точек до предсказанная центр объекта его крайние точки можно предсказывать books вот такой вот бар dimoks такая вот идея его центр на это интересная из просто другая но выйдя на ладино тем интересно вот он даже какое-то время wizard и меня спросил card captor делали 4 о чем чем побьют эту zart скорость качество это мышца рта либо

и меня спросил card captor делали 4 о чем чем побьют эту zart скорость качество это мышца рта либо в скорости и бы в качестве либо соотношение скорость качество я мадам ответил что кажется я кстати посмотрел на метрика этом автор к штатной суеты взорвать в одной из метрик показалось но нужно себя смотреть опять же на чем они сравнивают я вам для этого вначале это и этой лекции как таки сказал что вот на смотреть на чем сравнивают с кем сравнивать какие условия сравнения такая метрика как она

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

как новая хорошая идея цель которой тоже скорее всего точно тоже быстро и но может не соток до но но важная идея данном случае целых 4 даже чтобы она меня солнце по многим метрикам которым кривой статьи соотношение скорость и качество еще одно последнему последние которым рассмотрим новых это идея fish in bed эта идея так и пишет нет можете помнить да вот сеть которую нашли нас от google классификации фе несколько слоев любой 0 бы 122 b-3 бассейном и а вот тож надо caleffi шин бет а вот тогда

фе несколько слоев любой 0 бы 122 b-3 бассейном и а вот тож надо caleffi шин бет а вот тогда что же принцип d1 d2 d3 и d4 этот бассейн это же такой же график даже примерно мог nascar cnn то можно увидеть двух стадий надо платил или триада стадионы и вот тут пошел что вот уже они построили кишки лови 3 дана уже точнее на 5 процентов примерно map но ты так около map на как она с этим насколько метрика миллиарда чертежи и вот они показывают что более быстрые flops это почет скорость и какая-то

миллиарда чертежи и вот они показывают что более быстрые flops это почет скорость и какая-то стакану это именно вот операции умножения и сложения в них считают в общем это такой график интересно ну не я же говорю это сделать на самом деле что я лишь не вкурсе к спроса реализовали детекция вот как именно я не golf архитектуру но я точно что они добавили как минимум показать bespin это бифитер перед network это вот шеи это шея это в виде шеи wedding они добавили там вот виллы 4 это спешу permit

network это вот шеи это шея это в виде шеи wedding они добавили там вот виллы 4 это спешу permit pulling а здесь это фича пирамид network то есть при монтаже какое-то слияние fitch фичер maps нескольких слоев в какой-то delphi чермак и передачи их эффективное уже в prediction в prediction слои до prediction боксов и классификации опять же размера сказал потому что не ставлю целью искать подробно можно погуглить посмотреть просто это такой хак это какой-то падать или модуль который использовать

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

индексировать что-то конкретное например редактировать людей да например что смотреть подсчитывать людей там где угодно чтобы смотреть на банально чтобы они turbo не подходят да вы плохо утка вида чтобы отдать что то недалеко до оценивает это правда 3d бокс лучше но можно там помощью как-то геометрически приблизить активировать их box вот то есть редактировать людей ну час это реально важно разных применениях то на промышленности возможно там на завод как ставить камеру чтобы смотреть а никто

применениях то на промышленности возможно там на завод как ставить камеру чтобы смотреть а никто не идет вот фиксирует лица да но чтобы банально чтобы поверх них маску сделать или начала детектирует лицо или чтобы онa маска счастливой орда или чтобы распознать лицо чтобы по лицу в койку дали чтобы выявить купить какой плохого человека и трудность нужно молиться нужно сортировать лицо потом уже когда редактируешь но вылезаешь лего или что знаешь уже вот тут маленько картиночку поэтому игроки

когда редактируешь но вылезаешь лего или что знаешь уже вот тут маленько картиночку поэтому игроки ранее лиц обязательно черви текста до если мы хотим здесь положение я знаю одно как-никак объявления google яндекс наводишь штраф утра сайта реагенты 100 с4 на вывеску делаешь перевод по картинке украина хотите приводит нам решить и вписывает очень удобно особенности вот турист до обратной стороне ты можешь посмотреть редактировать текст делать tracking именно вот понимать что не показывать

ты можешь посмотреть редактировать текст делать tracking именно вот понимать что не показывать детектировать до что вот это просто какие-то три человека ассоциировать во время что это вот это вот васид аппетита там илья да вот нужно все три бокса по времени трекать делать трекинг на видео уже они покадрово они по картинкам и такого общения это детекции значит акции на время этот трек и давать какие то действия на что происходит драка научный железка будет да сейчас 0 отметить полиции или что

то действия на что происходит драка научный железка будет да сейчас 0 отметить полиции или что происходит кому-то плохо да вот какой то есть и то есть он фиксирует аномалий или там но это просто вижу такие плохие примеры но они реально важны вот лучше камера не нужно даже никого там патрулировать просто устали но там драка все поехали вот например и а детектировать в 3d 3d autocad сейчас все больше идёт ярая мода и а ну и еще людям нравится это кажется довольно логично что люди как можно просто

идёт ярая мода и а ну и еще людям нравится это кажется довольно логично что люди как можно просто своего контента генерит в 3d и для этого ну и те же центральной как им нужно часа 3 да это понимать и на еще расстояние не только рвали на карте kiowa передашь и последнего реально миграции и это все вот игра про техники используются поговорим просто покажу задач конкретно про специфику какая укажу про решение я в конце прокомментирую просто поспешите куда побежали белая чтобы конкретно но вот

про решение я в конце прокомментирую просто поспешите куда побежали белая чтобы конкретно но вот когда мы редактируем людей мы на самом деле можем просто использовать тот же yoola by 3 или 4 ssd с обычной архитектуры в эти датчиков таки такой рака скорее танк это задача ничего среди такого специфичного на мой год не содержат вообще в целом люди обычно объект можно делать это хаки чтобы там какая-то просто берешь обучает людей там летом зимой до разная одежда вот там но именно вот как отдельных

просто берешь обучает людей там летом зимой до разная одежда вот там но именно вот как отдельных какой-то идиот факт архитектуре ради только ради за объекта человек обычные дела с обычной акция людей мешать цыпленок просто обучает там на всех объектах имена людей танку симфонью ним каких-то конкретный город конкретный там indoor outdoor сценарий на на улице и в помещениях очень просто под человека ничего особого не нужно придут подлецы этого сложнее подлеца придумал держать стик тур экономики

ничего особого не нужно придут подлецы этого сложнее подлеца придумал держать стик тур экономики cnn есть например фейсбук сэс это архитектура которая учитывает то что лица разное очень с келли но люди тоже разных скейлз curofy любой объект разный но лица маленькие полету же нужно как-то вот это понимать лица как часто бурные как и на самом деле как и в целом человек но просто человек когда ты будешь века его видно больше и больше зале информации содержит даже сумбурный принципе масштабе лица

века его видно больше и больше зале информации содержит даже сумбурный принципе масштабе лица человека в лицо а но и вдалеке реально может блюда ну и так с этим были сложности вот на вот этой карте кабины всех проблем обычно с лицом ну вариации обычно не правдивы для любых других объектов отделить вот но данном случае вот тот же мэйкап на лица это очень важно уметь как бы цитирует что-то все-таки лицо они там какой-то вывеска этом ресторана да вот и решаю решать эти шесть проблемы которые еще в

лицо они там какой-то вывеска этом ресторана да вот и решаю решать эти шесть проблемы которые еще в таких объектов ново для лиц специфично дату шлицев скиталец и главной проблемы шлицам маленькие на картинке занимают очень мало обычно мало пространства картинки вот можно здесь увидеть да что вообще ну это буквально там стремимся к 5 пикселей пять на пять даже меньше там когда мы пикселю поэтому вот нужно уметь маленькие поэтому при молярности tur ft senan хаки придумывали xbox вот про

поэтому вот нужно уметь маленькие поэтому при молярности tur ft senan хаки придумывали xbox вот про инструктирование текста залейте сразу на картинкам поясняющую основной проблемой ты ферван текста текст обычно изображениях он не его плохо детектировать прямыми боксами поэтому обычно предсказывали косые бокс с вами ski box с то есть они наклонены под углом до вот они по диагонали как то они вытянуты они причем всеми обычно вы где бы вы читали вытянули заданную форму либо сильно вытянут

вытянуты они причем всеми обычно вы где бы вы читали вытянули заданную форму либо сильно вытянут вертикальный формат обычному toyota специфика уже в соотношении сторон плюс специфика поворотах вот чтобы с этим справиться обычно в архитектурах предсказывание 4 числа ли верхней правой нижнего угла а предсказывает 8 чисел до то есть еще нужно два угла то есть уже не скажу четырехугольник далее гриферы мне размечали допустите рассказывай мне прямоугольника четырехугольник характеризующийся василий

мне размечали допустите рассказывай мне прямоугольника четырехугольник характеризующийся василий чисто потому что мы все каждый уголок рассказам независимо можно так можно по стуку еще поворот предсказывает да вот бог списка ли ещё его поворота на альфа градусов вокруг там оси z участнику в общем рассказал мише и угол фокса можно так делать можно и можно еще предсказывать даже и не самом деле четырехугольника сколько угодно чисел k который нас есть разметки то есть текст выделяется с ноутом

четырехугольника сколько угодно чисел k который нас есть разметки то есть текст выделяется с ноутом шестиугольником это давайте мы разметим на шестиугольники предсказан будем показывать шоссе нужно 12 чисел добудем шестиугольники plecat из принципе это все о таком общается на любую регрессию можешь просто регрессировать магического не то прямоугольника просто эффективнее всего 4 числа регрессируем и так можно навесить 8 можем предсказать поворот очень логично и все очень лизуна вот это основная

и так можно навесить 8 можем предсказать поворот очень логично и все очень лизуна вот это основная с птичкой текста в то что он вытянутый аспекта решу это что нужно предсказывать его повернуты сразу protecting сам вид отдельная большая задача отдельная область где много своих хаков на основе фильтров фильтрации данных фильтры калмана есть фильтры particle filter и но в треке вообще говоря а сама фишка том что нас есть время добавляется время на временной компонента им нужно сопоставлять на

фишка том что нас есть время добавляется время на временной компонента им нужно сопоставлять на каждом кадре а какой бокс это урок соответственно предыдущем кадре его чтобы сопоставлять можно просто грубо говоря ну по а ю д о ю трека просто делать битбокс по стекать с вот этим на пьющим кадре этом 09 eu больше всех вот мы и говорю что это был он но можно кучка если что-то ломает тогда пусть иначе как прошли то сломалось вот то есть пересечения до питера клю жены но чтобы это не ломалась нужно

как прошли то сломалось вот то есть пересечения до питера клю жены но чтобы это не ломалась нужно таких ok физика придумывать там что у него была скорость какая у него будет на основе скорости у этого бокса какая у него будет теле все положение когда мы предсказывали все еще одна по искателя ветка именно физики до физики бокса во времени вот еще вот фильтрация камни чтобы шум боксу бог внедряться нужно центрировать фильтровать его координаты и можно уже его более гладким сразу предсказывать вот

нужно центрировать фильтровать его координаты и можно уже его более гладким сразу предсказывать вот здесь пришли такие глотки да не похож на трясущуюся лекцию вот или за того что премиум фильтр вот и вот такая вот спецификаторы эффективно компонента фильтрация физические физические какие-то скорости боксов на видео со статической растения ну или если на действие можно сказать действий господство длину основными выделят такой прокси прокси лист и intent я так выделяю их прокате bst когда он

длину основными выделят такой прокси прокси лист и intent я так выделяю их прокате bst когда он предсказывает допустим бокса до людей и пытаемся повод бокса на картинке но бокс или там на сегментацию понять что происходит то есть мы используем которые прокси виде боксов виде вот детектора а потом на основе его выходов говорим о тексте киви этого и в каждый звук сопла с того что они говорят значит скорее всего происходит действие разговор на картинке то есть это на основе кофта промежуточного

скорее всего происходит действие разговор на картинке то есть это на основе кофта промежуточного представления как предсказано какой другой не развитию мы делаем вывод о каком-то действие это первый второй подход и the end else когда мы просто говорим о видео прям по видео на каждом кадре покадрово предсказываем сразу выдаем класс действие разговор ничего не происходит драка там катастрофа нам или все круто люди бегают спортивное мероприятие там экшн от отдельная задача самом деле экшн алек

или все круто люди бегают спортивное мероприятие там экшн от отдельная задача самом деле экшн алек огни шин уже lektion detection иногда когда мы хотим 5 где их есть а происходит это похоже вот видно что то все рядом с трафиком детекции но вот можно через них это может просто линтон скромно победил предсказывать покадрово и так и так делают и так и так работает в принципе как-то но часто это не быстро вот мы кстати в стартапе пользуюсь очень поступи ну и кости шанс задачу экшен и конечно данном

вот мы кстати в стартапе пользуюсь очень поступи ну и кости шанс задачу экшен и конечно данном случае что происходит к это действие руками да ну и там еще 4 книг детекции решается сразу потому что мы даже более где руки находятся да вот то есть это все вместе давай давай это все вместе вытекает сдачи зрения костаки и мы используем зрение в интернет этим интерактивное управление то что все работает real-time быстро вот чтобы так сделать это нужно пережить это много усилий нужно посидеть там не

real-time быстро вот чтобы так сделать это нужно пережить это много усилий нужно посидеть там не один вечер не одиноки одну ночь но это все решаемо сегодня уже и на может одна из самых интересных областей зрение вот конечный итог это учит машин увидеть что-то или учили видеть опознавать познавать действия что происходит на картинка что подходит на видео что происходит в 3d допустим да говорят 3d последняя задача которым поговорим о 3d это вот чем если за 2d но опять же можно предсказывать еще

последняя задача которым поговорим о 3d это вот чем если за 2d но опять же можно предсказывать еще может быть казани 4 числа бокса до можно предсказывать их получается три числа характеризуют один угол и три часа вот другой угол вот мы можем предсказать 6 сил и принципе то почему бы не дайте нас разметкой в 3d но вот по ролям в том что розетку и получить довольно сложно вот но в принципе так делают и поэтому вот фишка дтп in 3d нос активного их с 3d она в том что в ней в 3 данного синтетических

и поэтому вот фишка дтп in 3d нос активного их с 3d она в том что в ней в 3 данного синтетических данных если мы обучаем намаза камеру софт кукла даты доктора это реально кеттов лодки реальные вот и рио реальному домен от реального мира тасс на синтетике м имени ревком движке unity или слишком анрил до какой-то как избегать к генерируем с целью машин у нас есть розетка потому что мы знаем этот виртуальный мир мы контролируем в 3d не получаем розетку бесплатно просто из генерации среда река

виртуальный мир мы контролируем в 3d не получаем розетку бесплатно просто из генерации среда река разбежка знаем положение получаем разметку готова на синтетику принести в оливер довольно сложно поэтому приходится делать синтетику либо очень очень похожий на реальный мир что довольно сложно и требует затрат и ресурсов либо как-то попытаться сократить du mein gott это вот родители ждали нам реальным и виртуальным но делают это это это использовать то это более менее работает а есть хорош по ходу

и виртуальным но делают это это это использовать то это более менее работает а есть хорош по ходу придает акцию уже довольно существа лет 5 назад там привить хорошие вот рекомендую погуглить эту тему тоже интересно задачка вот если какое-то решение будут только за mediapad который умеет в 3d там у него сектор он кажется называется так и верящих в 3d чей трекать то есть тут воды и , когда есть редакции 3d тренинг то есть нужно запутались в 3d объект аппетит ушла ну так а еще 3 когда добавляется

3d тренинг то есть нужно запутались в 3d объект аппетит ушла ну так а еще 3 когда добавляется приходится усиленно работать и метки какой-то камера до появляется движение камера обычно когда среды работаем то есть лишь камера устанавливать где она то есть и учитывать ее внутренние параметры внешние параметры камеры это все так довольно таки вливается в во много новых таких под областей но разобравшись со всем этим вы можете успешно сегодня в 3d вот и вас наверное возник вопрос у вас возник

со всем этим вы можете успешно сегодня в 3d вот и вас наверное возник вопрос у вас возник вопрос а как же их дети наши решать и где же решение к себе значимые жители что неважно практике а говорили только про ssd и и луна бананах яблоках ну это все объясняется на самом деле там в большей степени просто играете нужные там и где вы нужны хокинг и говорю все присказки угол в тексте или там кликая тритикале пиратов в 3d но подробнее про все это почитать правда без 3d и без аксель и конечно пока что

пиратов в 3d но подробнее про все это почитать правда без 3d и без аксель и конечно пока что будем надеяться что дополнится можно почитать в одной иных статей на хабре я там я подробнее расскажу про решение для лица например для текста конкретные ссылки привожу чтобы здесь не занимать время или занимать место вот на этом мы заканчиваем лекцию по детектирования не свел редактирование объектов большое вам спасибо что вы были со мной течение этого времени надеюсь вам показался точек полезным

большое вам спасибо что вы были со мной течение этого времени надеюсь вам показался точек полезным надеюсь что вы много что запомнили вынесли для себя много идей может вспомнили лишний раз как работают там какие-то фирма посередке что это все такое вообще что происходит надежда взгляд все уложилось мы поговорим с вами о многих вещах они все вот на экране представлены и закончил таким ярким ярким моментом подчеркивая современные подходы и современные задачи реально реале зря ли такой жизни да

моментом подчеркивая современные подходы и современные задачи реально реале зря ли такой жизни да вот который мы хотим итоге научить машину видеть вот как и научить видит ну вот использовать детектор и в том числе и спасибо и до новых встреч

всем привет дорогие друзья меня зовут или захаркин и добро пожаловать в практическую часть занятия по нир сетевой детекции объект да у нас будет практика сейчас разбито на две части первая часть это inference оси глушат multibox детектора и вторая часть это обучение 700 multibox это открытость а мы будем смотреть как работает как работать на практике с моделью которой мы обсуждали на лекции так подробно тот самый сиваш от детектор давайте начнем сразу к делу первый ноутбук это вот inference то

тот самый сиваш от детектор давайте начнем сразу к делу первый ноутбук это вот inference то есть 100 как просто запускать по сути да готова или собрать этого visas везде и запускать каких-то картинках из интернета данном случае мы до сразу же качества в прошлом году было достаточно подробная практика по vision общем в целом и я бы посоветовал вам ее обязательно тоже посмотреть на русском ну какая то занятия просто тот случай в этом году mattel на английском поскольку очень много англицизмов

то занятия просто тот случай в этом году mattel на английском поскольку очень много англицизмов терминов существенных выдвижными детекции очень может помочь то что мы все на английском то есть все материалы английском может помочь им потом как-то гуглить это и когда будет читать статьи из архива на камирта вот оригинальная статья если вам поможет термина которая в презентации в практике на английском помогут вам просто лучше разбираться с терминологией да с пониманием что происходит на и вообще

помогут вам просто лучше разбираться с терминологией да с пониманием что происходит на и вообще большинство литературные придумали что на английском поэтому вот коментируй на русском и английском алешникова интенсивно не смутит и так до рекомендую посмотреть прошлый год потому что там долгое занятие но она полезна и в плане и подробнее пишет рассматривается как boun современной хороший график классификации и нами по сей день используется очень хорошо то есть и всего код и там еще и подробнее

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

кусок кода что выполняли до что делает но мы в прошлом году чуть больше чуть чуть более низком уровне в разбирали как подворовывать картинку вот советую посмотреть что просто не повторять материал да чтоб какой-то новый в этом году мы изучим опять же от и до слезились python все будет понятно но возможно какие-то аспекты лучше покрыты будут более подробно в прошлом и так эту мог основан на ноутбуке потепление год и nvidia рекомендую посмотреть вот по этой ссылочке их октября 2020 они буквально

потепление год и nvidia рекомендую посмотреть вот по этой ссылочке их октября 2020 они буквально пошуметь рассказали много интересного про текущей свою стратегию развития de fleur него и свистом архитектурному известно что видят одна из основных компаний поставляющих графический процессор наготу на которых вот не носите солнце не работают там большинство да и но обучаются на кластерах у вас огромные gpu там много много много и вот лидеров в этой области производства железа советую всем смотрели

gpu там много много много и вот лидеров в этой области производства железа советую всем смотрели довольно качестве сняли свои ролики мы начнем изучение ssd уже на практике то что в данной лекции напомню что если здесь не встревай модели тактика у которой есть разит уже здесь представлена стремные картинки у нее есть бы кубоун да это пор срочный пулек слои и потом еще шесть данном случае сеточных слоев взаймы артиллерии или экстракт мейерс xlr скажет которых просто дальше сворачивать в черноту

слоев взаймы артиллерии или экстракт мейерс xlr скажет которых просто дальше сворачивать в черноту даже чем а подкасту течет по сети то есть то что между верхними слоями в принципе на ход можно говорить что бороться картинка который является торфе черновые просто ее фичи изначальное значение и и признаки да ты че признаки и его значение это значение цветов в пикселях на интенсивность от 0 до 255 и поэтому фич она потечет через университете могут иногда снег 3 северных вечерам от тензор и делаем

поэтому фич она потечет через университете могут иногда снег 3 северных вечерам от тензор и делаем поверх не водой так надо доктора классификации продвигаете это просто напомню лекцию краткая лучшие на самом деле особенно части везде сейчас повторить самые то чтобы в голове все это свяжет а мы продолжаем мы инициируем силе зиру и модель вот здесь утилизируется строчки . плод до есть 3 основных пути использованы тактаров сегодня но я бы сказал даже он намного больше конечно же на я просто хочу

использованы тактаров сегодня но я бы сказал даже он намного больше конечно же на я просто хочу миллилитре чтобы как стиль сфокусировать внимание значит первый путь детекции такой один из самых популярных сегодня это вот модель этот трон 2 точнее то фреймворк от facebook компания которые активно тоже развивает зрение сегодня я надо соберет лидеров публикаций по декор нибудь от креста на фейсбук социальная сеть ну вот они у них такая сейчас политика я и вот we are clear вот и вот так тонн два

социальная сеть ну вот они у них такая сейчас политика я и вот we are clear вот и вот так тонн два прошлом году к схожу за эти в конце ноутбука объяснялось как с ним работать и в принципе довольно понятны по их туториалом в плане но он довольно-таки юзер френдли на самом деле когда была еще потекла с дисковым проектом и у вас тоже будет так трон надо почему то возникают проблемы потому что они все таки затащили все довольно сильно под свой собственно фреймворка под и pipeline и и них

что они все таки затащили все довольно сильно под свой собственно фреймворка под и pipeline и и них разбираться довольно сложно но это на самом деле палка вот такая двух концах вот описать свой детектор с нуля и потом обучать его кто-то и чисто вот скажем так на пиво пайтор чистом проторчать написать свой собственный детектора допустим среда реализовать ну если готовый до нови-сад печкой по на обучение своими руками вот а мой взгляд атомный наиболее полезно и лучше всего если собираетесь

на обучение своими руками вот а мой взгляд атомный наиболее полезно и лучше всего если собираетесь заниматься контрам зрением или участника игла соревнования обязательно делайте вот она так 500 свое сбережет за основу но потом напишите свои вот именно pipeline и обучения свои функции вот обработки потому что вы например были быть готовы некоторым и посмотри как они устроены довольно люди всё довольно просто но кода довольно много написать и если вы реально много много становится ого каких

довольно просто но кода довольно много написать и если вы реально много много становится ого каких ремарках его много порой ты теряешь нитях что какая функция делает и потом ну просто сложно даже суда to set чтобы внедрить новый до нужно там три четыре дня потратить просто разбираясь в коде который в этот морг уже реализовано это три марки джексон 21 основных форматов 2 цифры марков это ин-м detection в которой мы сегодня тоже познакомимся в в этом практическое занятие познакомьте в части номер

в которой мы сегодня тоже познакомимся в в этом практическое занятие познакомьте в части номер два ended actionpay мандат экшн третий путь как бы это вот как я говорил your pants да и допросим берем модель написан на python в данном случае и в обучаем с помощью вот пай торчок каких-то уделить до 1100 не используйте сторонний фреймворке он нам случае мы inference будем делать именно вот именно на основе вот пир пойдешь подхода грубо говоря то есть мы сейчас не будем спорить о том 2 иногда также

основе вот пир пойдешь подхода грубо говоря то есть мы сейчас не будем спорить о том 2 иногда также так что будет утраченный трон во был в прошлом году соответственно просто в чем хотелось как можно меньше вот оберток этим всем но этот текст такая задачка что в ней очень много пост-обработки различная чтобы работала качественно и в ней много да ну предобработки картинок чтобы обучать на больших это сетах все это привык тому что ухода изначально очень много какой-то людей которые вы используете

сетах все это привык тому что ухода изначально очень много какой-то людей которые вы используете ее можно запутаться но чтобы запутаться на сегодня разберём подробнее код вот так хоп porch копыта это место куда исследователи разработчик продукции готовые модели написан языке на фреймворке пайтор чему то есть python или на сайте про месяц специальный хаб и посылочки парк hat и в нём например ssd реализованы компании nvidia мы можем это катализировать и собственно молить комментарий поводу

ssd реализованы компании nvidia мы можем это катализировать и собственно молить комментарий поводу престижен это имеется ввиду clothing line 32 или флотом под 16w престижен этого 32 или have престижен до 16 пардон просто флот престижно 32 или х в постели 16w сша 4 это просто по идее количество бит отводимых для без водяных для одного сейчас на числа с которым вы работаете если сделать их b16 психов просушен вы сможете работать ну по память его ваш ваш тендеры до лежащих памяти центре кого

психов просушен вы сможете работать ну по память его ваш ваш тендеры до лежащих памяти центре кого тендеры же числа вещественные каждые шесть часов будет занимать половиной по памяти 32 пополам так 16 поэтому по идее-то так ведь размеры модели и всех тендерах которые тикают модели в два раза да это работает не в гнезде подержите 16 библиотека для работы с картами стерни то есть вот таким уменьшенными то есть ну с сейчас не числами с половиной точность их называли да это библиотека apex от тоже

то есть ну с сейчас не числами с половиной точность их называли да это библиотека apex от тоже кажется nvidia да вот и nvidia которое вот развивает направление так называемый вот лоб режим тренинг то есть вот и тренинг с маленьким престижным это вот это уже немножко самом деле вот есть такой подход к мотивации держать университет и вот лопасти утреннику немножко стороны колонизации находится это прям такая это о престиже на максималках в том плане что там вы используете прям уже к кодируете в

прям такая это о престиже на максималках в том плане что там вы используете прям уже к кодируете в явные кванты каждое число вот которые могут можно вот вы от 8 даже попробовать до 80 пикнуть и посмотреть что будет ну в плане то так и будет нажимаю красите сегодня правда корреляции конечно меня единственный я и сама возможно ли сюда эффективный и задержать и сетей от не будем отвлекаться сотен будет выбираться на сушу обычный флот и здесь комментарии по модели но я просто касавин напомню вот

будет выбираться на сушу обычный флот и здесь комментарии по модели но я просто касавин напомню вот архитектуру ему уже вспомнили что этот back blunt не россии уже была в этом туториале основное отличие от того что никуда на лекции то чтобы к баум big bowl не видео ресниц вот поскольку ну сегодня 2100 год ее готовил довольно свежий и вообще выделят можно видеть бакбол напишет нет кстати хорошее упражнение 5 fishing net из рассмотрены на прошлогоднему занятий на который ссылка начального бука и

5 fishing net из рассмотрены на прошлогоднему занятий на который ссылка начального бука и внедрить его в виде баллона вот в этой версии которое здесь попробуйте так сделать правда ну чтобы вершины был обучен на и насколько каким-то образом поэтому нужно постараться ну то есть тоже чтобы леса подходили хотя можно пробуйте просто и можно взять данном случае посмотреть что будет просто хорошая по хорошей факте к бразильскому пробую заменять как богу на другой вот начните пользователей ставит

по хорошей факте к бразильскому пробую заменять как богу на другой вот начните пользователей ставит диджей который мы смотрели лекции далее здесь взамен на некоторые такие более мелкие слоях were знаете признает а и тот тоже к мы обсуждали лекции есть detection халида головы детекции головы то есть это слои который ходят уже на выход классу на последние свои по сути не россетти которые предсказывают нам в каналах предсказывают нам положение мог сам их 4 числа его верхней там нижний угол ну или

нам в каналах предсказывают нам положение мог сам их 4 числа его верхней там нижний угол ну или там центр листа и и который подсказал класс да распределение потом к классов и 3 этого бокса к что дефолт бокса соответственно здесь была прикреплена сказано что он в четвертом блоку не знает а я как какой-то какой то есть скорее всего после блока стоит водка так пишет часто просто пол четвертого блока и по одной также над по одному или так число еще к после каждого из пяти additional вверх ну а

и по одной также над по одному или так число еще к после каждого из пяти additional вверх ну а тишину экстра case лари это все синонимы данном случае this просто 5 дополнительных слоев который dude после борьба на здорово посмотрим как это все ты уже на практике работает ну просто библиотеки здесь или стоят уже по умолчанию в колыбе напомню что нужно поставить себе gpu если у вас стоит в качестве ускорителя так мы посмотрим общину здесь просто информации как как какие есть вообще модули у

ускорителя так мы посмотрим общину здесь просто информации как как какие есть вообще модули у торчка ли у компании видео у неё здесь есть некоторый долин всех не на который шифруется но вот и сиди модель то которым давай для обработки речи в их глох тоже и некоторые видимо учились для работы с этим вот мы будем использовать эти два модуля видео среди это где сама модель реализована . в которой лежит саму модель ssd и и утилита для работы с ней вот так мы загружаем nvidia среди просеку dance вот

саму модель ssd и и утилита для работы с ней вот так мы загружаем nvidia среди просеку dance вот то есть моды которые помогают обработать с картинками перед обработкой пост-обработка инфекции код код который используется внутри этого модуля до которые выполняют будет выполнять учить будем запускать какие функции они называются и здесь никаких напрямую не импортировано они они все написаны в этом файле тебе кот спать вот который вот скачивается ван в колаб когда вы ставите тебе . [музыка]

этом файле тебе кот спать вот который вот скачивается ван в колаб когда вы ставите тебе . [музыка] поэтому мы вот я вывел здесь этот файл явно до командой кайф вывести файл в линуксе и здесь вот просто видно такие функции резон этом файле вот можем найти пьян видео ssd processing туз или ставим вот нашли utils нашли эту функцию внутри которой видим что на теле модуль по сути 3 которого chanel импортируется отдельный файл и utils который вот две сущности энкодер это дефолт box is 300 microsoft

отдельный файл и utils который вот две сущности энкодер это дефолт box is 300 microsoft какого кому нам жизни контекстно импортирует ну некоторые тоже утилиты вот и здесь вот или внутри тефтелет есть просекут это уже вот тот момент когда мы понимаем да что чтобы работать этом случае затекшие мы использовать сторонние на тех удар который как-то все по-своему устроены вот хочется помочь вам разобраться с тем как с такими политиками разбираться в частные наглядно то увидим просто что ничего

с тем как с такими политиками разбираться в частные наглядно то увидим просто что ничего страшного сложного у них нет нужно просто это тот же код на питоне на парче просто он уже скажем у некоторых заранее реализованы чтобы не тратить время самому не точно от его жены проверено временем но самом деле в целях когда только начинаете я рекомендую каждым из вас вот кто сейчас может первый раз знаком с детекторами или кто пастухи что начатки точно понимает взять и 70 на реализовать те же функции вот

детекторами или кто пастухи что начатки точно понимает взять и 70 на реализовать те же функции вот толкует поют normal айс то же самое посмотреть как это сделано в виде да и по аналогии реализовать собственный допустим доработав что-то сделавшего послом как вы это хотите вот обучившись них примере но арестом тщательно полностью реализовать модули вот работа с детектором да это очень полезно это очень поможет вам собеседование в целом в жизни реализовать такой код по сути инкрементировать статью

поможет вам собеседование в целом в жизни реализовать такой код по сути инкрементировать статью даст 0 и так вот и ленитесь класс processing в этом модуле который виде среди просто чем крутиус и limits разные функции но мы сейчас не будем все обозревать 5 основных функций которые обработку карте куда загружает ее resizer кропит дата все вылезают и и часть там пока они нормализуют 9 на кита числа картинку готовить тендер как но мы сейчас рассмотрим подробно какие будут использоваться вот такие

картинку готовить тендер как но мы сейчас рассмотрим подробно какие будут использоваться вот такие мы в такие функции посмотрим в коде просто не место все прям обозревать но видно что вот код на самом деле не так и много вот то есть в этом это в этом библиотеки под ну маленьком помогли после торчала . видя в нем модных модуль виде связи в котором вот по сути там висят строк кода и вот processing module который ну да готовить по 10 функций обрабо постобработки предобработки но ничего не страшно

module который ну да готовить по 10 функций обрабо постобработки предобработки но ничего не страшно видите уже нет просто какая-то поворот картинок там что-то делим на что-то что-то обрезаем вот это все теперь брод картинок которые вот в том числе в прошлом звуки прошлого года но создали как критику надо 5 шагов предобработки повторим вот и вот эти 5 шагов при доработке здесь просто не зашит уже в годовой функции да по поводу файлика учился еще скажу когда на дойдем до непосредственно действия

в годовой функции да по поводу файлика учился еще скажу когда на дойдем до непосредственно действия итак мы загрузили среди модель выше я напомню вот здесь мы ее уже импортировали вот таким образом . плод скачался код модели и и загрузились vesa эти модели чекпойнта последний q это обычный тем перемещаем на куду и делаем овал чтобы случае вал переключает напомню режим dropout а если он был и ставит batch норм режим не задние запоминания средних ну и бездна как чтобы среди статистики не

и ставит batch норм режим не задние запоминания средних ну и бездна как чтобы среди статистики не накапливались вот это это можно сделать так что америка привели снов это то к чему переключает некоторых сцене сидит в режим режим тестирования они обучения и давайте сейчас важный момент мы проверим что все что мы вышли на практике в прошлом видео в лекции да она стыкуется с теорией она стыкуется с практикой это очень важно понимать что все что могли проследить да вот big bowl пять слоев там дата

практикой это очень важно понимать что все что могли проследить да вот big bowl пять слоев там дата выхода это все такая лизал на практике вот здесь вы видно просто архитектура не разительно пайтор ч вы много раз уже такие видели просто ткнул именно конкретно сингла шок multibox детектор и вида что опять 1 под но тут это вот вечерок старка то что мы говорили backbone до случае торис нет признаете ну есть свой маленький фильм на весь свой фьючерс трактор довольстве классификации сми книгу питерс

ну есть свой маленький фильм на весь свой фьючерс трактор довольстве классификации сми книгу питерс трактор вещь просто он как бы но после него идут обычные классификации степени просто уже убран и поэтому такое давай давай наложены получаете через толкнуть его один вечер экстрактор алексей большой бизнес вы знаете напомню что есть между connection и они здесь не обозначены потому что это просто сумма в без выхода входа перед блоком свёрточная и с тем что после неё получается вот но видно что

сумма в без выхода входа перед блоком свёрточная и с тем что после неё получается вот но видно что здесь под видом battlenet есть так называемый до баттона когда просто сеточный блок внутри которого вы для которого происходит свёртка из большего числа каналов меньше далее идет свёртка ну по одинаковым слуха надо 4 6 4 канала и потом снова изменчива больше то есть по сути мы обратимся к пирамидка да ну не пирамидка точнее даже как песочные часы до вот этих органов архитектуры напинаю то есть вас

ну не пирамидка точнее даже как песочные часы до вот этих органов архитектуры напинаю то есть вас как бы был такой толстый дошло и потом он уменьшится и снова толстый вот ну в глубину и между по всей ширине вечеслав никак не меня с когда ведерком штамп aiding нужно делается вот здесь вот напомнит о свёртка один-на-один которая делает большую глубину в меньшую да просто меня количество каналов на не менять васту ширину далее 3 на 3 ст этих гамм один тоже ним я растушую но менять к лично и ними

не менять васту ширину далее 3 на 3 ст этих гамм один тоже ним я растушую но менять к лично и ними от korres титанов просто какой-то ленина операция до свёртка в этом блоке центральные в этом ботаники не дали снова расширения battle никогда этого бутылочного горлышка мы снова из маленького большое количеств каналов приходов и фирма по ну и делаем башням так потому что стабилизирует обучение и словари локти в отсюда ничего страшного табачнику он блок из трех сверток под шнуром ничего такого это

локти в отсюда ничего страшного табачнику он блок из трех сверток под шнуром ничего такого это называется battle.net потому что после количество каналов соответствующие больших маленьких-маленьких большой такую тучной бабушка образуя поэтому так и называется и далее мы видно что кристина совершается в то же самое то есть это позволяет на например вот то что было перед battle веком дар сложить с тем чтобы будет после потому что полости шевнин не меняется на и попали 100 каналов в итоге то что

тем чтобы будет после потому что полости шевнин не меняется на и попали 100 каналов в итоге то что был находится что на выходе получается тоже не меняется поэтому может в шахматах сложить бы после получить беседу connection таким образом признает заканчивается да и вот backbone подходит концу после войдут 10 years который мы обсуждали помните вот здесь он случае их как раз таки 5 штук они ровно такой же мин структур как мы обсуждали на лекции этого ты чего 4 канала 6 после этого блока уже 512

такой же мин структур как мы обсуждали на лекции этого ты чего 4 канала 6 после этого блока уже 512 battle.net но у него не совпадает выходные каналы с входными вот и потом опциона с 12 а потом цена здесь 666 канала 206 канал и 206 20 206 снова каналов и потом уже все до 128 это просто в середине ботаника в конце конце систем штуки имеет в уфе чермак имеет 206 канала но почему бы просто показал то что это сном это то что это по сути это по сути да это будут текущее количество признаков

то что это сном это то что это по сути это по сути да это будут текущее количество признаков нейросети то есть к личный канал twitch армата текущего это по сути вот текущее количество признаков не вести потому что мы по высоте и ширине да мы меняем новых старшина говорить на кого пространственной информации о пространство информации о которых течет через слои который мы получаем 1 картинки на текущем там 5 6 вот ячейка фирма посте ширине там говорит нам о том от примерное положение этого на

текущем там 5 6 вот ячейка фирма посте ширине там говорит нам о том от примерное положение этого на карте кидались им расширим кассир текут ну соответствующие как бы возьмем соотношение сторон вечерам об этом текущего слове ко входной картинки до умноженное на коэффициент то может по сути эту ячейку может быть где она лежит на картинке да то есть это пространство скорее информация а вот по сути вся информация которая снесла вода семантическая сеть пойдете и было каналов во глубине поэтому в

вся информация которая снесла вода семантическая сеть пойдете и было каналов во глубине поэтому в признаках то есть признак они по глубине идут все 6-ти и поэтому я поэтому в основном все три говорят о именно вот глубине о каналах атлетикой в размерности до вечера мапо который фактор чикса ставится на первое место то есть там до нее выскочили на глубина в так вчера в напомним в torchi у нас глубина высота житель на то есть ch вы они htc вот ночью видим это при обработке и а соответственно вот

высота житель на то есть ch вы они htc вот ночью видим это при обработке и а соответственно вот снова получается много теорий да но просто хочется чтобы это все укладывают голове чтобы это все понимал чтобы все эти слова имели смысл об этом нет конечно плееры что значит цифры здесь водится если что состав террористы куют с практика его tvigle последний стыковка статика этого соответственно головы и так что голова до 10 вот локэйшн и классификация fitcon мы просто предсказываем как мы и говорили

и так что голова до 10 вот локэйшн и классификация fitcon мы просто предсказываем как мы и говорили до помните там было 16 24 числа наверняка помните тот 4 дефов бокса по четыре часа на каждые 6 дефолт боксов по четыре часа на каждый то есть так мы говорили что стоишь на 16 и то же самое с классификацией dance числа меняются там было 3 класс у нас и лекции 3 класса была кошка собака программу здесь 81 class 1 class умножить на 4 это 324 896 408 60 и что есть снова коллектив он боксов умножить

81 class 1 class умножить на 4 это 324 896 408 60 и что есть снова коллектив он боксов умножить на количество классов здесь коллектива боксов множить на 4 потому что x y него верхнего x-ray правого нижнего угла соответственно вот так мы получаем стыковку practice теорий потому что просто архитектура буквально тоже что мы обсуждали лекции поздравляю вам этот код он должен быть полностью понятием теперь мы его загружаем память и здесь некоторые ссылки на картинки который на которых были прогонять

мы его загружаем память и здесь некоторые ссылки на картинки который на которых были прогонять сеть это вот последнюю я лично ставил из интернета это ровно вот та картинка и самый интересный как она будет работать на картинке которую в этом тут оригинально 2 дали вот здесь начали тизер так называли картинка тизер и вот на ней уже посмотрим правда ли что все эти три предсказания выдаст это очень интересно проверить не просто же так они вставили правильно и мы начинаем обработку картинок да вот

интересно проверить не просто же так они вставили правильно и мы начинаем обработку картинок да вот здесь обработка заключается в пример input функция эти usb input от нашей ссылки и утес препарат tender oud инкуб so-so плен престижным а ну депрессивно это именно проверка что реферальных пашет нации сюда либо true либо funk значение в любом случае точили фолз нужно пресечь был выбран vp 3020 обычный флот и так мы при той intercambiad ну интересно что же происходит давайте посмотрим по некоторым

флот и так мы при той intercambiad ну интересно что же происходит давайте посмотрим по некоторым подгрузили что это за фунт и что они делают в виде сзади процессе кутил при прн туда при potenza например input это ничто иное как скачать скачать нашу картинку риски в размер 300 300 потому что сиди напомню обученный насколько который был картик каждого было перед подачей бачили сайте натрите на 300 размеру такой вот просто такой простой был размер исследователям начали крупный центр то есть на

размеру такой вот просто такой простой был размер исследователям начали крупный центр то есть на самом деле это прием не очень часто поверх него часто опускают и вот кажется постановили практикой вот казалось бы что и так уже 330 некоторые случае посмотрите им что дело triscale и убедимся что кровь центра 330 это немножко не это это не та же основной штат картинки 300 на 300 взять ее уже это в общем из за того что они делают не врезаться резким там свой собственный давайте франции посмотрим что

из за того что они делают не врезаться резким там свой собственный давайте франции посмотрим что такое скилл бота с кем-то некоторых функций который не продал 3 сальдо она делает transform лесами каплю на размер опилок артикуно если у него вот горизонтальная картинка или она была вертикально это суть интегрально таргетинг вертикально танцы она сохраняет as creation и приводит меньшую из сторон к размеру 300 то есть ну потому что им тут height вы дома подъем ли скейл 300 300 вот 30300 она

к размеру 300 то есть ну потому что им тут height вы дома подъем ли скейл 300 300 вот 30300 она приводит картинку к размеру на меньшую сторон дайте картинку где-то 1000 8920 1008 приводит к размеру 300 а 1120 приводит к размеру 300 умножить на на какой-то коэффициент в данном случае аспект и то это будет тристана допустит 512 да вот как-то и не учишься но это будет очень 300 трясти потом они берут от и картинкой скелет ну чтобы как бы почему так дел и да я объясню я говорил что можно показать

от и картинкой скелет ну чтобы как бы почему так дел и да я объясню я говорил что можно показать картинку и интерполяцию по пути например там стандарта 300 кирский его дом центре г . интерполяция или доп сильный тоже интерполяция билинейная и вот чтобы привести к 300 тристана просто делается и вот картинка лесина реально не говоришь на горизонтальное то оно превратится в такой сжатый очень представление она даже вы человек слабо можете человека птицы нарисованным то есть очень и как все

представление она даже вы человек слабо можете человека птицы нарисованным то есть очень и как все выглядит и тренировать на это не носить не очень хорошо в этом случае делают как ее алиса висят как бы по высоте 330 и и приводит жесткое и короткую сторон приводит к нужному размеру жестко а вот так который тот остановиться на которое подлиннее и и с сохранением соотношения этих сторон приводит из будет трясти насколько на 512 на 700 то есть на такое что соотношение сторон сохранится

приводит из будет трясти насколько на 512 на 700 то есть на такое что соотношение сторон сохранится пропорционально какого так берем по диагонали тянем такую презентации к пропорционально практика является вы точно пропорционально изменили приведя к короткой стороны 300 размером 300 и далее мы делаем же crop центр затем берем мы получили хоть тыс насколько так и прям берем такой квадратной окно 300 300 и центр крапом центр на картинке уже ровно тридцать 300 квадратик и вот его оставляем от

300 300 и центр крапом центр на картинке уже ровно тридцать 300 квадратик и вот его оставляем от картинки и далее где он нормально цию ну это стандартный прием просто когда мы делим вычитаем среднее соображение и делим на std это вот на самом деле этих эти стихи зависит от на котором вы обучали dance чего-нибудь таких суппорт 8 это видим по иску к посчитано вот на самом деле нам случае это отель обработка точная цена кадра смотреть это это заняли важный шаг я его никто не забивает потом не

обработка точная цена кадра смотреть это это заняли важный шаг я его никто не забивает потом не всякий работы в данном случае видно что вот картинку на 86 то есть на количество по сути ну на максимальное значение в пиксели до целое в изначальном на вооружение вычитаются 2828 ну потому что поддаются аргументов не полез на дефолт и значение спорте вот эти 88 в принципе да это нормализация как если бы изображение когда себе обучение происходило на оригинальных картинках скотта рождение в пикселях

бы изображение когда себе обучение происходило на оригинальных картинках скотта рождение в пикселях упираются 55 и вот это необычно обычно именно среди кто уже пропорциональную общительна там от нуля до единицы вот в данном случае подождать и что придется картинка от нуля до единицы она нуждается приводится к размеров 0 до 155 и и вычитается просто средний ну просто по сути среднее качественный повод ну просто попала в 628 и тоже самое с т.д. то есть нам рация отличается он в классификация

повод ну просто попала в 628 и тоже самое с т.д. то есть нам рация отличается он в классификация просто напомню когда говорим о номинации мы вычитаем среднее по каждом из каналов тестом средне таблично три числа и история тоже количество посчитанные суммарно по каждый раз каналов в картинках в детей между нет данном случае это немного нет аппетита просто такое привидение вот возможно это насколько специфик тут уже я честно говоря не знаю но вот нужно всегда знать этот шаг что он есть не

специфик тут уже я честно говоря не знаю но вот нужно всегда знать этот шаг что он есть не пропускать его иначе просто не заработает далее после припер input мы рассмотрели функции допрос скачивает релизиться описать картинку и нормализует делается при перми на тендер уже пайта штендер то есть это было empire по сути операции да вот это уже операции с сайта штендер вот и соответственно вопрос уже пальто штаны заодно нужно тоже код операции выполнить мы выполнили операции с но панели операции

пальто штаны заодно нужно тоже код операции выполнить мы выполнили операции с но панели операции сценам пай он здесь в функции припер импульс был у нас был верой и начнем мы скачали вот картинку до виден погрей обработали как я потом уже пойдут штендер обрабатываем поменяв усик я сказал из n htc vnc and a batch и далее мы просто говорим грунта и кончик уступала meters треть более равномерная тесно не сможешь документацию а куда и флот это приучения на gpu и делаем ее флотом если 16 то делаем

не сможешь документацию а куда и флот это приучения на gpu и делаем ее флотом если 16 то делаем тендер have то есть по иной точностью то есть вот настолько простые при обработка делается в делается далее чтобы ну чтобы картинку подавать в сеть данном случае вот здесь вот наш ответ при обработке далее мы прогоняем ssd моду на тендере просто inference которая песенка стампа не видя ssd смотрим какая размерность так чтобы что общее произошло смотрим что она все стыкуется с баки 4 картинки вот они

размерность так чтобы что общее произошло смотрим что она все стыкуется с баки 4 картинки вот они 4 для каждого картинкам предсказываем 4 числа это регрессе до их ли верхнем углу правом нижнем углу бокса или там центр и и доставка до и 81 score классов уж классов 8 и столько бокса 8132 это ровно то число которое нас был на лекции который был на лекции которые мы это поздно суммарно почитали все defund боксы в каждый с вечера по голове в котором мы делаем также находите шувалову ничего

все defund боксы в каждый с вечера по голове в котором мы делаем также находите шувалову ничего удивительного для нас здесь уже нет далее мы делаем такой функции подрезал вот чтобы я уже понять нужно чуть чтобы что она делает да по верху также бачату предсказали что так что дело ну по сути по факту что он тоже даже сделать это отфильтровать по ой ой у боксы ну если вы обучали моего фильтровальных плюс gt да вы делали matching делали полете негативы и вот обучали был лось и на данном случае мы

плюс gt да вы делали matching делали полете негативы и вот обучали был лось и на данном случае мы же не обычай мужчин inference python здесь нужно ли la petite пастельным с вот то есть нужно просто взять наиболее уверенные для каждого класса боксы и после этого еще друг друга а у пересечь вера предсказания и последовательно но максу прошли нам-то с другом предсказанный box вот дик адресов по сути это и делается вот если посмотрим это utils дику отрезался мы заглянем вот сюда заглянем в снова

это и делается вот если посмотрим это utils дику отрезался мы заглянем вот сюда заглянем в снова файл владик отрезал вызывает di-box из 300 куклы телефон бокс и делают поверх них энкодер раз посмотрим что это что-то значит энкодер потом он просто ну какое-то преобразование списка чтобы удобнее более тот формат вероятность его песен операции с лейбов nude одни гадости значения и отдали делся кадр . decode batch показ что делать до то что понять нужно все что такой encoder что такое encoder

кадр . decode batch показ что делать до то что понять нужно все что такой encoder что такое encoder decode батч эстакаде box 3 ст и каков этот это а вот они эти функции реализованы уже в полете utils на который ссылка есть прикрепил вот его можно открыть и откроется вот файлик на ну из туториала которые воспитали виде здесь можно увидеть что они реализовали вот ай уил реализацию до пересечения с экшн аварию не что инга резон квадрат оказываем и квадрат и громко сказано transform между форматом

экшн аварию не что инга резон квадрат оказываем и квадрат и громко сказано transform между форматом просто боксе лейбл и я тем что выдает ssd на выход он ими как в одну сторону преобразовывать так в другую тыс не горят просто при вязании формата по сути из x y и aw-2 лев top right бота как не рассмотрел формата баксов и далее вот если кот batch что делает по сути он делает что-то на 2 7 скоро my что-то по сути в decode сильва а decode сингл это здесь живут и на функции по сути которая написана

что-то по сути в decode сильва а decode сингл это здесь живут и на функции по сути которая написана перформа nano max super action вот мы докопались до истины по сути даже несмотря на этот код да сильный поиграешь на нужны специфические детали тонкости ну долго можно вникать строчек там но по факту что мы делаем это мы берем и делаем просто наступаешь на от наших предсказаний вот то есть в данном случае строчках здесь делать ns строить которая декор batch вот здесь это где подрезался

в данном случае строчках здесь делать ns строить которая декор batch вот здесь это где подрезался дезагреганты зарос вот на докопались до истины здорово выведем как какой результат видели что мы оставили по по сути 4 бокса получается на каждый картин дат что мы валились мы вводим сколько всего у нас им результатов до 4 4 картинки сколько у нас на каждый input ну что на каждые подделаем да по сути это координаты бокса score бокса и на самом деле в отдельные части сети еще с карточки класса

сути это координаты бокса score бокса и на самом деле в отдельные части сети еще с карточки класса предсказанного и 10 раз выводится в отделе еще комплекс его как эти число далее мы говорим что мы хотим таки выбрать взять среди них среди 20 ну предсказанных эта беда папа порогу как мы отставали по порогу ns украшен по порогу а ею по порогу не дождешься ренин prediction боксов друг с другом на краю работает на себе трешолд значение выше которого есть если x box пресекаются там больше которого то

работает на себе трешолд значение выше которого есть если x box пресекаются там больше которого то мы их мы сталин только самый верный среди них и теперь мы хотим еще так мы хотим ещё показать что делать пик без посмотрим эти успех best best это это данном случае функция тоже модули который видео с с9 лс которых к ладу нас выведен найдем найдем его вот пик best он при этом hot box s class of confidence с да как я сказал это 4 там числа это вот игре инвестированный координаты бокса класса с

confidence с да как я сказал это 4 там числа это вот игре инвестированный координаты бокса класса с этого расширения по классам кофту верен из них адам случае я говорю что можно score класс читать его conference но в данном случае при обучении значит сеть обучалась так что помимо каждого класса есть еще конфеты отдельно не вести в этом к этой бог всегда есть третье число вероятность вот который можно как бы не приказ отдельно но чтобы вот работала боль надежно и и плескаться и делим число имеем

как бы не приказ отдельно но чтобы вот работала боль надежно и и плескаться и делим число имеем на по третьем часу по кампусу фильтр по порогу попробую же уверенность то есть порог в енисее топора паяю а порог в epic best дав когда мы хотим уже оставить уже после но максу причина но хотим выбрать уже просто а насколько уверенно мы хотим оставить в данном случае выше 0 0 3 confidence по по умолчанию мы ставим на сталь на данном случае но 4 вот и каждый из результатов фильтруем получая получая

мы ставим на сталь на данном случае но 4 вот и каждый из результатов фильтруем получая получая составляет всего по 33 бокса и не по три бокса здесь вот бокс и вклад и скоро классов для первого для 0 0 картики вот если поменять если поменять яндекс картинки этого мы видим что на второй картинке вот было предсказано тоже 20 баксов после фильтров фильтрации по конфету суда осталось два бокса там было 43 кажется осталось на 1 час мы видим когда будем это визуализировать вот поэтому вот такая суть

43 кажется осталось на 1 час мы видим когда будем это визуализировать вот поэтому вот такая суть сначала делаем м с по достигшую на порогу видевшие друг с другом а потом и дмитренко confidence у уверенности каждый spokes уже такой эмпирический пара где он подробно одобрены вручную ну и сам дерево порока подобно вручную нужно содержать порог пауэлл который мы хотим друг другом в одессе prediction боксов и порог по confirms уже по уверенность каждого бокса в отдельности да дальше просто говорим

боксов и порог по confirms уже по уверенность каждого бокса в отдельности да дальше просто говорим что как мы хотим наша категории как назывались как ты класса столе был чтобы написан отписывать текст классов и говорим что вот визуализируем наше предсказание есть ничего не происходит просто результате я предсказаний университете и видно что здесь предсказан вот 33 box вот эти переходники вот они 2 на 2 видно что как как-то странно да вот person правильно как возможные правильность и приблизь

2 на 2 видно что как как-то странно да вот person правильно как возможные правильность и приблизь смотреть до вас на кружка кажется примерно хотя на самом деле это другой столовый прибор но видно что 25 что есть от не очень хорошо почему эту верность и 76 процентов в этой 48 процентов уверен достиг хотя она более точное на мой взгляд вот видим что данном случае не хватает не хватает порога еще потому что вот если один бокс уложен в другой до что например такие тени выводить да ну то есть это

потому что вот если один бокс уложен в другой до что например такие тени выводить да ну то есть это как также делается с помощью фильтра ципао view или coffins а вот такие вещи уже фильтруются уже вот руками берется и подбирается как то вот так чтобы таких случаев не было до таких ошибок вот здесь да вот изучали картинка который в тизере данном случае она она ведь 9 века 8 что не очень адекватно pitt cola вижу клавиатура где же ноутбук давайте опробуем добиться лучшего качества просто варьируя

pitt cola вижу клавиатура где же ноутбук давайте опробуем добиться лучшего качества просто варьируя варьируя например хотя бы вот conference попробуем попробуем снова предсказать с кофе 0703 хотя это должно это должна ставить нам по сути больше даже предсказаний пороком квинси 03 вот ног чуть осталось меньше сейчас мы посмотрим там стало списка не стали лучше заметьте но давайте посмотрим что мы сделали мы в пик best поставили значение капельница больше кофе за 03 то есть мы дамы позволь и

мы сделали мы в пик best поставили значение капельница больше кофе за 03 то есть мы дамы позволь и нейросети по сути оставить те боксы которые ну посмотрите fall точнее трешолда те боксы значения которых от лица которых больше чем ноль три вот и это позволило нам улучшить качество данном случае и можно заметить что предсказал в клавиатура которая очень и предсказывалось когда пробовал 04 теперь на 30 процентов порог 03 и это сказалось вот и все же лучше чем было чем была раньше дал им был тебе

30 процентов порог 03 и это сказалось вот и все же лучше чем было чем была раньше дал им был тебе попробуем понизить порог еще больше поставила 02 и снова предскажи данного нейросетью сделаем проб 02 конференция то есть видим что теперь предсказании должно быть больше потому что мы разрешили больше предсказаний более более не уверены видите стало много довольно шумно стала видеть апельсины кстати не так и плохо здесь в принципе reasonable правда здесь traffic light правильно выделился да

кстати не так и плохо здесь в принципе reasonable правда здесь traffic light правильно выделился да человек правильному или за что процентов стул но тем не менее и пытается и видим что вот нам удалось с порогом в 20 процентов воспроизвести результат того что у них на тизере действительно вот он 9 веке борту ноутбуки но класс возможно мы бы просто не было у кого пока нет но есть телевизор видно что два экрана успешно трактира вались нам удалось скрылись результат поскольку напомню что в тизере

два экрана успешно трактира вались нам удалось скрылись результат поскольку напомню что в тизере всн в первой картинке в них именно такая картинка другие числа но домен такая картинка по детекции того что получить такой результат мне пришлось ну загруженный ту картинку ещё интернете да вручную или сразу в 330 задел их предобработки то из за того что она брал с центр crop как я как мы говорили что на горизонтальной ада наносили к ментально на зажимался профессионально дело в центр краб

что на горизонтальной ада наносили к ментально на зажимался профессионально дело в центр краб оставалось только вот примерно вот такая честь изображение это буки обрезались и сеть ничего не видела поэтому вот 100 внимательны при вырабатываете смотрите как где utiliceis это это аспект рейши резерве крис сайт который делает ношение сторон сохраняет и берет в центр как или три сайт просто интерполяция прямо сжатие брутфорс нами вот всегда держите это в голове да и пришлось сделать решил правда

прямо сжатие брутфорс нами вот всегда держите это в голове да и пришлось сделать решил правда даже даже до 20 процентов чтобы вывести все эти объект или последок в этом ноутбуке inference ssd мы просто измерим скорость скорость не везти это как затравка тому чтобы вы состоятельна после этого скорости в стиле финн на кубе до померили и чтобы обязательно после этого изучили оставшиеся сюда вот тут арина официального наследует и ссылки там уже с перемещением модели на на дельте ускоритель это

тут арина официального наследует и ссылки там уже с перемещением модели на на дельте ускоритель это скажете ли там виде которые они внедрены помощью которого можно еще больше ускорить не растёте и те зарыть импортируется в . через реку there торт и там вот в конце буквально еще пара-тройка и человек посвящен том как делать тот скрипт то есть как компилировать модель в творческих специальный формат и потом уже как его запускать натанзе руки ускоритель чтобы адель быстрее работала и там далее уже

и потом уже как его запускать натанзе руки ускоритель чтобы адель быстрее работала и там далее уже можно сравнить сколько она была медленно сейчас насколько быстро она будет просто называть и очень интересная и рекомендуется in the по делу чтобы как-то размять пальцы до самостоятельно можно писать в этом ноутбуке вот ячейки безвести для этого оставлены рекомендуется проделать и до напоследок ссылки по ssd оригинальной официальная статья которую можно посчитать она не очень простая статья

ссылки по ssd оригинальной официальная статья которую можно посчитать она не очень простая статья достаточно много хищник подробности но в целом имея в голове то чтобы рассказано лекции то что было сказать сейчас вам не составит труда прочитать если честно там уже все подробности нас вами обсудили и еще ссылка на тоже хочу сравнение на их контейнер ssd на nvidia джи пи клауд их собственный компьютер clown клауд сервис для у чтения собственному учению сетей и на этих abs и звезде и вот я бы

clown клауд сервис для у чтения собственному учению сетей и на этих abs и звезде и вот я бы сейчас при вас сылочку которая совпадает с этой ссылкой на туториал по перемещению не так 3xy глушат multibox детектора на ускоритель тендер rt а во второй части таким образом мы с вами научились в первой части нас научились с вами делать reference не видите здесь с помощью python и просто используя python шкаф модель видео рассмотрев а какие то утилиты которые позволяют обрабатывать картинку и просто

шкаф модель видео рассмотрев а какие то утилиты которые позволяют обрабатывать картинку и просто обрабатывать предсказание не в сети во второй же части мы с вами а обучен не раз сеть это уже ssd но обучим ее с помощью free маркой надо так что что получить еще больше практики и разнообразить свои навыки поэтому до встречи во второй части

Практика. Нейронная детекция объектов. Обучение SSD, mmdetection.

дорогие друзья я рада приветствовать вас во второй части нашей практики по нейросетевой детекции объектов в этой части мы с вами обсудим как обучать игрушек multibox детектор который в прошлой части мы научились просто тестировать то есть играть веса и прогонять таких-то картинках вот напомню что прошлой части мы изучили способ загрузки ssd с помощью top shop то есть зови загрузки скажем pure purple торт модели в главы к лобби погналиии на картинках это сделали не ференц но не обучали и и хотя

торт модели в главы к лобби погналиии на картинках это сделали не ференц но не обучали и и хотя для обучения такой модели нужно замечательно просто реализовать цикл обучения на пай торчи ничего там слова то в нем нет то есть изучив ну мы сами прошли функции по доработке картинок и постобработки предсказаний имея все вы самостоятельно вполне уже в состоянии написать точно по аналогии как сегментации то глаз классификации цикл обучения россетти ssd есть top чехова и у вас все будет работать

то глаз классификации цикл обучения россетти ssd есть top чехова и у вас все будет работать однако в этой части мы изучим способу чайтанью сети с помощью фреймворка and detection чтобы как-то расширить кругозор и как улучшить свои навыки в использовали такие биотек готовых поскольку сегодня это одна из самых популярных инфекции библиотек и фреймворк автоматом сеем detection это довольно популярно особенно у тех стучать как и так да напомню что в прошлом году было довольно полезное занятие по

особенно у тех стучать как и так да напомню что в прошлом году было довольно полезное занятие по зрению можно его еще раз средь память посмотреть и это будет вполне себе согласоваться текущей затем там рассказать об a fast арсенале пролила может чуть больше метра и этот ноутбук да он основан на около воском которые ли самой detection песен можно легко we найти однако здесь есть защите новичка ции в компании что мы с вами ну просто используя другой архитектуры ssd я наглядно продемонстрирую как

в компании что мы с вами ну просто используя другой архитектуры ssd я наглядно продемонстрирую как можно использовать другую любой другой архитектуру используя просто их конфиге мы так что таким образом это вот позволит вам брать по стрельбу архитектуру их фреймворк с помощью кода обучат или будут по сети как отыгрывать на концерт по сами тоже сейчас увидим то есть вы научитесь и тренировать свой собственный to set для детекции в этот фреймворк вообще-то вашу марку обучать всего детектор и

свой собственный to set для детекции в этот фреймворк вообще-то вашу марку обучать всего детектор и выбирать архитектуру который вы обучаете измерять качество того что будет обучена итак начнем сами обучение с мужем дать action вот эти первые три ячейки выполняется довольно долго точно это теперь вы я просто выводит версии текущей эк видео и компилятор для си плюс плюс видео сми вводит информацию gpu на голове а вот эти эти команды ставят библиотеку 07 которую нас будет использоваться та

gpu на голове а вот эти эти команды ставят библиотеку 07 которую нас будет использоваться та которая частью minded экшна и вот собственно сам detection является куски тв оба скачивать устанавливает это еще копается порядка пятнадцати двадцати минут на клаве поэтому сейчас возможно нужно поставь видео на паузу чтобы идти вместе со мной к ноутбуку и проделать эту третью чеку запустить просто подождать какое-то время для тех кто сейчас это уже сделал мы продолжаем видео мы продолжаем обучение ssd

какое-то время для тех кто сейчас это уже сделал мы продолжаем видео мы продолжаем обучение ssd вот мы портировали библиотеку теперь она вот видим что ему и в себе abs minded ну это же софи жру знакомый нам видим что то что сердце 51 и куда 10.1 то что к ла vista 10.1 эта версия не дать экшена эта версия ростки скомпилированные куды и эта версия компьютеры кататься по информации чтобы понимать в каком варианте в находимся сначала обучать до научимся то же самое что сделать-то сможешь . ба под

каком варианте в находимся сначала обучать до научимся то же самое что сделать-то сможешь . ба под вам чем они также научимся интерет модели доделать их просто тестирование и загрузку весов и прогон на любых картинках вот скачаем весам of sky are силен сети по нему говорили лишь немного в лекции но это вот одна из архитектур которая тоже спорте это актив том числе предсказывает еще внутри бокса маску тем сам решай дачницы с сегментацией помимо детекции вот но на 2 стадия не растёте его тогда

маску тем сам решай дачницы с сегментацией помимо детекции вот но на 2 стадия не растёте его тогда стабильная ssd сравни насколько они по качеству ну надо как этой картинки работают нибудь типа камере здесь map нам не будет мириться ниже когда мы будем обучать не раз сеть вот здесь просто посмотрим как они между собой соотносятся их размер и их качество ездил какие-то выводы возможно поверим что вчера нет у нас лежат оба чекпоинта да вот видим что и маска все данный ssd мы до используем методы

вчера нет у нас лежат оба чекпоинта да вот видим что и маска все данный ssd мы до используем методы библиотеками detection чтобы работать с картинками вот ну и что вообще работой совсем точно так же как у дело с хабом использовали утилита трясетесь будем спорить или то от библиотеки метод экшн указываем путь к первому типу int сначала нас картинок сравним и не detector это функция нет ничего более чем загружать конфиг определенной модели вот путь к ней контекст максин маска все на 50 ну такой

чем загружать конфиг определенной модели вот путь к ней контекст максин маска все на 50 ну такой длинный путь файл говоря в нем архитектура москвы сильно реализовано разработчиками этого на detection а вот здесь по этому пути чертежи тыве стричь от леса который мы загрузим модель написано в этом коде то есть этот этот детектор делать нечто иное как по сути просто детализирует обед классом оскар cnn загружать него веса который мы скачали ну и да еще у нас заготовленных картинка в дема с этого

cnn загружать него веса который мы скачали ну и да еще у нас заготовленных картинка в дема с этого репозитория прямо поэтому даже скажет ничего не нужно есть помощью утилиты шоу резалт посмотрим на результат трешолд кофе ставим 0 3 по поводу подробно трешолд косинус еще можно повторить прошлую часть о практике там где моршанска использовали там тоже поподробнее то обсуждаются но это просто трешолд ниже которого мы не не рисуем детекции а вот 035 рисуем тушь вишну 3 а уже ниже не рисуем видно

ниже которого мы не не рисуем детекции а вот 035 рисуем тушь вишну 3 а уже ниже не рисуем видно что вот этой картинке маска сильно сработал вполне себе неплохо он выделю пошел плавку даже хорошо так от сегментирован фиолета маска сегментация это что можешь сказать про машины в целом про вторую лапку хотя уже похуже целом довольно хорошее качество на мой взгляд она конечно это вилами по воде в плане мы не мерили сейчас map но визуально выглядит вполне себе неплохо эта маска сильно на ssd вот мы

мы не мерили сейчас map но визуально выглядит вполне себе неплохо эта маска сильно на ssd вот мы меняем конфиг модель указано другой путь до configs ssd сзади 300 coco и мы до меня путь крисом потому что про замену то вроде так расположен ту же функцию для загрузки используем ту же функцию для дифференциала модель на нашей картинке н.г. и покажем результат с тем же порогом посмотрим что будет видим что да она уже решать задачу сегментации есть с да это уж извини обучать нет головы до маскат но

что да она уже решать задачу сегментации есть с да это уж извини обучать нет головы до маскат но она предсказала бокс и вполне неплохо конечно чуть не доделал здесь по по высоте недолго сказала эту лавку на как бы уже не увидела на пороге 0 3 машины в принципе видео на карте что меньшее количество дача москве отдавать еще раз сравним вот одна картинка вот вторая картинка видишь например москва cnn визита чем машины вдалеке непонятно сколько это точно но тем не менее даже рак выделяет и все

cnn визита чем машины вдалеке непонятно сколько это точно но тем не менее даже рак выделяет и все машины все лавки виде данные университет с дельфином случае она видит не видит эту лавку например вот эту машину она не видит вот эту машину до немного ввиду чего те далекие кажется что для вот сразу сразу понятно что для некоторых применений нас картины важнее атака нужно именно как качественно лучше но видно что в принципе для условно применения каких-нибудь там условно когда нужно кончить лавку

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

весит поменьше и которые ну быстрее просто работаю до допустим реальном времени масках силен добавлять работать довольно нелегко если у неё в данном случае был у нее был видимо резак 50 brown r58 300 тонн сказать вырезать на самом деле в данном случае можете проверить вот заглянув в конфиг это и вести но про обычно вот даже здесь уже видно что вы видим размеры этих университета просто чекпоинта даже самих они лист 177 мегабайт маска since 30 мегабайт весь это ssd не огромный конечно родиться но

самих они лист 177 мегабайт маска since 30 мегабайт весь это ssd не огромный конечно родиться но уже меньше на охоте от 40 мегабайт и это дает ему преимущество ssd например в использовании на мобильных устройствах это конечно пример немного там случайно тянуть и потому что обычно в ssd а качество получится примерно таким же взять кого-нить bound mail лет который будет весить все вместе не 137 а там 30 мегабайт максимум даже меньше возможно и она будет про по качеству в принципе сравнимо с этим

30 мегабайт максимум даже меньше возможно и она будет про по качеству в принципе сравнимо с этим и вот именно и мотивации использования подобных сетей 1 ст1 их да она в том чтобы добить возможно не самого лучшего качества как 200 1 и но они быстрее легче ну собственно вещи они быстрее и легче по весу этих вот модели dust1 и собственно ну и реализации их на самом деле на мой взгляд всё таки выследим например точно проще выглядит и прочному реализовать его житии как-то и работать не чем с двух

например точно проще выглядит и прочному реализовать его житии как-то и работать не чем с двух стадий минут акторами вот такое сравнение двух never сетей до напомню что мы используется на кот любит action давайте просто перейдем ради интереса хотя бы их гид хоп чтобы понимать что с чем мы что мы используем эту посылочку откроется репозиторий вот перейдем в корень в корне просто тория картинг это самая важная сцена видите похоже на то что мы только что делали видно что у них резоны монолога

это самая важная сцена видите похоже на то что мы только что делали видно что у них резоны монолога backbone of и через знать джиджи черный 3 гнид виснет и видно что в резонно много именно never сетей для детекции и для лиц и сегментации вот меня в этом списке ssd-диски есть маска стен вот их на используем сейчас километре есть тоже реализованный можно из интереса просто попробовать вот и конфига берутся отсюда вот can fix для что здесь вот название нейросетей вот условны берется ssd вот в этой

берутся отсюда вот can fix для что здесь вот название нейросетей вот условны берется ssd вот в этой папке сидели жидкостью кости 300 если причин обычно на 512 картин когда накрыть актриса 300 картинки государств 12 вот для что есть две вот два гонщик поинта минималистично но в принципе ничего лишнего на качестве в качестве 300 тут я кажется даже где-то грибов подчинялся эти посмотрим дейт optimizer не здесь модель не указано сейчас только сеттинге вот это сайта в этом конфиги но вот если

не здесь модель не указано сейчас только сеттинге вот это сайта в этом конфиги но вот если посмотреть на верность bass модусы 300 пай можно увидеть какой пока он используется по умолчанию вообще могу bам по идее он заменяемый его можно самостоятельно обратиться менять по сути все код все равно на питоне написанный на и торчи давайте посмотрим weiss среди 300 singles 30 actor это тип детектор даст встреча сингл стоишь судя по всему все-таки по умолчанию в виде футбол на ssd тристан данным

даст встреча сингл стоишь судя по всему все-таки по умолчанию в виде футбол на ssd тристан данным репозиторий берется ведь уже 16 который был рассмотрен на лекции далеко не который был рассмотрен в предыдущей частью нам на практике ну и видно что если здесь хоть такая же до 8 классов это вот и насколько он обучен и сколько воды цель был и видно что редактуры так что хоть и дав такая же соответстви ничего удивительно в этой модели для вас сейчас уже нет если вы смотрели предыдущую часть ее

ничего удивительно в этой модели для вас сейчас уже нет если вы смотрели предыдущую часть ее лекцию и понимаете что это просто кликаете 300 которые которые вполне понятен дальше что входной разных 300 на 300 изображения вот но стороны поизучали конфиге купания поняли как то чуть чекпоинты можете попробовать скачать любую другую модель и сравните с этими из этого репозитория давайте посмотрим как обучать и посредством адель которые мы импортировали да мы научимся внедрять на вот этот сайт мы

обучать и посредством адель которые мы импортировали да мы научимся внедрять на вот этот сайт мы научимся модифицировать конфиг так чтобы найти обучать нашу структуру и обучать наш новый вид окна в данном случае новой потому что мы берем лист маска вселенной связи по умолчанию в этом обучение там москаль семян казалось бы что то заметите никаких но я поясню почему это требует зам случае дополнительных усилий и так мы на того чтобы сделать но вот это сет да ну свой какой-то на улице то пусть и

усилий и так мы на того чтобы сделать но вот это сет да ну свой какой-то на улице то пусть и мы хотим детектировать ну машины да вот хоть и специализируется том что мы этом сел drawing app и обучаем давних камеры смотрят вперед и хотят увидеть овощи сушеные изображение изображены пусть пока даже не в 3d а хотя бы в 2d на начнем с провод облезлой на и вот мы хотим редактировать машины автомобили в 2d вокруг с хорошего хороший с хорошим качеством и поняли что на microsoft.com она ужасный

в 2d вокруг с хорошего хороший с хорошим качеством и поняли что на microsoft.com она ужасный контекста насколько обученный детектор с донна ну по качеству нас не удовлетворяет что он видит далеко не все машины и вот чтобы их увидеть лучше мы хотим там учительница сайте например kitty который собирал специально для со drawing app of который в котором основная разведка то машины люди которые ходят по дорогам вот нам кажется что лежали наши задачи обучение доктора the third машин для именно с

по дорогам вот нам кажется что лежали наши задачи обучение доктора the third машин для именно с центральных применения нам кажется что это будет вполне подходящий 20 мы его и и нам случае используем вот это нужно что но поскольку этот репозитории начально все модели бусинами сколько все конфиги помолчали написанный под на сайте на скуку и чтобы нам новый писать свой внедрить нам нужно ну как часто нужно сделать при организовать это сет под формат им несколько то есть мы берем собранный как ты

нужно сделать при организовать это сет под формат им несколько то есть мы берем собранный как ты как-то разложенный файлы по папкам то есть какие-то папки в каких-то классов точнее как для каждого класса например сао тапка внутри каждой папки там набор картинок классов 1 класс вы получили текст в классификация работала бы почтить акции у нас на той картинке несколько лаз и всегда помним то есть у нас каждый бокс имеется класс поэтому это просто скорее все папки трейлер тест внутрь был тест

у нас каждый бокс имеется класс поэтому это просто скорее все папки трейлер тест внутрь был тест каждый папки и набор картинок и набор файлов каждый который содержит разметку как для картинки да то есть четыре часа харти идущий каждый бокс для каждого бокса и классно 3 бокса вот нам нужна эта структура изначально сурина до 103 организовать привести к формату как a-data потом принести то называет этот структуру в media format это то есть уже чтобы подготовить к обучению не версетти на нем вот и

этот структуру в media format это то есть уже чтобы подготовить к обучению не версетти на нем вот и все же после в этом формате равале пока и да собственно реализовать классного datasette а мы сейчас увидим просто на питоне класс по имени похожий по имени просто равны именитого за то чтобы ну так принято под новый под каждый to set просто свой класс писать так удобней с ним работать такая так абстракция работы зато с этом новым ног скачаем kitty тайне данном случае то есть маленький маленькая

работы зато с этом новым ног скачаем kitty тайне данном случае то есть маленький маленькая часть используйте эту 3 чтобы было удобно вывести визуализировать то как расположены файл нас сейчас когда мы скачали на что все-таки идти видно что вот она структура наших файлов то есть все таки титане до внутреннего есть папка тренинг и папка и она лишь на уровне с файлами train текста валтрекс т вот три папки тренинг у нас видно что есть image2 папка и папка лейбл 2 вот папки мы ж2 видно содержится ну

папки тренинг у нас видно что есть image2 папка и папка лейбл 2 вот папки мы ж2 видно содержится ну письма семьдесят пять изображений с боксами папки лейбл 2 расположены 75 текстовых файлов каждый которых содержат разметку соответствующий соответствующему изображение вот ну и далее мы говорим какие какие у нас и картинки так train его и палитра индекс такие картинки эволюционные вал тексты давайте сделаем давайте посмотрим на картинку сначала на сайте просто пример да возьмем и strelec image 2

сделаем давайте посмотрим на картинку сначала на сайте просто пример да возьмем и strelec image 2 на 73 носить четвертой по счету точнее вот примерно так вы видите кики картинки да такие горизонтальные изображения до порядка учатся высота порядка 300 видим 485 да и это ширина 1000 1200 пикселей вот ну собственно это в принципе не плохо видно что это было скорее съемку с рамос автомобиля который ехал до и лискова общественно транспорта поэтому принципе мы этого и хотим далее мы нам нужно

ехал до и лискова общественно транспорта поэтому принципе мы этого и хотим далее мы нам нужно реализовать функцию которые конвертирует формат кити аннотации кити до разметки кита текущего маленького в формат насколько для этого мы посмотрим как разметка вообще в принципе какой формат но он примерно такой видим не знаем пока что что но если почитать документацию кити то понятно будет что в 5 8 столбце что 5-8 столбец это бокс вот эти числа вот эти числа и вот а вот это метка класса настолько это

что 5-8 столбец это бокс вот эти числа вот эти числа и вот а вот это метка класса настолько это важно нужен такой бог себя класса поэтому их ли структурируем formats and detection данном случае даже можно пропустить шаг именно кроме сколько приседать раза приводить это газовым видел формат винды так что он выглядит вот так то есть вот имя картинки йода места ширина и аннотация к ней то есть какие у нее боксы на набор там боксов на 4 числа этих вот положение и набор лейбов и нужно еще сделать

у нее боксы на набор там боксов на 4 числа этих вот положение и набор лейбов и нужно еще сделать два поля которые нас будут говорить какие боксы на каждой картинке мы игнорируем для обучения такие которые мы не осмотрю например развита сеть еще куча там классов там каких-то которые мы не хотим чтобы модели при обучении использовала и мы просто , письменных поля бокс сигнал сигнал то есть классы которыми не смотрим его или бы который мы смотрим условно don't care так называемый будет вот на

которыми не смотрим его или бы который мы смотрим условно don't care так называемый будет вот на самом деле это довольно это общую связь можно их не делать можно просто сделать на каждый аннотацию виде просто бог сыну положение box of liberty право нижний угол до около класс внутри каждого боксу этого хватит для обучения далее вот таким образом мы импортируем карты класс картинка сайт из этого из и мандат экшен и такую утилиту datasette и зонда также и далее мы говорим что вот мы регистрируем

и мандат экшен и такую утилиту datasette и зонда также и далее мы говорим что вот мы регистрируем модуль то декоратор используем случае говорил что вот этот наш костный таз от вот наш то есть наш назад мы наследуем от картины сосед а также говорим ну декорируем это с помощью функции это методы регистр модуль говорим что вот наш новый datasette это просто ничего страшного это все посмотреть на реализацию там это просто для опять же чтобы вам дать action понимал что это новый вид на сайт что вот

там это просто для опять же чтобы вам дать action понимал что это новый вид на сайт что вот как с ним работать с организуем некоторого лига логика для этого мы вот таким образом просто мертвым наш новый класс говорил что класса которым хоть и ведь эта машина машина пешеход и велосипедист и пишем внизу эту функцию ровно два слота на точность мы говорим как из наших файлов тексты которые мы видели выше в таком виде загружать загружать аннотации вот в таком виде тоже просто говорим как это сделать

в таком виде загружать загружать аннотации вот в таком виде тоже просто говорим как это сделать ну и далее просто на самом деле довольно проста логика все что мы делаем это идем по каждый картинок и просто запоминаем ее имя учитывая чтобы считать ее росту ширину далее мы говоришь нас будет такой диктат эльфа которым файл на м это вот тот текст который будет вот вот он файл не может знаем записан его а и дальше просто говорим какой у нас будет ну какие будут бокс какие будут и них лэйблы где он

его а и дальше просто говорим какой у нас будет ну какие будут бокс какие будут и них лэйблы где он для них списке и а далее просто идем по нашим боксом и записываем их список соответствующий box как лейбл это у нас преобразует получается он делает да он был перед перенумерация он говорить какой можно и что как люк ключом данном случае является и до является ну и это номер класса дакар машина 0 1 1 из 2 а к это имя класса то есть будет карт ноль без 312 вот и мы идем и сколько бы бог с ним

0 1 1 из 2 а к это имя класса то есть будет карт ноль без 312 вот и мы идем и сколько бы бог с ним содержит именно имя мы его и вводим в яндекс вот как то есть который бы карту яндекс строку в силу число прости переводим кладем gt лейбл это бог сходен бокс белок содержится в бокс из которой мы считали здесь спроса считали бокс и вот ну мы взялись черта по 8 элементы из списка вот атрибутов этой ротации вот видно что 4 по 8 корона вот эти числа вот этим просто положили 4 часа для каждого бокса и

вот видно что 4 по 8 корона вот эти числа вот этим просто положили 4 часа для каждого бокса и их класс в то есть в списке чтобы мы также знал а вот они мои вот они мои боксы записаны в нужные мне поля бок со своей бог signals игнор формата вот который требует free морг всего ничего более мы не делаем здорово появлением отличнику это просто уделяться класса я реализация далее мы будем использовать класс но теперь мы утилизируем модель чтобы активизировать модель которым будем быть нужно ее

класс но теперь мы утилизируем модель чтобы активизировать модель которым будем быть нужно ее заключить с конфигом как мы ее вольт и выше для интереса вот ну dance чем используем конфиг font file делаем монстров а здесь я послал такой слове можно делать все что ниже для масс корси она можно делать для связи до кучи модем мтс с де подгружаем конфиг ssd загрузили конфликта ssd проверим что же там внутри лежит но проверим на самом деле сам конфликт вывели в полностью по другому немного он выглядит

лежит но проверим на самом деле сам конфликт вывели в полностью по другому немного он выглядит он часто до строчку она выйдет до видно что у него есть поле input says видно что у него есть вот тебе так так это тот кафе которым сами видели помните 2016 посмотрели с вами вот здесь вот это он это он и еще внутри него есть формат самих данных вот интересует именно самом деле больше поля дейта то есть это такой формат данных используется для и насколько по умолчанию этого конфига если здесь чтобы

это такой формат данных используется для и насколько по умолчанию этого конфига если здесь чтобы обучить его видно что вот по 8 картинок нами повысилась когда обучалась тут долго я не буду каждый боли коментировать но видно что есть некоторые свойства trained to set a они были указаны где данный файл для какой располагался закон от 30 до 17 видно как спид обработка картинок из это вот по pipeline можешь посмотреть да вот pipeline можно здесь заканчивается до квадратной скобки вот paypal видно

можешь посмотреть да вот pipeline можно здесь заканчивается до квадратной скобки вот paypal видно что сейчас используют функцию использую сказать функция для яркости контракты изменения для в общем как это при обрабатывалась юного изображение изначально 3 пикселя обрабатывались далее вычитал среднее делила std делся краб далее видно что карте колеса 1 300 на 300 до без для сохранения рейши в отличие от предыдущей части помните мы делали там сохраним раньше было водитель без кипиша falls the тех

от предыдущей части помните мы делали там сохраним раньше было водитель без кипиша falls the тех же те же среднего от указаны std вот но вот нормализация происходит и точно также грибов в мире которое делалось в прошлой части туториалов с помощью утилиты видео здесь на делается просто в таком вот виде об этом компе и указывается здесь со слов шока кликов конфигов общения происходит там и немного вручную это как бы все делаю да прям используйте методы а здесь просто по сути ты пишешь конфиг файл

это как бы все делаю да прям используйте методы а здесь просто по сути ты пишешь конфиг файл который говорит тебе как приду работать картинки в нато сети или там в твои ну как объект жертвенного модели даффи дак анхель указываешь и можно это все долину меняешь подходит и уже обучаешь детектор перед обучение на самом деле нужно знать две вещи что сходу у вас если возьмете прям обучение этого нужно также на их акцепторы вас не заработанной связи скорее всего у вас напиши так это нам надо

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

и для этого вот нужно изменить ровно одно поле часа прямо по дороге поговорю вот давайте обсудим все поля до него и потом обсудим уже вот тонкость именно обучение ssd с помощью detection вот мы просто как вы загрузили конфиг правильно мы загрузили конфиг де 300 вот он и теперь мы меняем его палят падки till the site на самом деле здесь не делать ничего более чем просто адаптация под кипит от этих всех строчках то есть мы просто говорим что вот путь тест у нас оказывать и ddos-атаки титане на to

всех строчках то есть мы просто говорим что вот путь тест у нас оказывать и ddos-атаки титане на to set нашла в класс который выше мы реализовали скале что он уже декораторами вопреки напряженный также я лично то может существует говорим что вот наши дан лежит папка kitty toy не говорил что наш тест содержит of the rings and no such просто станет то есть только трэвал поэтому указано просто так как заглушка для тест указанного трель вот и говорим что картинки загружать из папки image2 тройника

заглушка для тест указанного трель вот и говорим что картинки загружать из папки image2 тройника между а вот тоже самое вы громко что она говорит рейна потому что дельта свободу за групп заглушка для трейда это уже имеет смысл вот поговорим вот обучающую файлы в тренд xt разметка содержится мы говорим что в тренинга мертва у нас странник и между волна в картинке сам лежат что корень доставки титане то есть все логично и дали им просто изменяем но для валяться корпусу это по аналогии просто по

то есть все логично и дали им просто изменяем но для валяться корпусу это по аналогии просто по сути меня bold and is in давал тексты и дали ему тоже работаем свой моделью как меняем конфиг модели до чтобы обучить на ssd изучали как экосистема первых ним количеств классов 81 до потока или там 86 богаткова включать не включаем для обучения и указываем откуда мы уже чекпоинт pride обученный на как вода чтобы fantini ли модель они обучали прям с нуля хотя может так то попробует не факт что панику

вода чтобы fantini ли модель они обучали прям с нуля хотя может так то попробует не факт что панику не будет точнее то есть не всегда к сожалению или к счастью на практике fine tuning лучше чем просто обучение с нуля вот у меня был на практике искра чтобы через 0 было даже в будущем валью ник но чаще конечно fine tuning помогает лучше качество самом начале достичь вот указан колеса гласности к ps3 и сайт лист и мы указываем сыграть веса поэт обычная модель на коку в одну говорим что наш того

ps3 и сайт лист и мы указываем сыграть веса поэт обычная модель на коку в одну говорим что наш того сохраняй нам все логе наших экспериментов и далее вот уже идет настройка самого лёрн грейт а самолет не играй так выбираем его как ну означали он был выбран по до 8 гб 002 но чтобы обучать на дом как у нужно поделить на 8 такое правило тельно количество делим на данном случае мы изначальный alright он нажали бы на 8 если бы на 8гб обучались в этом поскольку он был выбрать под 8 гапонова поделим

он нажали бы на 8 если бы на 8гб обучались в этом поскольку он был выбрать под 8 гапонова поделим на 8 чтобы на донгов обучать потому что накладной cole вот и вот здесь если сделать есть вот этого листочек не выполняете сделать warm-up над как мутанта но у меня лично не работал не запускалась учение поскольку можно зайти вот в эти и чипсы на в репозитории над экшен и прочитать что люди по этому поводу тоже думают люди советуют что расходятся в начале обучения ssd что лучше использовать warm-up

тоже думают люди советуют что расходятся в начале обучения ssd что лучше использовать warm-up стратегию она была получаем 13 лет от 3 не натрия на один перед на деньгами 1 ед 3 а теперь сделать ее попробовать 1 поделить на 1 до 10 ну то есть поделить на один много нулей вот там существах на 1000 удивилась и да здесь говорят что также нужно какой по неману соответствовать тому какой помните что нужно ведь нужно менять по количеству то есть нужно томаса здесь еще увеличивать например skype

что нужно ведь нужно менять по количеству то есть нужно томаса здесь еще увеличивать например skype увеличивается и также нужно посмотреть можно во второй и шью в котором в котором принципе советую видя что то же самое или ссылаются на предыдущий еще вот это более свежий просто ну вот в нем тоже чак совету что сидиус расходится начали попробуйте использовать форма прошедшего другой то есть просто люди ведь начали сделать поменьше чтобы он не был слишком большим на чтобы не разойтись сразу

люди ведь начали сделать поменьше чтобы он не был слишком большим на чтобы не разойтись сразу слишком ее большие шаги чтобы те шаги поменьше делаю его маленьким делом его 1 поделить на 1 до 10 и получаем 1 минус 1 минус 10 получаем классе маленький проявляет но это позволяет сети как-то обучаться вот поэтому вот эти две строчки ставим где-то даже вот эту строчку просто меняем 0 вечер свет убрать 3 минус 3 но нам случае там получается похожие давайте посмотрим какой он там получится свой конфиг

3 минус 3 но нам случае там получается похожие давайте посмотрим какой он там получится свой конфиг выведет и вот видно что форма про еще один день -10 вот или это ну почти ноль ноль почти 3 минус 3 только дальше чуть меньше наберем начали то есть мы говорим что мы обучаем наш университет sd вот она начали конфига как сингл стрижек target полгода на 6 стихе ддт пшик и вида говорим далее мы говорим про datasette даже на скидки китель высот новый наш говорил что такие китай не ну точнее что

про datasette даже на скидки китель высот новый наш говорил что такие китай не ну точнее что корень из это в папке кити тайне далее мы говорим как обрабатывать ничто не меняет принципа этот путь подбородка вы такой же как было на кого насколько это кашу можно придется менять но в принципе можно оставить по умолчанию так потому что с кем берем при добыче на покой и довольно опасно там обработку сейчас можете разойтись как преобразовать на на стадии тестирования стадии обучения обработка она

сейчас можете разойтись как преобразовать на на стадии тестирования стадии обучения обработка она меняется витте на много меньше что ну что повисать сорвалась сделать и multi-flip ауг возможно то есть мы возможно будем клепать отражать по горизонтали и вертикали сегментацию делать и далее мы говорим как как выглядит asset вот данном случае это штампов 3 500 он для того он повторяется 5 раз чтобы для каждой также головы был был в как бы сходит осталось пять голов чтобы сосед на каждую со своим

для каждой также головы был был в как бы сходит осталось пять голов чтобы сосед на каждую со своим скейлы и далее далее далее мы говорим как у достать walk to set просто меняя по сути вот тренд текстами основал текст а потом и сами уже все обсудили выше когда не получает кафе полностью мы вывели полностью посмотрите что мы делаем и ваш сможет реки мин и врач престижен что мы используем 100 кости гретель десант качестве оптимизатора и людей беременности вначале и вот наш аллеля lerner лет конфиг

десант качестве оптимизатора и людей беременности вначале и вот наш аллеля lerner лет конфиг который мы говорю что настал будем делать его маленьким сначала денди -10 говорит сколько итераций будем закрываться что в чине 500 операций далее будем его линейно увеличивать и все в конце мы говорим как скачек поинты как логировать эксперименты это все уже довольно таки откуда загружать наш первый чекпойнт которого находимся и куда сохранять их все здорово мы сделали наш конфиг папа обучить ssd

чекпойнт которого находимся и куда сохранять их все здорово мы сделали наш конфиг папа обучить ssd посмотрим что получится это чеку может некоторое время еще для 10 порядка десяти-пятнадцати минут вот давайте посмотрим как она будет выполняться здесь мы со стороны to set на основе нашего тройная конфига как раз делал детектор на основе конфига обучающего конфига и тестов кофию то время как убрать тестовых данных бы чаще то откуда выбрать сама сама сама модель до архитектуру как его зовут классы

тестовых данных бы чаще то откуда выбрать сама сама сама модель до архитектуру как его зовут классы и говорим что обучаемся надута сети нота сердца и завода то света до поэтому вот этого на жки chiquitita не дала берем констант класса поле класса сами задавали вот это название класса просто коварен и все запускаем обучение с помощью тренд детектор функции нашу модель модель надо 30 до 2020 но здесь один из конфигом кафеля который мы выше определили подождем обычно эта модель это по чекам

но здесь один из конфигом кафеля который мы выше определили подождем обычно эта модель это по чекам оступается порядка десяти-пятнадцати минут зависит количестве транс типов которые мы выставили итак наша модель обучаясь давайте посмотрим что он писал во время обучения вот они логе во первых при загрузке видно что ему что-то с 5 из этих слоях не понравилось ставь 5 страшных когда он загружал эти пять слоев с нашего при добыче на вадик то за шевчук point обычного пока что ж сказал он говорит что

слоев с нашего при добыче на вадик то за шевчук point обычного пока что ж сказал он говорит что у нас не совпадает с 14 13 до 16 лет и . только первое количество каналов да свёртка свертков а что значит что у нас на самом деле откуда эта причина причина в том что вот три защитили напомню что 814 то есть это 8 1 класс умножить на 4 футболка для corby чайки 16 это 4 класс у нас на 4 футболка для каждой ячейки то есть у нас данном случае просто насколько было 8 1 класс поэтому такие числа были

каждой ячейки то есть у нас данном случае просто насколько было 8 1 класс поэтому такие числа были каналы на 66 посмотрели акцию посещать занятия практического то вы вспомните что это числа берутся исключить из количество классов находите fun box of здесь тоже сам этого классов у нас случай 4 ну дружба играл классу добавил судами к классу боган класс к классу корр g-string лист 4 класс обновляется до background поэтому с 4 на 4 4 на 6 и на 6 на 6 и 4 на 4 однажды так что хрен и то есть просто

до background поэтому с 4 на 4 4 на 6 и на 6 на 6 и 4 на 4 однажды так что хрен и то есть просто не совпали так шахадат нормально уж раз к классификации меняем последний слой детекции у меня так шейхами вот поэтому они обучаются с нуля до а вот сам сам сами веса backbone of an unique с весов обычных нами сколько а до этого он был еще обычный между вот такая вот история фан тюнинга и далее видим что он лагер уютном каждую эпоху а первые эпохи лагер уиттиер скука федерации 10 20 30 раз тридцать

что он лагер уютном каждую эпоху а первые эпохи лагер уиттиер скука федерации 10 20 30 раз тридцать девять раз всего эпохи и так для каждой эпохи это что то что мы два черепахи дело ином случае это можно практике настроить после тут после половины то есть пользоваться типах он сохранил и показал нам качества на заметил он вывел нам максимально подробную таблицу в плане он показывает нам как и ваш престиж для каждого класса так и приколы для каждого класса и показывает сколько gt сколько сколько

престиж для каждого класса так и приколы для каждого класса и показывает сколько gt сколько сколько лекций для каждого класса то есть predicted gt прикол для этого класса по конечно это не к той же matrix но это более подробно чем просто more и говорить как у нас map но по нему сложно сказать но данном случае он 035 мы увидим насколько это соотносится с визуальным качеством инвалидов и он получился примерно такой же есть эта модель вроде как не перри обучилась важно после довольно маленький

примерно такой же есть эта модель вроде как не перри обучилась важно после довольно маленький порядком 7 стекать изображений там как бы о нем переобучить сын самом деле довольно просто вот но может просто идти строительству кнопка похожи поэтому поэтому несколько проблем не возникает сказать маленький обычно при обучении наблюдается самом деле вот и а и до лидирует не только это лагерь хочется следовать потому что мы же мы меняем меняем его от очень маленького нашего какого-то да вот данном

следовать потому что мы же мы меняем меняем его от очень маленького нашего какого-то да вот данном случае да наверное moleskine 10 эти а вот и получился по сути удачи . 5 минус 5 далее видно что он увеличился потихоньку и стал в итоге таким который мы его стал в итоге два с половиной - три дальше снова пошел уменьшаться и снова уменьшился то есть кличко кулер джейд и видно что время занимаемая этими десятью трассами выводится спектр time of arrival детей да то есть когда закончится обучение

этими десятью трассами выводится спектр time of arrival детей да то есть когда закончится обучение начали пить спин вы его что эти девять минут у людей на было ждать чтобы она обучилась и далее вот вводилось время работы с данными за него на память видеопамять скорее всего elos именно конно классика цию даже два салона к салону регрессию и их сумма поэтому с коэффициентом сумма нас учит 11 и там это найти 3.15 66 это просто сложить эти два числа до поэтому весь контент один у нас на легаси

там это найти 3.15 66 это просто сложить эти два числа до поэтому весь контент один у нас на легаси лоссу на классификацию и в конце вы водите товары качестве получил способ 24-х пафосе повысив больше качество получить еще лучше уж ведь она выросла от 0 22 23 до 031 за всего лишь 12 полк то есть можно продолжать обучать еще сколько ты платить еще лучшие качества давайте посмотрим сколько у нас как как как выглядит визуальное качество которые мы получили после всего лишь 9 минут обучение среди

как как выглядит визуальное качество которые мы получили после всего лишь 9 минут обучение среди на маленьком над с эти вот 2 видим что мы конечно не вывели на самом деле карте куда обучения данного kitty туридду фан тюнинга числе самой сколько весами хорошее упражнение сейчас взять самостоятельно просто вывести предсказание вот ровно такое же только загрузить там modulo день назвать той загрузить новый конфиг конфиг 1 наймет куклу оригинальный каких-то неизмененный необычного детектора и

новый конфиг конфиг 1 наймет куклу оригинальный каких-то неизмененный необычного детектора и сделайте 5 проц и для от и такт рабочий нас какой ssd на этой картинке и на это же как-никак рубили вот сейчас уже с ван тюнер ipad kitty и вы смотрите сколько погиб от кич улучшает и далее самостоятельно до можете протестировать на любых казик интернета желательно чтобы их аспект решил сами понимаете совпадать с тройным чем больше быть похож на третьем нужно будет качество ну и пытаясь поставить

совпадать с тройным чем больше быть похож на третьем нужно будет качество ну и пытаясь поставить картинках из и скидки до например просто можно вставить но здесь я сделал такой шаблон чтобы вы могли просто требую картинку из интернета но можно сделать так чтобы там просто другой номер картинки указывает инферн и смотрим как она работ видео чтоб но этот машину видел эту не увидел ну можно еще побыть опробовать друг он его видит через сколько типов или если порог threshold поставим 0 2 но что она

опробовать друг он его видит через сколько типов или если порог threshold поставим 0 2 но что она будет вот поэтому попробуйте пара здравствуйте я просто всячески вас очень рекомендую сейчас надеюсь вас мотивировало вот то что это все сработало так хорошо мотивирует сейчас взять вас обязательно посидеть попробовать еще сравнить с оригинальным весами связи с другим детектор текстурой мы знаем что можно легко ментам москва семян можно было банально скасси начал взять это тоже протестировать на

можно легко ментам москва семян можно было банально скасси начал взять это тоже протестировать на его качество до трех другом сравнить и также новейшего 100 мотивирует еще этих картинках потрясите потряси с разными порогами трешолд консульств shoulda а также да у этого водовод у этого обучения нет продолжения есть это на самом деле полное всем им и но этого туториала мы закончили его мы теперь умеем делать обучение inference с помощью всякие minded экшн смерти по сути мастер силен и ssd которые

делать обучение inference с помощью всякие minded экшн смерти по сути мастер силен и ssd которые проходили на лекции и которое вы смотрите в прошлый части практике когда говорили про . я всячески очень рекомендую посмотреть выступление андрей карпаты это директор tesla попробовать это скляр некоторые у них вот на практике все дравиг возникает средство это новый ток каждого года двадцатого года посмотреть да и далее но это на английском речь на там ничего кажется сложным лексики нет а на русском

да и далее но это на английском речь на там ничего кажется сложным лексики нет а на русском можно почитать ещё ресурсы ну посмотрите прошлого года я также и почитать статьи по непосредственно зрению если вы забыли про классификацию и не престаеши лирник побольше в проем бединге случае картинок задачи картинок точнее там различной модификации поиск лиц и сама значит акции телятника побольше можно почитать по этой ссылке я благодарю вас за то что вы были со мной в течение практики и лекции

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

всем привет с вами никита и сегодня мы познакомимся начнем знакомиться с генеративные моделями давайте приступать жаль что занятие проходит нас offline вернее не прямая трансляция обычно в начале таких лекций спрашивают вот на таких изображений изображены реальные люди какие сгенерированные в нейронные сети и в общем-то этом просит дать варианты ответов ждут ждут в потом говорят что собственно все изображения с лицами сгенерированы нас так не получится но мы научимся делать такие изображения

все изображения с лицами сгенерированы нас так не получится но мы научимся делать такие изображения именно такие всего скорее после второй лекции вы сможете сделать но сегодня мы начнем знакомство с собственных задач генерации изображений давайте начинать сначала собственно о классификации моделей какие общие не бывают они в курсе вы всего скорее я думаю почти все модели которые вы раньше делали они все были диск им нативными что это значит у нас всегда были какие-то данные с помощью x они

они все были диск им нативными что это значит у нас всегда были какие-то данные с помощью x они обозначаются и у нас были какие-то метки для этих данных скажем там для изображения классы или там одно изображение этой маской объекта если мы хотим облик detection делать собственно пытались как-то предсказать какой-то y и по факту мы с вами учили распределение вероятности y при условии x то есть модель самого себя на этапе валидации уже не знала метки и в доску и twix она как-то предсказывал

модель самого себя на этапе валидации уже не знала метки и в доску и twix она как-то предсказывал вероятность y и для этого икса здесь вот мы рассмотрим с вами просто пример это обычная собственно много- классовая классификация здесь три класса и я просто взял и обучу мистическую агрессии получил собственного такие определяющий поверхности можно ли с помощью них каким-то образом пытаться сгенерируйте за выражения или не знаю точки какого-то класса давайте попробуем что можно с этим сделать

за выражения или не знаю точки какого-то класса давайте попробуем что можно с этим сделать давайте вот возьмем попытаемся сгенерировать точку из зеленого класса что для этого нужны у нас есть собственное распределение вероятности для каждой точки распределения и горько для каждой точке x давайте вот что сделаем возьмем вот эту вероятность которые дают нам модель сделана к ней логарифм мы так часто делали для численной стабильности и по многим причинам часто берут именно логарифм вероятности и

делали для численной стабильности и по многим причинам часто берут именно логарифм вероятности и для того чтобы воспользоваться кредитным спуском давайте поставим минус перед логарифмом то есть мы чтобы не делать могут будем спускаться по некоторым такой вот поверхности минус логарифм и вероятности вот класса и таким образом всего скорее в теории мы должны получить какой-то объект по иксу который будет максимально в общем при котором модель будет выдавать максимальную вероятность класса

который будет максимально в общем при котором модель будет выдавать максимальную вероятность класса зеленого для точки и вот если мы так сделаем то есть мы будем спускаться спускаться там сгенерируем фиолетовую точку как единое изображение 1 лежит достаточно далеко от всего класс 3 зеленых точек и если мы генерируем изображение мы получили какой-то просто на там шум то есть если у нас есть модель для классификации изображение то вряд ли мы из нее получим что-то достойная при генерации ну скажем

для классификации изображение то вряд ли мы из нее получим что-то достойная при генерации ну скажем в этом квалифицировали кошек и собачек берем там вероятность кошек да и пытаемся как-то пропускать градиенты и смотреть не изображение что максимальный себе представляет кошкам вот ну всего скорее мы получим неудовлетворительный результат таким образом давайте подумаем вот чего мы хотим как мы хотим спускаться по вот такой поверхности чтобы сгенерировать изображении либо культ объект который

хотим спускаться по вот такой поверхности чтобы сгенерировать изображении либо культ объект который будет собственно удовлетворять распределению объектов в ошмянах собственно такие модели называются как раз генеративным то есть в отличие от дискриминационных моделей которые просто пытались различить между собой точки не каким образом просто разделяли и там смотрели на качество классификация условна здесь мы видим что допустим вот я вижу три кластер мы можем как-то обучить модель чтобы она

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

вы будет считаться успешно всего скорее но тут есть некоторые проблемы связано с тем что вот здесь у нас очевидно выборка немножко игрушечной здесь данные как-то распределены очень просто у нас есть в центр мы его видим данные двухмерные отличие от изображения которые там картинки не знаю 2828 в лучшем случае здесь нас двухмерное и мы просто вот глядя на точки можно генерировать какой-то новый объект это будет всего скорее принадлежать к восторг этого мы хотим такое бывает не всегда и поэтому

это будет всего скорее принадлежать к восторг этого мы хотим такое бывает не всегда и поэтому нам нужно придумать какую-то функцию до которая будет вот эти вот точки или изображения будет переводить их в пространство в котором они вот будет распределены как на картинке то есть условно мы берем и большое громадное изображение уменьшаем его размерность каким-то образом с помощью этой функции да она будет там из пространства 2828 приводите скажем пространство 2 просто вот и мы сейчас будем

да она будет там из пространства 2828 приводите скажем пространство 2 просто вот и мы сейчас будем стараться учить вот эту функцию которая перейдет на сначала изображение в это пространство в котором они будут распылен как это понятно для нас а затем собственно будет пытаться из этого пространства обратно восстановить на пространству скажем картинок таких моделей много давайте начнем с авто энкодеров то есть что происходит них как я говорил мы берем например изображения чисел из места

энкодеров то есть что происходит них как я говорил мы берем например изображения чисел из места пропускаем их через модель под названием энкодер который переводит его в некоторое пространство как правило меньшей размерности такое пространство называется латентным и там данные хочется верить что распределены как то проще чем собственно в пространстве с размерностью 784 кажется затем мы берем вот эту точку которую нас получилось после пропускания через энкодер на там не две координаты просто и

эту точку которую нас получилось после пропускания через энкодер на там не две координаты просто и кладем ее в декодер каждый кадр преобразует ту точку обратно в наше изображение в наше пространство большой размерности и после этого мы берем получившееся изображение и сравним его с исходным то есть что нам нужно вообще вот авт энкодера нам нужно чтобы он хорошо у него хорошо получалось из модельного пространство восстанавливать наше изображение обратно или собственным хотим чтобы открытое

пространство восстанавливать наше изображение обратно или собственным хотим чтобы открытое пространство было хорошим как нам закодировать данные пока ваши главные критерии того что данный хорошо закодированы меньшей размерности это то что мы можем зато меньшей размерности восстановить их обратно собственно действует и используется эта логика и далее вот из двух тут вернее из одного исходного из одного получившееся изображение мы просто можем посчитать мысли то есть то насколько сильно

из одного получившееся изображение мы просто можем посчитать мысли то есть то насколько сильно отличается первое изображение от 2 и минимизирует что эту ошибку таким образом мы получим в итоге мы получим модель которая будет как-то хорошо кодировать наши изображения в меньшую размерность для чего это нужно вообще да собственно сначала то как они выглядят клиник как можно быстренько написать of the encounter своими руками поттер чем здесь просто схематично немножко комплиментации мужчина ход как

encounter своими руками поттер чем здесь просто схематично немножко комплиментации мужчина ход как мы видим вы не эти вопросы подаем входную размерность и размерность которую мы хотим чтобы он был а вот в этом закодированной пространстве например мы можем там передает 2828 для места в им под ним и и бензин может равняться двум например как раз чтобы визуализировать эти вот точки на двумерной плоскости какие говорю модель состоит из двух частей кода и декор сначала мы пропускаем ну вернее с

плоскости какие говорю модель состоит из двух частей кода и декор сначала мы пропускаем ну вернее с началом просто делаем в этом потому что нас там дальше и удлиненные слои и после этого сначала пропускаем через энкодер этим декодируем и возвращаем заново из изображение которое у нас получилось так как видим здесь кроме форма то есть функция кода который переводит изображение в латентно и пространство и просто возвращает получившиеся координаты так вот если мы посмотрим на получившиеся

пространство и просто возвращает получившиеся координаты так вот если мы посмотрим на получившиеся результаты несмотря на то что как модель вообще не знала о том что нас лески это разные классы точек то есть мы вот и горький не передавали им передавали только x мы видим что между собой в латентном пространстве эти числа различимы и получается что мы нашу модель как раз можем использовать для например уменьшения размерности и дальше по верхнему скажем обучаюсь в камеру для чего еще мы можем

например уменьшения размерности и дальше по верхнему скажем обучаюсь в камеру для чего еще мы можем использовать of time коды ну собственно вот представьте мы там передаем какие-то сигналы или изображения через там провод который в общем который допускать какие-то ошибки то есть мы пропускаем нас получается какое-то шумно и изображение и нам нужно как-то из этого шумного изображения получить обратно наша исходная в общем процесса как изображение портится называется к rovshen это что мы пытаемся

наша исходная в общем процесса как изображение портится называется к rovshen это что мы пытаемся сделать то есть из за шум леонова изображения получить обратно исходное это называется 1 резинка то есть условно вот у нас есть какие-то точки до которые распределены по линии мы добавляем в какую-то точку шум а затем пытаемся обратно из точки которые получил завершим лена и восстановить какая была до этого давайте взглянем на схему правую часть мы уже разобрали начиная с x со мной собственную здесь

этого давайте взглянем на схему правую часть мы уже разобрали начиная с x со мной собственную здесь только добавляется еще одна штука мы в самом начале как бы портим наши данный например просто добавляем графский шум таким образы получаем datasette из x волной и дальше опять же обучаем и of the encounter почему не на авто энкодер потому что у нас есть надежда что сам энкодер когда он переведет пространство с меньшей размерности латентное пространство то вот эти вот все шумы и помехи они уйдут

с меньшей размерности латентное пространство то вот эти вот все шумы и помехи они уйдут как и не значимые признаки и после этого декодер с легкостью восстановить его латентного пространство и исходное изображение дальше мы по пересчитаем разность между исходной картинкой не зашумленным и картинка которую рыбу становилась защемлено во изображения of the encounter наш документе самого себя модель она не видела со стороны энкодера никогда изображение которое без шума однако она будет пытаться

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

изображение добавим шум это вторая линия и вот защемлено изображение пусть ему авт энкодер как можно обидеть на результатах авт энкодер вполне справляется задачи то есть у нас на выходе абсолютно очевидно что мы получаем те же цифры что и были вначале но более того мы убираем весь вот шуму ненужный в общем та область которая изначально была без шума она становится темный как и в исходном изображении и сами по себе изображение исходные и получен они похожи между собой эту операцию можно делать

и сами по себе изображение исходные и получен они похожи между собой эту операцию можно делать не только с картинками на и скажем не знаю там с audi дорожкой когда у вас одномерные данные и вы также пропускать через of tanks aber но там получать что входная размерность будет ниже чем скрытая размер несла тент на вот этом пространстве умершим техник поменять где и есть вы столкнетесь задачей там где но zynga то вы теперь знаете как с ней бороться а для чего еще можно использовать авторинг воды

где но zynga то вы теперь знаете как с ней бороться а для чего еще можно использовать авторинг воды для детекции аномалий вот скажем вы хотите у вас обычная модель чтобы классифицировать собачка от кошечек и тут вдруг к вам приходит не знаю изображением морского котика и ваши модели начинает как-то неадекватно себя вести в общем такого поведения хочется как-то избежать что с этим делать давайте возьмем вт энкодер и обучили вот на этих собачках и котиков обучен котиков мужчина тех данных которые

вт энкодер и обучили вот на этих собачках и котиков обучен котиков мужчина тех данных которые мы считаем нормальными и скажем из того же распределение что и данный на которого тренировался наш классификатор обучение мы получим кодер и декодер который хорошо кодирует и декодирует только изображение с собачками и с обычными котиками и если к нам на вход не знаю придется изображение автомобиля то наша втн кадры вряд ли сможет хорошо его раскодировать и таким образом разность между изображениями

наша втн кадры вряд ли сможет хорошо его раскодировать и таким образом разность между изображениями будет большая так вот давайте посмотрим на эту разность если она действительно слишком большая больше какого-то значение то тогда скажем что это аномалия и дальше и и в модель классификации просто не пустим скажем что это что то другое мы не умеем это классифицировать а если модель хорошо декодирует то все нормально пропускаем дальше по нашему pipeline но мы немножко с вами отвлеклись мы все-таки

то все нормально пропускаем дальше по нашему pipeline но мы немножко с вами отвлеклись мы все-таки хотим решать задачи именно генерации изображения давайте посмотрим собственно вы лишь на авт энкодер или по-русски эволюционные often года авто кодировщик что в нем днем 1 часть 1 там две части они никак не отличается мы берем изображение и посылаем его в энкодер но дальше на саммит различия энкодер вместо того чтобы выдавать сразу нам какой-то вектор он будет выдавать нам параметры какого-то

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

и выдает какой ну какую-то выборку из этого распределения вот мы получили выборку и вот это выборка допустим вот одна точек когда мы взяли распределение и не за центрировали одну трубочку и вот теперь вот это . она уже будет располагаться в латентном пространстве то есть условно та часть которая сейчас есть на презентация а на друга внешне делать то же самое что и не делал в обычном авторинг лодыря энкодер то есть на перевод x вот инна пространству но при этом оно им сам по себе кода здесь в

энкодер то есть на перевод x вот инна пространству но при этом оно им сам по себе кода здесь в курейш на of tanks он выдает не саму точку возле дна пространстве а просто какую-то область где эта точка может могла бы располагаться и после этого мы какой то один из вариантов это этого расположения сэмплеры после того как мы получили . вот и на пространстве дальше мы уже знаем что делать мы просто декодируем получаем какой-то x с крышечкой то есть восстановлена изображение и считаем волос между

декодируем получаем какой-то x с крышечкой то есть восстановлена изображение и считаем волос между этими двумя изображениями но это еще не все о давайте взглянем на часть сэмплером из латентным пространством еще ближе мы ведь вспомним мы хотим генерировать изображение что для этого нужна сила скорее нам для этого нужно знать как бы из такого распределения нам сэмплировать для того чтобы просто пропустить через дикона собственно наверное нам хочется чтобы это распределение была хорошо известна и

через дикона собственно наверное нам хочется чтобы это распределение была хорошо известна и чтоб вообще сампир был нам его не руками реализовывать был готов самым наверное распространенным и простым распределением будет многомерно нормальное распределение на нашем пространстве и наверное мы хотим чтобы это ожидание его было 0 0 вектор то есть у нас все-таки он пространство размерности не единицы какой-то другой и с какой-то стандартным отклонением равному единице у каждой компоненте то есть

какой-то другой и с какой-то стандартным отклонением равному единице у каждой компоненте то есть матриц корреляции у нас будет просто диагональных с единицами все компоненты мы предполагаем что они не будут зависеть друг от друга и поэтому матрицы нигана и мы хотим чтобы это из 7 это как раз таки больше всего подходили то есть мы хотим чтобы всеми этой были 0 асе мы и ты были единицы для этого предлагается такая функция она на вид выглядит странно но вот мы и его тоже хотим минимизировать

предлагается такая функция она на вид выглядит странно но вот мы и его тоже хотим минимизировать давайте посмотрим вот пример и там равным 0 и очевидно что при других минутах этого этот плос он будет больше потому что и у нас квадрате так вот пример этом равна нулю функция принимает следующий вид то есть еще про упасть умеют а и взял по иксу на сигма и ты и мы видим что максимум минимум вернее этой функции располагается единица это как раз то что мы хотим мы хотим чтобы cinema нет в нас широко

функции располагается единица это как раз то что мы хотим мы хотим чтобы cinema нет в нас широко лась единицы вы спросите почему такая сложная формула мышь там могли просто взять сегменты скажем минус 1 в квадрате плюс это в квадрате тоже подходит дело в том что эта функция взята неспроста поговорим подробнее 8 которые я описал только что как я говорил взята неспроста и собственно начнем с того как вообще померить расстояние между не расстояние мира схожести между двумя распределениями для

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

на дивергенцию одного этого уже распределение то в итоге получим следующее свойство это то что дивергенции не отрицательно это в принципе и дайте ему понятно если бы могла быть отрицательно тогда непонятно почему круговая схожесть 1 меньше чем другого при том что вот эти вот с нулем они равны но однако между юрген ции расстояния не существует разницы ну наверное самые важные это то что дивергенции несимметрично то есть как правило говорят дивергенция из п.в. таким образом значает обозначая

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

за ней некая интуиция если вкратце то это совместная терапия минус энтропия распределение p давайте разберем пример может мне углубляться в детали почему ты так вот на картинке слева у нас даны три распределения все ненормальные но одно из них вот голубое это стандартное нормальное распределение то есть матожидание молей сигна равный 1 и если мы посчитаем другое вот эта сумма на самом деле как правило ее можно записать как интеграл и на картинке справа обозначена как раз вот эта площадь

как правило ее можно записать как интеграл и на картинке справа обозначена как раз вот эта площадь интегрирования и как мы видим с концом dice оранжевое распределение на картинке слева а но гораздо сильнее отличается от исходного стандартного распределения чем вот зеленое распределение на картинке ну потому что во первых у нее матожидание больше смещенного во вторых большее стандартное отклонение так вот если посмотреть на конвергенцию то видно что вот площадь оранжевая на правой картинке она

так вот если посмотреть на конвергенцию то видно что вот площадь оранжевая на правой картинке она выше чем площадь зеленая и о сверху в легенде там подписаны значение конвергенции и можно заметить что конвергенция и спевку если к это вот нормально и смотрю да не им 3 7 внутри но практически в 8 раз больше чем [музыка] собственно коллить ургенции из стандартного и распределение в распыления аж которые не так сильно отличается от стандартного ну собственно какое отношение это имеет форму ли вы

не так сильно отличается от стандартного ну собственно какое отношение это имеет форму ли вы скажете ну давайте просто подставим стандартное распределение вместо по и вместо q просто не какое-то распределение смотрю они имеют и и стандарт выполнением семиты и оказывается если мы подставим и вместо суммы мы напишем интеграл ну почему де сумма написаны на самом деле интеграл от ведь тоже сумму никто не говорит что вы можете x красивая ну конечно так что вполне можно и так записывать так вот если

не говорит что вы можете x красивая ну конечно так что вполне можно и так записывать так вот если мы подставим и возьмем обычный интеграл то как раз таки по лучшему формулу которая была на предыдущих слайдах вот здесь то есть представляем и получаем то что нам нужно таким образом мы получили некую деци за вторым лоссом из боя таким образом мы вместо обычного лоссов для авт энкодер мы еще добавим лосс по поводу а как мы кодируем изображение в пространстве зачем это нужно давайте разбираться если

по поводу а как мы кодируем изображение в пространстве зачем это нужно давайте разбираться если мы просто возьмем у вас от авт энкодера то всего скорее что произведет наш энкодер он просто постарайтесь себя вести так же как и в обычном of thine коды он уменьшит стандартное отклонение до нуля армию это сделать ну вот просто так . в итоге да мы получим не распределение одну точку и он будет стараться произнести точки между собой давайте лучше вернусь вот назад чем нас не устраивают кто это вот

произнести точки между собой давайте лучше вернусь вот назад чем нас не устраивают кто это вот распределение которые мы видим здесь в овд энкодеры у него как мы видим какие то скажем по иксу до максимальное значение равно 15 16 и вообще то непонятно как нам взять и за сэмплировать точку из него то есть что мы можем мы можем взять меня рынку это растянутое такое распределение до для скажем вот оранжевой точке какие понимают двойки на они вот идут от по иксу от минус 5 до 16 ну и по игреку они

точке какие понимают двойки на они вот идут от по иксу от минус 5 до 16 ну и по игреку они тоже там меняются 5 дом не знаю -8 примерно вот у нас такое растянута облака и сэмплировать из него мы не хотим мы хотим чтобы все точки они вот собрались в один такой кружочек да и при этом были между собой различимы то есть мы хотим чтобы кодирование в пространство было более компактным более простым более кругу если хотите одним вот таким вытянутом вернемся так вон до если мы просто возьмем нос для

кругу если хотите одним вот таким вытянутом вернемся так вон до если мы просто возьмем нос для авто им кадра там и снова получим вот это растянута облака темнота что мы там всякие сэмплеры вы придумали все равно получится плохо из-за того что у нас есть возможность обратно вернуться к обычному авт энкодеру то есть класс грубо говоря того как можно кодировать вариационного вт энкодером вот то что делать often кадр входит в то что может делать и авто вы еврей tion of tanks но при этом авт энкодер

often кадр входит в то что может делать и авто вы еврей tion of tanks но при этом авт энкодер не может как бы собрать все точки в1 и для этого вы придумали вот этот плод который называется танка и дивергенция что он будет делать он будет во первых сжимать все точки не то чтобы прям сильно сжимать но вот постарайтесь чтобы стандартное отклонение была равна единице и при этом он возьмет не просто точку на он сделать так чтобы у этой точке было какое-то стандартное отклонение из которого может

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

они не сильно друг от друга и от стояли в итоге мы получим этого пространства латентно в нем как мы видим точки все поля собраны и из него уже мы можем сэмплировать изображение как мы это делаем просто возьмем выборку из нормального распределения там торчит . аренды возьмем засэмплирую и через декодер пропустим пропустили через доходы в то мы получим да давайте сравним еще раз у авто энкодера обычного облаке вытянуты всего . не как-то там у них центра конечно 0 0 но при этом вот эти укрепи

обычного облаке вытянуты всего . не как-то там у них центра конечно 0 0 но при этом вот эти укрепи стаки они сильно отстоят друг от друга и вообще говоря не понятно как нам из какого распределения центрировать а справа как мы видим они все более округлые если я бы сделал там квадратному само по себе картинку этого лазерного пространство вы бы увидели что они не вытянут и они вот мы располагается в ком-то n-мерном sharing данном случае двухмерным и самим себе вот как бы облака вот эти кластеры

в ком-то n-мерном sharing данном случае двухмерным и самим себе вот как бы облака вот эти кластеры они немножко смещены но тоже имеет округлую такую структуру вот что здесь изображена здесь скажем слева я взял просто вот этот квадратик который у кого 0 от минус 2 до полтора по x и по y а вот этот квадратик взял взял какие-то точки в нем или равномерной сетке и пропустил через декор обратным слева у нас то что получилось в авто энкодера а справа то что получилось у акционного авторынка мира как

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

нормально провести из одной точки в другую линию так чтобы мусорном пространстве так чтобы каждое изображение на этой линии было похоже на цифру а справа у нас не есть изображение от вариационного авто энкодера здесь мы видим переход гораздо более плавный между собой большая часть цифрах то свиней с обычным of tanks dream различимо и и собственно можно сказать что если сам плевать и завтра энкодеры то всего скорее мы получим лучшую картинку в плане если мы хотим изменить цифру то мы получим

то всего скорее мы получим лучшую картинку в плане если мы хотим изменить цифру то мы получим цифру они что-то там между двойкой пятеркой или там двоек и 0 он как слева переход плавный мы можем прямо скажем на картинке софт энкодером если обратить на верхнюю часть да вот вот где у нас единица вообще знаем да что единицы она очень похожа на семерку что отличает ли несет семерки 1 палочку словно да это там и иногда бывает что мы не можем одним семерка отличить если описать вот так с двумя

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

из части с восьмерками с четверкой с девятками потом мы уже получим семерку 10 справа кажется это не самый оптимальный короткий путь а если мы посмотрим на изображение слева с вареным оттенку dream то в нем путь из единиц и две семёрки он как раз таки занимает ну вот скажем посередине до смотрим на левую часть посередине между там кластерами семёрок и единицами у нас лежит как раз скажет что-то среднем то что в принципе может отжать и единицы и семерки и даже в девятке дают если посмотреть я

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

на этот раз обучим реакционный авто кодировщик для на изображениях животных и птиц и собственно попытаемся из-под собачки белы получить птиц если мы просто возьмем из пространства всех картинок до которые возможно и попытаемся сделать птицу просто линейным преобразованием тета мы возьмем скажу лямда исходная картинка плюс 1 минус лямда то картинка который мы хотим получить или там от нуля до единицы ну просто оклеены просто линию проведем то как мы видим это часть изображение которую слева у

ну просто оклеены просто линию проведем то как мы видим это часть изображение которую слева у нас получается не совсем то что мы хотим у нас тихонько исчезает собакой появляется птицы это при этом то что посередине у нас явно не принадлежит распределение из картинок исходных в отличие от этого то что получается справа мы видим что сначала нас наша собака большая белая собака и спустя несколько этапов мы получаем и маленькую белую собаку и при этом как минимум фон с ним в нас исчезает потому что

мы получаем и маленькую белую собаку и при этом как минимум фон с ним в нас исчезает потому что бы нет на второй картинке потом мы получаем что-то уже больше похожи по цветам на я птицу чем на собаку и в конце мы получаем от самую птицу таким образом вот качество этого перехода но гораздо лучше чем то что у нас бы получилось если мы просто взялись в сборной картинки и таким образом утверждается что вариационный авто кодировщик он выучил распредели нет данных и дальше может генерировать их я бы

вариационный авто кодировщик он выучил распредели нет данных и дальше может генерировать их я бы сказал что абсолютно все картинки вот кроме второй снизу они в принципе могли быть восходом дает а сайте да есть у нас там изображено собаки и птицы то вот последнюю веточку птицы а первые пять это очевидно собаки просто 5 собак она чуть меньше чем первым что мы еще можем сделать самые интересные с латунным пространством когда мы его хорошо обучили мы можем из ту грустного человека получать весь

латунным пространством когда мы его хорошо обучили мы можем из ту грустного человека получать весь очерк как это сделать в как заставить человека улыбаться мы берем datasette на котором есть два класса 1 класс это люди которые улыбаются 2 класс который люди катера грустят которых у грустное выражение отправив словно вот и давайте теперь вот обучили вариационный авт энкодер теперь возьмем сначала пропустим все картинки из с улыбкой и в среднем точки вот иное пространство которые нас получились

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

вектор собственно направление которое как бы показывает нам что такое улыбка вообще до в этом пространстве теперь возьмем в котором изображение человека который грустное выражение лица у которого рот такой формы и прибавим и получившийся вектор улыбки и в итоге мы получим грубо говоря человека который вот улыбается так же это будет работать скажем с одним пейзажем и не начну пейзаж мы возьмем там опять же datasette который 2 класса ночные фотографии и дневных а потом мы можем превращать из всех

опять же datasette который 2 класса ночные фотографии и дневных а потом мы можем превращать из всех скажем начнут фотографии дневные или из земных ночные таким же улиц получаем вектор влад 1 пространством прибавляю к исходному изображению декодируем и получаем то что на этом всё и более подробно бы с тем как это все написать на языке поэтому познакомитесь именно я и у вас будет еще домашнее задание по баритоном art in годом всем удачи в изучении я наверное выложу потом конспект с материалами по

по баритоном art in годом всем удачи в изучении я наверное выложу потом конспект с материалами по овд энкодеру материал сложный и поэтому ничего такого если вы с первого раза что-то не поняли всем удачи изучения и пока

всем привет меня зовут артем и володин of и сегодня на семинаре мы с вами обсудим авто энкодера наш семинар будет состоять из двух частей в первой части этого семинара который будет сейчас мы построим обычный авт энкодер классический и будем использовать его для задачи да так ци аномалий во временных рядах во второй части нашего семинара мы поговорим про вариационный авто энкодер боях так называемый и с его помощью его попробуем сгенерировать лица и из имеющегося дорсета итак давайте начинать 1

и с его помощью его попробуем сгенерировать лица и из имеющегося дорсета итак давайте начинать 1 часть нашего семинара и для начала я напомню какую структуру имеют один кадр от энкодер состоит из двух сетей первая сеть называется энкодер который на вход подается оригинальный наш input это может быть изображение или в нашем случае это будет временно ряд и энкодер по полученному им пту строит его представление так называемого латентное представление далее это латентное представление подается на

представление так называемого латентное представление далее это латентное представление подается на вход декора это вторая сеть которая входит в состав often кодера и декодера пытается по имеющимся у него латентным диктором реконструировать им под который поступил на потом кадр в качестве туда с функции с помощью которой обучается авт энкодер используется некая мера схожести реконструированного input с оригинальным наша идея заключается в следующем энкодер когда ему на вход приходят какие-то

input с оригинальным наша идея заключается в следующем энкодер когда ему на вход приходят какие-то данные он выучивает распределение из которого эти данные берутся если наши данные все взятые из примерно 1 раз распределения то дико дыру будет проще реконструировать те данные которые похожи на те с которыми он сталкивался на обучение однако если в нашей тестовой выборке есть какая-то аномалия то на шахт инковер реконструирует и и плохо потому что он выучил распределение для которого такие

то на шахт инковер реконструирует и и плохо потому что он выучил распределение для которого такие аномалии являются выбросами и полученные латентные представление они будут плохо соответствовать тому что нам подавалась на вход и поэтому из-за того что реконструирован наш объект будет плохо лосс будет большим и поэтому идея для задача дотаций аномалий заключается в следующем давайте установим какой-то порог и если лосс превышает этот порог мы будем считать объект аномалий в чем преимущества

какой-то порог и если лосс превышает этот порог мы будем считать объект аномалий в чем преимущества использования avd энкодеров при решении такой задачи мы можно детектировать аномалии даже в том случае если на обучающей выборке мы их никогда не видели давайте приступать мы воспользуемся таким-то тыс этом это искусственный сгенерированный временной ряд то есть у нас есть некоторые таймс темпы то есть моменты времени и есть одномерные данные которые соответствуют этим таинственным по мане на

то есть моменты времени и есть одномерные данные которые соответствуют этим таинственным по мане на зайцев или мы будем решать задачу в том случае когда на обучении мы вообще не видели никаких аномалий мы возьмем данные с маленьким шумом на тесте аномалии уже присутствует и мы возьмем заземленный datasette загрузим их не посмотрим как они выглядят ну вот мы видим у нас есть какие-то временные отметки через каждые 5 минут и этим временным отметкам соответствует некоторое былью то же самое и на

через каждые 5 минут и этим временным отметкам соответствует некоторое былью то же самое и на нашем тестовом касается давайте посмотрим как выглядит наш времена ряд если у него нет аномалий просто построим график но как мы видим у нас в данных наблюдается некоторый периодичность то есть с периодичности в сутки вылью принимает примерно одинаковое значение если у нас данных есть аномалия то мы начинаем видеть что в какие-то моменты значения становятся слишком большими или слишком маленьким но в

видеть что в какие-то моменты значения становятся слишком большими или слишком маленьким но в нашем случае слишком большими и наши задачи будет определить в какие таймс темпов какие промежутки времени это аномалия наблюдалось сначала перед тем как обучать наши сети приведем небольшую обработку наших данных у нас данные если led 14 дней с периодичностью пять минут и для начала мы их нормализуем то есть мы посчитаем среднее почитаем стандартные отклонения вычтем средние поделим на стандартное

то есть мы посчитаем среднее почитаем стандартные отклонения вычтем средние поделим на стандартное отклонение чтобы получить лыс средняя 0 и дисперсия 1 далее на вход наши сетки мы будем подавать последовательности к длительность каждой такой последовательности будет один день то есть в нашем случае с 288 таймс темпов вот здесь вы видите код генерирующий эти последовательности time stops мы выбрали 288 и далее для того чтобы наблюдать за процессом нашего обучения мы поделим нашу выборку на

288 и далее для того чтобы наблюдать за процессом нашего обучения мы поделим нашу выборку на обучающей эволюционную с помощью train тест плиты со скалярным тут важно отметить что поскольку мы имеем дело с временным рядам у нас есть зависимость данных от времени и следовательно нам важно в каком порядке эти данные идут поэтому когда вы работаете с временными рядами и используются эволюционные выборки лучше всего указывает параметр shuffle равный фолз потому что иначе данные перемешаются и будет

лучше всего указывает параметр shuffle равный фолз потому что иначе данные перемешаются и будет не очень понятно какому моменту времени какое значение соответствует загрузим наши выборки бутлоадера bachata is выберем равный 4 и перейдем непосредственно к построению тэн кадром acting order мы будем строить используя сверхточные слои на охоту он принимает трехмерный тендер по 1 размерность это ваш сайт дальше simple and slim в нашем случае это 288 потому что именно столько таймс tempus у нас

ваш сайт дальше simple and slim в нашем случае это 288 потому что именно столько таймс tempus у нас соответствуют одним суткам и нам фьючерс равен единице потому что данные у нас одномерное давайте посмотрим на то как выглядит наш арт энкодер сначала энкодер энкодер у нас состоит из свёрточная слоев мы тут выбираем 32 канала на выходе здесь 16 каналов на выходе и разделили их релог далее декады тут важно и следующее мы должны вернуть тендер имеющий ту же размерность что и мы получали на входе

тут важно и следующее мы должны вернуть тендер имеющий ту же размерность что и мы получали на входе именно для этого мы в декоре вместо свёрточная слоев будем использовать обратные свертки и так как данные на сына мерные мы используем конфу один да они 2d как обычно используется при работе с изображениями выставляем каналы такие же но в обратном порядке и мы в итоге получим тендер той же самой размерности что и мы получали на входе а значит мы сможем их сравнивать ну форвард просто подаем

размерности что и мы получали на входе а значит мы сможем их сравнивать ну форвард просто подаем сначала в энкодера получаем латентные вектора далее полученные латентное представления мы передаем декодер давайте посмотрим на цикл обучения наши моделям в качестве функции по сей будем использовать и мы съел ос то есть мы будем смотреть на среднеквадратичную разность значений в илью реконструированных и исходных далее внутри цикла обучения мы получаем реконструктор и поскольку у нас мы решаем

и исходных далее внутри цикла обучения мы получаем реконструктор и поскольку у нас мы решаем задачи реконструкции в лосс мы передаем в качестве предикат мы передаем на наши реконструированные значения и в качестве исходного мы подаем ту же самую тот же самый бочки на котором мы обучались потому что нам нужно получить именно его но давайте запустим на 50 эпохах мы это уже сделали сесть у нас не очень большой об этом она обучается достаточно быстро и посмотрим на графики и мы съел ос на троне и

большой об этом она обучается достаточно быстро и посмотрим на графики и мы съел ос на троне и наблюдаться ну вот как вы видите мы с вами даже немного при обучились мы взяли слишком много эпох то есть оптимальные было бы взять где-то около 12 и 13 типов но даже с такой немного при обученные сети мы как мы увидим дальше получим неплохой результат теперь когда наша сеть обучена давайте перейдем непосредственно к акции аномально как мы уже говорили раньше мы будем определялись аномальный это

непосредственно к акции аномально как мы уже говорили раньше мы будем определялись аномальный это объект или нет на основании того насколько хорошо наш авто энкодер реконструирует его и для этого мы сделаем следующее мы посчитаем и моя мин абсолют р.р. то есть уже не среднеквадратичная средняя абсолютно ошибку далее мы решаем нашу задачу в предположение что на троне у нас никаких аномалий нет то есть там все объекты нормальные поэтому в качестве порога мы можем выбирать максимум из и моя

то есть там все объекты нормальные поэтому в качестве порога мы можем выбирать максимум из и моя которые мы получим на тренер и далее просто делаем следующее если лосс больше нашим утра шел до который максимум мрт мы встретили какой-то паттерна который не встречался в обучающей выборке и следовательно мы так твой подарок считаем аномалий давайте предскажет наш времена ряд реконструируем его делаем это страшный град потому что мы уже не обучаем модель и посчитаем e-mail ос ну и далее в качестве

это страшный град потому что мы уже не обучаем модель и посчитаем e-mail ос ну и далее в качестве прошел до будем выбирать максимум который мы получили на всем тренер ну мы получили вот такое значение и теперь давайте просто ради интереса посмотрим а насколько хорошо вообще наша модель реконструирует данные и для этого мы возьмем первый день которые у нас есть в dota сети и построим график x3 то есть это истинные значения и expret это то что мы реконструировали то что мы предсказали ну и вот

есть это истинные значения и expret это то что мы реконструировали то что мы предсказали ну и вот посмотрим на графики мы видим для объектов не являющихся аномалии а этот день не anna malle en потому что он ест рейном мы получаем достаточно близкие значения и все реконструируется достаточно хорошо теперь перейдем непосредственно к нашим тестовым данным и посмотрим на них проделаем сначала все то же самое а именно мы вычтем среднее и поделим на стандартное отклонение но однако это средние

то же самое а именно мы вычтем среднее и поделим на стандартное отклонение но однако это средние стандартное отклонение не тестовой выборке а то что вы получили над рэйни и дальше давайте посмотрим на графики вот такие у нас получились и мая то есть как мы видим большинство их достаточно маленькие однако в некоторых случаях мы встречаем большие значения и это явное указание на то что мы имеем дело с аномалиями вот этот график мы уже дизелем это так как если аномалии непосредственно выглядят и

с аномалиями вот этот график мы уже дизелем это так как если аномалии непосредственно выглядят и теперь давайте считать и мая на тестер проделываем тоже самое только уже с тест лоулером считаем среднее между модулем разности предсказания и исходного бача и теперь смотрим какие из наших объектов являются аномалиями для этого просто сравним их прошел дам и посмотрим сколько же у нас получилось аномалий как вы видите у нас и получилось 405 и вот здесь мы можем посмотреть какие именно таймс темпы

как вы видите у нас и получилось 405 и вот здесь мы можем посмотреть какие именно таймс темпы считаются аномальными их достаточно много но нам не очень интересно работать с отдельными таймс темпами гораздо интереснее посмотреть на промежутке временные в которые это аномалия наблюдалось и давайте попробуем восстановить по темпам промежутке которые считаются аномалиями мы будем делать следующие процедуры поскольку наш train & test они состоят из последовательностей такие последовательности будут

поскольку наш train & test они состоят из последовательностей такие последовательности будут иметь вот такой вид то есть они накладываются друг на друга с перекрытия и из за того что они накладываются с перекрытием все значения кроме самого первого и последних тнт and стс tires минус 1 то есть это 287 они появятся в данных ровно time стерв раз и поэтому мы можем считать что если все объекты все таймс объектов в которых присутствует наш момент времени помечены как аномалии то именно этот момент

объектов в которых присутствует наш момент времени помечены как аномалии то именно этот момент времени является аномальным давайте проделаем эту процедуру то есть мы пройдемся по нашему предсказания в котором мы пометили являются объекты аномалиями или нет и если все объекты диапазоне размера таймс являются аномальными то именно в этот момент времени у раз призвать то что то произошло то есть какая-то аномалия появилась и теперь давайте изобразим это все на графике отметив аномалию красным

какая-то аномалия появилась и теперь давайте изобразим это все на графике отметив аномалию красным светом и вот как вы видите мы достаточно точно определили границы нашей аномалии ну и как следствие показали как именно авто им кадры могут использоваться для решения подобных задач на этом первая часть семинар подходит концу и в следующей части семинара мы поговорим про усовершенствованную версию often кадров про вариационные авто энкодеры и про то как с их помощью решать различные задачи в том

often кадров про вариационные авто энкодеры и про то как с их помощью решать различные задачи в том числе задачи генерации

всем привет меня зовут артем дима логинов и это вторая часть семинара посвященного often кадра в первой части мы рассмотрели как работать с обычным классическим авт энкодером в этой части семинары речь пойдет про вариационные авт энкодеры или как их как сокращенно называют vai vai имеет такую же структуру как обычный авт энкодер то есть она состоит из и энкодера и до кадра однако в отличии от обычных авт энкодеров мы хотим выучить параметры распределения именно параметры нормального

от обычных авт энкодеров мы хотим выучить параметры распределения именно параметры нормального распределения ну и сигма ты средние и стандартное отклонение мы сегодняшнем семинаре будем тренировать авт энкодера кодировать лица людей и возьмем вот такой дату сет и здесь ниже у нас есть код с помощью которого вы можете загрузить datasette и после того как вы создали ужин давайте перейдем непосредственно к воде мы будем иметь дело с простейшим совершенно простейшим often кадром который будет

к воде мы будем иметь дело с простейшим совершенно простейшим often кадром который будет состоять просто даже изменением их слоев даже никаких сверток не будет и прочего но как вы увидите даже с помощью такой простой модели мы на может добиться приемлемого качества давайте посмотрим вот структура нашей наш вов там кадра то есть сначала у нас идет encoder здесь мы используем примерно фьючерс эта переменная будет отвечать за размерность вот этого пространства и поскольку мы хотим с помощью

эта переменная будет отвечать за размерность вот этого пространства и поскольку мы хотим с помощью энкодера выучить 2 параметрами сигма то выходная размерность должна быть фьючерс умноженный на 2 когда мы строим декор он у нас имеет такую же структуру мы передаем в него уже просто фьючерс потому что в первом случае мы имеем дело с двумя параметрами вы находите кадра мы будем иметь дело уже с одним тендерам сгенерированным с помощью этих двух параметров и далее давайте обсудим такой достаточно

тендерам сгенерированным с помощью этих двух параметров и далее давайте обсудим такой достаточно важный момент дело в том что наши латентный виктором по нашему предположению имеют нормальное распределение но нормальное распределение с какими-то параметрами ну и символ но мы хотим генерировать данные из стандартного нормального распределения стандартным называются нормальное распределение у которого средняя 0 и дисперсия равна единица для того чтобы перейти от стандартного нормального

у которого средняя 0 и дисперсия равна единица для того чтобы перейти от стандартного нормального распределения к произвольному используется такая такой прием который называется ри параметре сейшен track а именно его мы делаем здесь функцию реками thrice а на ход у нас подается но это средняя из одно пространство и лог war это dice логарифм стандартного отклонения точнее это логарифм и дисперсии стандартное отклонение от корень из дисперсии мы его получим дали логарифм дисперсии потому что так

стандартное отклонение от корень из дисперсии мы его получим дали логарифм дисперсии потому что так удобнее с вычислительной точки зрения нам работать именно с логарифмом они с самой дисперсии теперь мы делаем следующие мы получаем стандартное отклонение стандартное отклонение это корень из дисперсии то есть корень из b в степени логарифм дисперсии или же е в степени логарифм дисперсии пополам далее мы пользуемся методом рандом лайк и сторчак который позволяет сгенерировать случайную

пополам далее мы пользуемся методом рандом лайк и сторчак который позволяет сгенерировать случайную последовательность имеющую ту же размерность что и исходное random генерирует из стандартного нормального распределения и чтобы получить произвольное нормальное распределение мы делаем следующее мы умножаем наш сгенерированную р силам на стандартное отклонение и прибавляем к нему среднее таким образом мы получили сэмпл из произвольного нормального распределения теперь давайте немножко обсудим

мы получили сэмпл из произвольного нормального распределения теперь давайте немножко обсудим форвард поскольку мы имеем дело с линейными слоями то картинка который нам приходит на вход не необходимо предварительно расплющить с помощью флотом и далее мы пропускаем ее через in камер и говорим следующее что первое ну то есть индекс 0 по первой оси это будет наш имел а индекс 1 по первой оси это будет наш логарифм дисперсии логово рф именно для этого мы и ставили здесь фьючерс ножен 2 далее с

будет наш логарифм дисперсии логово рф именно для этого мы и ставили здесь фьючерс ножен 2 далее с помощью реформе отрезаешь интриг мы герреро латентный вектора пропускаем их через декор и на выходе чтобы нормализовать полученные данные пропускаем их через 7 в наш форвард должен возвращать reconstruction то есть наши реконструированы изображения и ну и логарифм дисперсии которые мы получили потому что и они используются для подсчёта у вас функции также давайте реализуем сэмплирования методу

что и они используются для подсчёта у вас функции также давайте реализуем сэмплирования методу сэмпл на вход подается вектор z который имеет ту же размерность что и виктора латентного пространство пропускаем его через декор через 7 и для того чтобы получить картинку мы преобразуем обратно к 64 на 64 и трем каналам далее нам понадобится еще такой метод как дед лад инспектор то есть мы хотим получить латентные виктора ну это по сути просто первая половина нашего форварда теперь давайте обсудим

латентные виктора ну это по сути просто первая половина нашего форварда теперь давайте обсудим какой лосс используется при обучении вайп лосс как вы уже наверное знаете лекции состоит из двух частей первой части такая и дивергенция она отвечает над зато как далеко друг от друга находятся распределение который соответствует разным объектам то есть разным лицам и вторая часть наши волосы и to look like ли ход он отвечает за то насколько хорошо мы реконструируем исходное изображение но общий вид

like ли ход он отвечает за то насколько хорошо мы реконструируем исходное изображение но общий вид не получается такой в качестве дивергенцию мы считаем следующим образом именно для этого мы и использовали логарифм сигма а в качестве logo лайки ход мы возьмем кросс энтропию которая бы съел ос из python теперь давайте реализуем наши функции потерь то есть здесь мы по сути переписали эту формулу которая находится выше ну и в качестве look like food как мы уже сказали берется кровь энтропия и

которая находится выше ну и в качестве look like food как мы уже сказали берется кровь энтропия и далее просто их samira ну и теперь давайте обучать модель поделим на train и валидацию возьмем для обучения 50 эпох и посмотрим как именно у нас идет цикл обучения как мы уже говорили форвард возвращает три значения это на изображении это мир средние и логарифмов дисперсии но и далее все эти значения нам нужны для того чтобы считать лосс в качестве исходного также как и в обычном of tanks дери мы

нам нужны для того чтобы считать лосс в качестве исходного также как и в обычном of tanks дери мы берем просто бочки strain а ну и далее передаем те значения которые мы получили на при форвард пасе то же самое да валидации ну и теперь давайте посмотрим как хорошо мы восстанавливаем картинки здесь алгоритм примерно такой же как тот которым мы пользовались первой части семинара просто обучаем добавляем view чтобы можно было более красиво изобразить эти картинки ну и давайте на них посмотрим но

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

еще лучше мы хотели изначально делать что мы хотели обучить нашего йен и затем используя те милый сигма которые мы знаем попробовать сэмплировать из случайного с гирей из случайно сгенерированному шума новые изображение новый объекта то есть мы делаем следующее мы подсовываем дико дыру просто случайный вектор и посмотрим что же у нас получится в итоге ну а как вы видите что-то похожее на лица даже такая простая модель как наша генерирует по уходящему случайному шуму и некоторые из них

лица даже такая простая модель как наша генерирует по уходящему случайному шуму и некоторые из них получились даже достаточно неплохо а теперь давайте в качестве эксперимента посмотрим как еще можно работать с латентным пространством сделаем следующее мы сгенерируем латентные векторы двух изображений это соответственно 0 и 1 изображение из нашей выборке вот так как дублирует их авто encoder и мы хотим использовать следующий трюк возьмем некоторые значения альфа от нуля до единицы включительно и

использовать следующий трюк возьмем некоторые значения альфа от нуля до единицы включительно и посчитаем выпуклую комбинацию этих латентных викторов то есть она имеет вот такой вид альфа умножить на 1 и плюс 1 минус альфа умножить на 0 2 на самом деле это эквивалентно того что мы бы в латентном пространстве взяли две точки и соединили их отрезком то есть такой формулой в зависимости от альфа будут задаваться все точки латентного пространство лежащие на отрезке который соединяет или 102 и теперь

задаваться все точки латентного пространство лежащие на отрезке который соединяет или 102 и теперь давайте посмотрим как именно наш авт энкодер будет реконструировать значение лежащие на этом отрезке то есть здесь мы проделали именно то о чем я говорил взяли выпуклую сумму двух латентных викторов и теперь давайте посмотрим на то как происходит сэмплирование как вы видите у нас наблюдается такой плавный переход от одного лица к другому то есть на самом деле можно пользоваться такими приемами

плавный переход от одного лица к другому то есть на самом деле можно пользоваться такими приемами если мы хотим построить такой переход от одного изображения к другого можно взять отрезок соединяющий их в латентном пространстве и для точек этого отрезка мы заставим наш авт энкодер сэмплировать изображение и таким образом можно генерировать какие-то новые лица то есть как вот где которые здесь посередине на этом вторая часть семинара подходит концу дней мы рассмотрели вариационный often кадр

посередине на этом вторая часть семинара подходит концу дней мы рассмотрели вариационный often кадр простейший обучили его посмотрели на то как сэмплировать из него новое значение обсудили теперь внутрь узришь интриг который позволяет сэмплировать из произвольного нормального распределения ну и немного поэкспериментировали с латентным пространством всем спасибо за внимание всем пока

всем привет сегодня мы продолжаем тему генеративных моделей но для начала давайте ознакомимся с паном сегодняшнее занятие вначале мы повторим и день генеративных моделей в общем затем скажем что с не так зрелищно of time кадрами с которыми познакомились на предыдущем занятии дальше я расскажу уже что-то новое то есть идеи оганов друге при их обучения и различный архитектуры данов ну давайте вспоминать на чем остановились вообще говоря дамы вот здесь проблемой генерации каких-либо объектов ну

на чем остановились вообще говоря дамы вот здесь проблемой генерации каких-либо объектов ну проще всего это показывает на изображениях вот на какое-то изображение мы хотим не классифицировать его как-то по классам не там какую-то маску найти нет мы этого не хотим мы хотим выучить распределение данных в этом дата сайте что я имею ввиду ну вот распределение общая фотография это достаточно сложная мультимодальная штука размерность большая как-то не зависят друг от друга там есть один пиксель яркий

штука размерность большая как-то не зависят друг от друга там есть один пиксель яркий то и второй должен быть наверное ярким как-то скрали rowan либо наоборот другой темным и собственно напрямую распределением достаточно сложно выучить поэтому мы пользуемся следующем трюком мы берем из наши изображения привода вовку это латентное пространство как правило меньшей размерности и уже вот в этому от этом пространстве мы говорим что все данные да вот каждая точка это допустим изображение из нашего

этом пространстве мы говорим что все данные да вот каждая точка это допустим изображение из нашего исходного to set a и мы хотим что тот ладит merck пространство было в некотором смысле хорошим то есть таким что мы можем в этом пространстве уже учить обычные там какие-то независимые распределения по компонентам например то есть достаточно там выучить скажем стандартное отклонение по каждой компоненте и матожидания каждый компонент и после этого мы из этого оттенок на вожатого как правило

компоненте и матожидания каждый компонент и после этого мы из этого оттенок на вожатого как правило представления мы хотим собственно получить за новую картинку то есть мы уже выучили распределение что нам остается на остается за сэмплировать какие-то новые точки в пространстве латентном и не привезти из этого водного пространства заново в пространство изображений какой-то сложности модели на бот как бы погиб прошлой реакции был как раз-таки variations of time кодов что в нем происходит в нем

как бы погиб прошлой реакции был как раз-таки variations of time кодов что в нем происходит в нем мы также допустим если x это изображение хотя не факт если x изображение то мы опять же кодируем в какой-то но пространство то есть мы даже кодируем каким-то значениями распределений затем центрируем готова распределение получаем точку на темном пространстве и эту точку от этом пространстве мы уже передаем декодер и декодируемым получаем круто x с крышечкой и после этого при обучении мы считали как

декодер и декодируемым получаем круто x с крышечкой и после этого при обучении мы считали как бы разность между этими двумя фотографиями то есть условно если это были фотографии или изображения то что у нас было на входе то что у нас получилось на выходе посчитали разницу мы хотим чтобы она была маленькая это и чтобы вот это вот содержать представление хорошо кодировала исходное пространство а на этапе уже inference а то есть когда мы просто хотим генерировать изображение мы берем просто и

а на этапе уже inference а то есть когда мы просто хотим генерировать изображение мы берем просто и смоделируем из нормального распределения какие то какие то точки и после этого мы эти точки бросаем де кодеры и декодеры нам уже выдает изображение вот такой pipeline собственно давайте посмотрим на допустим изображение людей вот мы представим ситуацию что мы обучали наш variations of tanks адорно datasette с лицами людей и после того как мы обучили давайте посмотрим что у нас получается после

datasette с лицами людей и после того как мы обучили давайте посмотрим что у нас получается после сэмплирование салатного пространство и пропускания через декаду получается примерно вот такие изображения что с ними не так ну сам очевидны они мутные все изображения будды в чем же дело почему так получается то есть мы видим что львица в принципе у нас ну я бы не сказал что даже вас но массе но в принципе с лицами чувствоваться более-менее с фон фон всегда абсолютно размытый несмотря на то что

принципе с лицами чувствоваться более-менее с фон фон всегда абсолютно размытый несмотря на то что dota с этим не было размытого фона и при этом до или цены и качества генерации не то что мы хотели не то что я обещала условно на первой лекции начали снова давайте разбираться в чем тут проблема что пошло не так как я уже говорил как правило пространство латентная имеет меньшего размера чем пространство исходное изображение то есть если пространство изображение было для фотосета с рукописными

исходное изображение то есть если пространство изображение было для фотосета с рукописными цифрами вместо 784 салата на пространство где того же места вполне может быть там и 2 и 10 ну в общем она гораздо меньше к чему все это я давайте посмотрим на изображение вернее на слайд что мы видим пусть вот синяя линия кривая это некоторые многообразие на котором . которого представляет собой одно изображение за какую точку это допустим изображение числа 1 взяли другую точку из этой синей линии кривой

за какую точку это допустим изображение числа 1 взяли другую точку из этой синей линии кривой у нас получилось как другое изображение ну там скажем цифры 7 словно собственно что делает у нас года энкодер из этого пространства синего он переводит в пространство с меньшей размерности например вот как это розовая линия linia нас прямая скажем если x это как двумерный объект то прямая за этот одномерный объект очевидно и вот представьте ситуацию мы знаем что вот у нас есть ну ка дар он получает

объект очевидно и вот представьте ситуацию мы знаем что вот у нас есть ну ка дар он получает некоторые z и вот вот это ограничение z но что но говорит она говорит что изображение которое должно получиться в результате раз кодировки но должно лежать вот на этой розовой прямой при этом энкодер знать что все остальные фотография не раз преданы как то вот так потому что нам он обучался на этом the city что предскажет энкодер как вы думаете нам хотелось бы хотелось бы чтобы он предсказывал одну из

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

он не знает какая из этих точек на самом деле было то есть представьте ситуацию до не знает что из это предсказатель так он будет минимизировать и мы слепо вашим encoder декодирования вы даст нам точку посередине почему это так но представьте допустим нас есть какой-то простой пример для случайного лично либо ноль либо один совет 5050 подкидываю монетку там выпадает орел пишем единицы упадет решка пишу 0 что нам выдаст декор в этот момент он нам предскажет для минимизации он на польском нами

пишу 0 что нам выдаст декор в этот момент он нам предскажет для минимизации он на польском нами схема нам предскажешь значение 0 5 он близко что средняя при этом мы понимаем что монетка как правило на ребро она не станет вероятность этого крайне мала в нашей моделью и вероятность этого 0 но при этом декады выдаст именно это потому что ошибка была м с я а мы хотим чтобы он выдут иным типы нам либо орел де бо решку и из-за этого мы получаем это размытие которому здесь то есть условно энкодер

либо орел де бо решку и из-за этого мы получаем это размытие которому здесь то есть условно энкодер хорошо кодирует сами лица он хорошо кодирует значит пол цвет кожи и так далее но при этом фонд кодирует плохо потому что это не основная часть нашего data set a и что получается вот наш декодер получает какую-то латентным . ла-тэн на пространстве которые хорошо закодировали цу но при этом она не кодирует фона изображения и во время декодирования наш декор старается поискать средний фон с таким

кодирует фона изображения и во время декодирования наш декор старается поискать средний фон с таким лицом при условии всего дата сайта а средний фон как у меня он будет сто процентов размытый если мы возьмем просто вот все изображения и усредним у нас просто получится к тут равномерным путь смазана все будет и также с лицами да вот мы видим что несмотря на то что вроде как он кодов неплохо кодируют их стучать результат когда у нас но достаточно плохой вот допустим в не вам в нижнем углу да у

их стучать результат когда у нас но достаточно плохой вот допустим в не вам в нижнем углу да у нас не понятно все размыто абсолютно все вся проблема это было в выборе лосса и мазке потому что он предскажу что-то среднее что-то средние это как правило размытая давайте думаешь что с этим можно сделать и вот собственно потом мы видим идею gant давайте будем делать немножко по-другому мы не будем учить собственно энкодер в пространство t нтн и мы просто избавимся от части с энкодером достанется

учить собственно энкодер в пространство t нтн и мы просто избавимся от части с энкодером достанется только де кода и будем стараться отвечать на вопрос хорошая ли картинка получилась улетать генерации из скажем многомерного то есть у нас лазерном пространстве будет стандартный распределение многомерная мы из него будем цеплять . эту точку послать декор иди катрина будет вставать к это изображение и мы будем стараться ответь на вопрос хороший был чего собирание или нет то есть нам понадобится

и мы будем стараться ответь на вопрос хороший был чего собирание или нет то есть нам понадобится что еще одна модель еще одна модель которая будет нам говорить насколько карте к получившейся собственно хорошие что это значит понять хорошую картинки понятно дело размыты и так мы хотим чтобы вот это наш классификатор который в итоге у нас получится словно змеи на бинарных секатор который был говорить хорошие ли плохая картинка да он будет воевать вероятность этого класса хорошести так вот мы

хорошие ли плохая картинка да он будет воевать вероятность этого класса хорошести так вот мы хотим чтобы наш классификатор на изображениях из даташита очевидным выдавал что она хорошая потому что это вот картинка ровно вот на подобе таких картинок мы хотим получать из нашего генератора однако этот концентратор который мы обучаем еще один дополнительный он должен для абсолютно всех остальных картины которые не похожи на изображением туда советы он должен выдавать низкое число том числе он будет

которые не похожи на изображением туда советы он должен выдавать низкое число том числе он будет выдавать низкая вероятность хорошие картинки при самом начале обучение генератора т.е. сначала генератор подевались очень какие-то случайные картинки просто шум и классификатор должен сказать что это изображение плохое мы хотим такой же как был у нас дед с этим с другой стороны генератор хочет чтобы узнать под классификатор который идет после него выдавала что сгенерированные изображение похоже на

узнать под классификатор который идет после него выдавала что сгенерированные изображение похоже на то что было в dota сайте таким образом получаем видеть некоторую такую битву данным между классификатором и генератором собственный генератор хочет максимизировать вероятность того что картинка хорошая классификатор наборах очень минимизировать эти от и картинка пришла нам не из-за досыта пришла нам извне собственно как мы можем это описать мы можем писать то с помощью вот такой вот лосс функция

извне собственно как мы можем это описать мы можем писать то с помощью вот такой вот лосс функция давайте разбираться что в ней есть заранее скажу что классификатор хочет максимизировать вот это выражение то есть вот первое слагаемое что это такое это мы можем воспринимать это как вероятность того что картинкой из это сета некотором смысле хорошие то есть то который нам подходит то есть условном классика средой какое-то значение то вероятность мы берем логарифм тут можно вспомнить функцию там

классика средой какое-то значение то вероятность мы берем логарифм тут можно вспомнить функцию там правдоподобия да когда мы берем логарифма не произведению вероятностей собственно интуиция такая да что первое слагаемое чем она выше вот 1 из 2 тем условно больше вероятности выдает нам по секатор на изображении карта сайта 2 слагаемое наоборот мы опять же хотим максимизировать но здесь у нас уже будет как бы 1 минус вероятность того что картинка хорошая то есть он будет касаться именно нашего

будет как бы 1 минус вероятность того что картинка хорошая то есть он будет касаться именно нашего генератора как вы видите здесь нас матожидание по иксу экраны условно называем нашу это сайт пространство нашего data совета собственно картинки здесь у нас идет на труда не по z z это у отеля пространством то есть функция это как правило какой-то вектор вектор меньшей размерности чем изображением исходным и собственно мы получили ровно то о чем я говорил то есть мы хотим чтоб классификатор

исходным и собственно мы получили ровно то о чем я говорил то есть мы хотим чтоб классификатор выдавал большую вероятность на картинках dota сета и маленькую вернетесь на абсолютно всех остальных в том числе и генерируемых генератором но с другой стороны наш генератор хочет понизить второе слагаемое как уменьшить его значение что будет соответствовать зеленой стрелки которые толкает нашу вероятность хорошей картинки вправо в большую сторону одесской мантры наоборот хочет был личным слагаемое и

хорошей картинки вправо в большую сторону одесской мантры наоборот хочет был личным слагаемое и толкать вероятность вниз вот и вот этот классификатор который говорит а вероятность хорошей картинки его как правило вызывают дискриминатора потому что он как бы старается отличить изображение datasette а вот изображение сгенерированных собственных генератором все очень просто поэтому он дискриминатор простая интуиция генератор пытается обмануть дискриминатор дискриминатор пытается обучиться на том

простая интуиция генератор пытается обмануть дискриминатор дискриминатор пытается обучиться на том что вот это изображение самом деле генератора в итоге у нас получается 2 не россетти которые грубо говоря борются между собой до 1 пытается вероятностью лечить другой уменьшить поэтому эта идея называть собственно ганами дженнер и tiff adverse area networks то есть admir so real значит соревновательный одна с другой соревнуется 1 пытается обмануть другую но мы все-таки хотим до поговорить в

одна с другой соревнуется 1 пытается обмануть другую но мы все-таки хотим до поговорить в терминах лосса поэтому дискриминатор будет пытаться именно минимизировать вот слагаемым которые мы увидим ниже то есть я вместо 1 минус дискриминатора заминировано изображение поставил просто дискриминаторы сгенерировано изображение с этим трюком мы будем пользоваться на практике при обучении давайте во-первых вообще что происходит да вот сейчас мы очень абстрактно без ним я идея гадов теперь давайте более

вообще что происходит да вот сейчас мы очень абстрактно без ним я идея гадов теперь давайте более практически что такое матожидание поводу to set непонятно я вам скажу что на самом деле это просто по ночам собственным берем какуе-то batch центрируем там не знаю размер 16 32 как угодно и собственно суммируем вот этого значения и делим получаем среднее похоже на матожидание правда ли где мы там вероятностью начальное значение и таким образом это условно получали если мы хотим знать матожидание

начальное значение и таким образом это условно получали если мы хотим знать матожидание выборки что мы делаем как правило берем среднее сильно у 3 равно а почему так делаю тоже самое здесь мы берем просто средне вот это вот наши у вас fan of us as функции давайте рассмотрим одну и траксы наш алгоритм что он происходит вначале даны сэмплер им что-то из от этого пространства за это пропускаем через генератор и таким образом получаем изображению первый этап это генерации изображения через наш

генератор и таким образом получаем изображению первый этап это генерации изображения через наш генератор после этого мы говорим что вот то что сгенерировано генератором будет лейбл то есть метка 0 то чтобы мы взяли из это сын тогда мы берем i want out мы сгенерировали 16 картинок взяли еще 16 картинок из бета сета с конкатенировать и получили бача размеры 32 метки значит у первых 16 будет 0 у вторых 16 будет единица 0 означает условно вероятность плохой картину вероятность хорошей картинки если

16 будет единица 0 означает условно вероятность плохой картину вероятность хорошей картинки если она 0 то это сгенерировано картинка если он один то это не заминировано картинка этой картинкой на фотосета этот дискриминатор получит эти изображения и после чего он будет пытаться собственно обучиться просто назначить классификация обычно все очень просто у насти 16 картинок классы 0 лишь то с картин класса 1 в качестве лосса ну вот здесь вот вот здесь можно понять из формулы что очень похоже на

класса 1 в качестве лосса ну вот здесь вот вот здесь можно понять из формулы что очень похоже на войны rick ross энтропии спай торчать то есть просто кросс энтропию и вот под по двум классам в торчит и nm . bcl ос поэтому действие так обозначу собственно до 1 обвинили равале второй этап взяли из нашего data set a доставили метки конкатенировать и пропустить через дискриминатор третье посчитали лоск и обновили we say нашего дискриминатора в начале мы обучаем только дискриминатор генератор вообще

и обновили we say нашего дискриминатора в начале мы обучаем только дискриминатор генератор вообще не трогаем генератор для нас это как вот константное какой-то сеть после этого как мы проделали одну итерацию с дискриминатора теперь что нам нужно нам нужно обучить наш генератор что в эту можно давайте возьмем сгенерируем изображение и теперь скажем до что у 10 на говорили что у сгенерирован выражение у нас лейбл 0 здесь же на четвертом этапе мы говорим что измененному изображение лэйбл райма

у нас лейбл 0 здесь же на четвертом этапе мы говорим что измененному изображение лэйбл райма единица что мы этим хотим сказать мы хотим сказать что нам бы хотелось чтобы вот это изображение имела метку один что это начну пропускаем через дискриминатор получаем какое-то вероятность все дифференцированным теперь мы фиксируем очень дискриминатор весов и говорим что мы считаем лосс от того что это изображение хорошие пропускаем этот весь сигнал через дискриминатор градиенты условно он пропускается

хорошие пропускаем этот весь сигнал через дискриминатор градиенты условно он пропускается дальше и через генератор при этом во время обновления весов мы меня только по градиенту visage ниро дискриминатор остается тем же то есть вот условно одну как бы итерацию обучение генеративные сети не можем считать что вот у нас нет из двух этапов на первом мы обучаем дискриминатор на втором мы обучаем генератор то есть у нас каждый раз начало как бы делается если мы его пусть нас тут есть два оптимизатора

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

дискриминатор на том что у нас на правдивых как бы нитках условно а на втором этапе мы пытаемся его обманывать мы говорю что изменили изображение самом деле имеют высокую вероятность хорошей картинки и таким образом могут стараемся чтобы генераторы именно подстроилась под дискриминатор и сгенерируем здоровье который понравится нашего дискриминатора собственно от природы такой волос ада что мы с начала максимизируем потом минимизирована надо там некоторую нестабильность в чем это проявляется

с начала максимизируем потом минимизирована надо там некоторую нестабильность в чем это проявляется если обычно на задачах как выглядит лосс допустим задачи классификации даль на заметим что у нас нет легко разбиение на 30 daishin тест что угодно у нас есть только один тест train и как мы видим допустим если мы будем смотреть на нос дискриминатора сначала удалось дискриминатор низкий почему это происходит потому что генератор совсем еще не обучен он геймер просто какой-то случайный шум но затем

потому что генератор совсем еще не обучен он геймер просто какой-то случайный шум но затем как мы видим вас дискриминаторы вот правая картинка вот здесь он начинает расти с чем это связано генератор начинает понимать что нравится дискриминатора что нет и поэтому лосс собственно регенератора картинка следовало сначала большой потом он падает одесским на таро наоборот он растет понятное дело чем ниже глаз генераторы тем выше лось дискриминаторы из-за того что условно генератору получается хорошо

глаз генераторы тем выше лось дискриминаторы из-за того что условно генератору получается хорошо обмануть дискриминатор поэтому дискриминатор надо 7 штрафовать в конце концов мы как правило доходит до некого состоянии равновесия и дальше уже обучаем более-менее стабильно но вот вопрос да как нам вообще понять обучился наш данные линия полос а теперь мы не можем этого понять нам нужны какие-то новые метрики качества в отличие от задачи классификации данных задач пресекаться все просто

новые метрики качества в отличие от задачи классификации данных задач пресекаться все просто блокируется на нем что-то читали было на факин что угодно не знаю задача сегментация все примерно та же сам только у нас там poppixie на она была чтобы вы угадали маску для этого пикселей линия абсолютно также это все дискриминационные модель на самом деле наш генеративная ну не знаю как на мерить качеству пока что и чтобы хоть пирогов ну давайте возьмем наш генератор и посмотрим что он просто венеры

пока что и чтобы хоть пирогов ну давайте возьмем наш генератор и посмотрим что он просто венеры посмотрим глазами это пока что на самом деле лучший метод потому что только сам человек понимает на самом деле что мы хотим от генератора какие изображения мы хотим генерировать но есть некоторые еще приближения давайте поговорим вот о чем вместо того чтобы просто да как-то соизмерять свои картинки между собой вот эта картинка похоже на картинку и сбыта с этого словно это все ну не совсем правильно

собой вот эта картинка похоже на картинку и сбыта с этого словно это все ну не совсем правильно да если мы там посмотрим ближайшего соседа посчитаем у нас я это будет неправильный подход но это этой массы мы уже считали у нас получилось плохо давайте возьмем классификатор который будучи вы плохие представления о изображениях например этот классификатор и будет из нужно это я говорю именно классификаторе пусть классика то рабочий на большом нато сайте у него хороший представления были как

пусть классика то рабочий на большом нато сайте у него хороший представления были как правило берут под названием inception дней говорилось ранее в курсе собственный и мы не смотрим на вероятности классику травы дают нам наш классификатор инсершн а мы смотрим именно на печи которая получается при пропускании изображение скажем после там трех четырех слоев мы получили какой-то тендер вот этот тендер это как некоторое представление изображения более высоко уровня нежели чем сами пиксели

этот тендер это как некоторое представление изображения более высоко уровня нежели чем сами пиксели изображения то есть тонкую там патроны условно если у нас было удастся собаками то наверное из леганд будет нам генерировать какую-то собаку то вот эти вот фичи они будут похожими несмотря на то что по пиксельной не могу совершенно различаться и вот в этом пространстве фичей какого-то другого классификатор независимо я сейчас говорю меня дискриминаторы просто как независимый классификатор с

классификатор независимо я сейчас говорю меня дискриминаторы просто как независимый классификатор с хорошими представлениями как правило берут классе катер обученные между эти вот в этом пространстве фичей мы хотим некотором роде измерить расстояние между плечами двумя печами капрал берут просто на самом деле генерирует скажем ну там тысячи изображений с помощью наш логана и там берут 1000 изображений из data set и на котором та-дан обучался получает некоторые средние значения некоторые

изображений из data set и на котором та-дан обучался получает некоторые средние значения некоторые корреляции между ушами для скажем до to say to 10 times x и сильно большая x затем берут изображён который сгенерированный создана ровно также пропускать через классика получает мы уже среднем каждые чаем и сильно уже сильно большой уже собственно корреляция между собой всех речей и после этого вот между получившимся распределениями считают некоторые расстояния такой метод называется fresh and

между получившимся распределениями считают некоторые расстояния такой метод называется fresh and action distance и как правило всех статьях репортят именно его то есть чем он ниже тем лучше почему это так потому что чем меньше расстояние между фича низкоуровневым тем больше мы считаем как бы изображение похоже давайте посмотрим например скажем вот если мы возьмем изображение 1 the site давайте посмотрим на вот первое да мы добавляем просто здесь галковский шум видим чем больше угол скважину

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

маски до темна делают а то что мы увидим и так далее в итоге оказываются что получившийся дистанция то есть у меня получившийся метрика в принципе отображает до реальную картину чем она меньше тем больше вероятность того что наше изображение похожее на то что было в dota сети на котором мы обучали gun какие еще бывают методы помимо этого есть вот немножко проще его тоже часто репортить называется 11 класс формируется в чем его суть очень проста опять же стенд-ап точно такой же мы берем 1000

11 класс формируется в чем его суть очень проста опять же стенд-ап точно такой же мы берем 1000 изображений и datasette и 1000 сгенерированных изображений получаем некоторые представления вот в пространстве фичей что он славную нас волнует ни тогда как они распили новостных средние теперь ее корреляции между фичами а просто вот мы помещаем условно в комнату пространстве точки для каждого изображения и теперь что мы делаем мы берем одно изображение случайно она может быть сгенерированного она

и теперь что мы делаем мы берем одно изображение случайно она может быть сгенерированного она может быть не сгенерированным она может быть разница с это мы убираем его обучаем каина cohen and k равно единице то есть это напомню каинды the corner из не барс что он делает он смотрит на как он предсказывает вернее метку класса вот на ход у нас поступил какая-то . мы смотрим на этом к ближайших наших случае одну ближайшую из тренировочный это сета и говорим что вот точек которая к нам поступила

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

гимн теперь мы говорим что доли предикат вот для этого изображения глаз и суть в том что если у классификатором получается в принципе отличать один классно другого то это плохо это значит у нас есть какая-то разность между сгенерированным изображениями изображениями реальными тем чтобы ли вот это с этим а если он не может отличить не как то есть не у вероятность 50 процентов до случайным 2 класса на тему то это хорошо и это здорово ведь фичи вообще никак не отличается значит что даже наш код

на тему то это хорошо и это здорово ведь фичи вообще никак не отличается значит что даже наш код большой классификатору словами не смог различить эти изображения они почти такие же как дата сети собственно эти две метки они основные как правило в статьях во всех вы можете найти их либо там будет fresh inception distance со значением там порядка четырех-пяти там для бывает разная то сатана условно вот по модулю это время там 10 до условно это вот нормально и собственно вы можете найти и to make

вот по модулю это время там 10 до условно это вот нормально и собственно вы можете найти и to make a рисинки руси чем ниже чем тем лучше нашем случае потому что если мы не можем считать хорошо еще раз про говорю что все вот эти вот два метода кроме того что мы можем посмотреть просто на изображении они основаны не на сами изображениях она фичах этих изображений полученых результате какого-то независимого классификаторы абсолютно ну то есть мы не берём дискриминаторы не смотрим и выше чем мы

классификаторы абсолютно ну то есть мы не берём дискриминаторы не смотрим и выше чем мы смотрим только в чем чего-то независимо чего-то того что не участвуем в тренировке иначе мы получим некоторые такой дата никто из обучения в тест это плохо теперь поговорим про трюки который используется при лучине ганов собственно вот такой классический gun его конечно можно найти где это вот с таким вот лоссом но сейчас как правило спроси другой давать пуха рим какой использовать gun собственного первых

но сейчас как правило спроси другой давать пуха рим какой использовать gun собственного первых помимо того что мы говорим что лайбу для сгенерировав будет ноль и единица мы теперь что скажем мы добавим некоторые шумы войти выебла то есть условным мы берем из равномерного распределения куют выборку от 0 до 0 0 5 прибавляем к нулю нас получается ну куда более менее разнообразная вероятность что картинка хорошая но все равно будет ниже чем то что у нас получится для картинок из data set и до

картинка хорошая но все равно будет ниже чем то что у нас получится для картинок из data set и до которому тоже за шумным двое было и собственно никто не мешает от этих лейбл в тоже считать лосс зачем это созданным ну для того чтобы например например генератор у нас не генерировал одно и то же выражение постоянно то есть представьте что меня тар не зависит от z он всегда генерирует например четверку мы хотим все рукопись на цифры оба а он всегда 4 генерирует и у него хорошо получается генерал

мы хотим все рукопись на цифры оба а он всегда 4 генерирует и у него хорошо получается генерал четверку он обманывать дискриминатор но при этом у нас нет никого разнообразие если мы добавим шум то получится что генератор ну не совсем да получается обманывать дискриминатор несмотря на то что мне тут 1 тоже метку этого контрас немножко разными что заставляет генератор немножко где ты через себя пропускать второй трюк он на самом деле простой вы можете смотреть на эти формулы он очень простой если

второй трюк он на самом деле простой вы можете смотреть на эти формулы он очень простой если мы до этого использовали нём . бытие лаос давайте просто возьмем и заменим на м и съела все это оказывается вот эта штука она будет работать гораздо лучше ну не гораздо но будет работать лучше с точки зрения математики по факту давайте вспомним дин явно предыдущем занятии объяснял суть как дивергенции я тогда сказал что дивергенции было много и но как правило часто чаще всего использую гель можно

я тогда сказал что дивергенции было много и но как правило часто чаще всего использую гель можно показать что лосс который вот 1 до сверху он минимизирует как раз таки что то подобное kl дивергенции то есть там не конвергенции спевку да где поэта случайно величина для изменения выражения какой-то величина для тех кто едут с эти там на самом деле будет чуть сложнее то есть там будет корее из пвп + q пополам плюс какая леску в pro + купола то есть это на самом деле такое аналог симметричных

пвп + q пополам плюс какая леску в pro + купола то есть это на самом деле такое аналог симметричных дивергенции да когда у нас расстояние из правку равно расстоянию из кубка вот но оказывается драганов от очень хорошо работают а вот работать немножко другая дивергент да по построены на квадратичном расстояние между распределением собственные ты была показана статья который продемонстрирует apple os я оказывает что это работает лучше никто не знает почему но факт остается фактом для нас опять же

я оказывает что это работает лучше никто не знает почему но факт остается фактом для нас опять же это обозначать не более чем замену бытие лассо на msl вас если вы не поняли что здесь написано ничего страшного делать как я сказал меня эти бутсы я на и мысли все еще 1 фишку которую нам нужно в слот нато сетах я не беру место на самом деле допустим те же единицы лица людей достаточно сложный в нем как правило дискриминатора побеждает почему он под может стоит ли возвращать самого начала но мы

как правило дискриминатора побеждает почему он под может стоит ли возвращать самого начала но мы видели да что исправления но вообще не похоже на реальными мы сразу можем отличить что звонили на чтобы он из фотографий людей поэтому мы придумали вот что мы дискриминатор у даем не то что вот прямо сейчас ними живут генератор а то что он генералова раньше то есть мы знаем как это буфер скажем размера 1000 что мы делаем ребята генериус изображения это изображение с какой-то вероятностью помещается

1000 что мы делаем ребята генериус изображения это изображение с какой-то вероятностью помещается в буфер а после этого то есть он получается буфер и она вытесняли попытку другое изображение которое было в этом будет и до этого после этого мы sampler у им за этого буфера то есть мы берем утону из 1000 изображений которые об этом буфере хранится сгенерированных кидаем дискриминатора что мы этим добиваемся мы добиваемся того что дискриминатор не сразу реагирует на то как мучается генератор мы

добиваемся мы добиваемся того что дискриминатор не сразу реагирует на то как мучается генератор мы даем генератор некоторое некоторые преимущества да он успеет как бы подучиться на дискриминатор и сгенерирует что-то толковое и как правило вот эту схему уже применять часто то есть во первых мы берем ам и съела вас во вторых не берем буфер в принципе вот так абстрактно да это это все что касается схемы обучения давайте теперь передем к архитектура да у нас тут непонятно покажет какие то

схемы обучения давайте теперь передем к архитектура да у нас тут непонятно покажет какие то квадратики просто там z в генератор не понятно давайте разбираться что говорил происходит мы берем просто шум отдаем гану и gun из этого шума пытается восстановить то что было до тасс эти ни больше ни меньше давайте вот более подробно что такое генератору генератора тренированности и что в ней самом классическом сатори мы просто берем вектор которую случайный шум там не знаю размера 128 просто с головой

сатори мы просто берем вектор которую случайный шум там не знаю размера 128 просто с головой взял взяли его на там пропустили через один fc слой fully коннектор потом за решение поле получили какие-то каналы свёртка свёртка потом мы получили киты до маленькие изображения там взятая например размера 3 на 3 но 128 каналов и теперь что мы делаем обычно если мы вспомним дархи текстуры классических сетей глубоких сетей со свертком что вас приходит нас набор от нас идет изображения у него три канала

глубоких сетей со свертком что вас приходит нас набор от нас идет изображения у него три канала иногда один канал иногда разные случаи бывает как верно там три канала он за этого изображения наоборот делают как бы поменьше но при этом много каналов держим картину наоборот идет мы берем делаем из виновата кого по каналам изображения мы как бы делаем об сэмпл то есть условно вот был изображен 33 взяли превратили его в изображение там шесть на шесть как это сделали просто взяли там ну добавили

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

получаем какой-то большой изображением по ширине и меня по ширине и по высоте и по выполнили очень получаем такой квадратик да и при этом у него 3 кан хон этому уже интерпретируем как изображением вот собственно самая классическая архитектура что на самом деле сейчас вот самое классное да вот видим оставил gant наверняка она может быть это слышу может и нет но средством даже ты сейчас вот стоял gun это считается одно из лучших генеративных моделей для частности для генерации лиц вот как вы

gun это считается одно из лучших генеративных моделей для частности для генерации лиц вот как вы видите вот примере да вот это изображение которое внизу но действительно сгенерировано не настоящая это сложно поверить но это сгенерируем изображений так вот что происходит в этом стоял гони в нем архитектура ну по сложнее в чем это проявляется для начала скажу что мы шум пропускаем через много было связанных слоев дают понять там еще активации внутри но суть такая что мы берем случайный вектор

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

констант надо изображения которое мы видим а сверху здесь вот это константа на изображении пихаем свёртку а затем к результату прибавляем вот этот вектор стиля то есть там делаем риски и вы так далее вот с помощью этого доктора стиля и помимо этого мы добавляем еще некоторых случайный шум каждый раз когда мы были объектом стиле чтобы у нас было некоторые там как бы во-первых опасности да то есть на смеси вносить радировал на маленькие изменения вырастили во-вторых что можем немножко менять это

на смеси вносить радировал на маленькие изменения вырастили во-вторых что можем немножко менять это изображение на контролируя с помощью шума вот в чем идея идея как говорят авторы в том что вот первые слои который будет выше до когда в 1 добавляем стиль они приняли тысячи основные то есть там положение лица не знаю что что из основного может быть может быть там собственно размер это черты лица прямо совсем основное general фичи такие после этого когда уже мы спускаемся глубже до более слои

прямо совсем основное general фичи такие после этого когда уже мы спускаемся глубже до более слои которые стоят дальше относительно пропускание там уже проявляется некоторые фичи видя не знав он и того же да вот как раз таки buy a oнa он очень сильно ошибался на фоне потому что фон бывает разным а здесь у нас нет эту проблему не щитами коломойский между всеми фонами которые у нас были мы говорим что этот фон мог бы быть дата сайте линь с помощью дискриминатор и собственно тут вот стиль да он

что этот фон мог бы быть дата сайте линь с помощью дискриминатор и собственно тут вот стиль да он содержит информацию об этом фоне мы очень доверяем шуту для чтобы он не было робастные что мы можем менять немножко и там в конце концов там совсем какие-то мелкие детали до проявляются нас на последних слоях условно там вот сережки да вот с днем и изображение есть китов он картину даву даже на фоне мою неся и так далее то есть совсем мелкие вещи и поэтому вот именно из за этого мы уже там ну не

мою неся и так далее то есть совсем мелкие вещи и поэтому вот именно из за этого мы уже там ну не можем отличить генерируем или этой брони или нет или это реально человек то есть идеи как раз таки в том что мы не просто по данным культ латентный переменный на вход во первых преобразуем их в более предпочтителен для нас пространство и после этого мы уже используем сектор 1 всех слоях на всех вещах которые генерируются тут вот как бы мы подходим в некоторых черте что у нас получается осно ходе да

которые генерируются тут вот как бы мы подходим в некоторых черте что у нас получается осно ходе да пусть для стоял гаметы константные изображением и все же изображение на выходе изображения что это значит это значит что у нас они что амиш так называемые то есть на входе изображение на выходе изображения что можем еще с этим делать помимо того что генерирует лица из фума можно делать много чего да мы можем здесь изображение сначала как бы такое ровно также как тарификация паучьи кирпичей

чего да мы можем здесь изображение сначала как бы такое ровно также как тарификация паучьи кирпичей длинные но маленькие по ширине и длине ном ном каналов вот эти fitch как ты преобразовывать и заново конструируете резных изображений примеры есть собственно to set такой о сегментации то с камер установленных на автомобиле до то есть цементирует асфальт автомобиль небо траву людей вообще говоря да просто обычная значит сегментации но что он сегментация я напомню мы берем изображения исходная и

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

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

сегментация это вручную все размещалась да можно делать еще более удивительные вещи пусть нас есть вообще не размещен on the site у нас есть рафия зебр фотографии лучше дней они похожи давайте будем превращать зебр в лошадей или наоборот лошадей в землю как мы это можем сделать где то нам понадобится собственно у нас нет прямого соответствие да допустим если у нас вот здесь вот две картинки они как бы соответствуют друг другу здесь у нас этого нет что мы делаем мы берем изображение земли

они как бы соответствуют друг другу здесь у нас этого нет что мы делаем мы берем изображение земли пропускаем его через дан через займет что имидж пропускаем через gun получают другое изображение теперь говорим дискриминатора это изображение лошади навык назначаем подавали землю эту лошадь или лошадь он он говорит ну таимся обмануться что эта лошадь у нас получилась просто так вот если мы возьмем только вот эту часть до левую это работа не будет почему потому что у нас нет никакого соответствия

только вот эту часть до левую это работа не будет почему потому что у нас нет никакого соответствия что там единая трава астане центровой до позиции зебры сохранится и так далее туника клинике гарантий нет да под теперь самое главное трюку мы берем и сгенерированы изображение лошади изображения про подаем на другой gun с такой же архитектуры но которая будет из лошадей превращать зебр собственном и получается и зебр заново получили зебру каким образом сначала пропустив через лошадь то есть мы

и получается и зебр заново получили зебру каким образом сначала пропустив через лошадь то есть мы берем в зебру пропускаем его через там генератор который пространство в пространство б затем берем второй генератор который нам делать из пространства бы из пространства и вот эти вот два изображения дебра которые получились вот уже среди них мы считаем разницу то есть таким образом мы хотим и получаем что изображение земли даже нас как бы изображение исходная она соответствует некотором роде из

что изображение земли даже нас как бы изображение исходная она соответствует некотором роде из изображения которые сгенерировано из этого заминируем изображение мы можем обратного ставить добавление зебра то есть мы считаем так называемый еще сайкл о смело помимо вот этих вот всех лоссов с ними котором дискриминаторы у нас есть еще один за вами сайтов сайкл почему в душе циклу мы можем вот так вот как бы крутить фотографию вечно слова тоже сам можно приделать фотографии лошади дана скалли на 1

как бы крутить фотографию вечно слова тоже сам можно приделать фотографии лошади дана скалли на 1 таро ценную превращаем зимбру лошадей потом из лошадей землю а на второй итерации мы из лошадей получаем зебру и из получены зебра мы обратно лошадь и считаем своей колбас отдельный вопрос как считали cyklos да на собственного оригинальная статья которая посвящена сайт лугано там как раз таки считали м с я как выдумывать и хорошим тот них получилось да у них получился неплохой результат особенно с

м с я как выдумывать и хорошим тот них получилось да у них получился неплохой результат особенно с чем того что это первая статья который предложила подходит представьте нас есть две фотографии да и заразна вообще домена они никак не размечены между собой все что нам нужно это просто как бы набрать на фотографии рыкуш идеи фотографирую дебру нам не нужно прибегать к разметке такое добиться в нем и плохой они использовали маски и и собственно сам нет реальным как бы улучшением этой этого всего

и плохой они использовали маски и и собственно сам нет реальным как бы улучшением этой этого всего это будет давление еще классификатора который будет пропускать через себя вот вот эти вот два изображения которой там через цикл получилось которое было исходно не считать разница свечение на нем такой же подход как и собственные идеи дискриминаторы которым он привел тогда у нас как что будет еще лучше собственно на этом я думаю все это лекция это последняя лекция курс а посвященный 8 и также у

лучше собственно на этом я думаю все это лекция это последняя лекция курс а посвященный 8 и также у нас есть и вторая часть где мы знакомы слушателей с достижением в анализе текстов и аудио я рекомендую вам всем пройти я тоже и собственно самим тоже изучать если вам интересна тема то по все материалы в принципе можно погрузиться более глубоко то что я рассказываю допустим там сна и калган от 18 час мы можем чего-то нового придумали в общем машин обучение такая область где надо постоянно

от 18 час мы можем чего-то нового придумали в общем машин обучение такая область где надо постоянно читатель набираться чего-то нового на этом все спасибо за внимание удача

всем привет меня зовут артем не магазинов и сегодня на семинаре мы будем с вами говорить о генеративно состязательных сетях также известно как дженни рейсов adwords орел networks или ган ган и это ещё один способ решения задачи генерации то есть задачи в которой мы хотим из случайного шума получить какие-то данные похожие на обучающую выборку на сегодняшнем семинаре мы будем рассматривать datasette который состоит из кошачьих mort мы взяли его с пеплом давайте загрузим этот сайт и для начала

который состоит из кошачьих mort мы взяли его с пеплом давайте загрузим этот сайт и для начала подготовим наше изображение к тому чтобы мы их использовали для обучения для этого применим а композицию преобразований kapous размер поменяем на 64 на 64 обрежем изображение по центру и нормализуем после этого загрузим наши изображением дотла да и давайте посмотрим как будет выглядеть наш patch из 128 изображений он будет выглядеть так то есть вот у нас есть фотографии котиков и мы хотим обучить наш

изображений он будет выглядеть так то есть вот у нас есть фотографии котиков и мы хотим обучить наш gun так чтобы он генерировал изображение похожие на изображении замечающий выборки еще немного деталей перенесем наши данные на наш abbacino гбо и перейдем непосредственно к построению сама ваганов я напомню что gun состоит из двух сетей первая сеть это генератор задача который сгенерировать из случайного шума изображения похожие на обучающую выборку и вторая сеть это дискриминатор дискриминатор

шума изображения похожие на обучающую выборку и вторая сеть это дискриминатор дискриминатор это по сути бинарный классификатор классе который на два класса который по входящему ему изображение учиться распознавать это изображение настоящая или это фейковое изображение который сгенерировал наш генератор мы с вами будем строить gun на свертках о такой рецептуре есть название это девка evolution all данный леди сиган чем называется начнем дискриминатора в принципе по структуре это будет похоже на

данный леди сиган чем называется начнем дискриминатора в принципе по структуре это будет похоже на те дети которые мы строили для авт энкодеров когда у нас был им кадре декодер дискриминатор по архитектуре будет чем-то похож на энкодер поскольку он принимает на вход изображение то есть тендер размеры 3 на 64 на 64 и он должен выдать одно единственное число то есть тандер один на один на один это вероятность принадлежности к классу 1 то есть к настоящим изображением будем пользоваться свертками

вероятность принадлежности к классу 1 то есть к настоящим изображением будем пользоваться свертками как я уже сказал ранее и в конце у нас выходной размерность получилось один на один на один мы применяем флотом и применяем сигма из для того чтобы получить вероятность принадлежности класса теперь давайте построим наш генератор в генераторе наоборот у нас входов вектор шумом размера лозин сайт который мы выбрали равно 128 и мы хотим по этому вектору построить изображение и для этого мы будем

который мы выбрали равно 128 и мы хотим по этому вектору построить изображение и для этого мы будем применять обратные свертки и на выходе применять гиперболический тангенс чтобы у нас все было нормально sceptor изображений чтобы не было проблем когда могут приниматься произвольные значения и тогда rgb будет отображать некорректно то есть гиперболическими тангенсом мы приводим все значения к диапазону от -1 до 1 и дальше с помощью преобразования мы можем получить от 0 до 1 от 0 до 1 уже rgb но

от -1 до 1 и дальше с помощью преобразования мы можем получить от 0 до 1 от 0 до 1 уже rgb но который оплот левин он строит изображение каретки давайте теперь посмотрим как выглядит шум который мы хотим превратить с помощью генераторов в изображении для этого воспользуемся торчит . рандом то есть у нас будет гауссовский шум взяты из стандартного нормального распределения бачата есть в этом says 11 размерности давайте к этому шум применим генератор то есть и сейчас мы еще ничего не обучали

11 размерности давайте к этому шум применим генератор то есть и сейчас мы еще ничего не обучали просто посмотрим как генератор будет обходиться с этим шумом что он выдаст и как мы видим до обучения у нас совершенно непонятный какой-то зажим лены и картинки непонятные и дальнейшем мы увидим как после нескольких эпох изображения станут похожими на изображение из теста вы из обучающей выборке давайте перейдем теперь непосредственно к обучение нашему ганам и тут алгоритм следующий мы будем учить не

перейдем теперь непосредственно к обучение нашему ганам и тут алгоритм следующий мы будем учить не радар и дискриминатор по отдельности попеременно первый шаг это обучение дискриминатора что мы делаем мы берем реальные изображения изображение из наших train и присваиваем им метку 1 класс и далее учим дискриминатор предсказывать эту метку класса в качестве функции потерь мы берем бинарную кросс энтропию как мы вот здесь увидим и для генератора и для дискриминаторы в качестве лосс у нас будет

энтропию как мы вот здесь увидим и для генератора и для дискриминаторы в качестве лосс у нас будет съел ос на допрос на тропе и что мы делаем дальше после того как мы передали в наш дискриминатор настоящие изображения теперь давайте сгенерируем фейковые изображение который генерируется нашим генератором но сначала берем латентный виктора то есть виктора из которых генератор получает наше изображение и присваиваем получившимся изображением метку классом 0 также подаем дискриминатор также считаем

и присваиваем получившимся изображением метку классом 0 также подаем дискриминатор также считаем бинарную красной терапию ну и давайте ещё для наглядности будем считать score возьмем средние среди всех предсказаний реального и векового для реальных для фейковых классов и мы ожидаем что для реальных классов мы получим что-то большое что-то близко к единице а для стыковых что-то маленькой близко к нулю после этого складываем лосс получившиеся на шаге когда мы подавали реальное изображение с носом

после этого складываем лосс получившиеся на шаге когда мы подавали реальное изображение с носом который получился на шаге когда мы подавали фейковые изображения и выполняем в корпус на этом обучение дискриминатора у нас завершается то есть генератор в это время свои леса никак не обновляет он будет обновлять свои леса на следующем шаге теперь мы перейдем к обучению генератором нивелируем изображение и передаем его на вход дискриминатора в качестве меток мы снова берем извиниться и считаем лосс

и передаем его на вход дискриминатора в качестве меток мы снова берем извиниться и считаем лосс уже генераторов вас генератора мы уже говорили что это также бинарная кросно терапия и мы сравниваем предсказании дискриминатора с единицы почему мы взяли единицы потому что мы хотим как бы обмануть наш дискриминатор то есть по хорошему он должен выдавать мулен поскольку изображение фейковые но мы хотим чтобы этот лосс генератора мы сравниваем с единицей это было показано в лекции формуле там было

чтобы этот лосс генератора мы сравниваем с единицей это было показано в лекции формуле там было слагаемое один минус выход дискриминатора это вот как раз она есть мы берем вместо людей единицы ну и также обновляем wisan делаем шаг optimizer и optimizer и у нас разные для дискриминатор или генератора потому что у нас разные параметры ну и сохраняем нашлось чтобы можно было посмотреть ну и дальше сохраним последние сгенерированное изображение чтобы просто можно было наглядно посмотреть на то

сохраним последние сгенерированное изображение чтобы просто можно было наглядно посмотреть на то какие же изображения и генерирует наш генератор обучим возьмем 40 эпох и посмотрим какие же нас получились результаты ну как вы видите у нас довольно много артефактов то есть глаза иногда это вот свет и которые вы нужны и различные радужные пятна есть на изображениях но в целом общие черты кошачьих морт угадываются достаточно хорошо и давайте теперь посмотрим на то как ведет себя лосс генераторы и

угадываются достаточно хорошо и давайте теперь посмотрим на то как ведет себя лосс генераторы и дискриминатора ну и заодно посмотрим на score который мы получили на шаге дискриминатора ну как вы видите у нас лосс сначала elos генераторы сначала довольно сильно снижается и потом начинает постепенно повышаться то есть на лекции на одном из слайдов была примерно такая же картинка с лосем дискриминатора происходит все с точностью наоборот то есть он сначала повышается и потом начинает плавно

происходит все с точностью наоборот то есть он сначала повышается и потом начинает плавно понижаться и теперь давайте посмотрим на score ну как мы видим действительно для реальных изображений мы получили что-то близкой к единице и причем оно растет с ростом номер эпохи а для фейковых изображений мы получили что-то близкое к нулю то есть вероятность принадлежности классу один в случае реальных изображений высокое в случае фейковых изображений низкая тут все в порядке ну на этом наш семинар

изображений высокое в случае фейковых изображений низкая тут все в порядке ну на этом наш семинар подходит концом сегодня мы рассмотрели диктовали ушел дан и попробовали с его помощью сгенерировать изображение кошки на этом все спасибо за просмотр пока

[музыка] Всем привет Добро пожаловать на семинар на котором мы научимся основам работы с одним из самых популярных на сегодняшний день фреймворков для работы с нейросетями пайтор начнём Давайте с того что скажем Почему вообще мы учим вас писать код именно на пайтор pch - Это не единственный фреймворк с помощью которого можно создавать обучать нейронные сети но pch один из самых популярных на сегодняшней день на момент записи этого видео фреймворков для глубокого обучения популярный он в том

день на момент записи этого видео фреймворков для глубокого обучения популярный он в том плане что на момент записи этого видео большая часть кода связанная с нейросетями пишется именно на пайтор А есть несколько факторов Почему ptch стал таким популярным Почему все выбирают Именно его и один из этих факторов связан с тем что с pytorch Очень удобно работать как мы увидим далее В этом видео работа с pytorch очень похожа на работу с также у P torch очень удобный информативные документации

работа с pytorch очень похожа на работу с также у P torch очень удобный информативные документации туториалы и если вы дальше будете работать с нери сетями то вы будете часто обращаться к этим документация и туториала и они очень хорошо написаны Это огромный плюс Давайте чтобы лучше понять почему всё-таки page проведём совсем небольшой экскурс по фреймворка для глубокого обучения какие они вообще бывают на самой Зоре ленга когда люди только начинали готовить обучать нейросети появились такие

бывают на самой Зоре ленга когда люди только начинали готовить обучать нейросети появились такие фреймворки как кафе Тиана и лазанья они уже сейчас практически не используются считаются такими устаревшими А вы можете конечно найти всё ещё код на этих фреймворка Но это будет скорее всего какой-то очень старый код который уже очень давно не поддерживается не так давно был очень популярный фреймворк tenser Flow Скорее всего вы о нём даже слышали Это фреймворк который разрабатывала компания Google

tenser Flow Скорее всего вы о нём даже слышали Это фреймворк который разрабатывала компания Google и он был популярен примерно до семнадцатого восемнадцатого года то есть вот до этих лет большинство кода нейронных сетей было написано именно на tflow это было перед появлением pytorch а проблемой тарло было то что он был довольно сложен то есть научиться работе с ним было довольно Сложно даже если вы умеете работать уже с питоном нам паем пандесон и всеми подобными вещами а сложность состояла

вы умеете работать уже с питоном нам паем пандесон и всеми подобными вещами а сложность состояла например в том что для того чтобы написать и запустить обучение сети на НФ вам нужно было написать код сети и скомпилировать его То есть вы всё равно писали на питоне который Интер не компилируемый но внутри него вам нужно было написать код и он потом компилировать Нельзя было просто там по наставить принтов чтобы во время работы кода вам там выводились какие-нибудь деж выводы там нужно было намного

чтобы во время работы кода вам там выводились какие-нибудь деж выводы там нужно было намного сложнее это ВС делать Вот поэтому работе с tflow было не так уж чтобы просто появилась на самом деле хорошая обёртка tflow которая называлась кес она предоставляла пользователю удобные функции методы для того чтобы готовить не очень сложные нейросети запускать их и обучать и при этом не нужно было копаться там во внутренности тарф знать про вот эту компиляцию и так далее То есть с росом было очень

там во внутренности тарф знать про вот эту компиляцию и так далее То есть с росом было очень просто работать а потом кес даже было интегрирован в рфу и сейчас он является прямо частью рофло а Однако мы не учим вас кесу потому что Керес менее гибок чем пай точ он не позволяет вам делать довольно сложные операции с нейросетями Когда вы не просто хотите какую-нибудь стандартную сеть взять реализовать и запустить там обучить на своём датасете А когда вы хотите там что-то хитрое в ней применить там

и запустить там обучить на своём датасете А когда вы хотите там что-то хитрое в ней применить там поменять не знаю а идею того как работает сам слой как-то похитрее с функцию какую-нибудь придумать что-нибудь вот такое сделать Поэтому в этом плане если вы хотите действительно хорошо научиться работать с нейросетями готовить их вот на высоком уровне скажем так рч намного лучше чем Керес а потом вот в семнадцатом восемнадцатом году вышел уже парч а он произвёл просто фурор потому что это был

вот в семнадцатом восемнадцатом году вышел уже парч а он произвёл просто фурор потому что это был фреймворк для обучения нейросетей который был очень удобен который напоминал работу с нам паем и поэтому ему было очень легко обучиться и на нём было очень легко писать код собственно нери сетей все его подхватили начали использовать а популярность нзр Flow стала спадать и в 2019 году команда которая разрабатывала тарф попыталась выпустить tflow 2.0 то есть обновлённую версию этого фреймворка и в

разрабатывала тарф попыталась выпустить tflow 2.0 то есть обновлённую версию этого фреймворка и в нём работа с нейросетями была уже очень сильно упрощена она стала похожа на то как работа с нейросетями производится в пайтор Но к тому моменту на самом деле уже пайтор захватил весь рынок все пересели на него весь код писал на м поэтому 2.0 популярен так и не стал дошло всё на самом деле до того что Google в последнее время стал разрабатывать новый фреймворк который называется и он призван

что Google в последнее время стал разрабатывать новый фреймворк который называется и он призван заменить нзр то есть в какой-то момент не так давно Google уже сказали Окей Мы признаём что НФ уже всё мы сами тоже на нём писать больше не будем Мы переезжаем на и исходя из вот этого всего кажется что блие весь код не сетей который будет написан он будет написан либо на либо на джакс то есть вот эти два фреймворка которые в ближайшее время будут популярны Ну пайтор уже давно зарекомендовал себя

два фреймворка которые в ближайшее время будут популярны Ну пайтор уже давно зарекомендовал себя сейчас уже огромная кодовая база написанная на pch поэтому на нашем курсе Мы будем изучать Именно его Итак давайте начнём вс-таки практическое знакомство с почом во-первых базовой единицей фреймворка является структура которая называется torch tenser tenser - это аналог на Pay можно считать так и методы работы с torch tenser как мы увидим далее практически в точности повторяют методы А всё что

методы работы с torch tenser как мы увидим далее практически в точности повторяют методы А всё что связано с нейросетями должно иметь формат тензора То есть когда мы будем готовить свою Несе писать её в этом семинаре далее вы увидите что все не сети все обучаемые матрицы векторы будут иметь формат нзр дальше Всё что подаётся на вход ner сети тоже должно иметь формат тензора и конечно же выход не сети тоже будет иметь формат нзра то есть вот tenser - это базовая структура фреймворка пай торча по

тоже будет иметь формат нзра то есть вот tenser - это базовая структура фреймворка пай торча по сути pytorch работает вот с тензора А давайте импортируем библиотеку P torch и рассмотрим различные способы создания и работы с тензора во-первых библиотека импортируется вот так не ипор P torch А ипор torch надо сказать ещё здесь пока у меня импортируется библиотека tch что вообще фреймворк torch для работы с нейросетями есть не только для пайтона до того как появился pytorch были варианты этого

работы с нейросетями есть не только для пайтона до того как появился pytorch были варианты этого фреймворка для других языков а потом его уже портировали на питон и назвали не просто tch а пай torch имея в виду что вот это именно версия торча для питона Но вообще в общем этот фреймворк называется просто torch поэтому импортируется он тоже в виде ипор torch а не импорт P torch Итак давайте создадим Наш первый тензор а заведём простой лист на питоне вот X list и дальше мы можем вызвать просто

Наш первый тензор а заведём простой лист на питоне вот X list и дальше мы можем вызвать просто torch tenser от x list и получить этот же массив в формате уже порчон Зора Давайте запустим эту ячейку получим вот так Так давайте я удалю Наверное аутпут чтобы нам было интереснее идти по этому семинару и у нас не было спойлеров потому что выдают разные ячейки Итак это вариант создания тензора и с обычного питонов ского массива просто оборачивается питонов ский массив тотен получаете нзр давайте я

питонов ского массива просто оборачивается питонов ский массив тотен получаете нзр давайте я ещё раз это запущу вот мы видим что у нас получился тензор у которого вот такие значения дальше НЗ можно создавать при помо функци как и в например мы можем создать тензор из нулей заданного размер нули и размер 23 то есть мы получим матрицу размера 2 на 3 из нуле давайте это проверим Ну действительно получился тензор вот такого вот вида тоже самое с единицами тензор из единиц заданного размера 2 тоже

тензор вот такого вот вида тоже самое с единицами тензор из единиц заданного размера 2 тоже Давайте проверим вот что у нас получилось например можем создать единичную матрицу заданного размера она создаётся с помощью torch А если мы подадим сюда ше то это будет Матрица 6 на 6 с единицами на диагонали и нулями в остальных местах то есть единичная Матрица размера 6 Давайте опять же это проверим вот что у нас получилось то есть Всё правильно то есть как вы видите на самом деле работаем Мы сейчас

что у нас получилось то есть Всё правильно то есть как вы видите на самом деле работаем Мы сейчас примерно так же как и в нампа тоже были все подобные методы Давайте ещ раз Скажем что вообще практически все методы которые есть у нампа массивов и которые вы использовали в нампа имеют аналоги в парче то есть в будущем Если вы захотите сделать какую-то операцию с почом тензо и вы знаете что подобная операция делалась в нампа там с помощью одной строчки то есть был такой метод в нампа который эту

операция делалась в нампа там с помощью одной строчки то есть был такой метод в нампа который эту операцию делал то скорее всего в парче тоже есть метод который делает эту операцию и нужно просто посмотреть документацию или погуглить и вы этот метод найдёте но давайте мы вс-таки е несколько методов рассмотрим в этом семинаре чтобы более лучше познакомиться скажем так с тензора и чувствовать с ними нам более уверенно дальше когда мы будем писать код для создания обучения не City А давайте

с ними нам более уверенно дальше когда мы будем писать код для создания обучения не City А давайте перейдём к операциям над тензора с тензора как и с нампа скими массивами можно проводить некоторые операции Давайте например создадим два тензора размера 2 на2 вот X tenser - это вот такой torch tenser Y tenser - это вот такой torch tenser запустим эту ячейку тензоры можно складывать поэлементно вот поэлементное сложение x тензор П Y тензор Разумеется поэлементное сложение будет работать если у

поэлементное сложение x тензор П Y тензор Разумеется поэлементное сложение будет работать если у вас размеры тензоров одинаковые Ну Собственно как при любой работе с матрицами А дальше можно сделать дот продукт двух тензоров то есть матричном два тензора У нас вот эти два тензора являются просто матрицами размера 2 на2 мы их можем матри умножить матричное умножение записывается вот таким образом X нзр собачка Y тезер и результат получится вот таким можете проверить что если мо матричном вот эти

нзр собачка Y тезер и результат получится вот таким можете проверить что если мо матричном вот эти две матрицы вот эту и вот эту результат действительно получится таким какой у нас тут получился А тензоры можно конкатенировать вот например как это делается в торчер тензоры X тензор Y тезер по нулевой размерности и делается это так аналог функции которая в на которова две матрицы это tch Cut здесь вот мы видим что название немного отличается это нормально не все методы нам ирча вот прям по

здесь вот мы видим что название немного отличается это нормально не все методы нам ирча вот прям по названию точ в точ совпадают иногда бывают вот такие различия Поэтому если что-то не работает там в парче что вам казалось должно работать то нужно просто погуглить Возможно вче это записывается чуть-чуть по-другому так вот И здесь тоже мы Мы хотим конкатенировать указываем не с помощью как в нампа а с помощью от слова diens то есть мы как бы не ось передаём а размерность по какой размерности мы

а с помощью от слова diens то есть мы как бы не ось передаём а размерность по какой размерности мы будем конкатенировать Вот такие небольшие различия могут быть между нампа и парм Ну давайте мы это запустим и выведем результат и увидим что действительно мы сейчас сканировали два наших тензора вот этих которые здесь были с конкатенировать Мы научились создавать из обычных массивов тензоры то тензоры можно обратно переводить в формат num или Формат Просто питонов массивов Делается это очень

тензоры можно обратно переводить в формат num или Формат Просто питонов массивов Делается это очень просто у тензоров есть метод Тока вот мы допустим создаём тензор опять же как выше и потом делаем extensor num этот метод нам возвращает копию тензора который был внутри extensor только уже в формате Намского массива и Давайте выведем X и посмотрим что у нас получилось вывели действительно видим что вот это это уже не НР это уже просто R точнее на Потому что когда вы выводите результат на

что вот это это уже не НР это уже просто R точнее на Потому что когда вы выводите результат на паевский массив то он показывается вам вот в таком вот виде или или можно перевести нзр не с помощью метода с помою метода вот тот же самый перем его в лист вот получим просто питонов ский массив То есть это уже не на это просто новский массив Таким образом мы можем переводить тензоры как формат на па так и формат массива теперь пусть у нас есть одномерный тензор то есть тензор который представлен

так и формат массива теперь пусть у нас есть одномерный тензор то есть тензор который представлен представляет собой вектор А не матрицу Вот например вообще Вектор из одного элемента мав есть такой одномерный тензор который представляет собой по сути одно число а не матрицу а одно число то значение этого тензора мы можем получить с помощью точка item xtensor то item давайте запустим и посмотрим вот xtensor точ item - это просто три и это уже не тензор потому что просто число тензоров трёхмерная

xtensor точ item - это просто три и это уже не тензор потому что просто число тензоров трёхмерная четырёхмерная любая Но это обязательно Матрица А когда мы берём у тензора item то это получается одно число Обратите внимание что если у вас многомерный тензор как вот здесь вот написано то есть больше чем одномерный Tor то xtensor а item работать не будет потому что тут написано что нзр с четырьмя элементами не может быть конвертирова в скалярное значение то есть item работает только для скаляром

не может быть конвертирова в скалярное значение то есть item работает только для скаляром которые представляют собой по сути одно число скалярное значение Так давайте это уберём и это тоже удалим Чтобы никого не смущать Вот так А ещё раз здесь скажу что с тензора можно проводить очень много разных операций можно брать среднее значение тензора максимальное минимальное можно их конкатенировать складывать умножать поэлементно можно умножать матричном можно умножать а не знаю можно изменять их

складывать умножать поэлементно можно умножать матричном можно умножать а не знаю можно изменять их размер там не знаю инзера 3 на2 сделать 2х 3 а много чего можно делать такого что можно делать и с массивами в numai мы здесь по подробно прямо всё-всё разбирать не будем Потому что это было бы очень долго и на самом деле не очень понятно зачем потому что опять же А если вам нужно какой-то какая-то функция которая была в нампа то скорее всего она есть и в пайтор над тензора тоже и достаточно

функция которая была в нампа то скорее всего она есть и в пайтор над тензора тоже и достаточно просто посмотреть документацию пай торча которая очень хорошая чтобы её найти или просто погуглить и Google тоже вас приведёт Скорее всего в документацию порча и вы найдёте нужные вам вам функцию более того мы сейчас с вами научимся базовым базовой работе с нейросетями в ч и По мере того как мы будем учиться этой базовой работе и по мере того как Вы будете создавать свои нейросети в течение этого

учиться этой базовой работе и по мере того как Вы будете создавать свои нейросети в течение этого курса далее вы будете узнавать там новые виды операций сй с чоми тензора которые можно производить И так мне кажется намного лучше их изучать чем просто как бы какие-то операции в вакууме Ну и домашнем заданием Вы тоже сможете потренироваться писать работать с массивами на ч Итак в этой части мы научимся нач создавать и обучать свою нейронную сеть Давайте научимся создавать обычную полносвязный

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

там несколько полносвязный слоёв вставляя между ними блоки функции активации мы можем собрать свою полносвязный нейросеть вот здесь картинка напоминания того как устроена полносвязная нейросеть а слой представляющий из себя линейное преобразование то есть полносвязный слой функции активации задаётся при помощи класса torch NN linear linear потому что Это линейный слой Давайте создадим слой с например пятью входными и тремя выходными нейронами во-первых нам нужно импортировать модуль NN и

с например пятью входными и тремя выходными нейронами во-первых нам нужно импортировать модуль NN и torch.nn snn это обычный вид импорта которым все пользуются То есть это как импорт Напа из NP вот также импортируется обычный модуль NN модуль NN - это модуль в котором определены все классы слоёв сетей функций активации то есть то есть там лежит класс line класс полносвязный слоя там лежат классы разных функций активации мы сейчас Увидим как мы можем использовать разные функции активации там же

разных функций активации мы сейчас Увидим как мы можем использовать разные функции активации там же будут лежать классы представляющие собой другие виды слоёв с которыми мы познакомимся дальше по курсу например свёрточные слои тоже лежат в точ NN в точ NN да давайте зададим две переменные N им N - это будет количество входных нейронов слоя - количество выходных нейронов и слой и тогда задать линейный слой мы можем вот таким способом NN то linear передаём сюда два аргумента количество входных

слой мы можем вот таким способом NN то linear передаём сюда два аргумента количество входных количество выходных нейронов и есть ещё один аргумент который называется бас а он Принимает два значения True или fse То есть это булев ский аргумент А этот аргумент определяет Будет ли в слое применяться Вектор байса то есть Будет ли он обучаемым параметром если бас fse то Вектор баса равен нулю То есть это просто все ну и как буд как будто бы его нет то есть как будто бы этот слой задаёт просто

есть это просто все ну и как буд как будто бы его нет то есть как будто бы этот слой задаёт просто преобразование Омега у x а не оме x x + b по умолчанию этот параметр равен True поэтому по сути вот этого можно было не писать а просто задать линейный слой вот в таком виде и обычно мы так и будем делать но здесь чтобы показать что этот параметр есть И иногда он на самом деле используется иногда ставится bys равно false то мы поставили здесь BS рано True Давайте запустим эту ячейку и дальше мы

ставится bys равно false то мы поставили здесь BS рано True Давайте запустим эту ячейку и дальше мы можем вывести то что у нас получилось вот этот переменную linear layer и видим что linear layer - это экземпляр класса linear и мы передали сюда параметры in features 5 Out features 3 by True вот in features out features - это как раз первые два параметра которые мы передавали первые два аргумента и называются Они как раз in features количество входных фичей Out features количество выходных фичей

называются Они как раз in features количество входных фичей Out features количество выходных фичей ещё можно посмотреть что у linear layer есть э две матрицы line layer так не Омега да у linear layer у экземпляра класса linear layer есть параметр Weight это как раз Матрица этого слоя видим что это нзр я вам говорила что всё с чем вы работаете порче имеет формат нзра и она как раз размера 3 на5 потому что у нас выходных нейронов три входных нейронов пять в этом слое и здесь ещё можно заметить

потому что у нас выходных нейронов три входных нейронов пять в этом слое и здесь ещё можно заметить что это тензор у которого есть ещё один параметр который называется require grad А этот параметр будет True у всех тензоров который будет участвовать вычислении градиента когда мы задаём линейный слой нери сети парич сразу по умолчанию считает что мы эту нери сеть потом будем обучать А значит для этого тензора для точнее элементов этого тензора нужно будет вычислять а производную поэтому здесь

этого тензора для точнее элементов этого тензора нужно будет вычислять а производную поэтому здесь есть requ GR равно True а то как вычисляются производные для элементов для весов не которые мы пишем на парче про это мы поговорим чуть далее вот в этом же семинаре вообще у linear Weight ещё есть B параметр bas который мы задали True и он является тензо вектором длины 3 ну потому что количество выходных нейронов три и у него тоже Гра втру поэтому потому что это тоже обучаемый параметр давайте это

нейронов три и у него тоже Гра втру поэтому потому что это тоже обучаемый параметр давайте это пока уберём Итак это был полносвязный слой до функции активации то есть по сути linear layer - это преобразование которое выражает собой omx + B то есть полносвязный слой до функции активации Теперь мы можем определить функцию активации а опять же Многие известные функции активации реализованы в модуле NN и продублированы ещё в модуле мы научимся работать из той и с той давайте выберем какую-нибудь

NN и продублированы ещё в модуле мы научимся работать из той и с той давайте выберем какую-нибудь функцию активации например гиперболический танн та наш А есть два варианта Как получить функцию активации можно сделать вот так как здесь закомментировать модули nonfunctional SF Вот так и torch nonfunctional SF это тоже канонический вид записи которым все пользуются и тогда наша activation будет Fan Fan это как раз тангенциальная функция активации из этого модуля А можно сделать по-другому можно

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

применяется поэлементно к любому тензо который подаётся на вход и вы можете сами тоже проверить что тангенциальная функция от Вот таких аргументов на выходе вот такие знания из нашего линейного слоя и функции активации как бы полноценный полносвязный слой с функцией активации то есть по сути мы должны применить к входному аргументу к тому что подаётся на вход нашем условию сначала наше линейное преобразование а потом функцию активации Давайте сгенерируйте генерация рандомных векторов tch Rand н

а потом функцию активации Давайте сгенерируйте генерация рандомных векторов tch Rand н от слова Random с аргументом ть сгенерирует нам э Вектор длины пять из случайных значений это будет Random Input А теперь мы этот Random Input можем подать на вход linear layer у нас linear layer - это как раз слой у которого пять входных нейронов поэтому мы тут генерировать Рандомный тензор длинной пять подаём на вход linear layer получаем выход X потом этот выход X подаётся на вход activation это наша

на вход linear layer получаем выход X потом этот выход X подаётся на вход activation это наша тангенциальная функция активации и получается и этот апу мы потом можем визуализировать то есть вывести на экран запускаем Вот что получается получается тензор длины 3 потому что наш слой на выходе выдаёт три значения опять же можете сами проверить там вывести какой получается м inp сами прогнать его на бумажке там через и функцию активаци таен и получить вот кие значения вот так просто работать с

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

выхода тоже должны будут считаться производные чтобы потом мы смогли на основе этих производных посчитать производные для а весов нашего linear layer А поэтому здесь тоже будет Град FN э каким-то вот так сейчас Мы научились импортировать э отдельные слои из пайтор и использовать их то есть там э последовательно через там несколько слоёв прогонять какие-то входы Давайте теперь на основе вот этого знания умения соберём полносвязный нере сеть для решения какой-нибудь задачи давайте мы будем решать

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

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

красному или зелёному я не буду подробно устанавливаться на том как работает этот код этот код просто использует нам P от plot lip и вы можете сами м посмотреть на него и понять как он генерирует вот эти точки А обращу внимание что я сгенерировал 1.200 точек сейчас мы разделим эти точки на обучающий тестовый датасет в обучающий отнесём 1.000 в тестовый отнесём 200 для этого мы просто импортируем знакомый нам Trend T spit а подаём сюда xy xy - это А как раз наш обучающий датасет то есть в Иксе X

нам Trend T spit а подаём сюда xy xy - это А как раз наш обучающий датасет то есть в Иксе X - это 1200 пар координат точек которые здесь есть а Y - это значение 01 для каждой точки из X там ноль если точка Красная один если точка Зелёная по-моему Так возможно наоборот но это не суть важно и Давайте поставим сюда тест Сай 200 То есть 200 элементов сгенерированного нами датасета Мы отнесём в тестовую выборку остальные 1.000 останутся в тренировочной выборке вот так получим четыре переменный x x y

выборку остальные 1.000 останутся в тренировочной выборке вот так получим четыре переменный x x y y Итак давайте зададим нейронную сеть с двумя слоями в первом слое нашей нейронной сети Разумеется будет два входных нейрона потому что у нас Каждый элемент данных имеет два признака Каждый элемент данных - это точка И она представляется в виде её координат на плоскости её координат две Давайте чтобы было понятнее Яно скажу как выглядит Xtra можно просто даже попытаться его вывести вот X trin - это

было понятнее Яно скажу как выглядит Xtra можно просто даже попытаться его вывести вот X trin - это массив пар и каждая точка представляется парой координат вот э координата по X это координата по Y а Y Train в свою очередь представляет собой вот такое просто для каждой точки ответ какому классу она принадлежит Итак возвращаемся к нашей нейронной сети которую мы сейчас будем делать А разумеется в первом слое нашей нети входных нейронов будет два а в скрытом слое количество нейронов мы можем

в первом слое нашей нети входных нейронов будет два а в скрытом слое количество нейронов мы можем выбирать самостоятельно Пусть в скрытом слое будет п нейронов в качестве функции активации давайте выберем сигмой тангенциально мы уже видели Как импортировать Давайте Теперь попробуем сигмоида чтобы задать нейросеть нужно задать класс то есть задаётся в виде класса который мы можем назвать как угодно Давайте назовём его но этот ла следует от абстрактного класса NN module NN module - это такой

Давайте назовём его но этот ла следует от абстрактного класса NN module NN module - это такой родительский класс для всех нейросетей которые вы будете писать то есть вот так вот всегда будет выглядеть задание класса вашей нери сети для того чтобы для того чтобы задать нейросеть достаточно определить У вашего класса методы init и Forward в методе init обычно прописываются слои и атрибуты нейросети там какие-нибудь гиперпараметры которые используются в этой не сети а в методе Forward описывается

там какие-нибудь гиперпараметры которые используются в этой не сети а в методе Forward описывается то как нейросеть будет обрабатывать данные которые по поданы ей на вход давайте мы сейчас на примере вот этой нери сети посмотрим как реализуется класс Надеюсь станет понятнее Итак класс NN наследуется от NN module Я здесь тоже импортировала ещё раз торчи N znn на всякий случай Чтобы показать что вот а опять же вот этот NN module и все слои которые мы здесь будем Объявлять они из класса из модуля

а опять же вот этот NN module и все слои которые мы здесь будем Объявлять они из класса из модуля N вот у нас два метода этого класса init и for в методе и во-первых мы вызываем спер это просто так надо в питоне А во-вторых мы определяем все элементы из которых будет состоять нейросеть наша нейросеть будет двухслойная то есть у неё Будут Два линейных слоя с функцие активации после каждого из них Давайте их определим То есть первый линейный слой fc1 от того что это conn 1 это будет размера 2х 2

Давайте их определим То есть первый линейный слой fc1 от того что это conn 1 это будет размера 2х 2 я сказала что скрытых слоя будет п нейронов А здесь сделала два нейрона но здесь можно поменять на п если что Ну давайте будет скрытым слое 2 Нейрон смотрите Итак S C1 это N лини R 2 на2 То есть это первый линейный слой Даше первая функция это NN точ сигмой Вот так мы можем получить сигмой функцию активации здесь опять же если вам хочется можно дома попробовать заменить на NN тож N вот так вот

активации здесь опять же если вам хочется можно дома попробовать заменить на NN тож N вот так вот вызывается функция активации лу или какие-нибудь другие даже функции активации попробовать которые в порче есть дальше зададим второй линейный слой тоже линер И у него количество входных нейронов должно быть ровно таким которое было какое было количество выходных нейронов у первого слоя если мы как написано вот здесь хотели бы сделать чтобы скрытом слое было п нейронов тогда мы здесь могли бы

как написано вот здесь хотели бы сделать чтобы скрытом слое было п нейронов тогда мы здесь могли бы заменить двойку на пятёрку и тогда здесь Мы тоже должны были заменить двойку на пятёрку потому что это второй слой и он принимает входных входные значения ровно такого размера который выдал предыдущий слой поэтому здесь должны быть одинаковые значения давайте пока вернём два и вторая функция активации после второго слоя давайте тоже будет сигд тоже 2 - это Симо Итак здесь в нити мы определили

после второго слоя давайте тоже будет сигд тоже 2 - это Симо Итак здесь в нити мы определили задали все элементы из которых мы хотим построить нашу нейросеть теперь нам нужно определить функцию Forward функция Forward кроме Self принимает ещё значение x x - это то что будет подано Нейро Сити на вход То есть когда мы будем обучать или использовать не по сути мы будем вызывать у несите функцию Forward и подавать ей на вход какие-то какие-то значения для которых мы хотим получить ответ вот эти

и подавать ей на вход какие-то какие-то значения для которых мы хотим получить ответ вот эти значения Это есть X что происходит внутри внутри форварда мы должны описать Каким образом Вот это входное значение X трансформируется нейросети то есть Каким образом нейросеть его обрабатывают Каким образом наша нейросеть должна обрабатывать входные значения очень просто входное значение X сначала подаётся на вход первому слою сети S C1 от x получается какой-то выход этот выход тоже обозначим X то есть

на вход первому слою сети S C1 от x получается какой-то выход этот выход тоже обозначим X то есть что вот был X мы его подали на ход линейному усло получили расформирован X Теперь мы Этот новый X Даше подам в первую функцию активаци X ра 1 от x После этого мы подаём то значение которое получилось после первой функции активации во второй линейный слой Self fc2 от x тоже X ра fc2 от x и дальше прогоняем через последнюю функцию активации Self activation 2x получаем обновлённый X и возвращаем

прогоняем через последнюю функцию активации Self activation 2x получаем обновлённый X и возвращаем функция возвращает вот этот полученный обновленный X на выходе нейросети то есть после того как нейросеть обработала наш вход вот так задаётся простая нейросеть то есть ещё раз чтобы задать неть вам нужно определить класс который наследуется Mod и внутри переопределить два метода init и for методе вы описываете какие атрибуты будут у вашей сети а методе фвар вы расписывается Как ваша сеть с

вы описываете какие атрибуты будут у вашей сети а методе фвар вы расписывается Как ваша сеть с помощью атрибутов заданных в обрабатывает входящий нзр вход элемент Давайте запустим эту ячейку и заведём экземпляр нашей нери сети модул равно Давайте посмотрим что умеет наша нейросеть заметим что наша нейросеть мы ещё ни на чём не обучали никакие тренировочные данные ей на вход не подавали Давайте посмотрим что она всё равно сейчас умеет получим её ответы на тестовые выборки визуализирую какому

посмотрим что она всё равно сейчас умеет получим её ответы на тестовые выборки визуализирую какому классу наша несете отнесла какие точки этой тестовой выборки а тест - это наши значения признаков тестовых точек мы их можем просто подать на вход нашей модели вот заметим что здесь когда мы создавали нашу модель мы говорили что вот есть функция for и когда мы будем подавать что-то на вход модели мы будем вызывать эту функцию фвар здесь мы никакую функцию Форвард не вызываем мы простоте подаём на

будем вызывать эту функцию фвар здесь мы никакую функцию Форвард не вызываем мы простоте подаём на вход модул как бы как будто бы мы применяем са на самом деле внутри вот этого класса внутри класса который наследуется при вот таком вот вызове по сути будет вызываться фвар но вам не нужно писать Вот так вот Mod тоф Хотя так можно но это делать не нужно можно просто сказать что вы подаёт тест внутрь модели и тогда там внутри выз будет вызываться Вот это и заметим е здесь что мы перед подачей

модели и тогда там внутри выз будет вызываться Вот это и заметим е здесь что мы перед подачей внутри модели а меняем тип xtest Точнее не меняем тип xtest переводим xtest Format tenser просто оборачиваем xtest в torch Flow tenser FL tensor - это нзр в котором элементы типа числ с плавающей точкой то же самое как там num FL или int - это число целочисленное целочисленное значение Итак мы можем xtest обернуть в нзр подать на вход нашей модели тогда наша модель выдаст нам NN prediction это вот то

обернуть в нзр подать на вход нашей модели тогда наша модель выдаст нам NN prediction это вот то что получилось у неё здесь в конце форварда и дальше мы можем этот N prediction перевести из формата тензора в формат обычного питонов ского массива давайте это всё запустим и давайте наверное даже посмотрим как выглядит наше предсказание вот так выглядит наше предсказание заметим что для каждого элемента входа наша нейросеть выдала массив из одного значения Ну почему одно значение получилось на

входа наша нейросеть выдала массив из одного значения Ну почему одно значение получилось на выходе Понятно Мы сделали вот здесь второй линейный слой с одним нейроном в конце потому что мы решаем задачу бинарной классификации а то есть Нам нужно чтобы наша нерес выдавала в конце одно значение [музыка] и это значение получается путём применения к выходу второго слоя функция активации сигмоида а сигмоида переводят все значения в масштаб от нуля до единицы и это значение мы будем интерпретировать

переводят все значения в масштаб от нуля до единицы и это значение мы будем интерпретировать Как вероятность принадлежности элемента к первому классу то есть здесь как бы вторая второй слой нашей нере сети по сути является логистической регрессия то есть идея вот ровно такая же а здесь мы сделали один Нейрон выходной поэтому у нас собственно получилось что для каждого элемента на выт одно число но как видите не просто число а массив в виде одного числа то есть это тензор который на самом деле

но как видите не просто число а массив в виде одного числа то есть это тензор который на самом деле содержит одно число давайте мы теперь переведём предсказание сети из вероятности формат нулей и единиц чтобы получить ровно какому из классов наша нерес отнесла какой входящий элемент а просто напишем там функцию что для каждого элемента из NN prediction мы проверяем если этот элемент м если нулевое значение этого элемента потому что Non prediction ещё раз у него Каждый элемент - это массив из

значение этого элемента потому что Non prediction ещё раз у него Каждый элемент - это массив из одного значения для каждого элемента проверяем больше ли он чем 0,5 если больше то считаем что наша нерес отнесла его к первому классу Если меньше то к нулевому классу то есть мы просто а разбиваем вероятности по порогу получаем новый N prediction который теперь будет выглядеть вот таким образом видим Кстати что наша нейросеть все элементы просто к нулевому классу Ну и Давайте визуализирую точки

Кстати что наша нейросеть все элементы просто к нулевому классу Ну и Давайте визуализирую точки тестовой выборки покрасим их цвета в зависимости от того какому классу сеть отнесла эти точки Как вы наверное уже догадались все точки будут красного цвета Вот это точки тестовой выборки все они покрашены в красный потому что наша не обученная нейросеть которой мы ещё не обучали просто относит все точки которые мы ей подали на вход к нулевому классу опять же не буду подробно останавливаться на этом

которые мы ей подали на вход к нулевому классу опять же не буду подробно останавливаться на этом коде потому что это просто использование для визуализации тестовой выборки если хотите можете сами изучить этот код дома Итак полученный результат Понятно ожидаем потому что наша нейросеть Не обучена давайте её обучим Итак обучение нейронной сети в пайтор заметим сейчас вот что в одном из прошлых занятий Когда у вас было домашнее задание для обучения самописный Лог регрессии вам нужно было не только

Когда у вас было домашнее задание для обучения самописный Лог регрессии вам нужно было не только реализовать класс и for Pass - это Логистическая регрессия то есть не только то как Логистическая регрессия по входу получает ответ но ещ и то как Логистическая регрессия вычисляет производную каждого её её каждого веса который является обучаемым параметром и как эти веса в процессе градиентного спуска потом меняются То есть как они апдейт используя градиенты Лос функции по этим весам при написании

потом меняются То есть как они апдейт используя градиенты Лос функции по этим весам при написании класса нам этого всего будет не нужно нам не нужно будет самостоятельно реализовывать вычисление производных и код обновления весов внутри P torch алгоритм вычисления частных производных функции по весам сети реализуется автоматически с помощью модуля аград этот модуль называется аград от того что это авто Градиент авто вычисления градиентов А делается Это примерно следующим образом смотрите когда

авто Градиент авто вычисления градиентов А делается Это примерно следующим образом смотрите когда мы определяем нашу класс нашей нети Вот здесь мы в функции for задам вид то как будет выглядеть Граф вычисления нашей нейросети то есть Каким образом входящий элемент X будет проталкивать через все элементы нашей не сети Каким образом будет получаться Ответ когда мы задаём Форвард таким образом парч точнее его модуль аград сам понимает как выглядит этот Граф вычисления сети который мы задали и при

точнее его модуль аград сам понимает как выглядит этот Граф вычисления сети который мы задали и при вызове метода у последнего элемента графа у функции мы будем вызывать метод экр то есть метод Посчитай производной по сути так вот когда мы будем Лос функции вызывать метод эрд аград будет проходить по вот этому графу вычисления в обратном направлении и автоматически вычислять все градиенты все производные Лос функции по всем весам сети а то есть здесь я просто хотела убедить вас что тут никакой

Лос функции по всем весам сети а то есть здесь я просто хотела убедить вас что тут никакой магии нет что если мы если Пато условно знает как выглядит Граф вычислений сети то он может автоматически построить э функции для вычисления производных всех весов это нери сети используя Вот то как выглядит этот Граф и знания о том как вычисляются производные простых функций вида умножения сложения деления и так далее но если вам интересно более подробно узнать про то как работает аград то в

деления и так далее но если вам интересно более подробно узнать про то как работает аград то в дополнительных материалах к этому модулю вы найдёте несколько более обширные объяснение скажем так про то как работает аград но здесь нам важно то что нам самим никакого кода для вычисления производных весов нети или их обновление писать будет не надо Давайте теперь перейдём к написанию функции TR для обучения нашей нери сети в обучении сети будет участвовать следующие сущность во-первых сама нери

обучения нашей нери сети в обучении сети будет участвовать следующие сущность во-первых сама нери сеть которую мы будем обучать во-вторых Лос Функция которую мы будем использовать в-третьих оптимайз оптимизатор Ну что такое Нейро Что такое фун наверное Понятно А вот что такое оптимизатор Давайте об этом чуть-чуть скажем оптимизатор - это сущность которая отвечает за обновление параметров сети на основе их текущих значений и значений их производных которые мы только что вычислили то есть в

на основе их текущих значений и значений их производных которые мы только что вычислили то есть в алгоритме стохастического градиентного спуска оптимизатор отвечает за вот эту строчку которая введена красно То есть если мы вспомним Как работает градиентный спуск Мы сначала перед обучением там нере сети или какой-нибудь там логистической регрессии неважно выбираем размер боча и значения шага Альфа и пока не выполнен критерий остановки делаем следующее во-первых перед каждой эпохой разбиваем

и пока не выполнен критерий остановки делаем следующее во-первых перед каждой эпохой разбиваем датасет на Бачи размера K получаем N делить на K бачей где N Это количество всего элементов обучающей выборки и дальше для G от 1 до n де на K делаем следующее то есть на каждом баче обучаем нашу нере сеть прогоняем батч данных через нашу модель получаем ответ этой модели вычисляем значение функции используя ответы модели и правильные ответы вычисляем значение всех частных производных Лос функции по

ответы модели и правильные ответы вычисляем значение всех частных производных Лос функции по весам нашей модели и дальше обновляем значение параметров нашей модели используя её текущее значение и только что вычисленные вот эти частные производные градиенты и вот за вот этот вот как раз шаг обновление значения параметров Нейро сети будет отча вот э сущность оптимизатор Казалось бы на самом Зачем плодить отдельную какую-то сущность которая отвечает за вот такую простую операцию потому что эта

плодить отдельную какую-то сущность которая отвечает за вот такую простую операцию потому что эта операция в алгоритме градиентного спуска выглядит очень просто мы по сути берём старое значение равно точнее новое значение равно старое значение минус альфа умножить на значение частной производной Ответ здесь на самом деле такой что вот градиентный спуск и стохастический градиентный спуск который мы с вами рассматривали раньше и который сейс буде ть Это самый базовый вариант того как работает

мы с вами рассматривали раньше и который сейс буде ть Это самый базовый вариант того как работает алгоритм обновления весов сети то есть вот вот это Это самый базовый вариант того как можно обновлять веса сети на основе их старых значений и текущих вычисленных частных производных есть некоторые трюки которые позволяют которые можно добавить вот к этом к этому алгоритму которые позволяют сделать обучение сети ещё эффективнее например быстрее быстрее сходиться к хорошим значениям параметров за

обучение сети ещё эффективнее например быстрее быстрее сходиться к хорошим значениям параметров за меньшее количество итераций например таких идей несколько и чтобы можно было обучать одну и ту же сеть с помощью таких разных алгоритмов оптимизации не просто с помощью обычного стохастического градиентного спуска а там улучшенного каким-то ещё трюком поэтому чтобы так можно было за алгоритм оптимизации отвечает отдельная сущность оптимизатор То есть у нас есть одна и та же нейросеть которую мы

отвечает отдельная сущность оптимизатор То есть у нас есть одна и та же нейросеть которую мы определили одна и та же Лос функция и мы можем просто задать разные оптимизаторы и обучать сеть с помощью разных оптимизатор и смотреть например какой работает лучше а то есть то что оптимизатор отдельная сущность позволяет нам как бы менять их местами пробовать разные варианты как-то так Итак теперь Мы готовы реализовать функцию обучения нашей сети Давайте реализуем сначала обычный градиентный спуск не

реализовать функцию обучения нашей сети Давайте реализуем сначала обычный градиентный спуск не стохастический то есть без бачей просто чтобы познакомиться с тем как идейно выглядит функция Train для обучения любой нери сети Давайте импортируем библиотеку ТДМ которая поможет нам следить за процессам обучения нашей нери сети и напишем функцию TR функция Train будет принимать на вход нашу модель которую мы будем обучать То есть это будет Наша нери сеть XY - это будут обучающие данные X - это

которую мы будем обучать То есть это будет Наша нери сеть XY - это будут обучающие данные X - это обучающие точки элементы обучающей выборки Y - это ответы для элементов обучающей выборки тери - это наша функция потерь которые мы будем использовать оптимайз - это как раз тот оптимизатор который мы будем использовать для обучения сети и нам Эпоха - Это количество эпох которое мы хотим обучать нашу сеть а внутри функции Train мы проходим се циклом по количеству эпох обучения и на каждой эпохе

сеть а внутри функции Train мы проходим се циклом по количеству эпох обучения и на каждой эпохе обучения делаем следующее во-первых вычисляем предсказание нашей модели подаём наши тренировочные данные X на вход модели просто мо от x получаем Y ПТ - это предсказание нашей модели дальше считаем значение функции потерь на полученном предсказании Y пред и правильных ответах Y просто в критерии нашу Лос функцию которую мы выбрали подаём Y пре Y получаем значение Лос функции L и дальше делаем Три

Лос функцию которую мы выбрали подаём Y пре Y получаем значение Лос функции L и дальше делаем Три строчки которые будут сопровождать вас на всём вашем пути работая с нейросетями по крайней мере внутри этого курса точно эти три строчки следующие во-первых нужно выполнить подсчёт нового градиента чтобы запустить подсчёт градиентов функции по а весам нери Сити нужно сделать l точка backward Когда вы делаете вот такую операцию а модуль аград начинает считать численные значения э частных производных

делаете вот такую операцию а модуль аград начинает считать численные значения э частных производных э Лос функции по текущим значениям Нера сети после этого когда частные производные вычислены нам нужно сделать шаг градиентного спуска тогда мы зовём оптимайз точка СП мы говорим оптимизаторы Делай шаг оденет Наго спуска оптимизатор берёт только что вычисленные значения частных производных текущие значения весов нери сети и выполняет их update то есть делает вот эту строчку Теперь у нери сети м у

весов нери сети и выполняет их update то есть делает вот эту строчку Теперь у нери сети м у весов нери сети становятся новые значения и дальше нам нужно сделать оптимайз Z grad а оптимайз то Z grad обнуляет сохранённую оптимизаторы значения градиентов перед следующим шагом обучения то есть на каждом шаге обучения сети мы заново будем вычислять э производные весов нери сети относительно текущих значений весов А И снова звать оптимайз steep чтобы оптимизатор уже относительно текущих значений

значений весов А И снова звать оптимайз steep чтобы оптимизатор уже относительно текущих значений весов снова обновил их используя текущее значения частных производств если оптимайз то не делает то внутри оптимайз после оптимайз топ будут сохраняться значения градиентов которые он только что использовал для обновления и на следующем шаге если вот это убрать на следующем шаге на следующей эпохе по сути После выполнения L Back у оптимайз и вызова оптимайз steep оптимизатор обновит текущее

по сути После выполнения L Back у оптимайз и вызова оптимайз steep оптимизатор обновит текущее значение параметров нери используя не только частные производные полученные на этом шаге Но и на предыдущем шаге То есть он будет их аккумулировать Поэтому чтобы такого не происходило мы делаем оптимайз Гра Почему автоматически внутри оптимизатора не делается Гра То есть почему автоматически там значения производных не убираются Ну иногда когда вы обучается нейросети бывает это бывает полезно скажем

производных не убираются Ну иногда когда вы обучается нейросети бывает это бывает полезно скажем так то есть это дополнительный функционал который позволяет вам а как-то по-другому немножко по-другому работать с обновлениями значений весов но нам сейчас это не пригодится и ближайшем будущем тоже Поэтому вот обычно делается так иногда делают по-другому оптимайз Гра ставит вот сюда перед тем как делать L Back Oper Step так тоже можно неважно В каком порядке это делать Я поставила Сейчас тут но в

L Back Oper Step так тоже можно неважно В каком порядке это делать Я поставила Сейчас тут но в целом вот эти вот Три строчки которые здесь написаны будут сопровождать вас в течение всего курса и возможно и далее когда вы будете сами обучать ваший нейросети на pch Давайте запустим эту ячейку снова объявим нашу нейросеть мо рано net и объявим ло функции оптимизатор которую мы сейчас будем использовать и обучим нашу сеть на 30 эпохах Лос функцию мы будем использовать бинарную Крос энтропию что

и обучим нашу сеть на 30 эпохах Лос функцию мы будем использовать бинарную Крос энтропию что тоже самое что логистической функция потерь logloss мы её раньше уже использовали для обучения логистической регрессии а бинарная Крос энтропия в точе тоже лежит кстати в модуле NN И вот так вот пишется BSE loss binary Cross entropy loss это наш критерий оптимизатор давайте выберем обычный sgd Stas gradi desent это по сути вот самый обычный оптимизатор который реализует обновление значения параметров

desent это по сути вот самый обычный оптимизатор который реализует обновление значения параметров сети вот по таким обычным функциям а оптимизаторы лежат в модуле torch optim точка И там дальше название оптимизатора наш хасти градин desent называется просто sgd внутрь оптимизатора нужно подать параметры модели чтобы оптимизатор понимал Какие параметры обновлять параметры модели берутся очень просто берём наш модуль который мы только что объявили вот здесь и делаем то par ой моду точка

просто берём наш модуль который мы только что объявили вот здесь и делаем то par ой моду точка параметров просто возвращает все обучаемые параметры этой модели и их мы подаём в оптимизатор говорим что оптимизатор ты будешь следить за вот этими параметрами и на каждом шаге Когда мы будем звать оптимайз Step ты будешь обновлять значение вот этих параметров используя значение текущих частных производных и подаём ещё значение аргумента LR это Альфа это Learning Rate LR - это Learning Rate поставим

и подаём ещё значение аргумента LR это Альфа это Learning Rate LR - это Learning Rate поставим его 1 е -3 то есть здесь мину треть степень здесь у меня закона ещё вот такая строчка оптимайз равно torch optim Adam тоже самое здесь должно быть модул модул точ параметр SLR 1 -3 ам - это как раз улучшенный вариант э обновления весов улучшенный вариант оптимизатора то есть который уже не вот просто делает там старые веса новые веса равно старые минус альфа умножить на значение частной производной а

там старые веса новые веса равно старые минус альфа умножить на значение частной производной а немножко хитрее их обновляют чтобы неть обучалась более эффективно на данный момент Адам это как бы считается в целом самым эффективным оптимизатора то есть дальше по курсу и дальше наверное в своей работе вы увидите что Обычно люди по умолчанию используют Адам Потому что считается что он как бы самый эффективный здесь на всякий случай это показала но сейчас давайте просто используем обычные сгд

эффективный здесь на всякий случай это показала но сейчас давайте просто используем обычные сгд давайте это запустим теперь А чтобы обучить нашу нейросеть на наших данных X trin и Y Train опять же нужно перевести их в формат тензора разумеется для этого мы просто оборачиваем X Train в torch FL tenser Y Train тоже оборачиваем в torch Flow tenser А ещё шейм Y Train так чтобы это был не просто Вектор размера 1.000 Y trin - это Вектор размера 1.000 потому что у нас 1.000 элементов обучаемый выборки

размера 1.000 Y trin - это Вектор размера 1.000 потому что у нас 1.000 элементов обучаемый выборки и для каждого элемента у нас ответ это одно значение ноль или один Мы хотим чтобы теперь Y Train стал тензоров не просто размера 1.000 а размера 1.1 то есть по сути Мы из каждого элемента Y Train делаем массив размера один и у нас получается что вот этот вот тензор теперь имеет размер 1000 и1 View - это по сути такой аналог reshape в най Вот А зачем нам это надо потому что как мы убедились выше

- это по сути такой аналог reshape в най Вот А зачем нам это надо потому что как мы убедились выше наша нейросеть выдаёт ответы не в виде просто массива там длины N где N - Это количество поданных на вход элементов А в виде массива размера N за а и размерность правильных ответов а модели тоже должна иметь такую же размерность как и размер выхода сети потому что дальше когда мы будем подавать выход сети и правильные ответы в функцию потерь вот в эту критери функция потерь работает с тензора

выход сети и правильные ответы в функцию потерь вот в эту критери функция потерь работает с тензора одинакового размера по крайней мере bce L binary CR Cent Los работает с тензора одинакового размера для этого мы шейм Y Train чтобы он был такого же размера как и э Вектор который выдаёт нам наша нейросеть Итак теперь у нас всё готово Теперь мы можем запустить нашу функцию Train которую мы вот здесь вот объявили и подать туда модул X trin Y Train Criterion оптимайз и Давайте пде плохо и наша э

вот объявили и подать туда модул X trin Y Train Criterion оптимайз и Давайте пде плохо и наша э функция Train После того как она обучит вот эту модель с помощью вот этого цикла обратно возвращает тоже э значение обновлённой модели у которой будет уже обновлённые веса и его мы получаем обратно вот тут запустим мы видим что она уже обучила так быстро и Давайте посмотрим какой будет результат то есть давайте мы теперь А получим ответы модели на тестовые выборки опять же их визуализирую посмотрим

давайте мы теперь А получим ответы модели на тестовые выборки опять же их визуализирую посмотрим стала ли наша модель лучше делить точки тестовой выборки на два класса или нет смотрите здесь ещё один важный момент здесь мы когда подаём ну во-первых его тоже переводим в формат FL T подаём на вход модели получаем предсказание и предсказание переводим в обычный массив вот когда мы это делаем мы вот это всё ещё делаем внутри вот такой вот вещи with tch Что это значит когда мы делаем вот так with и

это всё ещё делаем внутри вот такой вот вещи with tch Что это значит когда мы делаем вот так with и что-то пишем внутри вот этой вот сущности Это означает что то что будет написано внутри вот здесь не должно порождать вычисление производных то есть вот таким образом мы говорим модули аград что когда мы делаем здесь операции нам не нужно чтобы в результате этих операций вычисляли какие-то производные то есть мы Выключаем вычисление производных здесь зачем это может быть важно на самом деле когда

то есть мы Выключаем вычисление производных здесь зачем это может быть важно на самом деле когда мы просто получаем Ответ нети когда мы не делаем не пишем Вот таких вот вещей типа L Back op op веса несете обновляться не будут То есть если бы мы написали просто вот так то в принципе наша неть осталась бы точно такой же то есть никакие веса нере сети не стали бы обновляться но если мы в то время когда подаём тестовую выборку на вход нашей нери сети модели и получаем предсказание не отключим

когда подаём тестовую выборку на вход нашей нери сети модели и получаем предсказание не отключим вычисление производных эти производные будут занимать память нашего процессора память нашего обычного процессора цпу или память процессора ГПУ с этим мы познакомимся далее с тем как переносить нашу модель и делать вычисление там обучение нашей модели на графическом процессоре GPU у GPU у видеокарты на которой мы будем обучать наши большие нейросети память довольно ограничена и если не делать то э

на которой мы будем обучать наши большие нейросети память довольно ограничена и если не делать то э память Может просто забиться и ваш код Может просто не отработать это как бы не очень хорошо поэтому хороши то м и для себя в будущем собственно это когда вы тестируется вашу модель которую Когда вы э вызываете Forward Pass вашей модели без желания после этого Форвард паса а вычислить Градиент и обновить веса модели то тогда вы делаете вот так сторону Град Итак мы внутри сторч Град получили

и обновить веса модели то тогда вы делаете вот так сторону Град Итак мы внутри сторч Град получили предсказание нашей модели опять же предсказание нашей модели - это вероятности принадлежности каждого элемента первому классу переводим их с помощью трешхолд в 0,5 в нули единицы и давайте мы их визуализирую видим что конечно предсказания получились Не идеальными у нас только часть вот этих точек получилась красненькая остальные получились зелёными то есть разделяющая поверхность нашей а модели Не

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

же не буду рассказывать точно как что происходит вот здесь в коде вот здесь в коде это просто код визуализации написанный с помощью Либа если интересно можете сами в этом разобраться Ну мы видим что вот это точки покрашены в цвета правильные то есть вот это вот должны быть красные точки это зелёные точки а плоскость покрашено цвета в зависимости от того как наша модель разделяет точки плоскости на два класса видим что Получилось Не идеально Ну это всё-таки была наша первая нейросеть мы обучили

два класса видим что Получилось Не идеально Ну это всё-таки была наша первая нейросеть мы обучили её на 30 эпох мы рандомно поставили гиперпараметры там нашего sgd там Le 1 -3 и Мы создали наш нейросеть с функциями активации сигмоида что на самом деле Не ну если мы говорим про функцию активации в скрытом слое сети это не самый оптимальный выбор но в любом случае давайте теперь е заметим что сес мы Чили нашу Несе не с помощью статического градиентного спуска А с помощью обычного градиентного

мы Чили нашу Несе не с помощью статического градиентного спуска А с помощью обычного градиентного спуска когда по сути размер каждого Бача равен размеру всей обучающей выборки Давайте теперь научимся в порче обучать нейросеть с помощью стохастического градиентного спуска то есть по мини Бача опять же вспомним что в домашнем задании по Лок регрессии мы сами писали функцию generate bch которой выполняла функционал разделения данных на мини в па опять же нам такого самим писать не нужно Здесь есть

функционал разделения данных на мини в па опять же нам такого самим писать не нужно Здесь есть специальный класс который называется по его названию понятно что это класс который дит данные загружает данные вот он помогает нам на основе нашей обучающей выборки разделить её на мини баче и подавать их в сеть Давайте заведём В класс dat Loader и посмотрим как им пользоваться а дауры будет два один для тренировочных другой для тестовых данных и даур принимает на вход данные в виде массива пар X1 y1

тренировочных другой для тестовых данных и даур принимает на вход данные в виде массива пар X1 y1 и так далее там XY каждая пара - это набор типа входящие элементы ответ на подходящий элемент то есть в нашем случае это X1 - это два признака каждой точки обучающей выборки y1 - Это ответ для этой точки обучающей выборки dat Loader лежит в torch utils Data dat Loader и давайте мы заведём например dater для тренировочных данных подаём на вход X Train Y Train которые мы прогоняем через Zip чтобы из

для тренировочных данных подаём на вход X Train Y Train которые мы прогоняем через Zip чтобы из отдельных Xtra Y Train сделать вот такой вот массив пар сначала подаём в zip ЗП возвращает генератор мы этот генератор оборачиваем в Лиз чтобы получить вот ровно вот такой массив пар Дальше Ой дальше Ура есть атрибут аргумент пай это собственно размер Бача на которые нужно делить наши тренировочные данные давайте выберем 64 и есть ещё аргумент шал шал это аргумент который говорит перемешивает ли

данные давайте выберем 64 и есть ещё аргумент шал шал это аргумент который говорит перемешивает ли выборку заново перед каждой эпохой обучения для тренировочных данных мы ставим ЛТ потому что мы помним что для обучения нефтей нам хорошо перемешивать обучающую выборку перед каждой эпохой обучения перед разделением её на Бачи А вот когда мы будем создавать тест мы сделаем Shuffle fse потому что тестр будет на основе тест данных а тестовые данные нам не обязательно перемешивать потому что неважно

будет на основе тест данных а тестовые данные нам не обязательно перемешивать потому что неважно В каком порядке мы тестовые данные подадим на вход нашей модели мы потом всё равно для Всех тестовых элементов получим ответы и посчитаем на их основе метрику так вот в Test Loader тоже также задаётся только здесь мы уже подаём xtest Y Test а не X trin Y Train чи давайте тоже будет 64 запустим Итак у нас есть Train Loader и тест Loader Теперь давайте немножко изменим функцию обучения сети чтобы

у нас есть Train Loader и тест Loader Теперь давайте немножко изменим функцию обучения сети чтобы реализовать обучение по мини Бача Давайте назовём э новую Stas Она будет принимать точно также модель теперь она будет принимать dater не XY отдельно как у нас было раньше а dat Loader это будет у нас Trainer который Она будет принимать на вход И точно также те оптимайз и количество эпох Точно также мы проходим по циклу по количеству эпох обучения и Давайте здесь заведём ещё массив который назовём

мы проходим по циклу по количеству эпох обучения и Давайте здесь заведём ещё массив который назовём эпох loss в него мы на каждой эпохе будем об добавлять значени на каждой эпохе Когда мы будем проходиться по мини Бача будем добавлять в этот массив значение Лос функции на текущем мини баче а потом усреднять эти значения Лос функции на текущей эпохи и выводить их так мы будем следить за тем как проходит наше обучение там уменьшается ли наш Лос функции внутри цикла по количеству эпох обучения У

наше обучение там уменьшается ли наш Лос функции внутри цикла по количеству эпох обучения У нас будет цикл по Бача dat Loader то есть смотрите dat Loader - это генератор который будет возвращать Каждый раз когда мы будем его просить он будет возвращать следующий ба то есть мы просто вот так вот пишем в цикле for X bch Y bch and Loader этот цикл будет работать до тех пор пока ра не кончатся Бачи то есть долор внутри взял наши тренировочные выборки перемешал её разделил на Бачи размера 64 у него

есть долор внутри взял наши тренировочные выборки перемешал её разделил на Бачи размера 64 у него получилось к бачей и вот этот цикл будет отработает к раз пока у дата лоде не кончатся батчи когда у даур кончится Бачи этот цикл отработает мы перейдём в следующую итерацию вот этого цикла на следующую эпоху и когда мы снова будем звать вот этот цикл по Чам дата лоурайдере нашу обучающую выборку э случайно снова поделит её на бочи и снова Будет отдавать её к раз пока бочи не закончатся и так далее

снова поделит её на бочи и снова Будет отдавать её к раз пока бочи не закончатся и так далее Итак внутри цикла по Чам дата лоде для каждого боча мы делаем всё то же самое что делали раньше функции выше вычисляем предсказание нашей модели модул от xb рано yp считаем значение функции потерь на полученном предсказании критери yp Y Ба и здесь вот запоминаем в наш массив эпох loss текущее значение oss функции Лос функция для значение Лос функции для Y yb - это скаляр поэтому мы можем сделать. item

функции Лос функция для значение Лос функции для Y yb - это скаляр поэтому мы можем сделать. item таким образом перевести Лос из вида торча тензора в просто скаляр порча и добавить его вот этот массив ихлос Ну и дальше делаем вот эти три и когда заканчивается цикл по боча дара просто Прим Cent L как среднее из вот этого массива давайте это запустим и Давайте теперь обучим нашу не с помощью вот этого вот этой функции Stas Train который уже использую стохастический градиентные спуск Дары снова

этого вот этой функции Stas Train который уже использую стохастический градиентные спуск Дары снова заведём нашу модель Нео обученную с нуля выберем опять же туже саю функцию bce L оптимизатор sgd тоже опять же можете попробовать ам Если хотите тот же самый Learning и тоже передаём мо param И теперь мы просто вызываем Train Stas от Model Train Loader crit optimizer и также Давайте плох запускаем вот наш уже отработал и мы видим Как меняется значение среднее значение функции на чах чно датасета

вот наш уже отработал и мы видим Как меняется значение среднее значение функции на чах чно датасета в течение разных эпох видим что в начале обучения функция была Вот такая Дальше она уменьшается и приходит вот к таким результатам Ну возможно это не самое оптимальное обучение возможно надо подкорректировать параметры Le Create поставить другой количество эпок там другое поставить может быть Басай другой выбрать но мы видим что наша Несе обучается Давайте теперь посмотрим как наша модель делит

другой выбрать но мы видим что наша Несе обучается Давайте теперь посмотрим как наша модель делит плоскость на части по классу теперь наша модель обучила делить плоскость вот так видим всё ещё не оптимально нужно мне кажется подобрать там параметры возможно лучше обучить модель больше эпох поставить но мы видим что наша нейросеть работает и что-то что-то пытается сделать Давайте ещё попробуем здесь увеличить количество эпох обучения поставим например 350 вместо 50 посмотрим как изменится

здесь увеличить количество эпох обучения поставим например 350 вместо 50 посмотрим как изменится качество итоговой нере сети снова объявим нашу модель критери оптимайз запустим эту ячейку и поставим учиться модель на 350 эпох о видим что к концу обучения значение Лос функции стало гораздо ниже чем было раньше после пятидесяти эпох наверное наша модель должна была обучиться уже лучше классифицировать точки тестовых данных Давайте теперь посмотрим как наша модель делит плоскость на части по

точки тестовых данных Давайте теперь посмотрим как наша модель делит плоскость на части по классам о уже гораздо лучше Не идеально но гораздо лучше до Вы можете попробовать поэкспериментировать ещё например поставить ещё большее количество бох обучения поменять Learning Rate или поменять activation function функцию активации в середине нери сети например нари которая считается самой эффективной для скрытых слоёв сети на этом наш семинар заканчивается мы рассмотрели основы работы счм узнали что

скрытых слоёв сети на этом наш семинар заканчивается мы рассмотрели основы работы счм узнали что такое тер построили свою первую нейросеть узнали что неть состоит из блоков что её нужно определять в виде класса в котором нужно определить методы ивар обучили нейросеть с помощью обычного градиентного спуска с помощью ческого градиентного спуска здесь Е в этом ноутбуке же большой материал про N sequential Вы можете изучить его дома и также полезные ссылки на документацию page по датасета дата лоде

Вы можете изучить его дома и также полезные ссылки на документацию page по датасета дата лоде здесь вот мы обсуждали часть про дата лоу и про torch autograd ещё другой материал про torch GR ждёт вас в дополнительных материалах к этому модулю Ну удачи вам в домашнем задании и дальше по курсу

Концепция ООП простыми словами | Объектно-ориентированное программирование Python

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=Z7AY41tE-3U! This is most likely caused by:

#1. Классы и объекты. Атрибуты классов и объектов | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья меня зовут сергей балакирев и на этом занятии мы с вами узнаем как в python и определять классы создавать объекты то есть экземпляры этих классов а также добавлять и удалять их атрибуты то есть данные предположим мы хотим определить класс для хранения координат точек на плоскости для начала я его запишу без какого-либо содержимого для этого мы вначале пишем такой ключевое слово класс и затем через пробел определяем имя этого класса но пусть она называется так вот

слово класс и затем через пробел определяем имя этого класса но пусть она называется так вот point но и далее вот здесь вот у нас идет содержимое класс то есть ставим : и у нас начинается блок для класса то есть все что мы определяем здесь внутри нас будет относиться к этому класс point пусть он у нас будет пока пустой я поставлю такой оператор пас все мы с вами определили класс с именем point и смотрите в соответствии со стандартом мэк 8 имя класса принято начинать заглавной буквы и конечно же

в соответствии со стандартом мэк 8 имя класса принято начинать заглавной буквы и конечно же называть так чтобы она отражала суть этого класса в дальнейшем я буду придерживаться этого правила и так у нас с вами получилась простейшие определение класса но в таком виде он не особо полезен поэтому я пропишу в нем два атрибута 1 атрибут пусть называет скала то есть цвет и принимая такое значение ред а второе требует стекол который будет определять радиус . ну и пусть равен двум обратить внимание

а второе требует стекол который будет определять радиус . ну и пусть равен двум обратить внимание переменная внутри класса обычно называют атрибутами класса или его свойствами я буду в дальнейшем использовать эту терминологию теперь в нашем классе есть два вот этих вот атрибута калары стекол но как правильно воспринимать эту конструкцию фактически сам класс образует пространство имен в данном случае с именем point и в этом пространстве имен находится две переменные кола и сёкл и мы можем

случае с именем point и в этом пространстве имен находится две переменные кола и сёкл и мы можем обращаться к ним использовать синтаксис для пространства имен например так я скопирую этот класс перейду в python console и соответствие создан этот класс вот прям здесь непосредственно в python консоль так будет удобней показывать вот здесь вот справа у нас появился вот этот класс вот он point и соответственно содержит две вот эти от переменной то есть два свойства стекла и color и теперь смотрите

содержит две вот эти от переменной то есть два свойства стекла и color и теперь смотрите мы можем записать имя вот этот класс a point то есть пространство имен point поставить точку и вот здесь вот есть два наших свойство color и сёкл но давайте я выберу color и присвою ему какое-то другое значение например благ черное даже enter и смотрите здесь от справа у нас вот этот свойство color поменялось было red стала black ну или мы можем прочитать какое-либо свойство из этого класса то есть опять

было red стала black ну или мы можем прочитать какое-либо свойство из этого класса то есть опять прописать его имя поставить точку ну и определить выбрать какую то здесь свойство допустил стекол нажму enter и у нас он вращается значение 2 который как раз содержится в этом свойстве а чтобы увидеть все атрибуты класса то можно воспользоваться такой специальной переменной который называется dict то есть два подчёркивания dict и 2 подчёркивания нажимая enter и у нас появляется такая коллекция

то есть два подчёркивания dict и 2 подчёркивания нажимая enter и у нас появляется такая коллекция напоминающий словарь и здесь у нас много-много разных атрибутов и среди них есть два наших это вот этот color со значением black и сокол со значением 2 теперь давайте сделаем следующий шаг и создадим экземпляры этого класса о нашем случае для создания объекта то есть экземпляр класса достаточно после его имени поставить две вот такие вот круглые скобки нажимаем enter и смотрите справа у нас

после его имени поставить две вот такие вот круглые скобки нажимаем enter и смотрите справа у нас появился этот перемены а которая является как раз экземпляром этого класса point и через эту переменную доступно два вот таких вот атрибута два свойства color и сёкл которые определены вот в этом классе point или же мы можем создать еще один экземпляр использует точно такой же синтаксис но пример b равняется point и две круглые скобки нажимаем enter и у нас вторая переменная b который имеет

b равняется point и две круглые скобки нажимаем enter и у нас вторая переменная b который имеет совершенно другой адрес вот здесь мы это видео значит вот адрес переменной b и адрес перемены а они отличаются это означает что объекта а и объект б это совершенно два раза независимых объекта и в объекте b также присутствует два вот этих свойства стекла и color по аналогии может создавать произвольные количество экземпляров класса так как переменные а и б у нас ссылается на объекты класса point то

количество экземпляров класса так как переменные а и б у нас ссылается на объекты класса point то мы это явно можем определить с помощью такой функции type я за записать type и ad а то на выходе увидим что это есть ни что иное как объект класс point то есть он принадлежит как бы типу вот это вот класса point и мы можем это даже явно вот так проверить если запишем type от а-два равно и point на выходе получим тару или вот в таком вот виде из instance а , point в этом случае мы тоже на выходе

выходе получим тару или вот в таком вот виде из instance а , point в этом случае мы тоже на выходе получим true то есть имя классы здесь выступает в качестве типа данных но давайте детальней разберемся что же у нас здесь с вами и в действительность получилось во первых объекты а и b образует свое пространство имен пространство имен экземпляров класса и во-вторых не содержит никаких собственных атрибутов свойства color и сёкл берутся непосредственно из класса point внутри вот этих вот объектов а

свойства color и сёкл берутся непосредственно из класса point внутри вот этих вот объектов а и б этих свойств нету не существует они ссылаются на соответствующие свойства атрибуты вот это вот класса point поэтому я не случайно называю эти две переменные атрибутами класса подчеркивает тот факт что эти перемены находятся внутри класса point то есть атрибуты класса они общие для всех его экземпляров и мы можем в этом легко убедиться например давайте изменим вот такое свойство стекол у нас она

и мы можем в этом легко убедиться например давайте изменим вот такое свойство стекол у нас она сейчас принимать значение 2 а мы поставим значение 1 я нажимаю enter и смотрите вот здесь в то автоматически в наших объектах это значение тоже поменялась двойки на единицу мало того и ли посмотреть но вот этот коллекцию dict от у этого объекта а например то она будет пустой это как раз и говорит о том что сам по себе объекта а сейчас не содержит никаких атрибутов и то же самое с объектом б он тоже

что сам по себе объекта а сейчас не содержит никаких атрибутов и то же самое с объектом б он тоже будет пустой то есть этот коллекция dict будет пустая то есть наши объекты а и b образуют пространства имен но в этом пространстве имен пока ничего нету но тем не менее мы через них можем обращаться к атрибутам класса point то есть с написать а . например color то увидим вот это значение black то есть это значение благ была взята непосредственно из класса point или можем записать так бей . сёкл

есть это значение благ была взята непосредственно из класса point или можем записать так бей . сёкл соответственно получим значение 1 но если мы выполним вот такую команду а . color и присвоим какой то другой цвет ну например green то смотрите что у нас получится я нажимаю enter и справа вот здесь вот объект а свойства color принимает горин а объект б свойства color осталось благ почему так произошло дело в том что когда мы выполняем вот это вот команду то через а обращаемся вот к этому

произошло дело в том что когда мы выполняем вот это вот команду то через а обращаемся вот к этому пространству имен к пространству имен объекта а и далее вот этот оператор присваивания он создает переменную с именем color в текущем пространстве имен несмотря на то что мы как бы можем брать вот эту переменную из другого пространства имен из внешнего пространства из класса point но вот этот оператор присваивания работает вот именно так если переменной color отсутствует вот а в этом текущем

присваивания работает вот именно так если переменной color отсутствует вот а в этом текущем пространстве имен то это переменная то есть в данном случае атрибут создается в этом текущем пространстве имен и в итоге объект а уже содержит свой собственный атрибут то и свойства вот с этим именем color ну а объект б по-прежнему ссылается на color вот этого класса point и мы в этом также можем убедиться если распечатаем коллекцию вот для этого объекта а то есть напишем а.а. dict и смотрите здесь у нас

если распечатаем коллекцию вот для этого объекта а то есть напишем а.а. dict и смотрите здесь у нас появился вот это вот локальные свойства с именем color и значением green вот этот момент нужно себе очень хорошо знать и понимать на этом принципе в python построена формирование атрибутов классов и локальных атрибутов их экземпляров кстати по аналогии мы можем создавать новые атрибуты и в классе point для этого достаточно записать имя класса поставить точку но и придумать какой-нибудь новый

point для этого достаточно записать имя класса поставить точку но и придумать какой-нибудь новый свойство нам product type pt и присвоить какой-нибудь значение у пусть от будет значение диск нажимаем enter и смотрите у нас вот здесь этого объектах появилось вот это новые свойства type t со значением диск и если мы посмотрим на класс point to в этом классе point тоже появилось вот это вот новые свойства то есть вот так вот мы можем добавляет динамически новые свойства вот в этот класс то есть

свойства то есть вот так вот мы можем добавляет динамически новые свойства вот в этот класс то есть новая атрибута или то же самое мы можем сделать с помощью такой специальной функции которая зывается сета а татар в качестве первого аргумента мы указываем то пространство имен с которым хотим работать пусть это будет класс point и далее через битую вторым аргументом в виде строки обратить внимание виде строки мы должны прописать то свойство кто-то атрибут которому хотим присвоить то или иное

виде строки мы должны прописать то свойство кто-то атрибут которому хотим присвоить то или иное значение вот я здесь прописал совершенно новый атрибут проб которого нет пока еще в классе point и пусть он принимает это требует значение 1 то есть вот три таких аргумента нажимая enter и смотрите у нас в классе point появился вот этот атрибут свойство проб со значением 1 то есть если в классе не существует атрибута которого мы хотим присвоить какое-либо значение то она динамически в него

не существует атрибута которого мы хотим присвоить какое-либо значение то она динамически в него добавляется а если мы пропишем здесь какой-нибудь уже существующей атрибут евро так type t и присвоим новые значения на пресс квар то просто поменяем значение диск который здесь есть на новые значения square то есть вот так вот можно работать с атрибутами классов динамически добавлять их и менять значение если же мы хотим прочитать какое-либо значение атрибута из класса то для этого достаточно

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

значение этого атрибута но при обращении к несуществующему атрибут класса например а его не существует мы получим ошибку вот этой ошибки можно избежать если воспользоваться специальной функции которая зывается get to the top она позволяет брать читать атрибута из указанного пространство имен в данном случае я указываю класс но можно указать и объекты класса это без разницы я укажу класс и дали через запятую укажу несуществующей атрибут а если мы вот так вот запишем то опять получим ошибку но и

запятую укажу несуществующей атрибут а если мы вот так вот запишем то опять получим ошибку но и здесь можно прописать третий аргумент я его пропишу так фолз и этот третий аргумент будет возвращаться если указанный атрибут не обнаруживается ну а если мы здесь укажем существующие свойства например color то она соответствует возвращается причем можно списать вот в таком вот виде эту функцию goto top а можешь вот это вот третий аргумент не писать будет в данном случае зеленый тоже результат но если

а можешь вот это вот третий аргумент не писать будет в данном случае зеленый тоже результат но если вот это вот атрибут color не будет в классе point to с отвесом а получим ошибку наконец мы можем не только добавлять но и удалять любые атрибуты из класса и сделать это можно по крайне мере двумя способами первое это воспользуюсь статьи о то оператором dl но и соответственно указать какой атрибут из какого пространство имен удаляется данном случае мы хотим из класса point удалить вот такой

из какого пространство имен удаляется данном случае мы хотим из класса point удалить вот такой допустим атрибут проб нажимая enter и смотрите в нашем классе point теперь этого атрибута проб нету мы его удалили но и сама попытаемся повторить эту команду то у нас уже будет ошибка потому что удалять несуществующей атрибут спорта кайт команда del нельзя поэтому прежде чем делать ударение того или иного атрибута по идее было бы хорошо проверить а существует он или не существует для этого можно

иного атрибута по идее было бы хорошо проверить а существует он или не существует для этого можно вызвать вот такую специальную функцию называется так вот завтра ну и соответственно здесь указываем пространство имен то есть в данном случае класс укажу ну и то свойство который мы собираемся удалить проб на выходе она даст фолз потому что такого свойства такого атрибута в классе нету если бы она была мы здесь увидите либо значение true но давайте я пропишу и здесь и стекол нажимаю enter и у нас

мы здесь увидите либо значение true но давайте я пропишу и здесь и стекол нажимаю enter и у нас появляется значение true потому что такое свойство в классе point существует так вот первый способ удаления атрибута это оператора д л а второй способ это использование функции которая называется дел а татар мы здесь указываем первым аргументом пространство имен из которого удаляется атрибут ну а дали этот атрибут который мы собираемся удалить ну например вот такой вот type pt нажимаю enter и

а дали этот атрибут который мы собираемся удалить ну например вот такой вот type pt нажимаю enter и смотрите у нас из классы действительно был удален этот атрибут т.п. разумеется если мы ещё раз вызовем эту же функцию для того же самого атрибута то получим ошибку то есть удалять может только те атрибуты который присутствует в классе поэтому прежде чем что-либо удалять нужно проверить а существует такой атрибут в классе или не существует и то же самое с объектами существует такой атрибут в

такой атрибут в классе или не существует и то же самое с объектами существует такой атрибут в объекте или не существует причем смотрите если мы сейчас вот вызывают это вот функцию swizer для класса point и укажем атрибут который существует ну допустим color то конечно же получим значение true а если мы укажем здесь имя объекта например а то тоже видим true да я забыл что мы вот этот свойства color создали непосредственно вот в этом экземпляре поэтому конечно же видим здесь труп давайте вместо

создали непосредственно вот в этом экземпляре поэтому конечно же видим здесь труп давайте вместо color пропишите стекол нажимаем enter это же видим троп то есть вот этот функциях и зато она говорит о том что мы можем в принципе получить через пространство имен а доступ от к этому атрибуту сёкл но она не говорит о том что данный атрибут находится непосредственно от в этом пространстве имен а вот на это обращайте внимание то есть если мы вот здесь вот мы видим коллекцию диктата смотрите в ней

на это обращайте внимание то есть если мы вот здесь вот мы видим коллекцию диктата смотрите в ней существует только один атрибут а вот это вот 2 атрибуты сокола здесь нету тем не менее функция газа от r возвращает значение true того что мы в принципе через а можно обратиться вот к этому атрибуту стекол то есть функциях is at our работа и вот именно таким образом а вот удаление атрибутов происходит непосредственно в текущем пространстве мед фраера если написать д л а и здесь укажем стекол то

непосредственно в текущем пространстве мед фраера если написать д л а и здесь укажем стекол то есть вот это вот атрибут стекол он отсутствует в секущей пространство имен то мы получим ошибку а вот удалить color мы вполне можем потому что он в этом объекте присутствует прыща выполнить эту строчку обратите внимание в нашем объекте а вот это свойство color принимает значение garena сейчас мы удалим это свойство из объекта а я нажимаю enter и у нас получает следующие в этом объекте а это свойство

это свойство из объекта а я нажимаю enter и у нас получает следующие в этом объекте а это свойство color остается но принимает уже значение black я думаю вы догадались почему это произошло в то уж после удаления атрибута color из объекта а этот color стал братца непосредственно из класса point то есть поиск того или иного атрибута выполняется следующим образом сначала он ищется в текущем пространстве мед а если не находится здесь то берется из следующего внешнего на который соответствует

мед а если не находится здесь то берется из следующего внешнего на который соответствует ссылается вот это вот внутреннее пространство в данном случае внешние для любого объекта это класс от которого он был образован но в данном случае от класс point поэтому вот этот атрибут color для объекта а берется уже и из класса point вот этот момент также следует хорошо понимать при работе с локальными свойствами объектов и атрибутами класса и так теперь когда мы с вами выяснили как создаются атрибуты

объектов и атрибутами класса и так теперь когда мы с вами выяснили как создаются атрибуты вернемся к нашей задачи формирования объектов точек на плоскости я снова определю вот этот класс point заново и также заново создам два объекта объект а и объект б у этих двух объектов мы автоматически получаем два вот этих вот общих свойства стекол и color но координаты точек у этих объектов должны исключительно принадлежать вот этим вот экземпляром поэтому эти координаты мы пропишем следующим образом

принадлежать вот этим вот экземпляром поэтому эти координаты мы пропишем следующим образом укажем пространства имен а то есть объекта а поставим точку я запишу первую координату как x и присвоить значение 1 соответственно вы здесь о так в объекте а у нас появилось новое локальные свойства с именем x и значением 1 ну и то же самое для второй координата y я пропишу просто значение 2 в результате объект а содержит два собственных локальных свойства x и y со значениями 1 и 2 и то есть координата

объект а содержит два собственных локальных свойства x и y со значениями 1 и 2 и то есть координата точки ну и то же самое мы можем прописать для объекта b пусть здесь будет координаты 10 и 20 то есть вот эти вот свойство x y который мы определили вот таким вот образом то есть динамически создали их для соответствующих экземпляров класса они являются независимыми между собой в результате у нас каждый объект представляет точку с независимыми координатами на плоскости но а цвета их размер

нас каждый объект представляет точку с независимыми координатами на плоскости но а цвета их размер является как общими данными для всех этих объектов то есть вот эти вот образом мы можем создавать локальное индивидуальное свойство для каждого объекта ну и в заключении этого занятия отмечу что в любому классе языка python мы можем определять его описание виде вот такой вот начальной строке если мы сейчас вот в консоли определим именно вот такой вот класс вот с этой 1 строку это смотрите у этого

сейчас вот в консоли определим именно вот такой вот класс вот с этой 1 строку это смотрите у этого класса есть вот такая вот перемена она называется dogs 2 подчёркивания долго 2 подчеркивать и вот это переменной док как раз содержит вот ту строку то описание который мы здесь вот в начале прописываем обычно так делает при создании больших программ когда в ключевых классах прописывать создают такие описания чтобы в последующем было удобнее возвращаться к ним корректировать и использовать не

такие описания чтобы в последующем было удобнее возвращаться к ним корректировать и использовать не обращаясь к специальную документацию и так из этого занятия должны себе хорошо представлять как определяется классов python и как создаются объекты класса что и себя представляет атрибут класса и атрибут объектов уметь обращаться к этим атрибутом используя атаки от функция добавление чтения проверьте на наличие ну и удаление атрибутов а также знать за что отвечает вот эти вот две перемены если

на наличие ну и удаление атрибутов а также знать за что отвечает вот эти вот две перемены если все это вам понятно то смело переходить к следующему занятию [музыка]

#2. Методы классов. Параметр self | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья меня зовут сергей балакирев его продолжаем изучать объектно-ориентированное программирование языка python как я говорил на первом занятии класс может содержать либо свойства то есть данная либо методы функция благодаря методам о на три класса можно реализовывать самые разные алгоритмы то есть методы это действия именно поэтому в названиях методов использует глаголы например ctr год парам старт стоп и тому подобное в то время как именами свойств то есть данных

например ctr год парам старт стоп и тому подобное в то время как именами свойств то есть данных выступает существительное color says x и y и так далее рекомендуется придерживаться этого простого правила давайте для примера объявим нашем классе point метод который будет называться сэт cards если я сейчас поставлю круглые скобки то интегрированный среда нам автоматически добавляет такой параметр сел что оно означает я скажу чуть позже а пока давайте моего уберем и в теле вот это вот методы вызове

что оно означает я скажу чуть позже а пока давайте моего уберем и в теле вот это вот методы вызове функцию print который будет печатать вот такое сообщение вызов метода сетка worlds все мы объявили с вами метод она 3 класса point давайте посмотрим как все это будет работать я сделаю следующим образом скопирую этот класс перейду в python концов и вот здесь вот мы его продублируем чтобы он у нас есть появился соответственно если мы обратимся к этому классу point и далее через точку укажем вот имя

появился соответственно если мы обратимся к этому классу point и далее через точку укажем вот имя этого метода сетка он просто вот так как без круглых скобок то у нас здесь вот будет как раз функций то есть мы видим что вот этот атрибут то есть имя метода это атрибут этого класса point to вот этот атрибут сетку ртс связан с определенной функцией ну и раз это так там из от веса его можем вызвать как вызывается любая функции языка python до достаточно поставить круглые скобки и данной функции

как вызывается любая функции языка python до достаточно поставить круглые скобки и данной функции будет вызвана то есть мы здесь вот видим в консоли вызов метода сетка worlds то есть на данный момент никаких ошибок у нас с вами не происходит несмотря на то что вы здесь вот первый параметр вот в этом месте десятков мы убрали то есть интерьер мы среда нам его написала но мы его пока убрали давайте теперь сделаем следующий шаг и создайте экземпляр этого класса point я это сделаю следующим образом

теперь сделаем следующий шаг и создайте экземпляр этого класса point я это сделаю следующим образом пусть у нас будет переменной п т и соответственно она будет являться новым объектом вот этого класса point и справа мы это видим то есть у нас появился объект pt и у него два атрибута то есть атрибут класса стекол и color давайте теперь посмотрим а есть ли у него атрибут сетка атс я так и сделаю 5 . напишу сетка артс ну и соответствую круглые скобки смотрите действительно такой атрибут существует

напишу сетка артс ну и соответствую круглые скобки смотрите действительно такой атрибут существует ошибки никакой нету и он ведет на связанный метод вот это вот класса point давайте его попробуем вызвать иначе мы пропишем pt . сетка орт и поставим круглые скобки нажмём enter и у нас возникает ошибка ошибка в том чтобы этому методу сад как передается один аргумент тогда как он у нас определен в нашем классе вот здесь вот выше без параметров вот из-за этого и возникает ошибка но спрашивается а

нашем классе вот здесь вот выше без параметров вот из-за этого и возникает ошибка но спрашивается а откуда тут берется какой-то аргумент если мы его вызываю вот так вот без аргументов на самом деле не совсем так и интерпретатор python когда вызывает тот или иной метод через объект класса делает одну небольшую вещь когда мы выполняем вот такую команду то есть вызываем метод сетка артс то на самом деле интерпретатор языка python автоматически в качестве первого аргумента подставляет вот этот

деле интерпретатор языка python автоматически в качестве первого аргумента подставляет вот этот параметр силов этот параметр сел который является ссылкой на экземпляр класса point то есть вот на этот объект pt и так происходит абсолютно всегда для любого объект класса если мы методы объявляем вот эти вот образом то есть просто как функции внутри класса то есть вот здесь вот в качестве первого аргумента всегда подставляется вот этот параметр сел именно поэтому мы здесь и видим вот эту вот ошибку

всегда подставляется вот этот параметр сел именно поэтому мы здесь и видим вот эту вот ошибку поэтому если мы внутри класса хотим объявить какой-либо метод что бы потом mac или вот так что вызывать его через объект этого класса то в качестве первого аргумента нужно обязательно указать вот этот параметр сел то есть параметр сел который будет всегда ссылаться на тот экземпляр из которого был вызван данный метод то есть через этот параметр ссылкам будем знать с каким экземпляром работает вот этот

данный метод то есть через этот параметр ссылкам будем знать с каким экземпляром работает вот этот метод сетка words давайте вот здесь вот функции print мы добавим еще вот этот вот самый вывод параметр сел в то есть мы сделаем так это стр отелов скопируем опять же этот класс отсюда в python концов создадим снова экземпляр от этого класса пойнта уж класс изменился ну и соответственно вызовем вот этот метод сетка alt нажимаем enter и теперь никаких ошибок и нету то есть все прошло именно так как

метод сетка alt нажимаем enter и теперь никаких ошибок и нету то есть все прошло именно так как это и должно быть вот здесь вот в качестве сел был подставлен экземпляр вот эту вот классный ссылка на экземпляр этого класса и смотрите мы видим адрес вот это вот экземпляра для которого был вызван этот метод и вот этот вот адрес который здесь приведён он в точности совпадает с адресом вот это вот объект п то есть действительно вот этот сел в данный момент ведет вот на этот объект pt через который

п то есть действительно вот этот сел в данный момент ведет вот на этот объект pt через который был вызван данный метод то есть вот именно такую роль играет вот этот вот первый параметр правда теперь если мы захотим вызвать этот же метод через класс point напрямую вот акт point поставить точку и вызвать метод сетка артс то у нас будет ошибка потому что мы здесь не указали вот этот первый аргумент первый параметр сел то уж когда вызывается метод из класса то автоматически вот сюда вот уже ничего

первый параметр сел то уж когда вызывается метод из класса то автоматически вот сюда вот уже ничего не подставляется потому что как бы не твой экземпляра для которого вызывается данный метод мы же его вызываем через класс поэтому что здесь подставить в качестве сэл оф интерпретатор языка python автоматические здесь ничего не делает по этому у нас и возникает такой то ошибка что должен быть один параметр 1 ая вы здесь нету но мы можем поступить так значит вызвать все живут этот мир от и явно

параметр 1 ая вы здесь нету но мы можем поступить так значит вызвать все живут этот мир от и явно передать ссылку на экземпляра класса pt вот так все будет работать то есть вот такая вот запись она в общем то эквивалентно о такой записи pt . сетка вот это будет одно и то же но все же зачем понадобилось вот такое поведение для чего нужно прописывать вот этот параметр сел и зачем интерпретатор языка python автоматически его добавляет когда вызывается метод через объект класса смотрите предположим

python автоматически его добавляет когда вызывается метод через объект класса смотрите предположим мы хотим чтобы вот этот метод сетка артс именно вот в этот экземпляр класса pt добавлял координаты x и y вот как раз это можно сделать через вот этот параметр сел и делается это следующим образом так как сел это ссылка на экземпляр класса pt то мы можем прописать целом . x то есть создайте новый атрибут новые свойства и передать им значение x но соответствовать здесь это мы добавим еще x и y и то

новые свойства и передать им значение x но соответствовать здесь это мы добавим еще x и y и то же самое для y пропишем cf . y равняется y то есть мы создадим вот здесь вот в экземпляре класса на который ссылается f2 локальных свойства x и y соответствующими значениями которые вы 10 передадим ну а далее давайте а едешь прямо в программе пропишу pt ровняет спой ты создать им экземпляр этого класса и далее вызовем вот этот метод сад cards и теперь так как у нас здесь появились еще два от этих от

и далее вызовем вот этот метод сад cards и теперь так как у нас здесь появились еще два от этих от параметра мы их явно должны прописать ну например 1 и 2 то есть вот этот первый он автоматически будет подставлен интерпретатором языка python а вот эти вот два последних мы должны уже явно передать при вызове вот это вот методы сад кварц ну и соответственно выведем в консоль те свойства локальные свойства которые у нас получились вот в этом экземпляре класса pt дайте запустим нашу программу и

свойства которые у нас получились вот в этом экземпляре класса pt дайте запустим нашу программу и смотрите действительно при выполнении от этих строчек то есть когда был вызвать этот метод сетка words to вот в этом экземпляре класса pt через сел были добавлены свойства x со значением один и игрек со значением 2 вот именно для этого и используется вот этот параметр сел чтобы мы могли работать с локальными атрибутами конкретного экземпляра класса то есть когда у нас в программе создается много

локальными атрибутами конкретного экземпляра класса то есть когда у нас в программе создается много разных экземпляров много разных объектов одного и того же класса то вот этот метод сетка орт метод класса он не копирует суть сюда от в отдельные экземпляры он как был вот в этом классе так в этом классе и остается и только благодаря вот этот параметр сел мы знаем с каким экземпляром класса в данный момент работает этот метод сетка wars и как мы только что видели через него вполне можно создавать

момент работает этот метод сетка wars и как мы только что видели через него вполне можно создавать или менять уже существующие локальные свойства экземпляра класса давайте для примера в программе создадим еще один объект это два пусть он называется и для этого объект pt 2 соответствует тоже вызове вот этот метод хорд только со значениями 10 и 20 ну а далее с помощью функции print тоже выведем его локальные свойства смотрите из мы сейчас запустим программу то для первого объекта pt значение x y

локальные свойства смотрите из мы сейчас запустим программу то для первого объекта pt значение x y 1 и 2 а для второго соответствовать 220 то есть они работают совершенно независимо то есть координаты x и y вот эти вот совершенно независимо для каждого экземпляра класса благодаря как раз вот это вот параметру сил-то уж когда мы вызывается от картавый здесь вот это будет ссылаться на pt а когда вы здесь вот сетка акции вызываем to sell тот же самый пар underfell путь ссылаться уже на экземпляр

здесь вот сетка акции вызываем to sell тот же самый пар underfell путь ссылаться уже на экземпляр класса pt2 ну и соответственно в нём будут создаваться вот эти вот свойства со значением 10 20 конечно вот здесь вот в классах мы можем прописывать произвольное количество методов давайте пропишем еще один который будет называться но вода пусть отгадку ртс и возвращать текущие координаты нашей точки то есть я бы здесь пропишу retain и виде кортежа мы возвратим текущие координаты опять же это можно

то есть я бы здесь пропишу retain и виде кортежа мы возвратим текущие координаты опять же это можно сделать через l m xl впишем . imex то есть мы будем брать текущие координаты из экземпляра класса для которого был вызван этот метод слв . x а здесь сел в . y соответственно далее мы вызовем и от метод getcount здесь вот прям функции print ну и посмотрим как это все будет работать вот этот лишний я уберу и запущу программу смотрите мы видим кортеж со значениями 1 и 2 вот так вот в классах можно

я уберу и запущу программу смотрите мы видим кортеж со значениями 1 и 2 вот так вот в классах можно прописывать методы ну и соответственно вызывать их и интересный здесь момент такой что вот все эти методы то есть имена методов это тоже атрибуты класса принципе об этом самом начале говорил и так как это атрибуты класса то значит что мы можем получить крем доступ через функцию g от ну например вот так вот мы здесь создали экземпляр класса но и далее напишут актов равняется здесь вот этот функция

так вот мы здесь создали экземпляр класса но и далее напишут актов равняется здесь вот этот функция это автор далее мы указываем пространство имен из которую будет выбрать соответствующий метод ну и затем имя метода пусть это вот такой метод get cards все если мы теперь к выйдем в консоль значение f то смотрите ф как раз будет ссылаться на связанный метод с классом point но и раз это так там и прямо здесь функции print можем его вызвать постави круглые скобки запустим программу и действительно

здесь функции print можем его вызвать постави круглые скобки запустим программу и действительно был вызван и мы видим значения 1 и 2 то есть кортеж с координатами 1 и 2 конечно такой то обращение к методам делается крайне редко обычно используется такой синтаксис через точку я привел этот пример чтобы еще раз подчеркнуть что именно методов классах это те же самые атрибута просто они ведут не надо на и она функция во всем остальном они схожи с вот такими вот атрибутами которые являются обычными

на и она функция во всем остальном они схожи с вот такими вот атрибутами которые являются обычными данными итак на этом занятии вы должны были узнать как определяется простые методы класса за что отвечает вот этот параметр сел и как происходит обращение к методам и их вызов если все это понятно то смело переходить к следующему занятию где мы продолжим эту тему [музыка]

#3. Инициализатор __init__ и финализатор __del__ | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья меня зовут сергей балакирев и на этом занятии мы с вами поговорим о начале инициализации объектов момента их создания и финализации при удалении начну с того что в каждом классе языка python есть специальные магические методы да они так и называются магические методы начинается с 2 подчеркиваний и заканчивается тоже двумя подчёркивания my в частности существует два от этих от метода 1 вызывается сразу после создания экземпляра класса а второй непосредственно перед его

от метода 1 вызывается сразу после создания экземпляра класса а второй непосредственно перед его удалением давайте посмотрим как они работают и зачем нужны мы здесь в по charm у нас с вами уже задан класс point которых принципе мы делали на предыдущем занятии здесь два свойства color и сёкл и два метода сет корт и год cards но использовать вот этот класс на практике не очень удобно смотрите вначале мы ему конечно же должны создать то есть создать экземпляр этого класса как это делать мы с вами

мы ему конечно же должны создать то есть создать экземпляр этого класса как это делать мы с вами уже знаем в данном случае просто прописываем point с двумя круглыми скобками и на выходе получаем ссылку на созданный экземпляр класса а далее чтобы в этом объекте у нас появились вот эти вот локальные свойства x и y то по идее должна вызвать вот этот метод сетка артс то есть прописать pattaya . сетка артс ну и указать какие либо значения праер 1 и 2 если мы теперь в помощью функции print выведем

артс ну и указать какие либо значения праер 1 и 2 если мы теперь в помощью функции print выведем локальные свойство локальная атрибуты вот этого экземпляра класса pt то как раз и увидел что здесь есть x со значением один и игрек со значением 2 однако было бы хорошо сделать эти действия сразу у момент создания экземпляра класса и в этом нам и как раз поможет вот этот магический метод init давайте в начале мы пропишем его здесь в классе в очень простом виде то есть и нет один параметр сел в его

в начале мы пропишем его здесь в классе в очень простом виде то есть и нет один параметр сел в его обязательной мы уже знаем для чего и параметр он будет ссылаться на новый созданный экземпляр класса но и внутри вот это вот метода то есть внутри этой функции класса мы во-первых запишем в print чтобы мы знали что она действительно была вызвана и здесь будет строчка вызов и нет а далее через сел мы как раз и создать зим два лака лик свой 2x и соответственно y со значениями 0 теперь смотрите если

как раз и создать зим два лака лик свой 2x и соответственно y со значениями 0 теперь смотрите если вы здесь вот ниже мы просто создать им экземпляр класса вот этот сад корт с я уберу и запустим нашу программу то во-первых видим что действительно и нед был вызван то есть был вызван вот это вот инициализатор и созданы два вот этих вот локалях свойства x и y со значениями 0 детально все это работает следующим образом вы начали происходит создание объекта в памяти устройства и непосредственно перед

следующим образом вы начали происходит создание объекта в памяти устройства и непосредственно перед его созданием вызывается в атакует магически метод new мы о нем еще будем говорить затем после успешного создания объекта вызывается следующий магический метод init и в нашем случае и нет создает два вот этих вот локалях свойства x и y то есть в результате в новом созданном объекте появляясь свойства x y со значениями 0 новые здесь можете резонно заметить по идее когда создается новый объект мы

x y со значениями 0 новые здесь можете резонно заметить по идее когда создается новый объект мы бы хотели вот эти вот координаты x и y и сделать не нулевыми а с нужными нам числовыми значениями чтобы это реализовать мы здесь от в программе а то поэтому инициализатор и и нет мы можем добавить прописать еще дополнительные параметры но например вот так вот а и b соответственно вы здесь вот когда мы будем создавать локальные свойства x y экземпляра класса b присвоим x а а y присвоим б вот этот

мы будем создавать локальные свойства x y экземпляра класса b присвоим x а а y присвоим б вот этот принт я выберу пляж мы знаем что или нет вызывается при создании экземпляра класса и смотрите теперь выделить вот когда мы создаем этот объект объект класса point to должны дополнительно указать вот эти два параметра a и b ну например вот так вот один , два если мы теперь запустим программу то у нас будут созданы локальные свойства x и y со значениями 1 и 2 давай спасай как это детально работает я

будут созданы локальные свойства x и y со значениями 1 и 2 давай спасай как это детально работает я поставлю здесь вот точка останова и запущу программу в режиме отладки затем нажимаю f7 чтобы мы вошли вот в этот класс point и быть здесь вот у нас сработал это тот инициализатор и и нет параметры а и b принимает значения 1 и 2 как раз все аргумент который мы передаем и соответствовать здесь вот создаются локальные свойства x со значением один и игрек со значением 2 после этого объекта у нас

создаются локальные свойства x со значением один и игрек со значением 2 после этого объекта у нас создан ну и мы вот эти вот локальные свойства выводим в консоль причем обратите внимание атрибуты называется именно вот так вот x и y то есть именно те имена которые мы прописали здесь через точку после сел не а и б а именно x и y то есть имена атрибута берутся вот отсюда то есть то что мы указываем через точку после слов по идее когда создают вот эти вот инициализатор а то параметры называет так

через точку после слов по идее когда создают вот эти вот инициализатор а то параметры называет так же как и создаваемое локальные свойства поэтому правильнее было бы сделать так здесь написать текст здесь y это параметр вот этой функции и нет ну а здесь мы просто передаём эти параметры x и y и при запуске программы увидим абсолютно все тоже самое и при этом смотрите как только вот вот это инициализатор мы добавили дополнительные параметры то есть вот лвл по умолчанию это тоже подставляет

мы добавили дополнительные параметры то есть вот лвл по умолчанию это тоже подставляет интерпретатор сам а вот эти вот x y мы прописали уже дополнительно поэтому когда создается экземпляр класса то здесь вот в круглых скобках мы обязаны уже передать два аргумента если этого не сделать то возникает естественно ошибка потому что ожидается два аргумента на самом деле три но первый подставляется автоматически а вот остальные два мы здесь не прописываем из-за этого и происходит так когда ошибка

автоматически а вот остальные два мы здесь не прописываем из-за этого и происходит так когда ошибка поэтому обязательно здесь уже нужно писать два аргумента и соответственно будет все работать или можем сделать так вот это вот и нет это на самом деле обычная функция но функции внутри класс называется метод хоть он и магический метод но тем не менее это обычная функция и как в обычной функция мы можем прописывать как фактические параметры так и формальное то есть указатель за счет значение по

можем прописывать как фактические параметры так и формальное то есть указатель за счет значение по умолчанию например у так вот x0 y0 и тогда по идее мы можем вызывать создавать экземпляра класса и без аргументов ну например вот так вот тогда будет браться значению по умолчанию данном случае 0 0 или мы можем указать какой из ну допустим одно значение тогда x будет принимать один а y 0 ну или два значения например 12 и у нас будет значит икс один и игрек льва то есть все это вполне допустимо

значения например 12 и у нас будет значит икс один и игрек льва то есть все это вполне допустимо прописывайте здесь в качестве параметров я надеюсь вот из этого примера вы теперь себе хорошо представляете как работает инициализатор объектов классов и зачем он нужен второй магический методы у автоматически вызывается непосредственно перед уничтожением экземпляра класса и он называется финале затар давайте пропишем такой магический метод в нашем классе point вот здесь вот после и нет я пропишу

давайте пропишем такой магический метод в нашем классе point вот здесь вот после и нет я пропишу значит 2 подчёркивания dl и 2 подчёркивания соответственно этот параметр сев у нас остается ну а внутри этого метода я просто сделаю вывод такой строке удаление экземпляра и вы здесь вот будет адрес того экземпляры который удаляется запустим нашу программу и смотрите действительно вот здесь вот мы видим эту строчку то есть как только программа завершилась наш объект был удален но и здесь у вас может

эту строчку то есть как только программа завершилась наш объект был удален но и здесь у вас может возникнуть вопрос а когда и в какой момент вообще происходит удаление объектов мы же в программе это явно не где вот здесь не указываем работает все достаточно просто интерпретатор языка python а имеет так называемой сборщика мусора это алгоритм который отслеживает объекты и как только они становятся ненужными удаляет их но как он определяет нужный объект или ненужный все очень просто пока на

ненужными удаляет их но как он определяет нужный объект или ненужный все очень просто пока на какой-либо объект ведет хотя бы одна внешняя ссылка он считается нужным но как только пропадает все внешние ссылки например вот после создания экземпляра класса ну вот этот переменная п можно переопределить и тогда она будет ссылаться уже на другой объект на объект со значением 0 а вот на этот объект point то есть экземпляр класс point уже никаких ссылок не будет в этом случае сборщика мусора решит что

то есть экземпляр класс point уже никаких ссылок не будет в этом случае сборщика мусора решит что этот объект уже не нужен и автоматически его удалит то есть освободит память которую он занимал и непосредственно перед удалением этого объекта будет вызван вот это от финале затар то есть магический метод дел то есть магический методы вызывается пока еще существует этот объект но после его вызова этот объект гарантированно перестанет существовать вот так вот работаю два таких магических метода

этот объект гарантированно перестанет существовать вот так вот работаю два таких магических метода init для инициализации объектов класса и дел для финализации то есть для выполнения определенных действий перед непосредственным удалением объекты из памяти устройства я сам материал этого урока вам понятен то смело переходить к следующему занятию [музыка]

#4. Магический метод __new__. Пример паттерна Singleton | Объектно-ориентированное программирование

здравствуйте дорогие друзья меня зовут сергей балакирев и на этом занятии мы познакомимся с еще этим магическим методом new который вызывается непосредственно перед созданием объекта класса я напомню что другой магический метод который мы с вами уже рассматривали и нет вызывается сразу после создания объекта и здесь вас может возникнуть вопрос зачем было определять два раза метода которые последовательно вызывается при создании экземпляров классов разве недостаточно была одна вот это вот метода

вызывается при создании экземпляров классов разве недостаточно была одна вот это вот метода init чтобы выполнять начальную инициализацию объекта конечно нет в практике программирования встречается самой разнообразной задачи и иногда нужно что то сделать до создания объектов на пример реализации известного паттерна синклит он в python как раз делает сейчас вот этот метод new и с этим методом мы с вами сейчас познакомимся я здесь сделал уже начальную заготовку у нас имеется класс point и в этого

вами сейчас познакомимся я здесь сделал уже начальную заготовку у нас имеется класс point и в этого классе как раз эти два метода то есть первый метод магически new и 2 магический метод init причем вот в этом первом методе обязательный параметр cls а в методе init это параметр sell вот этот cls он ссылается на текущий экземпляр класса то есть в данном случае на вот это вот класс point а вот этот вот сел когда вызывается и нет ссылается уже на создаваемый экземпляр класса то есть он уже будет

вот сел когда вызывается и нет ссылается уже на создаваемый экземпляр класса то есть он уже будет создан экземпляр класса и сел в будет ссылаться на экземпляр вот этот путь и нужно села ссылается на классно сам класс а сел на экземпляр этого класса давайте теперь ниже вы здесь вот мы создадим от экземпляра класса напишем стандартную же команду point перед этим два параметра 1 и 2 тыс от координаты x и y ну и запустим программу посмотрим что мы увидим смотрите значит и здесь идет эта строка в

x и y ну и запустим программу посмотрим что мы увидим смотрите значит и здесь идет эта строка в консоли вызов неё то есть мы видим вот эту строку то есть print была выполнена но вот этой вот второй строчке которые прописывают мы не видим то есть вот этот метод init в данный момент вызван не был это говорит о том что на самом деле вот сейчас в данный момент экземпляр класса pt не был создан и мы в этом можно убедиться если мы распечатаем то на что ссылается вот эта целка pt то увидим значение

в этом можно убедиться если мы распечатаем то на что ссылается вот эта целка pt то увидим значение надо вот значение надо как раз и говорит о том что экземпляр класса не был создан по идее здесь ты должен ссылаться на экземпляр класса а он сейчас ссылается просто на но почему так произошло дело в том что в python вот этот магический метод new должен возвращать адрес нового созданного объекта а в нашей программе он ничего не возвращает хорошо давайте вернем адрес нового созданного объекта но

в нашей программе он ничего не возвращает хорошо давайте вернем адрес нового созданного объекта но откуда мы его возьмём для этого можно вызвать аналогичный метод new из базового класса то есть если мы пропишу такую конструкцию супер это вот бойтано ссылка на базовый класс и из базового класса мы вызываем точно такой же магическими с new и передаем ему ссылку на вот этот текущий класс point да вы скажете а что это за базовый класс здесь такой из которого мы вызываем вот этот магический метод и

скажете а что это за базовый класс здесь такой из которого мы вызываем вот этот магический метод и new ведь класс point определял сам по себе и никаких других классов здесь вообще нет у нас программе да и вообще мы ещё не изучали тему наследование чтобы говорить о базовых классах и дочерних да поэтому забегая вперед скажу такую вещь начиная с версии python 3 все классы автоматически и неявно наследуется от а такого базового класса общих и из этого базового класса мы как раз и вызываем вот этот

от а такого базового класса общих и из этого базового класса мы как раз и вызываем вот этот метод не и то есть когда мы вызываем функцию супер от в этом классе point то получаем ссылку на базовый класс и в этом базовом классе как раз через эту ссылку вызываем уже вот этот вот магический метод a new и этот водички мест и new запускает процесс создания экземпляра класса и возвращает адрес нового созданного объекта ну а мы в свою очередь с помощью оператор ведь он возвращаем этот адрес дальше если

объекта ну а мы в свою очередь с помощью оператор ведь он возвращаем этот адрес дальше если теперь запустим программу вот в таком вот виде с модифицированного метода мне и то увидим две строчки во первых вы здесь вот был вызов new далее идет вызов и нет то есть действительно вот этот второй метод init сработал ну и кроме того вот это целка pt теперь у нас ведет на экземпляр класса и возможно здесь у нас остался еще один вопрос а для чего нужны вот эти вот аргументы в методе ее ведь мы же их

у нас остался еще один вопрос а для чего нужны вот эти вот аргументы в методе ее ведь мы же их здесь явно нигде не используем да вот в данный момент мы с этих действительно не используем но прописывать все равно нужно даже когда мы передаем вот это вот классу point при его создании определенное значение то они автоматически передаются отсюда в качестве аргументов вот это вот методу неё если мы уберем списка этих аргументов и запустим нашу программу то получим атакуют ошибку что на самом деле

уберем списка этих аргументов и запустим нашу программу то получим атакуют ошибку что на самом деле передаются аргументы вот они два аргументы здесь который как раз и помещается вот в эти вот коллекция но в частность в коллекцию аркс поэтому общий синтаксис вот это вот магического метода new когда мы его переопределяем в closet в частности point нужно записывать обязательно в таком общем видео ну и есть теперь запустить программу то уже никаких ошибок у нас не будет ну и кроме того мы можем эти

и есть теперь запустить программу то уже никаких ошибок у нас не будет ну и кроме того мы можем эти значения вот и значение этих аргументов передаваемых как-то использовать вот в этом магическом методе new чтобы реализовывать самую разную логику я думаю вы теперь представляете как работает этот магический метод но остается вопрос зачем он все же нужен в качестве ответа я приведу пример очень известного потерла проектирования под названием синклит он этот паттерн будет представлен у нас в

известного потерла проектирования под названием синклит он этот паттерн будет представлен у нас в учебном варианте потому что моего реализуем не полностью так как отсутствует достаточные знания итак давайте предположим что мы разрабатываем некий класс для работы с базой данных ну и он называет в так вот дата bass и далее полагаем что в программе должен существовать только один экземпляр этого класса то есть когда мы выполняем вот такую строчку создаем экземпляр класса до the bass то у нас

класса то есть когда мы выполняем вот такую строчку создаем экземпляр класса до the bass то у нас создается этот самый экземпляр но этот экземпляр в программе в один момент времени должен быть только один два экземпляра этих классов одновременно существовать не должны то есть если мы выполним еще эту такую строчку то создайте еще один экземпляр класса то по идее у нас вот эта целка должно вести на тот же самый экземпляр то есть второй экземпляр zeeco сдаваться не должен вот это вот и есть

на тот же самый экземпляр то есть второй экземпляр zeeco сдаваться не должен вот это вот и есть паттерн проектирования синглтон давайте его реализуем в нашей программе и для начала вот здесь вот мы пропишем этот самый класс чтобы не тратить время я его просто сюда у скопирую и сейчас поясню что здесь написано в принципе здесь ничего сложного абсолютно нету в начале идет магически мест и не для инициализации экземпляра класса при чем мы здесь будем передавать имя пользователя потом пароль и

инициализации экземпляра класса при чем мы здесь будем передавать имя пользователя потом пароль и номер порта инициализирую всеми этими данными этот экземпляр класса то есть там будут атрибуты юзер ps vr и порт далее у нас будет просто такой метод прописано в этом классе connect который выводит на экран сообщение что установлено соединение с базой данных и выводит пользователя пароль и порт далее метод close просто будет вот такое сообщение закрытие с единиц базы данных метод орет на что

далее метод close просто будет вот такое сообщение закрытие с единиц базы данных метод орет на что возвращает данные из базы данных то есть возвращать такую строку ну а method right он соответствовал воет в консоль вот такое сообщение запись в базу данных вот этих вот данных то есть просто этого такие методы заглушать что называется который в принципе можно реализовать вот в этом классе database но у нас они будут прописаны вот в таком вот виде и так вот этот класс он должен быть реализован с

но у нас они будут прописаны вот в таком вот виде и так вот этот класс он должен быть реализован с учетом паттерна синглтон то есть программе сможет создавать только один экземпляр этого класса как нам это сделать . вот здесь вот я пропишу один атрибут класса то есть он будет вот так кто нас называться 2 подчёркивания instance и принимать начальный значение нам вот это вот installs будет с ссылкой на экземпляр класса если его нету то соответственно этот атрибут быть принимать за chain on а если

на экземпляр класса если его нету то соответственно этот атрибут быть принимать за chain on а если будет экземпляр класса то это будет ссылка на этот экземпляр класса и таким образом мы можем контролировать существует объект у этого класса или не существует но и дали для управления создания новых объектов нам нужно переопределить вот этот магический метод new о которой мы с вами только что говорили в частности в этом методе проверим вот этот атрибут instance и если он принимает значение на on

в частности в этом методе проверим вот этот атрибут instance и если он принимает значение на on the мы вот этому вот атрибуту instance присвоим адрес нового созданного объекта то есть мы обратимся к базовому классу вызовем из неё вот этот метод new высоты передать вот этот параметр сел с все они живу здесь вот мы вернем вот этого значения вот этот атрибут installs то есть смотрите что у нас в итоге получится если вот этот атрибут instance принимать значение на on the тогда мы создаем вот в этой

получится если вот этот атрибут instance принимать значение на on the тогда мы создаем вот в этой строчке новый экземпляр класса если же у нас этот атрибут instance не на то есть уже создан какой-то объект то соответственно вот эта строчка выполняться не будет и мы просто вернем адрес ранее созданного объекта и таким образом будем контролировать что у нас программе существует ровно один объект вот это вот класса дата борис но по идее нам нужно здесь прописать еще один метод финале затар то есть

это вот класса дата борис но по идее нам нужно здесь прописать еще один метод финале затар то есть dl метод дел и вот в этом методе дел мы атрибут класса до the bass instance снова и сделаем значением надо то есть если объект будет удален сборщика мусора то атрибут instance атрибут класса именно do the bass снова будет принимать вот это значение нам и мы сможем повторно вновь создать объект этого класса вот в принципе вот эти вот строчки они определяют паторна проектирование синглтон ну и

этого класса вот в принципе вот эти вот строчки они определяют паторна проектирование синглтон ну и давайте по 40 как все это будет работать ниже мы создаем экземпляр этого класса значит тебе равняется do the bass и здесь мы должны прописать имя пользователя пусть это будет рут дали пароль пусть будет 1 2 3 4 ну и затем номер порта 80 после этого мы создадим еще один экземпляр есть попытаемся создать еще один экземпляр класса пусть будет здесь вот имя пользователя root 2 пароль уже будет пять

еще один экземпляр класса пусть будет здесь вот имя пользователя root 2 пароль уже будет пять шесть семь восемь ну и номер порта пусть будет 40 они же выведем и хайди то есть аиде для переменной биби и для переменной db2 то есть если вот эти вот переменные будут ссылаться на один и тот же объект то их айдишники тоже должны быть равны и мы сейчас это проверим запускаем программу и видим что действительно о еде этих двух объектов абсолютно равное то есть это как раз вот и говорит о том что при

о еде этих двух объектов абсолютно равное то есть это как раз вот и говорит о том что при создании 2 объект то есть при попытке создание второго объекта он на самом деле не был создан и вот этот переменной db2 она ссылается на тот же сам объект то есть у нас получилась такая картина когда мы пытались создать второй раз экземпляр класса до the bass то вот этот переменной тебе два она будет ссылаться на ранее созданный объект этого класса и второй объект создаваться уже не будет правду у этой

на ранее созданный объект этого класса и второй объект создаваться уже не будет правду у этой реализации которая привела есть один недостаток давайте вызовем метод connect у этих объектов начнете be correct и db2 connect посмотрим какие да да у нас на выходе получится смотрите в обоих случаях мы видим информацию которую мы прописали при попытке создание второго объекта по идее-то на верни то что бы ожидали если ранее уже был создан объектов с такими вот данными root пароль 1234 и порт 80 то

бы ожидали если ранее уже был создан объектов с такими вот данными root пароль 1234 и порт 80 то именно они и должны оставаться в созданном объекты не меняться если мы их явно не меняем а здесь это произошло почему смотрите вот здесь вот выше в методе init мы каждый раз создаем вот эти вот локальные свойства но либо создаем либо меняем из а не ради уже были созданы поэтому когда 2 1 вот здесь вот вызывается do the bass то также вызывает вот этот инициализатор и нет и соответствующей локальный

вызывается do the bass то также вызывает вот этот инициализатор и нет и соответствующей локальный свойства в объекте меняются чтобы это поправить по идее давно уже переопределить еще этот магический метод который называется кол но мы с вами о нем еще не говорили поэтому оставим реализацию нашего по таро синглтон вот в таком вот виде а из этого занятий вы должны просто поесть как работает вот этот магический метод неё и для чего он вообще нужен я думаю что вот это пройденный пример хорошо все

магический метод неё и для чего он вообще нужен я думаю что вот это пройденный пример хорошо все демонстрирует если все это понятно то переходить к следующему занятию [музыка]

#5. Методы класса (classmethod) и статические методы (staticmethod) | ООП Python

здравствуйте дорогие друзья меня зовут сергей балакирев и мы продолжаем тему методов объектно-ориентированного программирования до сих пор мы с вами объявляли методы просто как функции внутри класса например в классе вектор у нас есть две функции два метода это место и нет инициализатор и методы гадкого здесь у них есть вот этот первый параметр сел который является ссылкой на объект из которого эти методы были вызваны например если мы создаем объект этого класса вектор то есть макро пий своем

эти методы были вызваны например если мы создаем объект этого класса вектор то есть макро пий своем вектор и здесь должны указать два аргумента потому что здесь вот в инициализации мы прописали два аргумента задач при создании экземпляр класса тоже два аргумента душ передать ну например 1 и 2 а затем через этот экземпляр можно вызвать вот этот метод год корт 2 который у нас здесь определен он возвращает координаты поэтому я сохранить координат в переменный рез и выведу их в консоль все вот

возвращает координаты поэтому я сохранить координат в переменный рез и выведу их в консоль все вот таким образом мы можем объявлять обычные методы и соответственно их вызывает через экземпляр класса мы с вами об этом уже говорили и много раз делали кроме того мы также можем вот этот метод год корт вызвать и непосредственно через класс вектор то есть прописать за счет имя класса то уж класс это пространство имен и внутри пространства имен вектор у нас есть вот этот метод атрибут redcord но если

имен и внутри пространства имен вектор у нас есть вот этот метод атрибут redcord но если мы вот так вот просто запустим программу то у нас будет ошибка потому что ты тот первый параметр сел здесь у нас не определен мы явно в этом случае должны передать ссылку на экземпляр для которого будет выполняться данный метод ну так как у нас всего один объект в там и ссылку на этот объект вот так ты здесь и передаем теперь при запуске программы все сработает и мы видим координаты 12 как раз вот для этого

передаем теперь при запуске программы все сработает и мы видим координаты 12 как раз вот для этого объекта в это то что касается объявления обычных стандартных методов внутри классов помимо них мы можно объявлять еще два типа методов это так называемые статические методы и методы класса методы класса определяет спорта кого декоратора а статический с помощью такого вот давайте я присел на простом примере что они значит в начале вот сюда вот в наш класс мы добавим два атрибута то есть это будут

примере что они значит в начале вот сюда вот в наш класс мы добавим два атрибута то есть это будут атрибуты класса и принадлежать вот это но классу вектор а далее вот здесь вот объявим метод класса для этого я пропишу вот это декоратор класс мес от и затем мы объявим метод значит он объявляется абсолютно также то есть мы взять прописываю функцию затем имя функции но пусть она будет вот так в ли бейт и я открываю круглые скобки смотрите интегрированная среда сразу автоматически прописывают этот

и я открываю круглые скобки смотрите интегрированная среда сразу автоматически прописывают этот параметр сел с параметр сел с это ссылка на вот этого текущей класс вектор а далее при необходимости можно прописать еще какие есть параметры но я вот пропишу параметр арк и будем проверять если вот этот параметр арк попадает в диапазон от минков да макс корж то соответствует этот оператор ведь он будет возвращать true если арк попадает в этот диапазон и falls если не попадает то есть вот этот метод

возвращать true если арк попадает в этот диапазон и falls если не попадает то есть вот этот метод в лягает который определена на уровне класса то есть это метод класса который делает просто вот такую проверку не более того то есть метод класса в данном случае работает исключительно с атрибутами этого класса то есть мы можем совершенно спокойно обращаться вот к этим дата рыбу там но не может обращаться к локальным атрибутом экземпляров классов даже у нас вот здесь вот просто нет ссылки на

обращаться к локальным атрибутом экземпляров классов даже у нас вот здесь вот просто нет ссылки на экземпляр класса есть только ссылка на сам класс и через нее мы можем обращаться к атрибутам этого класса мало того мы этот метод в леббейк теперь можем вызывать непосредственно через класс вектор вот смотрите например вот здесь вот мы вызовем этот метод владеет вот таким образом и здесь перед этим вот этот уже второй аргумент арк но например со значением 5 выведем в консоль то что на свой счет

вот этот уже второй аргумент арк но например со значением 5 выведем в консоль то что на свой счет получится ну и запустим программу никаких ошибок и нету и мы видим что данный метод вылядит возразил true то есть метод класса мы можем совершенно спокойно вызывать через сам класс при этом не указываю вот этот первый параметр сел с он будет подставлен автоматически интерпретатором языка python то есть вот в этом отличие метода класса от обычного метода который мы с вами до сих пор объявляли то

есть вот в этом отличие метода класса от обычного метода который мы с вами до сих пор объявляли то есть вот здесь вот параметр cells идет если вот мы вызываем здесь вот гад корт то обязательно должны на уровне класса передать этот первый параметр то есть указать ссылку на экземпляр класса а если мы объявляем метод просто как метод класса то мы его уже вызываем без каких-либо дополнительных ссылок здесь уже сразу прописывает этот параметр 2 арк то есть это значение 5 это как раз есть вот это вот

здесь уже сразу прописывает этот параметр 2 арк то есть это значение 5 это как раз есть вот это вот арк и далее идет проверка в данном случае она проходит поэтому мы видим здесь вот в консоли значение true то есть появляется такой вот дополнительные удобства работы вот с такими вот методами на уровне класса правда конечно вот этот метод уже не можем использовать для изменений каких-либо значений экземпляров этого класса то есть отдельных объектов этого класса да уж по умолчанию такого метода

экземпляров этого класса то есть отдельных объектов этого класса да уж по умолчанию такого метода просто не ссылки на объект с которому он мог бы работать а во всем остальном методы класса и обычные методы они ведут себя о чем-то одинаково давайте мы воспользуемся вот эти вот методом класса внутри вот это вот метода init для проверки корректности координат x y я пропишу это в таком виде значит в начале вот эти вот переменные x и y то и свойства локальный x и y мы пропишем равный нулю а затем

в начале вот эти вот переменные x и y то и свойства локальный x и y мы пропишем равный нулю а затем прежде чем присвоить конкретное значение x y который мы передаем при создании объекта мы проверим допустим они или недопустимо для этого я как раз и вызову вот этот метод обладает для этого я могу и здесь прописать сам класс вектор и вызвать этот метод в людей указываем аргумент и x ну и соответственно тоже самое для значения y то есть вектор . вы людей и значение y если проверка проходит там а

тоже самое для значения y то есть вектор . вы людей и значение y если проверка проходит там а вот этот локальные свойства x и y меняем я сне проходит то не меняем они будто равна просто нулю и освещал запустить программу то вот эти вот значения 1 и 2 они допустим и поэтому были записаны внутри этого объекта а вот если мы что-то не допустим мы пропишем допустим здесь 200 поставил и запустим программу давай теперь видим значение 00 то есть вот этот первой строчкой здесь вы нет сработала а вот это

давай теперь видим значение 00 то есть вот этот первой строчкой здесь вы нет сработала а вот это вот условие оказалось ложным поэтому вот эти строчки не выполнялись конечно вот здесь вот было бы правильней обратиться к методу класса влияет не через имя вот это вот классы вектор а через вот этот непосредст параметр сел в то есть так тоже можно делать дело в том что вот этот параметр cells эта ссылка на текущий экземпляр класса он также содержит информацию о классе поэтому если мы пропишем self

на текущий экземпляр класса он также содержит информацию о классе поэтому если мы пропишем self то интерпретатор языка python поймет из какого класса вызывается метод холлидей метод класса и в качестве вот это вот первый параметр сел с подставит правильный класс вектор j в такое видео у нас программ становится более универсальной того что если мы увидели счет поменяем имя класса на какое другое то в самой программе ничего менять не надо здесь у нас использует сел с здесь у нас используется сел

в самой программе ничего менять не надо здесь у нас использует сел с здесь у нас используется сел и нигде не фигурирует сам класс вектор вот так рекомендуется делать то есть прописывать имя класса внутри вот здесь самого класса это не лучшая практика лучше использовать вот как раз вот эти вот параметры cls сэл ну или еще какие-то другие если они фигурируют зависит у нас внутри класса но и наконец третий тип методов это статические методы они определяют вот этим декоратором стать comes at с

третий тип методов это статические методы они определяют вот этим декоратором стать comes at с помощью него мы можем определить методы которые не имеют доступа некоторые бутово класса некоторые будто мы его экземпляров то есть создается некая независимой самостоятельная функция объявлена и внутри класса обычно это делает для удобства в тоже такая функция как правило функционально связана с тематикой самого класса вот давайте например внутри нашего класса вот здесь вот объём такой статический

самого класса вот давайте например внутри нашего класса вот здесь вот объём такой статический метод я его пропишу здесь вот ниже значит используем декоратор static мес от вот он и далее также определяем функцию то есть вот такой статический метод пусть этот мест у нас вычисляет квадратичную норму какого-либо вектора с координатами x и y то есть квадратичная норма радиус-вектора она вычисляется очень просто мы x умножаем на x плюс y умножить на y то есть x квадрате плюс y в квадрате но и

очень просто мы x умножаем на x плюс y умножить на y то есть x квадрате плюс y в квадрате но и вычисленные результат соответствовал возвращается смотрите здесь внутри функции уже нет никаких скрытых параметров только x y который мы сами прописали ну и на основе уже вот этих вот значений x y вычисляется квадрат нормы то есть квадрат длины радиус-вектора с координатами x и y в результате здесь мы имеем некую сервисную вспомогательную функцию который позволяет там вычислять квадрат нормы для

мы имеем некую сервисную вспомогательную функцию который позволяет там вычислять квадрат нормы для произвольного радиус-вектора давайте воспользуемся этой функции вы не этого класса я вы здесь в то место в или бейт пропишу вот этот метод норм два вызова его и укажут век ординаты ну например 5 и 6 запустим нашу программу и смотрите значит вот здесь вот первое значение 61 это как раз квадрат норба вот этот вектор 5 6 ну а 0 0 это координат который на существует давайте я уберу чтобы лишнего не

вот этот вектор 5 6 ну а 0 0 это координат который на существует давайте я уберу чтобы лишнего не было просто запущу еще раз программу и вот у нас отработал статический метод норм 2 который вычислил квадрат нормы причем этот же статический метод мы можем совершенно спокойно вызывать и внутри обычных методов но например вот здесь методе нет я вопросы качестве учебного такого-то варианта вызову вот этот лет норм 2 используя имя класса вектор до или правильнее здесь был бы написать вот так чтоб не

этот лет норм 2 используя имя класса вектор до или правильнее здесь был бы написать вот так чтоб не фигурировало имя класса запустим программу и здесь вот как раз мы при запуске видел что норма вектора вот здесь оказалась равной нулю потому что недопустимый параметр давать мы здесь пропишись от и допустим и 10 и 20 запустим еще раз программу видим нормы здесь 500 ну а норма вот так вот вектор ас kredo natur 5 6 это 61 то есть вот эти вот образом мы можем прописывать статические методы которых

kredo natur 5 6 это 61 то есть вот эти вот образом мы можем прописывать статические методы которых нету никаких дополнительных параметров кроме тех чтобы прописываем сами вы здесь это внутренне посредства вот это вот функции но именно из-за этого статические методы предполагается использовать только с этими параметрами x y хотя конечно же мы можем обратиться к атрибутам класса внутри этих статических методов формально может был прописать вот так указать имя класса ну и здесь вот какой нибудь

методов формально может был прописать вот так указать имя класса ну и здесь вот какой нибудь вот пара ампир атрибут взять макс корт так тоже будет работать если мы запустим программу все отработала то есть получается как бы чтобы и статического метода обратились который будут класса но так не рекомендуется делать потому что если изменится имя класса то соответственно мы должны будем мой здесь вот и не вектор тоже поправить если предполагается в каком-либо методе используется атрибуты класса

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

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

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

класс и через эту ссылку мы будем обращаться вот к этим вот атрибутом работать уже с локальными свойствами экземпляров класса здесь у нас непосредственно прямую не получится то уж просто нет ссылки на соответствующие экземпляры наконец я создам необходимо определить совершенно независимую какую-то сервисную функцию который бы работал с параметрами чтобы определяем непосредственно в ней то ее следует определить к статическую с помощь такого декоратор стать comes at соответствовало гает что она

определить к статическую с помощь такого декоратор стать comes at соответствовало гает что она будет работать совершенно независимо не обращаться некоторые бутом класса ни тем более к локальным атрибутов какого-либо экземпляра класса то есть она работает само по себе если вдруг по каким-то причинам понадобилось создать такую функцию то есть такой метод внутри класса то следует использовать такой декоратор стать комиссар вот три вот этих вот типа методов можно прописывать внутри класса языка

декоратор стать комиссар вот три вот этих вот типа методов можно прописывать внутри класса языка python обычные методы методы класса и статические методы я надеюсь из этого занятия вам стало понятно когда используя таких декоратора класс месяц и стать comes at но и в каких случаях следует прописывать методы на уровне класса и обычные статические методы [музыка]

#6. Режимы доступа public, private, protected. Сеттеры и геттеры | ООП Python

здравствуйте дорогие друзья с вами как всегда сергей балакирев на прошлых занятиях мы научились с вами создавать экземпляры классов и объявлять в них атрибуты и методы пришла пора сделать следующий шаг и познакомиться с механизмом ограничения доступа к данным и методом класса извне это основой механизма инкапсуляция давайте предположим что в нашей программе имеется такой простой класс с именем point когда создается экземпляр этого класса то соответственно вот эти вот свойство локальное свойства

когда создается экземпляр этого класса то соответственно вот эти вот свойство локальное свойства x и y которые создаются в этом экземпляре они доступны извне через вот эту ссылку pt то есть мы можем например плач функция print обратиться к свойству x и то же самое к свойству y и вывести например и хоть и да он в консоль запустим программу и ведь вот эти значения 1 и 2 который мы здесь вот передали в инициализатор этого класса кроме того мы эти свойства можно менять непосредственно вот здесь вот

в инициализатор этого класса кроме того мы эти свойства можно менять непосредственно вот здесь вот через эту ссылку птт и записать pt . x и присвоить какое ни другое значение при 200 или так сделать это . y и присвоить какой-нибудь недопустимое значение ну допустим строка то есть от быть строка корт y опять же запуская программу мы видим что вот этот локальную свойства x y были изменены так вот если мы не хотим чтобы программист пользователь этого класса point напрямую имел доступ каким-либо

если мы не хотим чтобы программист пользователь этого класса point напрямую имел доступ каким-либо локальным свойствам экземпляров этого класса то следует их помечать закрытыми как это делается в python ограничение доступа делается достаточно просто если мы перед именем атрибута прописываем 1 нижнее подчёркивание то это автоматически означает что атрибут приобретает режим доступа protected а если записывается 2 подчёркивания то это уже режим доступа про и вот ну а без подчеркиваний это по

если записывается 2 подчёркивания то это уже режим доступа про и вот ну а без подчеркиваний это по умолчанию режим доступа public то есть публичные доступной везде и отовсюду давайте разберем все это подробнее конечно у наших программах до сих пор использовался обычный публичный режим доз то есть вы прописывали атрибут вот таким вот образом икс игрек карты экскорт y и так далее то есть без каких-либо подчеркиваний но давайте посмотри что изменится если мы локальный атрибут определила так вот с

подчеркиваний но давайте посмотри что изменится если мы локальный атрибут определила так вот с этим нижнем подчёркиванием как я только что говорил это режим доступа protected то есть предполагать что к таким атрибутом мы можем обращаться только внутри класса и во всех его дочерних классах но дочерние класса это класс который наследуется отёка у базового мы об этом с вами еще будем говорить итак вот у нас два локальных свойства новых подчеркиваний x и подчёркивание y и вроде как извне мы к ним

вот у нас два локальных свойства новых подчеркиваний x и подчёркивание y и вроде как извне мы к ним не можем обратиться давайте это проверим вот эти строчки я уберу а есть в принципе напишу pt подчёркивание x и pt подчёркивание y запустим программу и у нас все работает то есть мы по-прежнему можем через ссылку pt и звания обращаться вот к этим свойством x и y тогда что меняет вот этот подчёркивание если мы по-прежнему в программе можем абсолютно также обращаться с этими свойствами локальными

если мы по-прежнему в программе можем абсолютно также обращаться с этими свойствами локальными свойствами что и с обычными публичными атрибутами дело в том что в python вот это вот нижнее подчёркивание лишь сигнализирует программисту что данные свойства является защищенным но никак явно не ограничивает доступ к нему извне и то есть вот это вот нижнее подчеркивание она лишь предостерегает программиста от использования этого свойства вне класса впоследствии это может стать причиной непредвиденных

от использования этого свойства вне класса впоследствии это может стать причиной непредвиденных ошибок например изменится версии класса в этот вот point и такое свойство с одним подчёркивания можете перестать существовать так как никто не предполагал доступа к нему извне поэтому к таким атрибутом лучше не обращаться напрямую а данного нижнее подчеркивание указывает нам что это внутренние служебные переменные давайте теперь посмотрим как работает режим доступа про и вот то есть это атрибута с

переменные давайте теперь посмотрим как работает режим доступа про и вот то есть это атрибута с двумя подчёркивания my и служит для того чтобы к ним обращаться только внутри текущего класса я добавлю еще одно нижнее подчёркивание у x и y так же вот здесь вот в принципе мы сделаем то же самое мы я добавлю подчёркивание здесь и вот здесь запустим программу и теперь мы уже видим что не можем напрямую обратиться вот к этому свойству 2 подчёркивания x через вот эту отсылку pt а вот вода 3 класса мы

обратиться вот к этому свойству 2 подчёркивания x через вот эту отсылку pt а вот вода 3 класса мы совершенно спокойно к не можем обращаться давайте для примера я определю еще один метод он будет называться сет корт и соответственно менять вот эти вот локальные атрибуты x и y сад из мы здесь вот просто скопирую вот эти две строчки отсюда вот а вот здесь вот ниже вызываем этот метод то есть запишем pt . садков и перейдем к теме другие координата допустим 10 и 20 выполним вот этот программу и

pt . садков и перейдем к теме другие координата допустим 10 и 20 выполним вот этот программу и никаких ошибок и нет это как раз и говорит о том что внутри класса вот к таким атрибутом с двумя подчёркиванием мы можем совершенно спокойно обращаться но извне уже доступа нету давайте я пропишу еще один метод который будет возвращать эти координаты чтобы сдать что это все действительно работает значит здесь будет арийцы он и мы возвратим вот эти от координаты в виде кортежа 32 подчёркивание x и сел

здесь будет арийцы он и мы возвратим вот эти от координаты в виде кортежа 32 подчёркивание x и сел в . 2 подчёркивания y далее вот здесь вот в принципе мы вызовем обратимся к этому методу год корт и запустим программу до видим что новые координаты как раз стали 10 20 благодаря вызова вот это вот методы сетка то есть смотрите что у нас здесь получилось в классе point есть два в таких вот вспомогательных методов сет корт и redcord которые работают вот с этими защищенными локальными атрибутами

методов сет корт и redcord которые работают вот с этими защищенными локальными атрибутами такие методы в объектно-ориентированном программировании называется сет и раме и gt раме иногда их ещё называют интерфейсные методами но спрашивается зачем понадобилось в классах создавать приватные атрибуты да еще и определять дополнительные методы для работы с ними извне я об этом уже говорил на самом первом занятии по объектно-ориентированному программированию когда обещал принцип инкапсуляция но скажу

занятии по объектно-ориентированному программированию когда обещал принцип инкапсуляция но скажу ещё раз класс в объектно-ориентированном программировании следует воспринимать как единое целое и чтобы случайно или намеренно не нарушить целостность работы алгоритма внутри этого класса то следует взаимодействовать с ним только через публичные свойства и методы в этом суть принципа инкапсуляция опять же представьте себе автомобиль в котором согласовано работают тысячи узлов а управление им

опять же представьте себе автомобиль в котором согласовано работают тысячи узлов а управление им предполагает только через разрешенной интерфейсы роль коробка передач педали газа и тормоза и тому подобное если во время движения вмешиваться напрямую вы его узлы например будем на ходу спускать воздух из shad то наверное ничего хорошего не получится то же самое можно сказать себя программисте который намеренно обходит запрет и обращается к скрытым атрибутом класса напрямую они через сито или

намеренно обходит запрет и обращается к скрытым атрибутом класса напрямую они через сито или гитары вот для этого и нужны эти интерфейсные методы конечно назначение сеттеров и гаттаров не только в том чтобы передавать значения между приватными атрибутами класса но и проверять их корректность например в нашем случае координаты должно быть числами поэтому прежде чем обновлять значение переменах следует проверить их тип данных для этого можно воспользоваться функцией type и прописать вот здесь вот

проверить их тип данных для этого можно воспользоваться функцией type и прописать вот здесь вот все три следующую проверку то есть мы проверим что вот этот переменной x она должна принимать сип или and или float то есть быть числом ну и то же самое мы сделаем и для y то есть также вызове функции то я при для y и это должно быть или and или float ну а вот эти вот две строчки уже будет выполняться по этому условию то есть видите что у нас здесь получилось сеттер помимо того что обновляет

по этому условию то есть видите что у нас здесь получилось сеттер помимо того что обновляет локальные свойства внутри экземпляра класса то есть приватные локальные свойства так он еще и проверять а допустим или те или иные значения если недопустимо то соответствующее локали свойство меняться не будут кстати вот здесь вот по элс мы можем еще сделать генерацию исключения то есть райс и тут мы напишем wella.ru и сообщение координаты должны быть числами вот таким образом если мы сейчас запустим

wella.ru и сообщение координаты должны быть числами вот таким образом если мы сейчас запустим нашу программу то она сработает никаких ошибок не будет но если вы здесь вот допустим поставить строку и запустить опять же то увидим как раз вот этот сообщение что координаты должно быть числами того что сработало вот это вот строчка мы перешли по лс да и соответственно идите вы здесь исключения вррр об исключениях мы с вами еще будем говорить я здесь спрос привел это как пример давайте продолжим

об исключениях мы с вами еще будем говорить я здесь спрос привел это как пример давайте продолжим совершенствовать наш класс point и добавим сюда приватный метод для проверки корректности координат приватный метод объявляется также как и приватная переменная то есть мой прописан ключевое слово def далее 2 подчёркивания который будет говорить о том что данный метод является приватным ну и здесь соответственно название метода пустят будет акку-чек вы дали вы здесь вот мы формируем этот метод и

соответственно название метода пустят будет акку-чек вы дали вы здесь вот мы формируем этот метод и давайте сделаем методом класса потому что он будет вызываться для конкретных координат и может быть будет обращаться с каким-то дополнительным атрибутом этого класса ну например чтоб проверить что координата x принадлежит определенному диапазоны чисел и не выходит за него поэтому я его вот этот метод chick-fil-a и сделаю методом класса об этом мы с вами тоже говорили для этого нужно

вот этот метод chick-fil-a и сделаю методом класса об этом мы с вами тоже говорили для этого нужно воспользоваться этим декоратором класс несет ну и соответственно вместо вот этого первого параметра я пропишу уселась то есть это будет ссылка на вот этот класс point ну а далее вот это вот картина ту которым будем проверять пусть она называется просто x затем внутри самого методом пропишем операторы цион и проверку что вот этот x является типом или int или float все вот таким образом он у нас

цион и проверку что вот этот x является типом или int или float все вот таким образом он у нас будет отрабатывать а далее вот здесь вот уже в сотрясет корт мы его вызовем вызовем сначала для икса то есть чакры от x и естественно здесь мы должны дать ссылку на этот метод через elf мы это сделаем ну это же самый для y то есть я просто скопирую вот этот фрагмент и вставлю вот сюда вот напишу место x y и у нас идет проверка и для икса и для y то есть у нас теперь получилось программы где мы в одном

y и у нас идет проверка и для икса и для y то есть у нас теперь получилось программы где мы в одном месте можно прописывать самые разные проверки для допустимости координат точек то есть если у нас как тот поэт проверка изменится в будущем добавим сюда что-то новое то это меняется буквально в 1 стр учите его так в этом преимущество такого подхода но это же самое высочества инициализатор и надо сделать то есть когда мы передаем катит координат по идее тоже надо делать вот такую проверку поэтому

то есть когда мы передаем катит координат по идее тоже надо делать вот такую проверку поэтому я скопирую этот вот условия добавлю сюда эти строчки сахар запишу вот так вот оао начальное значение приватных свойств x y у нас будет равна нулю все теперь у нас с вами в программе существует приватные локальные свойства и один приватный метод chick-fil-a давайте запустим программу посоле как она работает но в данном случае у нас получился исключению потому что вы здесь от ниже мы присваиваем строку

но в данном случае у нас получился исключению потому что вы здесь от ниже мы присваиваем строку то есть передаем строку уберем поставить число и тогда у нас уже все работает как надо то есть вот таким вот образом мы можем в классах определять приватной или защищенный protected свойства и соответственно методы но смотрите по идее вот кстати вот методом и свойствам мы извне обратиться не можем и об этом и я уже говорил то есть я сам сайт бт-2 подчеркиваний x запустить программу то будет ошибка

об этом и я уже говорил то есть я сам сайт бт-2 подчеркиваний x запустить программу то будет ошибка действительно мне можно обратиться к такому свойству но давайте посмотрим какие свойства вообще существует вот в этом экземпляре класса pt для этого я вот вызову такую функцию director at pt и посмотрим все свойства внутри этого экземпляра класса pt смотрите здесь есть два таких от свойства подчёркивание по ендова подчёркивание x и то же самое подчеркиваем по едва подчёркивание y вот это есть

по ендова подчёркивание x и то же самое подчеркиваем по едва подчёркивание y вот это есть кодовые имена вот этих вот приватных свойств который находится в экземпляре класса то есть мы на самом деле можем обратиться к этим свойством через вот такое вот кодовое имя давайте это сделаем я напишу здесь pt далее вот это вот название запустим программу и видим значение 10 то есть мы взяли вот этот приватный обратитесь к приводному свойству и получили его значение 10 однако вот так вот делать крайне не

обратитесь к приводному свойству и получили его значение 10 однако вот так вот делать крайне не рекомендуется и двойное подчеркивание внутри вот здесь вот класса то есть у свойств как раз говорит о том что работать с такими атрибутами нужно только через разрешенные интерфейсные метода иначе возможны при 2 цены ошибки если у вас все же появилась необходимость лучше защитить методы класса от доступа извне то это можно сделать с помощью специального модуля который называется exe файл его

от доступа извне то это можно сделать с помощью специального модуля который называется exe файл его предварительно нужно установить и после этого у нас программе будут доступны два декоратора я сейчас покажу пример их работа это мода и у меня уже установлен поэтому в начале здесь вначале программы я импортирую из этого мода 20-х декоратора праве вот и протектор как раз с их помощью мы можем делать приватный и защищенный методы то есть именно к методам это относится и давать в частности вот этот

приватный и защищенный методы то есть именно к методам это относится и давать в частности вот этот чек виллы мы сделаем приватным то есть запишем декоратор про и вот его первым и прописываем той сам бой здесь самым главным потом идет декоратор класс место так тоже может делать ну и соответственно сад и точек выл и уже становится более защищенным кроме того мы уберем вот эти два подчёркивания чтобы вот этот метод у нас стал как бы публичным и мы попробуем обратиться извне соответствовать здесь

вот этот метод у нас стал как бы публичным и мы попробуем обратиться извне соответствовать здесь вот мы тоже все поправил уберем два подчёркивания ну и соответственно дальше здесь вот через lpt обратимся к метод chick-fil-a и проверим 5 является допустимым значением или не является запускаем программу и видел вот такое сообщение об ошибке то есть мы пытаемся обратиться к приватного методу а он у нас защищен с помощью этого мода актив а если мы уберем вот это вот декоратор правила и запустим

у нас защищен с помощью этого мода актив а если мы уберем вот это вот декоратор правила и запустим нашу программу то уже никаких ошибкой будет то что метчик виллы стал методом уровне классы мы совершенно спокойно к нему сейчас можем обращаться но добавляя в этот декоратор про и вот у нас уже доступа извне к нему не будет и вот такая защита на уровне вот этот модуль exe файл является более сильной чем 2 от этих подчёркивания тоже по идее если он просто подчёркивание поставим то все равно сможем

чем 2 от этих подчёркивания тоже по идее если он просто подчёркивание поставим то все равно сможем обратиться к этому методу если запишем специальное имя то есть если вот здесь мы чек в ли-2 подчеркивая верную визита же 2 подчёркивание вот так вот и тогда вы делите то мы должны были бы написать так подчеркивание point два подчеркивает chick-fil-a запустим программу и все выполняется то есть вот как в принципе мы можем обойти вот эта вот защиту для доступа к привата методом но при использовании

в принципе мы можем обойти вот эта вот защиту для доступа к привата методом но при использовании exe файл уже так сделать не можем то есть это несколько более надежная защита но опять же использовать модуль exe файл следует только в том случае если действительно нужно по каким-то причинам очень надежно защитить те или иные методы чаще всего все же использует просто 2 подчёркивания и этого вполне достаточно дальше же использование этого класса идет о утку программиста если он сам зная видела

достаточно дальше же использование этого класса идет о утку программиста если он сам зная видела здесь u2 подчеркивая обходит эту защиту но как говорится это на его совести если потом программа перестанет работать сам виноват поэтому мы просто делаем 2 подчёркивания о методов либо у свойств и этого в 99 процентах случаев является достаточным я думаю этого занятий вам стало понятно как реализуется режима доступа public protect и правит а также как правильно обращаться к скрытым атрибутом через

режима доступа public protect и правит а также как правильно обращаться к скрытым атрибутом через интерфейсные методы цитры и гитары [музыка]

#7. Магические методы __setattr__, __getattribute__, __getattr__ и __delattr__ | ООП Python

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=CAx-NLFc-Z4! This is most likely caused by:

No transcripts were found for any of the requested language codes: ['ru']

For this video (CAx-NLFc-Z4) transcripts are available in the following languages:

(MANUALLY CREATED)
None

(GENERATED)
 - id ("Indonesian (auto-generated)")[TRANSLATABLE]

(TRANSLATION LANGUAGES)
 - ab ("Abkhazian")
 - aa ("Afar")
 - af ("Afrikaans")
 - ak ("Akan")
 - sq ("Albanian")
 - am ("Amharic")
 - ar ("Arabic")
 - hy ("Armenian")
 - as ("Assamese")
 - ay ("Aymara")
 - az ("Azerbaijani")
 - bn ("Bangla")
 - ba ("Bashkir")
 - eu ("Basque")
 - be ("Belarusian")
 - bho ("Bhojpuri")
 - bs ("Bosnian")
 - br ("Breton")
 - bg ("Bulgarian")
 - my ("Burmese")
 - ca ("Catalan")
 - ceb ("Cebuano")
 - zh-Hans ("Chinese (Simplified)")

- my ("Burmese")
 - zh-Hant ("Chinese (Traditional)")
 - co ("Corsican")
 - hr ("Croatian")
 - cs ("Czech")
 - da ("Danish")
 - dv ("Divehi")
 - nl ("Dutch")
 - dz ("Dzongkha")
 - en ("English")
 - eo ("Esperanto")
 - et ("Estonian")
 - ee ("Ewe")
 - fo ("Faroese")
 - fj ("Fijian")
 - fil ("Filipino")
 - fi ("Finnish")
 - fr ("French")
 - gaa ("Ga")
 - gl ("Galician")
 - lg ("Ganda")
 - ka ("Georgian")
 - de ("German")

- gaa ("Ga")
 - el ("Greek")
 - gn ("Guarani")
 - gu ("Gujarati")
 - ht ("Haitian Creole")
 - ha ("Hausa")
 - haw ("Hawaiian")
 - iw ("Hebrew")
 - hi ("Hindi")
 - hmn ("Hmong")
 - hu ("Hungarian")
 - is ("Icelandic")
 - ig ("Igbo")
 - id ("Indonesian")
 - ga ("Irish")
 - it ("Italian")
 - ja ("Japanese")
 - jv ("Javanese")
 - kl ("Kalaallisut")
 - kn ("Kannada")
 - kk ("Kazakh")
 - kha ("Khasi")
 - km ("Khmer")

- kl ("Kalaallisut")
 - rw ("Kinyarwanda")
 - ko ("Korean")
 - kri ("Krio")
 - ku ("Kurdish")
 - ky ("Kyrgyz")
 - lo ("Lao")
 - la ("Latin")
 - lv ("Latvian")
 - ln ("Lingala")
 - lt ("Lithuanian")
 - luo ("Luo")
 - lb ("Luxembourgish")
 - mk ("Macedonian")
 - mg ("Malagasy")
 - ms ("Malay")
 - ml ("Malayalam")
 - mt ("Maltese")
 - gv ("Manx")
 - mi ("Māori")
 - mr ("Marathi")
 - mn ("Mongolian")
 - mfe ("Morisyen")

- gv ("Manx")
 - ne ("Nepali")
 - new ("Newari")
 - nso ("Northern Sotho")
 - no ("Norwegian")
 - ny ("Nyanja")
 - oc ("Occitan")
 - or ("Odia")
 - om ("Oromo")
 - os ("Ossetic")
 - pam ("Pampanga")
 - ps ("Pashto")
 - fa ("Persian")
 - pl ("Polish")
 - pt ("Portuguese")
 - pt-PT ("Portuguese (Portugal)")
 - pa ("Punjabi")
 - qu ("Quechua")
 - ro ("Romanian")
 - rn ("Rundi")
 - ru ("Russian")
 - sm ("Samoan")

- qu ("Quechua")
 - sg ("Sango")
 - sa ("Sanskrit")
 - gd ("Scottish Gaelic")
 - sr ("Serbian")
 - crs ("Seselwa Creole French")
 - sn ("Shona")
 - sd ("Sindhi")
 - si ("Sinhala")
 - sk ("Slovak")
 - sl ("Slovenian")
 - so ("Somali")
 - st ("Southern Sotho")
 - es ("Spanish")
 - su ("Sundanese")
 - sw ("Swahili")
 - ss ("Swati")
 - sv ("Swedish")
 - tg ("Tajik")
 - ta ("Tamil")
 - tt ("Tatar")
 - te ("Telugu")
 - th ("Thai")

- sv ("Swedish")
 - bo ("Tibetan")
 - ti ("Tigrinya")
 - to ("Tongan")
 - ts ("Tsonga")
 - tn ("Tswana")
 - tum ("Tumbuka")
 - tr ("Turkish")
 - tk ("Turkmen")
 - uk ("Ukrainian")
 - ur ("Urdu")
 - ug ("Uyghur")
 - uz ("Uzbek")
 - ve ("Venda")
 - vi ("Vietnamese")
 - war ("Waray")
 - cy ("Welsh")
 - fy ("Western Frisian")
 - wo ("Wolof")
 - xh ("Xhosa")
 - yi ("Yiddish")
 - yo ("Yoruba")
 - zu ("Zulu")

#8. Паттерн "Моносостояние" | Объектно-ориентированное программирование Python

здравствуйте друзья я сергей балакирев и на этом занятии мы рассмотрим реализацию паттерном она состояния реализуемые на уровне классов и объектов на примере этого паттерна я хочу вам показать как можно в python легко и гибко управлять локальными атрибутами экземпляров класса вначале давайте разберем саму идею моно состояния представьте что у нас есть некий многопоточный процесс и в каждом потоки создает свой экземпляр класса с рейда то но она бы хотелось чтобы все экземпляры имели едины

потоки создает свой экземпляр класса с рейда то но она бы хотелось чтобы все экземпляры имели едины локальные свойства допустим вот такие вот локальные свойства и единой в том смысле чтобы они были общими для всех экземпляров от этого класса фрегата и изменения любого из них внутри какого-либо экземпляра отражалось бы и в других экземплярах вот это и есть мана состоянии реализуется она на python относительно просто давайте программе определила такой склонов с ребята и в и приватное атрибут

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

имя но пусть будет вот здесь ритатин далее да то пусть у нас будет пустой словарь ну и наконец о еде пусть будет значение 1 все мы определили с вами вот такой вначале словарь и далее мы еще должны сделать инициализатор интеле затар задает с почва гического метода init и внутри этого инициализатор пропишем такую вещь у каждого объекта у каждого создаваемого объекта есть коллекция dict как мы знаем это коллекция dict хранит как раз локальные свойства экземпляра класса а раз это так то пусть это

это коллекция dict хранит как раз локальные свойства экземпляра класса а раз это так то пусть это коллекция ссылается на вот этот вот наш словарь жертв от орз то есть когда мы будем создавать новый экземпляр кляр класса вот этого среда то-то у нас вот этот коллекция dict у каждого экземпляра будет ссылаться на вот этот вот словарь и в итоге мы ожидаем что у объектов этого класса будут общие свойства то есть у нас получается такая картина мы можем создавать множество объектов вот это вот класса

то есть у нас получается такая картина мы можем создавать множество объектов вот это вот класса с ребята и коллекций dict каждого экземпляра будет ссылаться на один и тот же словарь и в итоге мы как раз и получаем реализацию вот это вот паттерна мой на состояние в каждом экземпляре будут одни и те же свойства давайте посмотрим как это будет работать я вот этот класс определив консоли так будет удобней все это показывать наш моего и здесь определяем и соответствие можем создавать экземпляр этого

все это показывать наш моего и здесь определяем и соответствие можем создавать экземпляр этого класса я пропишу это так ссылка сейчас живет будет как раз ссылаться на первый экземпляр создаем и вот здесь вот справа мы видим что у этого экземпляра у нас как раз появились вот эти это локальные свойства сразу автоматически дата на это будет пустой словарь затем айди со значением 1 иным с именем slide 1 давайте создадим еще один экземпляр этого класса среда рта и посмотрим что у него получается

1 давайте создадим еще один экземпляр этого класса среда рта и посмотрим что у него получается значит тоже видел локальные свойства автоматически появились дата айди и найм то есть как раз вот эти вот локальные свойства который у нас находится вот в этом словаре shard от орз то есть у всех создаваемых объектов мы видим одни и те же локальные свойства но является ли они общими эти свойства или они независимы между собой давайте это проверим значит я потом в этом втором объекте течь 2 определю а

независимы между собой давайте это проверим значит я потом в этом втором объекте течь 2 определю а иди-иди будет другой со значением 3 смотрите что у нас получилось вот здесь вот те h2 действительно иди принимай значение 3 но в те эйч-1 то есть в первом экземпляре мы тоже видим атрибут а иди со значением 3 то есть вот эти вот локальные свойства которые здесь приведены они действительно оказываются едиными для обоих этих экземпляров мало того мы можем даже создавать новые локальные свойства

едиными для обоих этих экземпляров мало того мы можем даже создавать новые локальные свойства напиток течь один свойствам зовем от ранее но и присвоим какой-нибудь значение пусть будет строка new at our выполним и смотрите у нас это свойство атр new появилась и в первом объекте и во втором объекте автоматически это как раз и говорит о том что локальное пространство имен для этих обоих объектов оказывается едино и вообще для любого количества объектов вот это вот класса у нас будет создаваться

едино и вообще для любого количества объектов вот это вот класса у нас будет создаваться использоваться одно и то же локальное пространство имен который определяется под этим вот словарем вот так вот с помощью данного класса мы с вами реализовали паттерн моно состояние на языке python возможно вас здесь остался вопрос а где все это может использоваться честно говоря паттерном она стояние мне ни разу не приходилось применять на практике я привел его здесь так как он хорошо показывает как гибко

разу не приходилось применять на практике я привел его здесь так как он хорошо показывает как гибко можно управлять поведением объекта класса за счет переопределения от этого цэлт стандартов свойства дик в каждом экземпляре чтобы он вел на общий словарь меня я вот эту ссылку оказывается можно существенно менять стандартное поведение экземпляров класса касательно их локальных атрибутов это и было целью данного занятия расширить ваше понимание а работе с атрибутами объект в класса ну и я надеюсь

целью данного занятия расширить ваше понимание а работе с атрибутами объект в класса ну и я надеюсь мне это удалось [музыка]

#9. Свойства property. Декоратор @property | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этого занятия вы узнаете о более удобно способе работы с приватными атрибутами через специальный объект проповедь и который переводится как свойства о чем здесь речь давайте представим что мы разрабатываем класс для хранения обработки данных о персонале и для простоты объем будут сохраняться имя и возраст сотрудника видела таких вот приватных атрибутов 2 подчёркивания на ми-2 подчёркивания old разумеется чтобы обращаться к таким закрытым данным

2 подчёркивания на ми-2 подчёркивания old разумеется чтобы обращаться к таким закрытым данным необходимо сеттеры гетеро пропишем их для возраста для old в начале я определю геттер назову get old ну и соответственно он будет возвращать на вот это вот закрытые приватные свойства который называется 2 подчёркивания old это же самый центр назовем сет old он будет принимать еще один дополнительный параметр его так и напишу old ну и соответственно вот это вот приватном у свойства old присваивать новые

его так и напишу old ну и соответственно вот это вот приватном у свойства old присваивать новые значения ну я надеюсь вы помните для чего вообще делают такие приватные закрыты атрибуты а также прописывает дополнительную такие вот геттер и сеттер и мы с вами об этом уже говорили да это необходимо чтобы не нарушался внутренняя логика работы алгоритма класса а взаимодействие с классом его объектами извне осуществлялась бы только через разрешено и публичные методы и свойства если вам это непонятно

извне осуществлялась бы только через разрешено и публичные методы и свойства если вам это непонятно то посмотрите внимательно предыдущие занятие где мы с вами об этом говорили и так теперь мы можем создать экземпляр этого класса я сделаю это следующим образом даже класс персон в начале мы даже указать имя я укажу ими сергей и дали указать путь будет 20 а затем через геттер и сеттер мы можем менять вот этот локальные свойства old и давайте через сеттер я изменю на 35 и соответственно спать

менять вот этот локальные свойства old и давайте через сеттер я изменю на 35 и соответственно спать функции pride в консоль выведу с помощью опять же гетеро вот этого текущий возраст запустим программу и видим вот это вот возраст 35 то есть изначально он был 20 а есть мы изменили на 35 из а то есть выводим уже его как 35 все это мы с вами уже умеем мы знаем но здесь есть маленькая проблема нам нужно прописывать геттер и сеттер и для разных приватных атрибутов например добавить еще два для имени

прописывать геттер и сеттер и для разных приватных атрибутов например добавить еще два для имени в результате пользователю этого класса то есть программиста придется запоминать и держать в голове название всех вот этих вот центров егоров что очень неудобно как можно было бы упростить работ с таким классом один из способов воспользоваться объектом property давайте посмотрим на конкретном нашем примере как это можно сделать для этого самом классе person мы добавим еще один атрибут который будет

как это можно сделать для этого самом классе person мы добавим еще один атрибут который будет называться просто out и он будет являться объектом вот это вот класса пропорция и при создании экземпляр этого класса мы вначале вот здесь вот первым параметром передает ссылку на gt-r то есть функцию get out а вторым параметром вторым аргументом ссылку на функцию сэр пол то есть на сетар что у нас здесь своим получилось смотрите из каждого экземпляра класса мы совершенно спокойно можем обращаться к

своим получилось смотрите из каждого экземпляра класса мы совершенно спокойно можем обращаться к атрибуту old вот этот класс a person этот атрибут является объектом пропорции данный объект так устроен что при считывании данных то есть если мы запишем такую строчку п . аут то есть обратилась водка это вот атрибуту к свойству out the автоматически будет вызван в этот вот better который мы здесь указали первым аргументом а когда идет запись данных то автоматически вызывает вот этот сеттер и

указали первым аргументом а когда идет запись данных то автоматически вызывает вот этот сеттер и отрабатывает вот этот вот метод в результате мы через один атрибут класса old можем считывать данные из вот это вот приватного свойства или записывает данные в это же приватное локальные свойства видеть как это удобно то есть вам не нужно запоминать имена gtr в сеттеров вопрос то использует этот имя old для того чтобы прочитать данные и записать вот в общем-то для этого и предназначен вот этот

имя old для того чтобы прочитать данные и записать вот в общем-то для этого и предназначен вот этот объект свойство пропорции давайте убедимся что у нас программе это тоже все будет работать значит вы здесь вот я первым делом просто с помощью вот это вот свойство old объекта свойства от выведу возраст ну вы видите вот это вот ожидаемое значение 20 или можно с помощью этого же самого свойства атрибута old записать значение допустим 35 а затем вывести его запускаем программу и уже видя вот это

old записать значение допустим 35 а затем вывести его запускаем программу и уже видя вот это вот измененное значение 35 и чтобы убедиться что действительно изменение коснулось вот это вот приватного частного свойства объекта п я здесь дополнительно выведут этот словарь dict смотрите вот здесь вот вот этот приватное свойства она называется уже вот так вот и принимает новый зачин 35 который мы здесь это изменили давайте прокрутим это еще раз в голове чтобы все окончательно уложилась я сделаю

здесь это изменили давайте прокрутим это еще раз в голове чтобы все окончательно уложилась я сделаю следующим образом сначала в некую переменную а прочитаю данные из вот это вот свойство old а затем мы туда будем записывать вы здесь вот поставить точка останова запущу программу в режиме отладки и в этом в этой строчке нажму клавишу f7 чтобы вошли не посредства вот в этот класс смотрите после нажатия клавиши f7 мы перешли как раз вот в этот better этот кадр сейчас он вернет вот этот локальные

клавиши f7 мы перешли как раз вот в этот better этот кадр сейчас он вернет вот этот локальные свойства out и у этого локально свойства old значение 20 то есть она вернет значение 20 выполняем с ручкой нажимаем f8 мы возвращаемся сюда вот я нажму еще раз f8 и мы видим что вот эта перемена a ссылается на то же самое значение 20 который вернул тот better дали вот здесь вот в этой строчке я нажму опять же и всеми когда мы присваиваем какое-либо значение и видите мы попадаем уже вот в этот сектор то

же и всеми когда мы присваиваем какое-либо значение и видите мы попадаем уже вот в этот сектор то есть сеттер который определили вторым аргументом у объекта пропорция соответственно вот это локальный свойство здесь изменится на новое то что вот этот параметр old он принимает значение 35 мы сейчас локальное свойства вот в это запишем новые значение 35 нажимаем f8 она изменилась и теперь в локальном свойств и вот этого значения 35 границей и вот в консоли когда мы отображает словарь dict мы как

свойств и вот этого значения 35 границей и вот в консоли когда мы отображает словарь dict мы как раз это и видим то есть все работает вот именно в таком виде но здесь у вас может возникнуть резонный вопрос а почему вот в этой строчке когда мы ее выполняем не создается новое локальные свойства внутри объекта п как это был у нас ранее в программах а обращается именно вот к этому атрибута old класс a person то есть смотрите если мы здесь обращались не вот к этому-то атрибут свойства old а какой

a person то есть смотрите если мы здесь обращались не вот к этому-то атрибут свойства old а какой нет рукава на протокол 2 и запустили бы программу то нас вы здесь будут просто в локальном пространстве имен объект т.п. создалась бы это новые свойства но когда мы пишем просто от этого не происходит запускаем программу и здесь в локальном пространстве не создаётся никакого нового свойства хотя свойства und здесь в локальном пространстве нету и она по идее здесь должно был появиться все дело в

und здесь в локальном пространстве нету и она по идее здесь должно был появиться все дело в приоритете если в классе задан вот такой вот атрибут атрибут свойства то в первую очередь выбирается именно она даже если в экземпляре класса есть локальные свойства с таким же именем давайте это проверим вот здесь вот мы с помощью вот такой конструкции dict пропишем локальные свойства с тем же именем то есть мой его искусить она сами создадим но и пусть она ссылается на строчку то что old и она объект п

мой его искусить она сами создадим но и пусть она ссылается на строчку то что old и она объект п если мы сейчас опять же запустим программу выполнимые то смотрите у нас действительно есть локальный свойство out который является строкой и в то же время вот когда выполнялось эта строчка п . а то равняется 35 то у нас вот это вот локальное свойства old 2 подчёркивания old приватная изменилось на новое значение 35 то есть вот в этой 17 строчки сработал центр то есть мы обратились именно вот к этому

значение 35 то есть вот в этой 17 строчки сработал центр то есть мы обратились именно вот к этому атрибуту объекту в свойства property класса персам это как раз вот и говорит нам о том что приоритет у такого атрибута выше чем приоритет у любого локального свойства которое может присутствовать в экземпляре класса а вот если этот атрибут all the будет ссылаться не на вот этот объект пропорция скажем на какое-нибудь значение на число 4 здесь мы поставим комментарий есть также я поставлю в

скажем на какое-нибудь значение на число 4 здесь мы поставим комментарий есть также я поставлю в комментарии в этой строчке и запустим программу то смотрите выводится уже вот когда мы print выполняем здесь п . old выводится вот это вот строчка то есть берется именно локальное свойства из этого экземпляра класса а не вот этот атрибут класса потому что требует класс уже стал обычным числом а не объектом про пальцы и здесь начинает отрабатывать знакомые нам приоритеты сначала берется свойства и

про пальцы и здесь начинает отрабатывать знакомые нам приоритеты сначала берется свойства и злаками области а если она не находится то только в этом случае берется соответствующие свойства и из пространства имен класса то есть если бы я и здесь вот тоже поставил комментарии вот так вот и запустил программу то мы уже увидели бы значение 4 но если у нас old это именно объект свойства то она берется в первую очередь даже несмотря на то что в экземпляре класса тоже может присутствовать точно такое

в первую очередь даже несмотря на то что в экземпляре класса тоже может присутствовать точно такое же свойства с тем же самым именем auth то есть вот этот момент следует иметь ввиду приоритета вот вот такого объекта свойства выше чем при обращении к приватным свойства вадим ляхов класса и так теперь у нас есть класс и мы можем менять в локальный свойства old экземпляров класса через единый атрибут от то есть учитывать информацию и записывайте и это гораздо удобнее использование центров и г

от то есть учитывать информацию и записывайте и это гораздо удобнее использование центров и г киров здесь всего один атрибут и через него и естественным образом происходит взаимодействие закрытом свойство лт я думаю из этого примера вы хорошо поняли как создается объект property и для чего он нужен однако в нашей реализации есть некое функциональное дублирования мы можем работать с приватом свойствам old и через вот этот объект свойства и через геттер и сеттер конечно это не критичный момент и

old и через вот этот объект свойства и через геттер и сеттер конечно это не критичный момент и на него можно не обращать внимание но на мой взгляд было бы лучше если бы у нас был один единый интерфейс взаимодействия с этим вот свойствам out как это можно сделать вот этот класс пропорция перейду сюда в python концов он имеет следующие методы то есть я вот выполню создам экземпляр этого класса и через x вот смотрите здесь есть метод сеттер потом есть метод который зывается gt-r но им конец метод

x вот смотрите здесь есть метод сеттер потом есть метод который зывается gt-r но им конец метод который называется david r вот все эти три метода сеттер gt r & d литр это есть ни что иное как декораторы эти декораторы мы можем использовать при создании объекта свойства ну что такое декораторы мы с вами уже подробно об этом говорили в базовом курсе по пальцам ссылка на этот урок будет падать видео о в двух словах декоратора это функция которая расширяет функционал другой функции и смотрите в

о в двух словах декоратора это функция которая расширяет функционал другой функции и смотрите в итоге благодаря вот этим вот декоратором мы можем вот это вот строчку которая нас здесь с вами записано переписать и в таком виде вот эти вот аргументы get old set out я уберу они же пропишу следующие переменные old присвою то что вернет нам сеттер но и в качестве с ветром и здесь укажут соответствующий сеттер set out они же мы тоже самый пропишем для better'n при здесь будет геттер и соответственно

сеттер set out они же мы тоже самый пропишем для better'n при здесь будет геттер и соответственно gold все вот эти вот строчки они полностью эквивалентны если мы здесь качестве аргументов передадим геттер и сеттер но мы переписали их с помощью декоратора и если мы запустим нашу программу то все будет работать абсолютно также так вот к чему я это говорю мы можем использовать эти декораторы чтобы сразу нужный нам метод класса превратить в объект свойство пропорции делается это очень просто перед

нужный нам метод класса превратить в объект свойство пропорции делается это очень просто перед гитлером ставится прописывается такой декоратор который так и называется в пропорции обратите внимание обязательно перед гитлером они перед сеттером и по идее теперь вот этот глиттер представлять собой объект свойство для считывания вот это вот приводом свойства old давайте в этом убедимся значит я пропишу и вот за счет вместо п . old and show п . by the old запущу программу и действительно мой

я пропишу и вот за счет вместо п . old and show п . by the old запущу программу и действительно мой считывают этого значения 20 но правда записывать вот какой то новые значения через вот это вот свойство get old у нас сейчас не получится потому что сеттер у нас не определен мы определили через вот эту декоратор пропорция только ветер чтобы определить центр нам нужно вот перед этим в сеттером прописать декоратор который уже будет называться get out даже вот это вот get old становится объектом

декоратор который уже будет называться get out даже вот это вот get old становится объектом property и в этом объекте property как мы знаем есть вот такой декоратор сеттер поэтому его так бежим . setter и чтобы все работало вот этот метод сеттер который нас был сидр нужно звать таким же именем то есть get out то есть вот эти вот именно методов должны совпадать когда мы используем дать его декораторы но а все что ниже здесь я утру беру и соответственно пустим программу теперь все работает и

но а все что ниже здесь я утру беру и соответственно пустим программу теперь все работает и сеттер сработал и геттер сработал и мы видим здесь значение 35 то есть вот эти вот образом мы с вами создали новый объект свойства с именем gold но давайте вы все-таки сделай просто именем от как это у нас с вами ранее было то есть вас зависит vizio но им не стоит old пропишем out я теперь наш свойство и здесь так и называется out то есть мы можем туда что-то записывать и сотрясать считывать информацию

здесь так и называется out то есть мы можем туда что-то записывать и сотрясать считывать информацию то есть то что мы сейчас с вами сделали это эквивалентно тому что было ранее только теперь у нас нет отдельного геттер и сеттер а для работы вот эти вот приватом свойства mode то есть теперь нет функционального дублирования и именно так вот чаще всего на практике используют то есть ясно уже создать объект свойство для работ с каким-то закрытым защищенным свойством то прописывают этих декораторы и

объект свойство для работ с каким-то закрытым защищенным свойством то прописывают этих декораторы и получается объект свойство ну и в заключении этого занятия давайте пропишем еще д литр для вот этого свойства old для этого используется такой декоратор для литр он так и называется соответствием место мы должны назвать абсолютно также out и делать он будет простой вещи он должен удалять вот это вот свойство 2 подчёркивания out то есть вот для этого и предназначен для литр он вызывается когда

вот свойство 2 подчёркивания out то есть вот для этого и предназначен для литр он вызывается когда происходит удаление определенного свойства ну и чтобы увидеть как это работает я здесь туда льют это свойство all то есть мы удаляем а именно свойства out как бы но на самом деле вызовется вот этот до лета и будет удалено вот это вот приватное свойства 2 подчёркивания old из нашего экземпляра класса давайте по 40 как это все будет работать запустим программу действительно мы здесь видим что уже не

давайте по 40 как это все будет работать запустим программу действительно мы здесь видим что уже не можем обратиться к этому природному свойству поэтому я просто пишу print и отображает этот коллекцию dict и здесь мы видим только вот этот локальное свойства найму то есть сработал этот отель это и было удалено вот это вот локальное свойства конечно его и легко создать если мы через вот это вот объект свойство присвоим какое-то новое значение и она у нас здесь вот снова появляется со значением 5

свойство присвоим какое-то новое значение и она у нас здесь вот снова появляется со значением 5 вот так вот достаточно гибко можно работать с приватными закрытыми локальными свойствами через объект свойство пропорции надеюсь из этого занятия в зале что это такое за чем надо и как формировать объекты свойства через класс пропорций и через декораторы [музыка]

#10. Пример использования объектов property | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии мы рассмотрим один практический пример использование объектов свойств рапорте с которым познакомился предыдущего занятия надеюсь что из этого урока вы лучше поймете зачем они нужны и как применяется на практике давайте как и в предыдущем занятии объявил класс person который будет представлять данные о персонале некоторые учреждения и предположим что отдел кадров от нас требует хранить следующие персональные данные а именно фамилия

предположим что отдел кадров от нас требует хранить следующие персональные данные а именно фамилия имя отчество возраст сотрудника это должно быть целое число от 14 до 120 серию и номер паспорта вот в таком формате то есть здесь x от любой цифра ну и вес в килограммах это вещественное число от 20 и выше то есть вот такие вот данные нам нужно с вами хранить в классе персон и первое чем сталкивается программист как представить описать эти данные на уровне программы я и сделаю следующим образом

программист как представить описать эти данные на уровне программы я и сделаю следующим образом значит фамилиями участвует будет список из трех строк фамилия имя и отчество возраст должно быть целым числом паспорта это тоже быть строка вот в таком вот формате ну и соответственно вес просто обычно вещественное число от 20 и выше то есть вот так вот а мой в программе будет представлять все эти данные и соответствовать висят в классе person когда мы вызываемый инсульта то есть когда создается

данные и соответствовать висят в классе person когда мы вызываемый инсульта то есть когда создается экземпляр этого класса как раз у нас и формируется дано вот эти вот образом то есть фио это должен быть список all the бы чем целым числом ps строка a white это вещественное число но пока мы эти ограничения здесь не учитываем давайте сделаем это и я пропишу несколько вспомогательных методов класса для проверки корректности каждого переданного значения и начнем с проверки фамилии имени отчество

для проверки корректности каждого переданного значения и начнем с проверки фамилии имени отчество для этого я пропишу следующий метод уровне класса для этого воспользуемся декоратором класс место по которому с вами также говорили но и пульс называется этот метод ворифа и фио соответственно у нас будет первый параметр силы ссылка на класс второй параметр мы дополнительно пропишем это фио то есть вот этот параметр фил который передается доу инициализатор это мы предполагаем строка и через пробел

этот параметр фил который передается доу инициализатор это мы предполагаем строка и через пробел строке будет записано фамилия имя и отчество и первым делом и здесь проверю что это действительно строка для этого воспользуемся функцией type и соответствует от фио должно быть строкой то есть два равно стр если это не выполняется то есть не равно проверка на неравенство то у нас генерируется исключение type-r то есть неверный тип данных ну и сообщение что фио должно быть строкой далее если это

type-r то есть неверный тип данных ну и сообщение что фио должно быть строкой далее если это условие проходит ему попадаем на следующую строчку вот это вот метода мы эту строку фио будем разделять то есть мы вызовет сплит и по идее так как через пробел все должно быть записано мой здесь это мы должны на выходе получить список из фамилии имени и отчества давайте проверим что длина этого списка действительно равна трем то есть мы обратное условие дел огни равна трем если не равна трем то опять же

равна трем то есть мы обратное условие дел огни равна трем если не равна трем то опять же генерируем исключения type r и здесь у нас будет неверный формат записи после этого я бы хотел проверить что по фамилии имени и отчества используется только буквенные символы и символ дефиса как это сделать для этого я создам вспомогательного такую коллекцию литр с той строку который будет содержать все допустимые символы и все допустимые символы будто определяться следующими атрибут alt следующими

допустимые символы и все допустимые символы будто определяться следующими атрибут alt следующими параметрами значит а skaters это набор латинских букв малых и больших вот это вот а требует класс который мы сейчас с вами пропишем с рус это набор русских букв а это русских заглавных букв значит выделить вот в классе person мы первым делом пропишем вот эти вот атрибуты они будут следующие я заранее сформировал чтобы сейчас не прописывать не тратить на это время по алфавиту от а до я все буквы и

сформировал чтобы сейчас не прописывать не тратить на это время по алфавиту от а до я все буквы и вот этот символ дефиса а вот этот коллекция с опора на соответственно у вас почта кого-то методом и переводим все вот эти вот буквы верхний регистр ну и нам осталось то этот коллекция эту коллекцию мы можем взять из объекта string значит вы здесь это мы импортируем делая from string и там есть вот такая как раз коллекция который содержит все латинские буквы все вот мы с вами сформировали

вот такая как раз коллекция который содержит все латинские буквы все вот мы с вами сформировали разрешенные символа фамилия имя отчество затем вы здесь ниже мы переберем вот этот коллекцию f который хранит фамилия имя отчество с помощью циклов а значит с н.ф. ну и первым делом проверим что вот этого имени фамилия его число должно быть хотя бы один символ это мы сделать функционален от с если это меньше единицы то есть ноль то мы генерируем опять же исключения пасет будет type r и сообщение что

меньше единицы то есть ноль то мы генерируем опять же исключения пасет будет type r и сообщение что в фамилия имени учиться должен быть хотя бы один символ далее если это условие срабатывает а мы проверим следующее условие что по фамилии имени отчество содержится допустимый символа я это сделаю следующим образом напишу с methods 3 по вызову и в качестве аргумента этого метода передал вот эта вот коллекцию letters разрешенных символов то есть если фамилия имя и отчество содержит только

эта вот коллекцию letters разрешенных символов то есть если фамилия имя и отчество содержит только разрешенной символа тот этот стрип их все удалит и длина полученной строки должна быть равна нулю то есть если она у вы дуете длина не равна нулю значит она содержит какой-то недопустимый символ если это так то мы генерируем исключение точность будет также type r есть сообщение что фил можно использовать только буквенные символы и дэвис все вот такая проверка для корректности фамилии имени

использовать только буквенные символы и дэвис все вот такая проверка для корректности фамилии имени отчеству нас с вами получилось то есть вот такой вот метод и чтобы этот метод у нас отрабатывал мы в начале его выделить своим вызовем через л с л . вари fight фио ну и соответственно дойдем вот этот параметр фио то есть смотрите если при вызове этого метода не возникнет ни одного исключения то программа пойдет дальше если же возникнет исключение то мы увидим его в консоли и программы завершит

пойдет дальше если же возникнет исключение то мы увидим его в консоли и программы завершит свою работу если конечно мы эти исключения как-то дополнительно не обрабатываем как обрабатывать исключением об этом еще будем с вами в будущем говорить но пока мы сделаем вот все именно так давайте попробуем ниже создать объект с неверной записью фамилии имени и отчеству значит по умолчанию у нас будет вот такой фамилии имени отчество сейчас оно записано верно если запустим программу то никаких ошибок

такой фамилии имени отчество сейчас оно записано верно если запустим программу то никаких ошибок мой вес не видим значит все отработал так как надо но давайте здесь вот допустим поставим балакирево 2 запускаем программу и видим что фамилии имени отчества божий спорт только буквенной символы и дефис а у нас здесь цифра поэтому возникло такое исключение или если вы здесь пробел убрать и запустить опять же то неверный формат фио то есть у нас принципе проверка отрабатывает и вот в данном учебном

опять же то неверный формат фио то есть у нас принципе проверка отрабатывает и вот в данном учебном варианте она работает вполне неплохо отлично 1 метр рифов его мы сделали давайте пропишем следующий он будет у нас проверять возраст там несколько проще это тоже будет метод класса класс mesut значит а называться будет ворифа old ну и соответственно здесь мы будем передавать этот возраст который указываем при создании экземпляра класса далее мы проверим если тип вот это вот возраста не

который указываем при создании экземпляра класса далее мы проверим если тип вот это вот возраста не соответствует in the photos мы договорились что это целое число должно быть или возраст будет меньше 14 или он будет больше 120 тоже мы договорились также что он вот в этих диапазонах тоже находиться от 14 до 120 если это не так то мы генерируем исключение bridge type r и здесь сообщение что возраст должен быть целым числом от такого диапазоне в принципе это все это достаточно такой простой метод

должен быть целым числом от такого диапазоне в принципе это все это достаточно такой простой метод простая проверка поэтому сразу пропишем следующий метод который будет у нас проверять уже вес потому что вес принцип проверяется аналогичным образом и даже то это все скопирую сюда вставлю и у нас получится следующий метод для веса ночь называться будет ворифа уэйд здесь я просто укажу w для удобства тип у нас должен быть float вещественной таш мы так решили ну и соответствует этот вес должен быть

тип у нас должен быть float вещественной таш мы так решили ну и соответствует этот вес должен быть от 20 килограмм и выше поэтому пропишу здесь вот так а это условие ну а сообщение об ошибке бы такое вес должен быть вещей с числом от 20 и выше ну и наконец последний метод который будет проверять корректность переданы паспортных данных то есть серию и номер паспорта это тоже быть класс мест естественно назовем этот метод were five ps далее первым делом мы проверим что есть паспортные данные

назовем этот метод were five ps далее первым делом мы проверим что есть паспортные данные является строкой то есть если это не строка там и сгенерируем сообщение об ошибке type r и здесь будет сообщений паспорт должен быть строкой далее так как эта строка там и теперь совершенно спокойно можем вызвать метод сплит и так как формат этой строке вот такой вот то есть это цифры записанный через пробел то после сплита у нас должна быть коррекция список состоящий из двух элементов поэтому первым делом

то после сплита у нас должна быть коррекция список состоящий из двух элементов поэтому первым делом мы это с вами здесь и проверим что вот это вот длина этого списка который нас получилось если она не равна 2 то опять же мы генерируем сообщение об ошибке type r я напишу неверный формат паспорта и кроме того давайте сразу здесь проверим что длина первого элемента списка из она не равна 4 она должна быть равна 4 или длина вот этот 2 элемент этого списка не равна 6 она должна быть равна 6 то в

быть равна 4 или длина вот этот 2 элемент этого списка не равна 6 она должна быть равна 6 то в принципе генерируется то же самое сообщение то есть это неверный формат паспорта если же все это соблюдается то дальше ниже мы должны проверить что все эти данные состоят из цифр сделаем это следующим образом значит с почте циклон фома переберём все это коллекцию с и здесь проверим если у нас вот этот метод из digit будет возвращать фолз то значит а вот в этой строке существует не цифровые символы ну

из digit будет возвращать фолз то значит а вот в этой строке существует не цифровые символы ну и мы соответственно генерируем исключение арок где напишем что серии номер паспорт должно быть числами все вот такой метод для проверки паспортных данных у нас своим получился теперь осталось все вот эти вот методы вызвать не посредством здесь в инициализатор и даже 1 mid нас уже вызывается и добавим еще три ворифа и old для проверки возраста вфпс для проверки паспортных данных и ворифа white для

еще три ворифа и old для проверки возраста вфпс для проверки паспортных данных и ворифа white для проверки веса в результате если вы здесь вот в параметрах что-то мой передайте мне верно то сработает вот здесь это исключение и программа завершится как ведь все достаточно просто теперь программе стоить уверен что в приватных свойствах экземпляров класса будут храниться корректной с точки зрения формата данные о пользователях ну и следующий шаг это сделать интерфейсы для взаимодействия с этими

формата данные о пользователях ну и следующий шаг это сделать интерфейсы для взаимодействия с этими данными для этого достаточно воспользоваться объектами свойствами о которых мы с вами говорили на предыдущем занятии и первое такое свойство будет для получения доступа к фамилии имени и отчества значит вы здесь вот ниже через декоратор пропорции мы создадим better для работы с фамилий именем и отчеством за что она будет мест будет а-20 так вот fila и соответственно здесь будем возвращать список

за что она будет мест будет а-20 так вот fila и соответственно здесь будем возвращать список которые содержат фамилия имя и отчество и мы сделаем так что вот этот объект свойства фио будет являться только геттером cetera определять для него не будем так в принципе тоже можно делать то есть и само предполагаем что фамилия имя отчество в дальнейшем меняться не будет хотя это наверно не совсем правильно но с точки зрения учебного примера я хочу вот сделать вот именно так чтобы фамилия и имя и

но с точки зрения учебного примера я хочу вот сделать вот именно так чтобы фамилия и имя и отчество у нас последствия не изменялась ну а остальные свойства будем делать изменяем то есть пропишу для них и катер и сеттер следующее это будет для возраста значит что здесь опять же декоратор про партер определим метод old который будет называться это better поэтому мы вернем соответственно возраст сел в . 2 подчёркивания out ну а далее сеттер значит это будет уже декоратор out . сектор и метод

сел в . 2 подчёркивания out ну а далее сеттер значит это будет уже декоратор out . сектор и метод который должен называться абсолютно также здесь вторым параметром мы определим то значение который будет записываться а записываться она будет вот выставок привод и атрибут old вот эти вот образом все объект свойства all the мы с вами прописали ну и в принципе то же самое будет для всех остальных поэтому я просто скопирую здесь следующий объект свойства это будет для веса поэтому и стал ты просто

я просто скопирую здесь следующий объект свойства это будет для веса поэтому и стал ты просто пишу paбoтaть вот так вот и здесь у нас тоже будет white white light white light здесь тоже нас white ну и здесь тоже вы это все объект свойства вы это мы с вами определили его здесь вот это конечно же нужно сделать проверку прежде чем мы присылаем новые значения для этой проверки у нас уже с вами есть соответствующие методы здесь будет ворифа и old at a later ну а здесь будет ворифа и варить от white

методы здесь будет ворифа и old at a later ну а здесь будет ворифа и варить от white ну и наконец последнее свойство это для работы с паспорта оно будет выглядеть следующим образом значит геттер для паспорта ну и центр для паспорта здесь мы проверяем корректные записи а здесь обновляем если все нормально в принципе это вот и есть базовый функционал который я и хотел представить тает в занятии мы определили инициализатор в нашем классе person причем в инициализации мы проверяем корректность

мы определили инициализатор в нашем классе person причем в инициализации мы проверяем корректность перед данных затем идут методы класса для проверки корректности передаваемых данных ну и соответствующие свойства для работы соответствующим приватными атрибутами теперь мы можем с этим классом работать следующим образом после того как экземпляр класса создан мы можем обратиться к любому его объекту свой сон про рлп возраст и присвоить какой-то новой значений пусть будет 100 то же самое с объектом

свой сон про рлп возраст и присвоить какой-то новой значений пусть будет 100 то же самое с объектом паспорт давать присвоим тоже какое не значение но напрочь 4 5 6 7 а здесь будет 1 2 3 4 5 6 то есть мы корректный паспорт пропишем сейчас далее лес какой не сможем указать пакет будет 70 килограмм ну и выявить в консоль вот это вот коллекцию dict нашего объекта п то есть поскольку эти локальные свойства какие значения не в итоге принимают запускаем программу никаких ошибок нету здесь мои видео

какие значения не в итоге принимают запускаем программу никаких ошибок нету здесь мои видео фамилия имя отчество который будет сформировано потом возрасту настало равен 100 то есть вот мы выполнили вот этот центр и соответственно нас возраст стал 100 паспортные данные которого здесь что мы также указали и далее вот этот вес 70 килограмм то есть все вот эти вот цифры у нас сработали ну это же самое можем использовать их в качестве гетр то есть получать определенные значения ну например так

самое можем использовать их в качестве гетр то есть получать определенные значения ну например так прочитать в возраст old и он данном случае будет равен 100 если же вы здесь от грязи либо мы укажем неверные данные но например давать возраст поставим 200 он недопустимой запустим программу и видел что возраст возраст должен быть целое число о таком диапазоне это достаточно удобно то есть программе с которой спорт этот класс он сразу видит сообщение об ошибке понимает в чем это ошибка и

программе с которой спорт этот класс он сразу видит сообщение об ошибке понимает в чем это ошибка и соответственно и и как ты справляет то есть вот так вот достаточно просто и удобно можно работать с данным классом ну и последний штрих вот смотрите здесь вот по идее в инициализации вместо всех вот этих вот проверок мы здесь сразу можем по идее воспользоваться такими объектами свойствами то есть не записывать напрямую в какой-то частной локальный свойства какое-то значение а сразу здесь

есть не записывать напрямую в какой-то частной локальный свойства какое-то значение а сразу здесь прописать объект свойство через сел и соответственно присвоить новые значения тогда вы здесь он будет вызван соответствующий сеттер с e3 будет сделано вот такая проверка поэтому вот эти вот строчки здесь в принципе уже будут не нужны кроме фамилии имени отчество в dash мы для него не прописываю сета а все остальные можно прописать через объекта свойство то есть вот так программ будет выглядеть

а все остальные можно прописать через объекта свойство то есть вот так программ будет выглядеть несколько более функциональные если мы еще запустим здесь вот у нас возраст указан неверный довольствие поставим верно сто лет запустим программу и все работает как и прежде я думаю что вот из этого примера из этого занятия вы теперь стали лучше себе представляете как работать с атрибутами класса и объектами свойствами на следующем занятии мы разовьем эту тему и поговорим о дескриптор ах [музыка]

#11. Дескрипторы (data descriptor и non-data descriptor) | ООП Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии мы затронем довольно интересной но непростую тему дескрипторы я начну с одного явного недостатка объектов свойств о которых мы с вами уже подробно говорили о предыдущих занятиях давайте представим что создается класс для представления точка в трехмерном пространстве и заготовка можно сделать вот такой вот класса заяц по in 3d далее идет инициализатор с тремя параметрами x y z ну и когда создается экземпляр этого класса то у нас в

идет инициализатор с тремя параметрами x y z ну и когда создается экземпляр этого класса то у нас в этих экземплярах прописывается такие вот свойства подчёркивание x подчёркивания y и подчеркивание z причем по заданию пусть плыть так что координаты всегда даже представляться целыми числами для этого чтобы проверить что это действительно так я пропишу метод класса то есть воспользуйтесь декоратором класс месяц сам метод пусть называется ворифа и корт но иудейство него будет сначала тьi ссылка на

класс месяц сам метод пусть называется ворифа и корт но иудейство него будет сначала тьi ссылка на класс а второй аргумент второй параметр будет в счет вот этой вот координатой внутри этого метода мы с помощью вот этой функции type проверим что корт соответствует and но я обратную проверку сделаю если он не and the мы сгенерируем исключения type r и плыть сообщением координата должна быть целым числом но а далее нам нужно им воспользоваться давайте его пропишу не посредством в объектах свойств

но а далее нам нужно им воспользоваться давайте его пропишу не посредством в объектах свойств то есть я вот реализую сейчас вот этот класс за через объекты свойства и вы увидите недостаток вот такого подхода значит как мы с вами уже много раз говорили для этого используется декоратор property далее мы создаем первые свойства она будет называться x и это будет геттер поэтому мы просто здесь возвращаем через l вот этот локальный свойства x далее следующий метод быть сеттер поэтому прописан такой

через l вот этот локальный свойства x далее следующий метод быть сеттер поэтому прописан такой декоратор x . setter имя метода будет абсолютно такой же x то есть оно должно быть таким же ну если второй параметр как раз от корта есть координата вот уже в этом методе мы будем проверять а соответствует ли вот этот координата целого числа . вызови вот этот метод ворифа и корт передадим вот этот аргумент корт если это проверка проходит то только после этого моего того это локальное свойств

аргумент корт если это проверка проходит то только после этого моего того это локальное свойств подчёркивание x записываем текущую координату корт и в общем то вот такие вот объекты свойств мы должны прописать и для y и для z поэтому я просто скопирую ну и вот за счет ниже вставлю здесь у нас будет y поэтому просто запишем y здесь тоже подчёркивание и горько у нас уже будет здесь y . сетар здесь тоже y ну и вот здесь вот тоже y все для y а мы сделали это же самый для z в итоге у нас получился

тоже y ну и вот здесь вот тоже y все для y а мы сделали это же самый для z в итоге у нас получился такой класс смотрите есть прописано объекты свойств для трех вот этих вот координат причем которые сеттеры и вот здесь вот в инициализации мы можем сразу ими воспользоваться то есть не формировать вручную вот эти вот свойства подчеркивание x подчеркивая y а воспользоваться вы уже вот эти вот объектами свойств то есть x и y и z то есть когда-то мной выполняю такую операцию то будет срабатывать

свойств то есть x и y и z то есть когда-то мной выполняю такую операцию то будет срабатывать соответствующий сеттер и формироваться нужно и локальные свойства причем сразу вот с этой вот проверкой давайте ниже создайте экземпляр этого класса делается это достаточно просто вы все уже это знаете p равняется point 3d и здесь координаты передаем 1 2 и 3 далее вы здесь от миши мой с помощью print выведем коллекцию dict то есть убедились что действительно все локальные свойства были созданы запускаем

коллекцию dict то есть убедились что действительно все локальные свойства были созданы запускаем программу никаких ошибок нет и вынесет мы видим что объект п содержит локали свойства подчёркивание и x подчёркивание greek подчеркивание z с соответствующими числовыми значениями то есть у нас программа в общем-то работать так как мы это и задумывали но смотрите в нашем классе по in 3d получилось своеобразное дублирование мы три раза прописывали вот эти вот объекты свойств дублирование именно с

своеобразное дублирование мы три раза прописывали вот эти вот объекты свойств дублирование именно с функциональной точки зрения здесь у нас меняется только название объект в свойств и локальных атрибутов все остальное абсолютно тоже самое а теперь представьте во что превратится описание этого класса если нужно будет задать 10 и более таких объектов свойств программист во всем этом просто запутается да и редактировать такую программу станет не просто как можно все это оптимизировать здесь нам на

да и редактировать такую программу станет не просто как можно все это оптимизировать здесь нам на помощь как раз и приходит дескрипторы давайте я вначале вообще объясню что такое дескрипторы в целом это класс который содержит о такой специальный магический метод get тогда мы получим дескриптор не данных по на кресте то но andate и дескриптор или если этот класс b содержит дополнительный чего такие вот методы или хотя бы один из них то это тоже будет дескриптор но уже дескриптор данных это

такие вот методы или хотя бы один из них то это тоже будет дескриптор но уже дескриптор данных это различие имеет значение но об этом позже как вы уже догадались вот эти вот магические методы get set и дел это по сути геттер и сеттер но еще и воды литр здесь присутствует давайте теперь посмотрим как дескриптор может упростить наш программный код с обработкой корзину от точек вначале я покажу все взаимодействие на схеме смотрите так как координаты мы договорились что это будут целые числа то

взаимодействие на схеме смотрите так как координаты мы договорились что это будут целые числа то интерфейс взаимодействие с ними мы определим через дескриптор который будет определяться то тет классом с именем интер но это и мимо конечно же придумываем сами вы можете придумывать любое другое имя но я решил так интер таша и даже это целое значение целый тип данных на его содержимое вот это вот пока не обращайте внимание сейчас я все подробно объясню затем мы в классе по in 3d создаем экземпляр а

не обращайте внимание сейчас я все подробно объясню затем мы в классе по in 3d создаем экземпляр а вот этот класс и интер вот они здесь присутствует x и y и z это как раз вот x y и z будут по сути дела дескриптора my находящимися вот в этом классе по in 3d дескриптор для каждой координаты x и y и z и через них то есть через этот интерфейс мы как раз и будем работать после того как мы создаем экземпляры класса интер то автоматически здесь срабатывает вот этот метод с одним в котором первый

экземпляры класса интер то автоматически здесь срабатывает вот этот метод с одним в котором первый параметр сел является ссылкой на создаваемый экземпляр класса то есть вот на этот экземпляр класса допустим второй параметр это ссылка на сам класс интер ну а name это вот это вот имя в данном случае имя x которому присваивается вот этот экземпляр класса и через вот этот параметр name мы в этом экземпляре создаем вот такое вот локальные свойства сел . name который будет равно строке вот такой вот

создаем вот такое вот локальные свойства сел . name который будет равно строке вот такой вот подчеркиваний + дым это будет строка строка который содержит вот такой символ x в итоге в создаваемом экземпляре класса появляется локальные свойства с именем name ну и содержать она будет такую строку подчёркивание x то есть вот этот метод работает именно так магически метод который автоматически вызывается когда создается экземпляр класса и мы здесь вот зная вот этот name можем создавать локальные

когда создается экземпляр класса и мы здесь вот зная вот этот name можем создавать локальные атрибут как раз в этом экземпляре и мы этим воспользовались и то же самое для y и для z в обоих случаях вы за счет мы видим подчеркиваний y а здесь уже будет подчёркивание z затем вот эти вот локально свой сауной мы воспользуемся как я сейчас тоже объясню далее мы создаем экземпляр класса по in 3d при создании этого экземпляра естественно вызывается вот этот инициализатор в инициализатор и идет

при создании этого экземпляра естественно вызывается вот этот инициализатор в инициализатор и идет обращение вот к этим дескриптором x и y и z и присваивается соответствующее значение которые могут здесь вот передаем в качестве аргументов то есть 1 2 и 3 в итоге в момент присваивания срабатывать в дескриптора вот это вот сектор в этом центре вот этот сел это ссылка на соответствующий экземпляр например когда мы присваиваем что-то x то есть используем дескриптор x to sell будет ссылаться на вот

когда мы присваиваем что-то x то есть используем дескриптор x to sell будет ссылаться на вот этот экземпляр класса интер instance вот это второй параметр он ссылается на вот этот экземпляр класса point из которого этот дескриптор был вызван ну и наконец последний параметр в л.а. это числовое значение в данном случае один который мы присваиваем зная все эти данные мы можем совершенно спокойно вот в этом классе пойнта есть в экземпляре класса point создать соответствующий локальной свойства

вот в этом классе пойнта есть в экземпляре класса point создать соответствующий локальной свойства делаем это конечно же через вот это вот instance то есть через ссылку на этот экземпляр в частности мы это делаем так обращаемся к словарю dict который и отвечает за формирование всех локальных свойств экземпляра класса его этом словаре я явно указывал токуют ключ сел в . name мы помним что слв . нам это вот этот вот атрибут вот этот локальный свойства на и который сейчас содержит такую строку

нам это вот этот вот атрибут вот этот локальный свойства на и который сейчас содержит такую строку подчёркивания x в результате мы создаем этого этом экземпляре класса point свойства подчёркивания x и помещаем туда значение числовое значение 1 в итоге все этой схемы когда выполняется вот эта вот строчка у нас в экземпляре класса создается первое локальные свойства подчёркивание x со значением 1 то же самое будет когда выполнить следующая строчка у нас формируется да уже другой локальные

1 то же самое будет когда выполнить следующая строчка у нас формируется да уже другой локальные свойства подчёркивание y со значением 2 потому что вот в этом экземпляре класса свойство name уже содержит такую строку поэтому когда и здесь сработает зик вот сюда вот будет подставлен подчёркивание y но авелу и будет уже принимает значение 2 и то же самое для сайт в итоге мы сформируем вот в этом классе point три таких локальных свойства подчёркивание x подчеркивание y и подчёркивание z то есть вот

point три таких локальных свойства подчёркивание x подчеркивание y и подчёркивание z то есть вот так вот работает этот центр он здесь реализован универсальным образом благодаря вот этим двум параметрам сэл ссылается на соответствующие объект с которым происходит работа installs на объект вот этого класса point из которого был вызван соответствующий дескриптор но авелу это значение все зная эти три параметра мы совершенно спокойно можно формировать локальные свойства ну и менять их если же потом

параметра мы совершенно спокойно можно формировать локальные свойства ну и менять их если же потом программе мы обратимся к дескриптор у через экземпляра класса pt для считывания данных то соответственно выполнится better в этом g3 опять же elf это ссылка на вот этот экземпляр класса класса интер installs ссылка на экземляр класса поют через которые мы обратились к данному дескриптор у но owner это уже ссылка на сам вот этот класс и даже в частность вы здесь вот better просто берет из коллекции

уже ссылка на сам вот этот класс и даже в частность вы здесь вот better просто берет из коллекции dict нужно и локальные свойства и возвращает его ну а затем это значение автоматически возвращается вот этим дескриптором и присваивается переменной а вот общей схемы работы дескрипторов принесен к нашим классу по in 3d теперь сколько бы интерфэйс уходит здесь нам не понадобилась мы легко можем их добавить прописать и все будет выглядеть понятно и компактно на первый взгляд от все это может

их добавить прописать и все будет выглядеть понятно и компактно на первый взгляд от все это может показаться каким-то сложным и запутанным но если внимательно во всем разобраться то все предельно просто только несколько громоздко именно громоздко не сложно поэтому при необходимости просто посмотрите несколько раз объяснений схемы я уверен каждый из вас поймёт принципы ее работы ну а мы реализуемые в нашей программе значит вы здесь вот в классе по in 3d я уберу все вот эти вот локальные свойства

в нашей программе значит вы здесь вот в классе по in 3d я уберу все вот эти вот локальные свойства пока метод класса вот этот ворифа и корт я оставлю не буду удалять ну и мы добавим класс интер вы здесь вот выше я его просто вставлю чтобы не тратить время на набор мы в принципе разобрали каждую строчку это абсолютно тоже самое что было в нашей схеме три магических метода с 1-м get и set то есть это better setter ну а с одним чтобы мы могли сформировать вот это вот локальные свойства найм через

better setter ну а с одним чтобы мы могли сформировать вот это вот локальные свойства найм через который потом будем обращаться в г 3 4 далее в самом классе по in 3d мы сформируем вот эти вот дескрипторы они будут называться x y z то есть это интерфейсы взаимодействия с нашими координатами ну и соответственно здесь этого инициализация мы их сразу используем x и y и z и присваиваем определенные значения в принципе уже сейчас все будет работать то есть вот реализация простейшая реализация

значения в принципе уже сейчас все будет работать то есть вот реализация простейшая реализация дескриптора данных но давайте запустим нашу программу посмотрим что увидим дальше все отработала и смотрите что мы здесь с вами видим вот эти вот три строчки говорят о том что три раза сработал сеттер то есть вот этот метод сет который прописано в нашем классе in the жар как он сработал но во первых отобразился этот фрагмент set далее цел flame здесь вот подчёркивание x фигурирует avella значение 1

этот фрагмент set далее цел flame здесь вот подчёркивание x фигурирует avella значение 1 далее мы с помощь параметра instance который ссылается на текущий земля our class a point формируем локальные свойства соответственно который называется у нас подчёркивание x и этому локальному свойства присваиваем значение 1 далее когда срабатывает следующий строчка вы инициализации вот это вот для y у нас берется уже сэлфи name который называется подчёркивание y и присваивается значение 2 в этот идиот в

берется уже сэлфи name который называется подчёркивание y и присваивается значение 2 в этот идиот в этой строчке у нас формируется локальные свойства подчёркивания y в экземпляре класс по in 3d ну это же самый для z и вот здесь вот когда моя весь словарь и вывели как раз видел что существует все эти тарелок алекс свойство в экземпляре класса по in 3d последнее что нужно реализовать нам в нашем дескрипторы это вот эту проверку проверку что действительно передаем целые числа а не какие-то другие

это вот эту проверку проверку что действительно передаем целые числа а не какие-то другие я сделаю это следующим образом класс мисс от который здесь прописан я перенесу вот этот класс и даже в начале моего объявим но а вот в этом c3 соответственно вызовем я запишу сел . ариф рекорд ну и соответственно передаем за очень умело то есть это есть координата теперь если запустить программу то все работает но если мы выделить вот при создании крем пляра класса где-нибудь поставим допустим строку то

но если мы выделить вот при создании крем пляра класса где-нибудь поставим допустим строку то соответствие будет ошибка и сообщение что координата должно быть целым числом вот так вот у нас отработала проверка причем она у нас стала универсальной для всех трех координат а также мы здесь имеем универсальное описание интерфейса для работы с этими координатами причем сколько бог этих координат здесь не было 10 20 30 у нас интерфейс взаимодействие с ними будет един и определяться вот эти вот класса

не было 10 20 30 у нас интерфейс взаимодействие с ними будет един и определяться вот эти вот класса монтажер вот в этом преимущество дескрипторов то есть мы не дублировать и все функционально вот эти вот объекты свойств а все прописываю в одном месте программы а далее просто создаем экземпляр вот этот класс интер и работаем с локальными свойствами класса point уже через эти интерфейсы еще вот в этом классе тоже я сделаю обращение к локальным свойствам экземпляр класса через функция g data is it

классе тоже я сделаю обращение к локальным свойствам экземпляр класса через функция g data is it at our ты чтобы получить тот или иной локальный атрибут мы можем вызвать эту функцию татара который уже говорили здесь в качестве первого аргумента даже передать области видимости того объекта из которого хотим взять тот или иной атрибут но а вторым аргументом соответственно названию этого атрибут который нас хранится вот здесь вот в локальном свой стене им и то же самое вы держит вместо

атрибут который нас хранится вот здесь вот в локальном свой стене им и то же самое вы держит вместо использования коллекции dict мы воспользуемся функцией set at our здесь также прописываем instance на м но и здесь ночей который присваивается в lr с точки зрения python так будет правильнее чем обращение напрямую вот к этой коллекции dict который у нас здесь фигурировала если запустить программу то все в принципе работает только у нас здесь сейчас фигурирует строка давайте поставим число опять

то все в принципе работает только у нас здесь сейчас фигурирует строка давайте поставим число опять же запустим все сработало и ведь и локальные свойства то есть и запись идет и считывание мы в этом можно убедиться если здесь через битой например написать п . z вот такой прочитаем свойство z и видим здесь значение 3 то есть наши дескрипторы работает и на запись и на считывание в итоге вот это вот класс интер у нас представляет собой дескриптор данных бейте дескриптор и на его основе мы создали

класс интер у нас представляет собой дескриптор данных бейте дескриптор и на его основе мы создали три объекта x y z в классе point теперь вернёмся к тому что существует два разных типа дескрипторов но он дайте дескриптор то есть дескриптор не данных id&t дескриптор дескриптор данных в чем разница между ними ну во-первых очевидно дескриптора не данных могут только считывать значение какого-либо свойства так как не имеет cetera или 9ра они служат только для считывания информации и есть еще

свойства так как не имеет cetera или 9ра они служат только для считывания информации и есть еще второе отличие дескрипторы не данных имеет тот же приоритет доступа что и обычные атрибуты класса а чего здесь речь давайте это покажу на конкретном примере предположим вы значит в нашей программе мы определяем еще один дескриптор пусть он называется to cut a ride яндекс то есть мы будем читать вот такой локальный свойство подчёркивания x и ys вот это вот класса по in 3d то есть у нас здесь есть

такой локальный свойство подчёркивания x и ys вот это вот класса по in 3d то есть у нас здесь есть такое свойство локально мы это знаем и соответственно дойдем такой дескриптор пусть а называется x r class будет zach называться great and x то есть экземпляр класса вот такой вот то есть мы создали с вами дескриптор не данных вот этот дескриптор не данных а это дескрипторы данных очевидно теперь вот этот интерфейс xr мы можем совершенно спокойно использовать для считывания данных 30 п . x r , вот

этот интерфейс xr мы можем совершенно спокойно использовать для считывания данных 30 п . x r , вот этот dict я оставлю и запустим нашу программу видим вы здесь от значения 1 потому что подчёркивание x вот это вот свойство содержит этого значения 1 но если мы вот здесь вот пропишем такой конструкции pay . x r равняется 5 то что произойдет будет ли ошибка потому что вот этот дескриптор xr не содержит cetera а мы здесь при своем определенные значения давайте посмотрим запустим программу и у нас

cetera а мы здесь при своем определенные значения давайте посмотрим запустим программу и у нас просто-напросто локальные области вот этот экземпляр класса п появился новые свойства с именем xr под статьей вот и значением 5 то есть мы просто напросто создали а локальные атрибут xr и присвоили значение 5 словно вот здесь вот никаких вот дескрипторов мы даже не прописывать как будто их и нету то есть сработал все вот именно таким образом мало того когда мы обратились водка это вот локального

есть сработал все вот именно таким образом мало того когда мы обратились водка это вот локального свойства xr вот здесь вот то получили значение 5 то есть у нас получилось что приоритет обращение очка это вот локальному свойству точно такой же как и вот к этому дескрипторы не данных рид индекс у нас вот здесь вот в локальной области он был найден поэтому поиск остановился и вот этого значение 5 здесь отобразилось в консоли однако если мы вот этот дескриптор grid index превратим в дескриптор не

отобразилось в консоли однако если мы вот этот дескриптор grid index превратим в дескриптор не данных давайте это сделаю вот эти вот образом добавим еще один метр пусть от быть сеттер вот такой вот обычный setter а здесь сделаем следующим образом через коллекцию dict мы создадим вот этот локали свойства x r и присвоим значение 5 запустим программу и смотрите что получилось теперь в этом случае мы видим здесь значение 1 и здесь у нас имеется действительно локальные свойства со значением 5 но

мы видим здесь значение 1 и здесь у нас имеется действительно локальные свойства со значением 5 но когда произошло обращение вот к этому атрибуту x r через экземпляра класса п то было взято не вот этот локальный свойства а дескриптор данных это произошло потому что приоритет обращение к дескриптор у данных выше чем к локальным атрибутом экземпляр класса то есть все работает ровно так как с доступом к объектам свойствам о которых мы говорили на прошлых занятиях а если здесь вот снова уберем этот

к объектам свойствам о которых мы говорили на прошлых занятиях а если здесь вот снова уберем этот центр я сотру из строчки и запустим нашу программу то мы увидим уже значение 5 а не один как это было ранее то есть вот этот приоритет между дескриптор ими не данных и дескриптором данных нужно себе чётко представлять на этом мы с вами совершим знакомство с этой непростой темой дескриптора я постарался объяснить все как можно проще если тема не до конца понятно то вас можно уже посмотреть ее

объяснить все как можно проще если тема не до конца понятно то вас можно уже посмотреть ее несколько раз либо совсем пропустить так как это относительно редко используется на практике но знать такой функционал нужно чтобы при необходимости не изобретать велосипед а использовать уже встроенные возможности языка python [музыка]

#12. Магический метод __call__. Функторы и классы-декораторы | ООП Python

здрасти дорогие друзья есть ради балакирев и на этом занятии мы познакомимся с очередным магическим методом кол-во 10 методы еще называет тандыр методы от сокращение вот этих вот английских слов дабл андерс коп то есть двойное подчеркивание то шума тических методов всегда идет двойное подчеркивание в начале и двойное подчеркивание в конце но дальнейшая буду просто говорить магический метод итак когда вызывается вот этот магический кол и для чего он нужен давайте я покажу это на примере следующей

вызывается вот этот магический кол и для чего он нужен давайте я покажу это на примере следующей программы предположим что мы создаём некий класс класс счетчик каунтер и в этом классе мы пропишем один инициализатор и нет у этого и соли затари в экземплярах классов мы будем создавать не посредства такой свойства каунтер приватное свойства с начальным нулевым значением а далее как вы уже знает чтоб создать экземпляр объект этого класса нам достаточно прописать такую команду аккаунтор и поставить

создать экземпляр объект этого класса нам достаточно прописать такую команду аккаунтор и поставить 2 у такие вот круглые скобки обратить внимание на вот эти вот круглые скобки в общем случае это оператор вызова функций но как видите так можно вызывать и классы в действительности когда происходит вызов класса то автоматически как раз запускается вот этот вот магический метод кол то есть когда мы прописываем круглые скобки после имени класса то активизируется автоматически вот этот метод cold

прописываем круглые скобки после имени класса то активизируется автоматически вот этот метод cold который прописан для этого класса но и его могут быть переданы какие-либо параметры далее при создании экземпляр класса в общем случае отрабатывает вот такую-то алгоритму сначала вызывается магически метод new а потом инициализатор этого объекта после того как он создан конечно вот это вот очень упрощенная схема реализации данного метода в действительности она несколько сложнее но принцип тот же

схема реализации данного метода в действительности она несколько сложнее но принцип тот же сначала вызывается магическими тенньё а потом инициализатор и нет то есть благодаря наличию вот эту ответа да call me close можно вызывать подобны функциям а вот экземпляр этого класса мы уже так вызывать не можем вот давать в нашей программе это сделаем опишем c2 круглый ска ки и запустим эту программу как видите у нас вот здесь вот возникла такая ошибка что объект класса кондер не является вызываемом а

видите у нас вот здесь вот возникла такая ошибка что объект класса кондер не является вызываемом а вот если поставить в комментарии эту строчку и запустить программу то никаких ошибок уже нету то есть экземпляра класса мы вызывать подобно функции не можем почему потому что они не вызываемое у нас не определен вот этот магически метод кол но давайте мы его здесь пропишем я это сделаю следующим образом значит tf2 подчёркивания и обратите внимание здесь кстати очень много разных магических методов

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

а далее вот этот счетчик который у нас есть приватный колдер мы увеличим на единицу но и кроме того вернем вот это сформированный результат то есть данный счетчик outer все вот так вот мы прописали с вами метод кол для экземпляров класса каунта и теперь вот эта вот строчка c2 круглые скобки не будет приводить к ошибкам давайте опять же запустим нашу программу и видим что вот этот метод кал у нас работал ну и ошибок никаких нету то есть благодаря добавления вот этот магический метода кол мы

нас работал ну и ошибок никаких нету то есть благодаря добавления вот этот магический метода кол мы теперь экземпляры классов можно вызывать подобны функциям от классы которые себя так ведут называется functor и в нашем случае метод кол возвращает вот это вот счетчик вот это вычисленное значение давайте мы сделаем так вызове несколько раз вот это вот экземпляр класса то есть я пропишу вот три таких вызова и в последнем вызовем и перемены арес присвоим результат то есть вот этот счетчик outer и

вызова и в последнем вызовем и перемены арес присвоим результат то есть вот этот счетчик outer и выведем о его в консоль с помощью функции print запустим нашу программу видим что вот этот метод calls работал три раза из от леса счетчик стал равен 3 то есть прикажу вот это вот вызове сработал магический метод кол увеличивался счетчик на единицу каждый раз и соответственно вы здесь и там и видел уже значение 3 и зачали щучка был равен нулю а после трех вызов мы ведь его значение 3 мало того в

уже значение 3 и зачали щучка был равен нулю а после трех вызов мы ведь его значение 3 мало того в нашей программе мы можем создать несколько независимых счетчиков потому что объекты классов они будто иметь независимой вот это вот свойство каутер приватный свойства кантер и предположим что мы создаем экземпляр класса c 2 давайте моего вызове вытечет 1 1 1 2 равняется т2 и круглые скобки запишем а далее с помощью функции print выведем обе эти перемены в консоль смотрите что у нас получилось

а далее с помощью функции print выведем обе эти перемены в консоль смотрите что у нас получилось первой переменной р с принимая значение 3 а 2 rs2 значение 1 то есть вот эти вот наши счетчики которые могут okays сформировали работает совершенно независимо вот здесь вот отработал первый счетчик а вот здесь вот отработал 2 счетчик и соответственно получили результаты 31 вот так вот с помощью класса каунтер мы можем создавать множество независимых счетчиков ну и соответственно читать количество

каунтер мы можем создавать множество независимых счетчиков ну и соответственно читать количество вызовов того или иного экземпляры класса давайте теперь вернемся откатят параметрам arc system works как я уже сказал сюда можно передавать произвольное количество аргументов то есть при вызове вот эту вот экземпляр класса c & c 2 мы можем дополнительно передавать какие-либо аргументы ну вот давайте в качестве примера я буду передавать шаг шаг увеличение счетчик то есть шаг изменения счетчика и вот

качестве примера я буду передавать шаг шаг увеличение счетчик то есть шаг изменения счетчика и вот так и миша степ со значением по умолчанию 1 ну а здесь мы будем увеличивать уже не на единицу она вот этот шаг степ тогда мы экземпляр класса позже вызывать его атаку с круглыми скобками но можем дополнительно указывать какие-либо аргументы ну например вознесет двоечку я поставлю а здесь десятку а во втором случае минус 5 пропишу запустим программу и смотрите вы делись нас получилось 13 а здесь

во втором случае минус 5 пропишу запустим программу и смотрите вы делись нас получилось 13 а здесь уже минус 5 то есть вот так вот мы можем прописывать какие-либо дополнительные аргументы здесь и соответственно реализовывается определенную логику работы данного магического метода ну а далее мы эти аргументы здесь уже передаем при вызове экземпляров класса в целом вот это вот общая логика работы магического метода кол но здесь остается как всегда один важный вопрос зачем это нужно и где может

магического метода кол но здесь остается как всегда один важный вопрос зачем это нужно и где может пригодиться давайте я приведу несколько примеров его использования первый пример это замена замыканий функций о которых мы с вами уже говорили только за бока них функций мы с вами говорили в базовом курсе по языку python если вы не помните то посмотрите это занятие то есть вместо замыкание функций по идее можно реализовывать класс вот статьи автоматически метода укол я сейчас вам это покажу

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

мы сохраним коллекцию символов которые будем удалять в конце и в начале строке соответствовать , сохраню эту коллекцию вот в такой перемены charts приватный а далее метод кол будет делать следующее я уберу это тот параметр степан девин а здесь пропишу такую проверку если вот этот первый аргумент аркс 0 не является строкой я воспользуюсь функцией из instance , стр то есть если вот этот первый аргумент не является строкой то мы выведем исключений то есть генерируем исключения type r и напишем

не является строкой то мы выведем исключений то есть генерируем исключения type r и напишем аргумент должен быть строкой ну а иначе мы возвратим результат обработки вот это вот строки аркс 0 то есть аркс 0 1 параметр который мы здесь передаем будет строкой из которой мы как раз и будем удалять вот эти вот символ chars для этого мы воспользуемся методом стрип строго методом стрип ну и удалью соответствовать эти вот символы час все наш метод кол реализован но и соответствовать здесь вот мы можем

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

скобках мы передаем строку из который хотим в конце и в начале удалить вот такие вот символа но и результат обработки у нас будет храниться переменный рез выявил с помощью функции print рсв консоль запустим нашу программу и действительно вы здесь вот и строки ховард были удалены все вот эти вот перечисленные символы мы видим здесь просто halo воры или можем создать еще один экземпляр этого класса стрип chars вот с таким вот символ то есть допустим будем удалять только пробелы в конце и в начале

стрип chars вот с таким вот символ то есть допустим будем удалять только пробелы в конце и в начале соответствие если вот для этой же строки мы применим уже экземпляр класса с 2 или будет арест 2 и соответственно реза 2 тоже выиграл в консоль мы дополнительно сейчас и пропишем с переносом строки чтобы все визуально хорошо выглядела смотрите вот в первом случае у нас были удалены все символы вот такие вот включаю ! то есть вот это вот ! был удалён а во втором случае только пробела то есть у нас

вот включаю ! то есть вот это вот ! был удалён а во втором случае только пробела то есть у нас висит ! уже остался то есть вот эти вот экземпляры с1 с2 работает совершенно независимо и они удаляют соответствующего здесь указанные символы разумеет свойствами со строки halo воли мы можем прописывать самые разные строки и вызывает вот этот экземпляр класс с 2 много-много раз столько сколько нам нужно ну например у так балакирев ездить пропишу ну и ! допустим и вы здесь что мы сохраним это тоже

ну например у так балакирев ездить пропишу ну и ! допустим и вы здесь что мы сохраним это тоже перемен аристова а здесь я просто это вот уберу вот так вот запустим программу и видим что он балакирево здесь записан без пробелов ты все пробелы были удалены и ! остался а если вместо из 2 пропишем с 1 и запустим программу то ! здесь тоже был удален то есть вот так вот с помощью данного класса стрип chars мы можем обрабатывать строки удаляя из них в начале в конце набор указанных символов и это мы

chars мы можем обрабатывать строки удаляя из них в начале в конце набор указанных символов и это мы сделали через класс а не через замыкание функции и в результате получили вот такое достаточно элегантное решение данной задачи второй пример это реализация декораторов с помощью классов опять же декоратор их функции мы с вами уже говорили я свой не помните смотрите это занятие а здесь мы реализуем тоже декоратор но на уровне классов итак мы с вами пропишем класс декоратор который позволяет

тоже декоратор но на уровне классов итак мы с вами пропишем класс декоратор который позволяет вычислять производные определенные функции в некой точке x класс будет зваться так вот дереве yt вот здесь это в инициализатор и этого класса нам нужно передать функцию который будем расширять функционал который будем расширять и соответственно здесь нам нужно сохранить ссылку на эту функцию я пропишу такое свойство fn который будет ссылаться на вот эту вот функцию фанк далее в методе кол-ву пропишем

свойство fn который будет ссылаться на вот эту вот функцию фанк далее в методе кол-ву пропишем два параметра это . x который будем вычислять производную и dx это шаг изменения функции для вычисления производной но возьмем его очень маленький да пусть вот такой вот далее вы весит methodical мы пропишем следующие возвратим результат вычисления производной функции и сделаем это конечно же численно для этого вызовем вот эту функцию который мы с вами сохранили фнс параметрам x плюс bx то есть вот

для этого вызовем вот эту функцию который мы с вами сохранили фнс параметрам x плюс bx то есть вот такой аргумент перед этим минус значение этой функции в точке x но и деленное все это на dx то есть вот такой вычислении производной мы с вами сделаем далее нам нужно определить функцию для которой это производная будет считаться но я возьму очень простую функцию функцию синуса и назову ее атаку df синус от x ну а здесь она будет просто возвращать значение синуса в точке x то есть я воспользуюсь

синус от x ну а здесь она будет просто возвращать значение синуса в точке x то есть я воспользуюсь библиотекой матч и здесь мы возьмем функцию синуса сенса от x ну а вверху мы должны импортировать от библиотеку то есть мы пропишут акт импорт и мальчик все мы это с вами сделали определили класс декоратор определили функцию которая это декоратор хотим применить ну и сейчас давайте я просто вызову эту функцию и выведу значение на экран синуса в точке пены 4 запустим программу и ведь его так а его

функцию и выведу значение на экран синуса в точке пены 4 запустим программу и ведь его так а его числовое значение давайте теперь применим к этой функции df синус вот этот вот класс декоратор деле выйти и сделать это можно двумя способами в первом случае мы это делаем в лоб то есть пишем такую конструкцию функции df синус будет равна вот этот классу зиры weight is a от веса мы передаем в качестве аргументов отсюда от в инициализатор сама эта функция то есть ссылку на функция синуса все вот эти

аргументов отсюда от в инициализатор сама эта функция то есть ссылку на функция синуса все вот эти вот образом мы превратили вот эту функцию фактически в экземпляр вот это вот класса деревьев то есть вот это вот переменной демпси нас теперь будет ссылаться не на функцию она экземпляр вот это вот класса и соответствие когда мы вот здесь вот ее уже будем вызывать то есть мы будем вызывать уже экземпляр этого класса то сработает метод кол давайте в этом убедимся запустим эту программу и видим

этого класса то сработает метод кол давайте в этом убедимся запустим эту программу и видим здесь практически то же самое значение ну это потому что я . пенн 4 взял а там производной в общем-то равна тому же самое значения давайте pin 3 возьмем у нас получается такая производная а если мы закомментируем вот эту строчку когда применяли класс декоратор то у нас будет уже вот такое значение синуса то есть мы действительно считаем производную уже вот в этой точке кино 3 давайте детальнее разберемся

есть мы действительно считаем производную уже вот в этой точке кино 3 давайте детальнее разберемся как это работает я поставлю за счет точка останова запущу программу в режиме отладки далее чтобы все это увидели а нашел здесь кнопку f7 и мы попадаем внутрь этого класса то и смотрите здесь когда создается экземпляр класса то вот этот фанк сейчас ссылается но вот эту функцию df синус и соответственно ссылку на эту функцию мы сохраняем вот в этой приватной перемены ф.н. далее нажимаю f-series

ссылку на эту функцию мы сохраняем вот в этой приватной перемены ф.н. далее нажимаю f-series снова мы переходим вот сюда вот здесь нажму f8 то есть мы создали экземпляр класса и здесь я снова нажму f7 смотрите когда произойдет вызов вот это вот экземпляры класса мы попадем вот а вот этот метод call то есть автоматически вызывается этот метод кол x здесь будет равен пи на 3d x принимать такое значение ну и соответственно вычисляем производную вот по такой формуле вычисляемые она возвращает свой

ну и соответственно вычисляем производную вот по такой формуле вычисляемые она возвращает свой счет и print печатает значение этой производной и мы видим ее здесь на экране то есть вот так и с помощью этого класса мы можем вычислять производные для общем-то в их функций практически но так как класс дерева и это все же декоратор то мы можем применить этот же декоратор к этой функции используя вот такой то оператор собачка далее указать вот этот classic оратор ну и это будет эквивалентно вот этой

то оператор собачка далее указать вот этот classic оратор ну и это будет эквивалентно вот этой строчке и и поставив комментарий запустим программу и видим здесь уже значение производной 0,5 практически ну а если мы уберем эту строчку и опять же запустим программу то увидел просто синус в точке пена 3 то есть вот так вот мы можем создавать в программах класс и декораторов ну и соответственно реализовывать определенную логику то есть расширять функционал определенных функций надеюсь из этого

определенную логику то есть расширять функционал определенных функций надеюсь из этого занятий вы поняли как работает магический метод кол и для чего он нужен конечно я привел всего два простых примера чтобы продемонстрировать принцип его работы в реальных задачах проектах вы должны сами используют свои знания решать какие механизмы приемы следует применять для решения текущих задач привести на уроках алгоритма решений на все случаи жизни просто невозможно это уже novak алгоритмизация которым

уроках алгоритма решений на все случаи жизни просто невозможно это уже novak алгоритмизация которым должен владеть каждый программист и вырабатывается этот навык в основном на решение практических задач так что больше практикуйтесь параллельно с изучением возможностей языка python [музыка]

#13. Магические методы __str__, __repr__, __len__, __abs__ | ООП Python

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

в определённый момент времени и например вот эти вот методы которыми сейчас с вами рассмотрим срабатывает в момент отображение информации об объекте класса вот этот первый исключительно для пользователей а второй исключительно для отладки давайте посмотрим конкретных примерах как все это работает для этого в программе я создала такой класс кат который содержит инициализатор для формирования в каждом экземпляре этого класса свойство name имени кошки давайте я сейчас перейду в python косого где

экземпляре этого класса свойство name имени кошки давайте я сейчас перейду в python косого где будет удобней все это демонстрировать значит вы здесь вот мы создаем этот класс кат а далее сформируем экземпляр этого класса ну например вот эти вот образом вызываем это класс кад и здесь перед этим имя васька допустим все экземпляр создан и теперь мы по идее можно вывести информация об этом экземпляре если сделаю за счет python концов просто берем клад то увидим а такую строчку здесь у нас идет тип

если сделаю за счет python концов просто берем клад то увидим а такую строчку здесь у нас идет тип этого объекта то есть класс склад а далее адрес по которому он расположен в памяти устройства из нам нужно как-то переопределить и отобразить вот эту информацию в другом виде то как раз для этого и используется вот эти два магических метода стр и репо мы начнем с этого второго метода репо и посмотрим как это отразится на служебной информации об экземпляре класса для этого мы выйдем счет в классе

как это отразится на служебной информации об экземпляре класса для этого мы выйдем счет в классе пропишем соответственно этот магический метод называется рэпер и должен возвращать строку я это сделаю следующим образом значит операторы цмф строка и здесь вам вначале вы видимо имя класса то есть через стелс воспользуемся вот этим специальным свойством класс который и хранит и me close ну а далее через : мы выведем вот это имя кошки т.е. сэлфи night свойство name вот в таком виде я хочу чтобы

через : мы выведем вот это имя кошки т.е. сэлфи night свойство name вот в таком виде я хочу чтобы выводилось служебная информация о каждом экземпляре нашего класса теперь мои слова переопределим этот класс поэтом концов вот здесь вот и снова создадим экземпляр этого класса даже здесь у нас будет по-прежнему васька наш объект создан и теперь при выводе этого объекта мы видим атакуют информацию то есть вы здесь у нас идет имя класса а через двоеточие имя кота войска то есть все именно так как мы

есть вы здесь у нас идет имя класса а через двоеточие имя кота войска то есть все именно так как мы определили вы здесь магическая методе ребра ту же самая информация мы с вами увидим если воспользуемся например функции print и напишем здесь как то есть выйдем информацию об экземпляре класс скат тоже сработает этот магический метод репо или если воспользуюсь о такой функция стр и напишем код здесь тоже мы увидим абсолютно тоже самое но по идее когда мы пользуемся статьи от функции привет или

тоже мы увидим абсолютно тоже самое но по идее когда мы пользуемся статьи от функции привет или стр то это уже вывод не отладочная информация о вывод данных для пользователя а значит здесь должна отрабатывать вот этот первый магический метод стр но почему он не отрабатывает все очень просто мы его здесь с вами еще не перри определяли поэтому вызывается вот этот магическими to the ripper давайте определим это второй магический мест стр и посмотрим как это повлияет на вывод уже информация для

определим это второй магический мест стр и посмотрим как это повлияет на вывод уже информация для пользователя вот этот метод эстер также должен возвращать определенную строку я это сделаю следующим образом здесь f строка ну и здесь просто имя кошки пусть возвращается ты сел на ему все вот в таком вот виде мы с вами определили класс давайте его скопирую стой перенесу в python consol чтобы и у могли переопределить создайте экземпляр этого класса заново had войска ну и теперь посмотрим как от

могли переопределить создайте экземпляр этого класса заново had войска ну и теперь посмотрим как от работают эти два метода ари пар и стр вот если мы просто вывезем здесь в консоли как-то от работает вот этот метод рэпа а если мы воспользуемся вот такой функции при and that the отработает уже вот эту другой магически метод стр ну это же самое если мы воспользуюсь функцией стр откат тоже от работает вот этот стр даже предполагает с помощью этих функций мы выводим информацию именно для

от работает вот этот стр даже предполагает с помощью этих функций мы выводим информацию именно для пользователя а не какую-то отладочную служебную а вот когда в консоли мы просто пишем код то и здесь предполагается вывод служебной информации при отладке поэтому видим строку которой сформировано о магической методе репо то есть отличие вот этих вот двух магических методов именно в этом report служит для вывода какой-то отладочная информация astr информации для пользователя ну и следующие два

для вывода какой-то отладочная информация astr информации для пользователя ну и следующие два магических методов который мы с вами познакомимся на этом занятии это ли и а ps для чего они нужны в принципе уже понятно из их названия первое позволяет применять такую функцию ленка экземпляром класса а вторая о такой функция б.с. давайте их тоже вот эти два магических метода добавил наш класс и посмотрим как это будет работать только класс я возьму уже другой ник от а класс для хранения координат

как это будет работать только класс я возьму уже другой ник от а класс для хранения координат точек то есть мы пропишем класс пусть он называется point далее я пропишу инициализатор и в этого инициализации мы будем передавать произвольное количество аргументов аркс ну то есть произвольное количество координат и все эти координаты мы будем хранить виде коллекция cards давайте зал корт и она будет ссылаться на вот этот коллекцию аркс то есть корт это будет список из координат точек если

будет ссылаться на вот этот коллекцию аркс то есть корт это будет список из координат точек если координаты ответа . на плоскости из координата 3 эта точка в объеме но 4 это уже в четырехмерном пространстве и так далее то есть у нас здесь может быть произвольное количество картинок ну а далее мы можем создать уже экземпляр этого класса ну например вот так point и указать две координаты 1 и 2 я спуститесь эту программу то у нас никаких ошибок сейчас нету все нормально но давайте попробуем

2 я спуститесь эту программу то у нас никаких ошибок сейчас нету все нормально но давайте попробуем применить к экземпляры этого класса функцию лента этим сайт лин от п ну как вы понимаете сейчас будет ошибка даже мы не можем применять по умолчанию вот этот функция экземпляром класса но предположим мы бы хотели чтобы вот этот функция len дал возвращала размер количество координат вот этого . ну то есть в данном случае у нас две координаты z funk я должна бы возвращать значение 2 если было три

то есть в данном случае у нас две координаты z funk я должна бы возвращать значение 2 если было три координата табу завещал три и так далее вот чтобы это работало именно так как мы хотим мы можем переопределить магический метод лет я это и так и сделано из пропишу лиан и здесь мы напишем reset опять же вызываем обычную функцию лет но здесь мы указываем для чего оно вызывается в данном случае для списка карт то есть курс у нас представляет собой список и для списка по функциям совершенно

для списка карт то есть курс у нас представляет собой список и для списка по функциям совершенно спокойно можно вызывать все вот теперь из мы запустим нашу программу то увидим значению 2 то есть когда вы здесь вот вызываете функцию то автоматически срабатывает магический метод лет и возвращается размер вот этого списка курс то есть число координат давайте поставить здесь точка останова и мы в этом с вами убедимся запустим программу я нажму здесь f7 мы переходим вот здесь автоматически метод лет

с вами убедимся запустим программу я нажму здесь f7 мы переходим вот здесь автоматически метод лет этот магический мест лет возвращает размер от этого списка карт вы соответствовало у нас отображается в консоли то есть все работает вот именно в таком виде ну и по аналогии мы можем прописать 2 магически метод а ps то есть он у нас прийти и вызывается когда применяется функция bass то есть вычисление модуля давайте от применительно к нашим координатам мы сделаем вычислений модуля для каждой из

модуля давайте от применительно к нашим координатам мы сделаем вычислений модуля для каждой из координат для этого я воспользуюсь вот такой конструкции иначе сформируем список то есть вот эта функция а ps у нас будет возвращать новый список который будет состоять и за модулей соответствующих координат то есть мы применим функцию абз к каждому элементу коллекции карт вот так вот посмотрим что она своим получиться опять же воспользуюсь функцией без применительно к экземпляр класса п запустим

она своим получиться опять же воспользуюсь функцией без применительно к экземпляр класса п запустим программу и видим вознесет на выходе значения 1 и 2 то есть модули вот этих координат нас айдины 2 ну давайте поставим где несет минусу так вот 1 и минус 2 опять же запустим программу и видим вы здесь снова кандидата 1 и 2 то есть мы применили модуль вот к этим координатам и -2 превратилось просто в два ну и давайте вот здесь вот еще какой из координат пропишу -5 допустим запустим программу и

в два ну и давайте вот здесь вот еще какой из координат пропишу -5 допустим запустим программу и перенос здесь уже три координаты то есть ли она возвратилась значение 3 ну а функция bass применительно к экземпляру класса п уже возвращает модули соответствующих координаты из 125 вот так вот мы можем в классах определять вот такие магические методы чтобы затем к его экземпляром можно было применять функции и а ps я надеюсь из этого занятия у зале зачем нужны и как можно реализовывать своих

функции и а ps я надеюсь из этого занятия у зале зачем нужны и как можно реализовывать своих классах 4 магических метода стр а рэпер лет и а ps [музыка]

#14 Магические методы __add__, __sub__, __mul__, __truediv__ |  ООП Python

здравствуйте дорогие друзья я сергей балакирев его продолжаем курс занятий по объектно-ориентированному программированию языка python раз уж мы с вами затронули тему магических методов то давайте доведем ее до конца и познакомимся с наиболее употребительными zic на этом занятии мы будем рассматривать методы для работы с арифметическими операторами это следующий набор магических методов метод а д д служит для реализации операции сложения суп для реализации операция вычитания мол для умножения и

д служит для реализации операции сложения суп для реализации операция вычитания мол для умножения и труден для отделения как всегда объяснить работа этих методов проще всего на конкретном примере давайте предположим что мы создаем класс для работы со временем а его экземпляры будут хранить часы минуты и секунды но на самом деле я буду хранить просто секунды текущего дня и вот эти вот секунды будет отсчитываться от 12 часов ночи то есть 12 часов ночи это как раз будет 0 ну а дальше 1 2 3 и так

отсчитываться от 12 часов ночи то есть 12 часов ночи это как раз будет 0 ну а дальше 1 2 3 и так далее то есть вот секунды будут как раз хранить секунды текущей дня ну а знаете секунды мы всегда их можно перевести в часы минуты и просто секунды чтобы мы это могли делать у нас есть вот такая помогает сильной переменная переменная уровне класса d и мои используем чтобы секунды не превысили вот это вот значение то есть числа секунд в одном дне и для этого мы как раз здесь использую такую операцию

вот значение то есть числа секунд в одном дне и для этого мы как раз здесь использую такую операцию остатка от деления давайте запишем этот класс непосредственно в программе значит я его заготовил вот он прописан и реализации следующая переменной d и которая определяет количество секунд в одном да не дальше идет инициализатор и здесь мы в инсаре затар передаем некое количество секунд то есть наш экземпляр класса будет хранить вот это вот количество секунд и дальше смотрите какая здесь идет

наш экземпляр класса будет хранить вот это вот количество секунд и дальше смотрите какая здесь идет нотация : нд вот это : and указывает программиста что в качестве вот это вот параметры sex но же передать целое число конечно мы здесь не ограничиваем вот этот параметр а именно целым числом в качестве ceкca сможет передавать любые типы дала и вещественные числа из тройки и так далее то есть по-прежнему любые типы данных то есть это нотация она просто указывает программист что над передавать

любые типы данных то есть это нотация она просто указывает программист что над передавать целые числа и не более того далее мы проверяем что действительно ли вот эти секунды являются целыми числами если это не так то мы генерируем исключите type r от статьи вот сообщением секунды должно быть целым числом ну а если этот проверка проходит то мы сохраняем секунды в экземпляре класса то есть создает такое свойство секанс и соответственно вот выполняем такую аппетитную операцию чтобы секунды не

такое свойство секанс и соответственно вот выполняем такую аппетитную операцию чтобы секунды не превысили число секунд в одном то нет вот так вот работает сейчас этот класс клок но и чтобы мы могли для экземпляров этого класса получать часы минуты секунды пропишем еще один метод который завел at times то есть получить текущее время в этом методе нам нужно сначала просчитать сколько у нас секунд сколько минут и сколько часов я это сделать следующим образом перемена с будет хранить текущее

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

60 делаем то секунды переводе в минуты одолевать за счет отбрасываете минуты которые относятся к часам ну и наконец чтобы рассчитать там часы мы сделали в общем похожие вещи мы секунды целочисленное разделим на 3600 то есть это количество секунд в одном часе ну и опять же мы разделим здесь до 24 часа в сутках 24 часа все вот эти вот образом мы на свой в секунд определили просто секунды минуты и часы но и затем возвратим формат ную строку который будет содержать все эти данные я это сделать

и часы но и затем возвратим формат ную строку который будет содержать все эти данные я это сделать следующим образом вот здесь с помощью и в строке мы воспользуемся вот таким вот методом которые пропишем чуть позже он называется get formatted и будет применён сначала к часам затем то же самое мы применим к минутам поэтому я все это скопирую соответствующему пропишем устать часов минуты ну и наконец для секунд будет тоже самое а вот этот метод get формата то он будет следующий раз мы его сделаем

для секунд будет тоже самое а вот этот метод get формата то он будет следующий раз мы его сделаем уровня методов класса пропишем декоратор класс месяц далее вот этот приватный метод get formatted и он у нас будет принимать на вход некое числовое значение x так вот это числовое значение x моим затем виде строки пойду мы преобразуем сначала к строке x а затем для строк вызывают этот метод р just чтобы преобразовать цифры вот в такой формат мы добавляем не значащие ноль справа то есть если у нас

преобразовать цифры вот в такой формат мы добавляем не значащие ноль справа то есть если у нас цифра число является например 987 там и добавляю вот это вот нолик справа что было 01 02 03 и так далее то есть вот именно это делает метод get формат от все вот в таком вот виде мы с вами реализовали класс клок теперь мы можем создавать экземпляры этого класса давайте сделаем это следующим образом позор как это вообще все работает дальше так simply are close o'clock c1 и перед этим количество секунд

как это вообще все работает дальше так simply are close o'clock c1 и перед этим количество секунд пусть будет 1000 и далее с помощью функции print мы выведем с помощью метода gt текущее время запустим программу и смотрите мы видим вот этого текущее время то есть 1000 секунд это на самом деле 16 минут и 40 секунд а теперь предположим что после того как мы создали экземпляр класса хотели бы увеличить время ну скажем на 100 секунд как вот сейчас мы это можем сделать очевидно что для этого мы

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

экземпляр класса азия плюс 100 вот так вот то есть не обращаясь конкретно молока ли мы свойству а просто работая с экземпляром класса конечно я сейчас запустить программу то будет ошибка потому что вот это вот оператор сложения не работает с экземпляром класса c отдела однако и можем поправить если вот в этот класс клок добавить специальный магический метод который как вы уже догадались называется а д д давайте я вас начал запишу а потом подробно объясню как он работает и так вот этот other

а д д давайте я вас начал запишу а потом подробно объясню как он работает и так вот этот other который здесь представлен параметра other это как раз будет значение то значение которое стоит справа от оператора плюс то есть в данном случае это будет значение 100 a cell вот этот будете csa ссылаться на текущий экземпляр класса то есть на экземпляр класса c 1 итак чтобы реализовать вот этот сложением и по идее можем прописать все это так я возвращу новый экземпляр класса клок который будет

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

вот здесь вот вместо ста мы можем прописать и любой другой значение но например в строку да поэтому здесь от по идее нужно проверить вот этот азара то есть целым типом я это сделаю следующим образом сделаю обратную проверку если есть и сын стелс вот этот азарт не относится к типу int то мы сгенерируем исключение на что здесь этот райс и исключение будет арифметикой ров а сообщение правый операнд должен быть целым числом если мы теперь запустим программу то как раз вот это вот исключение и

должен быть целым числом если мы теперь запустим программу то как раз вот это вот исключение и увидим то есть мы когда передаем здесь строку той записываю строку то вместо other подставляется строка и она естественно не соответствует типу int а если мы укажем целые значение как это и должно быть то все проходит без каких-либо ошибок и давайте теперь подробнее все же разберем как работает вот этот метод а д д смотрите когда мы вначале создать экземпляр класса клок то вот у нас здесь он появился

метод а д д смотрите когда мы вначале создать экземпляр класса клок то вот у нас здесь он появился и на этот экземпляр слайд с переменной c 1 далее выполняя его такую операцию с экземпляром класса с один плюс 100 то в действительности вызывается вот такой то место д д то есть вот эквивалент вот такую запись c 1 плюс то это все равно что c1 и вызывается метод а д д с аргументом что то есть вот это вот 100 подставлять в качестве аргумента и в other у нас появляется как раз вот этого значение 100

вот 100 подставлять в качестве аргумента и в other у нас появляется как раз вот этого значение 100 то есть я переписал вот здесь вот а реализацию этого метода д.д. и вот когда вот здесь вызывается метод а д д то соответственно в other подставляется числовое значение 100 далее идет проверка если это проверка проходит то мы создаем новый экземпляр класса новый экземпляр класса клок с новым значением секунд то есть мой к прежнему значению 1000 добавляем новое значение 100 и получаем соответственно

секунд то есть мой к прежнему значению 1000 добавляем новое значение 100 и получаем соответственно значение 1100 и далее вот это вот ссылка c1 она перемещается на этот новый экземпляр класса потому что мы вот здесь вот присваиваем c1 тому классу который вот здесь вот возвращаем но прежде класс на него уже нет никаких внешних ссылок поэтому он автоматически удаляется сборщика мусора то есть все происходит вот по такой вот схеме вас здесь может удивить сложность процессов когда нам нужно всего

происходит вот по такой вот схеме вас здесь может удивить сложность процессов когда нам нужно всего лишь прибавить 100 секунд к уже имеющемуся значению но это сложность оправдана чтобы понять почему мы в начале расширим вот этот функционал оператор сложения и допустим что можно складывать здесь не только объект с числом но и два объекта класса клок то есть если мы создадим еще один экземпляр но скажем со значением 2000 то хотелось бы реализовывать вот такую логику c 1 + c 2 ну и пусть все это

скажем со значением 2000 то хотелось бы реализовывать вот такую логику c 1 + c 2 ну и пусть все это присваивается некой переменной c 3 если запустить вот такую программу то у нас будет ошибка очевидно ошибка арифметика роль потому что вы здесь вот эта вот проверка не проходит нам нужно именно тип int но мы поправим сейчас вот этот метод а д д так чтобы вот этот вот экземпляр класса тоже можно было писать справа от оператора сложения в начале бы конечно же должны допустить что вместо тип 1 что

писать справа от оператора сложения в начале бы конечно же должны допустить что вместо тип 1 что также использовать и экземпляры класса клок то есть мы запишем здесь атакуют кортеж здесь сообщение добавил что должен быть тип int или клок а вот здесь вот нам нужно немножко поправить программу так что если азар является экземпляром класса как то вот так вот просто прибавлять значение к секунды мы уже не можем я возьму такую вспомогательную переменную s c она изначально будет ссылаться на вот этот

не можем я возьму такую вспомогательную переменную s c она изначально будет ссылаться на вот этот азар и далее мы сделаем проверку если вот этот other является экземпляром класса клок то соответственно sc должна ссылаться не просто на азор no other . секанс вот так вот ну а здесь места msc запишем то есть если other это у нас просто целое число то сотрясается будет ссылаться на целое число а если озер и the clock to st будет ссылаться на вот этот свой сисег once этого объекта зор теперь если

озер и the clock to st будет ссылаться на вот этот свой сисег once этого объекта зор теперь если запустить эту программу вот в таком вот виде а то мы с от веса сложим тысяч секунд + 2000 секунд из второго объекта и получи атакуют время 50 минут давайте более детально посмотрим на работу вот это вот магической метода т.д. я поставлю здесь точка останова запущу программу в режиме отладки нажимаем здесь f7 и смотрите попадая вот вот место т.д. в этом методе а д д у нас вот этот other ссылается как

f7 и смотрите попадая вот вот место т.д. в этом методе а д д у нас вот этот other ссылается как раз на объект c2 и это объект со 2 содержит количество секунд равное 2 тысячи далее вот этот проверка естественно проходит сейчас с и она ссылается на вот этот объект клок поэтому вот эта вторая проверка тоже проходит мы берем из этого объекта секунды то есть у нас sc принимает значение 2000 ну и далее формируем новый объект клок из экземпляра класса тс-1 мы берем количестве кода равной 1000

и далее формируем новый объект клок из экземпляра класса тс-1 мы берем количестве кода равной 1000 прибавляем 2000 секунд из объекта класса c 2 но и соответствие получаем новый объект клок со значением секунд 3000 до что выполняю есть вот c3 как раз ссылается на этот новый объект ну и вот здесь вот количество секунд убавить 3000 и далее помощи метода г time преобразуем эти секунды вот к такому формату часы минуты и секунды что мы здесь с вами видим а теперь ответ на вопрос для чего понадобилось

часы минуты и секунды что мы здесь с вами видим а теперь ответ на вопрос для чего понадобилось вот такая сложная схема реализация операции сложения смотрите мы в нашей программе по идее можем создать еще третий экземпляр класса клок но пульс количеств секунд будет 3000 и реализовывать вот такой сложение сразил + c 2 и плюс c 3 и все это присвоим c4 и теперь ясно запустить программу то она у нас с работой без каких-либо ошибок то есть смотрите что у нас здесь произошло в начале мы сложили два

с работой без каких-либо ошибок то есть смотрите что у нас здесь произошло в начале мы сложили два вот таких вот объекта сайдинг + c 2 но это ковалентно выполнение вы такое команда c1 . то есть вызываем магическими а добейтесь неявно и передаем в качестве аргумента ссылку на объект c2 в результате метод adobe отрабатывает и создает новый экземпляр класса клок со значением секунд равной 1000 то есть мы сложили вот эти вот секунды тысяч плюс две тысячи и получили три тысячи и предположим что на

мы сложили вот эти вот секунды тысяч плюс две тысячи и получили три тысячи и предположим что на этот экземпляр класса идет такая временная переменной т 1 оно создается автоматически и интерпретатором языка python когда выполняется от этого сложения далее мы выполняем следующие сложение c3 но мы c3 складываем уже вот с этим объектом ты один то есть у нас получается следующая операция здесь t1 для т1 вызывается метод магические а д д и в качестве аргумента передается объект c3 то есть мы

t1 для т1 вызывается метод магические а д д и в качестве аргумента передается объект c3 то есть мы складываем 3000 секунд вот эти вот с тремя тысячами секундами из класса c 3 и получаем новый объект с числом секунд равной 6000 и на этот новый класс ведет временная переменной т 2 после того как это сложение отработала у нас вот этот перемена c4 уже будет ссылаться на вот этот экземпляр класса а этот экземпляр будет автоматически уничтожен сборщика мусора даже после сложения вот эта временная

этот экземпляр будет автоматически уничтожен сборщика мусора даже после сложения вот эта временная переменная пропадет из офиса внешних ссылок на это экземпляр уже не будет поэтому сборщика мусора и удалит то есть если бы мой метод мдд не создавали вот эти вот новые объекты объекты класса клок то с одессы не смогли бы реализовывать вот такой последовательный сложение нескольких экземпляров этого класса вот именно для этого и нужна вот такая схема вот такой поэзией который мы с вами и

этого класса вот именно для этого и нужна вот такая схема вот такой поэзией который мы с вами и реализовали в магической методе а д д еще одним важным нюансом работа оператор сложения для объектов классов является порядок их записи предположим вот у нас есть экземпляр класса c 1 и по идее мы сейчас можно совершенно спокойно выполнять вот такую операцию с этим равняется 1 плюс 100 и никаких ошибок не будет но если мы вот здесь вот поменяем порядок этой записи то есть напишем здесь 100 а здесь c1

не будет но если мы вот здесь вот поменяем порядок этой записи то есть напишем здесь 100 а здесь c1 то у нас ошибку же возникнет ошибка в том что мы вот здесь вот по сути дела пытаемся для объекта and тоже целое число это объекты and вызвать вот этот магический метод а д д и передать в качестве аргумента не какое-то другое число а объект класса клок вот именно из за этого у нас здесь и происходит вот это вот ошибка как выйти из этой ситуации очень просто язык python предоставляете нам

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

класса клок записан справа и тела давайте это сделаем определил нашем классе вот этот метод р а д д реализуем его следующим образом наш пропишем df здесь р а д д а и здесь просто вернем вот такую операцию сел в плюс азар то есть когда у нас будет выполняться вот это сложение сил в плюс other то вызовет свою очередь вот этот магический метод а д д он здесь формирует новый экземпляр класса клок и этот новый экземпляр класса клок вернет уже вот этот метод р а д д то есть мы просто сказали что

и этот новый экземпляр класса клок вернет уже вот этот метод р а д д то есть мы просто сказали что нужно делать если экземпляр класса клок а будет записан справа от оператора сложения запустим нашу программу убедимся что все работает да все отработал и мы здесь видим соответствующее время давайте посмотрим в деталях как это работает я поставлю точка останова запущу программу в режиме отладки если и все им смотрите мы переходим вот именно метод р а д д other здесь представляет собой целое число

и все им смотрите мы переходим вот именно метод р а д д other здесь представляет собой целое число стало то есть вот это вот соточка она перешла вот в этот параметр обзор и мы видим здесь 100 дали складывается экземпляр класса уже c 1 плюс 100 то есть идет обычное такое сложение именно поэтому мы должны перейти сейчас метод адыгея я нажму здесь и всеми опять же и действительно вы перешли метод а д д здесь other по-прежнему 100 sl экземпляр класса c 1 ну и далее стандартный уже алгоритм который

д д здесь other по-прежнему 100 sl экземпляр класса c 1 ну и далее стандартный уже алгоритм который мы с вами реализовали есть создается новый экземпляр класса клок с новым количеством секунд ну и вот возвращается уже вот эти вот методом а р а д д и здесь сатин быть slots знает новый клип lear класса со значением секунд 1100 и далее мы отображаем это время в консоли и видела такое значение новые наконец у всех магических методов связаны с арифметическими операторами есть еще одна модификация с

наконец у всех магических методов связаны с арифметическими операторами есть еще одна модификация с использованием вот такой первые буквы ой то есть она по сути дела определяет вот такую операцию в данном случае это плюс равно то есть когда записывается буковка а это означает операций вот плюс равно умножить равно минус равно и так далее давайте вначале попробуем прописать выезд в нашей программе такой оператор плюс равно 100 просто я спешу и посмотрим сработает ли это вообще запуская до

такой оператор плюс равно 100 просто я спешу и посмотрим сработает ли это вообще запуская до срабатывает никаких проблем нету но здесь есть один нюанс когда используется операция плюс равно то вот здесь вот у нас сейчас создается новый экземпляр класса клок а по идее этого делать не нужно потому что когда мы делаем такие операции + равно умножить равно и так далее новый экземпляр класса создавать в принципе не надо а просто изменить значение его локальной переменной second поэтому давайте в

в принципе не надо а просто изменить значение его локальной переменной second поэтому давайте в нашем классе определим еще один магический метод вот именно ой addr в начале я пропишу функцию print чтобы мы убедились что действительно этот магический метод у нас срабатывает ну а далее мы пропишем логику логика очень простая в начале проверим что вот этот other является или числом целом или объектом класса клок то есть мы пишем other здесь кортеж int , клок и если это не так там и соответствует

класса клок то есть мы пишем other здесь кортеж int , клок и если это не так там и соответствует генерируем исключения а и жмите кайрош сообщением правая пиран должен быть кентом или клок далее мы повторим вот эти вот строчки предыдущих реализации то есть вычислим количество секунд который нужно изменить а затем в текущем экземпляре класса то есть я через l обращусь вот к такому свойство секс и увеличу его до значение sc ну и запишем затем а ведь он цел все то есть мы здесь теперь не создаем

увеличу его до значение sc ну и запишем затем а ведь он цел все то есть мы здесь теперь не создаем новый экземпляр класса а в текущем экземпляры всем экземпляр класса c 1 просто увеличиваем изменяем количество секунд на 100 запустим эту программу и видим что у нас все сработало и действительно отработал вот этот метод ой а д д то есть вот такая то реализацию нас будет логичнее когда используется оператор плюс равно то срабатывает метод ой а д д когда мы просто складываем какие-то два объекта

оператор плюс равно то срабатывает метод ой а д д когда мы просто складываем какие-то два объекта или объект с числом то уже будет отрабатывать или метод а д д ели метод р а д д и благодаря определению вот 3 таких магических методов а д д р а д д а а д д мы общем-то описали все вариации вот это вот оператор сложения и теперь вы знаете во всех деталях как это делается по аналогии используется и все остальные подобные магические методы предлагаю вам в качестве самостоятельного задания добавить

все остальные подобные магические методы предлагаю вам в качестве самостоятельного задания добавить некоторые из них в класс клок также как это мы делали с магически методом а д д при этом обращать внимание на недопустимость дублирование кода оно произойдет если вы в лоб будет просто прописывать другие арифметические магические методы подумайте как все сделать правильно да это мы совершим это занятие на следующем продолжим эту тему и поговорим о реализации операторов сравнения [музыка]

#15. Методы сравнений __eq__, __ne__, __lt__, __gt__ и другие | ООП Python

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=l3jMyZKDxXE! This is most likely caused by:

For this video (l3jMyZKDxXE) transcripts are available in the following languages:

None

#16. Магические методы __eq__ и __hash__ | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии мы затронем тему вычислений хэша для объектов классов вначале что это такое и зачем нужна смотрите в python имеет специальная функция которая называется хэш позволяющая вычислять хэш по определенному алгоритму для неизменяемых объектов причем для равных объектов на выходе всегда будет получаться одинаковый хеш давайте в этом убедимся я перейду в python концов и здесь как раз воспользуемся ты тут функциях и что есть пишем хэш а

я перейду в python концов и здесь как раз воспользуемся ты тут функциях и что есть пишем хэш а дальше нитей неизменяемый объект например целое число на выходе получая в общем то такое же целое число или давайте пропишем строку python соответственно получим уже некое другое число если снова вычислить хочу для этого объекта python то получим точно такой же числовое значение то есть одинаковый хеш ну или мы можем взять хэш от кортежа 123 соответствие получим какое-то другое числовое значение

хеш ну или мы можем взять хэш от кортежа 123 соответствие получим какое-то другое числовое значение соответствии со взять хэш а такого же карты же еще раз то соответственно получим точно такой же hash то есть для одинаковых объектов хэша у нас одинаковая но вот обратное утверждение в общем случае не верно если хэш одинаковое это не обязательно означает что я объекты тоже будут одинаково и они могут быть разные хотя это происходит крайне редко но тем не менее это возможно это как в известном

могут быть разные хотя это происходит крайне редко но тем не менее это возможно это как в известном выражение селедка эта рыба но не каждая рыба селедка под с хэшами все абсолютно также однако если хэши неравное то бы точно можем сказать что и объекта тоже не равны то есть мы получаем вот такие вот свойство для хэш а если объекта равны то равные хэши равенство хэшей не гарантирует равенство объектов ну а если хэши не равны то объекты точно не равное причем обратите внимание hishe можно

объектов ну а если хэши не равны то объекты точно не равное причем обратите внимание hishe можно вычислять только для неизменяемых объектов если мы попытаемся вычислить хэш скажем для списка а списка это изменяемый объект то получим вот такую ошибку хаша болтать то есть них ашер у имый объект изменяемая объекта является них ашер у и маме и так мы увидели что для любого не изменяемого объекта можно вычислить хэш с помощью функции хэш но зачем все это надо в действительности некоторые объектов

вычислить хэш с помощью функции хэш но зачем все это надо в действительности некоторые объектов python например словари использует хэши в кассе своих ключей давайте вспомним когда мы у словаря прописываем какой-либо ключ то он должен относиться к не изменяем объекту то есть прописать ключ например в виде числа 5 можно прописать ключ в качестве строки вот такое скажем python тоже можно никаких ошибок здесь не будет а вот прописать ключ скажем в виде списка уже нельзя потому что список это

ошибок здесь не будет а вот прописать ключ скажем в виде списка уже нельзя потому что список это изменяемый объект и потому высекает такая ошибка при чем ошибка звучит вот так вот herbal time то есть в качестве ключей словаря можно использовать только фишеру ему объекта ну ок таким относится как раз неизменяемые объекта в действительности когда мы прописываем вот эти вот строчки то словарь хранит ключ и видела такой коллекция хэш ключа и сам ключ то есть прежде чем сформировать ключ от него

ключ и видела такой коллекция хэш ключа и сам ключ то есть прежде чем сформировать ключ от него вычисляется хэш и соответствовать миру и ца атакуют кортеж зачем это нужно для чего вычислять еще дополнительно хэш ключа у этого словаря дело в том что первоначально нужные запись словаре ищется как раз похож а потому что существует быстрый алгоритм поиска нужного значение хэша а затем для равных хэшей если такие все же были обнаружены отбирается запись с указанным в ключи объекте такой подход

хэшей если такие все же были обнаружены отбирается запись с указанным в ключи объекте такой подход значительно ускоряет поиск значений в словаре думай теперь вы себе представляете что такое hash и зачем он нужен давайте теперь рассмотрим простой класс я вот здесь от python консоли в виду как класс point для представления точки на плоскости мы с вами много раз это делали поэтому чтобы не усложнять наши занятия я повторю этот класс значит у него будет инициализатор принимает 2 параметра x и y и

наши занятия я повторю этот класс значит у него будет инициализатор принимает 2 параметра x и y и соответствие когда создается экземпляр этого класса мы эти параметры сохраняем то есть каждом экземпляре классы есть это локальные свойства x y координата точки на плоскости далее мы можем создать экземпляр этого класса давайте мы это сделаем вот так вот поэт и координаты 1 и 2 и второй экземпляр будет очень такой же то есть с точно такими же координатами 1 и 2 а затем мы вот для этих объектов

будет очень такой же то есть с точно такими же координатами 1 и 2 а затем мы вот для этих объектов python и p2 можем совершенно спокойно вычислить их хэши то есть воспользуемся функцией хэш для первого объекта потолкуешь для второго объекта но и выведем и в консоли друг под другом то есть вот такой параметр с переносом строки запустим эту программу и смотрите у нас с вами получилось что для этих объектов python p2 вот такие вот хэштег хэша вычисляется никаких проблем нету это означает что вот

объектов python p2 вот такие вот хэштег хэша вычисляется никаких проблем нету это означает что вот эти вот объекты класса по id воспринимает сейчас как неизменяемая ну вот так вот на самом деле происходит объекты вот такого пользовательского класс который мы с вами сами создаем а не воспринимается как неизменяемые и для них можно вычислять хэш с помощью такой функции хэш притчи вот эти вот хэш у нас здесь получились разные несмотря на то что координаты точек у нас одинаковая то есть с точки

у нас здесь получились разные несмотря на то что координаты точек у нас одинаковая то есть с точки зрения функции хэш эти объекты разное но как она понимает одинаковый объект или разное все очень просто если вот такой оператор сравнения по 1 равняется p 2 выдается по значение фолз значит объекты разное а если бы она выдавал true to объекты считались бы одинаковыми но соответственно для разных объектов хэш должен быть разной а для одинаковых одинаковые но раз это так то что будет если мы вот в

хэш должен быть разной а для одинаковых одинаковые но раз это так то что будет если мы вот в этом классе point переопределим с вами известный магически метод и тю который как раз и отвечает за работа вот это вот оператора мы в частности здесь можем сделать так что объекты у которых одинаковый координаты были бы равны сделаем это значит я пропишу здесь сел в . x равняется азар . x и вторая координата то есть мы пропишем точно такой же условия только уже для y дальше здесь у нас будет сел в . y и

то есть мы пропишем точно такой же условия только уже для y дальше здесь у нас будет сел в . y и азар . y все если у нас координат совпадает а вот этот условие будет истинным ну и соответственно вот этот оператор возвратит истину давайте запустим программу и убедимся в этом да теперь мы видим значение true до этого был холст фильтру раз этот танк то вроде бы вот этот функции хэш нам теперь должна давать одинаковые значения давайте попробуем это сделать запустим программу и получаю вот такую то

давать одинаковые значения давайте попробуем это сделать запустим программу и получаю вот такую то ошибку анхи сшибал type дело в том что когда мы в своих пользуется этих классах переопределяем такой магически метод youtube который отвечает за проверку равенство двух разных объектов то вот этот функция хэш перестает работать даже перестает работать стандартный алгоритм вычисления хэша как можно поправить этой ситуации и все же вычисляет хэш для вот таких вот объектов где мы переопределили вот

поправить этой ситуации и все же вычисляет хэш для вот таких вот объектов где мы переопределили вот этот магический метод все достаточно просто и здесь дополнительно нам нужно переопределить и вот такой магический метод который как раз и вызывается когда вычисляется хэш вот это вот объекта p1 и p2 в частности мы можем и здесь прописать вот такую конструкцию то есть вызвать стандартную функцию хэш но не от объекта с elf вот так вот а от кортежа координат то есть здесь будет кортеж сел в . x сэйв

но не от объекта с elf вот так вот а от кортежа координат то есть здесь будет кортеж сел в . x сэйв . y ну и соответственно нас получится что мы вычисляем хэш от координат наших точек опять же запустим эту программу и убедимся что теперь все работает ошибок и нету и хэши у нас получается равными то что ты тот кортеж у нас в обоих объектах с одежда одни и те же числовые значения 1 и 2 то есть мы подменили вычисления хэша объекта класса point на вычисление хэша от координат точки что в итоге нам

вычисления хэша объекта класса point на вычисление хэша от координат точки что в итоге нам это даёт смотрите если мы выделить вот формируем какой-либо словарь давать воды пустой словарь и дали в качестве ключей этого словаря укажем первый объект пойдет присвоим единицу и второй объект p2 присылаем двойку а затем с помощью функции print выведем этот слова в консоль то мы увидим следующее значит в этом словаре всего один ключ вот он идет в начале здесь в виде объект класса point со значением 2 о

этом словаре всего один ключ вот он идет в начале здесь в виде объект класса point со значением 2 о чём это говорит это говорит о том что вот этот объект p1 и p2 сейчас воспринимаются как один и тот же ключ потому что их хэши равны и оператор сравнения на равенство этих объектов также выдает true то есть это по сути дела для словаря один и тот же ключ а вот если мы вот здесь от в классе закомментируем вот эти вот магические методы и снова запустим программу то как вы понимаете у нас получается

вот эти вот магические методы и снова запустим программу то как вы понимаете у нас получается два разных ключа u10 то есть теперь p1 это один ключ ap2 это совершенно другой ключ несмотря на то что вроде бы точки made одинаковая координата их может быть вот в этой задаче следовало бы воспринимать как одинаковые ключи одинаковые объекты но тем не менее по умолчанию это два разных объекта но если мы хотим поменять поведение и сделать так чтобы точки с одинаковыми координаты воспринимались как один

хотим поменять поведение и сделать так чтобы точки с одинаковыми координаты воспринимались как один и тот же объект то для этого можно переопределить вот такой метод хэш и вычислять хэш уже от координат этих точек вы из опять же запустим программу то увидим всего один ключ а вот если у какого-либо объекта изменить координату вот допустим вот так вот и снова запустить программу то снова получаем два разных ключа то есть вот так вот благодаря переопределения от этого магического методах ешь ну и

разных ключа то есть вот так вот благодаря переопределения от этого магического методах ешь ну и метода и choo вот это вот мы с вами получили что объект класса по и с одинаковыми координатами воспринимается как одинаковые объекты вот для чего может понадобиться тонко настраивать работ функции хэш для объектов классов и теперь вы знаете как это делается [музыка]

#17. Магический метод __bool__ определения правдивости объектов | ООП Python

здрасте треки друзья я сергей балакирев и на этом занятии мы поговорим о способах настройки и определения правдивости объект в классов что такой правдивость это когда к экземпляру класса явно или неявно применяется функция ball с этой функции мы с вами уже знакомы и применяли к обычному типом данных ну например вот так вот я перейду в python концов здесь и покажу вызываем функцию bull для какого-либо числового значения 123 например получаем true или был от минус единиц тоже будет true ясно пишем

числового значения 123 например получаем true или был от минус единиц тоже будет true ясно пишем bull от нуля то уже будет соответственно фолз то есть для пустых до находят функции был выдает а ложь то есть falls а для одни пустых истину true но это же самый со стройкой можем прописать vis-a-vis напишем python то соответствовал учим истину а если прописать пустую строку то получим соответственно ложь или пустой список тоже будет ложь то есть вот так вот работает эта функция был со стандартными

ложь или пустой список тоже будет ложь то есть вот так вот работает эта функция был со стандартными типами данных давай спасай что она будет делать для экземпляров класса я возьму такой простой класс уже знакомый нам класс point для представляет точки на плоскости и создадим для этого класса объект объект point с координатами допустим 3 4 а далее применим вот этот функцию болтайся вызвав функцию print а есть уже функцию болт был от p от экземпляра класса п и посмотрим что у нас будет в консоли

print а есть уже функцию болт был от p от экземпляра класса п и посмотрим что у нас будет в консоли видео здесь значения true в действительности вот этот функция был всегда возвращает true для любых объектов пользовательского класса тогда получается что особого смысла в этой функции ед применить его к объектам нашего класса и совсем мы можем переопределить ее поведение либо через магический метод элен либо через магический метод ball давайте в начале воспользуюсь вот эти вот магически методом

элен либо через магический метод ball давайте в начале воспользуюсь вот эти вот магически методом лент и по сути вы как это приведет к изменение работы функции ball значит вы здесь вот в нашем классе point мы соответственно определим магический метод лет который вычисляет вот это возвращает некую длину от нашего объекта п ну давайте мы будем возвращать квадрат длины радиус-вектора вначале я вот здесь воспользуюсь функцией pride чтобы видеть что действительно вот этот магически нет следа

я вот здесь воспользуюсь функцией pride чтобы видеть что действительно вот этот магически нет следа вызывается есть просто пишу так тлен ну а возвращайся на будет соответственно квадрат длины вот это вот радиус-вектора то есть вот эта вот точка допускать ему можно воспринимать как радиус-вектор ну и соответственно вот вернем здесь его квадрат то есть длину в квадрате c7 y умножили на sell вот y все вот так что мы будем вычислять длину для нашей точки то есть если взять здесь члена от подчас то

вот так что мы будем вычислять длину для нашей точки то есть если взять здесь члена от подчас то соответственно видим вот это значение 25 но и видел что функционеров было вызвано и то же самое будет если мы применим функцию ball запустим программу но и здесь мы видим что функциях было вызвано вот этот магический метод и получили за чей утра но почему получили значение true то что функций ball от любого числового значения отличного от нуля возвращает истину true а вот если длина нашего вектора

любого числового значения отличного от нуля возвращает истину true а вот если длина нашего вектора будет равна нулю то здесь картина то-0 поставим то у нас уже вот этот пункт смену заразит 0 поэтому функция bull в этом случае возвращает falls то есть вот так вот переопределяя функцию ли магический метод лет мы можем менять поведение вот этого стандартный функции bull применительно к объектам класса point конечно если нам нужно явно описать алгоритм работы функции bull применительно к нашим

класса point конечно если нам нужно явно описать алгоритм работы функции bull применительно к нашим экземпляром то соответственно уже переопределить вот такой метод был он работает в приоритете то есть если вы вызываете тот функции ball и находится вот такой то магический метод то именно он и вызывается я здесь опять же приду пропишу чтобы убедить что действительно тут был сработал ну а далее здесь должна быть некая логика работы вот это вот магического метода я логику работы сделать очень

здесь должна быть некая логика работы вот это вот магического метода я логику работы сделать очень простую то есть в учебных целях мы сделаем так если координаты точки равны то соответственно вот этот функция была будет возвращать истину а если не равна это ложь давайте вы здесь вот ниже в экземпляре класс поставим координата допустим 10 и 10 и запустим программу в этом случае мы видим true и действительно была вызвана функция bull то есть метод ball это тот магический который мы с вами только

была вызвана функция bull то есть метод ball это тот магический который мы с вами только что определили то есть он работает именно в приоритете из она ходит с от escada функция будет отрабатывает то вызывается именно вот этот магический метод метод лена уже в этом случае не отрабатывает ну а если мы здесь запишем какие-то разные карате но это допустимо 1 и 10 то соответственно получил значение falls причем вот этот магический метод был всегда должен возвращать либо true либо false то есть

falls причем вот этот магический метод был всегда должен возвращать либо true либо false то есть булевые значения возвращать что-то другое есть не допустим то есть числа например вот как вытащить функций н так сделать уже нельзя обязательно магический метод был тоже возвращать только бурю и значение либо true либо фолз как говорится все это хорошо но опять же возникает вопрос а где это может пригодиться лет может понадобиться но обычно вот эту функцию было так вот в явном виде все же не

пригодиться лет может понадобиться но обычно вот эту функцию было так вот в явном виде все же не вызывают оно вызывается не явно не явно в условных операторах например я сама пропишу атакует условии если п то вот как раз вот в этот момент и будет отрабатывать функции был давайте сделаем так что если вот этот п то есть если п будет истина там и соответствие вывезем в консоль сообщение объект п дает true ну а иначе мы выведем противоположное сообщение что объект подает фолз запустим нашу

п дает true ну а иначе мы выведем противоположное сообщение что объект подает фолз запустим нашу программу и смотрите в данном случае объект падает холст даже действительно координатора зная и вот этот метод был магическими that ball virtual фолз то есть отработала вот эту ответка л.с. иначе и мы видим вот эту вот сообщение но если координаты поставить одинаковые вот здесь вот та вот этот метод был возвратить true истину и соответственно и даже увидеть вот эту строчку запустим программу и

был возвратить true истину и соответственно и даже увидеть вот эту строчку запустим программу и действительно мы ведь вот этот первую строчку то есть вот так вот в условных операторах неявно отрабатывать вот этот магический метод был и если он возвращает истину то соответствуй условие срабатывает а если ложь то условия не срабатывает поэтому в программах где требуется описать собственной проверки истинности или ложности объектов то пользуется дает магически методом болт но реже магическим

истинности или ложности объектов то пользуется дает магически методом болт но реже магическим методом ли она вот собственно такую информацию я хотел вам донести до этого занятия ну и я надеюсь вы теперь понимаете как работает вот эти два магических метода для вот это вот функции bull и в случае проверки истинности того или иного объекта нашего класса [музыка]

#18. Магические методы __getitem__, __setitem__ и __delitem__ | ООП Python

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

из списка его оценок соответственно каждый экземпляр этого класса будет содержать имя студента и соответственно списка оценок далее ниже мы можем создать объект этого класса ну например вот так вот сьюзен здесь указать некое имя пусть будет сергей и дали его оценке пусть будто оценки такие 55 325 после этого мы можем обратиться вот к этой вот коллекция маркс объекты с 1 и выбрать определенный элемент но например с индексом 2 давайте запустим программу убедимся что все работает и мы здесь видим

но например с индексом 2 давайте запустим программу убедимся что все работает и мы здесь видим тройку то есть троечка это как раз вот этот элемент с индексом 2 но что если мы бы хотели делать все тоже самое только используя такой синтаксис непосредственно через ссылку на объект то есть через с 1 обращаться к нужному индексу и тем самым выбирать нужную оценку вот из этого списка если мы сейчас запустим программу от в таком виде то очевидно она не будет работать потому что объект класса с youtube

программу от в таком виде то очевидно она не будет работать потому что объект класса с youtube и поддерживает такой функционал но как вы уже догадались мы можем поправить этот момент если определим в нашем классе магический метод get ой там вот гад ой там он как раз позволяет через вот эти вот квадратной скобки возвращать определенное значение при чем вот это вот крючкова который мы здесь прописываем он передается вот в этот параметр ой там и соответственно мы можем вернуть здесь нужные

прописываем он передается вот в этот параметр ой там и соответственно мы можем вернуть здесь нужные значения для этого я обращаюсь в открытой в коллекции маркс ну и мы возвратим элемент с индексом ой там запустим программу теперь никаких ошибок и нету и соответствие видел здесь вот эту троечку то есть мы опять же с индексом 2 обратились водка это вот коллекция маркс выбрал тройку и а то бразилии в консоль но уже использует такой синтаксис чтобы убедиться что это действительно так работает я

в консоль но уже использует такой синтаксис чтобы убедиться что это действительно так работает я поставлю здесь точка останова запущу в режиме отладки эту программу здесь на жму f7 и смотрите мы автоматически перешли вот в этот магический метод гайдом переменная ой там здесь параметра этом принимать значение 2 ну и соответственно мы возвращаем оценку с индексом 2 то есть в деталях все работает вот именно так но разумеется если мы здесь укажем несуществующей индекс допустим 20 и снова запустим

именно так но разумеется если мы здесь укажем несуществующей индекс допустим 20 и снова запустим эту программу то у нас уже будет ошибка такая inox out of range то есть это ошибка которая была сгенерирована уже вот эти вот объектом списка конечно при необходимости мы можем обрабатывать эти элементы сам тыс проверять что вот этот переменная ой там она находится в допустимых пределах пусть в нашем случае допустимый предел будто у такие вот от нуля и до длины этого списка то есть меньше длины вот

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

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

студентов используя такой же яндекс с а дух равняется 4 я сейчас опять же запустить программу то возникнет ошибка потому что вот этот объект я сойдем то есть класс student не поддерживает операцию присваивания для этого опять же нужно определить следующий магический метод который называется сет ой там то есть мы пишем сад этом интегрированная среда нам здесь сразу подсказывает нужные параметры те это будет вот эту yandex двоечка в л.а. это вот это вот значение четверки к в данном случае не зная

это будет вот эту yandex двоечка в л.а. это вот это вот значение четверки к в данном случае не зная все вот эти вот значениям и соответственно можем и здесь выполнять определенную логику но в данном случае мы хотим просто вот в эту коллекцию маркс записывать определенное значение то есть маркс оттель равняется в л.а. вот в самом простом варианте мы можем это сделать так я сейчас запустим программу то она отработает и мы видим что вот эту в коллекции изменилось то есть вот это троечка который

то она отработает и мы видим что вот эту в коллекции изменилось то есть вот это троечка который здесь стояла а превратилась четверку но чтобы мы это точно все увидели я отображу эту коллекции целиком я сайте над маркс соответствовать здесь мы видим 554 опять а было 55 325 то есть все сработало в принципе именно так как мы это и хотели но опять же если здесь поставить точку останова запустить программу в режиме отладки я нажму здесь f7 то мы сразу переходим сюда утру метод с этой там гостей

программу в режиме отладки я нажму здесь f7 то мы сразу переходим сюда утру метод с этой там гостей принимает значение 2 в луи принимает значение 4 ну и соответственно вот в эту коллекцию список маркс с индексом 2 прописываем новые значения 4 но здесь нам по хорошему нужно проверять что вот этот параметр кей он принимает целые значение потому что списка работает только с целочисленными индексами поэтому я здесь так припишу если вот этот параметр t и он не является целым значением то мы

поэтому я здесь так припишу если вот этот параметр t и он не является целым значением то мы сгенерируем исключение исключение type r с сообщением что индекс должен быть целым ни отрицательным числом кстати давайте здесь ещё одну проверку силы чтобы у нас параметр тень был положительный то исчез он будет отрицательный то тоже отработает ты тут исключения ну а если проверка пройдет то соответствие мы поменяем определенные значения вот в этой нашей коллекции маркс опять же запустим программу все

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

мы и записали только положительные числа пусть предположим что мы именно так и хотим чтобы здесь можно было писать только ложить или числа и вот эту вот метод 100 там нам позволяет все это сделать в тоже мы здесь можно прописывать свою собственную логику проверьте вот этот параметр окей ну давайте есть в таверну двоечку и даже вместо двоечки запишу шестёрочку вот так вот и опять же запустим программу смотрите здесь у нас уже возникает другая ошибка то есть вот этот проверка первые прошла вот

смотрите здесь у нас уже возникает другая ошибка то есть вот этот проверка первые прошла вот это вот значение тень он превышает размер этого списка но и отсюда вот эту вот ошибка и dogs out of reach если предполагает что вот такой функционал допустим с объектами нашего класса студент то вот здесь вот вместо 10 там нужно сделать так чтобы все это тоже работала как это можно сделать я сделаю это следующим образом проверю во-первых если от этого значение те и то есть вот это вот яндекс больше либо

образом проверю во-первых если от этого значение те и то есть вот это вот яндекс больше либо равен длине нашего списка то есть сел маркс то в этом случае мы сделаем одну интересную операцию во-первых вычислим сколько элементов нам нужно добавить вот а вот этот список markt то штиль превышает длину списка для этого я вот этот переменную of временную сформирую который будет равна кей плюс 1 и минус длина вот этого списка маркс а далее мы этот список маркс расширим с почта кого-то методы extend то

длина вот этого списка маркс а далее мы этот список маркс расширим с почта кого-то методы extend то есть это метод списка для списка мы вызываем метод extend и здесь указываем что будем его расширять значение имена умноженными на of то есть мы расширяем его на величину вот так вот список который будет состоять из элементов нан а число этих элементов будет of ну и таким образом мы расширим список до нужного нам размера кей ну а далее после вот это вот проверки мы по нужному индексу запишем новые

нужного нам размера кей ну а далее после вот это вот проверки мы по нужному индексу запишем новые значения ну и проверим как это работает я здесь не шестерку напишу о десятку чтобы лучше было видно как это все происходит запускаем программу и смотрите что у нас здесь произошло значит вот эти вот первые элементы у нас уже существовали но так как вот этого четверка имеет индекс и 10 то вот эти вот новые элементы мы добавили с помощью как раз вот это вот методы x тент который там был прописан и мы

элементы мы добавили с помощью как раз вот это вот методы x тент который там был прописан и мы сказали что вот этот списка начале нужно расширить то есть добавить еще шесть элементов со значениями на on но и потом могут в этой строчке уже последний элемент на заменили на четверку и в итоге получили вот такой вот новый список то есть мы как бы его расширили и записали новые значения иногда тоже так требуется делать и вот мы с вами реализовать такой функционал в нашем методе 100 там ну и наконец

требуется делать и вот мы с вами реализовать такой функционал в нашем методе 100 там ну и наконец последний третий магический метод это билл ой там он вызывается когда происходит удаление того или иного элемента с отвесом и и вот здесь и давайте проверим что тень является целым значением для этого я скопирую эти вот строчки выше вот вот сюда вот и вот этот проверка что те отрицательно я уберу а и здесь мы уже непосредственно будем удалять из коллекции маркс соответствующий элемент то есть

а и здесь мы уже непосредственно будем удалять из коллекции маркс соответствующий элемент то есть элемент с индексом they все вот в таком вот виде а мы реализуем методы уэйдом а чтобы он активизировался соответственно нужно сделать следующее вот здесь вот но давайте вот этот уберу вместо него запишу длс один от двух запустим программу и смотрите у нас действительно был удалён вот этот элемент со значением 3 этаж него индекс 2 но и у нас остался такой списка 5525 вот такие вот и общие

со значением 3 этаж него индекс 2 но и у нас остался такой списка 5525 вот такие вот и общие возможности магических методов детройтом set idem и дел ой там теперь я со в программе вам потребуется реализовать подобную логику то есть обращение к элементам определенных коллекций через атакует синтаксис когда у нас используется ссылка на определенный объект класса то вы теперь знаете как это делать [музыка]

#19. Магические методы __iter__ и __next__ | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии мы будем говорить о методах это и next давайте разберемся для чего они нужны и как их можно использовать мы с вами уже рассматривали что любой список например список это интегрируем эй объект поэтому для него мы можем создать iterator то есть получить iterator это некий интерфейс для перебора элементов любого и ты риру имаго объекта в данном случае списка затем мы последовательно вызываем функцию next и соответственно читаем

в данном случае списка затем мы последовательно вызываем функцию next и соответственно читаем последующие элементы из 4 rue имаго объекта ну и на выходе получаем определенное значение вот универсальный способ перебрать элементы любого оперируемого объекта будь то в списке стройке словарь кортеж и так далее и в частности вот такая функция речь о которой мы с вами уже говорили она тоже является это риру им объектом и возвращает арифметическую последовательность так вот значение этой

является это риру им объектом и возвращает арифметическую последовательность так вот значение этой арифметической последовательности мы можем перебрать с помощью итератора давайте посоле как это делается я перейду сюда от python концов и соответственно вызывает функцию рэйчел таким образом напишу ресторанчик pc и на выходе мы получим вот такой список со значениями ноль один два три четыре вот этот функция лист она внутри себя уже автоматически перебрала все вот эти вот элементы функция range но

функция лист она внутри себя уже автоматически перебрала все вот эти вот элементы функция range но мы можем сделать это и вручную для этого нам нужно создать итератор от этой функции range в принципе с вами об этом уже говорили об раз напоминая как это делается а затем с помощью другой функцию же next мы перебираем вот этот iterator первый вызов функции x даст 1 0 следующую единицу двойку тройку четверку если мы теперь еще раз вызовем функцию next то получим вот такое исключение stop a terrace

четверку если мы теперь еще раз вызовем функцию next то получим вот такое исключение stop a terrace in то есть вот универсальный механизм для перебора любого оперируемого объекта так вот мы можем создать подобный объект используя вот эти вот магические методы и так и next давайте это сделаем на примере класс который будет называться и френч и возвращать арифметическую последовательность но не целых и вещественных чисел для этого я вернусь сюда твой charm и в начале у нас есть заготовка этого

и вещественных чисел для этого я вернусь сюда твой charm и в начале у нас есть заготовка этого класса значит идет инициализатор и мы сохраняем вот такие вот локальные свойства старт стоп стоп то есть этот необходимые данные для генерации арифметической последовательности она будет начинаться значений старт заканчиваться значением стоп но не включая его и идти с шагом степ а для получения текущего значения арифметической последовательности мы пропишем вот такой вот метод который называется next

значения арифметической последовательности мы пропишем вот такой вот метод который называется next по идее это магический метод но мы сейчас им воспользуемся как обычным методом и так в этом методе мы сделаем следующее мы проверим если вот это вот специальное значение слов . в л.а. это как раз будет текущее значение арифметической последовательности плюс шаг то есть плюс t меньше конечного значения sell stop тогда мы увеличим вот это значение у л я на величину шага ну и затем должны возвратить

sell stop тогда мы увеличим вот это значение у л я на величину шага ну и затем должны возвратить это значение в л.а. а иначе мы будем генерировать исключения 100 потерей шин ну и разумеется чтобы этот мест нас работал вот это вот значение слов и луи нам здесь в начале нужно как-то определить я его определю следующим образом это будет начальное значение сел в старт минус шаг sell stop то есть смотрите на 10 в начале когда мы к белую прибавляем сел в степ это как раз и будет первое значение нашей

на 10 в начале когда мы к белую прибавляем сел в степ это как раз и будет первое значение нашей арифметической последовательности прошивать здесь вот мы с степ вычли самом начале ну а далее вот здесь вот последователям будем прибавлять и прибавлять степ вот кстати они провели написал до степ должно быть прибавлять прибавлять вот этот шаг ну и соответственно получать с помощью метода next все новые и новые значения or he teach и скай последовательности далее вы здесь мы создаем экземпляр этого

и новые значения or he teach и скай последовательности далее вы здесь мы создаем экземпляр этого класса пусть от называется fr fr и здесь старт стоп стоп пусть будет 0 потом два и шаг 0,5 они живут здесь вот мы четыре раза вызовем метод текст вот так вот of our next и четыре раза быть соответстви будем его вызывать запустим нашу программу и смотрите как раз формируется вот эти четыре значения от 0 до полтора но если мы вот пять раз вызывать этот метод of our necks то как вы понимаете на 5 раз

0 до полтора но если мы вот пять раз вызывать этот метод of our necks то как вы понимаете на 5 раз сработает вот это вот исключение 105 шин то есть поведение нашего объекта повторяется похоже на поведение обычного объекта рэнч с который мы с вами уже знакомы в действительности вот здесь вот благодаря наличию магического метода next мы можем использовать обычную функцию next уже для перебора значений вот это вот объект fr то есть мы про сможем сайт next от fr это будет эквивалент вот такую

значений вот это вот объект fr то есть мы про сможем сайт next от fr это будет эквивалент вот такую строчку таком-то вызова но и здесь мы используем же стандартный вот этот функцию next давайте все через эту функцию пропишу а именно вот эти стручки удалю и еще три раза скопирую запустим нашу программу и видим абсолют тот же результат то есть вот этот функци next на самом деле не я вон у себя внутри вызывает в этот тот магический метод next это значение который вернет этот магический метод

внутри вызывает в этот тот магический метод next это значение который вернет этот магический метод возвращает и функци next а сам объект вот этот эфир здесь выступает в роли и таро таро то есть мы вот по идее функции x должны передавать итератор и вот здесь вот в качестве итератора выступает сам объект range то есть итератор это некий объект которая есть магический метод текст и вызывает магический мест next функция next свою очередь возвращает то значение которое вернуло ты тот магически мест

мест next функция next свою очередь возвращает то значение которое вернуло ты тот магически мест то есть в деталях работает все вот именно так и по идее раз мы создаем с вами и ты риру имый объект то его можно также перебрать и с помощью цикла for давайте попробуем это сделать значит напишем for x нфр здесь соответственно выйдем в консоль вот этот x запустим программу и у нас получается ошибка ошибка что вот этот объект fr является нейтири ruim им почему возникла эта ошибка дело в том что мы не

что вот этот объект fr является нейтири ruim им почему возникла эта ошибка дело в том что мы не можем создать iterator вот для этого объектов а то есть мы не можем вызвать функцию это вот я сам писать этот от fr а вот это я поставлю в комментарий и запустим программу то вы здесь нам как раз и подсказывается что объект у нас синтезируемый то есть вот этот функции тор не может быть применено к объекту of range почему так произошло ну я думаю вы в принципе догадались потому что у нас здесь нету 2

of range почему так произошло ну я думаю вы в принципе догадались потому что у нас здесь нету 2 магического метода который называется это давайте его пропишем он будет очень простой значит во первых возвращать вот этот объект целых потому что мы видели что сам объект вот это вот класса a french и является итератором поэтому чтобы получить этот erator мы просто должны возвратить экземпляр этого класса ну и кроме того мы вот эту целую будем устанавливать внутри этого метода риттер то есть

класса ну и кроме того мы вот эту целую будем устанавливать внутри этого метода риттер то есть пропишись вот в таком вот виде то есть каждый раз когда мы будем вызывать функцию это у нас вот это вот белое будет инициализироваться на начало на начало арифметической последовательности давайте теперь запустим программу видим никаких ошибок и нету вернем цикл фон запустим программу ещё раз и у нас все работает но разумеется то этот оператором и теперь можно убрать потому что вызов итератора

нас все работает но разумеется то этот оператором и теперь можно убрать потому что вызов итератора происходит неявно опять же внутри циклов о вас начал вызывает итератор то есть получает итератор а потом опять же с помощью неявного вызова функции next перебирает вот все эти значения то есть в нашем случае арифметической последовательности то есть видите как мы с помощью двух этих магических методов это рынок превратили наш класс вот этот и french в эфире ruim эй объект и сказали как именно нам

это рынок превратили наш класс вот этот и french в эфире ruim эй объект и сказали как именно нам следует формировать очередное значение этого и ты риру имаго объекта то есть в нашем примере это арифметическая последовательность это очень простой пример конечно здесь может быть самая любая логика это может быть и переборка этих ты уже списков и словарей в определенном порядке это может быть что то еще то есть это просто как пример того как можно реализовать вот эти вот 2 магических методов

то еще то есть это просто как пример того как можно реализовать вот эти вот 2 магических методов внутри собственного класса ну и в заключении эта ваза эти я приведу пример еще одного класса который мы назовем с вами и of range 2d и он у нас будет формировать таблицу значений я сделаю это следующим образом значит этот инициализатор по сути дела сюда пропишу то есть скопирую и добавлю еще один параметр который будет называться роуз и начальное значение 5 то есть a rose это количество строк пусть

который будет называться роуз и начальное значение 5 то есть a rose это количество строк пусть будет вот по умолчанию 5 строк соответственно вот здесь вот мы сохраним это локальные свойства напишу сел в . arrows равняется роуз одолевает здесь вот вместо вот этих вот трех строчек мы создадим экземпляр класса и френч-прессе on пишут акт cf . f r равняется a french и здесь передадим как раз три вот этих вот параметра старт стоп стоп вот в таком виде то есть внутренне соли zatarra вот это вот of

этих вот параметра старт стоп стоп вот в таком виде то есть внутренне соли zatarra вот это вот of range мы во-первых сохраняем количество строк а во-вторых экземпляр вот это вот класс который мы с вами определили только что вы здесь вот выше то есть вот этот класс a french у нас будет формировать числа для каждой строки но и далее мы соответственно создайте вот из этого класса и french итератор который бы можно было обходить двумя вложенными циклами for для этого первых мы даже прописать сам

который бы можно было обходить двумя вложенными циклами for для этого первых мы даже прописать сам итератор то есть вот этот магический метод это он будет очень простую здесь у нас будет опять же вот этого значения совпало с начальным значением 0 но и мы будем возвращать сам объект то есть и не 2 магический метод next мы здесь будем проверять если вот это вот значение val и меньше чем сел fraps то есть мы не прошли все нужные нам строки там и соответственно будем генерировать эти строки стройте

есть мы не прошли все нужные нам строки там и соответственно будем генерировать эти строки стройте значение для этого начали вот этот вал увеличенная единицу а затем возвратим итератор вот для этого нашего объекта frp сел в . fr то есть видите вот этот next он у нас будет возвращать не конкретное значение а итератор который в свою очередь будет уже возвращать конкретные числовых значений таши итераторы вот это вот класса fr здесь а вот именно он ушей генерирует конкретные числовые значения то

вот это вот класса fr здесь а вот именно он ушей генерирует конкретные числовые значения то есть в строках у нас будут получаться уже конкретное числовые значения но вы сейчас все это увидите когда мы пропишем фо а иначе мы здесь генерируем исключения стоп iteration отлично это мы с вами сделали давайте теперь ниже по программе мы создадим объект вот этот afraid 2d то есть я пропишу вы здесь от просто of range 2d добавил количество рок пусть будет 4 и сделаем перебор его перебор будет следующий

of range 2d добавил количество рок пусть будет 4 и сделаем перебор его перебор будет следующий и здесь вот во-первых мы fr также пропишу как это было у нас ранее а далее у нас будет еще вложенный цикл начались 2 напишу и вложенный цикл бы такое for x n roll то есть видите как это у нас получилось с вами вот этот ролл в свою очередь это тоже интегрируем объект потому что вот здесь вот в первой строчке мы с вами как раз получаем в качестве роллу каждый раз итератор вот это вот объекта и french а

мы с вами как раз получаем в качестве роллу каждый раз итератор вот это вот объекта и french а уже потом во втором цикле во вложенном цикле мы перебираем уже итератор и френч и получаем конкретные числовые значения x эти числовые значения x здесь отображаем то есть все работает вот у нас по такой схеме ну и чтобы все это красиво отображалась еще здесь пропишу and a равняется пробел а здесь вот еще у нас будет просто один print для переноса курсора на новую строку давайте запустим программу так

у нас будет просто один print для переноса курсора на новую строку давайте запустим программу так вот виде и видела такую вот таблицу значений то есть все отработала именно так как мы с вами и хотели вот в целом общий принцип создания и тренируем их объектов надеюсь вот эти вот примеры вам были понятны и вы теперь знаете как и для чего используется магические методы петр i next [музыка]

#20. Наследование в объектно-ориентированном программировании | ООП Python

здравствуйте дорогие друзья меня зовут сергей балакирев и на этом занятии мы начинаем изучение важной темы в объектно-ориентированном программировании наследование давайте предположим что у нас программе с вами имеется два вот таких вот независимых класса и как вы понимаете из мы сейчас создаем экземпляр класса geom то совершенно спокойно можем обратиться к свойства на мтс же . name и отобразить ее в консоли запускаем программу и ведь вот эту строчку ем никаких ошибок у нас не возникает но через

в консоли запускаем программу и ведь вот эту строчку ем никаких ошибок у нас не возникает но через вот этот объект и же мы разумеется не можем вызвать метод дроу совершенно другого класса лайна у нас возникает ошибка что такого атрибута не существует однако я сам и создадим экземпляр класса лайн и вызовет этот метод ра уже через объекты и of the у нас уже никаких ошибок не будем выполняя программу и видим рисование линий а то есть вот эти вот 2 класса new line это совершенно два разных

программу и видим рисование линий а то есть вот эти вот 2 класса new line это совершенно два разных пространства имен два разных класса но при необходимости мы можем установить связь между ними и например сделай так чтобы открытые атрибуты класса d am были доступны в классе line записывается такая связка следующим образом после класса line style круглые скобки и прописываем класс класс гиа в данном случае который собираемся расширять другим классом данном случае класс онлайн в частности мы

данном случае который собираемся расширять другим классом данном случае класс онлайн в частности мы теперь совершенно спокойно можем через вот этот объект и л обратиться к атрибута name который определен в классе deanne давайте в этом убедимся я напишу здесь приют л . найм запускаем программу и видим что у нас теперь все сработало то есть у нас получилось вязка вот это вот класса line с классом делом вот такая конструкция когда один класс определяется на основе другого называется наследованием

вот такая конструкция когда один класс определяется на основе другого называется наследованием причем класс гиа называется базовым или родитель всем классом а klass line подклассом родительского класса или дочерним классом ну а графический иерархию наследования принято изображать в виде вот этих прямоугольников соединенных стрелками причем стрелка направлена от дочернего класса к базовому то есть вот именно таким образом и у нас сейчас иерархия наследования вверху стать базовый класс geom и от

вот именно таким образом и у нас сейчас иерархия наследования вверху стать базовый класс geom и от него наследуется klass line и для чего может понадобиться наследование давайте добавив klass line метод сетка ртс и будет он выглядит следующим образом наша пропишу д.ф. сетка артс и в качестве параметров мы будем передавать координаты линии значит координата начала и координат конца x2 y2 ну а здесь соответственно сделаем слов . x 1 равняется x 1 и далее то же самое для всех остальных координат

соответственно сделаем слов . x 1 равняется x 1 и далее то же самое для всех остальных координат по этой опрос скопирую здесь напишу игрек игрек здесь у нас от веса будет x2 тоже x2 а есть игорь 1 игрек льва а затем мы с вами определим еще один подобный класс подобный класс лайну который будет отвечать за прямоугольники но и назовем его rect допустим то есть an old white orig он наследует тоже от класса дион от общего класса здесь уже будет и рисование не линия а прямоугольника ну а метод сад

класса дион от общего класса здесь уже будет и рисование не линия а прямоугольника ну а метод сад курс будет абсолютно тем же самым то есть смотрите что у нас здесь в итоге получилось есть два класса а rect и лайн и в этих двух классах из теста нас получилось такое дублирование кода то есть вот этот метод сад курс полностью повторяется в обоих классах и это дублирование будет быстро нарастать с увеличением классу для различных геометрических фигур чтобы этого не было мы можем общий для всех

с увеличением классу для различных геометрических фигур чтобы этого не было мы можем общий для всех дочерних классов вынести в базовой и в частности вот этот метод сад корт определить по в базовом классе deanne давайте я одессит их уберу эти методы и пропишу вы здесь от базовом классе deanne соответственно в line в это уже берем сад cards и у нас получается вот такая то реализация теперь ниже мы можем совершенно спокойно создать экземпляр и вот этих вот класс offline давайте рек то мы тоже

мы можем совершенно спокойно создать экземпляр и вот этих вот класс offline давайте рек то мы тоже сделаем и вызови вот этот метод с от корпус значит л . сетка агдс и передаем катились кардинал допустим 1122 ну и то же самое для прямоугольника значит rs от курс и те же самые координаты запускаем программу и никаких ошибок у нас нет все выполняется но давайте внимательнее посмотрим что у нас здесь в итоге с вами получилось во первых иерархии наследований у нас теперь вот такая есть общий базовый

в итоге с вами получилось во первых иерархии наследований у нас теперь вот такая есть общий базовый класс kion и два дочерних line erect в начальных классах дополнительно присутствует вот такой метод draw a в базовом вот этот метод сад cards который общей для обоих дочерних классов далее когда мы вызываем метод сад codes через объект класса line то этот метод сначала ищется в классе line если он там не находится как в нашем случае то поиск продолжается у базовых классах но в данном случае мы

там не находится как в нашем случае то поиск продолжается у базовых классах но в данном случае мы переходим в кладке он здесь этот метод сад корт находится и выполняется причем вот этот параметр сел метода сетка будет ссылаться на объект вот это вот класса line то есть по сути дела ссылка на вот этот объект л и это очень важный момент параметр сел в базовых классах может ссылаться не только на объекты этого же класса но и на объекты дочерях классов если вот этот метод сад код как в нашем случае

этого же класса но и на объекты дочерях классов если вот этот метод сад код как в нашем случае был вызван через объект дочернего класса то есть видеть и мы до сих пор когда своим говорили о классах то я говорил что параметр сел в ссылается на объект этого класса но когда у нас происходит наследования и появляется дочерний класс у какого-либо базового класса то вот этот параметр сел может ссылаться не только на объекты этого базового класса но и на объекты дочернего класса все зависит от того

не только на объекты этого базового класса но и на объекты дочернего класса все зависит от того откуда этот метод сад курс был вызван если он вызывается из объектов дочери классов вот как вы здесь вот из класса line я риск вас rect то параметр сел будет ссылаться уже на соответствующий объект дочернего класса почему это важно смотрите во первых вот этот параметр сел здесь формирует локальные свойства именно для объектов вот этих вот дочерних классов linear ex давайте в этом убедимся я с помощью

именно для объектов вот этих вот дочерних классов linear ex давайте в этом убедимся я с помощью print вы до локальные свойства этих объектов значит нас висят коллекции diptrace для л и то же самое для r запустим программу и видим что в этих объектов созданы нужные нам локальные свойства координаты точек икс один и игрек один x2 y2 это произошло как раз от благодаря тому что параметр сел когда вызывался метод сад cars ссылался на соответствующий объект дочернего класса чтобы это все было до

вызывался метод сад cars ссылался на соответствующий объект дочернего класса чтобы это все было до конца понятно я поставлю есть точка останова и запущу программу в режиме отладки смотрите первый раз вызывается метод сад cars когда мы вызываем его из объекта line соответственно вот этот параметр сел финал здесь сейчас является объектом класса line видите здесь написано с l равняется лайн ну и так далее то есть это действительно объект класс онлайн а когда мы второй раз вызовем вот этот метод

далее то есть это действительно объект класс онлайн а когда мы второй раз вызовем вот этот метод сад cards то соответственно сел уже будет ссылаться на другой объект объект класса rect то есть вот именно так здесь все и работает ну разумеется если мы этот метод сад kovax вызов непосредственно через класс гиа через объект класса d am но для этого моего вначале создадим а затем выезжаем уже . с от купцы и здесь вот какие значения 0 0 допустим поставим и запустим нашу программу опять же в режиме

купцы и здесь вот какие значения 0 0 допустим поставим и запустим нашу программу опять же в режиме отладки то смотрите это цел будет естественно уже являться объектом класс идиом то есть все зависит от того через какой объекта был вызван этот метод то есть вот это очень важный момент когда мы рассматриваем наследование делаем наследование классов и вызывают те или иные методы но все же почему это важно вот смотрите формально могут здесь вот можно вызвать еще эту метод другу и дочернего класса

важно вот смотрите формально могут здесь вот можно вызвать еще эту метод другу и дочернего класса вот так вот то есть это мы можем сделать когда вызываем сетку ртс не вот таким образом сразу через базовый класс а через объекты lr отдавайте от мы сейчас запустим нашу программу и убедимся что здесь ведет рисование линия и рисование прямоугольника то есть когда отработал вот этот метод сад корт с 1 и был вызван вот соответственно methods параметр сел в который ссылался на объект класса line то в

и был вызван вот соответственно methods параметр сел в который ссылался на объект класса line то в объекте класса line был вызван вот в этой строчке метод дроу который отобразил рисование линии и мы здесь вот видим а когда был вызван этот же метод сфоткаться уже через объект класса rect то соответственно сел ссылался на объект класса rect и вот этот метод дро был вызван и уже из объекта класса rect но вот такая конструкция когда мы в базовом классе пытаемся вызвать метод какой-либо метод

rect но вот такая конструкция когда мы в базовом классе пытаемся вызвать метод какой-либо метод определенной в дочери классов таит в себе потенциальную опасность потому что если от мы раскомментируем вот эти вот две строчки и вызывают этот метод хорд уже не посредства через объект базового класса то как вы понимаете вот здесь вот уже метода дроу него не будет никакого to shoot в этом классе deanne метод дроу никак не определен давайте в этом убедимся запущу программу и смотрите действительно у

метод дроу никак не определен давайте в этом убедимся запущу программу и смотрите действительно у нас возникла ошибка что me to draw атрибута дроу не существует в классе dyom то есть мы когда определяем какой-либо метод в базовом классе следует придерживаться того простого правила вызывать внутри этого метода следует те методы другие методы которые определены в этом же классе dyom или в его базовых классах но не в дочерних иначе мы можем получить случайно атакуют ошибку я уберу вот этот вызов

классах но не в дочерних иначе мы можем получить случайно атакуют ошибку я уберу вот этот вызов метода о здесь явно лишний запустим программу и теперь уже у нас никаких ошибок лету похожим образом происходит и обращение к свойствам базовых классов вот сейчас в базовом классе есть вот такой свойство name и мы можем к нему обратиться через объекты lr и я в принципе вам это уже в начале показывал то есть мы можем прописать print л . на им но это же самое принтер . да им я со запустить программу то

есть мы можем прописать print л . на им но это же самое принтер . да им я со запустить программу то в обоих случаях увидел этот объем то есть вот когда происходит обращение какому-либо атрибуту то сначала этот атрибут ищется в соответствующем классе в данном случае дочерний класс онлайн вот когда он идет обращение через объекты л-та бы сначала в классе line еще вот этот атрибут name но так как его здесь нету то поиск продолжается в базовом классе но в данном случает костюм и здесь это атрибут

здесь нету то поиск продолжается в базовом классе но в данном случает костюм и здесь это атрибут на им находится и выводится его содержимое то есть вот эта строка ем то и то же самое происходит когда мы обращались к нам через объект р но если мы унесет в классе line например определим этот атрибут name скажем со значением line а вот так вот и опять же запустим программу то у нас вы здесь вот в первом случае мы видим лайк а второй гол то есть все отработал вот эти вот образом сначала вот когда

случае мы видим лайк а второй гол то есть все отработал вот эти вот образом сначала вот когда вот первый принтер здесь вот отрабатывал то мы обратились вот к этому атрибуту найм объекта класса line а в объекте класс онлайн у нас уже присутствует это атрибут поэтому именно он был взят а когда мы обращались к этому же атрибуту через объект класса rect то по этого классе rect нету атрибута name и поиск продолжился базовом классе и был взят вот этот name is базовый класс идем по этому втором случае

продолжился базовом классе и был взят вот этот name is базовый класс идем по этому втором случае мы видим просто dyom кстати когда мы определяем какой либо существующего база у классе атрибут от dance начинаем он существует у базу кладем то это называется перья определением атрибута и интегрированная среда нам это показывает вот такой стрелочкой вверх то есть видеть кружечкой стрелочка вверх это вот как раз обозначение того что атрибут name перри определяется здесь в дочери в классе а в базовым

как раз обозначение того что атрибут name перри определяется здесь в дочери в классе а в базовым классом а наоборот видим стрелочку вниз то есть это вот как раз говорит о том что вот этот name перри определяется в дочернем классе то есть вот если мы интегрируем среде по и charm видела такие вот стрелочки от как раз и говорит о том что переопределяет кто-то и людей атрибут и то же самое происходит с методами если допустим у базу классе deal добавить me to draw то вот здесь вот перед этим методом

с методами если допустим у базу классе deal добавить me to draw то вот здесь вот перед этим методом увидел такой стрелочку вниз потому что метод дроу так же существует и у дочери классах line директ а в начале классах мы увидим напротив этого метода дроу стрелочку вверх то есть вот это вот обозначение как раз переопределение либо методов либо свойств ну а работает это переопределение очевидным образом если вот этот метод дроу вызывать через дочерний класс то есть через объекты дочерних классов

если вот этот метод дроу вызывать через дочерний класс то есть через объекты дочерних классов ну например вот так l2 и r2 то соответственно будут вызвано вот эти вот методы непосредственно про из она их дочерних классах давайте я запущу программу и мы в это убедимся еще рисования линий и рисование прямоугольника а вот если скажу в классе rect мы уберем этот метод дроу я вместо него пропишу просто вот так в конструкцию поста есть от будет пустой просто класс рек и опять же запустим программу то

вот так в конструкцию поста есть от будет пустой просто класс рек и опять же запустим программу то у нас в обоих случаях получилось рисование линии да это из того что я вот здесь вот забыл написать в классе deanne не рисование линии а рисование примитивы давайте напишем опять же запустим программу его теперь все правильно начать рисование линии и рисование примитива то есть когда мы вызывали метод дорогу для объекта класса rect естественно в этом классе me to draw найден не был поэтому поиск

дорогу для объекта класса rect естественно в этом классе me to draw найден не был поэтому поиск продолжился в базовом классе на базовом классе мы его нашли и соответствовал выполнили и поэтому и здесь видим рисование примитива вот так вот в целом работает переопределение атрибутов в дочерних классах на этом мы завершим наше первое знакомство с механизмом наследования надеюсь все описанные момента вам здесь были понятны и если это так то переходить к следующему занятию где будем продолжать

вам здесь были понятны и если это так то переходить к следующему занятию где будем продолжать изучение этой важной темы [музыка]

#21. Функция issubclass(). Наследование от встроенных типов и от object | ООП Python

здравствуйте дорогие друзья я сергей балакирев и мы продолжаем изучение важные темы в объектно-ориентированном программировании наследование о начале нашего курса по ооп и я говорил что пользовательский класс по умолчанию наследуется от базового класса общих например если мы в программе запишем вот такой класс делал без какой-либо реализация то смотрите в интегрированной среде я могу написать и он поставить точку и здесь у нас появится множество различных атрибутов но откуда взялись эти атрибуты

поставить точку и здесь у нас появится множество различных атрибутов но откуда взялись эти атрибуты если у нас в классе dyom нет вообще никакой реализации мы ничего здесь не объявляли но как вы уже догадались конечно же все эти атрибуты берутся вот из этого базового класса общей и их там по умолчанию ну достаточно много вот как пример здесь некоторые из них приведены в частности можно сделать следующее с помощью функции print я выведу свойство такую the name этого класса делом ну и давайте

следующее с помощью функции print я выведу свойство такую the name этого класса делом ну и давайте посмотрим что мы здесь увидим запускаем программу и видим что вот этот класс здесь ты себя называется телом то есть на самом деле объявление какого-либо класса и кого лет на вот таком вот объявление когда мы явно указываем наследование от класса учит но начиная с версии python 3 вот это вот наследование делается автоматически даже если мы его и не указываем вот это нужно знать и помнить конечно

делается автоматически даже если мы его и не указываем вот это нужно знать и помнить конечно здесь сразу возникает вопрос а зачем это было сделано но очевидно чтобы обеспечить стандартный базовый функционал работы с классами в частности если мы создаем экземпляр вот этот класс идиом и далее с помощью функции print выведем как бы вот этот класс экземпляры этого класса то мы автоматически вот здесь вот видела такую строчку mandium и адрес вот это вот экземпляра класса откуда появилась эта строчка

вот видела такую строчку mandium и адрес вот это вот экземпляра класса откуда появилась эта строчка очевидно благодаря определению магического метода стр в базовом классе общих и когда мы вызываем print от какого-либо экземпляра то срабатывает вот этот магический метод в классе объект и мы видим в консоли вот такой вывод то есть вот этот функционал по умолчанию который нам с вами здесь уже доступен существует благодаря вот так кому наследованию однако я свой кисет в программе мы добавим еще

существует благодаря вот так кому наследованию однако я свой кисет в программе мы добавим еще один класс passed будет line который наследуется от класса dyom и он тоже будет у нас пустым та цепочка наследование будет выглядеть уже вот так вот klass line наследуется от ти он одел от класса общем то есть указывая в качестве базового любой другой класс непосредственное наследование от объекта вот уже в этот класс онлайн не происходит а наследуется он только от класс идиом ну и разумеется что

уже в этот класс онлайн не происходит а наследуется он только от класс идиом ну и разумеется что объект класса line будут иметь доступ ко всем атрибутам вот это вот класса общих например мы можем это сделать так создать экземпляр класса лайт и с помощью функции print вывести допустимо такое свойство класс запустим программу и видим вот сообщение что действительно class lite с экземпляра класса line опять же вот этот атрибут класс нам доступен благодаря тому что вот этот класс кем наследуется от

опять же вот этот атрибут класс нам доступен благодаря тому что вот этот класс кем наследуется от объект align свою очередь наследуется днем то есть мы вот так вот прошлись по цепочке наследования и взяли атрибут класс вот из этого уже класса общем-то мало того мы можем определять является ли тот или иной класс подклассом другого класса это делается с помощью специальной функцией которая зывается из sub class есть качестве первого параметра мы должны указать дочерний класс пусть от будет лайн и

из sub class есть качестве первого параметра мы должны указать дочерний класс пусть от будет лайн и затем базовый пусть это будет dyom опять же запустим программу и в этом случае видел true потому что действительно класс line наследуется от класс идеал но если мы запишем их в другом порядке вот так вот то есть макам указано что dyom наследуется от line очевидно это не так поэтому мы видим здесь вот falls но эта функция и саб класс она работает только с классами они с их экземплярами то есть вот

falls но эта функция и саб класс она работает только с классами они с их экземплярами то есть вот здесь вот например в качестве классовой давайте я верну как это было line а здесь дом пропишу так вот если вместо класса line указать объект этого класса то будет ошибка тоже качестве аргумента вот этой функции саб класс мы можем передавать только классы не их экземпляры если жена и много все же проверить принадлежность объекта тому или иному классу в том числе и базовому то следует использовать

принадлежность объекта тому или иному классу в том числе и базовому то следует использовать другую уже знакомые нам функции из instance в этом случае мы запускаем программу и видим труп там уж и действительно объект l является производным в том числе и от класс идиом также мы можем здесь написать и убёг например вот так вот и вот этот проверка кстати говорит о том что вот этот объект л действительно следуется от класса object причем в этой же функции и сын со смой можно указывать и класса

следуется от класса object причем в этой же функции и сын со смой можно указывать и класса например вот так вот тоже будет работать то есть отличие функций из instance от функция и саб класс только в том что функции саб класс работает исключительно с классами а из installs может работать с объектами этих классов интересный факт языка python что все его стандартные типы данных также является классами и мы в этом легко можем убедиться если вы здесь вот с помощью функций и саб класс запишем класса

и мы в этом легко можем убедиться если вы здесь вот с помощью функций и саб класс запишем класса in the например и запустим программу то никаких ошибок нету и мы видим значение true это говорит о двух вещах первое что int это действительно класс стаж вы видели объект класса здесь нельзя прописывать значит интер класс и этот класс и также наследуется от базового класса объекта или вместо этого можно прописать класс лист это список также запустим программу и видел значение трон то есть лист это

прописать класс лист это список также запустим программу и видел значение трон то есть лист это тоже класс и так со всеми стандартными типами данных языка python но раз это так раз вот все эти типы являются классами то что нам мешает их расширить например следующим образом давайте создадим нити класс который будет называться вектор и этот класс вектор будет наследоваться от класса лист и в качестве примера мы сделаем вот такой то расширение этого класса лист мы переопределим метод стр которые в

примера мы сделаем вот такой то расширение этого класса лист мы переопределим метод стр которые в данном случае будет возвращать нам строку состоящую из элементов этого списка записанных через пробел для этого я воспользуюсь у знакомой нам функции jovi ну а здесь делаю следующим образом значит стр , сел вот этого цел и то есть данном случае список обычный список копируемый объект мы каждому элементу этого списка применяем функцию стр и затем полученной строки записывают через пробел и у нас

этого списка применяем функцию стр и затем полученной строки записывают через пробел и у нас получается общая строка давайте по 40 как это у нас будет работать здесь все такие же я создам экземпляр этого класса вектор то есть по сути дела вектор это сейчас тот же самый класс лист только керри определенном вот эти вот и магически методом стр поэтому здесь в качестве аргумента я могу передать какой-нибудь список допустим 123 ну и сделать вывод этого списка на экран принтер запускаем программу и

список допустим 123 ну и сделать вывод этого списка на экран принтер запускаем программу и видела такой вывод 123 это вот как раз благодаря тому что мы переопределили вот этот метод стр вот в этом классе вектор а если моего здесь уберем и поставим просто поста есть у нас будет пустой класс он никак не переопределяет этот лист функциональ из остается прежней запустим программу и уже видим вот такой стандартный вывод списка то есть видите мы благодаря тому что лист этой является классом можем

стандартный вывод списка то есть видите мы благодаря тому что лист этой является классом можем унаследуют соте вот и создать другой дочерний класс и в этом дочерним классе переопределить работу вот этого стандартного класса лист в данном случае просто извел другой вывод мало того тип вот это вот класса он уже естественно становится не лист как раньше а вектор того что у нас новый класс виктор конечно такие вот стандартной типы данных редко расширяет с помощью поют 6 классов но понимать что они

такие вот стандартной типы данных редко расширяет с помощью поют 6 классов но понимать что они представляют собой классы и что такая возможность в принципе существует важно итак из этого занятия вы должны были знать что все классы по умолчанию наследуется от базового класса общих затем как работает функция и саб класс ну и что собой представляет встроенные типы данных языка python [музыка]

здравствуйте дорогие друзья я сергей балакирев и мы продолжаем изучение темы наследование это занятия начнем с простой но важный терминологии смотрите если у нас имеется некий базовый класс и вам и мы создаем дочерний класс онлайн в котором дополнительно прописан метод дроу то это называется расширением базового класса как правило дочерей класса создаются именно для расширения функциональности базовых классов однако если в классе dyom также прописать вот этот метод draw the у нас уже получится

классов однако если в классе dyom также прописать вот этот метод draw the у нас уже получится переопределение это называется в рейтинг то есть поведение базового класса в дочернем в общем-то не меняется только несколько функциональность поэтому вот в данном случае говорят что дочерний класс переопределяет вот этот базовый класс ну а если в дочернем добавляется новые атрибуты которые отсутствовали в базу то это расширение вот эти два понятия нужно хорошо себе представлять и различать давайте

в базу то это расширение вот эти два понятия нужно хорошо себе представлять и различать давайте теперь вот в этой программе мы пропишем инициализатор вот в этом базовом классе он будет следующее на что имеют и выводить сообщение что это инициализатор класса d am они же мы создаем экземпляр этого класса лайна l равняется лайн и две круглые скобки после запуска программы мы увидим что отработал вот этот инициализатор базового класса geol в действительности вот здесь вот происходит следующее

вот этот инициализатор базового класса geol в действительности вот здесь вот происходит следующее цепочка вызовов когда мы прописываем круглые скобки после имени класса то как уже говорили вызывается магический метод кол который в свою очередь последовательно вызывает метод new для создания экземпляра класса а затем метод init для его инициализации так вот все эти методы изначально ищутся от в этом дочерним классе line если не находится то поиск по цепочке переходит к соответствующим базовым

этом дочерним классе line если не находится то поиск по цепочке переходит к соответствующим базовым классом в частности вот этот слеза тары и нет у нас был найден вот в этом базовом классе deal а вот этот метод ее магический метод не и очевидно прописан в этом классе объект то есть все вот эти вот методы они существуют и найдены соответствующих базовых классах если их нет вот в этом дочерним классе line причем вот этот параметр сел уинфри затари будет ссылаться как я уже неоднократно говорил на

line причем вот этот параметр сел уинфри затари будет ссылаться как я уже неоднократно говорил на объект класса line вот об этом тоже следует помнить отлично я думаю в целом схема вызовов методов в момент создания экземпляра fclose of понятно и в соответствии с ней если мы определим инициализатор в классе line то соответственно этот инициализатор и должен быть вызван давайте это сделаем я скопирую инициализатор из базового класса сюда от во дочерней и соответственно пропишу здесь инициализатор

инициализатор из базового класса сюда от во дочерней и соответственно пропишу здесь инициализатор line запустим программу и действительно видим что у нас был вызван инициализатор вот именно этого дочернего класса line я перепишу его следующим образом значит 1 вход будут передаваться координаты вот этот линии x 1 игрек один кредит от начала координат до конца ну и соответственно будем создавать вот эти вот локальные свойства x1 и так далее y1 x2 y2 одолевать здесь вот ниже мы очевидно должны

вот эти вот локальные свойства x1 и так далее y1 x2 y2 одолевать здесь вот ниже мы очевидно должны передать эти координаты пусть они будут такие 00 и 1020 запускаем программу и у нас все работает и кроме того были создана локальные свойства вот это вот объекта line моих видео с помощь коллекции dict запускаем и вот они у нас здесь отображаются программа в целом работает все нормально но давайте предположим что теперь хотим добавить еще один класс графического примитива прямоугольники для этого

что теперь хотим добавить еще один класс графического примитива прямоугольники для этого очевидном нужно прописать класс который будет называться пусть проект вот так вот он также наследуется от базового класса dyom и у него будет инициализатор немножко другой значит эти четыре параметра и дополнительно 5 щелкнуть заливка и пусть помолчали принимает значение нам здесь вот ниже мы соответственно сделаем сел в . фил равняется фил и у нас появляется у прямоугольника еще вот этот 5 параметр ну а в

сел в . фил равняется фил и у нас появляется у прямоугольника еще вот этот 5 параметр ну а в методе дров мы напишем рисование прямоугольника смотрите что у нас в итоге получилось в классе лайн и в классе rect происходит дублирование кода и это конечно нехорошо но мы знаю как это можно поправить общее этих методов нужно вынести в базовый класс скиллом я это сделаю скопирую вот этот инициализатор из класса лайн и в классе лайна оставлю только метод дорогу соответствовать здесь вместо этого

из класса лайн и в классе лайна оставлю только метод дорогу соответствовать здесь вместо этого инициализатор а пропишу вот инициализатор уже который создает такие вот локальные свойства и кроме того дополнительно мы укажем что вот этот intel за торги а был вызван для определенного класса чтобы вы знали для какого класса из какого дочернего класса был вызван а вот этот инициализатор ну а вот здесь он в дочернем классе rect мой вес этих строчек напишем print который будет выводить инициализатор а

он в дочернем классе rect мой вес этих строчек напишем print который будет выводить инициализатор а rect то есть мы будем знать что голову из он вот это вот инициализатор давайте создадим еще объект класса rect пусть у него будет координаты один два три четыре вот эту строчку я уберу и запустим программу смотрите у нас отображается инициализатор geom для класса line то есть когда мы создавали вот этот линию объект линию то у нас соответственно был вызван вот этот инициализатор базового класса

этот линию объект линию то у нас соответственно был вызван вот этот инициализатор базового класса deum для этого объекта для объекта light и мы это здесь вот с вами видим а для инициализатор а rect вот этот вот инициализатор базового класса вызван не был и это очевидно потому что когда мы создавали объект прямоугольник то вот здесь вот вызвался инициализатор который мы прописали не посредством в дочернем классе rect и больше никаких инициализатор of не вызывалась это логично потому что метод

в дочернем классе rect и больше никаких инициализатор of не вызывалась это логично потому что метод init был найти ну вот в этом дочерним классе rect и дальше цепочка поиска не продолжалось но нам же нужно при создании примитивов также вызывать инициализатор и вот это вот базового класса d am чтобы могли создать и вот эти вот локальные свойства икс один и игрек один x2 y2 как это можно сделать для этого вот здесь вот в дочернем классе rect мы должны явно вызвать инициализатор базового класса и

этого вот здесь вот в дочернем классе rect мы должны явно вызвать инициализатор базового класса и сделать это в самом простом варианте можно следующим образом указать явно вот этот класс базовый класс dyom и у него соответствовать вот этот инициализатор здесь передать все необходимые аргументы я просто скопирую вот отсюда и вставлю сюда вот мы вызываем все необходимые аргументы и тогда вот это вот инициализатор базового класса у нас будет вызван давайте запустим программу и в этом убедимся мы

инициализатор базового класса у нас будет вызван давайте запустим программу и в этом убедимся мы видим что вот здесь вот для объекта line взывал синтезатор базового класса а здесь для объекта класса рек то есть теперь в принципе работать так как мы бы этого и хотели общий код у нас соответствовать здесь находится вот в этом и инициализация и он вызывается для обоих дочерних классов и для light и для rect однако вот так вот явно указывать базовый класс это совсем не лучшая практика потому что

и для rect однако вот так вот явно указывать базовый класс это совсем не лучшая практика потому что имена базу в классов иерархи наследования могут меняться поэтому в python для обращения к базовому классу используется специальная функция которая называется так вот супер эта функция возвращает ссылку на так называемый объект посредник через который происходит вызов методов базового класса поэтому вот это вот сэлфи здесь писать уже не нужно потому что супер возвращает объект и мы через объект

вот это вот сэлфи здесь писать уже не нужно потому что супер возвращает объект и мы через объект уже вызываем метод init поэтому я сел писать не надо только параметры необходимо ну и запустим программу посмотрим что у нас получится и действительно все отработала мы видим что сработало инициализатор база класса для лайк для рек но и самый инициализатор вот это вот класса rect осталось посмотреть какие локальные свойства нас образуется от в этом объекте р выйдем коллекцию dict запустим программу

локальные свойства нас образуется от в этом объекте р выйдем коллекцию dict запустим программу и действительно все что необходимо здесь у нас сформировано то есть если посмотрите в деталях как это все отрабатывал я поставлю здесь точку останова запущу в режиме отладки на жму f7 и мы переходим как раз в инициализатор вот это вот дочерний класс а rect если нажать вот здесь вот и все при вызове инициализатор базового класса то мы попадаем соответствует swizer базового класса здесь у нас сел в

инициализатор базового класса то мы попадаем соответствует swizer базового класса здесь у нас сел в ссылается на объект а rect поэтому вот эти вот все локальные свойства у нас и кстати на y1 и так далее формирует семена в этом объекте rect ну а после того как отработала инициализатор вот это вот базового класса у нас вы эльза 3 дочернего класса дополнительно формируется вот этот свойство фил ну и с отвесом и видим все вот эти вот локальные свойства в объекте р при этом обратите внимание

ну и с отвесом и видим все вот эти вот локальные свойства в объекте р при этом обратите внимание инициализатор базового класса следует вызывать в самую первую очередь чем это связано вот смотрите если мы инициализации базового класса неявно будем менять вот этот параметр фил вот допустим я здесь вот пропишу так feel a равняется 0 а затем вот этот инициализатор базового класса будем вызывать в последнюю очередь то как вы понимаете параметр фил у нас изменится видите здесь стал равен нулю хотя

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

класса и кроме того вот такой-то вызов методов базового класса через функцию супер называется делегированием то есть мы здесь как бы делегируем некие действия вызывая инициализатор вот это вот базового класса но в данном случае мы просто создаем локальные свойства координат наша графических примитивов то есть всегда когда мы через функцию супер вызываем какие-либо методы базового класса это называется делегированием я надеюсь что вот из этого занять вам понятно как работает функция super и для

делегированием я надеюсь что вот из этого занять вам понятно как работает функция super и для чего она нужна а также как можно выполнять более сложную инициализацию вот таких вот объектов когда у нас есть синтезатор и в базовом классе и в дочернем и нужно последовательно их вызвать сначала из базового класса а затем в дочернем вот это вот главная мысль которая вам хотел донести на этом занятии как создавать вот такой болью сложную инициализацию используя делегированные вызова и [музыка]

#23. Наследование. Атрибуты private и protected | Объектно-ориентированное программирование Python

здрасти дорогие друзья я сергей балакирев и мы продолжаем изучение темы наследования на этом занятии мы увидим как влияет в режим доступа про и вот и protected при наследовании классов ранее мы с вами уже говорили и в частности отмечали что если добавить одно подчеркивать перед именем атрибута то у нас получится режим доступ протектор а два подчёркивания это режим доступа правило вот давайте посмотрим как вот эти режимы доступа влияет при наследовании классов значит в программе вот здесь он у

как вот эти режимы доступа влияет при наследовании классов значит в программе вот здесь он у нас с вами а при цене 2 класса я и взялась предыдущего занятия и базовый класс гиа у него такой танец или затар ну и дочерний класс rectf который в свой и цели затар причем дочерний класс rect в свою очередь вызывает инициализатор базового класса dyom теперь давайте сделаем следующие изменения все локальные свойства которые будут образовываться в объектах наших классов мы будем делать с приводами то

свойства которые будут образовываться в объектах наших классов мы будем делать с приводами то есть я добавлю два вот этих подчёркивания они же здесь мы создадим объект класса rect передайте моему координаты допустим 00 1020 и кроме того выведем все локальные атрибуты которые у нас с вами получится то есть по их функция print и вот такой коллекции dict запустим программу и смотрите у нас от перед этими свойствами икс один и игрек один и так далее то есть перед всеми свойствами которые прописан

этими свойствами икс один и игрек один и так далее то есть перед всеми свойствами которые прописан непосредств базовом классе deanne добавляется префикс этого класса несмотря на то что вот этот параметр сел сейчас является ссылкой на объект класса rect вот эта особенность поведения формирования приватных атрибутов базовых классах но последнее свойство фил так как она была создана непосредственно в классе rect имеет префикс этого класса rect то есть вот все приватные свойства и атрибуты

в классе rect имеет префикс этого класса rect то есть вот все приватные свойства и атрибуты формируется вот таким вот образом в том классе где они прописано тот префикс и добавляется что из этого следует ну во-первых мы конечно же не можем обратиться вот к этим свойством икс один и игрек один и так далее этого этом дочерним классе rect давайте попробуем сделать и убедимся что это действительно так я пропишу здесь еще один метод который будет возвращать координату вот этого графически primitive

я пропишу здесь еще один метод который будет возвращать координату вот этого графически primitive назову метод get корт и соответствие будет reset и картридж кортеж следующий слв . два подчёркивания x1 слов . 2 подчёркивания y1 пусть будет вот координаты x 1 игрек один значит дали выделить вот мы вызовем обратимся к этому методу год корт и запустим нашу программу смотрите что получается получается ошибка атрибута error то есть действительно вот в этом классе рек то есть в объект класса rect не

ошибка атрибута error то есть действительно вот в этом классе рек то есть в объект класса rect не существует вот такого то атрибута ректа 2 подчеркиваний casa de он тоже мы знаем что у этого атрибута префикс класс идиом они rect но если этот метод get корт мы поместим в базовый класс и посмотрим что у нас получится тоже мы же можем вызывать методы из базового класса никаких проблем при этом быть не должно запустим программу и действительно нас нет никаких проблем все отработала и вот этот

быть не должно запустим программу и действительно нас нет никаких проблем все отработала и вот этот картер значение был возвращен возможно вам вот такое поведение покажется несколько запутанным странным давать вспомню а для чего вообще нужны вот эти вот привод на и атрибуты мы с вами отмечали что это закрыты от внешнего вмешательства свойства или методы текущего класса доступны только внутри этого класса и недоступной из других в том числе и из дочерних классов вот именно поэтому приватные

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

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

тоже будет а то подчёркивание ну и здесь мы уже будем обращаться через одно подчёркивание запустим нашу программу и все работает никаких ошибок и нету и еще раз повторюсь вот этот режим доступа протектор он не запрещает нам обращаться к тому или иному атрибуту извне то есть я могу например написать так р . подчеркивание x1 я со выполним программу то увидим значение вот это вот координаты x 1 здесь нижнее подчеркивание лишь предупреждают сигнализирует программиста о защищенном атрибуте которому

нижнее подчеркивание лишь предупреждают сигнализирует программиста о защищенном атрибуте которому напрямую лучше не обращаться этот атрибут был создан для внутренней логики работы алгоритма в классе и не предназначен для вот такого обращения извне потому что в дальнейшем это может привести к проблемам например при изменении версии класса в котором такого атрибуты уже не будет или же он будет играть какую другую роль поэтому так вот та прибоя к ним обращаться не следует похожим образом себя

играть какую другую роль поэтому так вот та прибоя к ним обращаться не следует похожим образом себя ведут атрибуты и уровне класса смотрите вот сейчас в базовом классе deanne у нас есть атрибут с именем name и мы можем совершенно спокойно к нему обратиться через объект р например р . name и вывести вот это значение геон 3 строку делу но если мы вот здесь вот напишем 2 подчёркивания перед ней мам то соответственно мы напрямую к ему уже обратиться не можем не извне вот так он будет ошибка не

мам то соответственно мы напрямую к ему уже обратиться не можем не извне вот так он будет ошибка не внутри вот это вот класса rect то есть например если бы вот здесь от мы захотели создать какой не такое локальное свойство name используя а требуют вот это вот класса giant например я напишу диол . 2 подчёркивания наем и запустим программу то у нас тоже будет ошибка то есть вот так вот напрямую муж дочери классах тоже не можем к нему обращаться только внутри самого класс идеал то есть если мой

дочери классах тоже не можем к нему обращаться только внутри самого класс идеал то есть если мой здесь в так напишем сел подчёркивание на m равняется sl2 подчёркивания knife так все сработает соответствует эту строчку я уберу чтобы не было ошибок ну и вот эту строчку я тоже уберу запустим программу и мы видим что никаких ошибок нету но давайте выйдем в консоль еще локально требует вот это вот объекта р чтобы убедиться что все действительно сработало да и и здесь вот есть у нас качество найм

объекта р чтобы убедиться что все действительно сработало да и и здесь вот есть у нас качество найм который было сформировано непосредственного зависит в инициализации базового класса d am те же ограничения доступа можно откладывать и на методы из например в базовом классе гиа прописать дополнительно приватный метод то есть два подчёркивания и пусть он называется ворифа и корт который будет проверять допустимость координаты ну а проверка будет очень простая это координата может меняться от нуля

допустимость координаты ну а проверка будет очень простая это координата может меняться от нуля но и допустим до 100 вот так далее могут этот метод ворифа и корт может вызвать только в том классе где он определен ну то есть вот в этом классе deanne из мы напишем слов . два подчеркивая ворифа и кошки x1 и запустим программу то никакой ошибки не будет сейчас работает но если мы попробуем сделать то же самое в дочернем классе rect то у нас появится уже ошибка потому что к приватным атрибутом можно

же самое в дочернем классе rect то у нас появится уже ошибка потому что к приватным атрибутом можно обращаться только внутри того класса где они определены во всех дочерних классах доступ уже запрещен а вот если прописать а то нижнее подчеркивание то никаких проблем у нас не будет то есть вот эти вот protected атрибуты они доступны и внутри текущего класса где определены и во всех дочерних запускаем и у нас никаких ошибок уже нету то есть вот в этом отличие этих двух режимов доступа protected

и у нас никаких ошибок уже нету то есть вот в этом отличие этих двух режимов доступа protected используется для защиты атрибутов от внешнего вмешательства но все эти атрибуты доступны внутри того классы где определены и во всех его дочерних классах а про и вот атрибут правят доступна только в том классе где они непосредственно определены вот это но уже себе очень четко и хорошо представлять и я надеюсь вы теперь знаете как работает и режимы доступа атрибутов при наследовании классов и сможете

надеюсь вы теперь знаете как работает и режимы доступа атрибутов при наследовании классов и сможете грамотно применять в своих программах [музыка]

#24. Полиморфизм и абстрактные методы | Объектно-ориентированное программирование Python

all здравствуйте дорогие друзья меня зовут сергей балакирев и на этом занятии я хочу затрат следующий важный вопрос объектно-ориентированного программирования полиморфизм что это такое и как он реализуется в python в начале восполнен что полиморфизм это возможность работы совершенно разными объектами единым образом то есть через единый интерфейс кажется пока не особо понятно поэтому давайте как всегда постигнем суть этого подхода на конкретном примере давайте представим что нас программе есть

всегда постигнем суть этого подхода на конкретном примере давайте представим что нас программе есть два вот этих вот класса для прямоугольников и для квадратов и в этих классах прописан 2 гетеро геттеры для получения периметров этих объектов соответственно ниже мы можем создать объект этих классов ну например вот так то rectangle и стороны прямоугольника азино-2 второй прямоугольник будет иметь сторону допустим 3 и 4 и то же самое для квадратов первый квадрат будет иметь сторону 10 а второй

сторону допустим 3 и 4 и то же самое для квадратов первый квадрат будет иметь сторону 10 а второй пусть будет иметь втором 20 все у нас в программе создан 4 объекта 2 для прямоугольника и два для квадрата и теперь для каждого типа объектов мы можем вызвать греттир то есть для прямоугольников будет метод get rekt п.р. это для первого прямоугольника а этот бой для второго прямоугольника и то же самое мы можем прописать для квадратов значит ссылка с 1 здесь мест немножко по-другому же называется

мы можем прописать для квадратов значит ссылка с 1 здесь мест немножко по-другому же называется китайскую p.ru а для второго объекта соответственно будет то же самое запустим программу и видим что все работает и периметры этих фигур вы здесь что у нас отображаются а теперь давайте представим что вот все эти объекты вы бы хотели записать в виде одного списка списка дел значит я пропишу вот это список или будь то на ссылки на объекты начала прямоугольники потом на квадраты но а затем мы бы хотели

или будь то на ссылки на объекты начала прямоугольники потом на квадраты но а затем мы бы хотели вот этот список перебрать помощь циклов а значит уже нём но а внутри цикла моего через эту ссылку же она каждый объект хотели бы вызвать метод для получения периметра соответствующего объекта но у нас два раза есть метода для прямоугольников 1 а для квадрат в другой ну давайте я от возьму метод для прямоугольников и с помощью функций print мы будем вводить то что у нас получится в консоль а эти две

и с помощью функций print мы будем вводить то что у нас получится в консоль а эти две строчки я уберу как вы понимаете сейчас запущу программу то у нас будет ошибка вот эти два числа которые мы здесь видим этот периметр прямоугольников потому что здесь в коллекции идем первые два объекта это у нас прямоугольник как раз а у прямоугольников атакуют метод get rekt пор существует он был вызван успешно и вот мы здесь видим эти два числа а потом у нас шлейф здесь в квадрат то и совершенно другие

и вот мы здесь видим эти два числа а потом у нас шлейф здесь в квадрат то и совершенно другие объекты и у объекты квадрата нету у такого-то методах и тпр вот именно поэтому мы здесь и видел вот такую ошибку атрибута error как позже был бы поправить вот эту ситуацию но вот если решать эту задачу в лоб то мы могли бы сделать так проверить если у нас вот этот объект же принадлежит классу rectangle то соответственно вызвать вот этот метод get rekt п р а иначе будем вызывать другой метод для

то соответственно вызвать вот этот метод get rekt п р а иначе будем вызывать другой метод для квадрата и он будет соответственно зваться гтс cooper я сейчас запустить программу то никаких ошибок не будет и вроде бы все работает но это не лучшая реализация вот давайте представим что в нашей программе помимо этих двух графических примитивов добавляется еще один треугольник и соответственно класс тренда я вопрос сюда скопировал его реализации вполне очевидно и я думаю вы все прекрасно понимаете

тренда я вопрос сюда скопировал его реализации вполне очевидно и я думаю вы все прекрасно понимаете как это все работает и у него свой метод для получения периметра он называется gt рпр значит если долю 900 мы создадим объект и для вот это вот класса тренингов ну допустим такие вот ринг со сторонами 1 2 и 3 второй треугольник будете ведь стороны 456 дали им эти объекты добавил вот в эту нашу коллекцию геон тайвин т2 и пропишу ну и теперь если мы запустим эту программу то опять же вы прекрасно

геон тайвин т2 и пропишу ну и теперь если мы запустим эту программу то опять же вы прекрасно понимаете что у нас будет ошибка потому что нашему условию если объект не принадлежит квадрату то для его вызывается такой метод get с cooper для квадратов здесь все проходит но для треугольников это уже не пройдет даже у треугольника не от такого метода но вот отсюда и получается вот эта вот ошибка то есть наша программа получается несколько корявой в ней нет ни красоты не гибкости и вот как раз чтобы

наша программа получается несколько корявой в ней нет ни красоты не гибкости и вот как раз чтобы придать атаку статую гибкость здесь очень хорошо применим подход который называется полиморфизмом как это сделать давайте договоримся что в каждом классе геометрических примитивов метод который будет возвращать периметр будет называться едином образом вот так вот gpr то есть это мой между собой договариваемся пусть это будет так и он может назвать как-то по-другому главное чтобы во всех классах он

пусть это будет так и он может назвать как-то по-другому главное чтобы во всех классах он назывался одинаково ну в качестве примера пусть называется так гпр соответственно и здесь тоже будет г п в квадрате и в треугольнике тоже gpr теперь когда мы будем перебирать вот здесь вот с помощью циклов а вот эти вот объекты то мы можем убрать все эти проверки и вместо них прописать вызов от того простого метода gpr зато здесь будет функция print запустим программу и у нас все работает без каких-либо

метода gpr зато здесь будет функция print запустим программу и у нас все работает без каких-либо проблем и это логично тоже каждая ссылка списка ведет строго на свой объект то есть вот эти вот первые два элемента это объекта rectangle следующие два это объект скво но и последние два это triangle соответст когда в цикле вызывается метод гпр то этот метод вызывается у соответствующего объекта у соответствующего класса это и есть пример полиморфизма когда к разным объектам мы обращаемся через

соответствующего класса это и есть пример полиморфизма когда к разным объектам мы обращаемся через единый интерфейс в данном случае через метод gpr и вот здесь вот в программе именно это у нас и записано то есть вот этот метод gt-r будет вызываться у соответствующего объекта мало того формирование такого списка мы можем сделать вот в этой программе немножко по-другому более красиво на мой взгляд а именно прописать сразу здесь в начале этот список объекты создавать сразу внутреннего то есть он

а именно прописать сразу здесь в начале этот список объекты создавать сразу внутреннего то есть он например 1 значит нас будет объект прямоугольник 2 затем два объекта квадраты but it's ну и затем два треугольника вот эти вот образом далее мы и закрываю квадратную скобку и списку у нас готов то есть вот в таком вот виде моего тоже можно сформировать запустим программу и все будет работать с аналогично мне кажется так программа выглядит несколько более приятно и читабельные но у нашей реализации

мне кажется так программа выглядит несколько более приятно и читабельные но у нашей реализации есть еще один существенный недостаток что если мы в каком-либо классе вот этих графических примитивов забудем реализовать вот этот ветер я поставлю вопрос то в комментарии то есть два треугольника например у нас этого гетеро нету понятный если мы сейчас запустим программу нас опять возникает этот ошибка атрибута error как можно было бы поправить этот момент что если мы забываем определить вот этот г

атрибута error как можно было бы поправить этот момент что если мы забываем определить вот этот г труд этот метод the program все равно бы продолжал работать один из способов это создать изящество начали базовый класс для всех этих графических примитивов пусть он называется diam и вот в этом базовом классе определить как раз вот этот метод gpr который бы работал по умолчанию но например он бы у нас возвращал просто -1 а все остальные классы соответственно унаследовать от этого класса dyom то

нас возвращал просто -1 а все остальные классы соответственно унаследовать от этого класса dyom то есть у прямоугольника и квадрата ну это же самой треугольника если мы теперь запустим нашу программу то никаких ошибок не будет но у треугольников вот этот метод сработает по умолчанию как бы и возвратит как раз вот эта вот минус единицу то есть будет вызван метод базового класса да и это не самое лучшее решение все же нам бы хотелось чтобы каждый дочерний класс имел бы обязательную реализацию вот

решение все же нам бы хотелось чтобы каждый дочерний класс имел бы обязательную реализацию вот это вот метода gpr как это можно сделать один из рекомендуемых способов это добавить вот в этот метод gtr генерацию специального исключения который называется not implemented эру здесь мы пропишем такую строчку что дочерью класть должен быть переопределены мне тот гбр то есть когда у нас возникает атака исключения мы будем знать с чем она связана я сейчас запустить программу то как раз вот это

атака исключения мы будем знать с чем она связана я сейчас запустить программу то как раз вот это исключить у нас появится когда вызовем метод gpr для треугольников даже в треугольнике вот эта мета gt-r не определён соответственно для тренинга love будет вызван этот метод фото из этого базового класса d am и сформировано вот это вот исключение который мы здесь видим в консоли читая это исключение программист сразу поймет в чем проблема разумеется из мы щас вот здесь вот уберем комментарии в

программист сразу поймет в чем проблема разумеется из мы щас вот здесь вот уберем комментарии в классе джингл и запустим программу у нас уже не будет никаких ошибок то есть вот эти вот образом мы как бы сделали что метод gtr обязательно должен быть переопределены в дочерних классах и вот в языках программирования методы которые обязательно нужно переопределять в дочерних классах и которые не имеет своей собственной реализации называются абстрактными конечно языке python нет чисто абстрактных

своей собственной реализации называются абстрактными конечно языке python нет чисто абстрактных методов и здесь мариш выполняем имитацию их поведения заставляя программиста переопределять метод get прв дача рик классах самостоятельно генерирую такой вот исключение not implement террор и так из этого занятия до моего поняли что из себя представляет полиморфизм и как оно реализуется на python также узнали как можно определять методы которые ведут себя подобно абстрактном с необходимость их

также узнали как можно определять методы которые ведут себя подобно абстрактном с необходимость их переопределения когда через классах [музыка]

#25. Множественное наследование | Объектно-ориентированное программирование Python

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

есть вам применяете не так часто как обычное наследование от одного базового класса но тем не менее это тоже важный механизм и некоторые подхода к программированию его активно используют например идеи миксину в python реализуется как раз через множественное наследование и учебный пример я решил связать именно с ними а заодно показать еще один прием в программировании давайте представим что мы делаем некие интернет-магазин по продаже товаров например ноутбуков дисков процессоров и так далее

делаем некие интернет-магазин по продаже товаров например ноутбуков дисков процессоров и так далее каждый товар будет определяться своим классом но и у всех этих классов будет один общий базовый класс год также у каждого товара обязательно будут следующие поля наименование вес и цена для пример запишем нашей программе базовый класс куц вот в таком вот виде у него айдена такой-то очевидный инициализатор но и дополнительно прописал еще такой метод который просто выводит информацию о товаре

но и дополнительно прописал еще такой метод который просто выводит информацию о товаре д'алема пропишем один дочерний класс который будет называться ноутбук то есть он будет отвечать за ноутбуки ну и соответственно следуется вот от этого базового класса goods внутри этого базовым классом пока ничего прописывать не путем поэтому я просто пишу пас а затем мы можем создать экземпляр этого класса но например так вот ноутбук и вот здесь нужно указать его название пусть от будет acer вес полтора

но например так вот ноутбук и вот здесь нужно указать его название пусть от будет acer вес полтора килограмма ну и цена пусть будет 30000 чтобы увидели что все работает и они же еще вызовут этот метод print info чтоб мы увидели вот всю эту информацию которая сохраняется в этом объекте запустим программу и видим что во первых у нас работал вот этот инициализатор базового класса были созданы все локальные атрибуты ну и соответствует этот метод print info как раз их и выводит в консоль пока в

локальные атрибуты ну и соответствует этот метод print info как раз их и выводит в консоль пока в общем ничего нового здесь нет но потом представим что к нам приходит тимлид и говорит дорогой синьор добавь пожалуйста возможность логирование товаров магазина и как бы вы поступили на месте этого сеньора плохой сеньор насчет прописывать логику лакирования либо непосредственно воздействовать вам классе либо в базовом классе уровне выше по иерархии а хороший как раз воспользуется идеи миксин of для

либо в базовом классе уровне выше по иерархии а хороший как раз воспользуется идеи миксин of для этого он создаст еще один вспомогательный класс который мы зовём так вот миксин блок этот класс не будет наследоваться ни от каких базовых то есть он быть самостоятельным классом ну а внутри мы пропишем такую реализации то есть в учебных целях я пропишу такую-то реализацию то что него будет инициализатор без параметров в инициализации мы напишем print что мы видим что вызвался вот этот и нет именно

без параметров в инициализации мы напишем print что мы видим что вызвался вот этот и нет именно этого класса миксер log поэтому и не этого лист vixen лак ну они же мы сделаем следующее вот этот идентификатор айди увеличим на единицу и создадим объект о еде это и свойства иди со значением вот это вот о еде ну и кроме того я запишу здесь еще один вспомогательный метод который будет называться например у так вот сэйв сел лог нашу насадка все-таки для лакирования предназначен по этом какая-то

например у так вот сэйв сел лог нашу насадка все-таки для лакирования предназначен по этом какая-то логика лакирование здесь должна быть далее из пропишу принц и с помощью и в строке мы выйдем следующую информацию значит вот этот ай ди ай ди товара и через : пишем товар был продан в 00 часов все то есть у нас с вами получился еще один класс который работает совершенно независимо от классов ноутбук и класса goods и лишь добавляет определенный функционал планирование товаров с использованием и

и класса goods и лишь добавляет определенный функционал планирование товаров с использованием и хайди вот такие вот независимой базовые классы и получили в счет название миксеров примесей давайте добавим этот класс в цепочку наследование то есть через запятую здесь в круглых скобках мы пропишем вот этот класс миксин то есть у нас получилось что дочерний класс ноутбук сейчас наследуется от двух базовых классов adwords и от миксин лак при этом функционал вот этого дочернего класса содержит в

базовых классов adwords и от миксин лак при этом функционал вот этого дочернего класса содержит в акцио нал обоих этих классов и миксе налог и goods ну а чтобы увидеть что действительно вот этот функционал работает по камере он должен работать мы не жевать за счет вызовем метод cfl лак ну и давайте попробуем запустить посмотрим что у нас с вами получится запускаю программу и видим ошибку ошибка в том что у нас не существует атрибут айден то есть очевидно что она связана с тем что не был

в том что у нас не существует атрибут айден то есть очевидно что она связана с тем что не был выполнен инициализатор вот это вот базового класса mig силок то есть инициализатор класса goods отработал а инициализатор класса mig силок не отработал почему это произошло как мы уже знаем при создании объектов инициализатор сначала ищется вот в этом дочерним классе то что именно объект дочернего класс создается а затем в базовых классах причем сначала в первом базовом классе goods а затем если он там

а затем в базовых классах причем сначала в первом базовом классе goods а затем если он там не будет найден во втором базовом классе миксин лак так как у нас в goods есть инициализатор то соответствовал был выполнен и на этом все завершилось 2 цели затраты тот не вызывался однако нам в программе нужно чтобы он тоже вызывался как это можно сделать обычно вы здесь в таинстве лиза тарах базового класса прописывать такую строчку создают объект посредник с помощью функции супер который делегирует

прописывать такую строчку создают объект посредник с помощью функции супер который делегирует вызов уже вот это вот инициализатор а соответствующего базового класса то есть в данном случае будет вызвало здесь что и нет вот это вот класса миксер log давайте посмотрим что у нас будет только вот здесь вместо mixell около пропишем goods запускаем программу и видим что отработала инициализатор миксе log класса mig силок и кольца ну а также вот выявилось в такой от информация то есть у нас

миксе log класса mig силок и кольца ну а также вот выявилось в такой от информация то есть у нас действительно все работает так как в принципе мы этой задумывали но здесь остается вопрос а откуда вот этот функция super знает что нужно обратиться именно вот как вот второму и cyzer у класса mig силок а скажи мне к базовым класса общем от которого не явно наследуется вот этот класс goods все очень просто в python существует специальный алгоритм обхода базовых классов при множественном наследование

в python существует специальный алгоритм обхода базовых классов при множественном наследование сокращенно называется the cut мара но расшифровывается по-английски так месяц resolution оон door в данном случае вот когда у нас такая иерархия наследования то алгоритм ро будет обходить вот эти вот базовый класс в следующем порядке в начале мы обратив сетка этого дочернего класса ноутбук-то будем искать необходимые методы если не найдем то к первому базовому классу гуц который записан первым в

искать необходимые методы если не найдем то к первому базовому классу гуц который записан первым в списке наследования далее к следующему классу mixing а уже от него вот к этому классу объект почему я уверен что цепочка поиск по базового класса будет вот именно такой на самом деле мы ее можем посмотреть для любого класса ой зависят в python есть специальная коллекция я ее выведу с помощью функции print для класса ноутбук по это скопирую ноутбук и смотрите здесь есть специальные переменную

print для класса ноутбук по это скопирую ноутбук и смотрите здесь есть специальные переменную обороты 2 подчёркиванием ро2 подчёркивания это список классов которые обходятся при поиске того и нового атрибута давайте запустим эту программу и по состоит за список даже здесь в начале идет как раз этот класс ноутбук то есть наш дочерний класс ноутбук затем класс густо есть вот этот первый класс гуц который идет у нас списке наследования далее класс миксину окно и наконец класса object то есть мы

который идет у нас списке наследования далее класс миксину окно и наконец класса object то есть мы можем посмотреть в каком порядке будет обходиться наши классы при поиске того или иного атрибута конечно эта цепочка обхода для нашего конкретного примера при другой иерархии наследований а эта цепочка может быть другой но одно всегда неизменно первый базовый класс он в этой цепочке всегда идет 1 ну после дочернего разумеется и это важный момент вы всегда можете быть уверены что инициализатор 1

ну после дочернего разумеется и это важный момент вы всегда можете быть уверены что инициализатор 1 базового класса сработает в первую очередь почему это важно смотрите при создании объекта ноутбук мы передаем ему три аргумента название вес и цена эти три аргумента затем передаются в инициализатор который раз прописано вот в этом классе goods и так как первым будет вызван инициализатор именно этого класса там и уверена что эти аргументы будут переданы именно в него они в какой-то другой

этого класса там и уверена что эти аргументы будут переданы именно в него они в какой-то другой инициализатор других базовых классов и какая бы цепочка наследование у нас не было все равно 1 будет вызываться метод init класса goods потому что он у нас вот здесь вот записан первым это гарантирует работоспособность нашей программы при разных иерархиях множественного наследования ради интереса давайте поменяем эти классы между собой запустим программу и у нас будет очевидная ошибка потому что

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

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

и так далее имели бы только один вот этот параметр сел и никаких дополнительных иначе будут сложности их использования в чем они состоят давайте для примера прописываем сели за три класса mig силок один дополнительный параметр я его назову просто так p1 очевидно сейчас при запуске программ у нас будет ошибка потому что когда мы вызываем инициализатор вот здесь вот класса mig силок то мы не передаем никаких дополнительных параметров только 1 целом поэтому здесь нужно что-то указать давайте я

никаких дополнительных параметров только 1 целом поэтому здесь нужно что-то указать давайте я просто единичку поставлю запустим программу и теперь все отрабатывает то есть вы здесь что у нас дополнительно есть параметр и мы его явно вот здесь вот должны уже передать а давайте представим что нас вот есть ход классов миксеров несколько но допустим еще вот есть гексал аг 2 и у него в инициализатор и уже два дополнительных параметра соответственно когда вот здесь вот в миксе лог мы будем через

и уже два дополнительных параметра соответственно когда вот здесь вот в миксе лог мы будем через функцию супер вызывать обращаться к следующему in цивилизацию базового класса то соответственно должны указать два уже выдать их от параметра p1 и p2 но разумеется из вот этот класс mix-a-lot два будет идти после классами ксенолог вот так вот запускаем программу у нас конечно все работает но представьте что программист не знает об этом и он просто использует эти от классы миксеров и по идее он может

что программист не знает об этом и он просто использует эти от классы миксеров и по идее он может их записывать в любом порядке вот допустим мы поменяем порядок сначала пишем миг силок 2 а потом mix-a-lot запускаем программу у нас уже ошибка почему она произошла потому что обход вот исход базовых классов стал другой сначала мы обращаемся классу голос вызываемый его инициализатор вы здесь вот в начале а затем вызываемые cyzer и не вот у этого класса mig силок с одним параметром а класса mig

в начале а затем вызываемые cyzer и не вот у этого класса mig силок с одним параметром а класса mig силок 2 с двумя параметрами но здесь мы указываем только один вот из-за этого и произошла ошибка то есть как только мы здесь поменяли вот этот порядок следования базовых классов дополнительных базовых классов у нас уже возникает вот такие ошибки и все из за того что вы инициализатор появились вот эти вот дополнительные параметры то есть как только они появляются то сразу стекает такая путаница и

вот дополнительные параметры то есть как только они появляются то сразу стекает такая путаница и соответствующей ошибки чтобы этого не было принято в базовых дополнительных классов использовать инициализатор без параметров ну то есть с этим параметрам сел тогда и никаких проблем не будет давайте я здесь уберу дальше здесь вот тоже всё беру параметр p 1 тоже сотрем ну и соответственно здесь мы уже будем вызывать тоже без параметров то есть у нас дополнительный вызов вот этих вот инициализатор of

будем вызывать тоже без параметров то есть у нас дополнительный вызов вот этих вот инициализатор of будет выполняться всегда одной и той же командой супер то есть функций супер и далее вызывается инициализатор и нет без каких-либо параметров тогда и никаких проблем не будет запускаем программу видел что ошибок и нету причем в каком порядке мы не прописали вот эти вот дополнительные базовые классы то есть вот так вот если мы запишем запустим то тоже всё сработает вот именно поэтому вас помогайте

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

от трех классов происходит и обходится они следующим образом сначала ноутбук потом клаус goods затем миксин уловок то есть вот этот следующий класс потом миксе ног 2 то есть вот этот класс ну и на конец класса object то есть это именно тот порядок по которому функции супер будет перебирать вот эти вот базовые классы и он определяется вот эти вот алгоритм бро ну и последнее что я хочу отметить на этом занятии это вызов методов с одинаковыми именами в базовых классов то есть смотрите вот

на этом занятии это вызов методов с одинаковыми именами в базовых классов то есть смотрите вот предположим давайте я уберу лишнее базовый класс то есть миг силок 2 здесь явно лишние что этот мы сотрем оставим только класса u2 и соответственно вот этот класс миксин лак и предположим что в классах goods и миг силок есть одинаковые методы давайте отвозила метод print info и добавлять сюда уток в этот базовый класс vixen мог даже здесь вопросы были уводить в строчку что вызывает вот этот метод

этот базовый класс vixen мог даже здесь вопросы были уводить в строчку что вызывает вот этот метод print инфа из классов миг силок как вы понимаете сейчас когда уносит вызывайте print info то он будет вызван именно из класса goods потому что он этот класс год здесь указан 1 давайте вот от лишней тоже всего берут запустим программу и убедимся в этом до действительного здесь такая информация acer вес и цена это как раз print инфо вот этого класса гость но что если мы хотим вызывать print info не

и цена это как раз print инфо вот этого класса гость но что если мы хотим вызывать print info не вот этого первого базового класса а именно 2 то есть вот конкретно для этого дочернего класса ноутбук мы бы хотели иметь вот такую вот функциональность как это может сделать существует очень два таких распространенных способа если нам нужно сделать какой-то частной вызов принят info именно вот из этого 2 класс микса лук то это можно сделать так прописать этот класс при вот здесь вот потом вызвать

2 класс микса лук то это можно сделать так прописать этот класс при вот здесь вот потом вызвать вот этот принтер фа и передать в качестве первого аргумента ссылку на вот этот объект ноутбук все вот это вот я уберу запустим программу и действительно у нас был вызван этот метод именно из класса микс unlock но если нам нужно всегда вот и print инфо вызывать именно из второго класса mig силок то лучше дел сережка по-другому определить вот этот метод print info прям не посредством в дочернем классе

дел сережка по-другому определить вот этот метод print info прям не посредством в дочернем классе ноутбук то есть переопределить его ну а внутри этого метода мы будем явно указывать чтобы он вызывал принты info вот это вот 2 базового класса миксин лак соответствие место н здесь будет self-ai здесь мой просто пишем н . print info и соответствие запускаем программу все у нас вызывается теперь принтер инфа из vixen лак то есть вот такой прием можно использовать если нужно взять какой-либо метод из

инфа из vixen лак то есть вот такой прием можно использовать если нужно взять какой-либо метод из другого базового класса то есть мы конкретно знаем что вот здесь вот наследуем ся от класса mig силок он точно у нас будет существовать поэтому переопределяя вот этот метод print и инфотаг чтобы он был взят именно из этого базового класса но это конечно только в том случае если этот метод определен в обоих базовых классах если бы его не было в классе good to такого переопределения делать не должен

обоих базовых классах если бы его не было в классе good to такого переопределения делать не должен был бы это вот именно только в том случае если методы с одинаковыми именами существует в нескольких базовых классах и нужно его вызывать и строго определенного тогда может сделать вот так вот от в целом таким образом работает множественное наследование в языке python [музыка]

#26. Коллекция __slots__  | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии мы с вами познакомимся со специальной коллекции слот который можно прописывать в любом классе языка python для простоты восприятия информации возьмем такой простой класс для представления точки на плоскости пока в этом классе нет коллекции слот поэтому при создании его экземпляра можно свободно оперировать существующими свойствами давайте я покажу вам 5 скопировать сюда python console и определим создадим объект этого класса но

давайте я покажу вам 5 скопировать сюда python console и определим создадим объект этого класса но допустим с координатами 1 и 2 значит автоматически у нас с вами в этом класть в этом объекте создаются локальные свойства x y соответствующего значениями 1 и 2 и мы можем эти значения либо читать вот так вот либо менять ну допустим это y равняется 10 и соответственно нас вот в этой коллекции dict локальное свойства y принимает уже значение 10 и кроме того мы можем создавать новые локальные

dict локальное свойства y принимает уже значение 10 и кроме того мы можем создавать новые локальные свойства например так pt . z присвоить новое значение 4 и тогда у нас в локальном пространстве имен объекта pt создается добавляется новая локальные свойства и так далее то есть мы совершенно спокойно можем оперировать вот эти вот локальными свойствами но что если мы хотим объявить класс точки на плоскости чтобы у его экземпляров были только вот эти вот локали свойства x y и никакие другие как

плоскости чтобы у его экземпляров были только вот эти вот локали свойства x y и никакие другие как это можно сделать для этого как раз и применяется коллекции слот давайте я для примера создам еще один класс точки на плоскости значит скопирует этот point будет называться по in 2d и вот здесь вот мы пропишем эту коллекцию слоган значит коллекция слуцк как правило определяется через кортеж поэтому я взять и поставлю круглые скобки и определю вот два таких разрешенных локальных свойства то есть в

я взять и поставлю круглые скобки и определю вот два таких разрешенных локальных свойства то есть в мы здесь в виде строки говорим какие локальные свойства будут разрешены в наших объектах класса по и 2d именно локальные свойства а не атрибуты самого класса по in 2d давай способ как вот этот будет работать значит опять же я скопирую определение этого класса сюда в python consol и мы создадим объект pt2 по in 2d и пусть будет координаты 10 и 20 то что объект создан все нормально мы можем

объект pt2 по in 2d и пусть будет координаты 10 и 20 то что объект создан все нормально мы можем обратиться к свойство дикс она принимает значение 10 обратиться к свойству и y она принимает значение 20 но давайте попробуем создать свойство z присвоим ему значение 30 видите у нас получается ошибка это как раз из-за того что в коллекции слот за счет мы явно указали что в объектах класса по и 2d могут присутствовать только локальные свойства с именами x и y а вот с именем z это уже недопустимо

могут присутствовать только локальные свойства с именами x и y а вот с именем z это уже недопустимо кроме того в объекте pt2 отсутствует вот такая коллекция dict если мы выполним эту строчку то как раз этого и то увидим то есть как только б класс добавили коллекцию слов-то коллекция dict в нём не формируется а мы помним что эта коллекция отвечает как раз за локальное свойства и если бы она существовала то мы могли бы и добавлять новые локальные свойства и удаляет сидел себе что угодно но вот

то мы могли бы и добавлять новые локальные свойства и удаляет сидел себе что угодно но вот так как она отсутствует и присутствует коллекцию слот то разрешено работать только вот статью в локальную свойствами x y причем эти локали свойствам и можно совершенно спокойно меняете допустим экспрессу из 50 никаких ошибок и будет или удалить свойства и y вот так тоже можно делать теперь в нашем объект свойства y просто нету а потом и его снова создать допустим и y присвоить что она у нас снова появится

y просто нету а потом и его снова создать допустим и y присвоить что она у нас снова появится но какие-то другие локальные свойствам и здесь создавать уже не можем причем обратите внимание коллекции слов накладывает ограничения именно на локальные свойства объекта они на атрибуты самого класса то есть самом классе по идее здесь от мы может создавать любые требуют а ну например определить атакуют перемены макс корж со значением допустим 100 давайте вот снова скопируем этот класс теперь определив

макс корж со значением допустим 100 давайте вот снова скопируем этот класс теперь определив python концу и убедимся что все будет работать снова создадим вот этот объект пойду воды с координатами 10 и 20 и у нас никаких проблем нету мы можем обратиться вот к этому атрибуту макс курт и получить прочитать вот этого значения 100 то есть коллекция слота она накладывает ограничение именно локальные атрибута они на 3 будет класса кроме того помимо ограничений создаваемых локали свойств вот эта

атрибута они на 3 будет класса кроме того помимо ограничений создаваемых локали свойств вот эта коллекция еще уменьшает объем памяти занимаемой экземпляром класса смотрите вот давайте я уберу этот атрибут макс курт чтобы у нас вот эти вот 2 класса поинты пойду воды в принципе были одинаковые то есть их просто 2 инициализатор а я скопирую этот класс пойду воды снова сюда в python консоль и создан заново вот этот объект по in 2d и координат также 10 20 давайте теперь измерим занимаемую память

заново вот этот объект по in 2d и координат также 10 20 давайте теперь измерим занимаемую память этими двумя объектами то есть у нас есть объект pt вот это вот класса point и объект pt 2 класса по in 2d мы сейчас сравним сколько эти объекты занимает место в памяти значит для первого объекта патент память будет определяться следующим образом есть магический метод сайтов который говорит сколько памяти занимает пространство имен point и плюс мы еще сюда должна добавить размер вот этот коллекции

занимает пространство имен point и плюс мы еще сюда должна добавить размер вот этот коллекции dict который тоже занимает определенный размер то есть в сумме нас получается здесь 120 гбайт а вот объект pt2 будет определяться только пространство имен потому что ты тот коллекции dict он не содержит выполняем и видим 32 то есть вот этот объект по 1000 занимает 120 байт объект в 232 то есть как виде почти в 4 раза меньше и еще вот этот коллекции слот она ускоряет работу с этими переменами x и y

почти в 4 раза меньше и еще вот этот коллекции слот она ускоряет работу с этими переменами x и y чтобы в этом убедиться я добавлю вот в этот класс пойду один такой вот метод коллег который как раз работает вот эти вот локальными свойствами но это вот в учебный такой пример чтобы замерить скорость работы вот эти вот локальными свойствами и такой же метод мой пропишем в класс point далее чтобы могли сравнивать оценивать скорость работы этой функции я сделаю импорт специального модуля который

могли сравнивать оценивать скорость работы этой функции я сделаю импорт специального модуля который называется той muted далее вот здесь вот ниже мы создадим экземпляр этих классов сначала point пусть у него будет координат 1 и 2 2 объекта будет поинту 2d и у него будут координаты но пусть 10 и 20 затем вот здесь вот мы измерим скорость работы вот это вот метода кальку классе point и point 2d для этого мои смотрят ой mighty возьмем функцию который тоже также называется тайма идти и здесь перед

этого мои смотрят ой mighty возьмем функцию который тоже также называется тайма идти и здесь перед этим с луку на вот этот метод калька причем обратите внимание мы передаем ссылку вызывать вот этот метод здесь не нужно ну и то же самое для т2 значит здесь у нас будет объект п 2 этаже вызываем тот же самый метод ну и выведем это время в конце что мы видели чему она равна на читать он , т2 все запускаем нашу программу ночь смотреть вот этот метод коллег для класса point отработал несколько дольше

нашу программу ночь смотреть вот этот метод коллег для класса point отработал несколько дольше чем для класса пой 2d это как раз произошло потому что вот здесь вот в классе по in 2d у нас используется такой от коллекции forts тогда как в классе point этой коллекции слов нету то есть в итоге мы получаем три вот такие вот особенности работы коллекции слот это во-первых ограничений создавала калек свойств уменьшение занимаемой памяти но и некоторое ускорение работы с локальными свойствами на

свойств уменьшение занимаемой памяти но и некоторое ускорение работы с локальными свойствами на следующем занятии мы продолжим эту тему и посмотрим как эта коллекция ведет себя при наследовании классов [музыка]

#27. Как работает __slots__ с property и при наследовании | ООП Python

здравствуйте дорогие друзья я сергей балакирев и мы продолжаем изучение коллекции слот как мы говорили на предыдущем занятии эта коллекция позволяет ограничивать список а локальных свойств экземплярах класса в котором определено например для класса точки на плоскости мы разрешаем traxuet с именами x и y а теперь сделаем следующее добавим в эту коллекцию еще одно имя который будет называться альянс длина и далее здесь вот когда создаем экземпляр этого класса мы будем формировать от свойства как

длина и далее здесь вот когда создаем экземпляр этого класса мы будем формировать от свойства как длину этого радиус-вектора то есть x квадрате плюс y в квадрате но из всего этого берем квадратный корень и теперь если мы будем создавать к земля от этого класса то свойство лес будет появляться автоматически давайте в этом убедимся я скопирует класс перейду в python концов и сюда вот его вставлю далее мы можем создать экземпляр этого класса ну например так point 2d ну и координаты 1 и 2 смотрите

мы можем создать экземпляр этого класса ну например так point 2d ну и координаты 1 и 2 смотрите вот в этом экземпляре pt у нас появилась свойства линз который принимает а вот какое-то такое значение но что если вот в этом классе по in 2d прописать свойства с тем же самым именем альянс то есть свойство я имею дуб рапорте о котором мы с вами говорили вот смотрите через декоратор пропорции мы можем определить в той или иной свойство вот в этом классе и пусть она называется вот так альянс это у нас

в той или иной свойство вот в этом классе и пусть она называется вот так альянс это у нас с вами будет геттер поэтому мы здесь возвратим значение вот этого локального свойства но вместо линз я возьму два подчёркивания лес-то все-таки локальные свойства должна отличаться от от этого свойства но они же мы определим сеттер значит будет шанс . сеттер и здесь функция который также должна называться то есть метод альянс сел и какое-то значение просто я нашел и здесь далее мы вот это вот локальному

то есть метод альянс сел и какое-то значение просто я нашел и здесь далее мы вот это вот локальному свойство подчёркивания альянс присвоим значение у рты сделаем вот такой простой setter это просто как пример соответственно здесь мы будем разрешать локальные свойства 2 подчёркивания вентс и здесь тоже будет 2 подчеркивание альянс вот в таком вот виде давайте посмотрим будет ли это работать потому что у нас 1 решенные свойство локальной вот по идее вот такую 2 подчеркиваний альянс а мы будем

что у нас 1 решенные свойство локальной вот по идее вот такую 2 подчеркиваний альянс а мы будем обращаться к такому свойству просто линз и вот я как раз хочу посмотреть можно ли так делать с использованием коллекции слот значит я скопирую опять же этот класс удар тв python консорт переопределим его создадим снова экземпляр этого класса по in 2d с координатами 1 и 2 и давайте обратимся к этому свойства альянс значит смотрите никаких ошибок нет все нормально и мы получаем соответствующее значение

альянс значит смотрите никаких ошибок нет все нормально и мы получаем соответствующее значение ну и кроме того мы сюда можем что-то записать даже прав на сеттер есть да пусть альянс равняется 10 тоже все сработало если мы выйдем из свойства то вот эту десяточку здесь увидим то есть несмотря на то что мы в слот как бы не разрешаем вот это вот свойство lends a но тем не менее у нас доступна и мы через него может совершенно спокойно работать в принципе на самом деле так и должно быть потому что

через него может совершенно спокойно работать в принципе на самом деле так и должно быть потому что вот этот ленс это не локальной переменной экземпляра класса а атрибут класса point 2d коллекции слот она запрещает только локальные свойства локально атрибута экземпляров класса и не накладывает никаких ограничений на атрибуты самого класса поэтому можем создавать статьи свойства и использует их классе по in 2d несмотря на наличие коллекции слот следующий важный момент здесь это как работает этот

по in 2d несмотря на наличие коллекции слот следующий важный момент здесь это как работает этот коллекции слот при наследовании классов давайте рассмотрим такой пример вот это вот все лишнее я уберу альянс тоже беру пусть у нас будет вот здесь коллекции снос просто два имени x и y а далее ниже мы определим класс point 3d который будет представлять уже точку в трехмерном пространстве и он у нас будет наследоваться от класса point 2d а внутри этого класса еще прописывать не буду просто вот так

будет наследоваться от класса point 2d а внутри этого класса еще прописывать не буду просто вот так вот паз то есть пустой такой класс скопирую сеть строчки вы сюда от python концов и создадим экземпляр вот этот класс a point 3d сейчас мы можем прописывать у него только два параметра два аргумента передавать поэтому я запишу просто 10 и 20 экземпляра был создан никаких проблем нету вы давайте посмотрим можно ли у него будет создавать скажем переменную z я напишу pt3 то точка z равняется 30

посмотрим можно ли у него будет создавать скажем переменную z я напишу pt3 то точка z равняется 30 никаких проблем нету то есть вот в таком вот виде класс по in 3d он как бы не наследует вот эта вот коллекцию слот и здесь мы можем создавать самые разные локальные свойства и кроме того от вы этого экземпляра есть коллекция dict который позволяет как раз работать вот эти вот локальными переменными причем смотрите у нас здесь прописывается только свойства z свойства x и y они тоже есть но в эту

причем смотрите у нас здесь прописывается только свойства z свойства x и y они тоже есть но в эту коллекцию не попадают потому что есть вот это вот коллекция слот у базового класса по и 2d которая не позволяет прописать вот эти вот локали свойства x и y в коллекцию dict даже если мы сделаем вот так вот удалим из pt3 вот это вот свойство x локальный свойства x а потом снова его созданием со значением 10 и выведи вот этот коллекцию dict то все равно в ней будет оставаться только от этого свойства

10 и выведи вот этот коллекцию dict то все равно в ней будет оставаться только от этого свойства z то есть свойство с именами x и y в нее уже не попадают и отсюда можно сделать один простой вывод если могут в этом классе по in 3d пропишем от коллекцию слот даже такой пустой то значит в нем будут разрешены только эти два локалях свойства x y давайте в этом убедимся я переопределяют этот класс по in 3d создам опять экземпляр класса gt3 равняется point 3d с координатами 10 20 и далее мы попробуем

3d создам опять экземпляр класса gt3 равняется point 3d с координатами 10 20 и далее мы попробуем создать вот этот локальный свойства z со значением 30 теперь мы получаем ошибку там же у нас появилась здесь коллекции слот несмотря на то что в ней ничего не прописано но вот этот локальный свойства x y все-таки допустим а потому что они берутся из базового класса по in 2d и мы в этом можно убедиться на счет три . x у нас вот она существует и принимает значение 10 если мы хотим что в point 3d

на счет три . x у нас вот она существует и принимает значение 10 если мы хотим что в point 3d создавалась лаками свойство z существовало это локальные свойства то его явно здесь надо прописать я пропишу так вот обратите внимание вот на эту висящую запятую она здесь обязательно в даже слот это должна быть коллекций и в данном случае это кортеж поэтому говорю что z это не просто строка а именно элемент вот это вот кортежа первый элемент кортежа теперь если мы скопируем этот класс по и 3d вот сюда

вот это вот кортежа первый элемент кортежа теперь если мы скопируем этот класс по и 3d вот сюда вот создадим опять же экземпляры а класса gt3 со значением 10 и 20 то теперь мы можем создать и свойства z со значением 30 и никаких ошибок нет то есть вот в нашем классе по in 3d сейчас допустим и тарелок олег свойства x и y который берутся с базового класса и z который дополнительно прописывал дочерним классе ну и чтобы вот у нас все красиво работал по идее нужно еще прописать инициализатор а вот в

классе ну и чтобы вот у нас все красиво работал по идее нужно еще прописать инициализатор а вот в эту дочерний класс который бы создавал все эти три локалях свойства x y z и здесь та же z соответствует принимать три параметра вот так вот ну а если зато руд в этом по звуку ася можно убрать можно стать без разницы значит я скопирую вот этот класс по in 3d опять сюда вот определю объект pt3 как point 3d и уже можно передать ему сразу три координаты 10 20 30 запускаем и все у нас работает в итоге в

3d и уже можно передать ему сразу три координаты 10 20 30 запускаем и все у нас работает в итоге в pt3 у нас есть и x и y и z вот так вот работает коллекции слот при наследовании классов но и я надеюсь что вот из этих занятий вы стали лучше понимать работает и коллекции и при необходимости сможете применять в своих проектах [музыка]

#28. Введение в обработку исключений. Блоки try / except | ООП Python

здравствуйте дорогие друзья я сергей балакирев и начиная с этого занятия мы коснемся довольно важная тема в программировании обработка исключений давайте в начале песни что стоит за этими умными словами предположим а программе строчка за строчкой выводим некий текст и допустим после вот этого 3 принта у нас записано вот такая вот не правильная команда print а как вы понимаете перемены а здесь не существует поэтому при выполнении этой программы у нас возникает ошибка или как еще говорят

не существует поэтому при выполнении этой программы у нас возникает ошибка или как еще говорят исключение и имя этого исключение в данном случае на мрр причем смотрите как здесь все происходит первые три строчки вот эти вот были выполнены и как только мы встретили ошибку программа остановилась то есть программа выполнялась сверху вниз последовательно строчка за строчкой до тех пор пока мы не встретили ошибку так происходит выполнение программы и в принципе вы это знаете но вот эти вот

не встретили ошибку так происходит выполнение программы и в принципе вы это знаете но вот эти вот исключения они бывают разные здесь вот опись на частной мороз без исключения на и mirror а если мы скажем и сделаем деление на 0 вот так вот один деленный на ноль и опять запустим программу то исключение будет называться уже по-другому за роде виженера то есть исключение бывает самых разных видов и еще они разделяются по типам вот все ошибки который возникает в процессе выполнения программа

и еще они разделяются по типам вот все ошибки который возникает в процессе выполнения программа называется исключениями в процессе выполнения есть еще исключение в процессе компиляции это как правило синтаксические ошибки если я вот допустим здесь поставлю пробел и запущу программу то она вообще не запустится видите ни одной строчки выполнено не было мы сразу видим вот эту вот ошибку то есть при компиляции программа выдала ошибку и она не была выполнена то есть это вот второй тип ошибок поэтому

программа выдала ошибку и она не была выполнена то есть это вот второй тип ошибок поэтому исключение можно разделить на две атаки от группы исключения момента выполнения и при компиляция когда мы делаем обработку исключений то а нас интересует именно вот эти вот исключение в момент выполнения потому что при компиляция это просто уже писать правильную программу проект записывать конструкции языка python и ничего другого здесь уже не сделаешь от в момент исполнения мы можем уже обрабатываете ск

python и ничего другого здесь уже не сделаешь от в момент исполнения мы можем уже обрабатываете ск лечение но вы скажете так и здесь тоже надо правильно писать программу чтобы не был деления на ноль или еще чего-нибудь но дело в том что не всегда программист наперед может предугадать как именно будет выполняться программа но классический пример мы работаем с файлами и если мы открываем какой-либо файл на чтение или на запись неважно то мы пользуемся такой функция опыт мании с вами уже много раз

файл на чтение или на запись неважно то мы пользуемся такой функция опыт мании с вами уже много раз говорили если здесь указать верное имя файла вот так вот мой файл он у нас сейчас существует вот здесь вот и запустим программу то никаких ошибок не будет но где гарантия что здесь будет указано именно верный файл это указывает и сам пользователь программы он может указать его токуют файл какой-нибудь после запуска программ у нас возникает уже атакуют исключение file not found р.р. то есть вот

после запуска программ у нас возникает уже атакуют исключение file not found р.р. то есть вот это мы как программисты проконтролировать не можем поэтому атаки вот исключения нужно уметь обрабатывать как это делается для этого существует специальный оператор он называет старой в переводе с английского попробовать мы как бы говорим а давайте попробуем выполнить вот этот критический код то есть как программисты я понимаю что здесь возможно будет какая то ошибка по этому просто вот так это его

как программисты я понимаю что здесь возможно будет какая то ошибка по этому просто вот так это его выполнить вот эту вот строчку нельзя нужно обязательно вот заключить в блок трой и попробовать выполнить если он выполнится хорошо а если не выполнится то мы здесь пропишем еще вот такой вот специальный блок except он называется и укажем что будем отлавливать вот такое исключение file not found error в данном случае в этом блоке я просто выведу print то невозможно открыть файл я сама теперь

error в данном случае в этом блоке я просто выведу print то невозможно открыть файл я сама теперь запустим эту программу то как раз это сообщение увидим то есть программа аварийный не завершилась у нас просто вывелось вот эта вот строчка и она продолжает свою работу но давайте здесь еще какой не спринт напишу сообщением штатное завершение опять же запустим эту программу и видим что у нас была обработана исключения и кроме того программа продолжил свою работу и дошла вот до этой строчке то есть

исключения и кроме того программа продолжил свою работу и дошла вот до этой строчке то есть обработка исключений предполагает что программа аварийно не завершается вот здесь вот в этой старой те а продолжает свою работу то есть мы как бы обработали исключения вот здесь вот выявили в консоль вот эту строчку то есть в данном случае обработка исключений означает вывести вот такое сообщение если здесь возникла ошибка file not found error и далее программа продолжает свою работу вот именно это

здесь возникла ошибка file not found error и далее программа продолжает свою работу вот именно это делает операторы trike except или другой пример мы вводим с клавиатуры два числа и предполагаем что они должны быть целыми то есть я воспользуюсь функцией map здесь будет input и сплит то есть мы в одну строчку через пробел в этом два целых числа как вы понимаете здесь возможны ошибки давайте я вот оставлю except вот такой вот file not found и запущу программу в данном случае если мы ведем 1 и 2

оставлю except вот такой вот file not found и запущу программу в данном случае если мы ведем 1 и 2 все будет нормально штатное выполнение но если вести какие-то другие значения нечисловые а и b то у нас будет ошибка в louis erard то есть для того что программой здесь вот аварийно не завершилась нам по идее нужно отловить уже вот такую ошибку wella.ru поэтому вместо file not found валь-ди-фьемме shower or вecит рукой какое-то сообщение ошибкой типа данных опять же запустим нашу программу введём

or вecит рукой какое-то сообщение ошибкой типа данных опять же запустим нашу программу введём неверные данные а и б мы обработали вот это вот исключение wella.ru и программа опять же продолжил свою работу теперь предположим что вот в этом же блоке трой мы делаем деление x на y то есть вычисляем вот такое вот значение x деленный на y как вы понимаете здесь опять же может быть еще одно исключение еще один тип исключение который называется за ради vision давайте я продемонстрирую запустим

еще один тип исключение который называется за ради vision давайте я продемонстрирую запустим программу напишем 10 и у нас получается деление на ноль взорвать зв жена р вот этот ошибка вот этот блока except он не отлавливает это ошибка он отлавливает только в лувр а мы хотя бы отлавливать и вррр и за роде вижу народ как это можно сделать для этого допустим прописывать было кекс м друг за другом но и определять те ошибки которые мы хотим отлавливать но в данном случае я просто выведу деление на

и определять те ошибки которые мы хотим отлавливать но в данном случае я просто выведу деление на ноль опять же запустим эту программу я веду 10 и у нас уже отлавливается и это в рая ошибка то есть вот эти вот два блока except будто отлавливать и вррр и зарой дивизиона в зависимости от того какая ошибка возникла тот блока except это работает и вот таких вот блоков except может быть сколько угодно чтобы отловить в одном блоке except сразу несколько исключений их можно записывать в круглых

угодно чтобы отловить в одном блоке except сразу несколько исключений их можно записывать в круглых скобках после вот это вот except a но например вррр и зарой дивизиона раза вот так вот вот этот блок я закомментирую поставлю в комментарии запустим программу напишем 10 у нас получается здесь ошибка типы данных на не стал сообщение менять а если опять же запустим программу и видим недопустимые данные то увидим то же самое сообщение то есть это тот блок except сейчас отлавливать сразу два

данные то увидим то же самое сообщение то есть это тот блок except сейчас отлавливать сразу два исключения но обычно на практике все таки прописывает два блока то есть вас начал вот один блок вот так вот а затем уже второй потому что тогда мы раздельно можем обрабатывать разные типы ошибок ну и как я вам уже говорил вот так вот можно обрабатывать только исключение в процессе выполнения про синтаксические ошибки мы сейчас не говорим так вот существует определенные архи классов исключений во

ошибки мы сейчас не говорим так вот существует определенные архи классов исключений во главе которой стоит базовый класс bass exception здесь приведён лишь ее фрагмент самих классов гораздо больше из этого рисунка хорошо видно что большая часть классов наследуется от класса exception то есть вот если мы по иерархии будем спускаться то вы здесь вот дальше идет класс эксепшен довольно важный класс от которого наследуется большинство классов исключений на что влияет и это иерархия и как ее можно

от которого наследуется большинство классов исключений на что влияет и это иерархия и как ее можно использовать при обработке исключений ну например смотрите мы видим здесь исключения зарой дивизиона р который в свою очередь наследуется от арифметика р.а. арифметика свою очередь от exception то есть если мы в блоке except укажем какой-либо базовый класс то автоматически будут отлавливать и все вот эти вот исключения дочерних классов то есть если мы укажем арифметика р то будут отлавливаются

вот эти вот исключения дочерних классов то есть если мы укажем арифметика р то будут отлавливаются из-за роде вишен р-р и floating point рыл or lower и так далее давайте в этом убедимся вы здесь вот в программе вместо за роде вишена р я пропишу арифметика запустим программу ведем 1 и 0 и действительному отловили вот это вот исключение за роде вижу эру но при этом прописали класс арифметика др то есть отработала вот этот логика класс арифметика r позволяет там отлавливать класса всех дочерних

есть отработала вот этот логика класс арифметика r позволяет там отлавливать класса всех дочерних исключений а если пропишем класс эксепшен то он будет отлавливать соответственно все вот эти вот исключения включая и wella.ru который у нас там уже прописано давай спасай как это будет работать значит вы здесь вот вместо арш митька r5 переношу exception запустим программу напишу 10 и у нас соответственно отлавливается от этого деление на ноль опять же запустим программу рыбы у нас отлавливается

отлавливается от этого деление на ноль опять же запустим программу рыбы у нас отлавливается вот это вот первое исключение у л и р но здесь есть один нюанс если мы поменяем местами вот эти вот два блока сначала пишем except который будет отлавливать все вот эти вот исключения к сексу то обработка исключений вот такого типа wella.ru нас вообще происходить не будет потому что вот этот первый блок он отлавливает все исключения в том числе и исключение в луи роль поэтому мы до сюда просто не дойдем

отлавливает все исключения в том числе и исключение в луи роль поэтому мы до сюда просто не дойдем и в этом можем убедиться запускаем программу пишем а и b снова и теперь видим деление на ноль то есть мы вот до сюда не дошли поэтому здесь есть одно простое правило сначала прописывается блоки со специализированными исключениями в нашем случае это будет wella.ru а затем уже блок с общими базовыми исключениями но в данном случае это блок exception то есть вот эти вот образом используется эта

исключениями но в данном случае это блок exception то есть вот эти вот образом используется эта иерархия при обработке исключений указывай базовый класс мы тем самым сразу обрабатываем все исключения соответствующих дочерних классов но и последнее что я хочу отметить про блок except это то что его можно прописывать вообще без указания каких-либо классов вот эти вот образом просто except и : тогда здесь будут отлавливается абсолютно все исключения поэтому место деление на 0 просто напишу ошибка

здесь будут отлавливается абсолютно все исключения поэтому место деление на 0 просто напишу ошибка запустим программу и ведем допустим 10 то есть у нас здесь отработал этот блок except ну а если напишем что-нибудь а и б то соответственно нас получается ошибка типы данных то есть отработал уже вот этот блок но если мы оставим только один вот такой была except то он просто будет отлавливать абсолютно все исключения то есть если нам это вот нужно сделать то все можем прописать вот так вот видите

все исключения то есть если нам это вот нужно сделать то все можем прописать вот так вот видите на этом мы завершим наше занятие здесь я вас лишь хотел познакомить с было к метро except а также показать на что влияет иерархии классов исключений при их отслеживание [музыка]

#29. Обработка исключений. Блоки finally и else |  Объектно-ориентированное программирование Python

здрасти дорогие друзья я сергей балакирев и мы продолжаем тему исключений на прошлом занятии мы с вами познакомились с основами работы блока 2 except а также увидели как правильно использовать иерархию классов исключений для их корректной обработки однако простой конструкции try-except часто бывает недостаточно для корректной обработки возникающих ошибок еще на практике прописывают необязательные блоке finally и ios давайте посмотрим как они работают и для чего нужны но вначале я сделаю

блоке finally и ios давайте посмотрим как они работают и для чего нужны но вначале я сделаю небольшую ремарку вы здесь вот когда мы прописываем accepts каким-либо классом исключения то после него можно поставить ключевое слово с и прописать некую переменную вот этот переменная в данном случае z будет являться ссылкой на экземпляр класса исключения зарой деви жена эрб и далее мы можем использовать эту ссылку z этот объект цвет для вывода исключения в консоль ну например вот так вот это же самое

эту ссылку z этот объект цвет для вывода исключения в консоль ну например вот так вот это же самое здесь wella.ru с тоже z можно прописать это будто совершенно независимый переменная но это же самый принцип здесь далее после запуска программа если мы напишем что-то недопустимы например а и b то у нас возникает вот такое вот сообщение то есть стандартный сообщений которую уже заложена вот в этом классе исключению в lower ну а если мы напишем скажем 10 ты сделаем деление на ноль то у нас

в этом классе исключению в lower ну а если мы напишем скажем 10 ты сделаем деление на ноль то у нас возникает уже другое исключение тоже взяты из уже стандартного класса исключение за роде виженера то есть если нам нужно работать с объектами исключений то это делается вот таким вот образом итак вернемся к теме нашего занятия вот в этих блоках trike септ мы можем дополнительно прописывать еще и вот такой вот блок эклз который выполняется при штатам выполнение кода внутри блока трой то есть когда

такой вот блок эклз который выполняется при штатам выполнение кода внутри блока трой то есть когда не произошло никаких ошибок но например мы можем его прописать так после except пишем л.с. и здесь сообщение что не произошло никаких исключений все если теперь в нашей программе вот в этой не будет ошибок то мы увидим вот эту строчку давайте запустим программу в этом убедимся я напишу 1 и 2 и у нас получается что исключение не произошло то есть у нас вот этот код облаке трой выполнился успешно

получается что исключение не произошло то есть у нас вот этот код облаке трой выполнился успешно поэтому мы перешли облака элс ну и отработал этот принтер а если хотя бы одна ошибка произойдет любая ошибка не важно какая то мы эту строчку уже не увидим то есть это был клс уже не сработает то есть если нам нужно в программе выполнить какие-либо действия только в том случае если ошибок не произошло то это делается как раз вот в этом блоке л.с. вторым не обязательно блоком является блок файл или и

то это делается как раз вот в этом блоке л.с. вторым не обязательно блоком является блок файл или и выполняется наоборот всегда вне зависимости от того произошли вот здесь вот какие-либо ошибки облаке трой или не произошли поэтому я здесь напишу сообщение что блок finally выполняется всегда давайте посмотрим что это действительно так пишем 1 и 2 ошибок никаких нету блок finally у нас выполнился аиста пишем 10 допустим то у нас во первых обработается исключение за ради виженера уйдем а вот это

аиста пишем 10 допустим то у нас во первых обработается исключение за ради виженера уйдем а вот это вот сообщение а затем сработал блок файл или то есть блок файл или срабатывает вне зависимости от того произошли какие-либо исключений или не произошли или если мы здесь напишем а и b то тоже было кв анализ работает то есть блок finally у нас отрабатывает абсолютно всегда в последнюю очередь но все же в каких ситуациях нам может понадобиться использовать блок файл или классический пример это

все же в каких ситуациях нам может понадобиться использовать блок файл или классический пример это работа с файлами допустим вот в этом блоке trike мы собираюсь открывать файл ну допустим на чтение я пропишу здесь мая файл txt а далее мы берем и туда что попытаемся записать с помощью метода райт запуска такой страку хеллоу и кроме того вместо вот это вот исключение зарыть и вишни raw мы напишем file not found рты будем отлавливать вот такую тоже исключение а 2 блока except будет отлавливать все

not found рты будем отлавливать вот такую тоже исключение а 2 блока except будет отлавливать все остальные исключения по этой визе лишь о print другая ошибка все теперь когда мы запустим нашу программу то увидим как раз этот исключение другая ошибка потому что вы здесь вот мы вызываем метод райт для файла который был открыт на чтение так сделать нельзя то есть у нас а ошибка произошла в данном случае вот в этой строчке то есть файл открытый ошибка произошла и дали вот здесь вот по программе у

вот в этой строчке то есть файл открытый ошибка произошла и дали вот здесь вот по программе у нас файл остался открытым а мы знаем что любой файл нужно закрывать даже при возникновении ошибок как раз вот здесь он может пригодиться вот этот блок finally в котором мы этот файл и будем закрывать делается это следующим образом вне зависимости от того произошли ошибки и не произошли ну во-первых проверим если f то есть если файл вообще был открыт и существует вот такой объект там и для него вызовем

если f то есть если файл вообще был открыт и существует вот такой объект там и для него вызовем метод close ну и давайте напишем сообщение что файл закрыт чтобы мы видели что действительно файл закрылся запустим программу и смотреть файл был закрыт даже несмотря на то что произошла какая-то ошибка если мы уберем вот эту строчку в которой происходит ошибка и опять же запустим программу то видим что файл тоже был закрыт потому что блоков амели как можно кого реле срабатывает всегда то есть вот

что файл тоже был закрыт потому что блоков амели как можно кого реле срабатывает всегда то есть вот пример того когда можно использовать блок finally правда при работе файлами использовать более компактную конструкцию с использованием файлового менеджера я вам уже об этом рассказывал когда мы проходили тему файлов то есть когда мы открываем файл на чтению на запись используем вот этот оператор виз и далее вот этот ключевое слово с.ф. то есть мы через вот этот объект и вдали уже работаю с этим

и далее вот этот ключевое слово с.ф. то есть мы через вот этот объект и вдали уже работаю с этим файлом но и что-то допустим записываем страку хеллоу а вот этот блок finally здесь уже не нужен потому что ты тот файловый менеджер контекста будет автоматически закрывать файл вне зависимости от того произошла вот здесь от какая-либо ошибка или не произошла ну а обработка ошибок конечно же у нас происходит опять же по-прежнему с помощью этот блок troik септ следующая особенность работы блока файле

опять же по-прежнему с помощью этот блок troik септ следующая особенность работы блока файле связана с обработкой исключений внутри функции давайте предположим что в некой функция вводится 2 целых значений а и возвращается в виде кортежа функции у нас будет называться gprs а внутри мы как раз определим вот этот блок трои xib файл или значит выйди сюда была хитра и мы будем вводить эти две переменные я пропишу это так map and здесь input ну и из плит то есть мы будем вводить эти две переменные в

я пропишу это так map and здесь input ну и из плит то есть мы будем вводить эти две переменные в одну строить к через пробел а далее вызывать тем эти две переменные виде кортежа x и y начни же как мы уже с вами за им нужно обработать такое исключение вррр здесь мы будем вводить сообщение которое заложено в этом исключение но и кроме того возвратим кортеж виде нулей то есть если вот здесь откатили бы значение были введены не correct а то в этом случае возвращается кортеж из нулей а иначе кортеж

бы значение были введены не correct а то в этом случае возвращается кортеж из нулей а иначе кортеж из прочитанных данных а вот здесь вот вместо 2 x это я пропишу blockchain или сообщением что блок finally выполняется до оператора рейтинг давайте в этом убедимся значит я сделал следующим образом вызову эту функцию gprs но и выйдем в консоль все значений которые у нас здесь вот будет прочитано x и y значит запустим нашу программу вот это вот и у нас получается следующее я веду допустимые значения

значит запустим нашу программу вот это вот и у нас получается следующее я веду допустимые значения 1 и 2 и у нас соответственно вот эти занятия на два были прочитаны и кроме того мы ведь вот это вот сообщение что блок finally выполнился то есть блок finally в данном случае выполнялся до оператора retain иначе бы мой этой строчке просто бы не увидели опять же запустим нашу программу введём недопустимой какие-либо данные а и b допустим и видел в этом случае сообщение об ошибке пляж блока except

какие-либо данные а и b допустим и видел в этом случае сообщение об ошибке пляж блока except отработал потом отработал блок finally и затем уже в последнюю очередь отработал вот этот оператор и цен то есть когда мы используем вот эти вот будете trike сет файл или здесь важно знать что оператор ведь он отрабатывает в последнюю очередь вот этот момент тоже нужно хорошо знать когда мы используем эти вот блоки trike сет файл или ну и последнее что я хочу сказать на это занятие это то что можно

эти вот блоки trike сет файл или ну и последнее что я хочу сказать на это занятие это то что можно прописывать вложенные блоки 3xl но предположим у нас есть вот такие блоки уже готовые trike септимий воспользуюсь функцию беру и вот в этом первом блоке мы вложим 2 в котором будем выполнять деление то есть 1 равняется x зеленый на y как вы понимаете здесь у нас возникает исключение который называется за роде vision rh ну и соответственно мы напишем какое сообщение деление на 0 а здесь у нас

за роде vision rh ну и соответственно мы напишем какое сообщение деление на 0 а здесь у нас соответствовал нижний блок вот это треть он уже не нужен файл или а тоже уберу ну и вот эти вот строчки соответственно тоже то есть видеть что у нас получилось вот в этом первом блоке трикси уложен второй блок strike сет соответственно запускаем программу вводим какие-либо значения ну например а и б у нас сейчас отрабатывает x этот этот первого блока ну и соответственно видеть вот это сообщение если мы

сейчас отрабатывает x этот этот первого блока ну и соответственно видеть вот это сообщение если мы введём скажем 1 и 0 то у нас уже от работает вот этот внутренний блок то есть внутренний блок except сообщению деления на ноль в принципе здесь все работает очевидным образом моло толо вот этот блок strike септ по идее можем вынести в отдельную функцию то есть записать вот так вот например die if a , b а здесь внутри прописать вот этот блок трикси соответственно и кс y мы напишем a и b и вот в

a , b а здесь внутри прописать вот этот блок трикси соответственно и кс y мы напишем a и b и вот в этом блоке трой вызовем эту функцию div с аргументами x и y то есть вот так вот вполне тоже можно делать 1 равняется div дают здесь нам надо конечно возвратить эти значения то есть ведь он прописать и здесь я тоже пропишу рецепт этим были возвращать вот это вот сообщение давайте здесь еще напишу в принтер с то есть мы выведем значение переменной который получите при вызове функции div запускаем

принтер с то есть мы выведем значение переменной который получите при вызове функции div запускаем нашу программу увозим какие-нибудь допустимые значения 1 и 2 и получаем значение мальцов 50 кг . дисет принтер с данном случае нам ее значение 0,5 но если опять же запустить программу написать что-то недопустимо то у нас от работает этот блок except a переменный рез у нас уже получается не определенной поэтому по-хорошему начали возить это нужно присвоить и какой из очень допустим но тогда приводе

поэтому по-хорошему начали возить это нужно присвоить и какой из очень допустим но тогда приводе недопустимые значения мы уже будем получать по умолчанию начальное значение 0 ну а если вести вот этих числа 10 то соответствовать отработает деление на ноль то есть возвратит строка деления на ноль и соответственно и и здесь видим в консоли то есть вот так вот можно делать вложено яблоки troik сет либо в явном виде либо через вызов каких-либо функций на следующем занятии мы продолжим эту тему и

либо в явном виде либо через вызов каких-либо функций на следующем занятии мы продолжим эту тему и детальнее рассмотрим механизм возникновения и обработки исключений [музыка]

#30. Распространение исключений (propagation exceptions) | ООП Python

здравствуйте дорогие друзья я сергей балакирев и и на предыдущих занятиях мы с вами в целом рассмотрели работу блоков трой excel файл или элс на примере простых программ в реальности программ куда сложнее с одежда вызова различных функций и даже могут использовать многопоточную реализацию давайте посмотрим как будут выглядеть сообщение об ошибках при использовании функций предположим вот здесь это в нашей программе мы объявляем некую функцию пусть она называется фанка дзен и делает вот такую

это в нашей программе мы объявляем некую функцию пусть она называется фанка дзен и делает вот такую операцию то есть она делит 1 на 0 как вы понимаете 1 на 0 и разделить нельзя поэтому когда мы eutelsat вызове после третьего принта у нас возникнет ошибка за роде вижу на рош запустим программу и действительно видим эту ошибку и кроме того у нас здесь отображается исключение в двух строчках а второй и восьмой почему так произошло дело вот в чем у нас сама исключение возникла и здесь вот во второй

и восьмой почему так произошло дело вот в чем у нас сама исключение возникла и здесь вот во второй строчке программа а вызов функции происходит восьмой строчке вот именно этой информации здесь отображается дело в том что как вы помните когда вызывает ставить на и функция она помещается в стыка вызов функции то есть с главного уровня нашей программы main было вызвано вот этот функции фанк один исключение возникла на уровне вот это вот функции то есть во второй строчке вот здесь вот и далее

исключение возникла на уровне вот это вот функции то есть во второй строчке вот здесь вот и далее распространилась до основной нашей программы до уровня main а это как раз вот эта вот 8 строчка и вот весь этот стек эстрогене исключения мы здесь с вами видим начиная от того места где она непосредственно возникла функций фанк 1 а второй строчке и до восьмой строчке до самого верхнего уровня до уровня main где моего не обрабатывали по этому видео в таком вот виде мало того если мы вывесят с вами

main где моего не обрабатывали по этому видео в таком вот виде мало того если мы вывесят с вами определим две функции пусть будет фанка 2 а далее вы здесь ниже функция фантазия который в свою очередь вызывает фанк 2 а ведь он и здесь у нас будет вызов функции факт 2 опять же запустим вот в таком вот виде и теперь стек распространение исключения у нас несколько другой зародилась исключение также второй строчке удивись от функции факт 2 потом распространилась до уровня функции фанк один это пятая

строчке удивись от функции факт 2 потом распространилась до уровня функции фанк один это пятая строчка вот эта вот ну и дошла до уровне нашей программы это 10 строчка tale ниже то есть мы теперь имеем стык вызову наших функций следующий от уровня программа main вызывает первая функция фанка 1 далее функция фанк 2 и исключения зародилась как раз на этом уровне на уровень фанк 2 далее она распространилась на фанк один от фанк 1 до уровня нашей программы до уровня main и весь спектр в стране не

на фанк один от фанк 1 до уровня нашей программы до уровня main и весь спектр в стране не исключению здесь мы с вами видим так вот обрабатывать исключения можно на любом уровне этого стека или в собой функции фанк 2 или функции фанк 1 или на уровне нашей программу main давайте в этом убедимся значит в начале я сделаю обработку исключения непосредственно вы здесь это в нашей программе то есть блок 2 фанк один здесь будет блока except но и просто сообщения фанк 1р запустим программу вот здесь мы

2 фанк один здесь будет блока except но и просто сообщения фанк 1р запустим программу вот здесь мы как раз видимо это сообщение фанк 1р ошибка была обработана программа выполнялась полном объеме и штата завершилась если же мы пропишем обработку исключений не на уровне вот это вот main не на уровне основной программы а скажем фанк один то тоже все будет работе я напишу здесь стран то есть ведь он фанк 2-я fixed ну и то же самое сообщение print фанк 1р запустим программу видим сообщение фанк 1р

фанк 2-я fixed ну и то же самое сообщение print фанк 1р запустим программу видим сообщение фанк 1р то есть исключение было обработано и далее до уровня мои до уровня самой программы здесь она не дошло то есть мы действительно можем вот эту ошибку за ради vision отлавливать или на уровне фанк 1 или на уровне основной программа ну и разумеется конечно и посредства функции фанк 2 мы тоже можем отлавливать эту ошибку если напишем тот же самый блок стараюсь непосредственного то уже здесь except и

эту ошибку если напишем тот же самый блок стараюсь непосредственного то уже здесь except и здесь далее print фанк 2r и опять же запускаем программу то видим уже вот эту ошибку фанк 2 яра причем смотрите вот на уровень функции фанк один мы уже не можем отловить эту ошибку потому что она была обработана не посредством пункт банк 2 то есть как только ошибка у нас обрабатывается исключение обрабатывается то дальше она уже не всплывает и вот здесь вот уже функции фан козин моего не обрабатываем

то дальше она уже не всплывает и вот здесь вот уже функции фан козин моего не обрабатываем поэтому видим сообщение только фанк 2r опять же запустим программу видите есть только одно сообщение fork 2r вот этот второй сообщение фанк 1р мы с вами не видим потому что ошибка уже была обработана на уровне самой функции фанк 2 вот этот пример показывает что мы можем обрабатывать исключения на разных уровнях стыка вызова что очень удобно вот этот механизм обработки исключений позволяет программистам

стыка вызова что очень удобно вот этот механизм обработки исключений позволяет программистам писать независимый модулей и красивый кот в критических функциях достаточно генерировать и исключения а их обработку выполнять наборе глобальных уровнях например создается класс для печати данных на принтере тогда все ошибки связанные с принтером нет бумаги нет подключения не тот режим печати и тому подобное можно обрабатывать единым образом наверх и глобальном уровне а нижние уровни только

и тому подобное можно обрабатывать единым образом наверх и глобальном уровне а нижние уровни только сигнализирует о проблемах и не более того то есть они генерируют те или иные исключения в результате получается разделение ролей функции нижних уровнях сосредоточены исключительно обработки данных о функции верхних на формирование сервисной информации для пользователя вот так вот в целом а благодаря механизмом распространения и обработки исключений можно создавать египте и безопасный программный

механизмом распространения и обработки исключений можно создавать египте и безопасный программный код [музыка]

#31. Инструкция raise и пользовательские исключения | ООП Python

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=XR-16WMXZOY! This is most likely caused by:

#32. Менеджеры контекстов. Оператор with  | Объектно-ориентированное программирование Python

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=FkhnVkl0EgM! This is most likely caused by:

#33. Вложенные классы | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии речь пойдет о вложенных классах у двух словах это когда один класс уложен в другой до в python так тоже можно делать и есть сразу некой два главных вопроса как это работает и зачем это надо на мой взгляд хороший пример использования вложенных классов это описание моделей во фреймворке джанга если вы не знаете что это такое то не беспокойтесь нам нужно будет только суть вложений и так вот жанка можно встретить определение вот такого

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

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

я привел это просто в качестве примера чтобы вы представляли где могут быть использованы атаки это вложенные класса я свои сейчас ничего не поняли про записей таблицы то это неважно главное сейчас что у нас есть некий класс времен в нем атрибуты со строго определенными именами но и вот этот обложенный класс мета это все что он уже сейчас знать но все же почему фрегор ти джанга создали вот такой-то вложенный класс почему бы вот этот атрибут ordering не переписать вот сюда вот а внутри классовый

вложенный класс почему бы вот этот атрибут ordering не переписать вот сюда вот а внутри классовый мин и использовать вот такой параметр для сортировки вот этих вот записей но давайте предположим что у нас вот в этой таблице есть вот такого и поля который так называется ordering тогда что прочитать данные из этого поля мы должны быть будет здесь от в классе времен прописать такой атрибут атрибут с таким именем иначе бы ничего не работало и здесь получается конфликт с одной стороны орды рынка это

таким именем иначе бы ничего не работало и здесь получается конфликт с одной стороны орды рынка это поля из таблицы базы данных а с другой это параметр который управляет сортировкой вот этих вот и записей чтобы разрешить этот конфликт как раз и используется такое вложенный класс мета этот вложенный класс мета реализует независимое пространство имен от классовый мин и здесь мы можем дополнительно прописывать совершенно спокойно различные атрибуты давайте на конкретном примере посмотрим как это

прописывать совершенно спокойно различные атрибуты давайте на конкретном примере посмотрим как это работает я вернусь сюда твой charm и здесь мы как раз добавим вот это вот поле ordering ну и пусть она соответственно содержит вот такую строку объект класса для поля ordering и смотрите на что у нас выйдет в то есть атрибут targaryen классовый нам и есть атрибут ordering вложенного класса мета как мы можем обращаться водка эти вот атрибутом ну во первых конечно прямую то есть его с помощью

как мы можем обращаться водка эти вот атрибутом ну во первых конечно прямую то есть его с помощью функции при ндс мы напишем класса и мин то есть пространство имен времен и через точку здесь покажем are going to конечно же обратимся вот к этому атрибуту и отобразил вот эту строчку а если мы через вот этот выбор далее обратимся к пространство имен метод то есть к вложенному классу мета и через . опять же обратимся к ordering the уже возьмем вот этот атрибут давайте запустим программу и убедимся

же обратимся к ordering the уже возьмем вот этот атрибут давайте запустим программу и убедимся что она все работает да мы здесь видим вот эту строчку то есть вот этот атрибут был отображен а затем вот этот список то есть был взят атрибут ordering уже из вот этого то вложенного класса мета то есть вот такие вот определение вполне может сделать python и вот так мы можем обращаться к соответствующим атрибутом вложенного класса и конечно можем также обращаться открыть в атрибутом ordering классовый

атрибутом вложенного класса и конечно можем также обращаться открыть в атрибутом ordering классовый блин или вложенного класса мета через экземпляр вот это вот класса в м м давайте это сделаем значит создаем экземпляр этого класса мы сделаем это вот эти вот образом и далее через w мы обращались сначала к этому атрибуту ну а затем к этому атрибута вложенного класса мета запустим программу и как видите у нас все тоже работает но внутри вот это вот экземпляра класса w у нас сейчас нет никаких

видите у нас все тоже работает но внутри вот это вот экземпляра класса w у нас сейчас нет никаких локалях свойств и мы в этом можем легко убедиться если распечатаем вот такой вот коллекцию dict запускаем программу и видим что это пустой словарь то есть локальных каких-то атрибутов свойств ввода в этом максим priori класс w у нас нету потому что внутри классовым нет никакого инициализатор а мы сами его не прописывали ну и соответственно не создавали никаких локальных свойств то есть вот этот

сами его не прописывали ну и соответственно не создавали никаких локальных свойств то есть вот этот ордер young это именно атрибут класса wimming ну и вложенного класса мета давайте все же пропишем инициализатор внутри класса веган знаешь здесь будет и нет он будет принимать два параметра пусть от будет юзер и псв и то есть пароль ну и соответственно мы будем создавать эти два свойства она 3 экземпляров этого класса наш первый свойству это будет юзер ну а второй свойства соответственно будет

этого класса наш первый свойству это будет юзер ну а второй свойства соответственно будет псв вот таким вот образом то есть у нас получается что теперь когда будет создаваться экземпляр вот это вот класса временно то внутри этих экземпляров дополнительно будут появляться вот эти выдува от локальных свойства юзер и происходит ну и конечно же мы здесь их даже передать путь значки юзера это будет орут ну а пароль как обычно 12345 запустим программу ну и как раз видел вы здесь с в словаре для

орут ну а пароль как обычно 12345 запустим программу ну и как раз видел вы здесь с в словаре для объекта w2 свойства юзер и псв то есть теперь у нас с вами получилась такая картина создается экземпляр класса w внутри этого экземпляра есть два локальных атрибута юзер и псв а вот эти вот все остальные атрибуты они находятся уже непосредственно в классах в классе view мин и во вложенном классе мета мы по-прежнему может к ним обращаться через вот эту вот ссылку w но обратите внимание в нашей

мета мы по-прежнему может к ним обращаться через вот эту вот ссылку w но обратите внимание в нашей программе вот здесь вот объект класса мета не создается вот такой строчкой мы создаем только объект класса зимин но не объект класса мета вот это нужно очень хорошо себе понимать если мы все же хотим сделать так чтобы вот при создании экземпляров класса be mine создавался также и объект класса мета то это нужно явно сделать указать здесь в твой нц или затари но например вот так вот мы создадим

то это нужно явно сделать указать здесь в твой нц или затари но например вот так вот мы создадим локальный атрибут который так и будет называться мета и он будет ссылаться на экземпляр вот это вот класса метр то есть вот таким вот образом если мы пропишем то создавая экземпляр класса vim и вы автоматически создаваться и экземпляр вот это вот выложена класса что мы в этом убедились давайте выведем также вот этот коллекцию dict для вот это вот атрибутами то то есть для объект класса метод

выведем также вот этот коллекцию dict для вот это вот атрибутами то то есть для объект класса метод запустим программу значит мы вот здесь вот видим атрибуты локальные атрибуты для вот это вот экземпляр класса времен а вот этот пустой словарь это как раз для класса мета давайте вот эти вот две строчки о беру чтобы лишний у нас не выводилось опять же запустим программу и как раз здесь только два этих словаря чтобы вы здесь вот в классе мета у нас тоже появлялись какие-то локальные свойства вот у

словаря чтобы вы здесь вот в классе мета у нас тоже появлялись какие-то локальные свойства вот у этого объекта нужно соответственно писать инициализатор и для этого внутреннего класса но мы это сделаем следующим образом значит вы здесь будет и нет он будет принимать один параметр пойдет будет access и соответствовал здесь от мы это локальный свойство access формируем соответствие когда мы будем создавать экземпляр этого класса мета мы теперь даже передать один параметр один аргумент и пусть он

экземпляр этого класса мета мы теперь даже передать один параметр один аргумент и пусть он будет вот такой юзер то есть строка юзер плюс собачка ну и плюс вот этот псв то есть пароль запустим программу и смотрите значит вы здесь вот в классе мета у нас появилась локальные свойства css который мы здесь с вами прописали создали и в частности вот она сейчас принимать такое значение руль собачка и вот пароль 12345 то есть мы из класса зимин можем совершенно спокойно обращаться к вложенному классу

пароль 12345 то есть мы из класса зимин можем совершенно спокойно обращаться к вложенному классу мета ну и создавать в частности его объекты но вот делать наоборот из класса мета обращаться к атрибутам класса зимин нельзя например если мы пропишем вот такую строчку т равняется здесь виден . но и пусть бой тайтл и запустим программу то у нас будет ошибка что класс swimmin не определен почему это так дело в том что когда выполняется вот эта вот строчка то класс swimmin он еще просто не создал его

дело в том что когда выполняется вот эта вот строчка то класс swimmin он еще просто не создал его еще пока нету этого пространства имен не существует и мы обращаемся вот и здесь вот к несуществующему пространства имен поэтому вот так вот напрямую во вложенных классах обращаться каким-либо атрибутом а внешнего класса нельзя хотя изящество инициализации мы это уже можем сделать потому что когда если затар срабатывает то все классы созданы они существуют и тогда мы уже можем вот через это

если затар срабатывает то все классы созданы они существуют и тогда мы уже можем вот через это пространство имен обращаться классу видимым и брать а тут какие-либо атрибуты но например вот так вот я уберу здесь вот эту строчку а здесь пропишу следующая значит нас будет сел также подчеркивание т равняется и мем тайтл вот если это прописать в инициализатор и то у нас все сработает то есть формально у нас все будет выделить создал локальные свойства и соответствующие значения но все же на практике

у нас все будет выделить создал локальные свойства и соответствующие значения но все же на практике вот так вот не следует делать не следует обращаться к атрибутам внешнего класса из вложенных классов логику программы следует продумывать так чтобы вот этот внутренний класс никак не был связан с внешним классом то есть внутренний класс используется исключительно внешним классом но не наоборот а внутренний класс не должен использовать какие-либо атрибуты внешнего класса вот следует придерживаться

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

но вы вполне можете столкнуться с такой конструкции с вложенными классами в других проектах ну и как я отмечал это используется во фреймворке janka и чтобы это не вызывало у вас удивление я решил привести пример работой этой конструкция надеюсь вы теперь хорошо себе представляется как работают вложенный класс а [музыка]

#34. Метаклассы. Объект type | Объектно-ориентированное программирование Python

здравствуйте дорогие друзья я сергей балакирев и на этом занятии мы затронем тему мета классов давайте вначале разберемся что стоит за этим умным словом как я уже не раз говорил на наших занятиях болевые значений стройке числу в списке словарей тому подобное все это объекты по языке python и эти объекты образовано от соответствующих классов типов данных пол стр inflow tlist dict и так далее но эти классы также является и объектами потому что все что в python это объект и даже классы до классы

классы также является и объектами потому что все что в python это объект и даже классы до классы это объекты который позволяет создавать другие объекты с конкретным содержимому а 1 класс и это объекты то должно быть нечто что создает и их и это нечто в python называется меток классом причем вида класс это тоже объект в python все объекты но это объект особого рода который нельзя динамически порождать какие нибудь другим метами то классом он является вершиной отправной точкой для создания

порождать какие нибудь другим метами то классом он является вершиной отправной точкой для создания обычных классов и как следствие их объектов но что является me to классом в языке python наверно вас немного удивит но это давно знакомый вам объект type который мы использовали для определения типов других объектов но это если он вызывается с одним аргументом если передать ему три аргумента то есть имя класса список родительских классов и словарь с атрибутами то данный объект type начинает

есть имя класса список родительских классов и словарь с атрибутами то данный объект type начинает работать совершенно по-другому а именно создаёт динамически новый класс новый тип данных на самом деле все вот эти стандартные типы данных они порождены вот эти вот me to классом type и в этом легко убедиться если перейти сюда а твой чару python console и вызвать вот этот функций то и при для простоты и называю функций и скажем от типа int чтобы увидим следующее это класс который имеет тип type то

и называю функций и скажем от типа int чтобы увидим следующее это класс который имеет тип type то есть вот этот int он как раз образовано от этого type a или можем сделать так type от стр то же самое увидим класс вот этого типа type даже если мы пропишем какой то свой собственный класс вот такой простейший и опять же для него мы вызовем вот этот функцию type то увидим то же самое класс type то есть вот все что порождает в языке python это происходит вот как раз за счет вот это вот me the class

вот все что порождает в языке python это происходит вот как раз за счет вот это вот me the class a type наверное этом уровне у вас в голове крутится вопрос зачем все это надо мы же и так можем объявлять классу своих программах для чего их создавать динамические в процессе работы программы на этот вопрос хорошо ответила гуру питона чем питерс а сказал мета классы это глубокая магия о которой 99 процентов пользователей даже не нужно задумываться если вы задумываетесь о том нужно ли вам их

99 процентов пользователей даже не нужно задумываться если вы задумываетесь о том нужно ли вам их использовать то вам это точно не надо люди которым они реально нужны точно знает зачем они им и не нуждается в объяснениях почему но на мой взгляд чтобы лучше понимать как функционирует язык python все же лучше ознакомиться с этой темой и кроме того кто знает возможно в будущем именно вам и то и пригодится и так давайте теперь попробуем создать с помощью вот это вот объекта type простейший класс

и так давайте теперь попробуем создать с помощью вот это вот объекта type простейший класс простейший класс точки на плоскости пусть он будет вот такой вот то есть от будет класс points именем point и содержать два вот этих вот атрибута макс корт и линкор и сделать это можно следующим образом touch прописываем вот этот объект type у него первым аргументом указываем имя класса в данном случает будет имя класса point далее мы должны указать список базовых классов то есть это должен быть кортеж из

имя класса point далее мы должны указать список базовых классов то есть это должен быть кортеж из базовых классов в данном случае у нас никаких базовых классов не тонну то есть по умолчанию объект поэтому просто пустой карты указываем но и долить словарь от с этим двумя атрибуты макс карты mine cart делается это очень просто значит здесь прописывается имя атрибута макс корж виде строки далее : его значение 100 ну и то же самое для второго атрибутами аккорд и у него значение 0 все значит

: его значение 100 ну и то же самое для второго атрибутами аккорд и у него значение 0 все значит выполняем эту строчку и смотрите что у нас получилось здесь вот справа мы видим что вот эта ссылка а то есть переменная a ссылается на класс который называет свою очередь point и этот класс содержит два атрибута макс корт и минкульт то есть действительно мы с помощью me the class a type только что динамически в программе создали новый класс point который по структуре в точности похожи по такому-то

в программе создали новый класс point который по структуре в точности похожи по такому-то определению которым мы с вами уже привыкли point и два вот этих вот атрибута ну а раз вот этот перемены a ссылается на этот класс point то значит мы можем создать экземпляр этого класса давайте это сделаем наш pt равняется а и две круглые скобки нажимаем и действительно у нас программе создается экземпляр класса вот мой вы здесь справа видим насчет класс по им и у него тоже два атрибута но это атрибут

класса вот мой вы здесь справа видим насчет класс по им и у него тоже два атрибута но это атрибут класса то есть мы можем через эту ссылку pt теперь обратиться вот допустим катар будто макс корт и получить значение 100 при необходимости можем вот здесь вторым аргументом прописывать базовые классы ну например давайте предположим что у нас есть базовый класс b1 то есть он будет просто определение класса b 1 и 2 класс будет называться b2 его тоже будет пустым то здесь будет просто пас а далее мы

класса b 1 и 2 класс будет называться b2 его тоже будет пустым то здесь будет просто пас а далее мы повторим вот эта вот команда то есть type но только здесь будет не пустой кортеж а укажем два вот этих базовых классов b1 и b2 то есть вот так вот мы создали свой класс point который наследуется от этих двух базовых классов b1 и b2 и если мы отобразим вот эта вот коллекций умру для этого класса а то все эти базовый класс у нас здесь с вами перечислено есть вот и сам класс point а вот этот уже

а то все эти базовый класс у нас здесь с вами перечислено есть вот и сам класс point а вот этот уже базовый класса b1 b2 и объект ну и конечно же когда мы динамически создаем класс и то в их можно добавлять и методы но то есть это та же атрибуты атрибуты который ссылается на объект функцию как это можно сделать это можно сделать по краям двумя способами в первом способе у нас будет некая функция но пусть она вот так вот у нас и называется место то один он должен быть вот этот параметр сел

но пусть она вот так вот у нас и называется место то один он должен быть вот этот параметр сел потому что параметр сел быть ссылаться на экземпляр класса ну и в данном случае этот метод пусть просто в его на экран вот эту вот коллекцию dict который есть у каждого экземпляра класса значит у нас есть вот такой то метод в программе мест от 1 и далее когда мы будем создавать класс point вот этот вот то мы можем этот самый метод здесь указать давайте я укажу вместо мин корт чтобы все это у нас

вот то мы можем этот самый метод здесь указать давайте я укажу вместо мин корт чтобы все это у нас умещалось выделить на экране значит здесь мы пишем имя метода пусть он так называется места 1-ая здесь мы соответственно должны передать ссылку на вот эту вот функцию мест сталин который у нас здесь с вами есть то есть вот этот атрибут мест один будет ссылаться вот на эту функцию выполняет команду далее создадим объект этого класса ну и обратимся вот к этому методу место 1 выполним его и

команду далее создадим объект этого класса ну и обратимся вот к этому методу место 1 выполним его и действительно выполнился никаких ошибок нету мы в данном случае уводится пустой словарь дашь локальных свойств вот в этого объект по этой нету во втором способе мы можем вместо вот этого ссылки на какую-то реальную функцию указателям до функцию ну например у так лямда и здесь у него будет та же вот этот параметр сел ну и пусть она просто возвращает значение макс корт то есть вот такая простейшая

этот параметр сел ну и пусть она просто возвращает значение макс корт то есть вот такая простейшая лямда функция выполняем ну и давайте опять же создадим экземпляр этого класса и вызываем место 1 в данном случае этот метод место один возвращает значение вот это вот атрибут класса макс корж но конечно так вот через лямда функции можно прописывать только какие-то простейшие функции функции со сложным поведением придется задавать отдельно а затем добавлять в качестве методов создаваемый класс то

поведением придется задавать отдельно а затем добавлять в качестве методов создаваемый класс то есть вот так вот в самом простом случае с помощью объекта type мы можем динамически создавать новые классы в нашей программе на следующем занятии мы продолжим эту тему и посмотрим как можно в программе создавать свои собственные me to класса [музыка]

#35. Пользовательские метаклассы. Параметр metaclass | ООП Python

здравствуйте дорогие друзья я сергей балакирев и мы продолжаем тему бета классов на предыдущем занятии мы свои видели как с помощью me to close the type можно создавать другие классы но используйте его напрямую не очень удобно мы видели что даже добавление новых методов вызывает некоторые сложности благо выход есть в python мы можем конструировать своей собственной мета классы который конечно явно или неявно использует вот этот me to close type давайте предположим что мы бы хотели в нашей

явно или неявно использует вот этот me to close type давайте предположим что мы бы хотели в нашей программе создавать вот такой вот класс point то есть класс пой с двумя атрибутами и для этого мы создадим свой собственный me to close поэтому вот эти вот все строчки я поставлю в комментарии ниже мы с вами объявил свой собственный me to close этот метод close будет представляться в виде обычной функции до функцию тоже можно использовать как me to close эта функция пусть будет такое решение будет

до функцию тоже можно использовать как me to close эта функция пусть будет такое решение будет название carried класс point и она должна принимать три параметра найма это имя класса потом список базовых классов ну и словарь вот этих вот атрибут в класса далее в самом простом случае она должна возвращать то что вернет функция type то есть вот этот me to close type и этому мета классу type мы также даже передать все вот эти вот три параметра даже здесь будет bass ну и от 1 то есть вот так вот мы

даже передать все вот эти вот три параметра даже здесь будет bass ну и от 1 то есть вот так вот мы с вами только что описали простейший me to close с помощью функции но в нашей функции то есть вот в этом нашем это классе автоматически должны добавляться два таких вот атрибута поэтому мы это сделаем так на что вот в этот словарь от rs с помощью метода апдейт добавим эти два атрибута то есть если они там отсутствуют а будут добавлены а если присутствовали то у них будет от этих значение 100 иной

там отсутствуют а будут добавлены а если присутствовали то у них будет от этих значение 100 иной который нам нужны все на шмита класс создан и далее мы должны его как это применить делаете от следующим образом мы прописываем обычно и вот этот класс point так как made привыкли делать но вот здесь вот в круглых скобках указываю специальный параметр который так называется меток вас и должны передать ему ссылку на соответствующий me to close данном случае это у нас вот этот функция creed класс

ему ссылку на соответствующий me to close данном случае это у нас вот этот функция creed класс point ну а далее здесь давайте пропишем какой-нибудь метод например get cards и этот метод просто будет возвращать кортеж из нулей 0 и 0 все значит вот так вот у нас теперь при создании класса point будет отрабатывать вот этот me to close и фактически будет создаваться класс point по образу и подобию вот это вот алгоритма который мы прописали в этой функция чтобы убедиться что у нас все работает

вот это вот алгоритма который мы прописали в этой функция чтобы убедиться что у нас все работает давайте создайте экземпляр этого класса ну и соответственно обратимся к его атрибутом значит первое требует это у нас будет макс курт второе это мы вызовем вот этот метод get cards запустим программу и как видите у нас все работает то есть вот эта вот строчка она как раз прочитал вот это вот а требуют что мы добавили в этом это классе то есть вы здесь мы с вами его добавляли ну а вот это вот строчка

что мы добавили в этом это классе то есть вы здесь мы с вами его добавляли ну а вот это вот строчка она как раз сработал когда мы взывали метод get курс который явно вот так вот прописали в классе point привычным нам способом то есть мы не сдавали отдельно какую-то функцию потом передавали ссылку на нее здесь мы сделали все так как мы это уже привыкли делать описываем класс point и соответственно 3 него все что формируется вы здесь все атрибуты они автоматически попадают вот в этот словарь от

3 него все что формируется вы здесь все атрибуты они автоматически попадают вот в этот словарь от орз но и затем когда вызывается me to close tab за этим словарем то вы нём уже присутствует этот метод поэтому создается класс point вот с этим методом и дополнительно вот эти вот 2 атрибут что мы здесь явно прописали то есть когда отрабатывает вот этот функция класс point to интерпретатор языка python автоматически вот сюда вот передает имя в данном случае от будет вот этот ими point дали bass это

автоматически вот сюда вот передает имя в данном случае от будет вот этот ими point дали bass это кортеж из базовых классов доноса о чём будет пустой но и от 1 это как раз все атрибуты который вы и здесь с вами указали затем к этим атрибутом мы добавляем еще два вот таких вот но и затем одессит у нас формируется как раз вот этот новый класс point то есть вот так вот работает эта конструкция но конечно использовать функции в качестве me to классов это скорее учебный такой пример все же на

но конечно использовать функции в качестве me to классов это скорее учебный такой пример все же на практике чаще используют отдельные классы который играет роль мне-то классов давайте повторим вот это вот нашу реализацию но они через функцию а через класс и в начале объявим здесь вот давая и поставлю в комментарий а вы делись вот мы сад из объявим класс который так и быть называться мета и так как он у нас будет являться мета классом то должен наследоваться от класса type отметок класса type

как он у нас будет являться мета классом то должен наследоваться от класса type отметок класса type далее внутри этого me to класса мы пропишем инициализатор первым параметром здесь будет ссылка на созданный класс то есть на класс по инн который мы с вами будем создавать помощью этого me to close а потом будет и те имя класса то есть 7 класса point потом кортеж из базовых классов ну и наконец вот это словарь от роста и словарь из атрибутов класса теперь вот здесь вот внутри этого инициализатор

это словарь от роста и словарь из атрибутов класса теперь вот здесь вот внутри этого инициализатор а мы динамически добавляем два вот этих вот свойства два атрибута макс корж со значением 100 ну и соответственно мелькор со значением 0 почему мы делаем вот так вот дело в том что класс на момент вызова инициализатор а новый класс уже создан поэтому чтобы что-то добавить в этот новый уже созданный класс мы просто вот так вот динамически добавляем в него вот эти вот новые два атрибута макс карты

класс мы просто вот так вот динамически добавляем в него вот эти вот новые два атрибута макс карты mine cart но и по хорошему и за счет о начале нам нужно обратиться вызвать инициализатор базового класса на всякий случай и передать ему три аргумента начинаем bass и от раз все вот такой то это класс у нас с вами есть и далее здесь мы его должны с вами указать то есть он у нас будет использоваться для создания вот это вот класса point то есть когда будет отрабатывать вот эти вот строчки то

для создания вот это вот класса point то есть когда будет отрабатывать вот эти вот строчки то вызовется вот этот класс мета в коллекцию от орз будет передан и все атрибуты что присутствует внутри этого класса по инн в данном случае это вот один метод get cards в качестве bass кортеж из базовых классов найма это имя вот этого класса по id ну а сел с это ссылка на уже созданный класс point давайте посмотрим какой будет работать опять же запустим эту программу и видим что у нас все работает то

посмотрим какой будет работать опять же запустим эту программу и видим что у нас все работает то есть присутствует в классе вот этот атрибут макс корт но и кроме того то этот метод год курс который возвращает карту жизнь улей то есть вот так вот используя инициализатор ахмета классе мы динамически добавили в класс point два вот таких вот атрибута макс корт и mine cart конечно как вы помните инициализатор срабатывает сразу после создания объекта то есть в данном случае класса но для более тонкой

срабатывает сразу после создания объекта то есть в данном случае класса но для более тонкой работы лучше конечно переопределять магический метод new который вызывается непосредственно перед созданием класса то есть в нашем случае это можно было бы сделать так мы переопределяем логический метод у неё и в этом магическом методе new нужно передать следующий четыре параметра это будет cls ссылка на вот этот класс мета уже а далее 3 вот этих вот уже знакомых нам параметров затем я собой в нью хотим

этот класс мета уже а далее 3 вот этих вот уже знакомых нам параметров затем я собой в нью хотим добавить вот эти два атрибута макс карты минкульт то это уже следует делать через вот эту словарь от орз потому что класс у нас еще не создан и моего здесь только будем создавать опять же вызывает этот метод апдейта просто копируют эту строчку то отсюда вот ну а далее ricoh type и у этого объекта type мы явно вызовем вот этот метод a new и ему перед этим соответствие все вот эти вот 4 аргумента то

мы явно вызовем вот этот метод a new и ему перед этим соответствие все вот эти вот 4 аргумента то есть сам класс мета потом имя создаваемого класса кортеж из базовых классов ну и соответственно словарь с атрибутами этого нового создаваемого класса а вот этот метод init здесь нам уже не нужно я поставлю в комментарии опять же запустим программу и видим что все работает абсолютно также то есть 10 см от этот атрибут макс корт был создан и мы его и здесь выявили в консоль если же вот эту строчку

см от этот атрибут макс корт был создан и мы его и здесь выявили в консоль если же вот эту строчку поставить в комментарии ради интереса и запустить программу то у нас будет уже ошибка потому что в классе point будет отсутствовать вот этот атрибут макс корж моего добавляем здесь с помощью меток лассо в самом классе point его по умолчанию нету вот так вот можно использовать мета классы для создания новых классов возможно здесь у вас возникает вопрос а в чем преимущества использования вот именно

новых классов возможно здесь у вас возникает вопрос а в чем преимущества использования вот именно me the close of перед функциями ну принципиальных отличий здесь нету любой алгоритму прописать и на уровне функций и на уровне класса однако при использовании классов то есть мета классов у нас в руках оказывается вся мощь объектно-ориентированного программирования в частности может создавать иерархи для формирования сложного поведения меток классов и в крупных проектах это заметно облегчает код и

для формирования сложного поведения меток классов и в крупных проектах это заметно облегчает код и делает его гораздо что белье поэтому на практике чаще использовать все же классы в качестве мета колосов из-за их удобства найдете из этого занятия вы теперь представляете как работает мета классы и как можно динамически создавать с их помощью новые классы в программу на python наверх здесь у вас остается главный вопрос где все это можно применить но об этом я расскажу уже на следующем занятии и

главный вопрос где все это можно применить но об этом я расскажу уже на следующем занятии и покажу все на конкретном примере [музыка]

#36. Метаклассы в API ORM Django | Объектно-ориентированное программирование Python

здрасте драки друзья я сергей балакирев и мы продолжаем тему me to классов на этом занятии хочу привести один более-менее практически примерах использования чтобы вы лучше понимали их роль в программировании некоторые из вас немного знакомы с фреймворка django так вот он использует ими то классы для связи объектов записями базы данных то есть me to close используется для реализации его api о р м джонга в частности он делает следующее можно определить нитей класс модели с набором атрибутов причем

в частности он делает следующее можно определить нитей класс модели с набором атрибутов причем эти атрибуты совпадает с соответствующим полями таблицы в базе данных например в нашей модели зимин есть атрибут тайтл контент фото и так далее а затем во фри worte джан к нам достаточно создать экземпляр этого класса чтобы получить все записи который содержит такое поле ума турман то есть поле тайтл должно быть равно ума турман и в этой таблице у нас есть вот такая вот запись который содержит данное

быть равно ума турман и в этой таблице у нас есть вот такая вот запись который содержит данное поле так вот после создания экземпляра вот это вот классовый нам у нас в объекте w автоматически появляется локальное свойства с точно такими же именами что и атрибуты класса который вы здесь вот у нас прописано но эти локальные свойства уже будут содержать конкретные данные конкретные данные вот этой 5 записи и эта магия по создании объекта в котором сразу оказывается нужные данные соответствующими

5 записи и эта магия по создании объекта в котором сразу оказывается нужные данные соответствующими наборами локальных свойств и выполняется на уровне me to классов в действительности вот этот базовый класс модель который у нас указано здесь в то модели мин как раз и является мета классом добавляя необходимый функционал в класс модели мин воды это конкретный пример где используется не то классы чтобы все было более понятно давайте сделаем свой me to close который бы позволял при создании его

чтобы все было более понятно давайте сделаем свой me to close который бы позволял при создании его экземпляров автоматически формировать в его объектах локальные свойства с теми же самыми именами что и атрибуты самого класс со для этого я перейду сюда твой charm ну и вначале давайте мы с вами обе я его такой класс который будет тоже называться зимин ну а в качестве метод класса у него будет использоваться вот такой класс мета и пусть в этом классе у нас будут следующие атрибуты тайтл контент и

вот такой класс мета и пусть в этом классе у нас будут следующие атрибуты тайтл контент и фото но эти атрибуты просто строки то есть они эти перемены будут ссылаться на вот такие вот определенные строки и теперь мы опишем вот этот метод close который бы позволял в объектах вот это вот класса зимин сразу формировать локальные свойства вот с такими именами тайтл контент и фото ну и с тем же самым содержимым дальше вышивать здесь вот мы этот класс мета объявим так как он у нас будет являться мета

дальше вышивать здесь вот мы этот класс мета объявим так как он у нас будет являться мета классом то есть работать как me to close поэтому его наследуем от класса type ответа класса type в это мета классе мы пропишем инициализатор и как уже говорил на предыдущем занятии вы инициализатор нужно передать четыре параметра сел с это будет ссылка на созданный класс на созданный классовые мин то шмита класс создает класс а дали еще три параметра это на м это имя класса то есть данном случае от будет

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

добавим еще один а требуют который будет называться так и не лет то есть мы вот в этот класс вы мин сейчас добавим инициализатор этот и insulator будет являться ссылкой на вот такую функцию creed около тарс а эта функция мы здесь выше опишем то есть от будет метод вот это вот класса мета значит первый параметр у этого метода будет целых уже ну а далее про пишем вот такую коллекцию аркс и коллекцию кей works что мы могли принимать произвольное количество параметров а внутри этого метода мы

кей works что мы могли принимать произвольное количество параметров а внутри этого метода мы сделаем следующее то есть этот метод на самом деле быть инициализатор am вот это вот класса wimming иметь ввиду то есть мы сейчас фактически взять в топи своим инициализатор вот это вот класса веган то есть в этом инициализатор и мы будем формировать локальные свойства объектов вот это вот класса в именно то есть insulator будет отрабатывать тогда когда создается объект уже вот это вот класса зимин

то есть insulator будет отрабатывать тогда когда создается объект уже вот это вот класса зимин значит в этом инициализатор и мы сделаем следующее будем перебирать атрибуты класса html и и здесь у нас будет атрибут класса находиться в коллекции сел . класс от орз вот для этого мы с вами ее создали то есть вот эта вот коллекция будет находиться непосредственно в классе веган и здесь в инсталляторе мы ее перебираем ну и что мы могли перебирать вот именно ключи и значения то здесь еще вот такой

мы ее перебираем ну и что мы могли перебирать вот именно ключи и значения то здесь еще вот такой метод этом сразу м а внутри этого цикла мы обратимся к лекции dict который как раз и отвечает за локальные атрибуты здесь в качестве ключа указываем те а значение это будет vr да и так как у нас вот этот функция является методом классами то-то и здесь мы конечно должны указать пространства имен мета а дальше название этого метода все класс у нас с вами создан me to close для него тоже прописан

а дальше название этого метода все класс у нас с вами создан me to close для него тоже прописан давайте теперь посмотрим как это все будет работать создадим экземпляр этого класса времен но и соответствовал видим список всех его локалях свойств помощь такой коллекции dict запустим программу и смотрите у нас здесь как раз все это формируется есть локальные свойства тайтл есть локальный свойства контент и фото соответствующими значениями заголовок контент и путь к фото как раз все эти значения

контент и фото соответствующими значениями заголовок контент и путь к фото как раз все эти значения были взяты вот отсюда из атрибутов самого класса виден при этом вся логика формирование вот этих вот локальных свойств у нас вынесенного сюда вот в мета класс и в частности мы прописали инициализатор вот для этого класс вилен то есть вот этот метод close по сути дела превращает вот этот вот класс femen вот в такой вот класс то есть вместо вот такого то определение у нас получается вот такой вот

femen вот в такой вот класс то есть вместо вот такого то определение у нас получается вот такой вот определение класса виден то есть благодаря вот это вот меток со добавляется вот такой атрибут класса трэз соответствующими значениями и вот такой-то инициализатор который как раз и формирует локальные свойства в экземплярах этого класса если мы сейчас вот это вот все поставим в комментарии и запустим нашу программу то все будет работать практически также но только здесь вот локальных атрибут в

нашу программу то все будет работать практически также но только здесь вот локальных атрибут в поменьше стал но это не принципиально но они все те же самые тайтл контент и фото то есть вот так вот на практике общем то используется me to класса чтобы упростить некоторый функционал но в частности готов джанга мы прописываем модель вот на таком уровне простом а далее добавляется необходимый функционал чтобы в экземплярах класса модели у нас появлялись необходимые данные уже взяты из таблицы базы

чтобы в экземплярах класса модели у нас появлялись необходимые данные уже взяты из таблицы базы данных то есть это элемент реализация api rm в django конечно это класса во фреймворке джонка гораздо изощреннее нашего с вами примера я здесь лишь хотел показать саму идею их используя при создании различных обед а вообще конечно следует избегать их применение на практике потому что они несколько запутывает программный код и является источником трудно отслеживаемых ошибок и всегда следует держать в

программный код и является источником трудно отслеживаемых ошибок и всегда следует держать в голове высказывания гуру питона тема питерса но сказал что бета классы это глубокая магия о которой 99 процентов пользователей даже не нужно задумываться если вы задумываетесь использую 7 это класс или нет защиту а мы их применять не нужно а тем кому они реально нужны точно за и зачем ее где их и уже применять вот я надеюсь все эти пример который я приводил на занятиях победа классом сформировали

применять вот я надеюсь все эти пример который я приводил на занятиях победа классом сформировали некоторые представления у вас в голове ну и если где-то на практике понадобится все же их применять то у вас теперь есть некая база о том что это такое [музыка]

#37. Введение в Python Data Classes (часть 1)  | Объектно-ориентированное программирование Python

Здравствуйте дорогие друзья я Сергей Балакирев и на этом занятии мы Познакомимся с относительно новой идеи быстрого описания классов а именно классов данных по-английски это Data classes о чем здесь речь смотрите довольно часто при объявлении классов в программах на Python приходится прописывать синтезатор Ну например вот таким вот образом мы здесь передаём несколько параметров и затем создаём соответствующий локальный атрибуты в каждом объекте вот этого класса и вот это довольно Типовая

соответствующий локальный атрибуты в каждом объекте вот этого класса и вот это довольно Типовая ситуация мало того если мы дали создать им объект этого класса и выведем его на экран например вот так вот запустим программу то вот здесь вот отображается совершенно не информативная строчка мы не понимаем что здесь к чему то есть какие поля в этом объекте класса К чему они равны и так далее поэтому часто для Вот таких вот информационных классов которые содержат некоторые данные добавляет ещё

часто для Вот таких вот информационных классов которые содержат некоторые данные добавляет ещё магический метод репорт то есть прописывают его самостоятельно и возвращает Ну например вот такую строку Пусть мы будем Надеюсь что это класс сын Ну и далее выведем вот это вот коллекцию dict то есть локальный атрибуты которыми будет обладать объект этого класса теперь информация гораздо более информативная видите какую типовую работу приходится выполнять для того чтобы описать класс который бы хранил

видите какую типовую работу приходится выполнять для того чтобы описать класс который бы хранил некие данные Ну и затем эти данные как-то используем и это лишь необходимое минимум Представьте Объем рутинной работы для описания всего лишь нескольких таких классов и так как программист зачастую существо глубоко ленивое но творческое уже давно предпринимались попытки автоматизировать этот процесс и вот начиная с версии Python 37 и выше Появилась возможность прямо из коробки Используйте инструмент

вот начиная с версии Python 37 и выше Появилась возможность прямо из коробки Используйте инструмент для оптимизации объявления классов подобных сын такие классы еще получили название класса данных потому что они данные хранят или по-английски Data classes Давайте посмотрим как это делается один из способов и достаточно распространенной через декоратор Data Class Давайте с его помощью мы создадим класс подобный вот это вот классу сын значит вы здесь вот ниже я это сделаю А вначале мы прописываем

подобный вот это вот классу сын значит вы здесь вот ниже я это сделаю А вначале мы прописываем декоратор потом пишем класс ключевое слово класс имя класса который мы создаем Пусть он называет сын дэйта и внутри вот это вот класса нам нужно прописать атрибуты которые затем будут использоваться как параметры в инициализаторе Но и так как мы делаем класс подобный классы то мы пропишем три вот этих вот атрибута 1 и прайс значит первый атрибут на м и обязательно нужно анонсировать этот атрибут если

атрибута 1 и прайс значит первый атрибут на м и обязательно нужно анонсировать этот атрибут если мы этого не сделаем то вот этот декоратор не сделает этот атрибут параметром инициализатора поэтому аннотации здесь обязательно Ну и предполагаем что вот это вот тайм является строкой поэтому я анонсирую ее вот именно таким типом STR далее следующий атрибут то есть параметры инициализатора предполагается вейд и пусть он у нас будет целочисленной ну и наконец последний этот прайс Пусть он у нас будет

вейд и пусть он у нас будет целочисленной ну и наконец последний этот прайс Пусть он у нас будет вещественной все сделали вот такой вот объявление класса то есть видите достаточно все коротко емко и в принципе понятно И вот это вот объявление сендейт на самом деле почти вот такое же объявление которое мы только что сделали для класса сын то есть вот этот класс сын и вот этот сендейта практически одно и то же Давайте в этом убедимся создадим объект вот это вот класс Sunday То есть я прям

одно и то же Давайте в этом убедимся создадим объект вот это вот класс Sunday То есть я прям скопировать этот строчку пропишу здесь т.дейта и здесь у нас соответственно будет класс тоже sendata и выведем его в консоль запускаем программу и смотрите у нас сразу здесь отображается вполне понятная строчка то есть мы видим какой класс Какие атрибуты здесь существуют чему они равные каким значением и так далее И это благодаря тому что внутри вот это вот класса Data автоматически добавляется вот

и так далее И это благодаря тому что внутри вот это вот класса Data автоматически добавляется вот такой магический метод repor который и выводит всю вот эту информацию именно в таком формате то есть видите как это удобно но и Кроме того конечно уже вот в этом класс syndata автоматически был прописан конструктор вот такого типа то есть в нем появились три вот этих вот параметра и внутри каждого объекта этого класса Data создаются локальные атрибут подобно тому как вот здесь мы тоже с вами

объекта этого класса Data создаются локальные атрибут подобно тому как вот здесь мы тоже с вами прописывали то есть вот все это мы автоматизировали с помощью декоратора Data Class видите это очень удобно Если нам нужно прописать множество вот этих вот классов то у нас будет множество Вот таких вот достаточно емких коротких описаний то есть вот в этом преимущество вот этот декоратор Data Class он не дает ничего нового Но он сокращает программный код и Мы чисто визуально и здесь видим такой

он не дает ничего нового Но он сокращает программный код и Мы чисто визуально и здесь видим такой короткое описание которое если мы понимаем как это все работает становится для нас ясным и понятным Давайте более детально посмотрим что же из себя представляет вот этот классом Data В итоге для этого я импортирую еще вот такую функцию Print и с помощью этой функции Print вот здесь вот ниже выведут то что содержит классы Data а именно значит с индейтом и скопируем и с помощью принта выведем

то что содержит классы Data а именно значит с индейтом и скопируем и с помощью принта выведем коллекцию ZIC то есть атрибуты которые содержат вот эту классом Data запускаем программу чтобы это все дело увидели я расположу справа вот этот панель начну в ту райтоп и вот эти вот образом мы с вами посмотрим что же содержится вот в этом классе то есть Вот его описание и вот то что он содержит значит вот здесь это приведена вся эта информация сразу же видим в нем есть магический метод рэпер то есть

вот здесь это приведена вся эта информация сразу же видим в нем есть магический метод рэпер то есть автоматически вот этот декоратор добавил магический метод repor в этот класс далее мы видим инициализатор который был тоже автоматически добавлен в этот класс То есть это инициализатор никакого то базового класса вот именно этого класса Data то есть подобно тому как мы вот 10 его прописывали далее мы видим вот такой автоматический метод для сравнения объектов этого класса Мы об этом с Вами еще

мы видим вот такой автоматический метод для сравнения объектов этого класса Мы об этом с Вами еще поговорим Ну и некоторые другие вещи то есть вот этот декоратор он модифицировал вот это наше описание которому вот здесь вот представили и создал класс подобной вот это вот классу сын значит я верну панель так как она у нас была Значит вот сделаем Бат там левт и еще раз посмотрим вот на это объявление класса который у нас с вами получилось значит смотрите здесь есть вот такой важный нюанс когда

класса который у нас с вами получилось значит смотрите здесь есть вот такой важный нюанс когда вот этот декоратор создает инициализатор внутри класса Data то набор параметров в этом инициализаторе идет в том же самом порядке в котором мы описали вот эти вот атрибуты то есть Первый параметр на м Второй вейд и последний прайс хотя на самом деле порядок этих параметров можно менять но это достаточно редкая ситуация обычно мы оставляем все так как вот здесь вот прописываем то есть Первый параметр

редкая ситуация обычно мы оставляем все так как вот здесь вот прописываем то есть Первый параметр второй параметр и третий параметр Вот на это следует обращать внимание и это бывает важно и почему мы с вами об этом тоже поговорим Итак в самом простом варианте мы с вами поняли как Объявлять вот эти классов то есть с помощью этого декоратор Data Class Давайте попробуем протестировать его метод YouTube который сравнивать на равенство разные объекты вот это вот класса Data Class для этого я создам

который сравнивать на равенство разные объекты вот это вот класса Data Class для этого я создам еще один объект этого класса Давайте лишнее все уберу вот это вот значит вот у нас первый объект этого класса т.д td2 это второй объект этого же класса и Давайте сравним их на равенство значит я пропишу вот так вот Print td2 равно TD подчеркивание 2 запускаем программу и видим ожидаемый false но если мы создадим еще один объект вот это вот класса точно такими же значениями То есть все локальные

мы создадим еще один объект вот это вот класса точно такими же значениями То есть все локальные атрибуты вот этот объект td3 будут точно такие же как локальный атрибуты объекта D2 то смотрите что мы получим мы получим значение True то есть объекты равны это получилось благодаря тому что вот в этом классе sundaita декоратор Да это класс переопределил магический метод который выполняет вот такую сравнение на равенство разных объектов и он считает что объекта равны если равны соответствующие вот

на равенство разных объектов и он считает что объекта равны если равны соответствующие вот эти вот атрибуты в этих классах То есть если все вот эти вот данные у нас совпадают попарно Значит у нас соответствующие объекты равны по умолчанию я напомню вот этот сравнение работает иначе впадин для объектов класса сравнивается именно их айдишник а здесь когда мы используем декоратор Data Class то он автоматически добавляет магический метод eq который сравнивает эти объекты уже вот по этим данным то

добавляет магический метод eq который сравнивает эти объекты уже вот по этим данным то есть по тем данным которые мы сохраняем непосредственно вот в этом классе сендейта Ну или каком-то другом подобном классе фактически он делает следующее когда мы объявили вот этот класс и создали два объекта то вот такая операция сравнения сравнивает между собой по сути дела два Вот таких Вот кортежа первый кортеж допустим для объекта td2 а второй кортеж для объекта тд-3 здесь у нас конкретные данные если эти

допустим для объекта td2 а второй кортеж для объекта тд-3 здесь у нас конкретные данные если эти данные равны то операция сравнения возвращает True то есть вот так определяется операция сравнения на равенство для классов данных и мы с вами видели как это работает Кстати если даст это поведение не устраивает И нужно сравнивать например объекты Ну только вот по весу Вот по этому полю вейд то мы вполне можем переопределить этот метод магический метод IQ здесь вот непосредственно в классе и

мы вполне можем переопределить этот метод магический метод IQ здесь вот непосредственно в классе и прописать что вот этот отметки YouTube будет вести себя по-другому а именно брать вот это вот атрибут Wait локальный атрибут и сравнивать соответствующим локальным атрибутом другого объекта значит здесь тоже будет вейд все теперь у нас сравнение вот здесь вот происходит только вот поэтому атрибуты атрибуты name и Price уже здесь не учитывается значит опять же запустим программа здесь видим тру и

атрибуты name и Price уже здесь не учитывается значит опять же запустим программа здесь видим тру и смотрите если здесь например написать поэтому P2 здесь у нас вместо 512 пусть идет тысячи Просто я опять же запустим программ то тоже увидим True даже сравнивается сейчас только вот эти вот веса они равные если сейчас поменять Да пусть здесь 85 то уже увидим false потому что начинает работать вот именно тот метод который мы прописали непосредственно в классе Data То есть если декоратор видит вот

тот метод который мы прописали непосредственно в классе Data То есть если декоратор видит вот этот метод YouTube который уже Мы сами объявили в этом классе то он его оставляет он его не меняет Но если этого метода нету магического то он автоматически добавляет свой метод который сравнивает объекты по всем вот этим вот атрибутам по всем этим полям которые мы здесь указали то есть вот так это работает кстати подобным образом происходит работа и с другими магическими методами в частности и нет

кстати подобным образом происходит работа и с другими магическими методами в частности и нет если мы свой нет пропишем то он останется с методом реппор Мы тоже свой метод можем прописать Ну и YouTube как я только что вам показывал с другими методами это не всегда так поэтому здесь следует иметь это ввиду А вот эти вот три мы можем совершенно спокойно прописывать свои собственные и тогда они остаются вот в этом классе начинает работать следующий базовый момент при определении для этой класса

вот в этом классе начинает работать следующий базовый момент при определении для этой класса стоит в порядке объя и атрибутов с начальными значениями Давайте предположим что вот эта вот цена будет иметь некое начальное значение 0 это можно прописать вот так вот в этом случае мы можем создавать объект этого класса следующим образом я уберу все лишнее вот здесь вот и пропишу вот эту цену уберу То есть у нас будет только учебник по Python и 100 и давайте выйдем на экран вот этот объект т.д

То есть у нас будет только учебник по Python и 100 и давайте выйдем на экран вот этот объект т.д убедимся что цена У нас сейчас является нулевой Да вот этого значения по умолчанию что мы здесь с вами присвоили оно как раз здесь используется То есть как только мы с вами прописали вот эти вот строчки то это эквивалентно тому что вот здесь вот вы инициализаторе появляется параметр со значением по умолчанию именно вот таким вот прайс равняется 0 Поэтому если вот этот параметр не указан то принимает

именно вот таким вот прайс равняется 0 Поэтому если вот этот параметр не указан то принимает нулевое значение Если же мы здесь укажем что-то другое например 512 то соответственно прайс принимает это новые значения то есть вот так вот работает аргумент по умолчанию я просто напоминаю в принципе это все знаете уже Но вот здесь вот есть один маленький нюанс смотрите если мы поменяем вот эти два параметра и я прайса напишу вот эти вот вторым А вейд третьим то интегрирована среда нам даже сразу

параметра и я прайса напишу вот эти вот вторым А вейд третьим то интегрирована среда нам даже сразу подчеркивают это вот атрибут прайс и при попытке выполнить программу естественно появится ошибка почему так произошло и чем вообще связано Это ошибка Ну я думаю в принципе догадались почему то есть смотрите когда мы вот так вот прописываем атрибут внутри класса то это означает что инициализатор должен быть вот таким вот здесь параметр прайс со значением 0 идет вторым а Wait без значения по

должен быть вот таким вот здесь параметр прайс со значением 0 идет вторым а Wait без значения по умолчанию последним А мы знаем что все вот эти вот параметры со значением по умолчанию должны идти последними Не может быть такого что здесь вот параметры со значением по умолчанию а потом обычная позиционный параметр так делать нельзя И вот именно поэтому возникает ошибка Если мы значения по умолчанию здесь пропишем вторым А третьим ничего не будет поэтому когда мы объявляем какие-либо вот здесь

здесь пропишем вторым А третьим ничего не будет поэтому когда мы объявляем какие-либо вот здесь вот параметры то все значения по умолчанию должны быть прописана последними но если мы вейд присвоим тоже какое-то значение допустим 0 то ошибка сразу исчезнет и все будет работать так же как это работало прежде то есть вот на этот момент следует обращать внимание второй тонкий момент связался с тем что вы здесь значение по умолчанию может представлять собой изменяемый объект но например список

что вы здесь значение по умолчанию может представлять собой изменяемый объект но например список давайте я напомню в чем может быть проблема если вот здесь вот мы с вами добавим еще один параметр допустим он будет называться dims то есть размерность это будет список и мы предполагаем что каждый объект изначально содержит пустой Вот такой список а затем Создайте объект этого класса Ну давайте сделаем это следующим образом я считаю здесь вот я закомментирует все и создам объект вот эти вот

сделаем это следующим образом я считаю здесь вот я закомментирует все и создам объект вот эти вот образом то есть у нас объект класса сцен то есть вот это вот первого класса который мы здесь с вами прописали и дипс у него это вот это значит список по умолчанию вот здесь у моего тоже сразу пропишем чтобы в каждом объекте создавался соответствующая локальные свойства именно вот такое и далее вот здесь вот мы сделаем следующее мы обратимся вот к этому свойству dims и добавим значение Ну например

вот мы сделаем следующее мы обратимся вот к этому свойству dims и добавим значение Ну например 10 вот так вот выведем на экран то что у нас получится т.1 ну и ожидаем увидим Вот такой список содержащий один элемент но если мы далее создадим еще один объект этого класса допустим так вот два и выведем у него вот этот вот свойство dams то оно тоже будет содержать вот это вот элемент 10 то есть видите Возможно мы вот когда прописывали вот так вот ожидали что у нас для каждого объекта класса сын

Возможно мы вот когда прописывали вот так вот ожидали что у нас для каждого объекта класса сын будет создаваться Вот поле с пустым списком но это не так дело в том что когда вот это вот инициализатор у нас формирует в классе то она единый для всех вот этих вот объектов и вот этот список У нас тоже получается единым и вот этот Джинс он лишь ссылается на этот список поэтому вот это вот локальный атрибут teams будет ссылаться на один и тот же список отсюда мы видим атакуют поведение что здесь вот

teams будет ссылаться на один и тот же список отсюда мы видим атакуют поведение что здесь вот мы ничего не добавляли то есть создали объект но ничего в dims не добавляли но из-за того что ранее было добавлено значение 10 мы здесь тоже видим вот этого значения 10 в этом же списке чаще всего вот такой поведение считается ошибочным неправильным и приводит к непредвиденным проблемам в работе программы потому что начальный пустой список подразумевается независимым для каждого объекта класса по этой

потому что начальный пустой список подразумевается независимым для каждого объекта класса по этой причине у Data classes нельзя по умолчанию напрямую присваивать какие-либо изменяемые объекты например вот так если мы пропишем dems это у нас будет список лист и захотим присвоить такой пустой список нам интегрированная среда здесь сразу тоже подчеркивает красным если мы пытаемся выполнить программ то будет ошибка это как раз связано с тем что запрещается напрямую вот так вот присваивать атрибутом

будет ошибка это как раз связано с тем что запрещается напрямую вот так вот присваивать атрибутом какие-либо изменяемые объекты неважно список словарь или еще что-то то есть Любой изменяемый объект вот так присваивать нельзя только неизменяемой то тогда Спрашивается а как нам создать вот объект для которого по умолчанию нужен был бы создавать скажем пустой список как это сделать для этого Используйте специальная функция которая называется Field Давайте импортируем вначале чтобы могли и

Используйте специальная функция которая называется Field Давайте импортируем вначале чтобы могли и воспользоваться Значит мы сделаем импорт диснеем значит из Дельта класса то есть вот мы импортируем здесь и декоратор и вот этот функция Field из одного и того же модуль Data classes и затем внутри этой функции Field есть вот такой параметр он называется дефолт Factory то есть дефолт-факторе позволяет создавать некие объекты при инициализации при создании объектов вот этого класса в частности нам

создавать некие объекты при инициализации при создании объектов вот этого класса в частности нам нужно Здесь создать пустой список поэтому передадим вот такую функцию лист смотрите что здесь будет происходить Ну давайте для начала запустим программу и посмотрим что вообще происходит значит я все вот эти вот строчки и оставлю созданием вот этот объект и класса Data и мы выведем это объект TD на экран значит TD запускаем программу и видим что здесь вот dims представляет собой пустой список То

экран значит TD запускаем программу и видим что здесь вот dims представляет собой пустой список То есть он ссылается на пустой список мало того если мы вот здесь вот сделаем добавление значит dims добавление в этот пустой список какого-либо элемента 10 то он естественно здесь добавится но если мы создадим еще один объект этого класса например вот так вот Т2 и соответственно выведем его на экран то здесь уже будет пустой список Несмотря на то что мы здесь что-то добавляли Как это работает и

то здесь уже будет пустой список Несмотря на то что мы здесь что-то добавляли Как это работает и почему так работает смотрите вот этот список вот это вот вообще функция она отрабатывает следующим образом у нас в этом классе Data создается инициализатор и внутри этого инициализатора Обратите внимание внутри этого инициализатора создается локальные свойства dems и это локальные свойства Дим с присваивается вызову вот функционист Ну а функционист возвращает пустой список Поэтому dims будет

с присваивается вызову вот функционист Ну а функционист возвращает пустой список Поэтому dims будет ссылаться на пустой список и так как это вот функция вызывается внутри инициализатора вот это вот класса сендейта то для каждого объекта создается свой список и он по умолчанию будет естественно пустой именно это мы вот здесь вот с вами видим здесь добавили значение а для тд2 был создан новый список поэтому это добавлено значение вообще к нему не относится и запуская программу мы как раз это и

поэтому это добавлено значение вообще к нему не относится и запуская программу мы как раз это и видим здесь пустой список то есть вот так вот работает функция Field вот эти вот параметры defall Factory вообще с помощью вот этой вот функция может довольно тонко настраивать поведение атрибутов в Data classes Но об этом и других вещах мы продолжим говорить на следующем занятии [музыка]

#38. Введение в Python Data Classes (часть 2)  | Объектно-ориентированное программирование Python

Здравствуйте дорогие друзья я Сергей Балакирев и мы продолжаем тему класса данных то есть для этой класса на предыдущем занятии Мы в целом научились Объявлять такие классы с помощью декоратора Data Class я определяет набор необходимых атрибутов но Давайте представим что нам нужно в некотором классе например вот такого Вектор 3D при инициализации формировать вычисляемые свойства вот здесь вот есть локальные свойства Альянс который вычисляется в составе переданных данных X Y и Z как это можно

локальные свойства Альянс который вычисляется в составе переданных данных X Y и Z как это можно сделать непосредственно при объявлении класса вот таким вот образом через декоратор Data Class Давайте посмотрим значит в начале мы с вами воспользуемся этим декоратором Дельта класс и далее мы объявим класс Ну пусть он называется у нас в 3D вот так вот кратко мы его назовем соответственно в нем должно быть три свойства три атрибута x y z поэтому я вначале их так и объявлю значит X пусть будет это

быть три свойства три атрибута x y z поэтому я вначале их так и объявлю значит X пусть будет это будет типа и y z то же самое здесь у нас y z все отлично это мы с вами сделали то есть минимальное описание вот этот классовая 3D У нас есть что делать дальше как определить вот это вот 4 вычисляемый атрибут Ленс внутри вот это вот класса v3d для этого существует следующая хитрость инициализаторы классов Вот таких вот классов которые создаются с помощью декоратор для этой класса в конце своей работы

Вот таких вот классов которые создаются с помощью декоратор для этой класса в конце своей работы вызывают специальный метод который называется посты нет вот он и как раз в этом методе мы можем воспользоваться всеми вот эти вот локальными атрибутами чтобы сформировать например вот этот четвертый атрибут со значением я скопирую отсюда вот строчку вставлю ее сюда и соответственно здесь это место X я напишу так Вот self.x потому что вот этот метод он вызывается самым последним поэтому все эти

X я напишу так Вот self.x потому что вот этот метод он вызывается самым последним поэтому все эти атрибуты локально уже у нас будут сформированы и на основе этих сформированных атрибутов Мы совершенно спокойно можем вычислить вот эту вот четвертый атрибут который развивается лес то есть длина вектора Давайте проверим как это все работает значит вы здесь от ниже мы создадим объект этого класса v3d и пусть будет какие-нибудь значения допустим 123 и выведем этот объектный экран Принт в запускаем

и пусть будет какие-нибудь значения допустим 123 и выведем этот объектный экран Принт в запускаем программу никаких ошибок нет X Y из этого у нас присутствует но мы не видим вот это вот вычисляемого свойства лент с которым мы сформировали на самом деле оно там есть И если мы выведем здесь вот коллекцию дикта то есть локальный атрибуты вот этот объект ТВ то вот она четвертое свойство вычислено все как положено как надо но почему мы тогда его не видим когда просто выводим объект в на экран вот

как положено как надо но почему мы тогда его не видим когда просто выводим объект в на экран вот так вот Я думаю вы догадались Потому что когда вот эту декоратор Да это класс формирует метод рэпа магический метод repor то она добавляет туда только театре будет который мы здесь явно прописали а четвертый атрибут лес мы его Вот именно формируем на лету Что называется внутри уже инициализатора Поэтому вот в этом магический метод repor Вот это атрибут линз не попадает Как можно выйти из этой

Поэтому вот в этом магический метод repor Вот это атрибут линз не попадает Как можно выйти из этой ситуации Ну очевидно можно сделать так прописать этот атрибут здесь Но нам нужно сделать так чтобы он не был параметром инициализатора потому что мы его вычисляем нам не нужно его передавать как это сделать для этого мы опять же воспользуемся знакомой нам уже функция feels и в этой функции пропишем вот такой параметр и нет равняется false вот этот параметр и нет у функции Field он как раз говорит

вот такой параметр и нет равняется false вот этот параметр и нет у функции Field он как раз говорит что вот это вот атрибут не следует добавлять как параметр вот сюда вот вы инициализатор то есть вот когда будете отрабатывать от этого декоратор Дайте класс он смотрит Аха вот у этого атрибут ленц через функцию Field указан этот параметр и нет как false значит это атрибут ленц не будет добавлен Вот сюда вот в инициализатор который он сформирует и Давайте в этом убедимся значит опять же за

Вот сюда вот в инициализатор который он сформирует и Давайте в этом убедимся значит опять же за программу и видим что теперь у нас отображаются все атрибуты и лент с вычисляется так как это положено при этом он не является вот здесь вот параметром в инициализатор то есть мы Передаем по-прежнему всего три значения X Y и Z видите как мы изящно решили эту проблему Вообще вот эта вот функция Field имеет множество разных параметров мы с вами познакомились двумя вот с инитом и дефолт Factory о

имеет множество разных параметров мы с вами познакомились двумя вот с инитом и дефолт Factory о котором говорили на предыдущем занятии но есть и другие параметры например такие довольно часто используются параметры он говорит что текущий атрибут не следует использовать в магическом методе то есть его не надо отображать вот такой параметр compare он тоже принимает более значение указывает использовать ли это атрибут при сравнении объектов Ну и последний дефолт из важных таких это устанавливает

ли это атрибут при сравнении объектов Ну и последний дефолт из важных таких это устанавливает некое значение по умолчанию то есть значение которое относится как правило к неизменяемым типам данных Используйте Мы это можем следующим образом вот этот атрибут Field мы с вами мы с ключем из вот этого магического метода репро опишем репорт равняется false А вот это вот атрибут Z Мы исключим из сравнения значит здесь пропишем Camper и тоже значение fals вот так вот и Давайте вот этот атрибут линз

значит здесь пропишем Camper и тоже значение fals вот так вот и Давайте вот этот атрибут линз тоже исключим и сравнение потому что то вещественное число и сравнивать вот эти вот вещественные числа на равенство не очень хорошо поэтому я здесь пропишу вот такой параметр тоже у функции Field В итоге у нас с вами получилось Давайте запустим программу и убедимся смотрите здесь X уже не отображается потому что мы прописали вот здесь вот репор Фолз и X исключаете за магического метода repor Кроме того

что мы прописали вот здесь вот репор Фолз и X исключаете за магического метода repor Кроме того если мы вот здесь создадим еще один объект этого же класса v3d давайте сделаем его таким 125 и затем сравним эти два объекта между собой в и В2 то увидим значение True Почему True потому что мы исключили из сравнения значит этот параметр Z то есть вот это вот атрибут Z и атрибут Ленс мы сравниваем только первые два значения 1 2 здесь и один два здесь они равны поэтому естественно у нас вот при

только первые два значения 1 2 здесь и один два здесь они равны поэтому естественно у нас вот при сравнении этих двух объектов получается значение True то есть вот так вот с помощью функции Field мы можем тонко настраивать поведение вот этих вот атрибутов при объявлении вот такого класса в 3D то есть класса через декоратор Data Class конечно этих параметров у функции Field гораздо больше вот если мы отобразим её то здесь вот они в принципе приведены Ну а Подробное описание как всегда можно

если мы отобразим её то здесь вот они в принципе приведены Ну а Подробное описание как всегда можно посмотреть на странице официальной документации ссылка будет под этим видео Ну и вот здесь вот подробно описано и расписано все вот эти вот параметры которые может принимать функции Field ну а мы пойдем дальше и Давайте теперь предположим что хотели бы вычислять длину вот этого Вектора в зависимости от значения некоторого параметра я поясню о чем здесь идёт речь Давайте предположим что вот мы

от значения некоторого параметра я поясню о чем здесь идёт речь Давайте предположим что вот мы создаём Класс объявляем Класс обычно способом здесь прописываем еще один диаметр Пусть он называется так вот Коль колен это булевые значения и принимает соответственно значение True так вот если у нас вот это вот калька Лена определенной значение True то мы соответственно вычисляем как положено вот эту длину а иначе длина будет равна нулю то есть вот мы хотим чтобы вот это свойство ленц формировалась

длину а иначе длина будет равна нулю то есть вот мы хотим чтобы вот это свойство ленц формировалась вот по такому правилу как это можно сделать вы здесь вот при объявлении класса через декоратор Data Class для этого очевидно нам нужно прописать еще один параметр который так и будет называться Сколько лет значит и он по идее принимает булевые значения но мы сделали немножко по-другому мы его адаптируем специальным классом который называется инит War и этот класс и не твар мы импортируем вот из

специальным классом который называется инит War и этот класс и не твар мы импортируем вот из этого модуля Да это классов то есть пософилд мы пропишем еще и не товар что это за класс такой нетва смотрите вот как только какой-либо атрибут анонсируется вот эти вот классы монитор и в квадратных скобках мы указываем что вот этого за чей будет принимать булевые значения то вот этот вот параметр Давайте по умолчанию значит трон будет принимать передается автоматически вот сюда вот в метод посты нет то

по умолчанию значит трон будет принимать передается автоматически вот сюда вот в метод посты нет то есть вот здесь вот мы тоже даже приписать с вами Вот этот параметр калька Лен ну и анонсируем его булевым значением То есть все атрибуты которые анонсированы вот эти вот классом и нет Вар автоматически попадает сюда в список параметров метода пустой нет и это очень удобно мы теперь можем здесь воспользоваться этим параметром как колен и соответственно вычислить длину если этот параметр принимает

этим параметром как колен и соответственно вычислить длину если этот параметр принимает значение True Ну а иначе свойство должно принимать значения 0 Поэтому я здесь Через запятую еще пропишу вот такой вот параметр дефолт со значением 0 то есть по умолчанию свойств валенса будет принимать значения 0 но если клиент принимает значение True то соответственно вычисляется вот по такой формуле То есть это эквивалентно вот такой вот записи опять убедимся что все это работает значит вы здесь что мы

это эквивалентно вот такой вот записи опять убедимся что все это работает значит вы здесь что мы вывезем объекта вы запускаем программу видим что Lens у нас вычислилось потому что вот это вот Коль колена у нас по умолчанию принимает значение True Давайте здесь укажем false вот так вот опять же запустим программу видим уже значение 0 То есть у нас по умолчанию вот это вот атрибут принимает значение 0 и здесь калькуля стал Поэтому вот это условие не сработало и соответственно не вычислялся вот по

0 и здесь калькуля стал Поэтому вот это условие не сработало и соответственно не вычислялся вот по этой формуле то есть вот так вот более тонко можно настраивать работы вот это вот метода после нет для того чтобы правильно формировать вычисляемые свойства Отлично я думаю что в целом мы с вами разобрались как формируется вот такие вот классы с помощью декоратора Data Class но мы этот декоратор до сих пор с вами использовали без параметров на самом деле с параметрами по умолчанию если мы опять же

пор с вами использовали без параметров на самом деле с параметрами по умолчанию если мы опять же перейдем сюда у него множество параметров и у них некоторые значения Давайте разберемся с некоторыми из них Которые наиболее часто используются на практике я свел их вот небольшой табличку Значит мы можем определять вот такой параметр и нет в этом декораторе если вам будет принимать True значит в этом классе будет формироваться инициализатор А если Фолз то инициализатор формироваться не будет далее

классе будет формироваться инициализатор А если Фолз то инициализатор формироваться не будет далее репорт это по аналогии с магическим методом репро он ест отруто будет формироваться и сафоста не будет И автоматический метод YouTube соответствовали бы формируем либо нет ордер Это для того чтобы добавлять сравнение объектов класса на меньше больше меньше либо равно больше либо равно дали Вот такой параметр ранца и Хеш который влияет на формирование вот автоматического метода Хеш для вычисления

параметр ранца и Хеш который влияет на формирование вот автоматического метода Хеш для вычисления хеша объекта параметров фрозена как бы замораживает значение атрибутов объекта и делает их неизменяемым то есть изменить их нельзя может только один раз при инициализации Ну Иисус позволяет задавать атрибуты в коллекции слоц что это за коллекция Мы с вами уже говорили на самом деле существует и другие параметры вот этого декоратор Да это класс обо всех о них можно почитать вот здесь на странице

параметры вот этого декоратор Да это класс обо всех о них можно почитать вот здесь на странице официальной документации ссылка будет под этим видео Итак давайте последовательно рассмотрим основные из них Значит Первый параметр который Я приведу это и нет значит если мы вот здесь вот пропишем вот такой параметры и нет И укажем false то вот в этом классе v3d не будет формироваться инициализатор и смотрите как только мы это прописали интегрированная среда вот здесь то уже подчеркивает что мы сюда

как только мы это прописали интегрированная среда вот здесь то уже подчеркивает что мы сюда что-то Передаем а на самом деле инициализатор такого нет который принимал сразу несколько параметров соответственно если мы попробуем выполнить эту программу то у нас будет ошибка такое поведение бывает иногда полезно если мы хотим сформировать класс который будет использоваться в качестве базового для каких-то дочерних у этого базового класса Не предполагается создавать какое-либо инициализатор тогда в

дочерних у этого базового класса Не предполагается создавать какое-либо инициализатор тогда в этом случае можем прописать вот такой параметр я его уберу далее другой параметр репара который формирует вот такой магический метод репорт для описания класс который будем то есть смотрите мы вывели объект в консоль и видим здесь такой невразумительную строчку именно потому что у нас теперь нету магического метода репорт вот в этом классе А если мы пропишем здесь тру то все будет так как у нас было

метода репорт вот в этом классе А если мы пропишем здесь тру то все будет так как у нас было ранее то есть мы видим уже все эти параметры по аналогии работает этот параметр YouTube из моего пропишем то магический метод YouTube не будет создаваться внутри этого класса и при сравнении на равенство двух вот этих вот объектов мы уже получим false Хотя если он у нас будет присутствовать Давайте его вернем напишем тару то соответственно получим уже здесь тоже тару Потому что ты тут встроенный метод в

напишем тару то соответственно получим уже здесь тоже тару Потому что ты тут встроенный метод в данном случае сравнивают объекты вот по этим двузначением только потому что вот здесь вот мы атрибут Z явно указали что его не надо использовать при сравнении а требует Lens тоже явно указали А вот это вот колено которая анонсирован таким классы не товар он автоматически исключается из сравнений следующий параметр который мы рассмотрим это Он позволяет сравнивать с объекты на больше меньше равно

параметр который мы рассмотрим это Он позволяет сравнивать с объекты на больше меньше равно меньше либо равно значит как только мы это прописываем сюда в этот класс в 3D автоматически добавляется магические методы которые позволяют делать Вот такие сравнения которые я перечислил Ну и давайте сделаем так в меньше чем V2 вот так пропишем запустим программу никаких ошибок нет все нормально В данном случае мы видим false потому что в сравнении участвовать только два вот этих вот значения и понятно

случае мы видим false потому что в сравнении участвовать только два вот этих вот значения и понятно что вы не может быть меньше чем В2 но если мы напишем меньше либо равно то получим уже значение True А вот если мы сейчас ордер сделаем false вот так вот то вот этот операция она не будет работать видите интегрированная среда даже подчеркивает красным если мы запустим то увидим ошибку потому что у нас нету магических методов сейчас вот если сделаем магических методов которые бы сравнивали объекты

нету магических методов сейчас вот если сделаем магических методов которые бы сравнивали объекты на меньше больше меньше либо равно и больше либо равно Поэтому если нам нужны вот эти операции то соответственно обязательно прописать вот так вот ордер тру причем вот этот руль Обязательно должно совместно быть записано стро у параметра YouTube если вот здесь вот параметры YouTube поставить false то будет ошибка даже когда делается вот эти вот сравнение то используется магический метод YouTube если

ошибка даже когда делается вот эти вот сравнение то используется магический метод YouTube если мы этот магический метод явно вот отсюда вот выбираем с помощью этого параметра то у нас возникает ошибка То есть если мы хотим использовать параметры ордер со значением тру то YouTube тоже должен принимать значения True то есть мы можем его либо явно вот так вот прописать либо не писать совсем даже по умолчанию он принимает значение True Вот это следует обращать внимание и еще один маленький момент

умолчанию он принимает значение True Вот это следует обращать внимание и еще один маленький момент который связался с этим параметром если мы в этом классе захотим прописать какой-либо свой метод для сравнения на меньше или больше в данном случае вот на меньше то при компиляция у нас во всех Нет ошибка Потому что при включена вот это вот параметре нельзя прописывать свои собственные магические методы на следующей операции сравнения То есть если мы сейчас уберем это магический метод тогда

методы на следующей операции сравнения То есть если мы сейчас уберем это магический метод тогда никаких ошибок нет запускаем все работает Ну и последний параметр который мы рассмотрим эту Frozen он как бы замораживает значение соответствующих атрибутов внутри объектов вот этого класса то есть вот если мы пропишем Frozen True по умолчанию false принимает значение но если мы пропишем Frozen True то мы потом в объектах класса не можем менять вот эти вот атрибуты что у нас здесь прописано и

True то мы потом в объектах класса не можем менять вот эти вот атрибуты что у нас здесь прописано и смотреть кстати интегрированная среда Вы здесь красный сразу подчеркивает вот это вот вычисляемые свойства потому что как только мой вот этого свойства атрибуту ленц присволе значение 0 по умолчанию то при включенном параметрах Розен мы уже затем не можем менять этот атрибут Поэтому если вы здесь нам указать True или совсем ничего не указывать то при выполнении этой программы как раз будет ошибка

указать True или совсем ничего не указывать то при выполнении этой программы как раз будет ошибка ошибка что мы пытаемся изменить вот это вот свойство ленц которые подразумевается неизменным Поэтому вот эти строчки я пусть у нас все будет Вот в таком-то виде ну и соответственно опять же запустим эту программу Теперь никаких ошибок не будет мало того если после создания этого объекта мы захотим изменить какой-либо свойство например вот это вот X то тоже получим ошибку так делать нельзя то есть

какой-либо свойство например вот это вот X то тоже получим ошибку так делать нельзя то есть вот этот параметр Frozen со значением True он как бы замораживает все атрибуты локальные атрибуты объектов классовый 3D А если прописать false то никаких ошибок уже не будет менять все можно то есть по умолчанию Frozen конечно же принимает значение Falls на этом и завершим текущие занятия А на следующем продолжим эту тему в частности Увидим как объявление до этой класса работает при наследовании [музыка]

#39. Python Data Classes при наследовании  | Объектно-ориентированное программирование Python

Здравствуйте дорогие друзья я Сергей Балакирев и мы продолжаем тему Data класса на этом занятии затронем тему наследования классов объявленных с помощью декоратора Data class в качестве примера мы сформируем базовый класс с именем goods для представления различных товаров и в частности в нём объявлен три Вот таких вот атрибута уит который анонсирован типом Эни То есть он будет принимать любой тип данных прайс цена тоже типа Эни и начальное значение NAN и вейд вес тоже тип Эни и начальное

тип данных прайс цена тоже типа Эни и начальное значение NAN и вейд вес тоже тип Эни и начальное значение NAN на основе вот это вот класса гусени сформируем еще один класс дочерней через декоратор Data Class и он у нас будет называться Бог соответственно здесь мы указано что он наследуется от класса goods и внутри этого класса букв добавим еще несколько атрибутов в частности атрибут title анонсируем строку STR и начали значение пустая строка далее У нас будет автор он будет анонсироваться тоже

строку STR и начали значение пустая строка далее У нас будет автор он будет анонсироваться тоже как строка и начальное значение пустая строка и Кроме того мы продублируем два вот этих вот атрибута Price и Wait но у Price мы сделаем вместо тип Wait Тип float и начальное значение 0 А уэйд у нас будет тип или int или float и начальное значение тоже 0 то есть вот эти вот образом и глядя вот на эти два класса вот это вот дочерей А этот базовый Спрашивается Какие у них будут формироваться

на эти два класса вот это вот дочерей А этот базовый Спрашивается Какие у них будут формироваться инициализаторы на самом деле все достаточно Просто когда мы вот так-то объявляем класс goods то у него формируется очевидная инициализатор значит Первый параметр уит потому что здесь Первым идет атрибут дует далее прайс и вейд соответствующими начальными значениями А вот у класса букв несколько иначе значит первые три параметра абсолютно такие же как и у базового класса уит прайс И вейд причем

значит первые три параметра абсолютно такие же как и у базового класса уит прайс И вейд причем прайс будет анонсирован уже типа поменяли и начальное значение 0 вейд будет анонсирован как или float и начальное значение этого жу и Кроме того к этим параметрам трем добавлена еще два параметра вот эти вот то есть вот они атрибуты здесь записаны они будут идти после вот этих вот трех атрибутов то есть 4 и 5 это автор и по умолчанию принимать пустую строку то есть вот так это работает Несмотря на то

4 и 5 это автор и по умолчанию принимать пустую строку то есть вот так это работает Несмотря на то что могут стать вот атрибуты здесь прописали третьим и четвертым но так как они переопределяют соответствующий атрибуты базового класса то они будут идти вот здесь в инициализаторе вторым и третьим А уже все остальные новые уникальные атрибуты идти следом то есть четвертом и пятом то есть вот так вот формируется инициализатор для базового класса и дочернего ну и Давайте в этом убедимся для начала

формируется инициализатор для базового класса и дочернего ну и Давайте в этом убедимся для начала мы создадим вот такой простой объект Book соответственно вывезем его на экран и убедимся что все у нас вот эти вот локальные атрибуты формируются действительно здесь есть уит прайс вейд тайтл и outer то есть автор Давайте теперь создадим объект класса Book со всеми элементами то есть передадим сюда иуит и цену прайс и вес вейд ну и соответственно title и After outer Давайте посмотрим сработает ли

иуит и цену прайс и вес вейд ну и соответственно title и After outer Давайте посмотрим сработает ли это значит запустим программу и видим что все действительно корректно работает Здесь вся нужная информация которую мы здесь передали в качестве аргументов то есть вот так вот при наследовании у нас формируются инициализаторы вот этих вот классов Давайте Теперь несколько усложним нашу программу и будем формировать вот эти значения уит автоматически при создании каждого Нового объекта Я сделаю это

формировать вот эти значения уит автоматически при создании каждого Нового объекта Я сделаю это следующим образом вот здесь в классе goods объявлю вот такой вот атрибут который будет называться Карен уит причем этот атрибут не будет анонсирован Никаким типом и это означает что вот этот декоратор его просто пропустит он его не заметит и в результате не добавит ни в параметры инициализаторы никуда либо еще то есть он будет существовать в классе goods но пропускаться вот эти вот декораторов да это

еще то есть он будет существовать в классе goods но пропускаться вот эти вот декораторов да это класс И это то что нам сейчас нужно далее вот это вот атрибут выйдет мы анонсируем как целочисленный и исключим из параметра инициализатора то есть мы воспользуемся такой функцией Field далее здесь у нас будет параметр и нет идти и у него значение false Все мы исключили вот этот параметр уит сейчас из инициализатора мы об этом с вами говорили на предыдущем занятии и затем в этом же классе объявим

из инициализатора мы об этом с вами говорили на предыдущем занятии и затем в этом же классе объявим метод посты нет который вызывается в самом конце инициализатора вот это вот базового класса он вызывает вот этот метод постенит автоматически об этом мы также говорили с Вами на предыдущем занятии Далее в этом методе мы с вами скотч функции Принт вы Взял такую строчку здесь будет goods и здесь соответственно просто и нет то есть чтобы мы знали что действительно этот пустой нет был вызван и Кроме

просто и нет то есть чтобы мы знали что действительно этот пустой нет был вызван и Кроме того у него должен быть функционал Значит мы обратимся вот к этому атрибуту увеличим его на единицу Ну и присвоим соответственно вот это вот параметры Уют то есть вот это вот локального атрибут вот таким вот образом все теперь у нас с вами Вот этот атрибут формируется автоматически для каждого Нового объекта Давайте в этом убедимся значит один аргумент здесь уже лишний я его убрал запускаем программу и все

Давайте в этом убедимся значит один аргумент здесь уже лишний я его убрал запускаем программу и все действительно работает видим что постенит был вызван уит сформирован ну и соответственно все остальные атрибуты также Ну а давайте теперь добавим такой же метод посты нет вот в этот дочерний класс Я его пропишу вот так вот то есть просто нет и он просто будет выводить на экран вот такую строчку бук по стенит опять же запускаем программу и видим ошибку почему это ошибка возникла потому что у нас

по стенит опять же запускаем программу и видим ошибку почему это ошибка возникла потому что у нас здесь вот вызван вот этот метод посты нет дочернего класса но нигде не вызывался метод просто нет базового класса и в результате вот этого свойства не было сформировано отсюда возникает та ошибка но Спрашивается почему вот этот метод после нет базового класса не было вызван после того как мы с вами определили метод в дочернем классе Ну я думаю что вы догадались смотрите когда мы с вами формируем

определили метод в дочернем классе Ну я думаю что вы догадались смотрите когда мы с вами формируем два Вот таких вот класса Первый это вот базовый класс это дочерний класс Соответственно в этом дочернем классе У нас есть метод init и этот метод init вызывает в конце метод посты нет то если вот это вот метода посты нет в дочернем классе то он ищется в базовом классе и так как он у нас там был прописан то соответственно вызывался после того как мы добавили этот метод после нет вот сюда в дочерний

то соответственно вызывался после того как мы добавили этот метод после нет вот сюда в дочерний класс то именно этот метод пустой нет вот здесь вот и было вызван соответственно этот метод пустыни не вызывался и локальные свойства уит у нас тоже не формировалось Ну и отсюда Возникала ошибка То есть это все вот из-за этого опять же спрашивать как можно исправить эту ситуацию самый простом варианте делаете следующим образом мы можем воспользоваться вот таким вот объектом супер для обращения к

делаете следующим образом мы можем воспользоваться вот таким вот объектом супер для обращения к классу и явно вызвать вот здесь вот метод посты нет этого базового класса если мы теперь запустим программу Посмотрите у нас был вызван метод посты нет для базового класса для дочернего класса и все локальные атрибуты сформированы корректно и Обратите внимание что вот такой Явный вызов метода пустынит из базового класса нужно делать Вот именно для этих методов посты нет для инициализаторов для

из базового класса нужно делать Вот именно для этих методов посты нет для инициализаторов для обычных инициализаторов и нет этого делать не нужно инициализаторы пазов классов здесь автоматически вызывается это закладывается при наследовании когда классы формируются через декоратор Data Class если бы мы формировали цепочку наследования без использования этого декоратора то есть классическим способом то вызов инициализаторов базовых классов из дочерних тоже было бы явно указывать уже самим то

то вызов инициализаторов базовых классов из дочерних тоже было бы явно указывать уже самим то есть вот эти вот нюансы существуют когда мы используем наследования при определении классов через декора куда это класс Давайте еще несколько усложним нашу программу и добавим в дочерний класс пук еще один атрибут который будет называться вот так вот и по смыслу это свойство будет содержать габариты предмета в данном случае книги так как всего габаритов 3 высота длина и ширина то нам бы хотелось сразу

в данном случае книги так как всего габаритов 3 высота длина и ширина то нам бы хотелось сразу сформировать список из трех числовых значений и Пусть эти значения по умолчанию равны нулю для этого мы с вами сформируем специальную функцию которая будет называться вот так вот и ссылку на эту функцию передадим вот этот параметру The Fold Factory чтобы текст программы у нас выглядел красиво то все подобные функции я буду записывать вот в этот класс гурц месяц Factory Ну и объявлю здесь выше значит

функции я буду записывать вот в этот класс гурц месяц Factory Ну и объявлю здесь выше значит это будет обычный Класс Класс вот его название и далее в нем статический метод значит метод будет называться вот прямо отсюда скопирую здесь мы его пропишем у этого метода не будет никаких параметров то есть аргументов мы туда передавать не будем а возвращаясь по смыслу он должен список из трех значений причем все значения нулевые вот такой класс вспомогательный ну и соответственно ссылка Вот на этот

причем все значения нулевые вот такой класс вспомогательный ну и соответственно ссылка Вот на этот метод то есть по сути дела на функцию мы Передаем вот этот параметр defalt Factory в результате вот это вот атрибутами же у нас будет содержать ссылаться на список из трех нулей Ну и давайте убедимся что все действительно работает вы здесь у нас создается объект вот этот класса букв мы его запускаем и видим что действительно вот это вот атрибут ссылается на список из трёх нулей То есть все

и видим что действительно вот это вот атрибут ссылается на список из трёх нулей То есть все работает так как мы с вами это задумывали То есть я вот здесь вот хотел показать пример того как можно использовать вот это вот параметры defold Factory со своей функцией То есть то что вернет вот этот функция в данном случае вот это вот метод внутри этого класса то значение Соответственно по умолчанию и будет принимать вот этот атрибут и грязи сейчас вот этот класс бог вас может возникнуть вопрос А

и будет принимать вот этот атрибут и грязи сейчас вот этот класс бог вас может возникнуть вопрос А почему вот этот метод не объявить сразу вот это вот класса Бока Может быть так было бы удобнее Давайте попробуем это сделать значит я тоже сделаю статический метод А еще лучше прям отсюда его скопирую чтобы не писать второй раз значит переходим сюда в класс Book мы его сюда вставляем и попытаемся соответствовать указать вот этот класс бог но у нас ничего не работает интегрирован среда здесь

соответствовать указать вот этот класс бог но у нас ничего не работает интегрирован среда здесь подчеркивает красным если мы сейчас выполним эту программу то тоже будет ошибка То есть он говорит что namebook не определен Поэтому чтобы все Это выкатило красиво я просто создал вот такой вспомогательный класс густ Мисс Factory и вместо текущего класса букв указываю вот этот вспомогательный ну и соответственно все вот эти вот методы подобные им Мы помещаем в тот внешний класс то есть вот так вот

все вот эти вот методы подобные им Мы помещаем в тот внешний класс то есть вот так вот можно выйти из этой ситуации Ну и в заключение этого занятия кратко отмечу что есть еще один способ объявления Да это класса с помощью такой функции Make Data Class который имеет следующий набор параметров вот здесь они приведены но наиболее часто и наиболее главный из них следующее это название нового класса который мы создаем feels это поля то есть локальный атрибут который будет внутри объектов этого

который мы создаем feels это поля то есть локальный атрибут который будет внутри объектов этого класса звездочка вот это вот от произвольный набор позиционных аргументов и здесь вот bases это список базовых классов если нам нужно сделать классы которые наследуется от каких-то базовых Ну а на им спейс это словарь в котором можно определять разные атрибуты самого класса обычно так объявляет методы внутри класса Ну и Давайте посмотрим как все вот эти вот можно воспользоваться для этого здесь вот

внутри класса Ну и Давайте посмотрим как все вот эти вот можно воспользоваться для этого здесь вот Давайте все это уберу лишнее и предположим что мы бы хотели с помощью функции Make Data Class создать вот класс подобное вот такого карт то есть здесь это у нас есть три вот этих вот локальных атрибута Model Max Speed и Price и Кроме того такой метод спит который возвращает значение вот это вот атрибута как бы можно было бы создать класс подобное вот это вот с помощью функции Make Data Class нас

как бы можно было бы создать класс подобное вот это вот с помощью функции Make Data Class нас будет переменная Ее зовут так вот каждый то далее Она будет ссылаться на тот класс который мы создаем с помощью этой функции Майк Date Class называться класс будет абсолютно также то есть Car Data и далее мы с вами должны передать вот здесь вот список локальных атрибутов которые должны формироваться внутри каждого объекта вот это вот класса значит списком будем описывать следующим образом это можно

каждого объекта вот это вот класса значит списком будем описывать следующим образом это можно сделать вот так здесь будет кортеж название атрибута Model также здесь у нас первый атрибут Model поэтому я тоже его назвал Model далее анонсируем его то есть указываем что это атрибут должен принимать строки далее следующий атрибут моего пропишем вот здесь я просто пропишу так макс спит то есть мы его не будем не анонсировать ничего просто пропишем и все то есть Так тоже можно делать ну и наконец

не будем не анонсировать ничего просто пропишем и все то есть Так тоже можно делать ну и наконец последний атрибут прайс мы его пропишем следующим образом здесь будет прайс дальше аннотация Пусть это будет типа и через запятую мы вот софилд здесь вызовем и сделаем так и дефолт 0 то есть начальное значение убрать будет 0 то есть вот этот пример показывает что вот этот функцию Field здесь можно прописывать как третий элемент вот это вот кортежа ну и еще мы с вами пропишем Вот этот параметр на

прописывать как третий элемент вот это вот кортежа ну и еще мы с вами пропишем Вот этот параметр на Space для того чтобы объявить вот этот метод getmax Speed значит он у нас должен ссылаться на словарь ключом будет название метода Ну а зачем это сама функция значит я воспользуюсь лямбда функции здесь у нас будет Cell ну и соответственно тоже возвращать Вот эту вот атрибут макспид Все мы с вами объявили то есть создали вот это вот класс каждый это с помощью функции Make Data Class и вот этот

объявили то есть создали вот это вот класс каждый это с помощью функции Make Data Class и вот этот класс каждый это он в принципе подобен вот это вот класс Карр который здесь приведен Давайте создадим объект этого класса следующим образом Значит мы здесь вызываем вот этот класс через вот этот ссылку Передаем сначала модель вот сюда вот BMW потом максимальной скорость 256 цену 496 Ну и затем Давайте выведем на экран то что нас получится принца еще запускаем программу и видим что все в принципе

выведем на экран то что нас получится принца еще запускаем программу и видим что все в принципе сработало так как это нужно и так как мы создали вот этот класс кардейты с помощью функции Make Data Class то в этот же класс каждый это добавляется автоматически и метод repor инициализатор То есть все точно так же как это было через декоратор Data Class Ну и Кроме того можем убедиться что в этом классе есть тот метод getmax Speed который мы с вами Вот здесь прописали Значит мы его вызов лет Мак

есть тот метод getmax Speed который мы с вами Вот здесь прописали Значит мы его вызов лет Мак спит и посмотрим что у нас получится да видим вот этот максимальная скорость 256 То есть все сработало Как нужно Обычно вот эта вот функция мои когда это класс использует если требуется сформировать класс данных в процессе работы программы Если же нам нужно обычное объявление а это наиболее частая ситуация то гораздо нее использовать обычные декоратор для этих класса о котором мы с вами говорили вот

то гораздо нее использовать обычные декоратор для этих класса о котором мы с вами говорили вот основные возможности формирования классов данных на языке пайтона Ну а более подробную информацию как всегда можно посмотреть на странице официальной документации ссылка на нее будет под этим видео [музыка]

здравствуйте дорогие друзья на этом занятии я решила рассмотреть так называемые принципы салют это принципы которых следует придерживаться при разработке программ в парадигме объектно-ориентированного программирования что это за принципы формально они звучат следующим образом 1 буква s это сокращение вообще solid эта аббревиатура по первым буквам соответствующих названий у с от 1 букву от слов сингла при способе лице principal то есть принцип единственной ответственности что стоит за этими

сингла при способе лице principal то есть принцип единственной ответственности что стоит за этими умными словами мы с вами позже разберем следующий буковка а это так называемый open клаус principal то есть принцип открытости закрытости следующий л это принц подстановки барбары лисков далее принцип разделения интерфейса ну и наконец последний это принципа инверсии зависимостей вот такие вот достаточно неочевидные названия и конечно же нам нужно понять что стоит за каждым из этих определений но

неочевидные названия и конечно же нам нужно понять что стоит за каждым из этих определений но прежде чем мы перейдем к непосредственно мы их рассмотрению я скажу пару слов вообще вот об этих принципах solid если сказать в двух словах то это принципы который помогает нам правильно грамотно построить архитектуру программы чтобы в будущем и могли ее легко расширять модифицировать она была бы у нас модульной и легко воспринимаемый то есть читабельной и конечно когда мы используем эти принципы то

модульной и легко воспринимаемый то есть читабельной и конечно когда мы используем эти принципы то предполагается что разрабатываем какой то более менее сложный проект eos у нас программе 2 3 классы каких-нибудь таваник эти принципы сайт вообще говоря не нужны вот то о чем мы с вами сейчас будем говорить это о разработке более менее сложных больших проектов больших программ где у нас может быть 10 классов два десятка классов в будущем эти классы могут дополняться новыми классами существующие

10 классов два десятка классов в будущем эти классы могут дополняться новыми классами существующие как-то взаимодействовать с новыми добавляем и классами их функционал уже существующего проекта тоже может расширяться то есть вот когда мы разрабатываем такие вот более менее сложные проекты то нужно так проектировать программу чтобы ранее созданный проект ранее созданный программный код по возможности практически не модифицировать практически не менять но при этом иметь возможность расширить его

практически не модифицировать практически не менять но при этом иметь возможность расширить его функционал то есть добавлять новые возможности вот чтобы в принципе мы могли это делать как раз и следует правильно продумать архитектуру программы и здесь как раз нам помогает вот эти вот принципы solid причем вот эти вот принципе это не строгие правила это просто рекомендация рекомендаций как следует делать мало того когда разрабатывается тот или иной проект то следовать точно этим принципом вообще

делать мало того когда разрабатывается тот или иной проект то следовать точно этим принципом вообще говоря и не нужно главное нам придерживаться вот этих отправил чтобы получалось у нас желаемой архитектуры программы то есть программа который в будущем практически не модифицировать бы мы бы ее сделали оттестировали вот то что уже есть в будущем и если что-то нужно будет добавить то мы бы это делали через добавление новых классов то есть мы в итоге должны так создать каждый конкретный проект

через добавление новых классов то есть мы в итоге должны так создать каждый конкретный проект чтобы нам самим разработчикам было удобно в будущем его расширять и модифицировать ну и конечно же чтобы он был модульный читабельно и так далее то есть вот принципы сайт сложит именно для этого можно сказать что это своего рода 5 заповедей который следует придерживаться при разработке программ в концепция объектно-ориентированного программирования и еще раз отмечу что это принципы которых следует

объектно-ориентированного программирования и еще раз отмечу что это принципы которых следует придерживаться при создании именно больших проектов то есть если у вас проект небольшой то вообще говоря они вам мало чем помогут конечно отдельные моменты можно использовать но в целом вот так все пять принципов для простых проектов но я думает мало вероятно поэтому то о чем мы сейчас будем говорить это то как проектировать большие программы при использовании концепция объектно-ориентированного

это то как проектировать большие программы при использовании концепция объектно-ориентированного программирования и так я думаю что в целом вы поняли что это такое и давайте перейдем к рассмотрению 1 принципа то есть принципа единственной ответственности все пример я буду показывать с использованием языка java я решил взять от язык потому что он такой строго типизированный и на его примере как раз что показывать вот эти вот принципы салют и так вот этот принципе единой ответственности это о том

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

все то есть вот такого вот в программе быть не должно и вот этот первый принцип вообще говоря именно об этом давайте покажем конкретном примере нарушения этого первого принципа а потом мы посмотрим как его можно исправить значит для этого я в программе создам еще один класс класс который будет называться компьютер значит тот в этом пакете мы создадим еще один java class я его назову компьютер ну и соответственно его и здесь от пропишем это будет очень простой класс наши это все то как пример

и соответственно его и здесь от пропишем это будет очень простой класс наши это все то как пример этот главное понять вот эти вот принципы solid а не какую-то программу поэтому я вот здесь вот пропишу значит атакует атрибут значит просят будет на свой не компьютера и еще один атрибут но пусть будет размер памяти то есть мимо ресайз далее мы создадим конструктор этого класса то есть пропишем компьютер далее в 3d один два параметра значит от будет name и как раз размер памяти тоже завёл мимо

далее в 3d один два параметра значит от будет name и как раз размер памяти тоже завёл мимо ресайз а вот эти вот локальным атрибутом мы как раз присвоим эти значения переданы начинаем и memories avis ну и этого достаточно то есть вот такой простой конструктор класса и затем предположим а вот в этом классе хотим прописать еще два метода 2 публичных методов первые служит для сохранения объекта вот это вот класса ну допустим на диск то есть все вот эти данные которые хранятся в объекте этого класса

вот класса ну допустим на диск то есть все вот эти данные которые хранятся в объекте этого класса мы предположим вот здесь от хотим сохранить в файл то есть на диск ну и соответственно здесь будет methods of пусть он так называется и для простоты мы просто будем выводить на экран то есть в консоль вот такое сообщение то есть сохранение объекты классов файл и второй метод это будет метод лот для загрузки наоборот данных допустим опять же из файла но и для простоты мы просто напишем вот здесь вот

наоборот данных допустим опять же из файла но и для простоты мы просто напишем вот здесь вот загрузка данных объекта из файла вот такой класс компьютеру на своим получился по идее и мы легко пользоваться то есть мы можем вызвать в то в основной программе создать объект этого класса например так значит компьютер потолком ну и мы создаем экземпляр этого класса начни и компьютер и перед этим сюда какие-нибудь аргументы но допустим ай-би-эм xt и размер памяти но пальбы там вот так 80000 все .

какие-нибудь аргументы но допустим ай-би-эм xt и размер памяти но пальбы там вот так 80000 все . запятой и далее для сохранения этого объекта в файл у нас есть вот такой метод сэйв нового здесь от вызываем и никаких проблем у нас в общем как бы и нету то есть мы с вами разработали вот такой вклад компьютер но вот этот вот класс на самом деле вот в таком виде нарушает вот этот первый принцип принцип единственной ответственности в чем здесь нарушение нарушение в том что он не только представляет

единственной ответственности в чем здесь нарушение нарушение в том что он не только представляет сам объект компьютер но еще и берет на себя роль задачу по сохранению данных вот который он содержит и по загрузке данных казалось бы ну почему бы и нет пусть от класса содержит эти методы вполне удобно вот здесь вот сразу эти данные сохранять загружать никаких проблем как будто и на первый взгляд и не видно но в будущем может возьмете такой ситуации что объект вот это вот класса нам придется

и не видно но в будущем может возьмете такой ситуации что объект вот это вот класса нам придется сохранять не только файл но например и в базу данных или в облако куда-нибудь или еще в какой-нибудь хранилище то есть вот здесь вот если придется менять способ сохранения данных в то или иное хранилище в тот или иной тип хранилища то неминуемо придется переписывать сам класс компьютер вот именно это и плохо вот в этом классе и мы бы хотели это с вами исключить то есть пусть вот этот класс компьютер

плохо вот в этом классе и мы бы хотели это с вами исключить то есть пусть вот этот класс компьютер он отвечает только за представление самого компьютер то есть конкретных компьютеров а вот роль сохранение данных загрузки данных пусть берут на себя другие классы если нам нужно будет поменять логику сохранения лиза груз и там и будете менять уже все другие классы они этот класс которая отвечает только за представление данных о компьютере то есть вот в этом идея единой ответственности то есть

только за представление данных о компьютере то есть вот в этом идея единой ответственности то есть класс должен выполнять строго ту роль которую ему отведена но и кстати вот здесь вот это конечно философски несколько вопрос а что это за роль которая отведена тому или иному классу вот здесь это тонкий момент потому что когда мы разрабатываем тот или иной проект определите для каждого класса его конкретную роль это вообще говоря в некотором смысле искусства и в каждой задачи конечно же эта роль

роль это вообще говоря в некотором смысле искусства и в каждой задачи конечно же эта роль может быть разной и кстати если проект и очень простой то мы бы могли бы наверно вот этот класс компьютера стоите в таком виде то есть если бы у нас было два три класса и больше ничего таналан поменяли бы здесь и и все но при больших проектах здесь идти могут возникать проблемы поэтому это лишь вот как пример то есть я вот сейчас вот именно говорю что вот эти вот два метода они скорее всего будет от

пример то есть я вот сейчас вот именно говорю что вот эти вот два метода они скорее всего будет от нарушать принцип единой ответственности ну и давайте посмотрим как можно было бы исправить этот момент значит эти вот строчки я с коментируем давайте мы их как а будто бы их нет в этом классе есть только конструктор и 2у дают переменные и для того что может был сохранить объект вот это вот класса на диск или еще куда то мы создадим отдельный класс значит вот здесь вот мы пропишем новый класс и

на диск или еще куда то мы создадим отдельный класс значит вот здесь вот мы пропишем новый класс и назовем его по простому сэйв компьютер может был бы как помне и назвать новый это вот первое что мне пришло в голову значит цех компьютер и здесь у нас будет как раз вот эти вот публичные методы значит public мы наш первый метод допустим назовем так вот сейф the file у него будут параметры такие значит пас это путь к файлу и сам объект компьютер то есть здесь на должен быть компьютер и допустят

пас это путь к файлу и сам объект компьютер то есть здесь на должен быть компьютер и допустят окт 7 and i внутри но для простоты опять же просто выведем что-то в консоли свистом а вот printer and и здесь я напишу так сохранением в файл путь к файлу ну и объект который мы сохраняем ну и давайте для примера пропишем еще один метод который будет сохранять вот этот объект компьютер уже в базу данных здесь будет сохранение в базу данных бетой вот так напишу ну а все остальное в принципе то же самое

здесь будет сохранение в базу данных бетой вот так напишу ну а все остальное в принципе то же самое то есть у нас с вами получился такой отдельный класс который отвечает только за сохранение данных вот это вот объекты класса компьютер и чтобы им воспользоваться вот этим классом сэв компьютер мои вот в этой самой программе уже можем сделать так дальше создать во-первых давайте так твоего руна стоит сэв компьютер ну и соответственно дальше мы уже вот использовать этот объект sailor вызываем

стоит сэв компьютер ну и соответственно дальше мы уже вот использовать этот объект sailor вызываем нужной вознесет метод пыль будет сейв-файл ну и здесь вот допустим так ооо нет да и здесь мы передаем объект который хотим сохранить ком все до его здесь это я конечно не забыл вот так вот значит а если мы запустим программу то она у нас выполнится никаких ошибок не будет вы здесь сохранение файл начнут такой-то объект все работает и мы в итоге с вами вместо одного вот этот класс компьютер который

такой-то объект все работает и мы в итоге с вами вместо одного вот этот класс компьютер который делает все разделили его функционал на два класса сэйв компьютер который отвечает сохранение объектов вот этот класс компьютера либо файл либо в базу данных может быть еще куда то тогда здесь вот методу новый добавится но мы разделили функционал то есть каждый класс теперь отвечает строгой свою сферу деятельность это только сохраняет а этот только представляет сам объект компьютер то есть те или иные

это только сохраняет а этот только представляет сам объект компьютер то есть те или иные компьютеры ну и используется из класса можно например вот так вот то есть вот пример того что подразумевается под принципам единственной ответственности то есть мы даже создавать классы которая реализует строго только свой функционал не нужно создавать вот эти вот классы которые делают все или очень много той сваливать все в одно место это плохой подход вот нужно именно разделять функционал между разными

сваливать все в одно место это плохой подход вот нужно именно разделять функционал между разными классами а потом их совместно использовать но и опять же как определить что должен делать один класс что должен делать 2 класс 3 так далее это опять же вот элементы искусства и зависит от каждой конкретной задачи откажу конкретного проекта но тем ни менее уж очевидные вещи раз к лечения ответственности между классами конечно же должен быть то есть вот первый принцип рассмотрим следующий принцип

между классами конечно же должен быть то есть вот первый принцип рассмотрим следующий принцип открытости закрытости этот принцип предполагает что класса должна быть закрыта для модификации но открыто для расширения что это значит вот смотрите я сам и вернемся к нашей программе который вот так вот пишем то например вот этот класс ее в компьютер он нарушает вот этот второй принцип принцип открытости закрытости почему если мы свою вы здесь вот за хотим добавить функционал который бы сохранял

закрытости почему если мы свою вы здесь вот за хотим добавить функционал который бы сохранял объекты класса компьютер скажем в облака куда-нибудь то очевидно нужно было бы добавить еще один метод который бы это делал и вот это вот и хорошо то есть нам бы пришлось модифицировать вот это вот ранее написанный класс для того чтобы добавить сюда новый функционал а нам нужно проектировать программ таким образом чтобы класса и не приходилось модифицировать то есть менять при добавлении нового

таким образом чтобы класса и не приходилось модифицировать то есть менять при добавлении нового функционала но тогда спрашивается а как же на вот в данном случае поступить то есть добавить вот сохранение скажут этот класс компьютер уронить в облака но не менять этот класс для этого здесь вот нам понадобится такая штука которая называется полиморфизм и абстрактная класса в частности в java абстрактные классы реализуется через интерфейсы и мы можем выйти из этой ситуации используя в данном случае

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

на примере я покажу как это можно сделать как нам исправить вот этот класс ее в компьютер который вообще говоря тоже делает много всего и мы свалили все вату кучу вот чтобы это исправить можно поступить следующим образом во первых отсюда от в программу я добавлю интерфейс то есть абстрактный класс вот мы здесь выберем интерфейс и назовем это интерфейс например сэйв интерфейс ну так по простому и так как интерфейс и это по сути дела абстрактные классы то все что нам здесь нужно прописать это тот

как интерфейс и это по сути дела абстрактные классы то все что нам здесь нужно прописать это тот метод который следует перегружать то есть переопределять в дочерних классах а метод будет очень простое будет извиваться сейф сюда мы передадим ну допустим пас это путь куда мы сохраняем данная и сам объект то есть компьютер это будет 7 и все ; вот так мы с вами объявили абстрактный класс то есть интерфейс в языке программирования java и далее вы здесь вот вместо сейф компьютер у нас будет немножко

в языке программирования java и далее вы здесь вот вместо сейф компьютер у нас будет немножко другой класс класс более узкоспециализированной который будет называться так сейф компьютер то файл например таким вот образом и чтобы здесь что у нас ошибки не было мы должны переименовать вот этот вот файл который тоже должен называться сэйв компьютер ту файлов просто в джаве такое требование название классов и названий файлов должен совпадать и далее вот этот класс у нас должен реализовывать вот

классов и названий файлов должен совпадать и далее вот этот класс у нас должен реализовывать вот этот интерфейс для этого нужно прописать значит такой ключевой слова implements ну и имя интерфейса сейф интерфейс он вот здесь тоже подчеркивает красном потому что вот в этом интерфейсе есть метод сейф который мы должны переопределить в дочернем classiс и в компьютер дальше здесь у нас вместо софту файл будет просто сэйв вот так вот вот это второй метод мы уберем здесь будет только один метод метод

будет просто сэйв вот так вот вот это второй метод мы уберем здесь будет только один метод метод сейф ну и ума и djow мы тоже должны поменять начата здесь будет миссий в компьютер можем он прям щас написать вот так по простому сейф то файл здесь будет тоже сейф the file ну а здесь будет просто сейф все чтобы у нас не было ошибок здесь ничего не подчеркивалась красном я вот пока так написал то есть смотрите на свои появился узкоспециализированный класс который называется сэв компьютер то файл и

смотрите на свои появился узкоспециализированный класс который называется сэв компьютер то файл и он отвечает только за сохранение объектов класса компьютер файл ну и так как мы хотим еще сохранить скажем в базу данных то у нас должен быть еще один класс который назовем с их компьютер тут деби дальше здесь вот мы добавим этот класс java class что называется в компьютер ту you baby ну и соответственно функционал его будет очень похожий поэтому я скопирую все эти строчки сюда мы все это вставим и

функционал его будет очень похожий поэтому я скопирую все эти строчки сюда мы все это вставим и здесь он бы столько не сохранение файла с хранение в базу данных все то есть у нас с вами получилось два вот этих вот класса совершенно значит независимых между собой если нам нужно сохранять вот эти вот компьютеры еще там скажем в интернет валялись в облака или еще бог знает куда мы просто будем добавлять вот эти вот класса все новые и новые классы то есть менять ранее написанные класс и нам не

вот эти вот класса все новые и новые классы то есть менять ранее написанные класс и нам не придется и вот благодаря этому как раз реализуется вот этот принцип открытости закрытости мы как бы закрываем нас нету теперь необходимости модифицировать ранее созданные классы для того чтобы добавить новый функционал мы будем добавлять новый функционал определяя переопределяя вот этот метод сейф который прописан в этом интерфейсе саиф интерфейс а работать вот с этими разными классами можно кстати вот

прописан в этом интерфейсе саиф интерфейс а работать вот с этими разными классами можно кстати вот эти вот образом здесь мы пропишем низ и в компьютер то файл а вот этот сейф интерфейс то есть я пропишу здесь сейф интерфейс и будет sailor и в зависимости от того какой за счет класс мы пропишем туда и будем сохранять объект вот этот класс компьютер то есть если мы пропишу так вот сайт компьютер the file to вот этот сейф будет вызван для вот это вот класса и мы в итоге сохраним объект file если

file to вот этот сейф будет вызван для вот это вот класса и мы в итоге сохраним объект file если мы хотим сохранить в базу данных то соответственно мы скопируем названию так то вот класса suv cam пил study by из его пропишем и автоматически вот здесь вот сервер будет сохранять вот этот объект уже в базу данных и так далее то есть видите как это удобно мы по сути дела вы здесь в программе можно менять только те или иные классы выбирают а куда нам нужно сохранить вот этот объект а сами вот эти

менять только те или иные классы выбирают а куда нам нужно сохранить вот этот объект а сами вот эти вот класса у нас никак меняться не будут и мало того из мы хотим добавить новый функционал вопрос добавим новый класс и вы здесь в то его пропишем при необходимости все то есть вот так что нас легко расширяется теперь программа для сохранения объект в класс компьютер в то или иное хранилище и таким образом мы как раз реализуют тот принцип открытости закрытости то есть еще раз принцип открытости

образом мы как раз реализуют тот принцип открытости закрытости то есть еще раз принцип открытости закрытости это о том что существующий уже написанные классы не нужно модифицировать для того чтобы добавить какой-то новый функционал и часто это делается как раз через абстрактный класс а но в данном случае через интерфейсы и сам и java используем а затем уже использую такой полиморфизм вот это вот строчка это по сути дела полиморфизм тоже мы используем какую-то перемену sailor который является

строчка это по сути дела полиморфизм тоже мы используем какую-то перемену sailor который является типом сейф интерфейс то есть типом базового класса для того чтобы ссылаться на тот или иной дочерний класс то есть вы здесь и что у нас полиморфизм мы используем абстрактный класс + полиморфизм для реализации вот это вот принципа открытости закрытости вот в чем он заключается следующий метод подстановки барбара лисков гласит что под классы должны заменять свои базовые классы это означает буквально

барбара лисков гласит что под классы должны заменять свои базовые классы это означает буквально следующее если у нас есть какой-либо дочерний класс то он должен полностью повторять функционал своего базового класса то есть мы можем через дочерний класс вызвать любой метод базового класса я ожидать от него от этого метода точно такого же поведения какое у него было если мы его вызываем непосредственно из базового класса вот это принцип установки борьбы лисков чтобы дочерние классы они

из базового класса вот это принцип установки борьбы лисков чтобы дочерние классы они обеспечивали точно такой же функционал у тех методов что были и в базовом классе то есть не как их существенно не менять давайте я покажу на примере то как нарушает этот принцип и вот в этот класс компьютер пропишем публичный метод пусть он называется вот так вот сет дейта и в качестве параметра допустим будем передавать только название но рик и здесь мы обращаемся да еще к переменными присваиваем ей переданные

только название но рик и здесь мы обращаемся да еще к переменными присваиваем ей переданные значения name а затем создаем еще один дочерний класс вот от этого класса компьютер для этого я создал новый класс назову его допустим вот так вот о моем hp ну и этот класс будет соответственно у нас расширяясь вот этот класс компьютер внутри мы должны с вами создать значит конструктор этого класса мы сделаем это вот так достаточно просто далее вот в этом дочерним классе у меня hp мы с вами переопределим

это вот так достаточно просто далее вот в этом дочерним классе у меня hp мы с вами переопределим вот этот метод сад дейта переопределим следующим образом значит скопируем его сюда вставим и он у нас будет переопределять не только вот этот вот параметр name но еще переменную memories а из но вот так вот мы хотим бы хотел чтобы вот этот дочерний класс работал именно так когда вызывается вот этот метод дельта h будет здесь зыс мимо ресайз и присвоим сюда значения но допустим 8 гигабайт пусть от

метод дельта h будет здесь зыс мимо ресайз и присвоим сюда значения но допустим 8 гигабайт пусть от будет определяться вот этим значением 8000 а там у нас было значение нота который может видов передали а вот здесь вот у нас кстати 80000 давайте поставим 5 тыс чтобы были отличий какие-то то есть у нас получилось 2 от этих вот класса класс компьютер который имеет такой метод дейта и он меняет только вот это вот переменами и тот же самый метод сады это но который меняет сразу две переменных не

вот это вот переменами и тот же самый метод сады это но который меняет сразу две переменных не m&m и ресайз и в итоге вот это дочерний класс нарушает принцип барбары лисков почему он нарушает потому что поведение вот это вот мета досадой то у нас стал другим если мы его будем вызывать непосредственно из базовый класс компьютер а будет менять только переменную name а если мы будем его вызывает для класса о маме hp тао быть сразу менять 2 переменах name и memory сайт то есть поведение поменялся

класса о маме hp тао быть сразу менять 2 переменах name и memory сайт то есть поведение поменялся поменялось существенно кардинально то и смотрите к чему это в итоге может привести значит вот здесь вот классе мэйджору мы с вами создадим вот такой вот метод который будет называться тест на счету будет вайп тест и внутри этого метода тест мы создадим вот такой вот объект значит компьютер и второй объект который будет ссылка у него будет та же компьютер а здесь у нас будет аман hp название пусть

объект который будет ссылка у него будет та же компьютер а здесь у нас будет аман hp название пусть тоже будет вы здесь в туман hp ну а есть значение 5 тысячи тоже оставлю как есть далее вот для этого объекта ком два вызова метод сады это передам название и bmx и и ожидают что вот эти два объекта они будут содержать одинаково имена и одинаковые размеры памяти потому что вот я знаю что вот у базового класса то этого класса компьютер методы это меняет только имя все больше ничего не делает а

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

здесь пропишем такую проверку если значит ком здесь значит дали вазе он на им компашку значит здесь будет комп 2.0 l равняется нулю и сравнимое mauricio стать школам . мимо ресайз равняется компы 2 memories alles я с вот этот условие выполняется выведем в консоль систем mode принтер ну какое сообщение допустим тест окей ну и давайте вот этот тест вызываю здесь это место де мойн да он конечно должен быть статическим то есть здесь вот еще стать канат подписать вот так вот но и запустим эту

должен быть статическим то есть здесь вот еще стать канат подписать вот так вот но и запустим эту программу значит эти вот я строчки поставлю в комментариях запустим программу и мы не видел вот этих вот строчка что тест прошел давайте от ради интерес еще и лс пропишу и здесь у нас будет тоже систему а вот printer and test fail запускаем и видим что да вот действительно тест не прошел и программист не зайчик как определенно вот в этом дочерним классе а мальчики вот этот метод дейта путь здесь и

не зайчик как определенно вот в этом дочерним классе а мальчики вот этот метод дейта путь здесь и гадать а почему вот этот проверку вообще говоря не прошла что не так они прошло по той причине что методы этого зависит помимо переменной name меняет еще и значение переменной моему ресайз тогда как в базовом классе этого нету базовом классе меняется только name то есть вот это вот как раз вот и говорит о том что дочерние классы должны обеспечивать ровно тот же самый функционал что и базовые классы

о том что дочерние классы должны обеспечивать ровно тот же самый функционал что и базовые классы никак не менять дочерними классами можно лишь расширять тот функционал который уже имеется в базовом классе но не менять его то есть вот это и есть принцип барбары лисков но я надеюсь вы поняли что это такое и кстати вот опять же это лишь рекомендация это не знай что мы вообще никогда не можем делать вот эти вот операции то есть переопределять методы так чтобы они работают несколько по-иному нет не

вот эти вот операции то есть переопределять методы так чтобы они работают несколько по-иному нет не обязательно если требует того задач что можно обходить их и в общем-то не соблюдать то есть это лишь рекомендация но как правило конечно же следует их придерживаться следующий принцип разделения интерфейса гласит нужно создавать узкоспециализированной интерфейс и предназначены для конкретного клиента клиенты не должны зависеть и от интерфейсов которой они используют давайте это вот более детально

клиенты не должны зависеть и от интерфейсов которой они используют давайте это вот более детально разберем я рассматривает принципы на примере рисование различных геометрических фигур и давайте вначале вот здесь от программе мы создадим с вами интерфейс то есть вы здесь твои грамм интерфейс назовем его этот интерфейс как-нибудь вот так вот шейп и в этом абстрактном классе у нас будет множество интерфейсов но на придать ей дорогу line потом дроу стекол ну и третье это дроу rect отдали пропишем 3

но на придать ей дорогу line потом дроу стекол ну и третье это дроу rect отдали пропишем 3 класса klass line сёкл erect который будете реализовывать это интерфейс и смотрите что она свои в итоге получится значит тот первый класс создаем он будет называться у нас line значит он в интегрированной среде я вот сразу вот выполненный при мент метод значит ok и у нас видите сразу получается переопределение всех этих трех методов и так как вот этот класс называется line то очевидно вот в этом методе

всех этих трех методов и так как вот этот класс называется line то очевидно вот в этом методе draw line ну например можем вызвать таксистом out printer and то есть вы идем в консоль сообщение что рисуется линия рисование линия но и по аналогии два других класса new class следующий у нас будет стекол и здесь мы также реализуем тот интерфейс вообще говоря можно скопировать вот все что здесь написано в тот класс и вместо в этот вот метода throw стекол прописать рисование уже круга вот так вот но и

в тот класс и вместо в этот вот метода throw стекол прописать рисование уже круга вот так вот но и последний класс от rectangle значит опять же мы делаем и здесь и new java class a rectangle и сюда мы копируем все вот отсюда значит implement шейп здесь у нас будет реализация этого же интерфейса далее мы вместо дроу стекол вот здесь вот прописав дроу rect рисование прямоугольника и получается 3 от этих классы видите align симаков из от веса rectangle они все три должны реализовывать вот эти вот

этих классы видите align симаков из от веса rectangle они все три должны реализовывать вот эти вот интерфейс и которые прописаны в классе в абстрактном классе шейп но абстрактные классы java определяется как интерфейс и вы понимаете что это не очень удобно это неудобно потому что три метода мы обязательно должны переопределять хотя вообще говоря мы их и не используем аквалайн используем только один вот этот вот всё call используем только этот а в rectangle последние дроу rect нам бы вот здесь

вот этот вот всё call используем только этот а в rectangle последние дроу rect нам бы вот здесь вот эти вот два метода и не нужны мы бы вот их вот вот так что убрали бы но увы нельзя будет ошибка потому что творит в интерфейсе шейп у нас три вот этих вот и метода прописаны все три нужно переопределять вот как раз вот этот принцип разделения интерфейс об этом и говорит не надо создавать интерфейс и которые реализуют много разных вот эти хоть методов лучше создать множество более узко

интерфейс и которые реализуют много разных вот эти хоть методов лучше создать множество более узко специализированных интерфейсов чтобы не возникало вот таких вот проблем ну и выйти вот из этой ситуации в данном случае можно очень просто вот здесь вот мы с вами вот этот шеи поставим но давайте в нем только один мест какой-нибудь такой дроу пропишем а помимо него у нас будет три других интерфейса значит это будет во первых интерфейса здесь да пусть вот так вот airline он будет называться ну а

значит это будет во первых интерфейса здесь да пусть вот так вот airline он будет называться ну а это значит интерфейс и здесь мы с вами как раз вот будем реализовывать метод draw line а вот так вот и по аналогии пропишем а и стекол и airex значит и здесь у нас получается здорового секунд а здесь дроу rect вот эти вот образом три специализированных интерфейса и один общий и мы можем уже использовать их в этих классах следующим образом значит для и стекол мы вызовем интерфейс воспользуюсь

их в этих классах следующим образом значит для и стекол мы вызовем интерфейс воспользуюсь интерфейсом а и сёкл вот так вот и здесь соответствовать эти вот методы мы можем убрать то есть лишние методом можем брать вот этот вот ну и в этого дроу рек тоже можно стереть у нас будет только дроу стекол далее вот в этом классе line у нас будет интерфейс онлайн соответствие мы убираем лишнее вот эти вот два метода который в общем то здесь не нужны ну это же сам для rectangle здесь у нас будет airex

два метода который в общем то здесь не нужны ну это же сам для rectangle здесь у нас будет airex интерфейс и соответственно дроу rect так почему он подчеркивает завидовать посмотрим а я здесь вместо интерфейс класс описал здесь будет интерфейс вот так вот и теперь никаких проблем у нас нету то есть видеть что нас получилось мы создали 3 узкоспециализированных интерфейса для соответствующих классов эти класс у нас реализуют эти интерфейсы и ничего лишнего а внутри вот этих вот классов у нас нету

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

а специализированные интерфейсы и соответственно вот эти интерфейсы реализовывать в тех или иных специализированных для чир-вик классах то есть вот такой подход он более практичен чем создавать какие-то вот общий интерфейс и вот это вот четвертый принцип но и наконец пятый принципа инверсии зависимости гласит что наши классы должны зависеть от интерфейсов или абстрактных классов а не от конкретных классов и функций давайте я поясню это на конкретном примере предположим что мы делаем некий бэкон

классов и функций давайте я поясню это на конкретном примере предположим что мы делаем некий бэкон сайта и описываем класс модели класс модели но например модель форм этот класс у нас будет очень простой значит и здесь у нас будут следующие атрибуты and ready and old ну и string fila далее пишем конструктор этого класса где будут передаваться все эти три параметра and easy and old и стрелка фио затем мы здесь всем этим переменам призываем соответствующие значения и в общем все это весь класс

затем мы здесь всем этим переменам призываем соответствующие значения и в общем все это весь класс math форм далее пишем класс который будет представлять сам фреймворк ну допустим с таким именем веб-фреймворк в этом классе мы опишем один метод который будет называться их сюда мы будем передавать как раз объект формой для сохранения но а объект формы он соответственно имеет такой тип модель формы начались модуль форм потом ну допустим так вот ф.м. далее здесь нам понадобится класс через который

начались модуль форм потом ну допустим так вот ф.м. далее здесь нам понадобится класс через который мы будем работать с базы данных пусть он называется тактом а из тел ну и далее дыбе . сейф и передадим вот это вот frm вот таким образом но и осталась прописать только вот этот класс мой успел значит а здесь создадим еще один класс new джалла класс мой скил и в этом классе у нас должен быть один метод вот этот сейф значит и здесь мы тоже пропишем и он должен здесь по идее принимать ссылку на

метод вот этот сейф значит и здесь мы тоже пропишем и он должен здесь по идее принимать ссылку на объект формы ну я делаю так вот frm и здесь мы сделаем систем а вот принтер н запись формы в базу данных дай что он здесь не подчеркивалась конечно же new над прописать идти под у этой переменной тебе вот эти вот образом ну я думаю его в целом понимаете как всем этим можем воспользоваться допустим создадим модель формулу здесь вот то есть будет у него model form потом мы должны передать аиде пусть

модель формулу здесь вот то есть будет у него model form потом мы должны передать аиде пусть будет один потом возрастом пусть будет 30 и он значит балакирев затем нам понадобится вот этот класс веб-фреймворк а4 и сделаем танк w миньо веб-фреймворк ей w сэйв мы передаем эту форму для сохранения запускаем программу и у нас вот как раз происходит запись форма в базу данных но как бы имитация всего этого диллон получились 3 вот этих вот классов значит сам класс для модели затем класс для фреймворк

диллон получились 3 вот этих вот классов значит сам класс для модели затем класс для фреймворк который делает только сохранения модели но и класс мой скил который не посредством работает базы данных моих скилл что здесь плохого и почему вот эти вот 3 класс вообще говоря будут нарушать принцип инверсии зависимостей смотрите вот эти классы фреймворк и моих тел а не завязан напрямую вот на этот класс model form вообще говоря вот этих вот к so for не может быть множество the field of во фреймворке

model form вообще говоря вот этих вот к so for не может быть множество the field of во фреймворке мы можем создавать самые разные классы форм и по идее со всеми этими классами вот эти вот мая стрел и вы фреймворка должны работать то есть вот здесь вот по хорошему надо указывать какой-то универсальный базовый класс лучше всего абстрактных даже не лучше всего рекомендуется как раз вот по принципа инверсии зависимостей определить вот этот класс model form от абстрактного класса в данном случае от

зависимостей определить вот этот класс model form от абстрактного класса в данном случае от интерфейс потому в djow программируем и уже прописывать здесь конкретный интерфейс а не конкретный класс вот давайте это поправим значит твой за счет мотал форм мы пропишем во-первых интерфейс создадим новый jal класс интерфейс пусть интерфейс называется такота ой форм и в это в интерфейсе я ничего прописывать не буду далее могут здесь сделаем implements от реформ и затем вы здесь от в классе и

прописывать не буду далее могут здесь сделаем implements от реформ и затем вы здесь от в классе и фреймворка место мою форму пропишем iphone и здесь мы тоже аль форум пропишем все видите мы сделали программу более универсальна и тезисы у нас будут другие формы какие-то но и они тоже даже быть унаследованную от той формы вот для id в интерфейс iphone то у нас вот эти вот классовой фреймворк и мой успел становится универсальными они работают с произвольными формами то есть вот это в частности

успел становится универсальными они работают с произвольными формами то есть вот это в частности подразумевается под принципами инверсии зависимостей и еще кое-что можем подправить смотрите вот здесь вот используется класс мой успел может быть там какая-то другая база данных нимой в съела а пост grayscale или еще что то поэтому по идее вот этот перемену тебе нужно бы сделать не вот типом вот этот класс мой успел о том же какого-то универсального типа ну например у так вот ой stl и вот такой

класс мой успел о том же какого-то универсального типа ну например у так вот ой stl и вот такой интерфейс хорошему здесь тоже над прописать то есть мы сделаем новый интерфейс напишем его а и стрел и здесь у нас реализации никакой не будет а вот этот класс мои стелса отвисать его будет реализовано чит implement a и стрел вы также пропишем соответствие здесь у нас вот этот метод сайт должен быть да поэтому все-таки в этом интерфейсе а из тел нам нужен methods of прописать то есть от будет паблик

поэтому все-таки в этом интерфейсе а из тел нам нужен methods of прописать то есть от будет паблик avoid сэйв и здесь параметр ой форм вот так вот так и у нас здесь проблему языка и да конечно здесь нужен публично делать то есть паблику так все то есть мы с вами теперь сделали программу ещё более универсальный то есть вот здесь вот вместо класса мой скил мы можем подставлять любой другой класс который работает с другим типом базах данных например поскреб скилл там oracle или еще что-то и

который работает с другим типом базах данных например поскреб скилл там oracle или еще что-то и соответствует несет methods of будет отрабатывать для нужного типа база данных то есть вот так вот мы прописываем зависимость классов от интерфейсов то есть это абстрактных классов а не от конкретных классов и это делать нашу программу гораздо более универсальный по сути дела этой вот и заложено в пятом принципе инверсии зависимостей вот что из себя представляет принципы solid опять же это лишь

пятом принципе инверсии зависимостей вот что из себя представляет принципы solid опять же это лишь рекомендация не нужно пускаться во все тяжкие и обязательно придерживаться каждого принципа при разработке каждой программы это лишь ориентируя для того чтобы нас программу в итоге получались модулями масштабируемыми и чит обильными и это главное на что нацелены вот эти вот принципы салют

01-Docker: Основы. Принцип работы. Почему docker. Сравнение с виртульной машиной. Применение.

всем привет на этом долгом видео мы разберём такую классную нужную тему как долго мы уже перешли точки невозврата им сложно представить современное анти без знаний докеров то есть на любых фирмах где угодно вы встречаете доков также все больше боже программ приходят на докера и некоторые программа просто уже невозможно установить как это было раньше то есть нужно использовать докер обязательно я постараюсь на этом видео вам объяснить основные команды как духа работает что нам нужно делать как

постараюсь на этом видео вам объяснить основные команды как духа работает что нам нужно делать как создавать свои контейнеры и так далее и давайте мы начнем с теории чтоб понять как это как это вся каша между собой работает и чтобы начать я хочу объяснить почему собственно докер чтобы это объяснить нужно посмотреть на классические серию у нас есть в классическом серия то есть любой компьютер да это может быть север у нас есть железо на нем стоит a person система windows linux миг не важно также

может быть север у нас есть железо на нем стоит a person система windows linux миг не важно также на право на системе есть свои чеки и зависимости при установке какой-либо программы эта программа используют определенные библиотеки зависимости и возможно работает железом какие-то функция перун системы уже будет спорить все зависит от приложений которые вы устанавливаете при установке одного приложения все будет работать отлично мы устроим также другие приложения и если у них нет никаких стыков в

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

у нас есть железо у нас есть программы которые на них работают это классический сервер то есть как работает ноутбук ваш компьютер вот это вот так а вот схема как же работает доков вдохом у нас есть железом наш сервер на нем стоит обернуть система если мы используем докер хотим использовать то зачастую это linux на равно системе мы ставим программу дока при запуске приложения есть мы хотим какой-то контейнер развернуть в docker и мы скачиваем это приложение когда и мяч будет создается контейнер

контейнер развернуть в docker и мы скачиваем это приложение когда и мяч будет создается контейнер в этом контейнеры помимо самой программы есть все необходимые библиотеки зависимость который необходимо именно этой программе для того чтобы она корректно работала то есть программа уже не обращается к библиотекам независимость тем которые предоставляет эта система она программа этот контейнер уже запускается с необходимыми вещами для этой программы и программа работает в такой капсуле у него все

с необходимыми вещами для этой программы и программа работает в такой капсуле у него все для работы есть то есть если мы устанавливаем много программ хотим ставить то просто создаем контейнеры под каждую программу и каждая программа каждая каждый applications у нее будет своей политике зависимости и они независимые друг от друга они работают стабильно имея все необходимое для их работы вот так выглядит архитектура в доки и почему использую именно linux давайте разберемся как работает только в

архитектура в доки и почему использую именно linux давайте разберемся как работает только в линуксе еда cabling windows итак у нас есть железом и там и там у нас устанавливается в линуксе они делают район систему linux на windows windows ничего сложного при ленуся мы ставим дока привести мы также ставим только но появляясь промежуточная вещь которая это все всю картинку меняет это linux виртуальной опрос на система то есть можно отсюда сказать что дока работает только на линуксе в любом случае

опрос на система то есть можно отсюда сказать что дока работает только на линуксе в любом случае до вы может поставить на windows дока но всегда будет вот это вот часть этот кубик на он бы сам становится вам нечего делать особо не нужно да как дела все за вас пришло когда к вaм он установит сразу вот это вот промежуточную часть и при создании контейнером программа какой-либо это все людей все так также контейнера запускается это не то думает понятно и почему чем всего используется ридус потому

также контейнера запускается это не то думает понятно и почему чем всего используется ридус потому что в любом случае только запускается на linux даже в виндоусе и хорошо мы этом поле это разобрали но кто-то скажет зачем использовать только если же виртуальной машины и можно каждую виртуальную машину 1 виртуальную машину запуску использовать для одного приложения да можно но это было раньше то есть как давайте это все страны от из мы используем только то у нас есть железо разную систему только

как давайте это все страны от из мы используем только то у нас есть железо разную систему только и коты нервы где работают программы это понятно все работы хорошо при использовании виртуальной машины также у нас есть наша физическая железом на этом железе мы устали не проснулся систему а типа вайзер ну ка бы признан система но для работы с виртуальными машинами это эссексе proxmox и другие системы дают тоже virtualbox я тоже любого зла и уже в типа фатиму сталин и создаем виртуальной машины

дают тоже virtualbox я тоже любого зла и уже в типа фатиму сталин и создаем виртуальной машины каждой виртуальная машина требует образную систему мы стоим на прекрасную систему и уже на первую систему мы оставляем наше приложение с тем приносит с собой политики зависимости и ставим программы плюс до плотины какие-то подпрограммы библиотеки добавляем и так в этом случае у нас есть только одно железо природная система ida corr + приложение здесь у нас есть хипповая сам плюс виртуальной машины

природная система ida corr + приложение здесь у нас есть хипповая сам плюс виртуальной машины типа вазир нужно управлять это не этими виртуальными машинами типа лазеру нужно следить чтобы все работало далее в каждой машине есть своя простой система занимает какое-то место нужен делать апдейты апгрейды и каждая то я праздную система на требуют а пленные ресурсы просто чтобы заработала виртуальная машина без приложениям просто чтобы запустилась нормально виртуальная машина тогда можно сказать что

без приложениям просто чтобы запустилась нормально виртуальная машина тогда можно сказать что ресурсов при используем только нужно меньше так как у нас нет еще до плотины просто системой здесь как минимум и этого нету здесь же ресурсов пульса намного больше при создании умственно машины определенное количество процессором виртуальных определенных количество оперативной памяти нужно выделять и соответственно также жесткий диск и нужно создавать далее если жесткие диски тема пошла них то

и соответственно также жесткий диск и нужно создавать далее если жесткие диски тема пошла них то контейнеры занимают либо имиджей беппо сами катание они занимают мегабайты иногда выходит это все за пределы 1 гигабайт но это отдельный случай в основе товара считаясь все в мегабайтах при используем виртуальных машин нам нужно гигабайт это как сама виртуальная машина не учитывая приложение которое мне работает уже требует несколько гигабайт чтобы просто установите образную систему здесь будет

мне работает уже требует несколько гигабайт чтобы просто установите образную систему здесь будет гигабайт далее при запуске контейнер нам нужно до водки мало времени нам нужно запретить только приложением на нужно контейнер запусти которой будет работать приложение в случае с виртуальными машинами нам нужно запустить целую persons систему а потом запустить приложение то есть скорость загрузки у нас при используют доктор давайте низкой и используя виртуальных машин довольно таки высокая да есть

при используют доктор давайте низкой и используя виртуальных машин довольно таки высокая да есть случай когда при запуске контейнера нам нужно ждать пока запустится один контейнер потом другой повод нам 3 потом 10 то есть есть какое-то какие-то зависимости от катания допустим база данных об ту только приложения но зачастую они все равно запускать много быстрее так как у нас опять таки нету вот это промежуточная трудно система и забегая наперед хочу сказать что эти системы в реальной жизни они

промежуточная трудно система и забегая наперед хочу сказать что эти системы в реальной жизни они работают вместе и давайте повторим как это выглядит как нынешнее время в бит дока на серебра в дата-центров на клауд провайдерах 8 как это в нынешнее время все используя у нас есть железо физическая зачастую это не одно железо а несколько серверов на которых установлены купавой за это и сексе proxmox feature a box и так далее не столь важна и эти типа вайзер и они белены в кластер то есть чтобы при

feature a box и так далее не столь важна и эти типа вайзер и они белены в кластер то есть чтобы при выходе 1 note то есть одной железки одного сервера наши все виртуальные машины продолжая работать и это было незаметно для конечного пользователя да это какая-то работа для админа ноте мини-приложений работают и все счастливы далее давайте рассмотрим вернее как это один сервер дауни просто скло что вы их может быть несколько она будем раз майках один сервер на этом серве создаются в виртуальной

вы их может быть несколько она будем раз майках один сервер на этом серве создаются в виртуальной машины у самца api разную систему если при используем докеров ставится linux и ставится докером и потом запускаются уже контейнеры создается вот так это в нынешнее время работает и так как я говорил что при использовании многих серверов объемных кластера если одна машина не работает то эти все сервера эти все контейнеры вами продолжают работать на других серверах думает понятно и давайте еще

сервера эти все контейнеры вами продолжают работать на других серверах думает понятно и давайте еще посмотрим на то как упрощается работа программистов с админами сопряжён steam как это все собственно работает как и прощаясь разработкой снова приложения с доктором у нас есть программист они создают приложение они скомпилируют получается у нас программы они пишут документацию как что необходимо для запуска этой программы какие порты нужно три какие приложения понять множестве какие библиотеки

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

скачивают документацию ознакамливается подготавливают сервер переносят потом сам саму программу на север ставят на сервере дополнительные зависимости библиотеки скачивают допустит ними под программы делают открывают порты и на файл воли и так далее то есть довольно много то ляпом вернусь к этой схеме еще посмотрим проблему в этой схеме чтобы сока до используются только программисты пишут также код компилирует пишут документацию но помимо всего они пишут так называемый дока файл в этом только

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

она описывает здесь и потом при запуске дока файл при запуске бьют до к файлу у нас отдается дока и мяч и это дока и мяч это понимаете как из-за образ той же описана система того же вино со либо linux здесь все находится внутри все зависимости все-все-все находится в этом и только image to the cialis и матч то есть это из-за образ грубо говоря один образ дока образ этот дока и матч он закидывается потока реджис это может быть всем известным только хоп где я думаю все знают что там находятся

потока реджис это может быть всем известным только хоп где я думаю все знают что там находятся только имидже всех популярных программ либо это может быть частной репозитории неважно факта что дока и метель закидывается of a dog a registry и соответственно версии еще добавляется к ней далее админы получает задание развернуть новое приложение на северах обычно в таких случаях уже есть сервера подготовлен для дока контейнеров то есть там есть система настроена настроен тока и так далее и за что им

для дока контейнеров то есть там есть система настроена настроен тока и так далее и за что им нужно сделать это возможно открыть на файл порты и можем их это мелкий манипуляций сделать самой инфраструктурой и отмене берут потом сокор офис 3 дока и мяч и разворачивает этот и мы на сервере то есть создают да как он тайно любое количество вот и это все будет работать давайте вернемся к проблемам здесь если документация было написание очень хорошо либо одну что-то не так сделал восемь факта что на

если документация было написание очень хорошо либо одну что-то не так сделал восемь факта что на серве да пусть не запускается нормально приложение ибо оно вам не корректно работает потом админы обращается к программистам что в этом накосячили что не так работает программисты смотрят еще раз тестируют на своих серверах приложений говорит о нефти работает смотрим здесь на сервер adac вы забыли там что установить может быть документация что-то забыли указать факта что одному становлюсь что-то

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

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

если на этом сервере что-то не работает это скорее всего на настройка сети либо какие то другие дополнительные права не выданы то есть это уже работа админов здесь уже намного проще исключить ошибки которые можно сделать но думаю это понятно и понятна цель почему все больше и больше людей приходит именно на использование только я говорю здесь а такое меньших токов файлах только регистре и контейнерах и хотя бы сейчас вам объяснить как это всё между собой связано дока и матч только реестре и до

и хотя бы сейчас вам объяснить как это всё между собой связано дока и матч только реестре и до конца и давайте рассмотрим у нас есть сервер на нем работает дока хорошо у нас есть также public либо проявит дакар регистре это паблик это известная дока хоп либо приватной речь если допустим на основе птицы не столь важны вариантов очень много есть на то короче стрим находится имидж это допустим все наши любимые известные программы это печи python вот процент nx москаль об ингибин не столь важного

наши любимые известные программы это печи python вот процент nx москаль об ингибин не столь важного чем-то миф тысячи чтобы создать контейнер на сервере из одного из этих из одного из этих имиджей нам нужно сделать следующие нам нужно сначала скачать этот и матч команды докопал мы скачаем и мы в локальном дакар отчестве допустим мы хотим иметь python мы пишем только пул python и версию его оказывая ну это потом мы вернемся к персам еще ну допустим мы хотим скачать python вот price index то есть

ну это потом мы вернемся к персам еще ну допустим мы хотим скачать python вот price index то есть мы только пол поэтому только под пресс до cap index чтобы создать из этих дока имиджей тока контейнеры уже готовые рабочие программы нам нужно сделать следующую команду нам нужно сделать дока уран и указать и мощный если мы укажем до коран и и укажем image name который у нас нет в локальной дуккар и jetstream там и то сервер падет она только в чистый и скачает необходимый нам и мяч то есть мы здесь

там и то сервер падет она только в чистый и скачает необходимый нам и мяч то есть мы здесь к укажем только уран мастер сервер падет на ну допустим на токах об и скачает на майской и мышь он попадет локальную только роль jetstream думает понятно ну шучу мы запускаем команду дакар она указывает и мяч и допустим хотим создать wordpress контейнер было запустится вот про искандер то все будет работать хотим и дальше создать два контейнера сpython без права м хотим и 3 контейнер с индексом тоже можем

хотим и дальше создать два контейнера сpython без права м хотим и 3 контейнер с индексом тоже можем это сделать и нам будем нас никто ничего не ограничивает главное чтобы было соответствие с портами чтобы они между собой не конфликтовали до при запуске они gemix мы не можем запустить 3 engine икса работающих на партах 80 ну это мы вернёмся к этому попозже я думаю с теорию мы немножко разобрались может быть что то не очень понятно но давайте придем в практике там будут все более понятно

и первое что же сделать чтобы начать изучать только это и нужно установить тока я буду использовать пудру 2004 и на нее мы поставим тока так переходим на сайт daggoo dogs далее переходим в дом lot and install и выбираем linux в нашем случае я буду ставить все в ubuntu нажимаем kubuntu и здесь есть несколько возможности как можно поставить дока не больше всего нравится это последний метод это с помощью скрипта то есть будет скачивать скрипт и он сделает все необходимые действия для установки

помощью скрипта то есть будет скачивать скрипт и он сделает все необходимые действия для установки доков на ваш linux итак спускаемся ниже описание скрипта этой командой мы сейчас качаем скрипт для установки а вот этот скрипт так же его можно посмотреть что в нем находится то есть все описание те диск которые будут произведены допустим это скрипт то есть можно сразу проверить его работоспособность у вас на серве давайте это сделаем все хорошо это ли мы запускаем этот скрипт зависимости от

у вас на серве давайте это сделаем все хорошо это ли мы запускаем этот скрипт зависимости от системы это можно занять некоторое время и можем проверить только скажем и вот у меня основная версия 2010 также хочу сказать что я буду работать столько с как root если вы хотите использовать другого пользователя для работы с доком то есть чтобы другой пользователь мог запускать команды током то нужно этого пользователя добавить в группу тока до много слова током ну ладно давайте создадим пользователя

пользователя добавить в группу тока до много слова током ну ладно давайте создадим пользователя user id минус m как чтоб со 2 тамошний территория далее минус с чтобы этот пользователь мог использовать один лишь так и теперь этого пользователя добавим в группу дока usa mode минус а большая к чтобы добавить этому пользователю вторичную группу то с него есть первая группа это под названием рамани ра и второй групп мы добавим током пишем дока и каковы муин добавляем это пользователю ромны + комод

и второй групп мы добавим током пишем дока и каковы муин добавляем это пользователю ромны + комод еще стоит написать все хорошо можем проверить каких группах он состоит и так у него группа его первое ruiner а вторая группа это дока и давайте посмотрим может он запускать лет только командой давайте перейдем станем эти пользователям и запустим только версию мы можем и еще эту команду запустим да капец посмотрим работает ли у нас какие-то контейнеры нет контейнеры у нас ники не работают вот таким

посмотрим работает ли у нас какие-то контейнеры нет контейнеры у нас ники не работают вот таким образом мы поставили тока на ubuntu 2004 и теперь поставим только на другую операционную систему и посмотрим как установить докер на windows итак снова переходим на doko dogs и здесь есть тонн 1 install переходим сюда и здесь уже будет установка в windows пускать немножко ниже здесь есть описание что он необходимо будет и вот есть ссылка скачаем докер сохраняем файл переходим к установке соглашаемся

необходимо будет и вот есть ссылка скачаем докер сохраняем файл переходим к установке соглашаемся но установить все вещи которые необходимы внука завершена нажимаем закрыть и при загрузить после перезагрузки запускаем da gudda стоп соглашаемся с лицензией также нам нужно установить керна для linux дана к моему можем сейчас закрыть и здесь указывается как нужно установить пакет для linux поэтому сразу скачиваем пакет и его с наливаем готово долго сейчас останавливается поэтому можем здесь нажать

скачиваем пакет и его с наливаем готово долго сейчас останавливается поэтому можем здесь нажать уэст от сейчас только сервис перезапускается все-все перри запустилась все отлично все должно работать давайте проверим какая версия установилась откроем пава шарик пишем только минус минус кашин вот нас 2010 и посмотрим запущена ли у нас какими контейнеры как все кодаира у нас нет остальные команды которые я буду показывать видео вы даже можете все запускать повышал но windows 7 удобна тем что у вас

я буду показывать видео вы даже можете все запускать повышал но windows 7 удобна тем что у вас есть графическая оболочка еще ко всему то есть у вас здесь будут отображаться имиджа которые вы скачали даже подключенные vogue us и и так далее так что проверить работоспособность вашего канониры мы можем скопировать эту команду которую же сама предлагается докером это же запустить ее в повышали вставляем запускаем ее скачивание контейнера для проверки скит хабом все совершаем доступ теперь за да

запускаем ее скачивание контейнера для проверки скит хабом все совершаем доступ теперь за да кортес посмотрим работает наш процесс да все запущено и теперь мы можем подключиться в браузере к нашей мыши localhost все у нас работает видел что тут наш пирог отеля запустился это именно работает все в контейнере то есть это localhost мы запустили имя то что у нас работать на данной машине все можно сказать что установка докера на windows прошла успешно

мы с ним ледок а кто на linux . windows я буду использовать linux стрессовое примеров я использую буду 2004 и давайте начнем изучать собственно docker и так только это принципе тоже обычный процесс который работает на вашем сервере этот процесс мы можем остановить запустить построить его статус и давайте сделаем совесть доком статус наш процесс работать все хорошо мы можем установить также запустить если у вас есть проблемы с докером какая-то команда не работали что-то еще посмотрите работать ли

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

хеллоу ворлд и вот мы видим что этот контейнер с таким названием у нас дни образ и мяч у нас нету на в локальный репозиторий поэтому этот иметь он качается с доках об им авеню что иметь запускается вернее создается контейнер и он пишет color from только и здесь еще хотя информация да все готово таким образом мы запустили наш первый контейнер давайте посмотрим если запущен настолько контейнера это 90 с помощью команды дока ps процесса и мы видим что у нас никакого процесса сейчас нету

это 90 с помощью команды дока ps процесса и мы видим что у нас никакого процесса сейчас нету запущенного но мы докер запускали и он остановлен сейчас потому что задача этого контейнера холо gold заключалась в том чтобы выдать нам вот эту вот информацию и все на этом его работа за кольца поэтому после того как он запускается он нам выдает эту информацию и уже потом он останавливается если мы сделка мадока пьес минус а то мы здесь увидим этот контейнер который был запущен воду и мы команда лоу и

мадока пьес минус а то мы здесь увидим этот контейнер который был запущен воду и мы команда лоу и капель на 1 в данном случае нам этот контейнер не нужен так же и нам не нужен и мач которую мы скачали вот нас здесь к часу нас и мы вот здесь мы скачали и мышь и давайте теперь удалим это контент который был создан я за следующим образом до к нему можно сделать несколько вещей можно указать имя как видите это имя она динамическая но даются докером если мы не указываем специально какое имя дать

видите это имя она динамическая но даются докером если мы не указываем специально какое имя дать контейнеру далее мы можем указать контейнера один и еще очень классно видеть что мы можем указать просто несколько символов первых контейнер 1 чтобы его долей давайте так и сделал c6 будет досталось футаж нас нет больше никаких контейнеров и он ударит и над о которой нам нужен отлично контейнеры удалены посмотрим все контейнером нас нет нету не запущенный контейнеров не остановлен вообще ники

удалены посмотрим все контейнером нас нет нету не запущенный контейнеров не остановлен вообще ники созданных контейнером нет но у нас остался и матч чтобы посмотреть и мази которые у вас есть на сервере певица команда доктор имидж и мы видим что у нас есть и матч указывается репозитория откуда был взят контейнер и если увидите вот такую то и по истории название что ничего до плане фраз перед ней стоит то это обычно только хоп далее так у нас указан и и mach1 также интересная вещь это сай за

стоит то это обычно только хоп далее так у нас указан и и mach1 также интересная вещь это сай за размер этого имиджа и мы тоже можем удалить этот мяч до к фильму так какой командой мы удаляем контейнеры а если мы добавим и то таким образом мусорим именно и мяч и указываем ким очереди готовы все у нас больше и мышей нету прекрасно ну это такая тестовая штука чтобы от просто сама начала попробовать работали востоке и давайте перейдем на адово хоп и скачаем что мы поинтереснее потоках об есть

работали востоке и давайте перейдем на адово хоп и скачаем что мы поинтереснее потоках об есть сотни тысяч имидже которые мы можем скачать для себя и способ это и даже могут быть как официальный как допустим вот яндекс если мы индекс то вот мы видим что это официальный и мышь от компании вот тоже очень много есть имиджей которые делают обычно люди даже мы с вами можем сделать и матч и закинуть на токах а также можно использовать ubuntu образом то есть это стандартно ubuntu quite сколько у него

токах а также можно использовать ubuntu образом то есть это стандартно ubuntu quite сколько у него скачивание один биллион плюс донос очень очень часто этот и мач качается и очень часто тоже использует для построения док контейнеров это альфино это же linux дистрибутива которая очень маленькая по размеру который часто используется то есть в ней ничего нет а она очень просто построена ее часто используют для посреди их только котлер ну давайте для наглядности мужская скачаем ubuntu при открытии

для посреди их только котлер ну давайте для наглядности мужская скачаем ubuntu при открытии страниц на док хоп странице им отливы справа пути видеть команду дока пол и название пакета это мы просто скачаем и матч копируем вставляем идет скачивание ubuntu и давайте для наглядности я вам покажу что альпина очень-очень маленькая штука кто у нас альпин и сразу шлам и также мы его скачаем готов давайте посмотрим и мыши который у нас есть долларов и mogers и вот видите у нас ubuntu занимает 72

давайте посмотрим и мыши который у нас есть долларов и mogers и вот видите у нас ubuntu занимает 72 мегабайта а альпина занимает пять с половиной мегабайт всего лишь поэтому из-за этого ее часто используют для построения других имиджей ну ладно это такое дело давайте попробуем запустить наш ubuntu наш контейнер дока ран ubuntu все как бы ничего не происходит у нас посмотрим процесса у нас ничего запущенного нету но мы его запускали в чем дело на самом деле дело в том что у пункту это просто как

нету но мы его запускали в чем дело на самом деле дело в том что у пункту это просто как контейнер с убунтой он ничего не делает и поскольку в нем никаких процессов них которые работают то он сразу останавливается но мы можем его запустить чтобы он работу какое-то время это дело с очень просто да коран и мы можем передать ему команду slip допустим 5 секунд вот даже момента и 5 секунд или контейнер работает у нас нет он нам ничего не показывает потому что просто vps команда slip 5 все он

работает у нас нет он нам ничего не показывает потому что просто vps команда slip 5 все он завершил свою работу если мы посмотрим нас появился еще один контейнер который остановлен и видим здесь команду первой команды было дальше то есть он про запустился и запрещался дальше все больше ничего не запустит поэтому сразу остановился и 2 мы за все с командой slip 5 то есть таким вот образом то карман указываем название имиджа который мы хотим запустить с которым мы хотим создать контейнер и может

указываем название имиджа который мы хотим запустить с которым мы хотим создать контейнер и может передать ему команду с параметром то есть дока ран потом image name потом команда и параметр хорошо и вот мы заплатили еще 20 наша контейнера вы наверное заметили что они работают как обычная программа то есть у нас консоль не было доступно для использования но если мы сделаем запустим его в тысяч мод то есть это будто на фоне по моему за пути до называется то фоне что он нам концу есть раз будет

то есть это будто на фоне по моему за пути до называется то фоне что он нам концу есть раз будет доступна давайте сделаем не 5 а 10 секунд slip то есть наш контейнер будет работать 10 секунд запустили прекрасно давайте посмотрим на наши процессы у нас есть работающий контейнера ubuntu 5 секунд он был создан назад сейчас делите q пища должен он еще до у нас нету больше этого контейнера он исчез давайте посмотрим наш все коты и которые были стороны мы видим у нас есть аж три контейнера которых мы

посмотрим наш все коты и которые были стороны мы видим у нас есть аж три контейнера которых мы запускали давайте мы можем запустить этот контейнер снова который 5 будет 5 секунд будет спать дока штат за заметьте не иран стал то есть мы запускаем заново созданный уже контейнер указываем один не запускаем все только пес у нас работает уже запущенный контейнер с командой если 5 научат уже до уже не работает если мы снова посмотрим все контейнер которые вообще создана у нас не появился никакой

не работает если мы снова посмотрим все контейнер которые вообще создана у нас не появился никакой новый контейнер он не был создан то есть мы запустили всего лишь только это контейнер заново и запустили прикомандирован создается новый контейнером при команде старт запускается контейнер вот это запомните и принципе давайте это все удалим нам это уже не нужно чтобы у нами так много отображалась здесь всего до к гриму и указываем 1 давайте вот b6 потом у нас есть а е и b 8 то есть по две буквы

здесь всего до к гриму и указываем 1 давайте вот b6 потом у нас есть а е и b 8 то есть по две буквы достаточно бутане все уникальные поэтому это бы сработает вот хорошо далее давайте посмотрим и мы же котором нас есть слово тока и матрас и мы видим что у нас есть ubuntu стеком за и тест то есть последняя тоже какие львиная альпин ой как угодно даже ли тест но самом деле версиях существует намного больше дать посмотрим снова на доках а здесь у нас есть теги какие таки мы можем использовать из мы

больше дать посмотрим снова на доках а здесь у нас есть теги какие таки мы можем использовать из мы используем lightest то будет скачиваться вот этот вот и мач тоже можно использовать версии но я думаю это будет более понятно для божества если мы возьмем контейнеру ubuntu здесь мы перейдем в теге также берём lightest rolling и вот здесь уже идут уже версии также версия и вот это будет так 2204 которая вот должна скоро выйти полноценная версия также есть 2110 вот у обычной версии ubuntu ну

которая вот должна скоро выйти полноценная версия также есть 2110 вот у обычной версии ubuntu ну давайте скачаем еще и матч до call здесь будет команда указывается докопал ubuntu 2004 уже готовая но мы можем его сразу запустить он автоматически скачается давай так сделаем дока ран ubuntu очень важно : 20.04 как также как указывается так вот на стыке 20.04 все запуск и давайте сразу ему команду передадим давайте нам скажет эхо рода к все и матч запустил скачался и мы и запустился сразу же и вот

давайте нам скажет эхо рода к все и матч запустил скачался и мы и запустился сразу же и вот нам написала калоуда к давайте посмотрим на шее и мы же и мы видим ubuntu 24 смотрите еще такую вещь если вы запускаете только контейнер то есть пишите дока уран и ubuntu то всегда берется и мы с тегом да и тест если вы хотите запустить определенные версию вам всегда нужно будет указывать персию которая хоть и запустить то есть те которым какие запустить моем случае 2004 вот ну там допустим можем

хоть и запустить то есть те которым какие запустить моем случае 2004 вот ну там допустим можем запустить команду с помощью к модели с мы отобразим содержимом директории по умолчанию и запомни что у каждого и метро есть своя территория по умолчанию то есть это та directory куда он заходит при своим запуске docs и вот здесь отобразился работе директория самого контейнер дали если еще такая штука что если мы придем снова на доках об этой свежести ubuntu то здесь мы можем видеть для каких

штука что если мы придем снова на доках об этой свежести ubuntu то здесь мы можем видеть для каких архитектур предназначены эти контейнеры если мы видим м д 64 то это значит обычная архитектура можно запускать на обычных серверах на этих компьютерах арам архитектура это например малинки расплетай вот иногда их больше иногда меньше когда некоторые образы мы на маленько запустить не можем к сожалению поэтому берутся какие-то альтернативные имиджа ну мы немножко отошли от темы возвращаемся и так

поэтому берутся какие-то альтернативные имиджа ну мы немножко отошли от темы возвращаемся и так что мы скачали только имя часть снова посмотрим и давайте мы снова запустим обычный контейнер дока ран бунту давать ее запустим тысяч моде то есть в бэкграунде и у каждый может slip тоски но допустим все докер запустился проверяем да кортес все работает хорошо . вам рассказать такие вещи как можно остановить запустить и допустим даже позировать контейнер допустим есть у вас есть почва с контейнера

запустить и допустим даже позировать контейнер допустим есть у вас есть почва с контейнера которые работают между собой есть процесс который приходит на один контейнер потом приходит на другую и на 3 и выходите где-то в средине оставить этот процесс чтобы даже он не шел то есть один контейнер посредники вы хотите позировать на время чтобы посмотреть допустим логе то это легко сделать с помощью команды да карт паузы и указать в контейнер 1 либо games я буду указывать так и посмотрим на процесс и

да карт паузы и указать в контейнер 1 либо games я буду указывать так и посмотрим на процесс и здесь на стоит что на паузе и мы можем запустить теперь это делается очень просто просто пишется on пауз эта команда используя дни у сейчас она иногда бывает полезно далее у нас процесс сейчас работает и мы можем его основе с помощью тока далее указать либо контейнер 1 ибо даже можем использовать имя иногда при остановке процесс занимает очень большое время поэтому этот процесс можно просто сделать

иногда при остановке процесс занимает очень большое время поэтому этот процесс можно просто сделать kill давайте штурм цен kontrol ц наш мир и укажем что акил убить процесс ну все он остановился уже мы посмотрели как можно управлять своими контейнерами если они запущены далее давайте снова запустим наш контейнер а еще одну из мы посмотрим тока с минус а то мы видим что у нас есть много запущенных контейнеров которые мы запускали но нам они уже больше не нужно давать их уберемся дакар ему и

контейнеров которые мы запускали но нам они уже больше не нужно давать их уберемся дакар ему и указываем просто этим либо имена все готовы и давайте снова запустим наш контейнер который мы запускали то этого ubuntu но укажем еще один параметр называется м что он герб при запуске имиджа создается контейнер при остановке этого контейнера он контейнер маркируется как остановлен и чтобы они у нас сразу же убивались сразу же уничтожаю сети когда некоторые мы создаем вот для этого нужен этот параметр

же убивались сразу же уничтожаю сети когда некоторые мы создаем вот для этого нужен этот параметр он давайте попробуем запустился давайте посмотрим дока без вот нас наш контейнер не давайте его убьем доктор хилл все убивает сходить и очень быстро и сразу если мы посмотрим в кафе с все к теннер и у нас ничего здесь нет отображает потому что автоматически контейнер был ник просто остановлен он был сразу уничтожен вот он был удален вот это очень хорошая вещь когда вы тестировать какие-то вещи

был сразу уничтожен вот он был удален вот это очень хорошая вещь когда вы тестировать какие-то вещи далее давайте опять запустим наш контейнер наш котэ не работает следующая вещь если вы приходите отдых куда-то на ферму и там запущенный контейнер но вы не знаете что за контейнеры как они были построены какие порты и у них открыты и так далее так как здесь вы видите что под у нас ничего нету давайте для наглядности еще запустим просто запустим и джинкс контейнер тока-тока ван индекс то есть это

для наглядности еще запустим просто запустим и джинкс контейнер тока-тока ван индекс то есть это веб-сервер тоже качает образ и видите что индекс lightest будет запущен давайте поток пока скачается и посмотрим что у нас отобразится на бортах это вещь очень интересное когда-то принципе всегда так нас карта не запустился в фронта нет то есть мы можем видеть лог которые происходят в контейнером давайте это основе contra отце и запустим заново наш контейнер по dt моде и даже с параметрами чтобы он

это основе contra отце и запустим заново наш контейнер по dt моде и даже с параметрами чтобы он удалялся все на запустилась дакар ps вот наша контейнера работает под нашу буду который был установлен до этого вот яндекс как видео в ubuntu открытых портов внутри нет в джон exe есть указанный порт который работает на данный момент в контейнер и это порт 80 кити пик и вот допустим такая ситуация вы пришли клади на ферму то запущена в контейнер но вы не совсем знаете что там как настроенный де

вы пришли клади на ферму то запущена в контейнер но вы не совсем знаете что там как настроенный де контейнер как они были собраны и какие настройки в них есть для этого есть такая команда такая inspect и указываем катыни контейнер 1 и здесь показывать вся информация которая относится к данным контейнером здесь также указывается порты которые были открыты здесь также указывается с какого как собирался этот контейнер и так далее в общем эта команда очень полезно если вы совершенно не знаете что

этот контейнер и так далее в общем эта команда очень полезно если вы совершенно не знаете что запущенный как работает данный контейнер что в нем внутри далее у нас есть контейнер которые требуют соответственно тоже ресурсов и иногда была такая ситуация что душа у стать какой контейнер сколько ресурсов требует и так далее да есть специальные утилиты которые это мониторят а это покажу кнопка этому мы позже вернемся чтобы посмотреть сколько какой-то определенный контейнер требует ресурса делать

мы позже вернемся чтобы посмотреть сколько какой-то определенный контейнер требует ресурса делать это с помощью команды до кастет и указанию пойти также мы здесь видим когда не едим и мир такой процесс сколько используется процессором они часто наши контейнеры абсолютно ничего не поэтому ноль процентов сколько ни памяти занимают очень медиа количество нагрузка на сеть нагрузка на диске сколько идет записывали так далее kontrol ц и давайте это подытожим чтобы запустить контейнер нам необходимо

записывали так далее kontrol ц и давайте это подытожим чтобы запустить контейнер нам необходимо если вас следующее сказать кому-то у дока ран потом указать если необходим каким-нибудь купцы например эта опция это еще мод опция удалить также можно указать имя которой мы хотим дать контейнер это будет минус минус name и указываем имя которой мы хотим допустим не запускать ubuntu и давайте назовем его мои fan trailer вот указать имя далее стоит указать иметь который мы их не запустить ubuntu

его мои fan trailer вот указать имя далее стоит указать иметь который мы их не запустить ubuntu допустим 2004 далее мы можем указать на подземную команду которую мы хотим сделать это будет нас допустим команда и ehome и аргумент который мы хотим передать их той команде допустим это целого дома дока вот и сделать эту команду итак запускаем дока уран далее указываем опции которые мы хотим использовать их может быть намного больше это еще будет дальше далее обязательно указываем и мы также если

их может быть намного больше это еще будет дальше далее обязательно указываем и мы также если выйти какой-то специальный иметь запустить версию какую-то специально не lightest то обязательно через двоеточие указывайте какую какой т.к. вы хотите использовать далее это не обязательно но можно передать дальше контейнеру команду которая должна запуститься в данном контейнер и аргументы которые будут переданы этой команде но если мы это все запустим то у нас запустился контейнер в в 2000 моде

будут переданы этой команде но если мы это все запустим то у нас запустился контейнер в в 2000 моде поэтому мы ничего здесь не увидели как что нам эхо сделал но давайте еще раз запустим только без тысяч и вот наш контейнер нам выдал low мая тока потому что запустил с команда их около ума и так далее будет интересно если мы сейчас запустим допустим индекс наш я вам покажу как можно зайти посмотреть локи если контейнер уже за пусть запущен только ран ну давайте минус 3 минус минус ему и containex

локи если контейнер уже за пусть запущен только ран ну давайте минус 3 минус минус ему и containex давайте его ему дадим и микроскоп покажу что такое вот так готова да как есть посмотрим в процесс вот наши доктора которые мы запускают до этого и вот видите тот контейнер который мы запускали до этого индекса бусин без параметра name и отдал какое-то имя а здесь мы запустили с определенным именем так проще управлять отелем даже мы можем указать дока стоп либо что то еще с помощью этого имени то

так проще управлять отелем даже мы можем указать дока стоп либо что то еще с помощью этого имени то ли допустим мы хотим промониторить какие лаги происходят в яндекс час наклона будет ну потому что там ничего не происходит но тем не менее если мы dent команду дока logs и укажем контейнер то мы видим последние лог которые были переданы этом катыни рад индекс то есть что такие влоги были в яндексе грубо говоря но если мы хотим пить lifelog то есть постоянно обновляющийся олафа lifelog уже сделать

говоря но если мы хотим пить lifelog то есть постоянно обновляющийся олафа lifelog уже сделать как параметр минус f мы поставим видим актуальные логе которые приходят на док контент это очень хорошо если вам нужно найти какую-то ошибку таро происходит либо какие-то процессы промониторить далее носили сейчас запущены и докеры дока контейнеры и так далее и мы хотим за кинах контейнер и что-то изменить это очень легко сделать давай посмотрим у нас to count они работают да капец и вот у нас есть

это очень легко сделать давай посмотрим у нас to count они работают да капец и вот у нас есть решение кс и ubuntu и таки мы зайдем на наш созданный индекс почему нет пишем тока exeq минус интерактив далее указываю контейнер эти либо имя мне будет удобно указать имя я хочу вот этот каток контейнер зайти под щит далее мы указываем что можем запустить бен дальше нужно правильно учится писать дока и все мы находимся внутри туфель хочу сразу что в док контейнерах не все из команды к которым вы

и все мы находимся внутри туфель хочу сразу что в док контейнерах не все из команды к которым вы привыкли той же ubuntu это все связано с тем что контейнеры должны быть минимальными минимум всего должно в них работой самое необходимо для работает того женщины допустим и вот мы находится в engine и всем как бы все здесь мы можем создавать файлы какие-то но те мелкие файлы будут утеряны при остановке токио это очень важно все файлы которые вы здесь создаете и не сделали assistance директории

токио это очень важно все файлы которые вы здесь создаете и не сделали assistance директории какие-то то они все будут утеряны ну к этому потом перейдем когда будем изучать burgers хорошо этом понятно выходим целью контейнера control-d посмотрим черт наши контейнеры до ктс это работающую контейнеры минус и это все контейнеры которые также запущенные которые были остановлены вот видите у нас один контейнер он остановлен и так же у нас есть и matters вот вот эти вот три вещи это нужно запомнить

контейнер он остановлен и так же у нас есть и matters вот вот эти вот три вещи это нужно запомнить они используя постоянно также потом мы будем просмотрите все другие вещи и давайте мы все уберем что мы то этого создавали это можно сделать конечно удалением сначала контейнеров мы можем ну давайте вот мы удалим engine x если мы начнем удалять engine иксу вот это то нам нужно сначала удалить восстановить контейнер который работает потом удалить контейнер который остановленный а потом и только

контейнер который работает потом удалить контейнер который остановленный а потом и только сможем ударить и матч вот но мы можем выделить и мач alpine дока крымов и мыть и этот и матч мы удаляем все у нас нету и мяча аль-байт но это очень долго бывает чтобы допустим не нужны ни час никакие имидже мы все скучаем и заново то можно сделать простой команду дока систем минус эй и сразу и хочу сказать что если вы собираетесь полностью удалять все все все то еще шаг и добавить параметры минус минус

что если вы собираетесь полностью удалять все все все то еще шаг и добавить параметры минус минус vadimus чтобы наверняка все удалить и здесь нам сразу как что будет удалено все контейнер будут все строен и контейнеры и так далее мы соглашаемся с этим все давайте посмотрим им еще у нас есть да потому что здесь указано о штопка поэтому нам нужно все контейнеры остановить дока из дока чтоб мы оставим все контейнеры хорошо и далее идем снова соглашаемся да и видим у нас уже намного больше ударила

все контейнеры хорошо и далее идем снова соглашаемся да и видим у нас уже намного больше ударила всего и сколько места мы освободили если мы сейчас снова сделаем команду и матч то у нас никаких imagenet есть нас ней никаких и мы же это у нас нет никаких контейнеров работающих и давайте перейдем ключики me эти рассмотрим работает port mapping либо проброс портов у нас есть сервер на нем установлен тока и допустим мы хотим установить веб-сервер допустим на основе engine x мы знаем что веб-сервера

тока и допустим мы хотим установить веб-сервер допустим на основе engine x мы знаем что веб-сервера использую протоколу http либо еще теперь с и соответственно для ищите пик протокола мы используем порт 80 этот порт мы рассмотрим у нас есть куплю на люди допустим это будет админы которые хотят убедиться к данным контейнеру на основе engine.exe что происходит они напрямую не могут прочитывать не с работы потому что порт открыт только на смог контейнере в одну данном случае если мы хотим дать

с работы потому что порт открыт только на смог контейнере в одну данном случае если мы хотим дать доступ снаружи кому-нибудь к данному серверу к данному именно контейнером то нужно запустить контейнер с тлеющей командой использовать параметр минус п то есть только руан там разные параметры и параметр минус п 8080 что там случае происходит этот эта цифра 1 это означает что порт 80 на самом сервере будет открыт и он пробрасываем в сам контейнер 80 и запускает x то есть почесть containex а вот

будет открыт и он пробрасываем в сам контейнер 80 и запускает x то есть почесть containex а вот команда и запускаем и контейнер и gemix то есть вот я просил слишком образом люди подключаются к api адресу либо доменном имени сервера на порт 80 и серию уже перебрасывает все запросы которые приходят на порт 80 именно в контейнер г-н дженкс web-сервер но что если мы хотим запустить на сервере в дока много инжирных серверов да они тоже будет работать на парте 80s как нам быть в этом случае в данном

много инжирных серверов да они тоже будет работать на парте 80s как нам быть в этом случае в данном случае мы можем использовать другой порт например порт 8080 ну либо любой другой это неважно команда будет выглядеть клещем образом мы пробрасываем порты 80 80 самого сервера в на порт 80 вам дока и все люди получается на порт 8080 сервера автоматически все запрос перебрасывается на порт 80 экшн икс контейнера вот так это работает теперь давайте посмотрим как работает на практике порт миг и

икс контейнера вот так это работает теперь давайте посмотрим как работает на практике порт миг и давайте запустим контейнер индекс пишем дакар план минус 3t чмоки давайте добавим еще параметр ней мы хотим назвать его просто допустим веб и запускаем и мяч engine x j скачивание самого имиджа и запустим потом контейнер кндр запустился проверяем доктора ps у нас есть и матч который запустился мы здесь видим под 80 и проходки себе то есть это означает что в контейнер и открыт порт 80 также мы это

видим под 80 и проходки себе то есть это означает что в контейнер и открыт порт 80 также мы это можем посмотреть использую помаду доком inspect и указать и аде контейнера либо имя поднимаясь мышка высшим и здесь указывается вот параметры порты которые открыты в самом контейнером и так хочу сказать что к этому порту мы подключиться не сможем это тоже можно проверить с помощью команды нет штат минус туркин видим что у нас на сервере нет открытого порта 80 то есть мы уже никак не сможет

штат минус туркин видим что у нас на сервере нет открытого порта 80 то есть мы уже никак не сможет подключиться к нашему серверу на порт 80 чтобы он потом выбрасывался контейнер давайте основе mnoj контейнер дока что он нам не нужен потому что ему пуджи и мы не можем и давайте изменим нашу команду обоим теперь параметр мэппинга минус п и укажем порт 80 на сервер должен перебрасываться в порт 80 в docker и давайте еще изменить имя в 1-ом это все у нас контейнера запустился смотрим дока ps и мы

в docker и давайте еще изменить имя в 1-ом это все у нас контейнера запустился смотрим дока ps и мы видим что у нас порт 80 самого сервера пробрасывать а в порт 80 на запустится feb 1 давайте проверим в браузере работать ли это все посмотрим айпи адрес нашего сервера я это скопирую переходим в браузер вводим нажимаем энтер все у нас работает вэлкам the phoenix прекрасным все хорошо давайте создадим еще один контейнер вот как мы на графике по картинке видели что этот контейнер нас работает мы к

еще один контейнер вот как мы на графике по картинке видели что этот контейнер нас работает мы к нему может учиться по порту 80 и мы создадим еще один в по сервер на основе джинкс и пробросить порт 8080 в контейнер давайте это сделаем и так изменю снова нашу команду это у нас будет b2 и порты 88 давайте посмотрим что будет если мы запустим те же порты у нас есть ошибка потому что порт баян два порта 8 лет field порт уже используется понятно хорошо теперь если мы все же здесь изменим порт 8080

8 лет field порт уже используется понятно хорошо теперь если мы все же здесь изменим порт 8080 мы даже то сейчас делаете можем потому что или дока попытался создать контейнер с именем web 2 и мы не можем задать еще и в контейнеры с именем в 2 это можно посмотреть да кпс минус и и вот у нас есть контейнер с именем web 2 но он остановлен он просто создан этот этот контейнер мы можем удалить дока вы ему r2 и давайте снова попытаемся запустить контейнер уже с правильным не портами как видим у нас

ему r2 и давайте снова попытаемся запустить контейнер уже с правильным не портами как видим у нас все запустилось проверяем дока пьес наши рабочие контейнеры у нас есть контейнер портами возят 8 то есть на сервере открытый порты 80 80 и открыт порт 8 для контейнера в один тоже может проверить нет штат минус тупым как это все выглядит на самом сервере нас порты 80 открытый порт 80 также открыты порты для api версии 6 будет 8 и порт 80 давайте придем в браузер и это все проверим сейчас мы

порты для api версии 6 будет 8 и порт 80 давайте придем в браузер и это все проверим сейчас мы большого изменение видим потому что у нас одинаковые сайт и здесь отображаются но мы можем это немножечко изменить и давайте зайдем на сам контейнер тока zic так минус itv1 и запустил команду бен дальше идем даша в директорию usa печки и джон x hdmi посмотрите здесь файлы находятся и здесь находятся файлы html по умолчанию то есть мы знаем что индекс html он запускается по умолчанию симу заходим на

html по умолчанию то есть мы знаем что индекс html он запускается по умолчанию симу заходим на сервер и давайте создадим новый и 7 файлик с таким содержанием их у давайте назовем это все веб один и закинем это все файлик тест тест . печкин хорошо посмотрим все у нас есть это мы сделаем на веб 1 и давайте снова перейдем браузер так это у нас 2 vip 2 лет у нас в перми и вызовем нас тест . estima все у нас работает в 1 если мы здесь попробую запросить и тот же файлик то у нас not found понятно и

у нас работает в 1 если мы здесь попробую запросить и тот же файлик то у нас not found понятно и давайте сделаем то же самое для второго сервера немножко потренируемся запуском эту же команду к для контейнера web 2 и еще одна чтобы выйти с ему контейнером достаточно нажать control ты виноват фар тоже идем usa шеф phoenix подписчики e-mail смотрим 10-го фалько такого нету той создадим эху в сова два и давайте такими-то все по тест . готов и со переходим браузер обновляем страницу и у нас есть

два и давайте такими-то все по тест . готов и со переходим браузер обновляем страницу и у нас есть привычка 2 вот так сми смогли запустить два веб-сервера на одном сервере используя просто различные порты зачастую хочу сказать сразу что чтобы не было каши с портами чтобы не нужно было знать где какой порт работает на этом месте вот здесь устанавливается proxy server то есть там уже он работает по dns запросам и он уже сам перенаправляет на необходимые порты запроса null а ты и так это теме

по dns запросам и он уже сам перенаправляет на необходимые порты запроса null а ты и так это теме далее давайте посмотрим где находятся описание портов для различных сервисов для различных контейнеров заходим на доках об и давайте зайдем сразу на то что мы использовали сейчас переходим jennings спускаемся ниже и да вот одной из вещей минус vi это валим из мы о них поговорим немножко попозже здесь вот указывается где находятся файлы контента которые можно изменять вот но это другая тема дали вот

вот указывается где находятся файлы контента которые можно изменять вот но это другая тема дали вот зачастую в документации к контейнерам можно найти строку описания какие порты используйте порты нужно перебрасывать с серверов в контейнер если это необходимо и вот здесь нам как пример нам показать что порт 8080 перебраться от порт 80 в контейнере это понятно помимо веб-серверов есть также очень огромное количество различных контейнеров которые также используется веб-сервера веб-ресурсы и

огромное количество различных контейнеров которые также используется веб-сервера веб-ресурсы и давайте на примере мы это посмотрим давайте grafana кто не знает что такое графа на это различные графики которые может создавать на основе мониторинга на основе других кита значений система очень классная но дело не в этом а делаем на в портах его сразу нас показывается в графа ним примера запуска акров она и здесь видно что порт предлагается три тысячи со сервер пробросить порт контейнера 3000 и

она и здесь видно что порт предлагается три тысячи со сервер пробросить порт контейнера 3000 и давайте это проверим давайте просто пусть им эту команду и просто копируем захожу на сервер control где выходим из контейнера и запускаем эту команду запускаем графа ну честно сокращается и мяч grafana строить в катыни у нас работают engine x engine x и вот grafana и мы видим что порты 3000 перебраться в порт 3000 давайте примерно работает ли это все заходим на наш тестовый сервер вот этот наш веб 2 и

порт 3000 давайте примерно работает ли это все заходим на наш тестовый сервер вот этот наш веб 2 и просто не import на 3000 все мы запустили стерео и grafana прекрасным очень просто да то есть скопировали команду запустили все работает талии есть мы посмотрим пример запуском давайте и лассе строчек листик search используя ниже и посмотрим пример запуска здесь нас интересует только вот этого часть мы видим что мы можем пробрасывать несколько портов в один контейнер то есть порты 2200 само озеро

мы видим что мы можем пробрасывать несколько портов в один контейнер то есть порты 2200 само озеро в парке в 1200 на контейнеры также 9300 то есть можно бросать больше кольца портов если это нужно имя для работы самого контейнера и еще один такой пример на основе адг от n кардхун это система для блокировки рекламы на основе dns есть на канале видео об этом но есть мы посмотрим как запускается этот контейнер мы видим здесь целый список порта потому что эта система она может dns и нужно

этот контейнер мы видим здесь целый список порта потому что эта система она может dns и нужно использовать различные порты для запросов по dns и так далее также на может дейхим делать но тем не менее здесь мы видим список портов которые необходимы для работы этого сервиса и вот здесь снизу зачастую есть вам примерах описания какие порты для чего использует если их большое количество это необычный веб-сервер вот так это все работает и давайте переходим стоящей теме

мы продолжаем одной из важных тем является то как сохранять наши данные которые были изменены в ходе работы контейнеров как мы знаем что если мы контейнеру убираем убиваем то наши данные теряются это происходит при сильной вот так у нас есть сервер у нас есть док контейнеры то есть сам доком работает и при запуске команды дока ран маску и мы получаем наш контейнер майской и и как мы знаем что в майской все данные хранятся по умолчанию в директории валик майской то же самое происходит если мы

майской все данные хранятся по умолчанию в директории валик майской то же самое происходит если мы посылки нибудь приложение до с помощью тока вран об допустим какое-то имя то какие то данные кита файлы конфигурации всякое такое сохраняется также fap lingerie тория ну допустим у нас будут какую-то определенное приложение но сохранять свои конфигурации в кесси ipconfig если же мы будем команды дока стоп москве и дока в риму в майскую то есть мы убиваем это контейнер мы убиваем не просто

дока стоп москве и дока в риму в майскую то есть мы убиваем это контейнер мы убиваем не просто контейнер мы убиваем полностью все наши данные нас их нету то есть они остаются не и то же самое происходит с приложением если мы убиваем основным и убиваем контейнер то нас также пропадает наши конфигурационные файлы либо файл которые были изменены в ходе работы приложения как же нам сохраните файл и что они у нас оставались если мы допустим хотим обновить наши контейнеры тоже сам кстати тогда

и что они у нас оставались если мы допустим хотим обновить наши контейнеры тоже сам кстати тогда происходит если мы хотим обновить контейнер допустим майской 5.7 версии мы хотим новый контейнер получить допустим какие то есть по читам по безопасности которой то нам нужно убить предыдущий контейнер запустить новый контейнер если мы убьем предыдущий контейнера то мы убьем сразу же эти данные итак давайте разберем как нам сохранить же данные вот эти данные и с довольно таки просто мы эти данные

давайте разберем как нам сохранить же данные вот эти данные и с довольно таки просто мы эти данные должны сохранять на самом сервере либо на хвосте то есть мы можем смонтировать определенной директории которые у нас есть на физическом сервере на жестком диске на физическом в дога контейнеры это называется ps estende то либо сохраняющуюся данные чтобы сделать вот такой вот соединение соединить наши директории в контейнерах и их как бы смонтировать на физический сервер или наоборот что нам нужно

директории в контейнерах и их как бы смонтировать на физический сервер или наоборот что нам нужно сделать есть три способа как сделать mount и давайте их разберем первый называется host уильямс и делается это следующим образом при запуске дока уран мы используем параметр -2 то есть в ольга мтс и указываем вот таким образом данный это в игре признанного таким образом то есть давайте разберемся если мы указываем минус и опыт москве alldata двоеточие и полип москве то есть слева стоит часть та

если мы указываем минус и опыт москве alldata двоеточие и полип москве то есть слева стоит часть та которая принадлежит самому серверу то есть физический сервер у него есть такие директории то с правой стороны находится директории в контейнере то есть мы монтируем вот эту вот часть левую часть в правую физический сервер по долго контейнер то есть у нас пусть опт москва это то эта часть она будет смонтирована валит москаль директорию то же самое с приложением допустим опыт этот конфиг будет

смонтирована валит москаль директорию то же самое с приложением допустим опыт этот конфиг будет смонтирована в эдессе ipconfig следующий тип это анонимные воли мы это дело с лечим образом то есть мы видим что у нас нет никаких : у нас просто указывается минус vi волю и указывается какой волю мы хотим смонтировать в контейнер морской и этого блестящим образом мы также монтируем определенная директория со жесткого диска в контейнер и но в этом случае нам довольно таки сложно понять какой именно

со жесткого диска в контейнер и но в этом случае нам довольно таки сложно понять какой именно выльем как он находится где он находится это мы попозже увидим я вам покажу как это все работает но что происходит в этом случае если мы указываем такую команду то у нас в директории valve до кого льюис потом какой-то фишка не берутся тока и потом минус дата и там уже хранятся данные которое находится valley по москве в контейнере mais quel то же самое происходит со второй директории который мы

valley по москве в контейнере mais quel то же самое происходит со второй директории который мы смонтировали в эти серии конфиг то есть там указываться хэш и следующий тип это name это именные волю мы это дело с лечим образом мы указываем просто имя вой ума и указом куда его нужно смонтировать что в этом случае происходит на севере на котором мы запускаем эту команду происходит создание директории повалий такого льюис и там создаются волю мы которая который мы хотим добавить в контейнер и вот

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

как работать с волю маме и вот эти вот три варианта а то ж мы все создадим переходим на сервер мы на нашем сервере где установлен docker и давайте посмотрим на своём и есть делается это командой дока болью или трест и видим у нас нет никаких пальмов и давайте для примера сразу же возьмем какой-то контейнер я выбор для этого gemix чтобы сразу могли видеть результаты и давайте спускаемся ниже посмотрим как запускать engine текст и о самой первой командой самой простой командой как это все сделать

как запускать engine текст и о самой первой командой самой простой командой как это все сделать давайте скопируем и разберемся что мы здесь будем делать вставляем и так мы создаем запускаю ней контейнер даем ему имя давайте in sin x давайте назовем его сразу просто для нас будет web 01 и вот наша команда что нас интересует минус vi это ворьем что нам предлагает сразу же яндекс это сам контент то есть что угодно мы можем смонтировать в эту директорию и дальше хочу заметить что есть стоит : р.у.

есть что угодно мы можем смонтировать в эту директорию и дальше хочу заметить что есть стоит : р.у. то есть это у it only что это значит что фонтейна который запустится он не имеет прав изменять что-то в этой директории он имеет право только читать вы it only да и мы запустим в скрытом режиме наш индекс ну и давайте я еще такую штуку посмотрим какие волю мы мы сможем и здесь использовать в данном случае у нас хост божьему то здесь указывать директория которая будет смонтирована в наш индекс

случае у нас хост божьему то здесь указывать директория которая будет смонтирована в наш индекс давайте уберем без это директория мы ничего здесь не будем добавлять просто запустим наш индекс что посреди работает ли он или нет проверим тока без хорошо и давайте зайдем посмотрим итак у нас опера адрес сервера вот этот вставляем к а почему ошибка так с предыдущим видео мы помним что нужно еще нам добавить port mapping и давайте это сделаем так от есть нам возрастных контейнер только стоп и

нам добавить port mapping и давайте это сделаем так от есть нам возрастных контейнер только стоп и указываем имя контейнера хорошо и давать его сразу же и утолим тока приму готова берем нашу предыдущую команду и добавляем мэппинг как мы помним это минус п и перебрасываем порты 80 80 в контейнер и все запуска готова проверяем у нас контейнер работает и давайте снова попробуем зайти и вот у нас кантемир запустился давайте сразу чтобы видно было адресная строка так все хорошо у нас как обычный

кантемир запустился давайте сразу чтобы видно было адресная строка так все хорошо у нас как обычный сайт стандартный которая инженера и давать мы изменим его чтобы нам было понятно что мы что-то меняем что что-то может быть пропасть что-то измениться и так в данном случае мы не смонтирована никакое в никакой директории что вы можете мы можем просто зайти на сам контейнер и там добавить какой-то файл давайте это сделаем и так пишем только xx интерактив мод далее указываем мы хотим web 01 и

файл давайте это сделаем и так пишем только xx интерактив мод далее указываем мы хотим web 01 и запущу команду бен дальше мы в контейнере и чтоб нам знать где нами изменять нашу директорию мы можем подняться нет верхней сможешь подняться потому что мы не запускали никакую директорию не монтировали мы сможем зайти на engine x оригинал и зайти вот в эту директорию здесь будут считываться еще имел файлы в эту территорию и так копируем и переходим в эту директорию смотрим что в ней у нас есть

файлы в эту территорию и так копируем и переходим в эту директорию смотрим что в ней у нас есть яндекс эскимо как мы знаем что по умолчанию web-сервер спрашивает файлы который называется index.htm если мы посмотрим то ем ты вот такие вот вещи в те которые мы видим в принципе в браузере но это другая тема 7 мы попробуем изменить этот файлик итак посмотрим есть у нас в установленный им индекс система win команды нету посмотрим на но также на ноги нет что нам в этом случае делать мы можем

система win команды нету посмотрим на но также на ноги нет что нам в этом случае делать мы можем воспользоваться командой всем известны кит и что мы сделаем мы добавим просто наш html файл в index.htm ок то есть мы изменим я это все пока tool и просто скопируем все что у нас здесь происходит мы добавляем это содержимое файлик индекс html хорошо enter готова проверяем и вот наша содержимое нашего фалика так только у нас осталось еще предыдущий шапкам но ладно пускай будто давайте снова обновим

фалика так только у нас осталось еще предыдущий шапкам но ладно пускай будто давайте снова обновим нашу страницу и мы видим что вот добавилось то что мы импортировали допустим у нас есть статический сайт вот наш он работает все страхует смотрят это дали все хорошо давайте проверим что будет если мы остановим контейнер умрешь случайно мало ли что там давайте выйдем с контейнером посмотрим эти хотя мы вас можем работать с именем и посмотрим да к стоп и web 01 хорошо но наш контейнер остался

хотя мы вас можем работать с именем и посмотрим да к стоп и web 01 хорошо но наш контейнер остался созданным то есть он есть что мы можем сделать мы можем токов старт и запустить наш контейнер хорошо все должно работать интересно наши данные оставим есть либо нет давайте обновим страницу до наши данные остались потому что мы остановили контейнер он был создан и сейчас если мы его убьем то наверно что-то измениться давайте попробуем только стоп p01 и также мы теперь удалим хорошо и давайте

что-то измениться давайте попробуем только стоп p01 и также мы теперь удалим хорошо и давайте создадим снова контейнер такой же с теми же именами с теми же портами с тем же именем о чем мы ничего изменять не будем вот так команды который мы запускали предыдущий контейнер что произойдет все мы запустили проверяем контейнер работает переходим на сайт обновляем увы наших данных там нет в чем это плохо то что если мы затем на яндекс прием выше то здесь есть теги допустим вы установили определенную

то что если мы затем на яндекс прием выше то здесь есть теги допустим вы установили определенную версию джексон один два один два три версии 1.2 3 и потом он выходит новое обновление новый патч и вы хотите чтоб это все обновилось загружать новый контейнер либо вы искусственный тест что еще хуже вы постоянно вы задали контейнер потом нужно обновить вы убиваете контейнер запускайте новый но вашего сайта уже нет вам заново нужно все импортировать и так далее это ну так не делают короче дальше

сайта уже нет вам заново нужно все импортировать и так далее это ну так не делают короче дальше давайте мы сделаем все таки с големами переходим давайте начнем его сверху и вниз и со 2-ым хост bogus переходим в папку опт и давайте зададим папку яндекс и в этой папке мы создадим еще одну папку ну назовем ее дата как данный наши будут снова давайте вернемся в к нашей предыдущей команды который мы запускали и добавим параметр value мы минус vi что мы хотим вас матировать в контейнер находится в об

и добавим параметр value мы минус vi что мы хотим вас матировать в контейнер находится в об engine x data то есть эту директорию мы хотим смонтировать в контейнер а куда мы хотим смонтировать это написано здесь это тоже directory куда мы заходили гид изменяли index.htm и давайте найдем эту директорию вот она и здесь также вот оно указывается яз копируем и вставляем и запускаем in phoenix да у нас контейнер создан предыдущем нужно его убить в пузырь один да ну все остановить потом удалить готова

контейнер создан предыдущем нужно его убить в пузырь один да ну все остановить потом удалить готова и давайте снова повторим нашу команду ничего страшно что с ошибки так мы учимся проверяем контейнер работает итак мы смонтировали 1 директорию контейнер и давайте посмотрим что у нас показывается на сайте у нас ничего нет странно почему потому что с директория пустая давайте заглянем в директорию у нас здесь ничего нету давайте штуки создадим файлик который мы хотим отобразить яндекс и схемы и

у нас здесь ничего нету давайте штуки создадим файлик который мы хотим отобразить яндекс и схемы и добавим то же самое содержимое которой было до этого вставляем вот наша содержимым сохраняем выходим хорошо давайте проверим работает ли у нас есть то содержимым которого мы сейчас ставили в этот файлик что произойдет если мы контейнер умрем давайте это сделаем . стоп в 1 далее его убиваем и давайте заново запустим вот мы монтируем ту же самую директорию в контейнер давайте сюда для проверки

заново запустим вот мы монтируем ту же самую директорию в контейнер давайте сюда для проверки посмотрим у нас в директории также есть этот индекс файлик хорошо запускаю поехали отлично и давайте сразу перейдем на сайт обновим страницу но все так же есть у нас всё те же измени есть и давайте для проверки чтобы наверняка что это не кеш или что то еще мы добавим что-нибудь и вот тема varius изменяем и и тему уильямс хорошо сохраняем выходим переходим снова наш сайтик и мы видим что у нас

изменяем и и тему уильямс хорошо сохраняем выходим переходим снова наш сайтик и мы видим что у нас изменились наши вещи давайте убьем контейнер хорошо так давайте запустим кирпич к отелям используя анонимный уволим то есть у нас будет использовать хэш давайте сначала посмотрим что в этих территориях есть переходе сидим вам клип докер у нас есть есть папочка боги мтс заходим волю мы и вот у нас в этой папке бы ничего нет давайте мы сделаем волюма как мы видим на картинке запускает нам контейнер

этой папке бы ничего нет давайте мы сделаем волюма как мы видим на картинке запускает нам контейнер нужно просто с параметром минус vi и просто указать куда мы будем монтировать в контейнер давайте это сделаем берем нашу предыдущую команду давайте сразу еще добавлю что наш контейнер при основе будут сразу удаляться вот так будет лучше видно берем переднюю часть все поехали хорошо докер работает и посмотри что вас папке values произошло и у нас есть будем это довольно-таки плохо что мы не

и посмотри что вас папке values произошло и у нас есть будем это довольно-таки плохо что мы не поймаем к чему это примонтирован а сейчас нужно смотреть в настройки самого доктора ну не суть и давай посмотрим на сайт обновляем страницу и у нас есть уголкам тут engine x как бы все работает давайте снова зайдем в этот валью хорош нас один контент мы знаем что это принадлежит этому контейнеру engine.exe переходим в data и здесь также лежит индекс файлик давать его изменим это все мы удаляем и

переходим в data и здесь также лежит индекс файлик давать его изменим это все мы удаляем и вставляем наш текст сохраняем выходим переходим на сайт обновляем как мы видим у нас теперь наша содержим отображается назвать прекрасно это работает давайте это мы удалим токов стоп b01 хорошо и давайте посмотрим какие волен у нас есть созданные и воли мы знает наш допер пишем доком полем с у нас не отображается некие воды мы давайте вернемся в нашу предыдущую директорию и как мы видим она также

отображается некие воды мы давайте вернемся в нашу предыдущую директорию и как мы видим она также удалилась вместе с докером то есть если мы удаляем докер то это директория также удаляется мы можем это проверить пуль умах до нас кинет что мы можем сделать вывод так запуская до хера не стоит хорошо и давайте еще сделаем последнюю команду которая самая распространенная в ней не команда будем и которые мы можем использовать это именные полем и и давайте запустим нашу команду сам параметрам просто

мы можем использовать это именные полем и и давайте запустим нашу команду сам параметрам просто будем и имя какой-нибудь давайте это сделаем так давайте очистим экран чтобы удобнее было где наш код вводим и давать назовем в data мы монтируем матчем доктор запустился все прекрасно давайте проверим работает ли обновляем письменностью работает далее 100 войдем в lib.ru альянс смотрите нас volume ага у нас есть уже в птт дата прекрасно заходим в appdata здесь также есть под дата но как мы видим у

у нас есть уже в птт дата прекрасно заходим в appdata здесь также есть под дата но как мы видим у нас уже не просто какой-то her был создан а у нас создан он был именно именной волю и здесь так же у нас есть яндекс html давайте вы изменять не будем я думаю вы меня верить и носова что она так все и останется что придут есть мы убьем докер у нас все остается по-прежнему у нас дата также есть и давайте запустим еще до к валим посмотрите позволим и есть и у нас здесь отображается волен который есть

запустим еще до к валим посмотрите позволим и есть и у нас здесь отображается волен который есть дальше это один из способов то есть мы таким образом мы создали контейнер экшн икс запустили контейнер создали же сразу же в этой же команде я мы создали вакуум в директории контейнера да у докера то есть валим тока хорошо еще есть другой способ как создавать волюма это будет доком куэйд и название улема которое мы хотим ну допустим мы хотим enforce неважно один момент здесь при запуске докера в

улема которое мы хотим ну допустим мы хотим enforce неважно один момент здесь при запуске докера в данном случае он попытался запустить контейнер infos но такого нету нужно указать дока воин привет infuse готово теперь снова дока болью и у нас есть два бульон к примеру вы использовать контейнер дам нашим что сейчас вот у нас engine x работал который мы убили но game не осталось возводим его мы уже больше не нужен вы видите что он висит занимает место и так далее и вот стоит удалить он вам не

уже больше не нужен вы видите что он висит занимает место и так далее и вот стоит удалить он вам не нужен это дело слечь образом только болью то есть мы хотим работать с пальмами приму им название волюма веб дата проверяем у нас его нету и также infos нам тоже уже не нужно готова прекрасно и давайте сейчас позвольте несколько примеров по использованию во львов я бы себя посмотрели и gemix это довольно простой пример где использует только один в он сам здесь не очень много монтируется и все я

простой пример где использует только один в он сам здесь не очень много монтируется и все я хотел вам показать на примере них склад да это платформе на их канале есть о нем video club платформам можно самому на своих серверах это разворачивать так вот надо к хобби страничка next надо и давайте посмотрим как он запускается так спускаемся ниже это тоже простой запуск у нас интересует расширение вот давайте разберем у нас запускается докер никс клауд и монтируется будем и mixcloud в эту директорию

давайте разберем у нас запускается докер никс клауд и монтируется будем и mixcloud в эту директорию 8 и директорию далее ips то есть какие-то приложения это пользовательский приложением какие-то конфигурация в также отдельно монтируется отдельно монтируется дата и и так далее давайте это все мы сделаем давайте мы это все скопируем мы запускаем докер-контейнер в тысяч моде то есть в бэкграунде вставляем далее мы монтируем нашу волю ну давайте перед этим да вами ему имя давать это будет мост next

далее мы монтируем нашу волю ну давайте перед этим да вами ему имя давать это будет мост next glow так мы сказали что дальше идет мы монтируем один болью ну и этот форум и монтировать не будем этой темы какие-то которая монтируется и будем запускать на x club да все хорошо но в таком случае мы запустим именно вот вот эти вот волю мы саду саду у нас в эту директорию в директорию доктора вален у нас дуться волю мы для них склада ну давайте мы так сделал и просто посмотрим что будет j скачиваем

нас дуться волю мы для них склада ну давайте мы так сделал и просто посмотрим что будет j скачиваем никс поводом я пока нажму на паузу для вас это буквально одна секунда давайте посмотрим доком ps у нас окна и работает но что мы забыли мы забыли пробросить порты то есть порт 80 открыт в контейнер и not не открыть на хостел то есть мы к нему достучаться не сможем давать контейнер остановим только стоп next клауд ну и давать его удалил мою где он заново красиво так и пробрасываем порты 80 и когда

next клауд ну и давать его удалил мою где он заново красиво так и пробрасываем порты 80 и когда r8 хорошо все запустилось отлично смотрим кто хоккеист все работает порты про брошенный и давайте зайдём теперь на наш сайт посмотрим работает ли он или нет так это наша индекс бывший и все отлично у нас запустился mixcloud да тут можно установить и так далее в общем он работает и давать построишь у нас происходит с директориями и докер боремся ему мечта у нас пачка wolf была создана для работы в

нас происходит с директориями и докер боремся ему мечта у нас пачка wolf была создана для работы в снег склада вот так это работает показываются болью мы я вам показал как они удаляются и при создании контейнеров не забывайте никогда создавать постоянное место хранение для ваших данных иначе будет очень обидно что ваши данные просто потеряете за того что вы остановили и утолили обновили контейнер все приходят к системе

06-Docker: Сети в докер. Network: bridge, host, none, macvlan, ipvlan

и мы продолжаем сейчас мы рассмотрим одну из самых интересных и сложных тем которые касаются Докера это будет doca Network сети в докере Я думал что это будет маленькая короткая тема но нет она оказалась довольно таки обширной и интересной на данном видео не будет много слайдов но будет много Стрелок и прямоугольников и давайте мы начнем У нас есть сервер на котором работает докер там работает какой-то Linux и у нас Мы запустили токер и мы сразу же получаем новый интерфейс Я думаю вы все Знамени

Linux и у нас Мы запустили токер и мы сразу же получаем новый интерфейс Я думаю вы все Знамени когда запустили докер мы получаем интерфейс Дока 0 при создании Докера при запуске мы получаем несколько типов сетей по умолчанию которую уже есть уже нам докер их предоставляет Это тип сети Bridge Host и Non тип сети Bridge - Это тип сети по умолчанию при запуске контейнеров обычным способом доктор ран и в названии имиджа он попадает в сеть Bridge это сеть по умолчанию Она имеет зачастую по умолчанию

и в названии имиджа он попадает в сеть Bridge это сеть по умолчанию Она имеет зачастую по умолчанию сеть 182 1700 слэш 16 это стоит запомнить Потому что постоянно Когда вы запускаете докер для теста или чего-то еще контейнеры все попадают в эту сеть сети Bridge контейнер который в этой сети находится они имеют сразу же доступ наружу то есть они могут получаться к другим серверам они могут подключаться к интернету очень имеется доступ также мы контейнером можем подключиться локально и чтобы нам

к интернету очень имеется доступ также мы контейнером можем подключиться локально и чтобы нам подключиться Извне контейнеру нам нужно сделать так называемый мостик Bridge поэтому называется это Bridge Он соединяет сам контейнер IP адрес контейнера с IP адресом сервера чтобы нам включится к контейнеру который работает в сети Bridge нам нужно создать мостик и этот мостик создается с помощью параметра минус пи то есть порт mapping которым изучили до этого И что происходит у нас получается мы

минус пи то есть порт mapping которым изучили до этого И что происходит у нас получается мы Соединяем порт 80 Хоста с портом 80 контейнера Но это случай есть мы запускаем если запускается другая программа которая имеет графическую оболочку либо что-то еще то парты могут изменяться Ну суть не в том Суть в том что мы ужасным так называемый мостик Бридж и таким образом мы сможем подключиться именно к нашему контейнеру Если же мы хотим запустить контейнер в кипе в сети Host то нам нужно указать

к нашему контейнеру Если же мы хотим запустить контейнер в кипе в сети Host то нам нужно указать параметр Network и Указать тип сети Host то когда контейнеры здесь создаются Они получают IP адрес именно Хоста Да они отличаются портами и так далее но тем не менее не получает IP адрес Хоста эти контейнеры также могут подключаться наружу выходить наружу в интернет скачивать что-то еще передавать какие-то данные можем к ним подключаться локально и чтобы нам подключиться к контейнеру допустим просто

данные можем к ним подключаться локально и чтобы нам подключиться к контейнеру допустим просто указать ip-адреса самого Хоста и указать порт либо пор не указано если мы в браузер то браузер по умолчанию идет 80 либо 43 Да но если нам какой-то контейнер другим портом то нам стоит указать именно IP адрес самого сервера Ну таким образом И следующий если мы хотим создать контейнеры в кие сети но то нам нужно соответственно указать параметр минус Минус Network и тип сети но в данном случае мы никак

нужно соответственно указать параметр минус Минус Network и тип сети но в данном случае мы никак не сможем подключиться к контейнеру из вне то есть ну нет доступа у него нет ip-адреса мы не сможем подключиться к контейнеру локально потому что также нету у него своего IP адреса но мы сможем зайти на контейнер подключиться непосредственно к самому контейнеру не через IP адрес не через порт какой-то посмотреть там допустим но мы сможем посмотреть Локи и запустить какие-то программы можно быть в

посмотреть там допустим но мы сможем посмотреть Локи и запустить какие-то программы можно быть в самом контейнере это три основных типа сетей которые создаются с докером автоматически то есть не сразу же есть мы это увидим на практике но наверное было бы довольно таки Просто если было всего лишь три типа поэтому Давайте добавим еще следующий тип сети это Мег вилан и ipv вела эти два типа мы рассмотрим немножко позже я их пока что опущу из еще один есть тип orelay он из пустота когда тока

рассмотрим немножко позже я их пока что опущу из еще один есть тип orelay он из пустота когда тока запускается в кластере как кластер только допустим используется только свом это тип сети я рассматривать не буду так как мы не будем рассматривать только свом и как бы это немножечко уходит в прошлое но тем не менее стоит знать есть кто-то хочет очень просто использовать кластер только в кластере то конечно да только с вам это прощает его много раз но все же давайте рассмотрим эти три типа сетей

конечно да только с вам это прощает его много раз но все же давайте рассмотрим эти три типа сетей Breach host Итак переходим к Bridge что у нас происходит у нас есть сервер где работает токер и у нас есть как я говорил уже по умолчанию один Бридж дефолтная сеть сеть по умолчанию если мы запускаем контейнеры как я уже говорил обычным образом doca Run и название имиджа создаем контейнер то он попадает именно в эту сеть в дефолт мы создаем один контейнер второй контейнер 10 как я говорил эти

попадает именно в эту сеть в дефолт мы создаем один контейнер второй контейнер 10 как я говорил эти контейнеры могут выходить наружу можно к ним подключаться и так далее создавать мостики такие Кроме того данный контейнеры могут общаться между собой Они получают IP адреса какие-то Рандомные IP адреса в этой сети они могут общаться именно по IP адреса между собой но они не могут общаться между собой используя свои имена То есть как бы домены имена которые получают они при создании контейнера наш

используя свои имена То есть как бы домены имена которые получают они при создании контейнера наш сервер также может получиться данным контейнером и как бы ничего страшного но что делать когда мы убиваем контейнер за на создаем то Они получают какие-то Рандомные снова ip-адреса могут получать нам было удобно было бы использовать именно доменные имена нам нужно создать новую сеть допустим создаем тип сети Bridge Это я за следующим образом до connetwork Create мы создаем сеть новую указываем

тип сети Bridge Это я за следующим образом до connetwork Create мы создаем сеть новую указываем Drive Bridge и указываем имя которое мы хотим дать нашей сети если мы не указываем этот параметр Drive то сей создается автоматически типа Бридж то есть данная вещь можно опустить сразу же сеть создаться типа Bridge Ну и Допустим мы хотим создать имя майонель Мы создали новую сеть и хотим запустить контейнер чтобы запустить контейнер именно в этой сети не просто до Коран и они запустится в дефолтной

чтобы запустить контейнер именно в этой сети не просто до Коран и они запустится в дефолтной сети а именно в нашей новой сети нам нужно указать параметр минус Минус нет либо минус Минус и указать My net1 и указать название имиджа который мы хотим запустить допустим останется при инженекс мы запустили два контейнера то в этой сети уже эти контейнеры они могут общаться между собой допустим этот контейнер приложения Engine X а вторая база данных допустим так как контейнер в этой сети получать свои

приложения Engine X а вторая база данных допустим так как контейнер в этой сети получать свои ip-адреса там 172 17 и так далее они могут общаться по адресам и также они могут общаться по DNS именам это те имена которые мы указываем допустим в параметре минус Минус name и название контейнера либо если мы этого не делаем то докер присваивает какой-то имя контейнер то есть мы можем использовать это имя для подключения к контейнерам и также можем подключаться к этим контейнерам локально но мы можем

для подключения к контейнерам и также можем подключаться к этим контейнерам локально но мы можем между ними общаться но две сети дефолтная Сеть и Наша сеть Они между собой общаться не могут Ну и Давайте посмотрим если мы создадим еще одну сеть также свою дефолтную назовем ее майонез 2 создадим там два контейнера то в этом случае мы также К сожалению сможем Соединить две сети майнет один и майонез 2 Это хорошо тем что мы можем изолировать два приложения полностью добавлять какой-то безопасности

2 Это хорошо тем что мы можем изолировать два приложения полностью добавлять какой-то безопасности этим контейнером мы тоже можем локально в следующую сеть сеть хост она создается также указывается драйвер Host на и название сети и что здесь происходит если мы создали данную сеть У нас есть сервер с докером мы создадим два контейнера то эти контейнеры могут общаться между собой и также серый можно к ним подключаться непосредственно и также эти контейнеры которые здесь создаются Они получают

к ним подключаться непосредственно и также эти контейнеры которые здесь создаются Они получают своего ip-адреса они используют IP адрес именно самого Хоста поэтому называется сеть хост вот этим Мы хотим включиться к какому-то из контейнеров Извне то нам нужно указывать именно IP адрес нашего сервера И следующий тип сети это Но это довольно таки самая простая Тип который в принципе редко очень используется он создает с помощью Drive Now что происходит у нас есть тира с докером из сотные два

используется он создает с помощью Drive Now что происходит у нас есть тира с докером из сотные два контейнера как картинки уже можно понять что эти контейнеры они изолированы сами по себе Да мы не можем непосредственно подключиться к ним то есть к по IP адресам к портам но мы можем запустить на них какие-то команды локальные и так далее Я думаю это более-менее понятно с контейнером это три основных типа в основном используются Ну наверное в 95 случаев используя тип Бридж иногда используется тип

типа в основном используются Ну наверное в 95 случаев используя тип Бридж иногда используется тип хост Ну также существует два типа которые очень интересные именно со стороны сетей это Мэг вилан и ipvr и Давайте представим У нас есть сервер Дока хост и как и все сервера У нас есть IP адрес у нас есть сетевая карточка 0 С таким IP адрес если мы уже говорим о IP Van то приходит на ум что это что-то сети связано именно с вилланами когда мы говорим о сети то стоит отобразить сетевое оборудование я

сети связано именно с вилланами когда мы говорим о сети то стоит отобразить сетевое оборудование я отображу здесь Switch Так им на Switch работает с вилами и понятно дело что через Switch идет подключение к нашему серверу и давайте мы запустим два контейнера именно в сети mackvielan что происходит данный контейнеры Они получают свои карточки сетевые и также соответственно свои ip-адреса Вот и мы уже непосредственно можем подключиться сразу же по ip-адресу без указания портов Ну или указывать

уже непосредственно можем подключиться сразу же по ip-адресу без указания портов Ну или указывать порты если это нужно но тем не менее можно непосредственно подключиться именно к контейнерам непосредственно но при создании контейнеров сети происходит следующее сервер имеет силу карточку карту сетевая карта имеет свой mac-адрес допустим он у сервера вот такой то контейнеры в этой сети Они получают свои mac-адреса что упрощает намного маршрутизацию им на свеча он знает уже непосредственно Где

свои mac-адреса что упрощает намного маршрутизацию им на свеча он знает уже непосредственно Где находится какая адрес находится и так далее и идет подключением непосредственно к контейнерам Что происходит с типом сети apivion у нас также есть сервер с IP адресом также контейнеры в этой сети получает свои ip-адреса но Мэг адрес он остается без изменений то есть контейнеры получают и на сетевые карты контейнера получает те же mac-адреса что и наш сервер вот ну и подключение происходит таким же

контейнера получает те же mac-адреса что и наш сервер вот ну и подключение происходит таким же обычным образом Вот так мы разобрали все типы сети которые используются в докере и Давайте перейдем к практике посмотрим как это все работает создадим пару сетей и что будет делать именно контейнером переходим на сервер именно сервере Где работает доктор Давайте посмотрим на сервере Какие сетевые интерфейс У нас есть пишем и видим что у нас есть интерфейс и ns-18 это сетевая карточка виртуальной

У нас есть пишем и видим что у нас есть интерфейс и ns-18 это сетевая карточка виртуальной машины да и с локальным ip-адресом и также сетевая карточка Докера как виртуальная карточка И у нас есть в докере также API адрес и указывается маска сети Хорошо давайте посмотрим У нас есть типа сетей в докере пишем Network и лист и мы видим у нас есть три типа сетей это Bridge Host и но понятно Это стандартные все вещи которые создаются при установке Докера создадим свою собственную сеть Итак пишем дока

все вещи которые создаются при установке Докера создадим свою собственную сеть Итак пишем дока стали мы хотим создавать сеть поэтому Network пишем дальше круит как бы мы хотим это сделать И Давайте напишем май нет 01 допустим Хорошо давайте посмотрим что у нас появилось дока Нетворк с и у нас наша новая сеть появилась с драйвером Бридж как я говорил что сеть Если вы создаете без каких-либо параметров без указания драйвера она появляется сразу автоматическая в драйвером Bridge А что будет если

без указания драйвера она появляется сразу автоматическая в драйвером Bridge А что будет если мы создадим драйвером Host Давайте попробуем дока Network Creed минус Минус либо можно просто указать минус Din далее указываем драйвер Host и Давайте назовем дадим имя май нет хвост и видите сейчас что получится Вот мы не можем создавать больше одной сети типа хост потому что все контейнеры которые создаются на сервере в этой сети они создаются как бы как будто вы Установите программу на сам сервер то

на сервере в этой сети они создаются как бы как будто вы Установите программу на сам сервер то есть этот контейнер будет использовать вот этот интерфейс вот поэтому только один возможный хорошо Поехали дальше Теперь давайте создадим драйвер ноль то есть не нуль А 0 то есть пустота минус Din и майонез Вот так и мы видим Что также мы не можем создать больше одной сети типа 0 потому что все контейнеры в этой сети они также ничего не спуск не пустить его карту Не используют то есть мы просто

в этой сети они также ничего не спуск не пустить его карту Не используют то есть мы просто контейнеры и не создаются без ничего пустые хорошо Мы создали какую-то сеть Она как-то работает хорошо давайте немножечко посмотрим вот допустим на сервер и у нас есть какая-то сеть мы не ничего не знаем как нам быть как нам узнать информацию этого пишем только и указываем либо имя сети либо Network ID нажимаем Enter и мы видим здесь как бы настройка вот самой сети как она будет настраивать 172 19 слэш 16

Enter и мы видим здесь как бы настройка вот самой сети как она будет настраивать 172 19 слэш 16 Ну и небольшой информации еще о сети самой вот таким образом мы сможете узнать не запуска ники контейнеров Какая сети здесь настроена С каким параметры это такой вот маленькая информация далее давайте начнем мы создавать контейнеры и пробуй как-нибудь работать но перед этим Давайте мы создадим какую-то не дефолтную сеть то есть Мы создали просто Мы создали сеть которая типа Бридж но мы хотим указать

не дефолтную сеть то есть Мы создали просто Мы создали сеть которая типа Бридж но мы хотим указать какой ip-адреса мы хотим именно использовать как это можно сделать Ну и давайте сделаем пишем только как обычно Create мы создаем далее указываем тип драйвера Bridge либо можем ничего не указано давайте для нога Насти укажем далее мы указываем вот как здесь принципе subnet вот здесь у нас было 112 19 но мы хотим допустим вообще другую се взять Давайте 192 168 Ну я не знаю Давайте возьмем 10.0 слэш

но мы хотим допустим вообще другую се взять Давайте 192 168 Ну я не знаю Давайте возьмем 10.0 слэш 24 то есть мы возьмем намного меньше сеть далее указываем то есть куда будет идти наш пакеты и допустим 2 168 101 как бы по стандарту и дадим название май нет 192 вот как по названию наш момент отлично сеть осталось мы можем уже самим указывать что мы хотим создавать это прекрасно вообще очень удобно пишем только и Давайте ее проанализируем тока Network inspect и название сети и вот Наша сеть то

пишем только и Давайте ее проанализируем тока Network inspect и название сети и вот Наша сеть то есть Таким образом мы создаем свои собственные сети хорошо Допустим мы насоздавали этих сетей очень большое количество создавали контейнеры и так далее и видим что нам эти сети вообще не нужны абсолютно вот эти вот локальные такие маленькие сети как нам быть просто их можем удалить Для этого стоит только для того и далее указать название сети либо также их один все они удалились нас этого больше

только для того и далее указать название сети либо также их один все они удалились нас этого больше ничего нет Все прекрасно Давайте теперь перейдем все же к анализу Как нам делать контейнера чтобы они правильно корректно все работали Итак давайте для этого в основном определенные контейнеры чтобы могли анализировать Почему нельзя взять обычный контейнер допустим бунту либо инженекс либо какой-либо другой потому что основа контейнеров докеров - это как можно маленький контейнер иметь Как можно

другой потому что основа контейнеров докеров - это как можно маленький контейнер иметь Как можно маленький образ То есть он уже работает только с одной программой которая для которой он предназначен и поэтому возьмём на контейнер который предназначен для анализа сетей то есть в нем уже есть все утилиты которые делают это возможно и придем на доках Я нашел два контейнера в которых уже есть предусмотрены все утилиты для анализа сети это не ту и второй это netshot Ну давайте будем использовать

все утилиты для анализа сети это не ту и второй это netshot Ну давайте будем использовать netfood так как никак здесь больше всего скачивание 50 плюс миллионов А в этом контейнеры 100 тысяч плюс Ну как бы оба они хороши и нам будет достаточно любого из них возьмем letshot и если снизу посмотреть как не запускается то вот таким вот командами мы можем запускать наши контейнеры так если мы сделаем Просто только Run и наш контейнер сейчас [музыка] и вставим наш контейнер запустим наш контейнер

Просто только Run и наш контейнер сейчас [музыка] и вставим наш контейнер запустим наш контейнер Только бы у нас ничего интересного получится под он работать не будет потому что в нем не работает никакая программа Посмотрим это проверим ничего не работает вот то есть он сразу же останется он запустился и остановился нам это не нужно Давайте его удалим хорошо и Давайте теперь все-таки запустим правильно Так давайте пишем Дока далее Мы хотим его удалять при установке далее мы должны его запустить

Так давайте пишем Дока далее Мы хотим его удалять при установке далее мы должны его запустить в introke Mode чтобы сразу него войти и можно в нем работать было далее укажем ему имя чтобы не путались допустим контейна Один Ну и теперь указываем наш контейнер то есть наш который хотим запустить при этом подключимся это будет так надо быть внимательным видео запись была прервана поэтому рассмотрим уже запущен контейнер Итак у нас запустился контейнер который для анализа нашей сети есть мы ведем

уже запущен контейнер Итак у нас запустился контейнер который для анализа нашей сети есть мы ведем команду IP то мы посмотрим ТИА петриса которые уже есть в контейнере и мы видим У нас есть ip-адрес 152 1702 Также можно попробовать сделать Pink допустим google.com и мы видим что Пинг у нас также работает отлично но для анализа сети между контейнерами нам хорошо бы использовать второй контейнер поэтому давайте сейчас я расстелю экран и чтобы нам было сразу видно оба контейнера так будет удобно и

давайте сейчас я расстелю экран и чтобы нам было сразу видно оба контейнера так будет удобно и Давайте запустим второй контейнер будет использовать такую же команду как и до этого скопируем ее вставляем и давать немножко изменим что будет имя контейнер номер два так запускаем второй контейнер посмотрим какой адрес у нас есть у нас в конце тройка здесь у нас двойка и Давайте посмотрим Сможем ли мы сделать с одного сервера на второй Давайте попробуем здесь пишем и указываем IP адрес нашего

ли мы сделать с одного сервера на второй Давайте попробуем здесь пишем и указываем IP адрес нашего сервера отлично Пинк у нас работает и можно сработает DNS то есть Можем ли мы сделать Пинг именно не по IP адресу а подключиться непосредственно к самому контейнеру сделать Пинг по его имени как минимум с контейнер называется контейнер 2 Давайте посмотрим делаем Нет к сожалению мы это сделать не можем дома можем подключаться между контейнерами по их адресам это прекрасно Хорошо давайте еще

не можем дома можем подключаться между контейнерами по их адресам это прекрасно Хорошо давайте еще проанализируем какой В какой сети они находятся То есть если вы допустим не знаете В какой сети находится какой-то контейнер Давайте с одного мы выйдем посмотрим какие контейнер у нас работают У нас есть один контейнер но как мы видим здесь не указывается нигде IP адрес Как нам в этом случае быть пишем дока inspect и уже указываем имя контейнера либо ID ну в основном контейнер хорошо Мы зашли на

дока inspect и уже указываем имя контейнера либо ID ну в основном контейнер хорошо Мы зашли на сам контейнер и Давайте здесь сразу видно у нас ip-адрес контейнера его Gateway и так далее То есть Так мы можем проанализировать В какой сети находится тот либо другой контейнер хорошо мы сейчас выяснили что у нас не работает привязка по DNS Как нам в этом случае быть мы можем создать свой собственную сеть и потом добавить туда контейнера либо еще проще еще изначально создавать сеть а потом уже

сеть и потом добавить туда контейнера либо еще проще еще изначально создавать сеть а потом уже запускать контейнеры уже в нужной сети давайте сделаем сеть дока только Network quid и Давайте назовем My net 01 хорошо она создала сеть можно проверить Дока нет урок с она создала сеть My Network и драйвер быть и Давайте запустим те же контейнеры только уже в этой сети Давайте возьмем наш контейнер имя контейнером у нас был контейнер один даль укажем минус нет и далее указываем имя сети где мы хотим

контейнером у нас был контейнер один даль укажем минус нет и далее указываем имя сети где мы хотим запустить его все запускаем минус Минус нет отлично с контейнер работает посмотрим вот у нас видите уже не 17 здесь а уже 20 с 16 и здесь мы сделаем то же самое только контейнер 2 назовем это один контейнер 2 готово посмотрим действие адрес все есть мы в одинаковой сети находимся попробуем сделать Пинг это работает также будет здесь тоже самое работать все есть а теперь Сможем ли мы сделать Пинг

Пинг это работает также будет здесь тоже самое работать все есть а теперь Сможем ли мы сделать Пинг по имени Пинг и контейнер 2 и у нас тоже это все работает вот так очень легко связать контейнеры что не нужно указывать какой IP адрес сейчас какого-то контейнера есть просто запускаете ни о чем не думайте и все можно по имени к нему подключаться все хорошо это прекрасно работает что быть если мы запустили контейнеры они уже работают мы не хотим их там убивать как-то перебивать и так далее как на

контейнеры они уже работают мы не хотим их там убивать как-то перебивать и так далее как на них переместить в другую сеть ну Давайте попробуем сделать Давайте убьем это контейнер и Давайте его запустим без указания какой-либо сети хорошо посмотрим ip-адрес у нас IP адрес и снова 172 17 проверим что мы не можем к нему подключиться до вас нет к нему доступа но нам хочется этот контейнер переместить в ту же сеть Где находится этот контейнер как нам быть допустим у нас это веб сервер это у нас база

в ту же сеть Где находится этот контейнер как нам быть допустим у нас это веб сервер это у нас база данных Давайте попробуем сделать нам нужно сейчас убить будет один контейнер Ну ладно допустим он будет работать дальше мы будем снимать контейнер остается работает вот этот вот верхний то как пьес и вот вы видим наш контейнер 2 который мы запускали сверху что ж дальше пишем только Network Connect то есть мы хотим подключить к нашей сети которая у нас указывалась майонез 01 которая создана и мы

то есть мы хотим подключить к нашей сети которая у нас указывалась майонез 01 которая создана и мы хотим подключить контейнера 2 все посмотрим Дока у нас контейнер также работает по-прежнему посмотрим здесь IP адреса и мы видим что мы находим сейчас в двух сетях кабы Тоже неплохо но от старости Мы хотим отключиться Давайте посмотрим если мы сделаем дока inspect нашего контейнера то мы здесь увидим Network ID это вот новая сеть которая мы находимся вот 172 20 и сверху будет наша старая сеть то

Network ID это вот новая сеть которая мы находимся вот 172 20 и сверху будет наша старая сеть то есть мы можем использовать именно вот этот Network ID для того чтобы отключиться от сети И мы здесь выше видим у нас тип Bridge То есть у нас две сети Вот первая сеть типа Бридж и вот вторая сеть типа ближе но у нее название есть майонез 01 что ж мы включимся от этой сети нам нужно для этого Network ID и пишем Давайте еще раз доступ и только Network is Connect мы а хотим отключиться от чего мы хотим

и пишем Давайте еще раз доступ и только Network is Connect мы а хотим отключиться от чего мы хотим отключиться тип сети верней АйТи в нашем случае будет Давайте уберем так и название контейнера прекрасно ошибок нет уже Хорошо посмотрим какие айпи адреса у нас теперь остались и у нас есть только один IP адрес Вот так мы можем передвигать контейнеры с одной сети в другую и при этом они остаются работать дальше Может в один контейнер мы можем получить ко многим сетям очень многим это очень удобно

дальше Может в один контейнер мы можем получить ко многим сетям очень многим это очень удобно когда допустим у нас работает прокси сервер и у нас также есть много сетей много маленьких контейнеров там веб-серверов которые находятся за прокси и мы просто прокси получаем к каждому каждой сети Где работает маленький контейнер это повышает намного безопасность сами контейнеры между собой разговаривать не могут естественно не могут через прокси выходить тем не менее они могут непосредственно друг с

не могут естественно не могут через прокси выходить тем не менее они могут непосредственно друг с другом работать Это намного лучше чем они находились просто в одной сети я думаю сами будет понятно Давайте посмотрим на схему которую мы видели У нас есть мы это рассмотрели у нас из и контейнеры в Сити по умолчанию где мы могли делать Пинг но у нас не было DNS DNS у нас не работал Здесь также мы Создали нашу одну сеть и давайте сейчас создадим еще одну сеть и посмотрим Сможем ли мы между собой

Создали нашу одну сеть и давайте сейчас создадим еще одну сеть и посмотрим Сможем ли мы между собой это все запускать думаю вы же тогда что мы этого делать не сможем но тени дать это попробуем Давайте снова найду и сделаем майонез 2 то есть мы не собьем изначально некую сеть мы просто указываем в команде при запуске контейнера какую сеть Мы хотим поместить Наш новый контейнер создаст ли докер нам новую сеть нет увы это так не работает у нас вышла ошибка Поэтому будем создавать дока Network

нам новую сеть нет увы это так не работает у нас вышла ошибка Поэтому будем создавать дока Network Create и создадим вторую сеть все на сети создалась током Network посмотрим Киносити есть у нас есть майонез 01 май Нет 02 и также типа Bridge Хорошо теперь Давайте возьмем снова нашу команду и запустим посмотрим IP адрес у нас IP адрес совершенно другой контейнер соответственно мы не сможем Никак сделать Пинг Ну давайте посмотрим вдруг маршрутизация сработает Pink Нет это не работает Это что

сделать Пинг Ну давайте посмотрим вдруг маршрутизация сработает Pink Нет это не работает Это что доказывает то что стоит каждое приложение запускать в отдельно для него сети чтобы все приложения все контейнеры работали отдельно друг от друга это довольно-таки важно Ну и давайте для наглядности Просто запустим теперь контейнеры в разных сетях мы сейчас тип хост и тип ноун то есть без сети посмотрим что будет выходим с этих контейнеров они удаляются сразу же Давайте посмотрим на сети есть Дока

что будет выходим с этих контейнеров они удаляются сразу же Давайте посмотрим на сети есть Дока нету РС и запустим тип Host Давайте воспользоваться наши предыдущей командой минус Минус нет типа host Хорошо посмотрим что у нас есть и я вам сейчас покажу что это такое Ну вот как бы мы видим сейчас много интерфейса мы видим также интерфейс нашего Хоста мы сейчас находимся на самом Хосте Давайте посмотрим какие интерфейсы там есть и как бы мы видим что у нас то же самое если в контейнере вот все то

какие интерфейсы там есть и как бы мы видим что у нас то же самое если в контейнере вот все то же самое у нас существует в контейнеры вот ведь еще у нас показывается сеть который мы создавали наши кастомные сети 102 172 20 где были созданы контейнеры вот 17 по умолчанию вот Нет 02 наш который мы создавали и также мы видим в этом контейне который мы запускали именно сетевую карточку самого Хоста Давайте запустим еще 2 контейнер также в сети host как бы есть и Давайте посмотрим что Пинк мы сможем

запустим еще 2 контейнер также в сети host как бы есть и Давайте посмотрим что Пинк мы сможем сделать потому что у контейнера кабы нету своего ip-адреса Он работает на хостел то есть мы будем пинговать Сможем ли мы сделать Pink именно имени контейнера вот наше имя контейнер 2 увы это также не работает хорошо в принципе Хосты думаю это понятно это как запускать вы просто устанавливаете программу на сам хост это принцип презен также работает так давайте их убьем и Давайте запустим контейнер тип

на сам хост это принцип презен также работает так давайте их убьем и Давайте запустим контейнер тип сети Давайте посмотрим только networks тип А еще мы здесь сейчас и сделаем проверяем ip-адреса и у нас есть только локон хвост второй контейнер запускать не буду потому что так понятно что Они между собой связаться никак не смогут Вот это три основные типа сетей которые есть в докере но также Мы помним что есть еще два типа сетей которые иногда используются особенно если мы хотим работать сетью У

что есть еще два типа сетей которые иногда используются особенно если мы хотим работать сетью У нас есть какие-то сетевые приложения Firewall им прокси то это будет наши сети по названием и Давайте что-то подобное с этого сделаем Так давайте создадим для начала сеть Mac villan Итак пишем то же самое только Network Create далее указываем драйвер который мы хотим сделать Это Mac Von также как и бриджи все остальное далее Мы хотим указать subnet Давайте будет 192 168 Ну пускай будет 100 и здесь

все остальное далее Мы хотим указать subnet Давайте будет 192 168 Ну пускай будет 100 и здесь Давайте укажем сабнет 0 с 24 самый самый стандартный не буду ничего думать указываем 192 168 100.1 далее при создании сети вот этой сети создается как бы 10p сервер то есть при запуске Докера docker контейнера у нас сразу же раздается контейнером какая-то какой-то IP адрес именно с этой сети Вот но мы не хотим мы хотим конкретно указать какой IP адрес будет даваться одному контейнеру Допустим мы хотим

хотим мы хотим конкретно указать какой IP адрес будет даваться одному контейнеру Допустим мы хотим сделать Firewall запустить В контейнере и мы хотим чтобы ему всегда присваивался один IP адрес для этого стоит указать минус Минус IP Range То есть это делать не обязательно Это я делаю лишь для того чтобы показать возможности этого всего что мы можем задать какой Range может даваться нашим контейнером это будет 192 168 100 и Ну давайте 99 вот далее нам стоит указать опцию с чем будет спаренная

это будет 192 168 100 и Ну давайте 99 вот далее нам стоит указать опцию с чем будет спаренная материнская сетевая карточка и Давайте посмотрим на сетевые карты есть на сервере Какие названия и вот сама карточка Инес 18 То есть у нас будет Point int 18 и далее пишем название нашей Steam давайте так назовем май Мэг здесь просто стоит еще указать слэш 32 Что только вот этот IP адрес Всё у нас все создалось Давайте посмотрим теперь можем iPad запустить видите у нас здесь ничего не изменилось

все создалось Давайте посмотрим теперь можем iPad запустить видите у нас здесь ничего не изменилось поэтому посмотрим у нас Дока Network LS и вот у нас появился наша новая карточка прекрасно Давайте запустим контейнер который будет использовать эту сеть Так у нас вот наш контейнер и он будет запускаться [музыка] наши новости Хорошо давайте посмотрим IP адреса Как вы думаете какая будет ответ вот именно та сеть которая мы запустили здесь мы можем раздавать сети именно как угодно где угодно я

именно та сеть которая мы запустили здесь мы можем раздавать сети именно как угодно где угодно я сейчас задал просто какую-то сеть то есть допустим это домашняя но Давайте все же сделаем именно Практическое использование этой сети я если посмотрю на сапи адреса то на север находится в сети 10 10 194 Ну и я знаю что у меня 193 свободный IP адрес точно Давайте создадим на вторую сеть именно в этом диапазоне так Давайте немножко изменим нашу команду которая была у нас subnet будет 10 10 далее

диапазоне так Давайте немножко изменим нашу команду которая была у нас subnet будет 10 10 далее Gateway Мы также укажем 10 10 1 IP Range который будет присваиваться 10 10 и укажем IP адрес 193 всё мы не можем запустить второй Mac vilan Давайте предыдущий удалим только Network ему нужно убить контейнер Видите сколько ошибок Сколько сразу же мы решаем проблем все хорошо и теперь запускаем заново Отлично все сработало наконец-то [музыка] докас Ну принципе это хорошо что мы видим сразу проблемы

Отлично все сработало наконец-то [музыка] докас Ну принципе это хорошо что мы видим сразу проблемы которые могут попадаться так и теперь мы запустим наш контейнер в нашей сети запускаем здесь iPad вот 193 и Давайте еще такую штуку сделаем запустим powershell и сделаем Пинг 10 10 193 у нас все работает Если 4 сделаем также все будет работать вот как бы так это все просто настраивается хорошо мы сейчас дали сеть и мне указали что запускается контейнер в нашем сети именно с одним IP адресом то

сейчас дали сеть и мне указали что запускается контейнер в нашем сети именно с одним IP адресом то есть мы не сможем при второй адрес Второй контейнер который должен автоматически получить Давайте попробуем такую штуку еще сделать если мы укажем ip-адрес так вот наша команда и Давайте теперь укажем здесь еще минус Минус IP и мы указывали что 10 10 Ну и Давайте 213 запустим наш контейнер в нашей сети mackvieon сети все смотрим все у нас работает все отлично то есть Таким образом мы можем

нашей сети mackvieon сети все смотрим все у нас работает все отлично то есть Таким образом мы можем раздавать именно IP адреса запускать контейнеры с конкретным ip-адресом То есть у нас в данный момент есть Наша сеть давайте это все проверим только Network LS У нас есть сеть my home LAN типа Mac villan и в этой сети У нас есть DHCP как бы сервер который раздает лишь один IP адрес если мы не указываем контейнеру конкретные IP адрес Но тоже Мы в этой сети можно пока других контейнера который

контейнеру конкретные IP адрес Но тоже Мы в этой сети можно пока других контейнера который будет использовать именно нами указанные IP адреса вот принципе так это все работает тема Давайте не простая попробуйте понастраиваете как работает контейнер это будет еще очень интересно мы будем рассматривать только compost там будет более-менее я думаю понятно и логически это все сделано Всё спасибо продолжаем

и мы переходим к на ирак самой интересной теме и это как мы создадим свой собственный дока контейнер гнида каримов мы ставим только риме и в последствии мы можем его закрутить либо на доках об либо на свой репозиторий либо же сразу же непосредственно создать в контейнер с нашего дока и матч но чтобы создать долго и мяч нам нужно будет написать так называемый дока файл данный дока файл он содержит определенную информацию которую мы должны мы будем передать это информация такие пакеты мы хотим

определенную информацию которую мы должны мы будем передать это информация такие пакеты мы хотим запихнуть в наш дока и матч то есть в наш будущий контейнер потом какая конфигурация должна быть какие файлы может быть что запускается это все мы также опишем в инструкциях то есть что зачем и за в какой посоветуете все должно находиться но это все мы опишем именно в тока файле и давайте посмотрим что собственно представляет собой дока файл то скажу это не так сложно и не так тяжело как кажется на

собственно представляет собой дока файл то скажу это не так сложно и не так тяжело как кажется на первый взгляд итак только файл он содержит себя определенную информацию что в него входит это базовый образ либо и мяч и давайте посмотрим как это будет выглядеть именно в доков или это описывается командой from то есть в данном случае мы берем базовый образ это будет ubuntu 2204 то здесь мы можем играть как угодно зависимость того что мы хотим итоге получить далее нам нужно описание образа это

играть как угодно зависимость того что мы хотим итоге получить далее нам нужно описание образа это опция не обязательно это делать с помощью такой команды лейбл что мы можем указать что угодно любу информацию о нашем образе о нашем контейнере будущее далее на необходимо будет описать команды это дело с помощью команды руан копыта и понятно и даже зависимости от того какой у нас базовый образ мы соответственно делаем какие-то команды либо те команды которые должны нам сделать нашу программу

мы соответственно делаем какие-то команды либо те команды которые должны нам сделать нашу программу рабочую вам да как контейнере то есть мы можем там допустим если у вас программу вы разработчик вы можете с ним сразу скомпилировать что вы хотите то есть будет вам компании что-то еще ну в общем это мы все разберем нужно указать либо можно указать рабочую директорию это указывает команда фрукты и и далее указывается рабочая директория мы также этого позже подробнее разберем далее мы указываем

и и далее указывается рабочая директория мы также этого позже подробнее разберем далее мы указываем файл и также мы можем указать это не обязательно но если танки до файл необходимо для работы нашего приложения то стоит указать файл и то есть пользу команды копий мы будем копировать файлы которые находятся у нас на локальной машине в наш и мач ну в данном случае мы копируем файл индекс html в рабочей директории то есть worker но это мы также все потом посмотрим все вам подробно покажу это

в рабочей директории то есть worker но это мы также все потом посмотрим все вам подробно покажу это просто для примера что какие команды можно использовать в доков али игру можно потому что не все команды они обязательно все зависит от того что вы хотите создать далее команд для работы с файлами также моему скопировали когда скрипт и здесь мы можем его сделать экзекьютив был то есть он его сможем ли мы запускать далее мы можем указать перемены и the involvement перемены то есть при запуске мы

ли мы запускать далее мы можем указать перемены и the involvement перемены то есть при запуске мы можем указать с помощью команды и какую-то информант переменную я рассматриваю тапу во втором видео вот и здесь мы тоже можно указать какие переменные полно это будет переменные которые указывают по умолчанию которая впоследствии мы можем изменить то есть эти перемены если мы не указываем какие переменные при запуске контейнера то будет применяться эти перемены мы даже можем указать порты если у

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

то есть она ничего особо не делает дополнительного не дело для образа это больше информационные и дали им на кто это описать как бы что должно происходить при запуске нашего контейнера знаем судьбой контейнер при его запуске он выполняет какую-то команду если никакой процесс не работает в контейнере то есть он сразу же убивается и мы должны будем в конце описать что должен делать наш контейнер при запуске это делается с помощью команды endpoint и семьи разница в этих командах я вам покажу

при запуске это делается с помощью команды endpoint и семьи разница в этих командах я вам покажу немножко позже и давайте приступим к практике посмотрим как это работает что для этого надо их и результат нас получится сразу скажу что у нас будет где-то порядка больше десяти контейнера мы создадим ну давайте переходим на сервер и давать начнем создавать наши доком файлы то есть создадим сначала папку где будем эти файлы создавать м это просто доком переходим в папку и чтобы начать писать рецепт

где будем эти файлы создавать м это просто доком переходим в папку и чтобы начать писать рецепт как мы будем делать наш контейнер на наш создать файл до кафе для этого просто создаем файлик под названием только файлы touch to profile хорошо теперь его давайте будем изменять хочу просто что контейнер и не появляется просто так не из ничего а не потеряются все на какие-то имиджа на кита образов других контейнер то есть а также какие мы устаем linux мы берем iso файл и запускаем его то есть уже

контейнер то есть а также какие мы устаем linux мы берем iso файл и запускаем его то есть уже там есть какой-то вас из на которой все настраивается ну в общем итак вы давайте возьмем наш базовый и мяч в команда chrome и будет это у нас ubuntu но если мы сделаем так то мы будем скачивать и да именно им еще ubuntu redist я хочу же использовать конкретный так использовать 042 словно что то есть мы будем всё ставить на ubuntu 2204 актуальная версия если мы сохраним такой файл и сделаем bild то есть

всё ставить на ubuntu 2204 актуальная версия если мы сохраним такой файл и сделаем bild то есть создадим и матч наш то у нас ничего не продает так как у нас всего лишь будут скачены ubuntu и мяч и наш долг и посмотрите ага это точно такой же контейнер мы хотим с ним потому мы ничего не получим быть отражено пишем команду который будет выполняться при запуске нашего контейнера сердце командой семьи и давайте самое простое мы сделаем мы сделаем их у и укажем ну мая рост только как бы всем там

и давайте самое простое мы сделаем мы сделаем их у и укажем ну мая рост только как бы всем там сохраняем и у нас есть docs файла что мы с этим можем сделать нам необходимо сделать bild пишем dog a bit где находится наш дока файл в этой директории где мы находимся и нажимаем это все все что происходит у нас степ один из двух у нас две команды у нас есть команда chrome и у нас идет скачивание базового образа 2204 потом у нас есть степ 2 то есть шаг второй это будет команда all of my first тока

образа 2204 потом у нас есть степ 2 то есть шаг второй это будет команда all of my first тока какие есть и мы же какие образы сейчас есть тока и метров и у нас есть один им еще и табун 2204 это наш базовый и мяч и у нас есть наши иметь который мы создали да он выглядит не очень красиво это можно исправить это нужно исправлять потому что в итоге получится у вас очень много имиджей которые имеют такое название но он но он то есть у нас только один если вы же так и создали это все это можно все

такое название но он но он то есть у нас только один если вы же так и создали это все это можно все исправить для этого необходимо написать дока так то есть мы хотим изменить далее стоит указать сос то есть какой и мяч мы хотим изменить у нас здесь но он но он поэт можем взять один энди идентификатор когда нашего имиджа и далее указать какой имя мы хотим иметь давайте назовем май лёка мои тока 01 хотя это у нас будет первая версия поэтому так vision версия 01 все теперь давайте посмотрим на

01 хотя это у нас будет первая версия поэтому так vision версия 01 все теперь давайте посмотрим на спинке вот наш мой тока эффект версия 01 давайте все же дсп наш и мы посмотрим что будет пишем дока план минус минус примут я хочу сделать так чтобы мой имидж запускался то есть докер стартовал и потом если я выставляю он сразу же упиваться чтобы не заморачиваться его потом вручную удалять только ран минус минус тюрьму и далее указываем давайте еще не будем указывать как а имеем мы дадим нашим

ран минус минус тюрьму и далее указываем давайте еще не будем указывать как а имеем мы дадим нашим контейнером давайте будет и даль указываем наши мяч моей тока и версии тоже запуска и как видим у нас сделать команда i love my first дока ошибка стелла ну от не столь важно что мы можем сделать нашему образом мы можем посмотреть что где внутри допустим вы где-то скачали 1 и мяч которых запустить на муниса те что внутри что он делает и чтобы наверняка быть уверенным что его может запускать мы

на муниса те что внутри что он делает и чтобы наверняка быть уверенным что его может запускать мы можем проанализировать это делается просто тока и матч мы будем работать с и мечами и матч inspect и указываем либо 1 либо имя в контейнером и также так версии 0 и посмотрим что как создавался этот им еще что делается вот здесь указаны все команд которые выполняются при выполнялись при создании в контейнер и который будет выполняться и переменные которые можно использовать также мы потом еще

в контейнер и который будет выполняться и переменные которые можно использовать также мы потом еще посмотрим как будет отображаться порты и так далее итак первое что мы можем увидеть как команда при запуске 7t это один из х то есть это 0 наш образ и мы который мы использовать и ubuntu 2204 минут по умолчанию запускается бен с.х. далее тот иметь который мы создали у нас выполняется команда пин s-hub потом команда echo и наш колхоз так давайте все-таки из правильно это имя и создадим новый

s-hub потом команда echo и наш колхоз так давайте все-таки из правильно это имя и создадим новый контейнер давайте предыдущий удалим и удаляем только ему и мыть все в древе наш и матч и 27 новый класс есть также что к файл давайте его изменим docs файл и майк херст и мы сохраняем далее сделан команда белль но не просто не пыток и в предыдущий раз это пускали duca di и прошлый раз у нас простоял . то есть мы создавали здесь и делали бит с нашего только файла но мы не указали ничего больше то

. то есть мы создавали здесь и делали бит с нашего только файла но мы не указали ничего больше то есть он создавался и у нас получалось но он но он то есть у нас в бест имени вот давайте сверху есть посмотрим вас вот такое получилось ну это не очень удобно потому что нужно потом изменять имя и так далее мы можем сразу же задать имя которое мы хотим это будет минус t это то есть так давайте укажем это у нас будет май и мяч версии 01 и где мы хотим здесь все у нас получился новый имидж давайте

это у нас будет май и мяч версии 01 и где мы хотим здесь все у нас получился новый имидж давайте посмотрим и [музыка] вот у нас есть наш новый имидж мой имидж версия 01 хорошо этого есть мы его запустим принципе то же самое у нас все получится тока и давали предыдущей команды воспользуются только нужно будет изменить на майке мяч все с тегом но версия 01 запускаем и у вас получается hello maphie росток все в нас контейнер ставить и потому что команда выполняется их у и контейнер убивается

росток все в нас контейнер ставить и потому что команда выполняется их у и контейнер убивается потому что мы указали минус минус уйму также мы можем запустить нашу команду в интернет и плод что в этом случае получится давайте попробуем интерактив мод и запустит поводу бен дальше все как бы мы находимся в контейнере внутри как бы ничего не происходит никакой аман не выполняется просто мы запустили binge далее но мы сделали команду съемки давайте ещё раз посмотрим да к файл [музыка] вот эта

binge далее но мы сделали команду съемки давайте ещё раз посмотрим да к файл [музыка] вот эта команда которая указывает что происходит при запуске контейнера с нашего имиджа но также есть еще одна команда которая называется endpoint давайте изменим семьи на инфы по id сохраняем геном снова bild тока bild только конверсию давайте 2 все у нас получился дока имиджа и у нас есть версия 2 вот на самом деле относить написать 77 мегабайт занимает каждый образ но он понимать намного меньше а потом

деле относить написать 77 мегабайт занимает каждый образ но он понимать намного меньше а потом потому что он базируется на предыдущий они практически одинаковы вот давайте запустим теперь версию 2 только в рану и уже на мне вот эту команду используем мой имидж версии только 2 все как бы происходит все то же самое с толку как бы разница в чем давайте будем разбираться но перед этим еще делаю одно замечание мы писали под давайте основное семьи не мы написали команду как выпишем линуксах то есть

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

это уже самой команды только распределили это все на команду и параметр давайте это уберем вот так будет написание такое написание будет правильная сохраним выходим и давайте снова сделаем билет проверим работает ли все только билет версии ты хорошо запускаем дока ван версия 3 всем у нас работает по прежнему итак давайте теперь все же перейдем к командам семьи и командам entry point итак мы указать здесь семьи эхо холодной offers тока и мы потом запускали контейнер мы заходили в бен ph и так

здесь семьи эхо холодной offers тока и мы потом запускали контейнер мы заходили в бен ph и так далее если мы же мы попробуем запустить команду с entry point и зайти в бинго что есть поучиться контейнеров дать попробуем это сделать только у нас бы второй контейнер так только запустим это все пауки интуиты мод минус и запустим [музыка] видим у нас здесь ничего не произошло то есть когда мы запускали наш третий то переверни контейнеры и указали бин бэг мы за могли подключиться к нашему контейнеру

наш третий то переверни контейнеры и указали бин бэг мы за могли подключиться к нашему контейнеру напрямую если же мы указывали and report мы не сможем ничего сделать то есть это вот команды имя это от семьи команда который мы передавали наша эхо не выполнялся а наша команда это выполнялось то есть мем мы перезаписывали нашу команду и еху вот этим делом если мы запустим 3 3 и мышь который мы делали и также попробуем зайти в гянджу на все получится мы зайдем pink лишь потому что мы

мы делали и также попробуем зайти в гянджу на все получится мы зайдем pink лишь потому что мы перезаписываем в командной строке здесь нашу команду но так же можно использовать параллельно две команды entry point и симки когда это все происходит давайте изменим нашу до к файлу если он будет entry point им мы передвинуть команду допустимых да не будем заморачиваться и плотно запускает будет команду приехал а сенге это то что мы можем перезаписать будь передавать всего лишь значение по умолчанию

приехал а сенге это то что мы можем перезаписать будь передавать всего лишь значение по умолчанию это будет hello maphie сдох давайте попробуем это запустить что получится я хочу сразу сказать что это семьи и entry point это мера самая сложная из всего до к файла прутки две команды чем у них разница как их правильно использовать вот это вот наверно самый стоит но мы сейчас это все разберем и потом все пойдет как по маслу и так делаем новый вид ттока бит и у нас будет уже версии 4 готова и дайте

все пойдет как по маслу и так делаем новый вид ттока бит и у нас будет уже версии 4 готова и дайте попробую запустить только [музыка] мы запускаем обычном формате версия 4 все у нас отображается холодное все дока но если мы запустим то же самое но укажем допустим не знаю пару и запустим то нам отрахал он ровный почему такое происходит снова вернемся в токов а у нас entry point это фиксированная команда то есть мы это изменять не можем а сенге это то что мы можем изменить то есть есть мы здесь

команда то есть мы это изменять не можем а сенге это то что мы можем изменить то есть есть мы здесь написали список китах команд они выполняли бы постоянным peace изменений осинники мы могли изменять то есть здесь бы допустим стоял там эхо бла-бла-бла там потом уж много чего то и так далее овсянки стояла вы буд-то пусть перезагрузить или что то еще подобного рода там и вот именно этот не будут команду и что то другое мы могли перезаписать а то что в интерпол находилась мы перезаписать никак бы

и что то другое мы могли перезаписать а то что в интерпол находилась мы перезаписать никак бы не смогли то есть and report это неизменяемые команды-семьи это команды изменяем этого стоит запомнить и понять итак переходим дальше следующая штука который хотел вам показать это за и был то есть какая-то информация который мы можем передавать нашему имиджу и допустим увидеть когда скачивать наш и мяч перезапуском докера не могут пойти на кто автором что этот имеют и так далее то есть такая-то полная

докера не могут пойти на кто автором что этот имеют и так далее то есть такая-то полная информация и давайте изначально изменим наш файл entry point мы удалим осинки вернем наш предыдущий вид у нас будет эхо и пишем мэйбл что мой лейбл можно задать все что угодно дать сделаем следующую аута автор размером дальше следующее лейблы можем создать допустим это будет достать как у нас keep it у вас будет дымом следующий лейбл он давать будет платформ и это будет нас youtube все готовым делаем би-дог

дымом следующий лейбл он давать будет платформ и это будет нас youtube все готовым делаем би-дог bild все также указываем минус ти наш кимович только версии 5 все запускается и к вительно здесь уже степа немножко побольше стала да вот здесь у нас было 101 from команда под вот лейбл добавится потом еще один лейбл и еще темнее блок потом командой так далее давайте за путь нашего контейнер до коран и у нас контейнер версии 5 и мяч вернее версии пяткам все работает без имени но эти лейблы когда мы

и у нас контейнер версии 5 и мяч вернее версии пяткам все работает без имени но эти лейблы когда мы их сложно видеть это когда мы им аспект тока и мяч давайте посмотрим и бриджи и сейчас и меньше у нас много генри домой и мышь была во благо ubuntu ну мы хотим проанализировать этот имидж версии 05 итак давайте сделаем вдоха и мяч inspect the lime in each версии 0 5 и далее посмотрим поднимать немножко высшим и виде вас есть такие да и bulls а вот тел apple и которые мы создавали как бы все вот

высшим и виде вас есть такие да и bulls а вот тел apple и которые мы создавали как бы все вот тот формат который мы хотим передать нашему контейнеру либо вернее имя джон доу здесь это всем уже видели давайте немножко изменишь докатим и верить только файл и установим наш будущий контейнер индекс допустим этим делать веб-сервер изменим только файл давайте уберем видны на моей столько нам не нужно семьи также мы оставим и советчиком и которые мы изучим это будет команда уран то есть что-то мы

семьи также мы оставим и советчиком и которые мы изучим это будет команда уран то есть что-то мы будем запускать и мы стал губам то чтобы что-то установить даже сделать get a black если мы просто укажем apt apt то у нас будет маленькая штука на все будет работать но будет него шардже поэтому используя ап кит и следующие команды мы делаем apt-get install то есть мы установим что-то и это будет индекс но мы стром что при установке in phoenix его признаки любого другого пакета иногда вене зачастую

но мы стром что при установке in phoenix его признаки любого другого пакета иногда вене зачастую нам нужно подтвердить то что мы хотим это установить чтобы этого не происходило мы указываем да то есть автодиск придем соглашения на тоже на установку этого всего все сошьем это все что мы делаем дакар bild 6 версия все идет установка в нее обновления репозиторий и сейчас будет идти установка так install нужно правильно все-таки написать давайте снова делаем bild штукам хорошо но установили engine

нужно правильно все-таки написать давайте снова делаем bild штукам хорошо но установили engine x и так далее прекрасно все работает и давать забудь наш контейнер 5 посмотрите вас контейнера уже есть образ вернее именно и вот наши образы на виде у нас уже сайт измениться 170 не семьдесят семь и восемь а сто семьдесят восем установили что-то в него это вон таки получилось много до 100 мегабайт патчи давайте запустим наш версию 6 тока и версия 6 то есть то что мы оставили в него engine и что будет

давайте запустим наш версию 6 тока и версия 6 то есть то что мы оставили в него engine и что будет а х будет хлам offers тока все то же самое почему это происходит потому что нужно изменить команду семьи и давайте это сделаем docs файл и так команда семьи чтобы запустить индекс нам нужно воспользоваться как бы командой которая предначертано индексом для запуска в контейнере это будет экшн икс далее параметр минус game следующий параметр все делается с запятой из кавычку demon of . , все так

далее параметр минус game следующий параметр все делается с запятой из кавычку demon of . , все так сохраняем и выходим идем снова били током вид ну и давайте назовем мой имидж x engine.exe на имидж x и версии у нас будет 0 большой мы сделать не можем и а маленький готова и давайте теперь запустим это все только уран далее и мяч у нас пикси и уже в первой версии мой и мальчик и как видим у нас кабы не особо ничего не происходит давайте запустим это контейнер вдт чему то есть в бэкграунде что

кабы не особо ничего не происходит давайте запустим это контейнер вдт чему то есть в бэкграунде что это произойдет как бы посмотрим [музыка] все контейнер работает если друг и дочка дым нас останавливаете потому что не команду свое их у сделали и все то здесь же контейнер продолжать работать и вот наш контейнер работает как бы ничего теперь давайте подключимся контейнеры посмотрим что в нем работает до кгц -33 под тренер и запуска молебен бы дать потому что работаю с x а и у нас есть и джинкс

до кгц -33 под тренер и запуска молебен бы дать потому что работаю с x а и у нас есть и джинкс рабочий как бы прикольным всем он работает и на водоеме все работает но мы никак не сможет учиться к нашим когда не давайте попробую это сделать или посмотрите на спарты открытые на севере для статус только меню нас порт 80 не открытости мы никак не сможем достучаться к нашим контейнер давайте наш контейнер убьем тока стоп и это будет мой дух а мы ему давали имя моей только все он остановится и

контейнер убьем тока стоп и это будет мой дух а мы ему давали имя моей только все он остановится и убивать потому что мы используем параметр - минус уйму ну давайте запустим нашу предыдущую команду . уран dt многие скан тренировать и метаем и используя под wi-fi там 8080 да и запускаем наш контейнер и меч x и пробрасываем порты посмотрим что будет хорошо что вы проверим какие порты вас открыты либо сделаем такую штуку белка и с и даже мы видим что у нас порты контейнер уже прописывается

либо сделаем такую штуку белка и с и даже мы видим что у нас порты контейнер уже прописывается проверим суке server that you настолько или у нас порт 80 открыть если мы сделаем минус цель и то ли хотите п.и. localhost [музыка] то мы получаем ответ от нашего observer ну давай для наглядности что это было лучше видно посмотри какая у нас к пи адрес нашего сервером 1010 194 это скопируем и вставим просто браузер и все у нас есть walk on the internet все мы подключиться к нашему канцлеру а вы очень

браузер и все у нас есть walk on the internet все мы подключиться к нашему канцлеру а вы очень здорово прекрасно все работает но есть ещё такая вещь вот допустим мы взяли контейнер иметь какой-нибудь она мы не знаем какие порты в нем есть документация практически нет ничего ну какая то минимально есть но мы там что контейнер у кота работает и чтобы нам дать знать другим людям какие порты и стоит открывать для работа ног отеля мы можем использовать команду expose давай вставим этого этот

стоит открывать для работа ног отеля мы можем использовать команду expose давай вставим этого этот контейнер тока мадока котором и изменим наш до кафе добавим второй параметр как excuse и укажем порт 80 то есть мы можем указать порт вот все просто мы можем сказать допустим тисе пи сказать что только протокола тисе пи будет работать лик либо то также сделать expose 443 порт но здесь мы укажем кисть и давайте вот так вот запустим создадим наш и матч новый сохраняем выходим далее дока bild engine

и давайте вот так вот запустим создадим наш и матч новый сохраняем выходим далее дока bild engine x и у нас версия 2 то есть тем же указом expose и давайте проанализируем наш и мяч вините сделаем первый анализ 1 имиджа это будет дока и матч который первым создавали без expose версия 01 посмотрим что здесь есть к вы все те команды которые мы запускали нас также лэйблы есть наш лейбл у нас есть команда который мы спускаем engine x минутки demon of вся информация которая использовать при создании

который мы спускаем engine x минутки demon of вся информация которая использовать при создании имиджа а если мы сделаем анализ нашей второй версии то еще наш спас и вот expose под мы указали два порта 443 кисти пи и 85 и себе получился у нас что ж давайте запустим наш контейнер без указания port mapping тока ран и сделай версию вторую и спорт мебельным мы сказали посмотрим да кпс и видим что у нас указывается порты два порта которая весть об excuse да мы можем сделать так же ставить этот отель

указывается порты два порта которая весть об excuse да мы можем сделать так же ставить этот отель запустить в спорт мы пингом то есть перебросить порты ну как бы хорошо да у нас есть уже к тому же информация это все будет даже работа каспер liberty но давайте сделаем немножечко другую вещь давать основе этот контейнер тока и запустим с параметром в минус но не маленькая оба шаг и потому что будет все посмотрим только псы мы видим что порты с нашего сервера перри бросились автоматические в

будет все посмотрим только псы мы видим что порты с нашего сервера перри бросились автоматические в контейнер но перебросили они не 88 как мы указывали а какой-то рандомный порт перебрасывается в контейнер это я забыл сказать когда мы изучали port mapping но сейчас в этой вики параметры минус пиджак быть проверим как это все работает можем ли мы достучаться к нашим когда копируем порт давайте проверим без спартака бы это все грузится и ничего не происходит туз тут идет на ничего не происходит

без спартака бы это все грузится и ничего не происходит туз тут идет на ничего не происходит давайте изменим теперь укажем порт и все работает все по-прежнему то есть мы можем делать итак итак если для тестирования а то можем использовать минус пенал мину в том что будут казаться какой-то порт и давайте я вам покажу как установить причин веб-сервер как бы как создается только и мяч для установки и запуска и печь 5 создадим новый только файл давайте mk1 новой директории сделаем это все apache и

и запуска и печь 5 создадим новый только файл давайте mk1 новой директории сделаем это все apache и скопируем на доков а чтобы заново все не писать папку а5 находим папку печи и редактируем только в у нас также from остается да и было нам без разницы мы тоже делаем апдейт и уставлен только не нужен x apache apache и [музыка] сэкономим время экспо smart port 80 и самое интересное самая важная домой смогли но если мы будем делать командой дженис а бы ничего не произойдет будет ошибка поэтому

домой смогли но если мы будем делать командой дженис а бы ничего не произойдет будет ошибка поэтому нужно изменить команду для запуска и а пачек пишем apache2 сити комнат то ли вы почти использовать минус d и параметр будут нас foxhound готовы сохраняем заходим снова винтовка bild но только давайте у нас май и матч x ну давайте тут будет от патчи вот так и версия сделал получим майки плечи и версия 01 все котором я усну к apache тоже можем если ты че вы используете с кем-то модулями то далее

01 все котором я усну к apache тоже можем если ты че вы используете с кем-то модулями то далее это все можно закинуть фран запустить установить модуль и запустить их добавить так далее но давайте запустим теперь наш имидж только посмотрим и меньше вот но наш и причем тока ван май только этот путь на мои плечи версия 01 последовать про бросим всё таки то было удобнее порты 80 80 кого все то же самое а еще одна вещь давайте посмотрим работу доска тонера для предыдущей кондер работает только с до

а еще одна вещь давайте посмотрим работу доска тонера для предыдущей кондер работает только с до давать его убьем иначе мы выдаем одинаково имя не запустится ничего дока стоп мадока хорошо и давайте вот эту команду теперь скопируем и запустим apache все работает проверяем дока и с все у нас все работает порты про брошенным 0 на веб-страницу теперь нам не нужно указывать и код пор все у нас работает apache на ubuntu всем к вы прикольно все работает хорошо но мы сейчас запустили engine x мы

apache на ubuntu всем к вы прикольно все работает хорошо но мы сейчас запустили engine x мы запустили подчинив были в стандартные сайты до отображаются информационной что это все работает все прекрасно но мы хотим отобразить наш собственно сайт как это сделать да мы изучали volume как это монтировать ну давайте запустим свою маму давайте нас патч давай вернемся все таки г-н дженкс к нашему стандартному до к файлу и давайте посмотрим на сами дока image да у нас есть и мяч интернету которым все

до к файлу и давайте посмотрим на сами дока image да у нас есть и мяч интернету которым все запустим но мы хотим отобразить наши сайт поэтому также зададим еще два папочку mk1 и пускай будет у нас files то есть у нас там будет вниз кит наши файлы наши программные файлы files и создадим наш сайтик маленькие я скопирую предыдущую заготовку и yandex . hdmi да это стандартный высоки и скопируем содержимое это обычный html файл [музыка] ничего большого в нем нету так сохраняем выходим и давайте

это обычный html файл [музыка] ничего большого в нем нету так сохраняем выходим и давайте все-таки запустим наш контейнер дока ран так моим только порты работе от 8 мая и мячики у нас будет 3 который мы создавали индекс треки и далее нам нужно смонтировать наш нашу папку файлы в рабочую директорию и gemix где находится по умолчанию файлы для запуска веб-сервера климовске и и нам нужно указать именно полную директорию где находится наш файл яндекс и все мы и так указываем это у нас будет на

именно полную директорию где находится наш файл яндекс и все мы и так указываем это у нас будет на север рут директория дока и фпс и это мы будем монтировать в директорию именно в контейнере flash вам т.д. ешьте мэр и запускаем ее начинать версии tricky хорошо давайте посмотрим в браузере либо сделаем керн да кабы отображается то что мы водили ну давайте для наглядности посмотрим еще здесь обновляем и видим вот нашу заготовочку дать хорошо как бы все работает но как сделать так чтобы у нас при

и видим вот нашу заготовочку дать хорошо как бы все работает но как сделать так чтобы у нас при запуске контейнеры наше содержимое появлялся независимо от того есть ли у нас файл индекса и 4 мой который мы запускаем либо нету у нас всегда это было в конце явных и делать это с помощью команды копит давать это посмотрим остановим наш контейнер только стоп изменим наш доктор давайте немножко уменьшим до это не нужно спас и стенам копий далее что мы хотим скопировать у нас наш файлик находится в 9

до это не нужно спас и стенам копий далее что мы хотим скопировать у нас наш файлик находится в 9 вот настолько файл давать еще раз фом это все покажу вот наш дока файл а наш индекс их чем и находится files поэтому изменяем режим копием и указываем откуда мы будем копировать файл это директория files и далее индекс . печки м.л. и куда мы будем это копировать в рабочей директории все так же вам пдд и чтим и и в конце обязательно еще лишь нужно указать то есть мы будем копировать это все в

вам пдд и чтим и и в конце обязательно еще лишь нужно указать то есть мы будем копировать это все в директорию сохраняем выходим делаем тока бит и это будет мой индекс май и мяч x только 4 версии то есть нашем файле кому-то внутри хорошом дать пару запустить дока уран но нам уже монтировать мы ничего не будет не надо болью параметрам и также эту нас версии 4 женщины с версии 4 запустили проверяем только с все это у нас работает и давайте обновим страницу все у нас то же самое вот обновляем

только с все это у нас работает и давайте обновим страницу все у нас то же самое вот обновляем нечего им нечего мне монтировали но у нас сайт уже есть нашим и мать и при запускай долга контейнера с нашего имиджа мы получаем уже статические данные которые есть в этом мире dota затем на контейнеры посмотрим как это выглядит в эту директорию которую вы скопировали это всё так так в моем тока и бишь все этим директорию в [музыка] html и посмотрим и обратит внимание у нас есть яндекс и чтим а и

все этим директорию в [музыка] html и посмотрим и обратит внимание у нас есть яндекс и чтим а и intex intex debian и схемы то есть это то что по умолчанию запускается если вас нет другого индекса это вот то что мы создавали сейчас скопировали в контейнер а этот файлик он установится автоматически при установке индекс то же самое происходит с apache да то есть это получай не фалик и у нас теперь это поднимем фалик в яндекс . но давай сейчас выйдем еще с как раз контейнера я вам ещё одну штуку

это поднимем фалик в яндекс . но давай сейчас выйдем еще с как раз контейнера я вам ещё одну штуку покажу вот мы заходим в контейнер и мы автоматически при почти контейнером вы автоматически попадаете в какую-то директорию здесь автоматически территория слэш то есть грут директория этим команды и видим то есть посмотрите мы находится мы находимся в директории слэш но наша рабочая директория она именно та директории где находились наши файлы вот в чем вопрос эта территория воды в html там

она именно та директории где находились наши файлы вот в чем вопрос эта территория воды в html там хранятся наши файлы наши данные и так далее мы хотим изменить чтобы при заходе в на контейнер ударе в директорию по html давайте это сделаем изменяем снова нашли дока файл и укажем work тех рабочей директории и нашли работе и туре будет вот это хорошо давайте создадим с новых контейнер не сделаем bild dota bild перси 5 смотрим давайте запустим стражам дока кран только пробрасываем только версии 5

dota bild перси 5 смотрим давайте запустим стражам дока кран только пробрасываем только версии 5 до par38 предыдущий контейнер давайте посмотрим как с драки его убьем стоп у нас нельзя запретить и второй контейнер с портами 80 поэтому предыдущем объем чтобы то все красиво работала и вы не путались так версии 5 times и давайте снова сделаем только язык снова зайдем в контейнер и видим куда мы попадаем мы даем вам в html есть подходами содержимое то всю как бы тоже самое нам не нужно никуда

попадаем мы даем вам в html есть подходами содержимое то всю как бы тоже самое нам не нужно никуда переходить это хорошо когда вы работаете у вас есть рабочий территория и ваше приложение и вы хотите поставим попадать в это приложение и так же очень удобно тогда копировать файлы именно в работе директорию то есть вы указали один раз рабочую директорию и вы можете удобно копировать туда файлы либо содержимое давайте я вам сейчас покажу как выходим с контейнером извиняюсь снова только подавайте

содержимое давайте я вам сейчас покажу как выходим с контейнером извиняюсь снова только подавайте основе контейнер первую очередь так и изменением тока по чтоб потом не забыли это сделать здесь мы копируем файл yandex xml в территорию но и выше указали рабочий действует та которая кернс по умолчанию и чтобы нам потом не писали то всего мы просто будем ксерокопировать рабочий директорию то есть мы заходим сразу же на контент даем в эту рабочую директорию и файл соответственно будет . это вот эта

заходим сразу же на контент даем в эту рабочую директорию и файл соответственно будет . это вот эта директория lordi так все будут толкается от этого либо нужно писать слэш благо оба как мы до этого diary указать просто . давайте попробуем что у нас получится дока bild версия 6 уже хорошо давайте запустим не только уран версия 6 все работает и давайте дока снова зайдем даже директориям и у нас также находится индекс тысяч семей так же как и до этого было да и давайте можем сами проверить до

также находится индекс тысяч семей так же как и до этого было да и давайте можем сами проверить до изменить их нету как бы все работает все прекрасно это упрощает копирование есть вам нужно копировать много файлов с разной директорий в одно место либо отталкиваться от ракушки виктории в под каталоге то очень удобный способ пор где далее следующий параметр это переменная и момент это наверно очень важный параметр если вы хотите сделать гибкие ваши контейнеры давайте добавим in women's в наш

важный параметр если вы хотите сделать гибкие ваши контейнеры давайте добавим in women's в наш только файл так и только файл и добавляем параметры in warm and давать и не то здесь и добавим и венгрии и долил можно добавить любые переменные давайте будет у на роль мэром я укажу далее у стоимость будет следующая переменная элемент давайте будет type это у нас будет ему хорошо мы сохраняем выходим и делаем новый вид dog on beat минус t и так далее то есть я и змея предыдущую команду вот это будет

делаем новый вид dog on beat минус t и так далее то есть я и змея предыдущую команду вот это будет давать и мая давай момента и версии 1 скобу так хорошо вам проверяем наши имидже тока image а у насколько имидже создала то но у нас нас интересует вот эта по слухам дока пьеса будут ли у нас контейнер работает ослом его дока стоп мы током и давайте запустим наш 2 эмаль только рану имя порт и здесь вот будет break-in его им and i wear секирой все работает и что собственно происходит с этими двумя

вот будет break-in его им and i wear секирой все работает и что собственно происходит с этими двумя переменными дорогам наш контейнер а я запустила предыдущий так и этот они одинаковы но есть одно отличие если мы снова зайдем в контейнер доком язык marry the cabin bash то выпадам в ту же директорию здесь в по работе ничего не изменилось но если мы сделаем команду и 2 in women's посланы которые есть на в контейнере на то мы заметим что у нас добрались таки перемен как угу на и наша type вот наши

на в контейнере на то мы заметим что у нас добрались таки перемен как угу на и наша type вот наши две переменные которые есть на себе эти переменные можно использовать программирование то есть при здании программа программы могут использовать переменные самой системы и это же эти переменные мы можем использовать при создании конфигурации файлы при создании других файлов давайте сейчас это все проверим и посмотрим как это работает кстати выльем и вот мы запускаем наш контейнер уран на давайте

и посмотрим как это работает кстати выльем и вот мы запускаем наш контейнер уран на давайте его теперь оставим только хотя принципе можем не останавливать вы просто не будем я не указ другие порты тока ран наш контейнер арты указывать ему чтобы не было конфликтов мой доктор 2 и далее мы можем указать переменным момент ну каждым кит изменим давайте keep у нас будет равняется прот 12345 вот так наверняка чтоб точно и запускаем давайте снова сделаем дока джек зайдем на наш контейнер to contact 2

чтоб точно и запускаем давайте снова сделаем дока джек зайдем на наш контейнер to contact 2 вот мы запускали имя 2 нашего контейнером него заходим и посмотрим переменные она остался предыдущими a type у нас изменился вот то есть таким образом мы можем с помощью команды сергей когда мы запускаем своим контейнер с имиджа мы можем занять наши переменные но если у нас перемен никаких не указанных давайте сделаем анализ нашего имиджа дока проанализирован наш имидж тока кинуть inspect the мы здесь

сделаем анализ нашего имиджа дока проанализирован наш имидж тока кинуть inspect the мы здесь должны увидеть наши переменные так и вот наша переменная овна и type но это не значит что только можем использовать переменные умного и type так запустим еще один контейнер и укажем какую-то переменную которая мы не указали в нашем доков а так наша команда запускаем в 3 контейнер и указываем здесь давайте ким ки темп 12345 у нас здесь будет просто тест вот так вот запустил хорошо давайте подпишемся к

ким ки темп 12345 у нас здесь будет просто тест вот так вот запустил хорошо давайте подпишемся к нашему контейнеру рука кексик 3 контейнер хорошо и посмотри момент овна остался у нас там появился этой пт ему такой как мы указывали в в дакаре меча но у нас добавился еще одну переменную все хорошо поэтому хочу указать на то что те перемены in women's указываем вам только файле это как значение по умолчанию и эти значения мы также можем использовать ну допустим в командах руан давайте это по сути

и эти значения мы также можем использовать ну допустим в командах руан давайте это по сути попробуем сделаем посмотрим что получится давайте сделаем новую папку [музыка] узко будет нас in wine and test data мы протестируем это все и скопируем наш только файл в н ы м н тест паке изменить наш новый тока файл берем много чего ненужного чтобы нам не перезагружать взгляд принципе и так у нас будет так же from ubuntu даже указываем элемент пускай будет фоном вы также укажем нервам далее кино команду

же from ubuntu даже указываем элемент пускай будет фоном вы также укажем нервам далее кино команду уран то есть мы хотим что-то запустить это будет их а далее доллар луна и закидаем это в папку и не папку файлик территорию об ну и давайте пускай будет а командой симки мы покажем что находится в этом файле и [аплодисменты] обратим содержимое этого файла попробуем сработает или нет сохой выходим давайте оставим наши контейнер которых мы запустим ногу только с стоп моей тока мой дом 2 и 3

давайте оставим наши контейнер которых мы запустим ногу только с стоп моей тока мой дом 2 и 3 контейнер хорошо мы изменили наш дока farm от посмотрим училась все работа и сделаем bild дока bild только бы тоже самое два им не только версии ну давайте будет теперь второй и запустим его дока уран так дать нам попроще надо запустить ты точно не нужно нам нужно чтобы мы отобразили наш содержим наше файла имя требуют такая переменную дополнительную мы не хотим указывать момент версии вот второй так

имя требуют такая переменную дополнительную мы не хотим указывать момент версии вот второй так вот такая команда у нас будет получается и мы видим уровня то есть мы это бразилии и мы то что хотели вот мы закинули в файл об info вы закинули содержимое переменной у на и у нас луна rambler и мы в командой это содержимое отображает ну и до пасть допустим мы хотим при запуске контейнером изменить фон ах да это делается очень просто пишем луну равняется довайте пускай будет или какой-нибудь и

фон ах да это делается очень просто пишем луну равняется довайте пускай будет или какой-нибудь и запускаю пролив как видим у нас ничего не изменилось нам но если мы запустим допустим минус идти интернет теплоты и запустить in bash то есть у нас не запустится наша команда семьи так и посмотрим in warm and овна били а что с такой запале пойдем сядем и kis 7 дней обт носоглотки находится это все кто своим форму кровный то есть команда которая выдает информацию вот запись в этот файл происходит

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

веб-сайтом веб-странички которая обычная резинка некоторые изменения выходим на нашего контейнером gps кодаира не работают хорошо и давать вернемся в территорию files вот наш индекс html и давайте изменим содержимое так у нас здесь стоит храм мэром давайте это изменим на директорию две нити ритой от переменного сделаем такую как метку но обычно делаю метки с помощью процент процент скажем она а вместо дыма тоже давайте будем указывать куда переменную процент а здесь будет у нас так так будет

вместо дыма тоже давайте будем указывать куда переменную процент а здесь будет у нас так так будет достаточно сохраняем файл чтоб нам изменять наши параметры которые мы изменили или вот идет [музыка] два значения чтобы они принимали значение наших переменных то есть сюда будет заноситься переменная у на а здесь будет переменная temp заноситься для удобства зачастую используются скрипты давайте сладким ваш скрипт я и скрипт . и вот с таким свежим но при запуске скрипта что происходит мы идем в

ваш скрипт я и скрипт . и вот с таким свежим но при запуске скрипта что происходит мы идем в директорию вовы м.л. yandex xml ищем значение процент на процент и заменяем его на системное значение переменной овна в этом файле мы ищем слово вот это вот с процентами и заменяем переменной которая системная доллар вот и потом мы видим что запускается скрипт ok давайте так запустим наш наш индекс посмотрим что будет у нас в контейнере в ней в доков али когда мы запускаем у нас стоит давайте сразу я

что будет у нас в контейнере в ней в доков али когда мы запускаем у нас стоит давайте сразу я вам покажу что у нас в нем есть до кафе вот у нас есть команда яндекс и запускается engine и стоит нам либо запускать скрипт с помощью клан либо мы можем все делать запускать этот скрипт поэтому эту команду мы можем просто-напросто перенести в саму скрипит наш давайте это сделаем files скрип и телом эту команду здесь но должен конечно ее подправить чтобы она к будет запускаться в линуксе под линуксом

команду здесь но должен конечно ее подправить чтобы она к будет запускаться в линуксе под линуксом вот команда готова и давайте теперь изменим немножечко наш до кафе чтобы это все конкретно запускался работалось так мы копируем с директория files инвесторы стимул мы копируем далее нам нужно скопировать скрипт files копируем далее . встреч куда мы вас к перуну давать его не будем копировать и по рабочую директорию мы во скопированную папку опт также скрипт встреч далее у нас скрипт не

и по рабочую директорию мы во скопированную папку опт также скрипт встреч далее у нас скрипт не запускаемый мы хотим сделать чтобы он запускался мы могли его запустить поэтому пишу команду уран вещь mod + x наш скрипт измена командой семьи команда семьи как будет выглядеть намного проще всего лишь мы запускаем скрипт готова выходим и label доком bild и пускай будет мать и мяч x теперь отверстие у нас 7 как был наш почти окончательно не сказать готова давайте запустим дока on in each x только 7

нас 7 как был наш почти окончательно не сказать готова давайте запустим дока on in each x только 7 версии готовы посмотрим работает только с все работа и давайте посмотрим что у нас отображается к фильму у нас в жару не только тем и хорошо это как бы работает то есть мы можем сказать что наш индекс он динамически то есть переменной мы можем передавать ну это к вич а давайте все же мы допустим контейнер только два перебросим порт позиция 1 на виртуальной машине в порт 80 запустим наш имидж но

только два перебросим порт позиция 1 на виртуальной машине в порт 80 запустим наш имидж но теперь мы изменим переменную у нас переменная фауна и у нас в теперь будет белье и запускаем хорошо давайте перейдем браузер на порт 80 1 и мы видим что у нас изменяется таким образом мы можем изменять не только какие-то там значение web browser мы можем также изменять конфигурации файлов 8 делать все что угодно с о такой таким путем мы делать все что угодно с таким простым скриптом я вам показал skype

угодно с о такой таким путем мы делать все что угодно с таким простым скриптом я вам показал skype выглядит таким образом как files скрипт то есть вот эти вот вещи они до чудеса воздухе до реки на заметку таким образом я наш большой дока файл на тебя посмотрим дока файл и он героически всё используется что можно но давайте так для наглядности мы еще запустим и не сделаем парочку до к файлу которые несли нас ubuntu а мы возьмем за основу другие контейнеры допустим вы разработчик печки и хотите

несли нас ubuntu а мы возьмем за основу другие контейнеры допустим вы разработчик печки и хотите сделать контейнер в котором работает . поэтому давайте мы снова создаем новую папку герб php пойдет php и создадим снова только файл и давайте будем изменять и только файл и так первая команда как мы знаем и это будут но что он взять за основу мы можем взять конечно ubuntu это будет очень удобно поэтому стоит пойти в браузер перейти на токах ам и указать пеппи контейнер то есть у нас нет . здесь нет

стоит пойти в браузер перейти на токах ам и указать пеппи контейнер то есть у нас нет . здесь нет никакого приложения рабочего но вся основа для работы печки там есть если мы придем по тегам мы здесь увидим очень много треков на которое может запускать что хочу делать я все сделать чтобы отображался информация печки info если мы снова пойдем на доках об печки во вью то зачастую такие вещи уже описывается как мы можем создавать наше предложение так вернемся на шума до к файлу хрома у нас будут

как мы можем создавать наше предложение так вернемся на шума до к файлу хрома у нас будут кишки версии у нас будут 7.2 и именно печек и далее нам нужно скопировать будет наш файл ну это у нас будет файл и yandex . hp который мы сейчас будем создавать будем копировать его в рабочую территориям очки это все можно увидеть на официальном сайте на доках об именно по печкой той и теперь нужно создать индекс печкой давайте это сделаем я и яндекс пеппе и с таким содержимым готова сделаем теперь bild

индекс печкой давайте это сделаем я и яндекс пеппе и с таким содержимым готова сделаем теперь bild [музыка] то назовем перед его маячки первой версии готова идет скачивание снова базового имиджа тысяч писем 2 и печень дата мы создали геныч давать основе предыдущих контейнером до кпс только стоп мои тока и током 2 тут ничего не работало в ненужном мы допустим мая печки вдох уран так только запустим порты ставить стандартные 8080 переменных нас таких нету наши мы запускаем и hp контейнер все

порты ставить стандартные 8080 переменных нас таких нету наши мы запускаем и hp контейнер все готово поехали мы запустили давайте перейдем на наш сайт с у нас порты открыты переходим в браузер переходим на сервер и у нас работает печка инфу как бы отлично все у нас информации если у нас работает печки контейнер супер и давайте сделаем такую примерчик на пайта не маленький на которое будет нам что-то делать там допустим суммировать два числа давайте здесь выпел другу директориям создадим папку

делать там допустим суммировать два числа давайте здесь выпел другу директориям создадим папку пойду заходим python папку создадим давайте скрипт на под ним так но это будет сумма двух чисел сампе ой ой изменяем его вот такой скрипт что он здесь происходит мы нам нужно будет ставить 1 числом вставив строительством потом они будут сами 7 раз результат у нас будет писаться что сумма 1 и 2 числа равняется тому все это сохраняем далее нам нужно сделать что вода к файл делаем так только файл и сразу

тому все это сохраняем далее нам нужно сделать что вода к файл делаем так только файл и сразу редактировал до кафе пишем базовый и мыть from далее что мы возьмем за основу перейдем на поэтому и так же вот здесь снизу вся информация как можно создавать вот свои контейнеры imagine вот как мы можем использовать бы не использовать python 3 вот есть рабочая директория вот и тогда мы сможем всю эту копировать давайте это все скопируем вот это вот вещи и и просто под настроем под себя это и утолён

копировать давайте это все скопируем вот это вот вещи и и просто под настроем под себя это и утолён вставляем python 3 рабочую директорию нас устраивает далее мы будем копировать [аплодисменты] сам пай то есть сумма по нашим рабочей директории далее запускать мы здесь ничего не будет над нитки зависимости не требуется этому удаляемым это мы тоже удаляем и у что мы еще будем делать это нам нужно будет опустить наше сам поэтому здесь меняем на наш скрипт так точку еще все готово давайте повторим

опустить наше сам поэтому здесь меняем на наш скрипт так точку еще все готово давайте повторим будет ли это все у нас работать так все мы создали у нас доков аресты делать bild дока bild мое пальто версии 1 идет скачивание базового образом все мы создали на и меч и давать его запустим поскольку мы будем запускать программу которая ведет диалог то нам нужно запустить его в интернет и mad dog а уран киев далее мы хотим утолить потом этот контейнер и запускаем наш имидж на спрашивать видите первое

киев далее мы хотим утолить потом этот контейнер и запускаем наш имидж на спрашивать видите первое число давайте введём 12 видите второе число ну давайте сделаем 50 то есть у нас даже в сумме быть 60 и все сумма nostra и 5 12-50 равняется 62 все прекрасную работу и континент потом упивается вот таким образом это все работает на создавали и митрий до немало у нас есть также ubuntu и масть который скачался как основной основа базовый потом искать и как базовый еще поэтому вот он и печки то есть у

как основной основа базовый потом искать и как базовый еще поэтому вот он и печки то есть у нас сумме задавали в 18-м чем мы сделали мы это сделали всего лишь с помощью одного практически одного вдоха файла который мы постоянно расширяли увеличивали и добавлять новые функции на этом все по поводу создания своих дакаре мечей я думаю если вы это все сделали у вас все сработало все получилось можете смело говорить что вы умеете создавать свои тока контейнер и спасибо за просмотр идем дальше

Итак мы продолжаем на данном видео мы рассмотрим такую технологию как Дока кумпос и давайте для начала разберемся что это такое и для чего нужно вообще Итак Дока компос он используется для управления Одним или несколькими контейнерами это мы потом посмотрим на примерах Как управлять одним и также как управлять сразу несколькими контейнерами долго компот он содержит инструкции по запуску контейнеров То есть то что мы вводили в командную строку мы будем вводить уже в определенный файл также догком

То есть то что мы вводили в командную строку мы будем вводить уже в определенный файл также догком буду упрощает автоматизацию запуска контейнеров то есть нам не нужно будет запоминать те команды те параметры которые нам необходимы для запуска контейнеров И последнее это что нужно знать это что док компост описывается в яму файле и зачастую он имеет название Дока минус compos.ямы и Давайте теперь посмотрим пример Для чего используется только compos как это все упрощает нам жизнь Итак мы

теперь посмотрим пример Для чего используется только compos как это все упрощает нам жизнь Итак мы записывали команду в командной строке это doca Run даже указывали какие-то параметры и запускали наш контейнер то есть указывали потом Image это такой простой запуск контейнеров и давать немножко его сейчас усложним Итак добавим допустим порты то есть мы запускаем и мы знаем что используют это веб-сервер мы можем пробросить порты 80 и 443 и также мы добавим Допустим что мы хотим версию не а версию

мы можем пробросить порты 80 и 443 и также мы добавим Допустим что мы хотим версию не а версию Давайте еще усложним наш контент Допустим мы хотим что-то больше Допустим мы хотим при запуске добавлять имя то есть мы чтобы знали что это наш инженекс то есть мы добавляем имя My Engine X Да и параметры остаются такие же самые но нам потом становится мало И мы усложняем еще мы добавляем допустим Volume то есть мы хотим чтобы у нас пробрасывались наше содержание в контейнер то есть мы добавляем два

то есть мы хотим чтобы у нас пробрасывались наше содержание в контейнер то есть мы добавляем два Volume это Volume HTML папка в контейнеры и также допустим какие-то картинки Pictures Да мы добавляем это все в контейнер Ну хорошо как бы уже команда не совсем простая у нас много параметров но мы также можем увеличить наш контейнер добавить еще больше всего и Давайте добавим переменные вот допустим хотим назвать что Engine X Host это будет с таким адресом nero.de и также мы хотим указать у Engine

хотим назвать что Engine X Host это будет с таким адресом nero.de и также мы хотим указать у Engine xupport 80 в данном случае это не имеет большого значения как для примера сойдет хорошо уже много параметров Добавляем еще параметры Итак сейчас мы добавим еще то что мы хотим запускаем наш контейнер в другой сети и вот добавляем параметр минус Минус Network и вебнет и вот наша команда которую мы запускаем допустим у нас вот есть окружение какое-то где нужно эти все параметры будут указывать как

допустим у нас вот есть окружение какое-то где нужно эти все параметры будут указывать как бы заполнить параметры все да один развести второй развести Это нормально Но если нужно будет опять это вспомнить через неделю то вряд ли все параметры вспомните их нужно будет где-то записывает сохранять и так далее и давайте рассмотрим вот сравнение вот этой команды которая у нас есть большая как она будет выглядеть вдоха compose Итак у нас есть дога села и то есть командная строка слева и догокомпус

выглядеть вдоха compose Итак у нас есть дога села и то есть командная строка слева и догокомпус файл Итак в командной строке это выглядит вот так вот ну то есть я написал команды с параметрами друг подружка Но это все будет в одной строке это что мы видим до этого и Давайте теперь Посмотрим как будет выглядеть в Дока компост файле как это мы сможем записать Итак сначала пишется шапка это указывается версия по которой будет работать и далее указывается сервис сервис это описание всех контейнеров

версия по которой будет работать и далее указывается сервис сервис это описание всех контейнеров которые мы будем запускать то есть сервис это один контейнер вот поскольку может управлять сразу несколькими контейнерами то мы можем сюда записать сразу несколько контейнеров Итак Давайте приступим к написанию нашего вот этого контейнера как инструкция запуска нашего контейнера Итак указываем у нас есть веб-сервер мы можем указать его как угодно любое имя придумать далее мы указываем Image и этот

есть веб-сервер мы можем указать его как угодно любое имя придумать далее мы указываем Image и этот Image Это соответствует тому имичу который мы использовали в запуске в командной строке далее мы можем указать контейна name то есть указать как будет нам отображаться наш контейнер как он будет при команде до kps то есть процесс посмотреть мы будем видеть это имя этот параметр он не обязательный но он соответствует нашему параметру name вот далее мы указываем Volume здесь у нас были воли мы

но он соответствует нашему параметру name вот далее мы указываем Volume здесь у нас были воли мы монтировали и также мы здесь можем указать Volume вот все соответствует далее соответственно наши envienned то есть наши переменные Мы также указываем вдоха compose файле далее У нас есть порты Вот наши порты так они записываются вдоха composale далее следующий параметры То есть это правило которое указывает Что нужно делать с контейнером при его установке при перезагрузке сервера и так дальше Стоп

Что нужно делать с контейнером при его установке при перезагрузке сервера и так дальше Стоп то есть при перезагрузке сервером наш контейнер будет иметь тоже состояние что и до перезагрузки То есть он был выключен Он не будет включен соответственно если он был включен Он также запустится Вот очень важно чаще всего используют либо Always то есть всегда будет перезапускаться в наш контейнер неважно что случается с сервером или мы его установили перезагрузили он запускается вот ну и еще одно что мы

случается с сервером или мы его установили перезагрузили он запускается вот ну и еще одно что мы пропустили это Network то есть мы здесь указали Network и в док компот фале это писается вот таким параметром networks и дальше указывается несколько параметров которые описывает ту сеть в которой будет запускаться наш контейнер в данном случае мы будем использовать драйвер grage То есть как бы стандартный драйвер Вот и дадим имя нашей сети это будет вебнет Вот такой способ записи в Дока компос

драйвер Вот и дадим имя нашей сети это будет вебнет Вот такой способ записи в Дока компос файле то есть этот Файлик мы сохраняем как до каком постольчика ямы Вот и все мы можем синхронизировать с китом скопируя куда мы перенести и у нас будет всегда одинаково запускаться наш контейнер то есть вот цель доказ и чтобы запустить именно doca compost Нам нужно будет в месте нахождения нашего файлика то нам стоит только указать либо новый вид записи это дока пробел compose Up минус D это тоже параметр

нам стоит только указать либо новый вид записи это дока пробел compose Up минус D это тоже параметр минус D что здесь то есть он будет запускаться в бэкграунде Ну и Давайте теперь Посмотрим как будет запускаться если у нас есть несколько контейнеров Итак первый контейнер у нас будет PHP и с тегом и печь вот с такими параметры имя Port укажем и укажем что у нас сеть Интернет следующий контейнер который мы будем запускать это у нас будет И еще один контейнер это будет то есть представим такую

который мы будем запускать это у нас будет И еще один контейнер это будет то есть представим такую ситуацию У нас есть какое-то приложение которое работает на PHP Вот и Но это веб-приложение это приложение также используют как базу данных и также используют как кэш допустим это у нас контейнеры Обычно они пустые взятые Затока хабами допустим представим что у нас такая ситуация и Давайте опишем теперь доку компос Итак у нас есть шапка версия и описываем сервисы первый сервис то есть наш первый

доку компос Итак у нас есть шапка версия и описываем сервисы первый сервис то есть наш первый контейнер это будет PHP мы указываем Image вот наша Image который мы будем запускать Далее для удобства указываем контейна name порты перебрасываем указываем правило для рестарта далее Давайте опишем следующий контейнер это у нас будет база данных поскольку это база данных Вот и дальше будет у нас также указываем имидж имя контейнера и параметры запуска далее нам нужно указать будет параметр переменную

имидж имя контейнера и параметры запуска далее нам нужно указать будет параметр переменную это и пароль для запуска это будет просто необходимо и третий контейнер который мы укажем вот радис та же Image имя контейнера или старт далее такая ситуация если у нас есть приложение которое используют базу данных используют кэш то эти две вещи они должны запускаться до того как запустится наше приложение иначе наше приложение Скажет что-то не работает у меня нету базы данных я не знаю где брать свои

иначе наше приложение Скажет что-то не работает у меня нету базы данных я не знаю где брать свои данные поэтому мы можем указать такой параметр как epnz он то есть наше приложение запустится только тогда когда запустится вот эти два других сервиса потом запускается только наше приложение наша этот контейнер мы указали параметры Network да Вы наверное заметили что здесь их нету нигде то давайте это сейчас добавим в мы добавляем Network нет и добавляем радиус также Нетворк и Давайте теперь еще

это сейчас добавим в мы добавляем Network нет и добавляем радиус также Нетворк и Давайте теперь еще одна вещь допустим у нас Приложение работает в паблике то есть любые люди могут подключаться что смотреть что-то делать регистрироваться так дальше и у нас есть получается фронт and то есть та сеть Куда люди подключаются и у нас есть backend то есть где работать наша база данных наш кэш и так далее поэтому Логично было бы добавить наше приложение в две сети и давайте это сделаем это будет Network

поэтому Логично было бы добавить наше приложение в две сети и давайте это сделаем это будет Network интернет и appnet интернет это та сеть типа Bridge который мы сможем перебрасывать порты и люди будут подключаться именно к этой сети а appnet этот Back and Где работает соединение нашего приложения наша базы данных и нашего Кеша Вот то есть мы разделяем как бы наш контейнер на 200 и описание Теперь нужно сделать этих сетей это будет выглядеть так это будет Network интернет Это тип и имя Интернет

нужно сделать этих сетей это будет выглядеть так это будет Network интернет Это тип и имя Интернет также делаем с adnet мы описываем что это тип драйвер Bridge и имя даем ему преимуществ этого всего когда все контейнеры находятся в одной сети это мы уже изучали при изучении Дока нетбук то что наше приложение сможет подключаться по именам по App reds и mtb подключаться к другим контейнерам но мы сейчас рассмотрели Как запускать готовые имиджи Да вот здесь имидж PHP на самом деле это обычный

мы сейчас рассмотрели Как запускать готовые имиджи Да вот здесь имидж PHP на самом деле это обычный имидж который находится только хаб он как бы пустой Да там есть какая-то стартовая страница и все но если допустим нас есть приложение написано нами Мы хотим там добавить наши наш контент туда какие-то изменения сделать и так далее то нам не обязательно сначала делать как мы на прошлом видео изучали мы можем это все здесь описать То есть у нас будет в одной директории допустим находиться наш файл

мы можем это все здесь описать То есть у нас будет в одной директории допустим находиться наш файл и Дока файл с предыдущего видео то мы можем просто напросто указать вместо Image мы можем указать бильд и точка допустим у нас в этой директории Вот мы указывали Image PHP apech Будет сначала собран контейнер Наш новый имидж и он будет запускаться Ну то есть он будет собран после того как запустится наши fdb и радиес и вот такой вот способ записи когда мы хотим чтобы приложение Наше большое

наши fdb и радиес и вот такой вот способ записи когда мы хотим чтобы приложение Наше большое приложение находилась полностью в Дока компост здесь все правила описываются при запуске контейнеров и Давайте теперь посмотрим на практике переходим в консоль Так мы на сервере субботу 204 Где установлен токер и чтобы начать использовать только compost нам нужно сначала установить его Давайте проверим установлен ли до каком пост на этом сервере пишем только compos минус Минус вяжем не установлено еще

ли до каком пост на этом сервере пишем только compos минус Минус вяжем не установлено еще стоит проверить такую штуку как только пробел compose и вяжем то есть Это старая способ записи дога компот А это как бы новый то есть здесь это когда используется именно плагин до каком это Когда установится только компас обычный То есть это такие вещи стоит запомнить просто это старый это но и давайте мы установим только переходим на официальный сайт токером и здесь есть такой пункт как установка и

мы установим только переходим на официальный сайт токером и здесь есть такой пункт как установка и установка Linux Итак мы будем использовать Ubuntu как бы стоит добавить репозитории в на сам сервер И поэтому это мы можем сделать делаем Update следующую команду Давайте скопируем устанавливаем дополнительные пакеты как бы они все с нуля но еще раз это сделаем так далее мы добавляем ключ и добавляем собственно репозиторий только лист отлично теперь переходим снова к установке бунту делаем снова

собственно репозиторий только лист отлично теперь переходим снова к установке бунту делаем снова обновление обновляем репозиторий который только что установили готово и установим теперь плагин так идет звука плагином мы спускаем ниже и вот таким образом мы проверим установлен ли у нас долго compose Давайте скопируем сразу и вставляем все у нас установлен Doc compose версии 210 и с ним и будем работать Итак давайте перейдем теперь в директору где будем создавать наши компас файлы и обычно это

Итак давайте перейдем теперь в директору где будем создавать наши компас файлы и обычно это делаю папки опт и это наши старые примеры Давайте создадим новую папку компас и зайдем в компост так и чтобы начать нам нужно создать Файлик называется doco compos ямы создаем файл Touch Только compos я и редактируем его Итак чего мы начнем И давайте мы начнем все же с наших примеров которые мы смотрели на слайдах Итак Вот первый пример я скопирую команду которая была Вот такая вот команда это мы обычный

слайдах Итак Вот первый пример я скопирую команду которая была Вот такая вот команда это мы обычный запуск нашего контейнера Давайте даже ее вот так вот скопируем и запустим посмотрим работает ли она вообще вот запуск контейнера и Engine X stable не очень удобно отображаться вот так получше будет Вот с открытием портов из определенными переменными но запускаем да нам говорит что у нас не создана сеть Ну можем ее создать вручную Или давайте просто мы уберем этот параметр чтобы нам потом не

сеть Ну можем ее создать вручную Или давайте просто мы уберем этот параметр чтобы нам потом не путаться и мы посмотрим как делать то как и Давайте все-таки еще раз запустим все у нас работает проверяем до капец у нас работает Man Engine X мы можем это проверить на сразу на сайте так 10 10 194 Вот и у нас работает наш Engine X Ну как бы все отлично все хорошо давайте его основе убьем только стоп мы инженекс и также его убьем готово и Давайте эту команду Мы закинем сейчас в наш Дока компос файл

мы инженекс и также его убьем готово и Давайте эту команду Мы закинем сейчас в наш Дока компос файл для примера чтобы нам все было видно и начинаем писать на что как у pos-файл Да я буду писать вручную не будем ничего копировать и так как мы говорили у нас изначально идет название версии далее записывать все в формате ямы так версия у нас ну Давайте возьмем 35 самое новое 39 далее мы указываем все в СС и Далее идет описание нашей контейнеров Я в информатики очень важно обращать внимание на

все в СС и Далее идет описание нашей контейнеров Я в информатики очень важно обращать внимание на пробелы то есть сервисы и мы дальше описываем немножечко отодвигаясь от этого То есть все что мы описываю она будет относиться к сервисам Итак у нас будет название нашего сервиса это веб сервер и Далее идет описание веб-сервера то есть мы идем про белый тока сервер Ну еще парочку пробелов доволен чтобы относился Итак пишем Image Откуда мы это будем копировать и мы будем брать имидж инженекс вот

чтобы относился Итак пишем Image Откуда мы это будем копировать и мы будем брать имидж инженекс вот стабильной версии Далее для удобства я укажу контейн и это у нас будет как мы назвали наш контейнер My Engine X вот далее Давайте укажем Volume который у нас есть пишем параметр 8 и далее У нас уже относится ниже Volume да то есть еще пробелы ставим делаем список и у нас Volume 1 вуль У нас вот такой вот и добавляем сейчас 2 так вот сейчас ровненько нужно и добавляем 2 Volume хорошо следующий

такой вот и добавляем сейчас 2 так вот сейчас ровненько нужно и добавляем 2 Volume хорошо следующий параметр У нас есть nines переменная пишем так добавляем переменные первая переменная и сейчас добавляем вторую переменную в обычном редакторе намного проще делать там быстрее будет Tap Tab и все но это Vim здесь Tap Tab не получится то есть оно будет отображаться как таба нужно именно пробелы это очень важно нужно обращать внимание что были не табы а именно Space и пробелы Так у нас есть

это очень важно нужно обращать внимание что были не табы а именно Space и пробелы Так у нас есть перемены далее мы указываем порты параметр у нас будет под и также под портами у нас будет 80 80 и второй порт это будет 4 4 3 4 3 далее Я люблю указывать параметры запуска то есть при стат и будет unless чтоб вот так Так кто и следующее что мы укажем это Network где будет запускаться и вот наш контейнер Ну то есть мы можем сделать глобальную запись то есть мы пишем вот под сервисами то есть будет

Ну то есть мы можем сделать глобальную запись то есть мы пишем вот под сервисами то есть будет задаваться нас сеть дополнительное и уже будет помещаться в неё те коты некоторые здесь описывается и давайте это сделаем это будет networks так далее дефолт то есть сеть будет по умолчанию создана далее указываем драйвер это будет нас Бридж и также можем дать имя это все всему это будет webnet Да вот как мы здесь назвали webnet все у нас все записи есть кроме минус Di мы не указали Но это параметры

как мы здесь назвали webnet все у нас все записи есть кроме минус Di мы не указали Но это параметры запуска именно только compos мы сейчас это все посмотрим проверим все готово вот так у нас выглядит только компост файл вот сверху Это пример Давайте красивее это все сделаем вот так вот она запись Давайте теперь это все запустим сохраняем пишем только composs внимание что здесь пробел а не минус пишем а нужно правильно все записывать драйвер драйвер Да все правильно Так теперь еще раз пробуем и

а нужно правильно все записывать драйвер драйвер Да все правильно Так теперь еще раз пробуем и снова опечатка давайте это все исправлять когда быстро пишу у нас не Нижний подчеркивание А минус так вот все Давайте еще раз запускаем но в первом случае у нас создался создала сеть вебнет и на запустился контейнер Да он как бы маленькую у нас было уже скачанный поэтому много времени Давайте посмотрим браузером так обновляем нашу страницу еще раз обновим еще раз еще раз Ну как бы у нас Engine X

браузером так обновляем нашу страницу еще раз обновим еще раз еще раз Ну как бы у нас Engine X отображается да давайте можем еще в одну вот нас Engine X как бы все работает все прекрасно и мы здесь сразу же видим блок нашего до каком фосфайла то есть тому что там запустилась и также здесь слог отображается Вот моя инженекс именно это говорит что о том именно этот Лог относится к этому контейнеру но это мы запустили в как не фоне То есть у нас это все работает нажимаем Control C убиваем

но это мы запустили в как не фоне То есть у нас это все работает нажимаем Control C убиваем контейнер Давайте запустим его фоне минус D также Какие доктор все у нас контейнер работает можем проверить это все до kps он же ник Все работает наши параметры все есть также можем перейти снова браузер Все работает все прекрасно но мы допустим вот так вот запустили наш докаком поз и хотим все же смотреть логи которые там отображаются это делается очень просто пишем только compos locks минус F и Вот

логи которые там отображаются это делается очень просто пишем только compos locks минус F и Вот наши логи отображается дальше вот таким образом Итак что мы просто выходим с логов Control C если мы вышли а наш токер наш контейнер работает дальше вот таким образом чтобы это все остановить просто пишем в этой директору Где находится только compost файл Дока компас Стоп Все на все убито теперь можно посмотреть Дока пи с минус А вот наши контейнеры еще созданные это какие-то да это старые с прошлого

Дока пи с минус А вот наши контейнеры еще созданные это какие-то да это старые с прошлого Видео давайте это все мы поубиваем только ему все у нас все чистенько это Вот такой у нас пример и Давайте немножечко покажу вам Что относится к Volume так отметить указали именно Host Volume то есть мы перебрасывали какую-то директорию локальную по директорию В контейнере вот ну допустим если у нас есть еще config файл Ну какие-то вот конфиг нашим Давайте создадим еще новые так но теперь у нас будет

еще config файл Ну какие-то вот конфиг нашим Давайте создадим еще новые так но теперь у нас будет просто конфиг Ну вот такой вот Давайте Engine X config это будет как named Volume то есть именной Volume мы его будем сохранять Ну допустим это будет конфиг для нашего приложения это будет также вам Давайте будет конфиг неважно пускай будет так да Вот кстати еще вам покажу что мы создавая здесь пульмы и указали вот такие вот директории но я и до этого не создавал мы посмотрим что эти территории

и указали вот такие вот директории но я и до этого не создавал мы посмотрим что эти территории были созданы автоматически вот мы указали конфиг такой вольвом но для того чтобы это все сработало нам нужно это все описать что это за Volume такой поэтому Обычно внизу только compose описывается volums и далее указывается Volume которая именно именные Ну это у нас будет Engine X и уже скопирую чтобы не сделать опечатку все сохраняем выходим и Давайте снова Мы запустим то как Давайте запустим но тем

сделать опечатку все сохраняем выходим и Давайте снова Мы запустим то как Давайте запустим но тем не менее я сделал отпечатку видимо Да нужно в конце еще ставить двоеточие все так все запускаем у нас работает смотрим Дока PS Да все прекрасно сработает дальше то что я говорил по поводу volum Да вот которые создавались Давайте зайдем в эту директорию веб и посмотрим что у нас вот эти вот территории они создались автоматически также создалась территория genix config в директории Докера так хорошо

они создались автоматически также создалась территория genix config в директории Докера так хорошо это все работает Давайте убьем наш Дока компос двинемся обратно к нашему дому до каком поз сто п все у нас установлен контейнер и Дока пьеса проверим Давайте Вернемся перед ко второму примеру это у нас будет пример с тремя контейнерами теперь задаем следующий Дока компост и Давайте скопируем примеры нашего слайда то есть там где у нас три три контейнера так готово Теперь давайте будем писать наш

нашего слайда то есть там где у нас три три контейнера так готово Теперь давайте будем писать наш тока файл Итак пишем как обычно Давайте посмотрим здесь 3 6 принципе можно 35 она там разница невелика также указываем даже будем писать наши сервисы Итак первый сервис у нас будет PHP [музыка] также мы указываем Image и первый имидж у нас будет PHP с тегам печи далее указываем Ну как обычно контейнерные давайте это у нас будет Да как здесь мы указали это будет далее мы указываем порты так порты в

давайте это у нас будет Да как здесь мы указали это будет далее мы указываем порты так порты в первом случае мы указали 80 80 и так у нас есть три приложения три контейнера это наше приложение само основанное на PHP допустим да это все такое виртуально допустим у нас есть база данных и у нас есть кэш То есть у нас база данных на основе кэш у нас будет на основе и наше приложение само и даже мы написали зависимости что наше приложение самому будет запускаться после базы данных и после кэша после

зависимости что наше приложение самому будет запускаться после базы данных и после кэша после Radisson и также мы внизу добавляем сети networks у нас Мы добавляем две сети типа Bridge Это он с именем интернет и локальный и Давайте проверим какие у нас сети есть уже установленные на сервере то есть в докере выходим сохраняем и Давайте посмотрим Наши сети Дока Network LS и вот мы видим сеть который была создана предыдущая вот с предыдущего тока compose это webnet и также наши сети вот с

который была создана предыдущая вот с предыдущего тока compose это webnet и также наши сети вот с предыдущих видео Давайте запустим теперь наш только compos только и все идет скачивание дока имиджей дальше насадуются сети и все идет запуск нашей контейнеров вот мы видим что у нас теперь разные цвета у нас есть приложение App postcreas ошибка снова пост по стресс Ну ладно И у нас есть как бы это все у нас запустилось все работает ну как бы это приложение она ничего не делает мы пробросили порт

все у нас запустилось все работает ну как бы это приложение она ничего не делает мы пробросили порт 80 если мы зайдем в браузер Да И вот на наш сервер обновляем страницу ничего не отображается потому что у нас само приложение оно не совсем работает но это такое Я просто показать как запускается три контейнер как это все описывается как это запускается давайте это убьем и запустим это в 2000 моде минус Team готово и Давайте посмотрим до капец у нас Вот видите три контейнера есть PHP с тегами

минус Team готово и Давайте посмотрим до капец у нас Вот видите три контейнера есть PHP с тегами если мы убиваем Дока компот компост Стоп Все то идет основы контейнеров все готово да у нас теперь никаких контейнеров нет запущены отлично это были такие вот примеры просто как запускаться как это все описывается но Давайте теперь посмотрим что-то более интересное то что можно установить дома и как-то логично использовать я подсмотрел на Дока компост Я выбрал такой контейнер как Flame Да это то

логично использовать я подсмотрел на Дока компост Я выбрал такой контейнер как Flame Да это то есть такой вот дэшбот где мы можем создавать сохранять какие-то ссылки на какие-то сервисы Ну давайте посмотрим как он запускается здесь установка и вот как запускается сам контейнер давайте скопируем это все И перезапишем это вам только компас файла Так давайте мы создадим новую папку это будет у нас Flame Заходим в папку и здесь будем их создавать наш дока композ ямы Так давайте скопируем команду в

Заходим в папку и здесь будем их создавать наш дока композ ямы Так давайте скопируем команду в котором вставили команду которая нам показывает Как запускать наш Flame и Давайте будем писать наш Итак как обычно Давайте будем это у нас 3.5 [музыка] дальше сервис далее мы указываем это будет у нас сервис Flame не будем выдумывать никаких имен [музыка] далее пишем Image [музыка] здесь Flame далее пишем даем название нашему контейнеру контейнер name также будет у нас Flame далее стоит указать порты

даем название нашему контейнеру контейнер name также будет у нас Flame далее стоит указать порты вот Так у нас пять тысяч пять Ну пускай будет такой порт и оставим так далее У нас есть Volume и переменные давайте это запишем и invaмент так Volume здесь написано путь к данным Ну давайте эту будет у нас опт Flame и Data вот Такой путь допустим там будет храниться наши измененные файлы то есть чтобы мы запускали наш контейнер и наши настройки сохранялись нам данных уже изначально хранить надо

мы запускали наш контейнер и наши настройки сохранялись нам данных уже изначально хранить надо программу сама и переменные так чтобы красиво было и переменную пасхал Flame Password это Принт для того чтобы могли зайти там в Back and и что-то настроить как Ну в принципе вот все и еще Давайте добавим restat чтобы у нас контейнер Не запускался сам по себе при перезагрузке все готово Давайте вот 123 всё сохраняем выходим только компос Up о отлично Да все равно ошибку сделал так да давайте перейдем

всё сохраняем выходим только компос Up о отлично Да все равно ошибку сделал так да давайте перейдем еще на Дока хаб здесь указано с Flame но есть мы посмотрим вверх то здесь указывается что сам контейнер называется не только Flame Да нужно скопировать именно вот этот полностью вот как здесь команда показывается где пул и вот этот полностью команда скопировать копируем и Давайте изменим наш редактируем домоком pos-файл и в Image Flame найти только не смог А вот такой контейнер Давайте попробуем

домоком pos-файл и в Image Flame найти только не смог А вот такой контейнер Давайте попробуем еще раз тогда все у нас идет скачивание имиджа видите есть мы не указываем никакой никакую сеть то будет создаваться сеть Flame Network то есть название самого контейнера и дефолт по умолчанию все у нас как бы все запустилась это у нас пор был 5000 5 и давайте это проверим так 50005 все у нас Все работает Даже мы можем здесь зайти все изменить но суть не в этом не в этом приложении а к запускается наш

Даже мы можем здесь зайти все изменить но суть не в этом не в этом приложении а к запускается наш контейнер Ну это у нас один контейнер и Давайте добавим в тот же только компас файл еще один контейнер еще просто какой-нибудь контейнер это возьмем другое dashboard называется есть мы спустя в ниже немножечко то здесь есть описание всех параметров какие есть и также есть пример Дока компас файла и вот до какого наше все знакомое версия 21 указывается сервис и дальше идет описание сервиса мы

и вот до какого наше все знакомое версия 21 указывается сервис и дальше идет описание сервиса мы сделаем проще Мы возьмем это все скопируем просто и добавим к нашему то как файлу вот опускаемся ниже с новой строчки и теперь нужно подредактировать это все так чтобы это все было в одну линию все готово дальше что у нас здесь происходит Мы скачиваем Image который указывается который Вот и мы считаем У нас есть контейны у нас есть переменные [музыка] это Times on то есть мы можем указать где вы

У нас есть контейны у нас есть переменные [музыка] это Times on то есть мы можем указать где вы находитесь чтобы правильно отображалось время мне будет Берлин далее он стоит указать volums где будет храниться наших конфиги давайте это мы сделаем Давайте по стандарту вот опт конфиг и будет монтироваться в комплекте то есть там Hyundai sads твои конфиги То есть позициям дата будет постоянные данные у нас пробрасывается порты 80 и 443 и параметры перезапуска Давайте посмотрим что у нас произойдет

у нас пробрасывается порты 80 и 443 и параметры перезапуска Давайте посмотрим что у нас произойдет сейчас только компас и запускаем идет скачивания так как видим у нас Hyundai запустился и Flame и видите мы видим Лог и хайм так и Flame то есть наши предыдущие контейнер Давайте перейдем на сервер перезагрузим здесь 5000 5 это наш Flame и давайте сейчас мы зайдем на порт 80 то есть не будем указывать никакой порт и вот наш другой сервис все как бы работают они то есть там там его нужно настроить

никакой порт и вот наш другой сервис все как бы работают они то есть там там его нужно настроить такое это не столь важно у нас работает сервис его я рассматривал на предыдущих видео хорошо это такие два простых сервиса два простых контейнером и Давайте немножко усложним наш контейнеры и запустим nexcloud сделаем до каком после Давайте остановим эти контейнеры нам не нужны Control сразу выходим они контейнер останавливается Хорошо давайте создадим папку для NEX кода и Заходим в папку на

они контейнер останавливается Хорошо давайте создадим папку для NEX кода и Заходим в папку на эксплоудом создаем сразу файлик докупус [музыка] и Давайте посмотрим на доках об что нам предлагает только Hub Как запустить nexcloud так страничка на исходу на doca habi спускаемся ниже посмотрим какие у нас параметры есть и как это все запускаться еще не зачастую когда только ha предлагает большие какие-то контейнеры большие сервисы то сразу же есть описание то как композа мы можем скопировать

какие-то контейнеры большие сервисы то сразу же есть описание то как композа мы можем скопировать немножко подправить немножко добавить какие-то перемены и у нас будет полноценный рабочий так здесь нам показывают как обычно запустить его чтобы быстренько без больших настроек еще этим ниже спускаемся ниже так здесь описание переменной которого можно добавить которые некоторые которые нужно добавить некоторые можно добавить опускаемся ниже и вот у нас есть пример Как запустить nexcloud с

добавить некоторые можно добавить опускаемся ниже и вот у нас есть пример Как запустить nexcloud с использованием puss Да у нас Две версии есть у нас есть просто печи базовая версия У нас есть также fpm с использованием 3 контейнера база данных само приложение и веб то есть веб-сервер ну мы будем использовать Попроще давайте это все скопируем и ставим в наш тока компас хорошо и давайте сейчас посмотрим сверху вниз Давайте нам изменим сразу версию 3.5 Итак здесь сверху указано Volume Ну пускай

сверху вниз Давайте нам изменим сразу версию 3.5 Итак здесь сверху указано Volume Ну пускай будет сверху дальше у нас указывается сервисы У нас есть база данных что мы используем это Image Мария тебе как база данных запускается автоматически перезапуск Ну оставим так Да что автоматически указывается команда это мы уже не рассматривали Это команда при запуске контейнера чтобы запущена дальше волю мы вот видите здесь сверху были указаны и вот именные воли мы тебе и вот используя первую букву для

мы вот видите здесь сверху были указаны и вот именные воли мы тебе и вот используя первую букву для базы данных чтобы данный были постоянно сохранялись далее есть есть некоторые заполненные есть некоторые не заполнены Давайте дополним Итак Майский Root Password то есть нужно указать пароль для базы данных для рута Ну давайте попроще пас 123 не столь важно и дальше мой пазл для именно пользователя nexl Да здесь мы видим что создается база данных nexcloud и создается пользователь Next Cloud и

nexl Да здесь мы видим что создается база данных nexcloud и создается пользователь Next Cloud и нужно для него создать пароль Ну давайте будет АС так на x-клауд пойдет все с базой данных мы завершили То есть это настройки базы данных даже Идет настройка самого приложения самого nexcloud то есть мы берем Imagine перезапуск также постоянно порты которые будут перебрасываться топор 80 80 спорт 80 в контейнере Ну хорошо запомню что нам нужно будет в браузере зайти на порт 8080 даже используется

в контейнере Ну хорошо запомню что нам нужно будет в браузере зайти на порт 8080 даже используется линкс но здесь был пример версии где стоял версия 2.0 да тогда использовали линки сейчас линкс Не используют в принципе там может быть для леса и да то есть какие-то другое имя то есть мы можем так написать там май типе то есть мы сможем сделать что наша база данных Также будут откликаться на мать мы будем ее вызывать это мы уберем нам линз не нужны так Volume у нас остаются также именной volumex

будем ее вызывать это мы уберем нам линз не нужны так Volume у нас остаются также именной volumex Cloud хорошо вот здесь сверху написывается и дальше идет описание переменных То есть это минимальные перемены которые нам нужно указать для работы его и также мы здесь видим что указывается массу и пас Вот и вот Майская пазл который мы добавили это Мы также берем и добавляем сюда в данном случае что происходит создаются база данных задается сам сервер Майский Мария диби на этом сервисе дается база

происходит создаются база данных задается сам сервер Майский Мария диби на этом сервисе дается база данных добавляется пользователя Next Cloud и добавляется к Этому пользователю пароль те же параметры должны быть и здесь то есть мы указываем здесь mysql Host это db контейнер вот имя тебе вот это имя то о чем я раньше рассказывал дальше мы указываем пользователя который будет использовать для подключения к базе данных это nexcloud такой же как и здесь с паролем вот пас NEX Cloud так такой же как

к базе данных это nexcloud такой же как и здесь с паролем вот пас NEX Cloud так такой же как мы изменили здесь и будут подключаться к базе данных Да очень много слов нет дальше Ну окей Все у нас это Готово это минимальная настройка то есть для продакшна То есть если вы это хотите продуктивно использовать то вам желательно добавить намного больше параметров но речь не об этом речь идет о до каком Итак сохраняем выходим и запускаем Дока компас об на скачиваем редибил и скачивается сам nexcloud

Итак сохраняем выходим и запускаем Дока компас об на скачиваем редибил и скачивается сам nexcloud все у нас создались сеть Давайте выше вот у нас создалась сеть дефолт нас добавился Volvo мы вот которые мы создавали и контейнеры Да мы здесь не указали контейна name поэтому у нас остались db1 то есть по названию Вот nexcloud это название папки который мы сейчас находимся и поэтому автоматически такой вот по создавалась до App 1 И теперь по названием именно сервисов Итак спускаемся ниже все у нас

вот по создавалась до App 1 И теперь по названием именно сервисов Итак спускаемся ниже все у нас поди сюда Что запуститься было Давайте принципе сразу браузере и проверим переходим на север и мы указывали порт 80 80 все у нас есть здесь можно создать то есть начальная страница при старте все у нас работает иначе у нас бы появлялась отображение что база данных не подключена ошибка была все отлично это работает Можете даже продолжать Можете даже создавать пользователя настраивать и так далее но я

это работает Можете даже продолжать Можете даже создавать пользователя настраивать и так далее но я говорю что лучше всего перейти все же на Дока хаб и посмотреть какие еще параметры есть в для Next колода которые вам необходимо добавить чтобы немножко обезопасить немножко ускорить работу и так далее хорошо nexod мы разобрались и Давайте еще посмотрим такую очень знаменитую вещь как WordPress Кто знает этот cms для создания веб сайтов веб-сервисов Чего угодно общем это огромная штука вот и

Кто знает этот cms для создания веб сайтов веб-сервисов Чего угодно общем это огромная штука вот и давайте это все мы сейчас создадим то есть в докере запустим допустим Итак вы понимали что WordPress это не маленькая штучка и поэтому она также должна предлагать докафа У нас есть описание параметров переменных обычный запуск через командную строку нас интересует именно только Ну и вот у нас версии 31 Давайте все скопируем и запустим и здесь вот value мы указывается внизу как бы это то что

версии 31 Давайте все скопируем и запустим и здесь вот value мы указывается внизу как бы это то что привычно то что удобно Давайте перейдем на север убиваем это все перейдем Давайте создадим новую папку WordPress [музыка] заходим также создаем только мы вставляем наши вещи и Давайте посмотрим Давайте снова что-то Мне нравится версия 35 сервисы это у нас WordPress перезагрузка постоянно порты 8080 Ну принципе оставим так же как есть у нас есть WordPress тебе Host то есть каком хосту мы

8080 Ну принципе оставим так же как есть у нас есть WordPress тебе Host то есть каком хосту мы подключаемся это будет нас hostibin далее вот пресс пользователь который будет пас пароль название базы данных дата мы это ничего Изменять не будем знаете что параметры которые здесь указано они должны быть также указаны здесь дальше Давайте здесь у нас база данных еще одна Volume Да у нас Volume именной болью создается это нормально Здесь его есть описание Также вы можете это все менять можете также

болью создается это нормально Здесь его есть описание Также вы можете это все менять можете также указывать там слэш допустим директории так далее перебрасывать монтировать это все вы можете изменять это все будет также работать хорошо Итак дальше база данных основанная на Москве 57 перезапуск всегда переменная указывается мой следует замкнут тебе пользователь пароль для пользователя вот эти вещи должны быть такие же как здесь принципе но такие есть все дальше здесь для рута указан дом Root

должны быть такие же как здесь принципе но такие есть все дальше здесь для рута указан дом Root Password но лучше укажу просто что хочу контролировать пас вот и она Давайте будет Root тебе ПАЗ вот так вот и указывается фолима как бы все хорошо все есть мы можем также здесь добавить Dance он ну принципе делать мыть не будем суть не в этом клан чтобы запустить и она работала даже стоит для продакшна конечно же добавить переменных побольше чтобы удобнее было работать и более безопасно и запускаем

конечно же добавить переменных побольше чтобы удобнее было работать и более безопасно и запускаем только скачивание WordPress и базы данных так все у нас запускается вот пресс база данных немножко подождать Должно все у нас работать отлично сейчас создается как сэмплу базы данных создаются таблицы так в принципе все можем переходить и у нас порт был 8080 так такой же как запускался Ну ладно поэтому у нас ошибки нету перезапускаем Да все у нас WordPress работает вот админ панель Спускаюсь ниже

у нас ошибки нету перезапускаем Да все у нас WordPress работает вот админ панель Спускаюсь ниже допустим выберем русский продолжить Все работает все отлично Вот так работает только компас основой Control 7 все отлично Надеюсь я понятно вам рассказал как работает Дока компос что это намного упрощает запуск контейнеров Вы можете сразу в один файл добавить много контейнеров и запускать с помощью одного файла так конечно делать не стоит Вы можете дать различные именно до каком пост файлом и

одного файла так конечно делать не стоит Вы можете дать различные именно до каком пост файлом и запускать их в какой-то последовательности это автоматизацию То есть у вас вот все в одном файле то есть вот есть все параметры нужно иначе было бы вбивать в одну командную строку один-два раза можно запомнить если у вас 20-30 контейнеров там 40 контейнеров то это будет немножко сложновато вот все спасибо что следующее видео

Portainer. Управлять Docker ПРОСТО. Обзор, установка, настройка.

друзья Всем привет На прошлой видео мы рассматривали Как работать с токер контейнерами Как создавать контейнеры Как создавать Volume сети с помощью командной строки Как управлять этим всем с помощью команд мы изучили очень много но иногда хочется просто клики клики и чтобы создавать контейнеры создавать до каком пост файлы и так далее чтобы это было намного проще в этом нам может помочь партнера тренер это мега популярная вещь которую используют практически все кто работает с докторами она

тренер это мега популярная вещь которую используют практически все кто работает с докторами она упрощает создание контейнера управления контейнерами Смотреть логи можно можно добавлять очень много хостов в один сервер объединять и с одного места управлять всеми контейнер Вот вы сейчас перед экраном видите графическую оболочку этого всего Но мы начнем все сначала и посмотрим как устанавливается Партнер как он настраивается и Как создаются контейнер в принципе это все и Давайте не терять время и

как он настраивается и Как создаются контейнер в принципе это все и Давайте не терять время и начнем с ног Итак чтобы нам использовать партейнер нам нужно установить именно docker Итак я использую сервер Ubuntu 204 Давайте посмотрим пункт 22.04 на него Будем ставить в первую очередь докер и Дока компос Итак сразу Давайте перейдем к Руту и будем скачивать устанавливать докер будем делать с помощью скриптака который предлагает сам Дока хаб для этого скачиваю сам скрипт это и далее Get taka.com и

скриптака который предлагает сам Дока хаб для этого скачиваю сам скрипт это и далее Get taka.com и будем сохранять это файле Get током точка SH все скачиваем скрипт скрипт скачали вот он и теперь его запускаем к идет скачивание необходимых пакетов и установка готова до Красной Давайте проверим только минус Минус версия 20.10 и также должен установить его сразу же Дока компас тоже все компост версии 2.12 прекрасно больше нам ничего не нужно и теперь давайте посмотрим как устанавливаться им на

2.12 прекрасно больше нам ничего не нужно и теперь давайте посмотрим как устанавливаться им на сам по Тайна так переход на страницу по тренера что мы видим у нас на начальной странице очень такая красивая информация все есть и дальше сверху нас есть мы посмотрим в праздник то мы увидим что все у нас платная здесь есть интерфейс который еще дороже стоит но не пугайтесь можно поставить использовать бесплатно И для этого переходим в документацию из либо в Google и пишем Мы открываем открывается

бесплатно И для этого переходим в документацию из либо в Google и пишем Мы открываем открывается вот такая вот страница Где мы можем посмотреть варианты установки мы переходим в портретарь У нас есть несколько вариантов как мы хотим установить это Дока стен то есть на обычный сервер с помощью докапом есть у вас класса и будем ставить простой версии Это только Standalone далее Мы можем поставить У нас есть выбор У нас есть Дока он Linux далее Это Windows и Windows понятно что эти две вещи нам

У нас есть выбор У нас есть Дока он Linux далее Это Windows и Windows понятно что эти две вещи нам абсолютно не подходит Мы работаем переходим в Linux и далее спускаемся ниже здесь койка информация также предлагать нам создать Volume для Porter на дата то есть там будет сохраняться настройки именно саму по тренера но немножко сделаем по-другому здесь У вас есть выбор на бизнес Edition они делал Что бизнес мы уже посмотрим какие возможности он добавляет но он будет платный нас интересует

делал Что бизнес мы уже посмотрим какие возможности он добавляет но он будет платный нас интересует бесплатная версия так первым вот этот вот вещь и вставляем на наш сервер но пока что не нажимаем Enter я пропущу и нажму Control C Итак что мы видим у нас запускается доктор ран пробрасывается порты 8000 и порт 9443 для доступа будет задаваться контейнер с именем портвейна restat он будет перезапускаться всегда когда он падает что-то еще с ним случается Далее пробрасывается в это Дока сок сок то

всегда когда он падает что-то еще с ним случается Далее пробрасывается в это Дока сок сок то есть чтобы Партнер мог управлять именно докером это обязательно обязательно запускать его как Root либо нужно давать определенные права далее пробрасывается Volume portana Data то есть где и будет сохраняться настройки самого контейнера мы это немножко изменим Вот и вследж дата в самом партнере и будет запускаться скачиваться вернее Image Pro 13 Edition это все классно но давайте это немножко

и будет запускаться скачиваться вернее Image Pro 13 Edition это все классно но давайте это немножко перезапишем наверное вдруг он постфал так будет удобнее переходим сразу территорию опт и создаем папку Заходим в папку по тейна и в эдитаре VI создаем докакомпас и Давайте при запишем это все в Дока компот Итак мы перезаписали нашу одну команду в Дока компос файл то есть будет запускаться сервис portane будет скачиваться Image такой же как и в одной команде здесь последней версии будет даваться

будет скачиваться Image такой же как и в одной команде здесь последней версии будет даваться именно нашему контейнеру соответствует далее я добавил advant переменную чтобы у меня время в тренеры указывалось правильно далее буду добавляться вульмы вот то что я говорил сок у нас остается как и был А вот именно дата я монтирую так будет проще переносить потом контейнер на другой сервер далее Нужно обязательно бросить порты такие же самые какие здесь указывается ничего не мешает прекрасно все

обязательно бросить порты такие же самые какие здесь указывается ничего не мешает прекрасно все работает все мы удаляем нашу команду которая здесь указана была делаем красивым сохраняем выходим www и запускаем наш только компас Дока компост ап минус D все ее скачивание самого под тренера и будет запускаться готово контейнер создан смотрим до капец у нас есть запущенный контейнер по порту 943 мы сможем Достучаться уже установленной версии Итак посмотрим IP адрес самого сервера который у меня

сможем Достучаться уже установленной версии Итак посмотрим IP адрес самого сервера который у меня здесь установлен 40 22 в конце переходим в браузер 9443 так нас предупреждаю что сертификат не действительный это нормально потому что создавался сертификат именно с моим партнером это нормальным нажимаем дополнительно принятие риски и продолжить и вот наша Стартовая оболочка нам нужно создать имя пользователя админа который будет всем этим управлять и создать пароль самое главное это нужно пароль

админа который будет всем этим управлять и создать пароль самое главное это нужно пароль иметь 20 символов потом это можно уменьшить или изменить Но сейчас нужно именно 12 убираем эту галочку в принципе можно ставить чтобы статистика отправляться анонимно Партенит создаем пользователям готово у нас открывается сам пар тренера и теперь можем уже с ним работать нас сразу открывается но давайте пока что пройдемся по настройкам я вам покажу Какие настройки где есть Для чего нужны очень классно

пока что пройдемся по настройкам я вам покажу Какие настройки где есть Для чего нужны очень классно партнеры то что у вас очень лаконичные настройки и они Понятно вместе находятся и Давайте самое первое что я всегда делаю Это перехожу в мой аккаунт и поменяем тему у нас есть вот здесь Кстати вы можете поменять пароль exis token создавать Это для автоматизации сейчас нам это не столь важно И вот здесь пользовательская тема можете поставить высокий контраст обычная тема либо темная тема что мы

здесь пользовательская тема можете поставить высокий контраст обычная тема либо темная тема что мы можем делать в настройках юзеры Это не дело создать новых пользователей какие-то права создать группы то есть Team какая то объединить пользователем группы роли здесь Конечно есть ограничения чтобы создать роли Вам необходимо иметь бизнес Edition далее здесь мы будет отображаться наша то есть наши докер сервер поэтому посмотрим попозже Также можно объединить наши докас серверы в группы добавить

докер сервер поэтому посмотрим попозже Также можно объединить наши докас серверы в группы добавить теги по умолчанию Мы скачиваем сразу все имиджи с Дока хаба но мы можем добавить registream допустим частный Я показывал на прошлых видео как сделать но Также вы можете добавить другие вот interfication Look К сожалению мы также видим что нужно бизнес Edition далее мы видим все что происходило на сервере На какие изменения были здесь какие-то общие настройки мы можем делать Также можно добавлять с

На какие изменения были здесь какие-то общие настройки мы можем делать Также можно добавлять с сертификаты свои сертификаты которые можете здесь загрузить с помощью файла и очень классная вещь это создание бэкапов далее классная штука что мы можем использовать Да что есть кто использует что-то еще вы можете без проблем ничего за это не платить вы можете использовать этап здесь все настройки уже есть настройка не так много но все необходимое есть мы есть мы перейдем снова в home то мы видим что

настройка не так много но все необходимое есть мы есть мы перейдем снова в home то мы видим что партейнер он автоматически подключился локально мы можем управлять локальными контейнерами которые есть на серии куда мы установили сам портрет и на домашней странице мы можем сразу видеть что у нас есть локоть Мы нажмем сюда то мы здесь видим такую вот отображается все основные цифры которые есть у нас один контейнер работает у нас один стек нас один имидж и 4 эти все пункты это все пункты также

нас один контейнер работает у нас один стек нас один имидж и 4 эти все пункты это все пункты также отображаются здесь и Давайте немножко перейдем по основным путам на тему все сначала начнем с имиджей мы установили портрет и мы здесь можем видеть что у нас на севере это естественно имидж от партнера и он здесь отображается это тег который мы скачивали это понятно далее с Image был создан контейнер если мы будем в контейнеры мы видим протейна видим все данные которые мы указывали в Дока компос

если мы будем в контейнеры мы видим протейна видим все данные которые мы указывали в Дока компос файле вот также мы можем здесь удобные вещи есть мы к ним Вернемся попозже немножечко далее netflox нас отображается все стандартные вещи Host но он и также отображается по Тайна дефолт эта штука она была создана автоматически при использовании дога compose далее мы ничего не создавали никаких фолимов поэтому здесь ничего нет но мы можем их создать так основные вещи мы увидели далее Это все что

поэтому здесь ничего нет но мы можем их создать так основные вещи мы увидели далее Это все что происходит с контейнерами принципе такой небольшой лук Хоста эта информация о Хосте Где работает партейнер и даже сетап и registries также от настройки самого сервера такие тонкие настройки можно сделать и реже это какие regis 3 используют сам сервер что там зарегистрировано далее стекс стекс это ничего другого чем Дока компас файлы Да мы попозже посмотрим как создается и витие у нас есть партнерка

другого чем Дока компас файлы Да мы попозже посмотрим как создается и витие у нас есть партнерка компас здесь отображаются уже тип compose и принципе это все и Давайте посмотрим самое стандартное что не нужно много чего знать это App templates в темплейтах мы можем видеть самые стандартные басовые только контейнеры которые мы можем сразу же установить Да вот если Мы спустимся вниз то здесь у нас есть стандартно есть Ubuntu такой базовый имидж но через Потом три веб-сервером набирает большую

есть стандартно есть Ubuntu такой базовый имидж но через Потом три веб-сервером набирает большую популярность далее У нас отличные базы данных есть и так далее их не так много но тем не менее и здесь Можете видеть что у нас некоторые контейнеры они вот здесь написано контейнер здесь так Ну давайте мы создадим быстренько какой-нибудь контейнер допустим у нас будет нажимаем далее нам стоит создать дать вернее контейнеру имя это будет май Engine X далее мы указываем Network Пускай это будет Bridge

вернее контейнеру имя это будет май Engine X далее мы указываем Network Пускай это будет Bridge и далее если мы нажмем диплоид контейна тогда он создаст там немножко дефолтные настройки сделать но мы нажмем Advanced options и сделаем порт mapping Итак мы видим что с левой стороны у нас настройки Хоста и давай дадим порт на хостел нас будет 81 А в контейнер будет прибрасываться в порт 80 это все автоматическое потому что здесь уже все преднастроено и порт 443 будет нас 4431 вот так вот далее

автоматическое потому что здесь уже все преднастроено и порт 443 будет нас 4431 вот так вот далее можно сделать Volume mapping либо авто автоматически перебросит создаст Volume либо указать Volume который мы хотим это name Two либо сделать Point то здесь именно смонтировать директорию на Хосте В контейнер Ну мы поставьте на авто просто хотим посмотреть как работает контейнер запустим один темплей ничего больше нажимаем это занимает зависимости от контейнера немножко больше немножко Меньше

ничего больше нажимаем это занимает зависимости от контейнера немножко больше немножко Меньше времени готово и у нас сразу перебрасывает в контейнерс и мы видим что My ngx вот он запустился наши порты которые мы указывали если бы мы не указали никаких портов то у нас бы показали здесь какие-нибудь Рандомные порты на Хосе тоже свободные были Это хорошо если мы используем прокси сервер перед этим и автоматизация для этого то не нужно думать Какие порты там открыты закрыты но мы сейчас хотим четко

автоматизация для этого то не нужно думать Какие порты там открыты закрыты но мы сейчас хотим четко указать Какие порты Итак давайте посмотрим работает ли ngx Итак Нам нужно перейти на такой же сайт этой же адрес поэтому адресу только на порт допустим 81 так все Welcome to Engine X прекрасно у нас запустился Все работает все хорошо Ну и Давайте еще посмотрим такую штуку что в темплейтах не всегда все работает сразу и нужно немножко больше установить надо Ну на примере ГОСТ платформа для

всегда все работает сразу и нужно немножко больше установить надо Ну на примере ГОСТ платформа для блогеров там вы можете делать блоге это такой веб-сервер но есть нажимаем Давайте хвост создадим также Network будет Bridge добавляем options порт вставляем таким же самым 2 3 6 8 ничего делать не будем больше кастомного ничего нету оставляем все авто лейпциглы тоже не будет ничего указывать не будем просто нажмем еще посмотрим что будет готово ГОСТ нас скачался установился и Давайте посмотрим

просто нажмем еще посмотрим что будет готово ГОСТ нас скачался установился и Давайте посмотрим работает ли он на спорт 2 3 6 8 тот же ip-адрес 2 3 6 8 2 3 6 8 переходим Пока ничего не происходит не удается отобразить страницу в чем дело Давайте посмотрим вот эти вот именно значки что это такое Итак Первое это Лог что мы можем посмотреть что происходит с контейнером далее У нас информация от самого контейнеры далее статистика у нас потом отображается можем сразу запустить консоли здесь же но нас

контейнеры далее статистика у нас потом отображается можем сразу запустить консоли здесь же но нас интересует в данном случае это Локс если мы нажмем Локс что мы видим здесь и налоги нашего контейнера и сразу мы можем определить что у нас ошибка он не может Достучаться до порта 3306 А мы знаем что порт 3306 это база данных То есть она не запущена нужно Здесь данном случае указывать другие контейнеры указывать переменные 8 смотреть как все настраивается это не всегда бывает очень хорошо написаны

указывать переменные 8 смотреть как все настраивается это не всегда бывает очень хорошо написаны но очень классная вещь которую можно использовать темплейтах это кастом темплейс если вам очень часто нужно создавать какие-то веб-сервер допустим и вас какая-то специфическая конфигурация для этого если вы хотите дать пользователям вашей фирме доступ к вашим темплейтам Чтобы проще было быстрее было установка то очень хорошо можно здесь это все Нет ну это дело другое и Давайте перейдем именно

было установка то очень хорошо можно здесь это все Нет ну это дело другое и Давайте перейдем именно контейнерам вот это контейнер мы можем убить выделяем его здесь нажимаем и удаляем не постоянные данные нам они нужны все готово все удалилось дались мы посмотрим Image Мы также видим что у нас остается Мы также его можем удалить нам не нужен всем готово все удалилось переходим снова в контейнер и Давайте создадим один контейнер далее У нас также по-прежнему давайте мы создадим контейнер С2

и Давайте создадим один контейнер далее У нас также по-прежнему давайте мы создадим контейнер С2 давайте это будет Мари вам далее нам стоит указать же стрим по умолчанию docohub мы ничего другого не добавляли но как я говорил если вы используете частную речурстве то вы можете здесь потом будете выбрать Откуда будет скачиваться ваш контейнер Image здесь можно поискать на докохабе наш иначе там будет два ищем и вот нас отображается сразу поиск 2 и берем этот имидж здесь у нас команда докафу и

будет два ищем и вот нас отображается сразу поиск 2 и берем этот имидж здесь у нас команда докафу и берем Вот эту вот часть которая нам нужна для скачивания переходим снова тренер и указываем вот эту часть то нам нужно скачать далее всегда скачивать пул имидж Да всегда скачивать веб-хуп мы создать не можем это для допустим Microsoft teams чтобы вам автоматически приходили оповещение спускаемся ниже даже можем указать экшен если мы оставляем контейнер он будет убит автоматическим и Самое

ниже даже можем указать экшен если мы оставляем контейнер он будет убит автоматическим и Самое интересное начинается внизу здесь у нас большие большое количество настроек которые мы можем сделать но одну вещь и пропустил это настройка портов Итак нам нужно добавить порты Значит на хостел у нас занят порт 81 для 52 сделаем Ford 82 он будет пробраться в контейнер вот здесь видите хвост потом контейнер на порт 80 стандартный порт http ничего выдумывать не будем далее спускаемся ниже и здесь уже

на порт 80 стандартный порт http ничего выдумывать не будем далее спускаемся ниже и здесь уже начинается всякие тонкие настройки это команды то есть мы здесь можно написать команду если мы хотим допустим при запуск контейнера выдавать их там Старт контейна можем сказать когтя здесь мы ничего менять не будем далее То же самое если мы хотим использовать нашу нашей странички наши какие-то не знаю данные Web данные можем сделать Здесь mapping также это Volume создать именно Volume Вот либо сделать

Web данные можем сделать Здесь mapping также это Volume создать именно Volume Вот либо сделать бинт директорию на Хосте мы сможем при монтировать В контейнер нам это ничего не нужно мы просто запустим печи 2 посмотрим что это будет то же самое здесь тонкие настройки по нет можно добавить можно конкретные IP адрес добавить версии 4 версии 6 DNS настройки Классно очень удобно и нужно очень много кода писать когда вы создаете все вручную переменные знаете что каждый только контейнер определенные

писать когда вы создаете все вручную переменные знаете что каждый только контейнер определенные перемены которые можно изменять допустим время которое отображает контейнер чтобы сделали для партнера вот это все делается лейблы Также можно это все добавить То есть все настройки те что мы писали в силой только силой командной строке все можно сделать здесь в общем хотите делать и ходить нет мы просто здесь Смотрим как работать под тренер И много углубляться там в apech и вот допустим Information

здесь Смотрим как работать под тренер И много углубляться там в apech и вот допустим Information inspect ничего другого как мы в командной строке вводили Дока inspect и указывали ID контейнера либо имя контейнера мы здесь видим все вещи которые там по умолчанию при создании контейнера были добавлены информации Понятно Мы до этого все видели статистика сколько использует памяти сколько опций и так далее удобная вещь Кстати если вам нужно делать дебаг какой-то контейнера и смотреть что же так

так далее удобная вещь Кстати если вам нужно делать дебаг какой-то контейнера и смотреть что же так очень грузит то здесь это все можно увидеть и часто используемые вещи это консоль Вот здесь мы указываем какую команду Мы хотим запустить это bin Bash иногда Бин беша нету в контейнерах и указываем пользователь который будет иметь доступ контейнеру иногда бывают другие позы это редкость нажимаем Connect Все мы находимся в контейнере Да команд конечно здесь немного но тем не менее Давайте сразу

Connect Все мы находимся в контейнере Да команд конечно здесь немного но тем не менее Давайте сразу там индекс HTML поменяем сделаем индекс HTML на моего выключим и создадим новый индекс Может не всегда быть попробуем на но не найденный Ну тогда просто мы сделаем так эхо тест OK и добавим это все индексы HTML все у нас есть индекс HTML и Давайте посмотрим что здесь обновляем страницу А все работает 8 прекрасно мы разобрались как Надеюсь было понятно как создать контейнеры много очень настроек

8 прекрасно мы разобрались как Надеюсь было понятно как создать контейнеры много очень настроек есть но абсолютно не идентичны тому что вы добавляете в консоли очень многие конечно умеет после контейнером но не знает как пользоваться силой но кто знает как пользоваться командной строкой для запуска и управление контейнерами тем очень легко будет разобраться в партнере одна вещь еще интересная очень который я абсолютно всегда использую это секс что такое секс это те же самые дога компас файлы и

который я абсолютно всегда использую это секс что такое секс это те же самые дога компас файлы и Давайте посмотрим вкратце как они работают это очень удобно Вы можете всегда там сохранять файлы в гите где угодно они будут у вас статически то как он поз это всегда удобно и давайте все-таки сделаем наш стек стек это дога compose вот так вот чтобы понятно было нажимаем этот стек далее У нас есть определенные окошко тоже нужно заполнить имя и давайте мы посмотрим на примере Давайте далее У нас есть

окошко тоже нужно заполнить имя и давайте мы посмотрим на примере Давайте далее У нас есть три четыре Даже варианта Как можно создать наш стек это выпадет то есть здесь мы вставляем на что как он пост файл то есть содержимое мы можем загрузить только compose файл также можем скачать его с репозитории это очень удобно для автоматизации если допустим автоматическая апдейту Если вы изменили компост файл то партнера скачать этот дураком пост файл изменит то как пост который здесь работает Нужно

файл то партнера скачать этот дураком пост файл изменит то как пост который здесь работает Нужно быть немножко осторожным что если вы Сделать какую-то ошибку в каком позвали и Партнер автоматически сделать то может быть такое что просто ваш контейнер не заработает если какая-то ошибка есть вот и кастом темплей Ну это такое мы будем использовать самый стандартный это выпадет это удобно потому что можно 10 сразу все изменить и Давайте посмотрим nexploud вот страничка официальным если у нас есть

можно 10 сразу все изменить и Давайте посмотрим nexploud вот страничка официальным если у нас есть пример того Да вот у нас есть только Post файл это все мы выделяем копируем и вставляем в Партенит так посмотрим что нам нужно будет здесь изменить у нас наблюдается Ольга мы мы с вами все без изменения все будут по умолчанию далее нам нужно добавить это пароль для рута в Москве будет такой же пароль только root в конце и пароль для базы данных пускай будет ну тестовая версия так не делать если вы

только root в конце и пароль для базы данных пускай будет ну тестовая версия так не делать если вы хотите продакшн использовать но мы для того чтобы посмотреть будет использоваться далее У нас порты 880 пробрасывается Хоста пробрасывает порт 80 контейнер 88 нас не занята что все нормально всё оба готовы и дальше спускаем ниже Здесь тоже можем добавить envinet переменные но все переменные у нас указаны здесь все нормально нам это достаточно все нажимаем deeploy ждем пока скачается наши два

указаны здесь все нормально нам это достаточно все нажимаем deeploy ждем пока скачается наши два контейнера здесь у нас есть контейнер db это Мария тебе и сама само приложение и начинай склад ждем пока это все скачается Единственное что хочешь сказать не хватает конечно здесь много которые мы увидим консоли что там скачивается разархивируется всякое такое здесь мы этого не видим Мы видим просто что идет процесс какой-то и потом окажется Опа все запустилась Ну давайте подождем все готово у нас

что идет процесс какой-то и потом окажется Опа все запустилась Ну давайте подождем все готово у нас на excloud Stack здесь есть посмотрим в контейнеры и видим что у нас есть также два контейнера добавилось это найсхалок эп 1 necloudb1 здесь в стыках это nexcloud отображает сразу же Какие имиджи используются для этого всего если мы указали в докопали тогда у нас бы здесь отобразилась и на то что мы указали ну так оно есть Ладно далее нас приложение само доступно по IP адрес самого сервера и порт

указали ну так оно есть Ладно далее нас приложение само доступно по IP адрес самого сервера и порт 88 работали наш переходим в порт 880 все netcalut у нас работает мы дальше не будем это рассматривать как работает Next clout контейнер как все создается Там намного больше всяких переменных нужно указывать advent переменных чтобы он был стабильно работал чтобы сертификаты дали Здесь тема идет о протеина у нас это все работает Давайте запустим еще один стек давайте это будет хвост то что у нас

протеина у нас это все работает Давайте запустим еще один стек давайте это будет хвост то что у нас была ошибка Давайте перешли мы на страницу на Дока Хабиб легко спускать ниже и у нас есть да вот файл опять копируем это вот все говорю же это всего лишь пример мы никаких особо настроек сделал не будем идем с таким снова создаем стек также назовем вставляем и убираем немножечко вещи и там на спорт 880 К сожалению нашим nexplorer поэтому постави 80 81 хотя мы можем просто прокинуть стандартный

880 К сожалению нашим nexplorer поэтому постави 80 81 хотя мы можем просто прокинуть стандартный Порт 2 3 6 8 2 3 6 Вот так и сделаем переменные Да здесь говорится что смотреть документацию у нас адрес это будет 10 10 40 22 Порт 2 3 6 8 это все мы убираем в принципе все готово такая маленький настолько компас получился Ну Давайте попробуем запустим что с этого получится запустится ли все стек у нас запустился чехол у нас 83 стакан который запустился до этого кстати хочу заметить что Партнер мы

запустился чехол у нас 83 стакан который запустился до этого кстати хочу заметить что Партнер мы ничего с ним делать не можем А с этим мы их можем допустим удалить контейнер сожалению не можем это лимит ответить Давайте перейдем в контейнеры У нас есть опять таки сам сама аппликация сам приложение все отобразилось у нас 2368 пока он полностью загрузится это бывает такое Если посмотрим то здесь длится некоторое время это все всякое дело потому что нужно базу данных заполнить таблицами изначально

некоторое время это все всякое дело потому что нужно базу данных заполнить таблицами изначально инициальная установка произошла Итак 2368 переходим на сайт 2368 и у нас работает это все то есть мы видим что чехол который мы хотели установить templata нам не хватало база данных все есть все это работает хорошо мы посмотрели как это запускается как у нас работает с таким как контейнеры Я советую использовать всегда стеки Неважно как вы там добавляете стоки это выпадет лучше с помощью репозитории

всегда стеки Неважно как вы там добавляете стоки это выпадет лучше с помощью репозитории Но это ваше дело и еще одно хотел вам показать это то есть мы сейчас использовали локальный долг контейнер Но если у вас несколько серверов что тогда делать на каждый ставить контейнер не очень удобно потому что запоминать и адреса это все намного удобнее Когда у вас один Партнер управляет всеми контейнерами всеми докер серверами работают токеры и Давайте посмотрим как нужен можно добавить дополнительные

всеми докер серверами работают токеры и Давайте посмотрим как нужен можно добавить дополнительные Итак переходим и естественно добавляем опять-таки У нас есть дога стен и так далее нажимаем doca Standalone зажимаем статуицию и будем использовать Агент здесь снизу показывается что нам нужно запустить на удаленном сервере чтобы его можно было подключить Давайте переходим на другой сервер и так Я подготовил сервер где работает докер посмотрим до капец контейнеров здесь нету 2 и ножа есть это Image

сервер где работает докер посмотрим до капец контейнеров здесь нету 2 и ножа есть это Image My ngx и resis Давайте запустим эту команду которая нам предлагает тренер её скачивание портальную Агента готово Теперь смотрим работает ли Агент до kps Все работает все прекрасно порт 9001 это также можно изменить это не обязательно делать еще один должен быть но переходим снова в Партнер здесь указываем имя это будет нас дока сервера 2 и указываем IP адрес 10 вот я уже как-то указывал все смотрим в

имя это будет нас дока сервера 2 и указываем IP адрес 10 вот я уже как-то указывал все смотрим в airpot и у нас уже не только локон но Дока сервер 2 Давайте посмотрим что у нас есть у нас есть один стек это regis 3 до каком пост какой когда тестировал наверное далее контейнеры У нас есть патент на agen который мы там установили и так далее еще интересно мы когда делали Я когда делал видео о докере ТО на сервере очень много разных им же и всего остального Давайте его также добавим подключаемся к

ТО на сервере очень много разных им же и всего остального Давайте его также добавим подключаемся к серверам и снова Давайте запустим команду которая то это нам показывалось 2ment и добавим еще один по-прежнему копируем 5 таких команду вставляем далее PS все у нас работает Если мы здесь посмотрим Imagine Да у нас здесь много чего создавалась Ну и Давайте посмотрим теперь этого сервера 40 24 имя только сервер один 01 далее ip-адрес и порт 9001 такой же нажимаю Connect все давайте перейдем в home

сервер один 01 далее ip-адрес и порт 9001 такой же нажимаю Connect все давайте перейдем в home и мы видим нас много очень интересная штука что мы эти наши серверы можем объединить в группы тогда мы проще сможем управлять этим всем но это другая тема это надолго Может затянуться поэтому Давайте посмотрим что у нас есть на сервере первом который давно уже создан вот мы видим что 33 ими же есть у нас 10 все можем этим всем управлять контейнер Вы можете также установить потом управлять тем что у

нас 10 все можем этим всем управлять контейнер Вы можете также установить потом управлять тем что у вас уже есть вам не обязательно самого начала здесь все создавать он управляет даже уже созданный контейнерами Я надеюсь у меня получился показать вам и объяснить для чего нужен Партнер насколько он хороший насколько упрощает жизнь с докером Спасибо большое за внимание за просмотр До новых видео Всем пока

друзья Всем привет Это видео мы посмотрим как обновить talker контейнера и как это сделать автоматически Итак в чем проблема Если у вас его есть два три контейнера то вообще без проблем обновлять контейнеры вручную раз в неделю раз в месяц неважно Но если у вас контейнеров 20 30 или больше то это уже немножко накладно нужно выделяет там целый день чтобы это все обновить и нужно каждый раз смотреть если обновление Какие изменения сделаны и так далее и Давайте посмотрим как делается обновление

если обновление Какие изменения сделаны и так далее и Давайте посмотрим как делается обновление вручную И как мы сможем это все автоматически делать и сразу скажу что цель данного видео это показать вам для чего нужен и как настраивается вот читала Как с помощью почтового мы можем настроить автоматическое обновление контейнеров насколько это просто и какие функции и фишки он имеет себе и так давайте посмотрим Просто как обновить контейнеры и на примере мы будем делать этого всего на примере

посмотрим Просто как обновить контейнеры и на примере мы будем делать этого всего на примере графана так как там можно вот увидеть версию которая установлена Итак мы не будем ставить сразу последнюю версию Мы возьмем 928 мы качаем эту версию готово и давайте запустим это все Давайте посмотрим есть у нас только images так здесь есть отличная команда как это все запускается принципе ничего думать не будем здесь только должен будет указать наш тег в конце чтобы не запустить не скачать нам lates

не будем здесь только должен будет указать наш тег в конце чтобы не запустить не скачать нам lates версию 928 все графа у нас запустила и Давайте перейдем браузер посмотрим на графа скопировал IP адрес и Ford 3000 всё графон есть мы не будем рассматривать что такое Как это работает для графиков классная вещь Но дело не в ней и у нас снизу Вот оказывается версия которая есть и также пишет за что есть новая версия 928 Хорошо если мы эту версию попытаемся обновить и мы не сможем сделать обновить

есть новая версия 928 Хорошо если мы эту версию попытаемся обновить и мы не сможем сделать обновить автоматически вернее вручную обновить так как мы запускали конкретную версию 928 если мы посмотрим только если что сработала запущена графа на 928 это давайте мы сейчас убьем немножко сделаем такую симуляцию обновления только стоп останавливаем микрофону и убиваем этот контейнер готово Итак если мы посмотрим снова в образы то у нас есть графа на 928 и нам нужно сделать с этого тега То есть у нас

посмотрим снова в образы то у нас есть графа на 928 и нам нужно сделать с этого тега То есть у нас будет как бы локально будет latest графа на lades на самом деле намного навеяна там 932 который мы увидели но мы сейчас увидим и так изменяем Дока так графа на 98 на графа на всё смотрим снова образы У нас есть микрофоном lates отлично Все прекрасно работает и Давайте запустим снова графам только теперь просто можем убрать так либо добавить lates Ну убираем тег достаточно будет запущена версия

теперь просто можем убрать так либо добавить lates Ну убираем тег достаточно будет запущена версия если мы посмотрим только без что сработала запущена графа на и без какого-либо То есть это будет если мы вернемся в браузер обновим страницу то у нас покажется та же самая версия Итак снова смотрим Дока ими вот наша версия lates и мы видим что имидж ID он такой же самый Какие 28 Это значит что у нас одинаковые абсолютно ими даже по размеру но если мы теперь сделаем только Пул и укажем графа на и

одинаковые абсолютно ими даже по размеру но если мы теперь сделаем только Пул и укажем графа на и мы хотим latest посмотрим что будет у нас идет скачивание последней версии графоны Да если мы сейчас это все Посмотрим по хешем то они будут другие но остается по-прежнему работа игрофана которая была создана то есть контейнер который был создан с помощью имиджа вот этого предыдущего 928 Ну и Давайте снова посмотрим образы и мы видим что у нас latest уже совершенно другой один да и другой размер но

снова посмотрим образы и мы видим что у нас latest уже совершенно другой один да и другой размер но у нас контейнер работает докатая работает предыдущий нас вот этот используется имидж кабы никакие СМИ не было Давайте его убьем только стоп графа на дали только Remove удалим хорошо и теперь давайте снова tokaron поищем команду Вот и запускаем на этой версии Отлично все запустилась обновляем страницу видите 92 8 стоит и сейчас видим что будет все 932 то есть Вот так обновляем мы вручную то есть

видите 92 8 стоит и сейчас видим что будет все 932 то есть Вот так обновляем мы вручную то есть нужно сделать докафу потом убить контейнер который работал до этого и запустить новый как я говорил 23 контейнера вообще без проблем можно делать дальше проблем не будет на этих 20 30 штук еще на разных серверах то это немножечко занимает время итак по поводу версии еще хотела сказать по поводу версии потому что не каждый понимает что значит каждая версия Итак первая цифра это те версии которые очень

что не каждый понимает что значит каждая версия Итак первая цифра это те версии которые очень глобальные у нас здесь версия 9 то она не совместима с версией 8 на втором месте стоит Двойка это минорный релиз Да он обычно совместим с предыдущими версии Тоже имеет себе большие изменения и сам последний это какие-то патчи мы посмотрели как обновлять вручную Теперь давайте посмотрим как все же нам сделать все автоматически Давайте убьем наши контейнеры чтобы нам не путаться топ графа нажму графа и

все автоматически Давайте убьем наши контейнеры чтобы нам не путаться топ графа нажму графа и также Давайте сразу же мы изменим объем наш обновленную графа но и мышь только удаляем наш иначе последний все хорошо и Давайте теперь посмотрим чем И как мы сможем автоматизировать для этого можно использовать классную Вещь Вот читала эта штука предназначена именно для обновления наших образов Как это работает почта вас смотрят ваши вот смотрит хеши и сравнивать то ли это хаб то ли это локальный

это работает почта вас смотрят ваши вот смотрит хеши и сравнивать то ли это хаб то ли это локальный неважно это все читала может автоматически обновлять контейнеры Может просто вам писать оповещение есть новая версия можно обновить вот Не обновлять он настраивается очень и Давайте посмотрим как он работает в общем и так вот наша команда мы с помощью него сможем обновить наши контейнеры То есть все контейнеры мы не добавляем никаких там ограничений так далее будет обновляться абсолютно все

все контейнеры мы не добавляем никаких там ограничений так далее будет обновляться абсолютно все Единственное что необходимо почтово для работы это смонтировать в его контейнер Дока сок это нужно для того чтобы вот ставок оставливать обновлять контейнеры и снова их запускать то есть создавать новый контейнер и давайте сделаем опять-таки симуляцию нашей графоны Дока тег Давайте снова скопируем графа но как запустим нашу графа Ну которая как бы lady's только Да графа на и все наша вы последняя

но как запустим нашу графа Ну которая как бы lady's только Да графа на и все наша вы последняя версиям и теперь давайте запустим вот что давайте немножечко его изменим это все вот наша команда для запуска и давайте мы уберем минус Team чтобы мы видели полностью Что происходит с почтала изменение дает ну принципе это все это копируем и теперь вставляем давайте еще передадим посмотрим какие у нас контейнер работают все у нас графа Она работает дальше отлично и запускаем наш почтовый посмотрим что

работают все у нас графа Она работает дальше отлично и запускаем наш почтовый посмотрим что будет происходить Все мы его запустили и что мы первое видим это то что первый чек будет произведен Через 23 часа 59 минут 59 секунд так далее То есть самом начале ничего не происходит и первый запуск происходит через 24 часа назад не устраивает Мы хотим сразу же запустить наш почта убиваем эту почту останавливаем его но Давайте его также убьем который был создан только приму почта вам так мы кабинет

его но Давайте его также убьем который был создан только приму почта вам так мы кабинет просто остановили то его сейчас и убиваем и Давайте переходим снова на сайт и посмотрим какие параметры мы можем передать слева есть такой пункт как аргумент аргумент который мы можем передавать здесь довольно очень много аргументов и некоторые из них мы сразу же посмотрим Итак нас интересует в первую очередь чтобы мы сразу же могли обновить наши контейнеры без каких-либо задержек Итак ищем параметр Run Once

мы сразу же могли обновить наши контейнеры без каких-либо задержек Итак ищем параметр Run Once вот он и вот такой команды мы сможем запустить сразу же обновление копируем этот аргумент и добавляем его вот сюда вот в конце здесь мы добавляем также explash копируем это все и Давайте запустим вас все работает графан также работает только PS проверим еще раз да графа на работу и запускаем и посмотрим что у нас произойдет запустил сам бой Салам сначала нам ничего не показывал и так далее и он пишет

что у нас произойдет запустил сам бой Салам сначала нам ничего не показывал и так далее и он пишет что found New raffano Image нашелся новый имидж он останавливает графа Ну создает заново графа То есть он скачал и мышь создал графам И все готово Давайте перейдем снова браузер если мы обновим то у нас новая графа на прекрасно у нас все обновилось все работает допустим нас есть несколько контейнеров Давайте еще запустим парочку контейнеров это будет нас докан Engine X также в Detech mody Это все

Давайте еще запустим парочку контейнеров это будет нас докан Engine X также в Detech mody Это все что нам она не мешало запустили Engine X1 Давайте запустим еще одну копию X А еще одну копию Engine X Ну и Давайте еще запустим еще одну версию все достаточно будет Давайте посмотрим какие контейнер у нас работают до kps и видим у нас довольно много и мы же сейчас запущено Теперь давайте снова запустим вот что если я сделал что в эту команду предыдущую которая только рано с почтам будет ошибка

вот что если я сделал что в эту команду предыдущую которая только рано с почтам будет ошибка потому что контейнер остановленный свой читала Да он пишет что контейнер создан Поэтому нужно его сейчас удалить Но это для тестов сделано я показываю просто как он работает Что происходит с контейнерами Что происходит с почтам То есть продакшене если вы там дом будет устанавливать то не нужно будет постоянно удалять и запускать это очень удобно [музыка] просто мы сейчас смотрим Как это работает Итак

удалять и запускать это очень удобно [музыка] просто мы сейчас смотрим Как это работает Итак запустился вот что сейчас он смотрит все Image которые у вас есть напомню у нас все имеющие сейчас лейтест и все обновленные Итак у нас результат сканировано 7 0 апдейтов Но если у нас были апдейты то мы что-то Обновили А мы можем скачать какую-то версию так далее ну мы посмотрели на графоне это работает хорошо Он просканировал все как нам еще можно сделать чтобы он сканировал только определенные ими то

Он просканировал все как нам еще можно сделать чтобы он сканировал только определенные ими то есть мы не хотим нас есть важный ими же допустим базы данных которые мы не хотим просто к обновлять как мы сможем это сделать снова удалим и наш почта и мы в конце просто можем указать контейнер который хотим обновить Ну давайте это будет нас Engine x02 и ngx 0 3 2 контейнера Мы хотим обновлять Да запускаем и посмотрим что у нас будет в конце и мы видим что у нас отсканировано 2 контейнера который мы

и посмотрим что у нас будет в конце и мы видим что у нас отсканировано 2 контейнера который мы указали Only Check Continuous с именами Engine X2 либо Engine X3 прекрасно но это мы запускали как один раз запуск то есть чтобы один раз запустить контейнер вот эта команда он просканирует все контейнеры либо здесь можно указать Вот именно контейнеров вот это все можно запустить потом когда угодно Когда вам хочется чтобы он работает но Удобно ли это не знаю если мы хотим запускать много контейнеров и

вам хочется чтобы он работает но Удобно ли это не знаю если мы хотим запускать много контейнеров и чтобы читала работал постоянно то можно как-то это все автоматизировать снова смотрим в аргументы которые есть Вот интева то есть это интервал Через сколько будет происходить новый чек по умолчанию здесь стоит 24 часа вы запустили допустим час То есть каждый раз в час дня будет происходить чек тоже можно добавить интервал там допустим 3600 секунд То есть один час он будет каждый час того момента

можно добавить интервал там допустим 3600 секунд То есть один час он будет каждый час того момента когда вы запустили его удобно это может быть но есть другая штука которая называется мы здесь можем указать когда мы хотим чтобы запускался вот читала Какое конкретное время и Как часто вы можете более точно настроить Все они просто интервалами запускать Давайте вот добавим это все ставим его сюда у нас шею и так давайте посмотрим во сколько запускаться и что эти цифры знать значит это как видите

нас шею и так давайте посмотрим во сколько запускаться и что эти цифры знать значит это как видите это как Crunch Up Но обычно кроме имеет 5 позиций здесь на 6 позиций что здесь добавлено и где добавлена первая позиция это секунды то есть в данном случае нас 0 секунд в ноль минут в 4 часа день месяца то есть там 1 2 10 30 31 месяца Потом идет месяц 1 до 12 и потом идет день недели то есть в данном примере мы будем запускать каждый день в 4 часа утра Давайте немножко изменить чтобы она

в данном примере мы будем запускать каждый день в 4 часа утра Давайте немножко изменить чтобы она запустился почта вам нынешнее время и посмотрим сколько у нас сейчас Время есть у нас сейчас 15 50 4 Ну давайте будет 15 56 чтобы запустилась да значит изменяем в ноль секунд 56 минут и 15 часов первый я и добавим просто в предыдущую команду так допустим снова эту команду но нужно удалить Run Once То есть когда Run Once он не смотрит на какие-то скатился и так далее он запускает сразу и немножко

То есть когда Run Once он не смотрит на какие-то скатился и так далее он запускает сразу и немножко время прошло давайте давайте поставим 50 8 минут и запускаем Ах снова нужно удалить почту и запускаем Итак мы видим что начнется запуска через 44 секунды Давайте подождем так работает скалиус он постоянно будет в определенное время запускать проверку наших контейнеров это хорошо для продакшна допустим Я себе поставил Так что в субботу там три или четыре часа ночи у меня контейнеры обновляется и

Я себе поставил Так что в субботу там три или четыре часа ночи у меня контейнеры обновляется и так далее если что-то не работают У меня есть субботу время чтобы посмотреть что не работала что не сработало Я не хочу это делать одного раза в неделю вполне достаточно для обновления все запустилась и потом снова через определенное время Через 24 часа в нашем случае снова в это же время в 1558 запустится еще один человек дальше Ну убиваем контейнер нас это сейчас не интересует Давайте посмотрим что

еще один человек дальше Ну убиваем контейнер нас это сейчас не интересует Давайте посмотрим что у нас еще есть какие возможности это все нам сделать Итак Я сказал что если мы запустим без ничего То есть сразу же почта то он проверяет все контейнеры либо можем указать в конце контейнеры которые мы конкретно хотим чтобы проверялись но это не всегда удобно так как каждый раз нужно вот Что добавлять какие-то новые контейнеры убирать какие-то контейнеры и так далее иногда это список растет и мы

какие-то новые контейнеры убирать какие-то контейнеры и так далее иногда это список растет и мы просто не убираем ничего Оно продолжает такие существовать поэтому что мы можем взять мы можем нашу предыдущую команду использовать Run Once Но это для тестов да то есть для обычных работы почта убираем параметр анонсы запуская используют им и все больше ничего делать не надо но наши контейнеры в будущем которые мы будем запускать нам нужно немножечко их изменить и есть такой параметр как антенна

которые мы будем запускать нам нужно немножечко их изменить и есть такой параметр как антенна selection То есть это какие контейнеры мы можем исключить из автоматического обновления то есть по умолчанию будет все контейнеры обновляться но мы можем какие-то контейнеры исключить вот допустим до coran команда если мы сделаем только ран и укажем лейбл почтового Фолс и какой-то контейнер то этот контейнер не будет обновляться Давайте вот сейчас мы сделаем еще раз команду обычно очень проверим все

не будет обновляться Давайте вот сейчас мы сделаем еще раз команду обычно очень проверим все контейнеры обновлений не будет Я просто хочу вам показать цифру которая обновленный контейнеры сколько у нас их всего им то давай еще один контейнер с лейблом И тогда посмотрим изменится ли что-то так обновляется наши контейнеры смотрится по идее должно быть 7 контейнеров Да просканирована 7 контейнеров если мы даем контейнер будет понятно но мы сейчас сделаем по-другому Давайте только ему сразу удалим

мы даем контейнер будет понятно но мы сейчас сделаем по-другому Давайте только ему сразу удалим и создадим новый контейнер только Run Давайте посмотрим поищем наши вот мы запускали печи и Давайте Engine X Сейчас будет нас 4 версии но мы добавим сейчас лейбл мы скопируем этот лейбл мы Выключаем для этого контейнера вот что его обновлять автоматически не будет все и запускаем готово Давайте снова запустим вот что посмотрим Будет ли наш контейнер просканирован Нет этот контейнер будет полностью

запустим вот что посмотрим Будет ли наш контейнер просканирован Нет этот контейнер будет полностью игнорироваться То есть это хорошо эту штуку включать Когда вы запускаете базы данных Но это еще не все давайте мы убьем Engine X4 чтобы нам не путаться в будущем 4 и его объем Давайте посмотрим теперь другую сторону если мы запустим вот что вас определенным параметром например до этого мы можем исключить какой-то один конкретный контейнер то есть Нам нужно каждому контейнера его исключать но можно

какой-то один конкретный контейнер то есть Нам нужно каждому контейнера его исключать но можно сделать по-другому можно исключить по умолчанию все контейнеры и только запускать включенные контейнер то есть с помощью команды вот стала enable что для этого нужно сделать нам нужно добавить к запуску вотсала параметр лейбл enable Давайте посмотрим как это работает сейчас запустим наш Engine X который у нас был и укажем параметр А здесь у нас будет шум все запускаем X он запустился теперь при

у нас был и укажем параметр А здесь у нас будет шум все запускаем X он запустился теперь при запуске войска Давайте добавим немножечко параметров и добавим сюда лейпу enable вот это вот мы не запустим чтобы не путаться и все то есть этот параметр при запуске он смотрит именно на лейбл который вы считала enable True все остальные контейнеры имиджи они будут полностью игнорироваться давайте это запустим посмотрим что будет по идее у нас провериться один и матч Сейчас посмотрим Вот видите у нас

посмотрим что будет по идее у нас провериться один и матч Сейчас посмотрим Вот видите у нас просканировано всего лишь один Image и Здесь также написано Only Checking contener то есть только те контейнеры которые используют лейбл enable они будут просканированы Это очень классная штука то что вы можете один раз просто запустить Watch стала и пусть стало будет смотреть все контейнеры только с этими лейблами где включается и при создании любого другого контейнера Вы можете сразу продумать и

этими лейблами где включается и при создании любого другого контейнера Вы можете сразу продумать и подумать сделать Стоит ли автоматически обновлять но мы сейчас допустим сделали обновление так далее хорошо но не хотим чтобы обновлял контейнеры сам по себе Мы хотим просто чтобы он нам Отправлял сообщение что есть какое-то обновление для контейнеров это также можно сделать Давайте немножко почистим наши контейнеры и Давайте поубиваем все наши контейнер чтобы не путаться только с Теперь давайте

наши контейнеры и Давайте поубиваем все наши контейнер чтобы не путаться только с Теперь давайте убьем все контейнеры все посмотрим только PS все ничего нету И здесь тоже ничего нет и Давайте все-таки возьмем нашу графа Ну только имидж убьем наши latest проверим как это работает Просто чтобы нас оповещение было убиваем и снова изменяем как бы нашу графа ну latest и Давайте запустим докан и графа на то и Давайте посмотрим работает ли до 8 новая версия есть но это не столь важно мы сейчас это и

на то и Давайте посмотрим работает ли до 8 новая версия есть но это не столь важно мы сейчас это и хотим проверить Итак вернемся к нашей команде вот наша команда сейчас не надо мы будем сканировать всем и мы добавим параметр без обновления контейнеров называется просто мониторить это все давайте добавим нашу команду монитор и посмотрим что будет обновиться ли наша графа и мы видим что у нас как бы просканировала один и обновлен один Давайте посмотрим в браузере обновилась ли у нас графа видите

просканировала один и обновлен один Давайте посмотрим в браузере обновилась ли у нас графа видите у нас обновление нету никакого но есть мы посмотрим в имидже только имиджес мы скачали имидж но графам не перезапускали не создавали новый микрофон Также можно добавить чтобы не скачивался новый имидж только мониторинг и также не нужно скачивать имидж То есть он будет говорить вот есть новая версия но ничего не скачивает это экономит время экономить место на диске Давайте посмотрим еще какие у нас

ничего не скачивает это экономит время экономить место на диске Давайте посмотрим еще какие у нас параметры есть И что мы можем делать аргументы здесь очень много и их можно как добавлять в параметры то есть команды при запуске doca Run Также можно добавить в Дока компас как переменная Ну очень здесь очень много параметров которые можно использовать Но самое важное это Run Once то есть сразу обновить потом это shading то есть когда вы хотите запускать проверку дальше также только мониторинг

потом это shading то есть когда вы хотите запускать проверку дальше также только мониторинг делать далее важный пункт notifications есть много вариантов как вы можете сделать ноты fications это стандартно по имилу на когда ему то довольно таки много параметров нужно указать нужно иметь mail сервер нужно указать где находится север порт и так далее и тому подобное далее есть slack далее Microsoft teams и gotify Классная штука я и предпочитаю использую она выглядит вот так то есть сообщение по

teams и gotify Классная штука я и предпочитаю использую она выглядит вот так то есть сообщение по почте товара мне приходит кофе я вижу какие контейнеры обновились Какие можно обновить и так далее она мне прислала все оповещения также я могу установить клиент на Android смартфон либо на планшет но насыщенный я покажу как установить как его использовать мы посмотрели то есть здесь можно либо исключать какой-то контейнер конкретный при проверке всех контейнеров либо сделать наоборот как Я

исключать какой-то контейнер конкретный при проверке всех контейнеров либо сделать наоборот как Я рекомендую делать то есть нужно исключить все контейнеры Watch Tour и добавлять только те контейнеры которые вы хотите с помощью вотчатого enable True либо Также можно добавить конкретно к определенному контейнеру параметр мониторинг только мониторить Это определенный контейнер То есть вы хотите какие-то контейнеры мониторить какие-то контейнеры автоматически обнуля То есть вы добавляете два лейбла

контейнеры мониторить какие-то контейнеры автоматически обнуля То есть вы добавляете два лейбла для контейнеров можно использовать приватное как я говорил что если вы используете допустим гитлэп до король Вы можете также использовать обновлять автоматически контейнер оттуда для этого нужно будет указывать логин name и пароль Для этого всего Также можно использовать как здесь указывается удаленные Хосты то есть мы установим больше всего на один хост и остальные Хосты просто добавляем к этому

Хосты то есть мы установим больше всего на один хост и остальные Хосты просто добавляем к этому всему по идее может работать с многими я не проверял стоп сигналы очень классная вещь особенно если у вас специфический контейнеры допустим это сигналы которые отправляет вот читала для останов контейнеров если у вас Свой какой-то специфический контейнер либо вообще специфический контейнер и он останавливается немножко по-другому чем стандартный то вы можете здесь указать с помощью какого сигнала

немножко по-другому чем стандартный то вы можете здесь указать с помощью какого сигнала будет останавливаться этот контейнер и Лайф сайкл Хукс штука мегакрутая особенно если вы используете базы данных либо также специфический контейнеры Здесь вы можете указать что нужно сделать перед тем как обновить контейнер какой-то сделать какой-то скрипт запустить допустим среди базу данных сделать дам базы данных То есть вы можете здесь сделать все полностью автоматизировать очень аккуратно это делать Вот

То есть вы можете здесь сделать все полностью автоматизировать очень аккуратно это делать Вот это мой Дока Комфорт файл который я использую для запуска вот что здесь происходит я скачут последний товара добавляем имя контейнеров больше того добавляет также переменные это очень то есть я отправляю обновлении если год и фай нашел какие-то контейнера он отправляет все ноты фекиш на godify я перед этим показал что это такое также добавляю волю мы при запуске это обязательно волю мы до кассок

этим показал что это такое также добавляю волю мы при запуске это обязательно волю мы до кассок пробрасывать нужно чтобы контейнер мог имел доступ к нашим контейнерам мог их запускать останавливать создавать новые далее Я указываю перебрасываем в почтала Local Time чтобы не в логах отображалось правильное время и запускалась в нужное время чтобы все работало параметры и далее команды которые я передаю это ролик Что это значит То что контейнеры будут перезапускаться не сразу все вместе а по

я передаю это ролик Что это значит То что контейнеры будут перезапускаться не сразу все вместе а по одному далее То есть если мы скачали какой-то новый мечтала старый он удаляет если мне все же понадобится старый имидж я могу его скачать сдока хаб Либо со своих репозиторий либо у меня есть бэкап то есть клинаб удаляем не надо экономим время лейбл enable то что мы смотрели То есть я добавляю параметры включения вот что для каждого контейнера то есть Я создаю контейнер автоматически и сам уже

включения вот что для каждого контейнера то есть Я создаю контейнер автоматически и сам уже изначально продумывая хочу ли я автоматически обновлять их хочу ли я автоматически проверять обновление этих контейнеров и так далее То есть Я указываю для каждого контейнера Должен ли вы что с ним работать или нет по умолчанию вот что работает ни с каким контейнером он смотрит на лейблы где включён лучшего тех контейнеры Он и будет обновлять либо смотреть на обновление далее я использую типа к мод чтобы

тех контейнеры Он и будет обновлять либо смотреть на обновление далее я использую типа к мод чтобы влогах было немножко больше видно и также запускаю больше того в три часа ночи в субботу то есть шестой день недели вот так это не работает на дизель Понятно Я это все только до каком постфайл этот я выложу на github и также вот это вот я все выложу все Надеюсь это было понятно как это мы можем сделать автоматически Но это все нужно делать очень аккуратно чтобы не убить свою инфраструктуру или

автоматически Но это все нужно делать очень аккуратно чтобы не убить свою инфраструктуру или что-то еще то есть лучше просто делать изначально потом если вы будете уверены что все работает стабильно тогда включать физическое обновление Всем спасибо за просмотр До новых видео Всем пока

Gotify - простой и удобный сервис мониторинг сообщений! Обзор, установка, тест.

Всем привет на этом видео я покажу классный сервис для отправки получения сообщений мы можем отправлять получать сообщения по стандарту способом и мыло там Microsoft teams Messenger и так далее но эта вещь под названием godify она может быть упрощает некоторые вещи и хорошо ее использовать именно для мониторинга для сообщения которые отправляют определенные приложения и вы хотите иметь структурированное последовательность этих сообщений Может быть но давайте все по порядку и мы посмотрим как

последовательность этих сообщений Может быть но давайте все по порядку и мы посмотрим как устанавливается эта вещь как она работает и Как подключается к ней клиенты и также мы добавим кофе настройку для почтового что мы смотрели на прошлом видео Итак переходит на официальный сайт и он выглядит очень простенько очень интересно И если мы зайдем в документацию то сразу им как это как это все работает но нас интересует сразу же установка и установка идет через токер контейнер можно ставить как

но нас интересует сразу же установка и установка идет через токер контейнер можно ставить как докер так и Дока компас и Давайте сразу начнем установку Итак Я подготовил две вещи мы можем установить просто как командную с помощью команды Дока силой и также с помощью до какого поз эти два способа я выложу на github Ну и Давайте запустим обычный способ ран еще добавим здесь минус И как ты печь мод мы перебрасываем порт 8080 на порт 80 в контейнере мы установим временную зону чтобы у нас сообщение

перебрасываем порт 8080 на порт 80 в контейнере мы установим временную зону чтобы у нас сообщение отображали правильное время моем случае это Европа Берлин также мы укажем роль по умолчанию для обычного пользователя обычно пользователь это 1 если мы этот параметры не укажем то по умолчанию будет Мы изменим сразу же обычный нормальный далее мы укажем Где будут храниться наши сообщения То есть если мы перезапустим контейнер наше сообщение будет и дальше отображаться и запускаем год и по сервер Ну

мы перезапустим контейнер наше сообщение будет и дальше отображаться и запускаем год и по сервер Ну давай это все вот так и запустим и посмотрим готово смотрим контейнеры до капец и у нас запущен год и по сервер мы Давайте переходим сразу на порт 88 в браузер посмотрим IP адрес и вводим на браузере [музыка] наш адрес все у нас запущен cotify прекрасным услуга Мега простая очень простая и Давайте сразу зайдем него отмен и ведем наш пароль который мы указали Вот мой пароль по умолчанию Все мы

сразу зайдем него отмен и ведем наш пароль который мы указали Вот мой пароль по умолчанию Все мы внутри Что делать дальше дальше мы можем посмотреть что у нас есть вообще это пользователи которые мы созданы можно сказать нового пользователя также у нас есть приложение здесь можно добавлять наши токаны для подключения наших приложений клиенты которые подключились к этой в данном случае это я через подключился здесь вот мы это все видим даже есть определенные плагины и админ панель можно изменить

подключился здесь вот мы это все видим даже есть определенные плагины и админ панель можно изменить как бы все много настроек здесь нету Ну естественно разные светлые или темная тема Итак первым что нам нужно сделать это зайти и нужно создать новое приложение и Давайте создадим приложение назовем это просто можно добавить описание тест [музыка] application достаточно создаем все у нас создалось подключение создался током и так можем посмотреть как бы нужно посмотреть и копируем этот ток далее

подключение создался током и так можем посмотреть как бы нужно посмотреть и копируем этот ток далее чтоб нам проверить работает ли наше подключение что мы можем отправлять сообщения мы можем воспользоваться командной строкой и переходим на официальный сайт переходим здесь мессенджер и копируем команду с помощью которой мы можем сделать симуляцию как бы отправки сообщения Так и вставляем наш на сервер далее мы подправили эту команду мы будем использовать http так сертификаты у нас нет мы не

сервер далее мы подправили эту команду мы будем использовать http так сертификаты у нас нет мы не устанавливаем ничего далее подправляем домена имени у нас его нету и будем использовать 10 10 40 25 и порт обязательно 88 Если вы указали порт 80 тогда порт не указываете просто далее мы нам нужно указать толком который мы создавали только что так перейдем снова на аж Коди 5 и вот здесь наш толком копируем и вставляем далее можем указать тему и указать сообщение приоритет Также можно сказать но и

и вставляем далее можем указать тему и указать сообщение приоритет Также можно сказать но и так далее В принципе это все нажимаем это так вроде все отправилось переходим на север и переходим вот здесь слева все сообщения либо тесты куда мы отправляли именно в тесты и вот наше сообщение Вот так просто это все работает то есть мы можем просто даже с помощью командной строки отправлять сообщения То есть написать и отправляются сообщения сработал мы сюда отправили сообщение все хорошо либо какая-то

написать и отправляются сообщения сработал мы сюда отправили сообщение все хорошо либо какая-то ошибка отправили сообщение все плохо и мы на прошлом видео мы делали автоматическое обновление контейнеров с помощью вот читала и Давайте посмотрим как настраивается Watch для использования сообщений на годика то есть будет Отправить сообщение Итак перейдем снова на почтового сайт и здесь перейдем Мы в кейшнс Далее в notification снизу здесь мы видим здесь есть вещи которые нам нужно указать для

Мы в кейшнс Далее в notification снизу здесь мы видим здесь есть вещи которые нам нужно указать для отправки сообщений и Давайте попробуем это сделать Мы возьмем эту команду и немножко ее подправим и так давайте текстовый редактор сразу закинем вот так для удобства далее будет запускаться контейнер в 3000 моде в принципе это мы уберем их что происходит далее под именем почтового хорошо пробрасывается Дока сокет это нужно мы будем использовать далее нам нужно указать на tification куда будет

Дока сокет это нужно мы будем использовать далее нам нужно указать на tification куда будет отправляться мы сказали что у нас нет http у нас только https И здесь нужно указать будет у нас ip-адрес 101040 25 и порт 8080 и стоит указать здесь толком который мы будем использовать для приложений Ну давай для этого приложения мы будем использовать отдельный ток мы затем новое и Application и назовем это его [музыка] так очень товар все создаем видите у нас здесь появилась еще один вкладка далее

это его [музыка] так очень товар все создаем видите у нас здесь появилась еще один вкладка далее смотрим током копируем так переходим в Редактор вставляем толком далее Мы помним что если мы запустим просто контейнер он запустится через 24 часа поэтому мы сразу же скажем что мы хотим сейчас просканировать все с помощью и также мы укажем что мы хотим только про мониторить ничего не обновлять просто указать и отправить сообщение по результатам давайте это у меня работает на серебре на этом

просто указать и отправить сообщение по результатам давайте это у меня работает на серебре на этом контейнер посмотрим Дока PS это графа на она немножко другой версии чем latest Да но запустим как лейтест и Давайте запустим теперь вот что посмотрим что будет происходить нажимаем Enter контейнер создан был до этого только с прошлого видео еще Давайте его удалим так все запускаем Вот что он заметил что графа на контейнер устаревший он скачивает сейчас и мышь я не указывал что не скачивал новый Ну

что графа на контейнер устаревший он скачивает сейчас и мышь я не указывал что не скачивал новый Ну ладно просканировано 3 так посмотрим кино сообщение пришли либо нет вот читала Да вот наше сообщение мы когда запуска любой стало он отправил нам сообщение и также он про сообщение что нашелся новый имидж lates Image Вот и все вот так это просто все работает то есть в приложениях вы добавляете новый током добавляете его в приложение либо в скрипт либо куда угодно как угодно Вы можете все делать

током добавляете его в приложение либо в скрипт либо куда угодно как угодно Вы можете все делать это настолько простая штука легкая но еще в чем плюс кофе то что вы можете установить клиент на телефон на Android смартфон Да если мы идем на официальный сайт то здесь вот есть у нас как работает приложение различные добавляются и вот есть приложение для Android к сожалению только для Android для iOS нет принципе это достаточно даже вы можете добавить то что у вас браузере будут разрушаться

для iOS нет принципе это достаточно даже вы можете добавить то что у вас браузере будут разрушаться сообщение То есть вот у меня там пришло что-то ставите это в браузер как приложение Вот и все вот так это все работает очень просто помогает в мониторинге и легко настраивается Спасибо за просмотр До новых видео Всем пока

друзья Всем привет на этом не коротком видео мы разберем такой тяжело как dogger я думаю каждый из вас огней слышали кто-то уже использует я хочу сделать так это видео чтобы просмотрев его и поняв темы вы могли сказать что я знаю докер и Давайте коротко пройдемся по списку тем которые мы затронем в этом видео Итак первая тема Это просто новый Докера что вы понимали как он работает Какое отличие между виртуальными машинами и докером почему используется докер дальше мы перейдем к установке Докера

виртуальными машинами и докером почему используется докер дальше мы перейдем к установке Докера в Linux и также покажу как установить докер Windows потом разберем основные команды для запуска контейнеров для управления контейнерами далее очень важная тема будет это управление портами чтобы Вы могли Извне Достучаться к вашему контейнеру так как докер мы потом это увидим он работает локально далее мы перейдем к переменным в докере потом постепенно перейдем к постоянным данным договором чтобы ваши

перейдем к переменным в докере потом постепенно перейдем к постоянным данным договором чтобы ваши данные например базы данных которые вы за Кстати они оставались даже после перезапуска Докера мы разберем Что такое сети в докере потом мы будем создавать свои контейнеры и будем писать Дока файлы именно в doco файле описывается Как должен быть построен контейнер далее мы посмотрим что такое Дока компос и как он применяется и напоследок я вам покажу по Тайна это графическая оболочка для управления

и как он применяется и напоследок я вам покажу по Тайна это графическая оболочка для управления токер контейнерами она очень удобная очень популярное но это уже в конце Давайте перейдем к первой теме это основы docker и чтобы начать Я хочу объяснить почему собственно докер чтобы это объяснить нужно посмотреть на классический сервер У нас есть в классическом сервере любой компьютер да это может быть Север У нас есть железо на нем стоит операционная система Windows Linux неважно также направлена

Север У нас есть железо на нем стоит операционная система Windows Linux неважно также направлена системе Есть зависимость при установке какой-либо программы Это программа использует определенные библиотеки зависимости и возможно работает железом какие-то функции системы может быть зависит от приложений которые вы устанавливаете при установке одного приложения все будет работать отлично другие приложения и если у них нет никаких стыков в использовании Библии допустим где-то одно правило нужно

и если у них нет никаких стыков в использовании Библии допустим где-то одно правило нужно одна версия другой нужна другая версия эти версии допустим у нас есть разные но если мы не можем установить одинаковые версии то там нужно играть с бубном то есть не всегда все запустится не всегда будет корректно все работать но это так оно есть то есть у нас есть железо У нас есть программа которая на них работает Это классический сервер То есть как работает ноутбук Ваш компьютер Вот такая вот схема как

работает Это классический сервер То есть как работает ноутбук Ваш компьютер Вот такая вот схема как же работает только вдоха У нас есть железо наш сервер на нем стоит система если мы используем докер хотим использовать Том зачастую это на операционной системе мы установим программу Дока при запуске приложения если мы хотим какой-то контейнер развернуть в Докера Мы скачиваем это приложение это имидж будет создается контейнер в этом контейнеры помимо самой программы есть все необходимые

это имидж будет создается контейнер в этом контейнеры помимо самой программы есть все необходимые библиотеки зависимости которые необходимы именно этой программе для того чтобы она корректно работала То есть программа уже не обращается к библиотекам зависимости которые предоставляет операционная система она программа это контейнер уже запускается с необходимыми вещами для этой программы и программа работает такой капсуле у него все для работы есть то есть если мы устанавливаем много программ

работает такой капсуле у него все для работы есть то есть если мы устанавливаем много программ хотим установить то просто создаем контейнеры под каждую программу и каждая программа каждая каждая Application у нее будет свои библиотеки зависимости и они независимы друг от друга они работают стабильно имея все необходимое для их работы вот так выглядит архитектура и почему используется именно Linux Давайте разберемся Как работает Дока в линуксе и докаблин в Windows Итак у нас есть железо там и

Давайте разберемся Как работает Дока в линуксе и докаблин в Windows Итак у нас есть железо там и там у нас устанавливается в линуксе понедельник система Linux на Windows Windows ничего сложного прилинусе мы ставим Дока при Windows 7 Мы также ставим только но появляется промежуточная вещь которая это все всю картинку меняет это Linux виртуальной операционная система То есть можно отсюда сказать что Дока работает только на Linux в любом случае да вы можете поставить на Windows Дока но всегда

что Дока работает только на Linux в любом случае да вы можете поставить на Windows Дока но всегда будет вот это вот часть этот кубик Да он быстро устанавливается вам ничего делать особо не нужно только сделать за вас Вы он установит сразу вот это вот промежуточную часть и при создании контейнера программы какой-либо это все где все то также контейнеры запускается это думает понятно И почему я всего используется потому что в любом случае только запускается на linuxe даже Windows и хорошо мы это

используется потому что в любом случае только запускается на linuxe даже Windows и хорошо мы это поняли это разобрали но кто-то скажет Зачем использовать только если же виртуальной машины и можно карту виртуальную машину одну виртуальную машину использовать для одного приложения Да можно но это было раньше то есть как давайте это все сравним есть мы используем только то у нас есть железо система только и контейнер где работают программы это понятно Все работает хорошо при использовании

система только и контейнер где работают программы это понятно Все работает хорошо при использовании виртуальной машины также есть наша физическое железо на этом железе мы устанем систему Но для работы с виртуальными машинами требует образную систему мы ставим операционную систему и уже на операционную систему мы устанавливаем наше приложение система приносит с собой политики зависимости и ставим программы плюс дополнительные какие-то под программы библиотеки добавляем и так в этом случае у нас

программы плюс дополнительные какие-то под программы библиотеки добавляем и так в этом случае у нас есть только одно железо пирожность система и Дока плюс приложение здесь у нас есть виртуальной машины нужно управлять этими этими виртуальными машинами и по вазеру Нужно следить чтобы все работало Далее в каждой машине есть своя операционной системы Занимает какое-то место нужно делать апдейты апгрейды и каждая операционная система она требует определенные ресурсы просто чтобы работала

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

машины определенные количество процессоров виртуальных определенное количество оперативной памяти нужно выделять и соответственно также жесткие диски нужно создавать далее если жесткие диски тема пошла никто контейнеры занимают либо Image либо сами контейнеры занимают мегабайты иногда выходит это все за пределы одного гигабайта Но это отдельный случай в основном это все в мегабайтах при использовании виртуальных машин нам нужны гигабайты так как сама виртуальная машина не учитывая приложение

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

машинами нам нужно запустить целую операционную систему а потом запустить приложение то есть скорость загрузки у нас при использовании докер довольно-таки низкая при использовании виртуальных машин довольно таки высокая Да есть случаи когда при запуске контейнера нам нужно ждать пока запустится один контейнер потом другой потом 3 потом 10 то есть какое-то какие-то зависимости от контейнера допустим база данных а потом только приложение но зачастую они все равно запускают много быстрее так как у

база данных а потом только приложение но зачастую они все равно запускают много быстрее так как у нас опять таки нету Вот это промежуточная операционная система и забегая наперед хочу сказать что эти системы в реальной жизни они работают вместе и Давайте посмотрим как это выглядит как нынешнее время выглядит Дока на серверах в дата-центрах на Клауд провайдеров как это в нынешнее время все используют У нас есть железо физическое зачастую это не одно железо а несколько серверов на которых

используют У нас есть железо физическое зачастую это не одно железо а несколько серверов на которых установлена Это и так далее не столь и эти кластер то есть чтобы при выходе одного нота 1 железки одного сервера Наши все виртуальные машины продолжали работать и это было незаметно для конечного пользователя это какая-то работа для админа приложение работает И все счастливы далее давайте рассмотрим в ней как это один сервер Да я просто сказал что их может быть несколько но будем рассматривать

в ней как это один сервер Да я просто сказал что их может быть несколько но будем рассматривать как один сервер на этом сервере создаются виртуальные машины у станции операционную систему если при использовании докер остается Linux и ставится docker и потом запускается уже контейнеры создаются Вот так это в нынешнее время работает и так как я говорил что при использовании многих серверов объемных кластер если одна машина не работает то эти все сервера эти все контейнеры продолжают работать на

кластер если одна машина не работает то эти все сервера эти все контейнеры продолжают работать на других серверах думает понятно Давайте еще посмотрим на то как упрощается работа программистов с админами как это все собственно работает как упрощается разработкой установка приложения docker У нас есть программист они создают приложения они компилируют получается у нас программы они пишут документацию как Что необходимо для запуска этой программы какие порты нужно 3 какие приложения

документацию как Что необходимо для запуска этой программы какие порты нужно 3 какие приложения дополнительные Какие библиотеки нужно этому приложению и так далее В общем очень очень много всего допустим если сложная программа это все закидывается в какой-то репозиторию допустим это будет далее админы получают заказ заданий что Установите такую-то такую-то новую программу на сервера админы идут на Кит скачивают документацию ознакамливается подготавливает сервер переносят потом сам саму

идут на Кит скачивают документацию ознакамливается подготавливает сервер переносят потом сам саму программу на сервер ставят на севере дополнительные зависимости библиотеки скачивают под программы делают открывают порты на firewally и так далее далее вернусь к этой схеме еще посмотрим проблему в этой схеме что попросил когда используется только программисты пишут также код компилируют пишут документацию Но помимо всего они пишут так называемый Дока файл поэтому только файле находятся описание в

Но помимо всего они пишут так называемый Дока файл поэтому только файле находятся описание в коде написанные описание того что необходимо для работы этого приложения то есть здесь описывается Какие библиотеки нужно установить какие-то настройки нужно сделать на контейнере Какие может быть нужно создать пользователей право дать им и так далее То есть вся мелочь она описывает здесь и потом при запуске Дока файл при запуске Дока файла у нас остается только имидж и это только имидж это понимаете

Дока файл при запуске Дока файла у нас остается только имидж и это только имидж это понимаете как из-за образ той же операционной системы тоже Windows либо Linux здесь все находится внутри все зависимости все все находится в этом тока имидж то есть грубо говоря один только он закидывается только это может быть всем известно все знают что там находится только всех популярных программ либо это может быть частное репозитории неважно факт то что Дока имиджа закидывается в докажис 3 и соответственно

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

файл порты и можем какие-то мелкие манипуляции сделать самой инфраструктурой и админы берут потом и разворачивает этот Image на севере создают дока контейна любое количество и это все будет работать Давайте вернемся к проблемам здесь если документация была написана не очень хорошо либо одну что-то не так сделал допустим не запускается нормальное приложение либо оно некорректно работает потом админы обращается к программистам чтобы там накосячили что не так работает программисты смотрят еще раз

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

используют свои тестовые сервера и там они добавили какую-то маленькую библиотеку но забыли писать документацию соответственно ее не будет здесь на севере Вот и потом нужно искать этот Файлик Этот документ эту библиотеку на этом тестовом сервер Потом изменять документацию потом отмены также должны это все установить на сервер и 8 это очень долго и кропотливая работа здесь же программисты используют такой же Дока такой же докер как и на этом сервере и запускается приложение оно как здесь на

такой же Дока такой же докер как и на этом сервере и запускается приложение оно как здесь на тестовом сервисе так и запускается здесь то есть здесь она работает она будет работать здесь если на этом сервере что-то не работает то Это скорее всего настройка сети либо какие-то другие дополнительные права не выданы То есть это уже работа админов здесь уже намного проще исключить ошибки которые можно сделать Ну думаю это понятно и понятно цель Почему все больше и больше людей приходит именно на

сделать Ну думаю это понятно и понятно цель Почему все больше и больше людей приходит именно на использование тока я говорил здесь только и меньше их только файлах то короче и контейнерах И хотя бы сейчас вам объяснить как это все между собой связано до Image только контейнер и давайте рассмотрим У нас есть на нем работает Дока хорошо у нас есть также паблик это паблик это известная только хаб либо приватный regist и допустим на основе Гитлер не столь важно вариантов очень много есть на doco

либо приватный regist и допустим на основе Гитлер не столь важно вариантов очень много есть на doco registream находится Image это допустим все наши любимые известные программы это печи Поэтому вот presengine X mysql Open VPN не столь 1000 чтобы создать контейнер на сервере из одного из этих из одного из этих имиджей нам нужно сделать следующее нам нужно сначала скачать этот Image команды докапул мы скачаем Image в локальном до королевстве Допустим мы хотим иметь Python мы пишем только пул

мы скачаем Image в локальном до королевстве Допустим мы хотим иметь Python мы пишем только пул поэтому и версию его указываю Ну это потом вернемся к версиям Допустим мы хотим скачать Мы только пул поэтому же готовая рабочая программа нам нужно сделать следующую команду нам нужно сделать докан и указать imach если мы укажем до Коран и укажем имидж name которая у нас нет локальной то мы то сервер пойдет на doca registry и скачать необходимый нам Image То есть если мы здесь укажем Дока Run mysql

пойдет на doca registry и скачать необходимый нам Image То есть если мы здесь укажем Дока Run mysql сервер пойдет на Ну допустим на доках об и скачает на mysql Image он попадет локальную docaragestry думает Понятно ну суть в чем мы запускаем команду doca Run указываем Image и допустим хотим создать WordPress контейнер была запустится вот пресс-контейнер все будет работать Хотим мы дальше создать два контейнера поэтому без проблем хотим и три контейнер сендж сам тоже можем это сделать И нам

два контейнера поэтому без проблем хотим и три контейнер сендж сам тоже можем это сделать И нам очень нас никто ни в чем не ограничивает Главное чтобы была соответственно с портами чтобы они между собой не конфликтовали при запуске мы не можем запустить 3gx работающих на портах 80 Ну это мы вернемся к этому попозже я думаю немножко разобрались может быть что-то не очень понятно но Давайте перейдем к практике Там будет все более понятно и первое что нужно сделать чтобы начать изучать тока это и

к практике Там будет все более понятно и первое что нужно сделать чтобы начать изучать тока это и нужно установить током я буду использовать пункт 20.04 и на нее мы поставим тока так переходим на сайт doca Docs далее переходим в dolload Install и выбираем Linux в нашем случае я буду ставить все в Ubuntu нажимаем ubuntum и здесь есть несколько возможностей как можно поставить Дока мне больше всего нравится это последние метод это с помощью скрипта то есть будет скачет скрипт и он сделает все

нравится это последние метод это с помощью скрипта то есть будет скачет скрипт и он сделает все необходимые действия для установки Дока в на ваших Linux Итак спускаемся ниже и вот описание скрипта этой командой мы сейчас скачаем скрипт для установки вот этот скрипт также его можно посмотреть что в нем находится то есть описание диск который будет произведены и далее мы сразу запустим этот скрипт То есть можно сразу проверить его работоспособность у вас на сервере давайте сделаем все хорошо и

То есть можно сразу проверить его работоспособность у вас на сервере давайте сделаем все хорошо и далее в зависимости от системы это можно занять некоторое время установка доктора завершена и можем проверить только и вот у меня основная версия 2010 дальше хочу сказать что я буду работать только с как рут Если вы хотите использовать другого пользователя для работы с током чтобы другой пользователь мог запускать команды током то нужно этого пользователя добавить в группу тока Да много слова тока

мог запускать команды током то нужно этого пользователя добавить в группу тока Да много слова тока Ну ладно давайте создадим пользователя минус м как чтоб два домашняя территория далее минус с чтобы этот пользователь мог использовать Бин так и теперь этого пользователя добавим в группу дока Т минус а большая к чтобы добавить Этому пользователю вторичную группу пишем Дока и кому мы добавляем это пользователю вот еще хорошо можем проверить Какие группах он состоит и так у него группа его Первое

пользователю вот еще хорошо можем проверить Какие группах он состоит и так у него группа его Первое это роммера вторая группа это Дока и Давайте посмотрим может он запускать ли только команды Давайте перейдем станем этим пользователем и запустим только версию мы можем и еще одну команду запустим до капец посмотрим работает ли у нас какие-то контейнеры нет контейнеры у нас никакие не работают вот таким образом мы поставили только на Ubuntu 204 и теперь поставим только на другую операционную

вот таким образом мы поставили только на Ubuntu 204 и теперь поставим только на другую операционную систему теперь посмотрим как установить docker на Windows Итак переходим на doca Docs и здесь есть переходим сюда и здесь уже будут установка в Windows Пускай немножко ниже здесь есть описание что нам необходимо будет И вот есть ссылка скачаем докер сохраняем файл переходим к установке соглашаемся Что нужно установить все вещи которые необходимы звука завершена нажимаем закрыть и перезагрузить

Что нужно установить все вещи которые необходимы звука завершена нажимаем закрыть и перезагрузить после перезагрузки запускаем doca desptop соглашаемся с лицензией также нам нужно установить Car 0 для Linux данная кнопка Мы можем сейчас закрыть и здесь указывается Как нужно установить пакет для Linux поэтому сразу скачиваем пакет и его устанавливаем готово только сейчас останавливается поэтому можем здесь нажать листа сейчас только сервис перезапускается все все перезапустилась все отлично Все

здесь нажать листа сейчас только сервис перезапускается все все перезапустилась все отлично Все должно работать Давайте проверим Какая версия установилась откроем только вот у нас версия 2010 и посмотрим запущены ли у нас какие-нибудь контейнеры как все контейнера у нас нет основные команды которые буду показывать видео вы также можете все запускать в пошел но в Windows 7 удобно тем что у вас есть графическая оболочка еще ко всему То есть у вас здесь будет отображаться имиджи которые вы скачали

графическая оболочка еще ко всему То есть у вас здесь будет отображаться имиджи которые вы скачали даже подключенная вольгинсы и так далее так что проверить работоспособность вашего контейнера мы можем скорее эту команду которая уже сама предлагается токером и также запустить ее в Power вставляем запускаем и от скачивание контейнера для проверки теперь запустим только посмотрим работает наш процесс да все запущено И теперь мы можем подключиться в браузере к нашей машинке у нас работает Это

да все запущено И теперь мы можем подключиться в браузере к нашей машинке у нас работает Это именно работает все в контейнере именно то что у нас работает данной машине все можно сказать что установка доктора на Windows прошла успешно мы установили Дока Кто на линенгстона Windows я буду использовать Linux для своих примеров я использую бунт 20.04 и давайте начнем изучать собственно docker Итак только это в принципе тоже обычный процесс который работает На вашем сервере этот процесс мы можем

только это в принципе тоже обычный процесс который работает На вашем сервере этот процесс мы можем остановить запустить посмотреть его статус и давайте сделаем Дока статус наш процесс работает все хорошо мы можем установить также запустить Если у вас есть проблемы с докером какая-то команда не работали что-то еще Посмотрите работает ли процесс и давайте начнем чаще всего самое первое что все делают при установке доктора это проверяет его работоспособность помимо Дока минус может посмотреть

делают при установке доктора это проверяет его работоспособность помимо Дока минус может посмотреть версию у нас Дока команда работает Также сейчас запускает контейнер Давайте и вот мы видим что этот контейнер с таким названием у нас в ней образ Image у нас нету на вам локальный репозиторий поэтому этот Image он качается с докапа и мы видим что имидж запускается вернее создается контейнер и он пишет и здесь еще какая-то информация Да все готово Таким образом мы запустили Наш первый контейнер

пишет и здесь еще какая-то информация Да все готово Таким образом мы запустили Наш первый контейнер Давайте посмотрим если запущена сдох и контейнера это делается с помощью команды Дока без process и мы видим что у нас никакого процесса сейчас нету запущенного но мы докер запускали и он остановлен сейчас потому что задача этого контейнера Hello world заключается в том чтобы выдать нам вот эту вот информацию и все На этом его работа заканчивается Поэтому после того как он запускается он нам

вот информацию и все На этом его работа заканчивается Поэтому после того как он запускается он нам выдает эту информацию И уже потом он останавливается если мы сделаем команда Дока мы здесь увидим этот контейнер который был запущен вот Image команда в данном случае нам этот контейнер не нужен также и нам не нужен имидж который мы скачали вот у нас здесь качался у нас Image Вот здесь мы скачали имидж и Давайте теперь удалим этот контейнер который был создан Я со следующим образом Дока приму

имидж и Давайте теперь удалим этот контейнер который был создан Я со следующим образом Дока приму можно сделать несколько вещей можно указать имя Как видите это имя оно динамическое оно дается докером если мы не указываем специально Какое имя дать контейнеру далее мы можем указать контейнер 1 и еще очень классная вещь что мы можем указать просто несколько символов первых контейнеры чтобы его удалить давайте так и сделал C6 будет достаточно нас нет больше никаких контейнеров и внутри именно Тот

давайте так и сделал C6 будет достаточно нас нет больше никаких контейнеров и внутри именно Тот который нам нужен отлично контейнеры удалены посмотрим все контейнер у нас нет не запущены контейнеров не остановлены вообще никаких созданный контейнеров нет но у нас остался имидж чтобы посмотреть и меди которые у вас есть на сервере делать команда и мы видим что у нас есть контейнер и если увидите что ничего далее Так у нас указан и Image 1 также интересная вещь Это сальса размер этого imager и Мы

ничего далее Так у нас указан и Image 1 также интересная вещь Это сальса размер этого imager и Мы также можем удалить этот имидж Дока приму такой командой мы удаляем контейнер А если мы добавим и то таким образом удалим именно Image и указываем им очереди готово все у нас больше и мышей нету прекрасно Ну это такая тестовая штука чтобы вот просто самого начала попробовать работать и Давайте перейдем на adobahub скачать что-нибудь поинтереснее Да только хаб есть сотни тысяч имиджей которые мы

на adobahub скачать что-нибудь поинтереснее Да только хаб есть сотни тысяч имиджей которые мы можем скачать для себя и способ это иначе могут быть как официальные как допустим если мы видим что это официальный Image от компании вот тоже очень много есть имиджей которые делают обычные люди даже мы с вами можем сделать им очки Также можно использовать образы То есть это стандартно Ubuntu Как видите сколько у него скачивание 1 миллион плюс downloads очень очень часто это ты мать качается и очень

сколько у него скачивание 1 миллион плюс downloads очень очень часто это ты мать качается и очень часто даже используют для построения док-контейнеров это альпины это же Linux дистрибутива которая очень маленькая по размеру который часто используется ничего нет Она очень просто построена ее часто используют для построения других только контейнеров Ну давайте для наглядности скачаем Ubuntu при открытии страниц надо обстраниться имиджа справа пути видите команду только пул и название пакета это

страниц надо обстраниться имиджа справа пути видите команду только пул и название пакета это мы просто скачаем Image копируем вставляем идет скачивание бунту и давайте для наглядности я вам покажу что альпины очень-очень маленькая штука зашла и также мы его скачаем готово Давайте посмотрим который у нас есть током images и Вот видите у нас бунту занимает 72 мегабайта а Alpina занимает 5,5 МБ всего лишь поэтому из-за этого ее часто используют для построения других имиджей Ну ладно это такое

всего лишь поэтому из-за этого ее часто используют для построения других имиджей Ну ладно это такое Давайте попробуем запустить нашу бунту наш контейнер докан все как бы ничего не происходит у нас посмотрим процесс У нас ничего запущенного нет но мы его запускали в чем дело на самом деле Дело в том что у пункту Это просто как контейнер он ничего не делает и поскольку в нем никаких процессов нет которые работают то он сразу и останавливается но мы можем его запустить чтобы он работал какое-то

которые работают то он сразу и останавливается но мы можем его запустить чтобы он работал какое-то время очень просто Sleep допустим у нас нет он нам ничего не показывает потому что просто команда все он завершил свою работу Еще один контейнер который остановлен и видим здесь команду Первая команда была запустился и запустился больше все больше ничего не запустил поэтому сразу остановился и второе мы запустилась с командой Slip 5 то есть таким вот образом до Коран указываем название imager

мы запустилась с командой Slip 5 то есть таким вот образом до Коран указываем название imager который мы хотим запустить с которым хотим создать контейнер и можем передать ему команду с параметром то есть докан потом имидж name потом команда и параметр хорошо и вот мы запустили еще два наших контейнера и вы наверное заметили что они работают как обычная программа То есть у нас консоль не было доступно для использования но если мы сделаем запустим его в мод То есть это будет на фоне называется

для использования но если мы сделаем запустим его в мод То есть это будет на фоне называется фоне что нам консолить сразу будет доступна давайте сделаем не 5 а 10 секунд слип то есть наш контейнер будет работать 10 секунд запустили прекрасно Давайте посмотрим наши процессы У нас есть работающий контейнером 5 секунд был создан назад он исчез Да у нас нету больше этого контейнера он исчез Давайте посмотрим наш все контейнеры которые были установлены и видим У нас есть Аж три контейнера которых мы

наш все контейнеры которые были установлены и видим У нас есть Аж три контейнера которых мы запускали давайте мы можем запустить этот контейнер снова который 5 будет 5 секунд будет спать Дока штат заметьте niron а стал то есть мы запускаем зановок созданный уже контейнер указываем ID и запускаем все до капец у нас работает уже запущен контейнер с командой слип 5 но сейчас уже Да уже не работает Если мы снова посмотрим все контейнеры которые вообще создана вас не появился никакой новый контейнер

мы снова посмотрим все контейнеры которые вообще создана вас не появился никакой новый контейнер он не был создан то есть мы запустили всего лишь только это контейнер занавливаются пустили при команде ран создается новый контейнер при команде Старт запускается контейнер Вот это запомните и принципе давайте это все удалим нам это уже не нужно чтобы она не так много отображалась здесь всего доказывать У нас есть и B8 то есть по две буквы достаточно будут они все Уникальны поэтому это будет

У нас есть и B8 то есть по две буквы достаточно будут они все Уникальны поэтому это будет сработает Вот хорошо далее Давайте посмотрим имидже который у нас есть снова тока им это и мы видим что у нас есть Ubuntu с тегом latest то есть последняя также Какие альпины альпины как угодно тоже но на самом деле версия существует намного больше Давайте посмотрим снова на доках А здесь у нас есть теги Какие теги мы можем использовать есть мы используем лейтест то будет скачиваться вот этот вот Image

Какие теги мы можем использовать есть мы используем лейтест то будет скачиваться вот этот вот Image Также можно использовать версии но я думаю это будет более Понятно для большинства если мы возьмем контейнер Ubuntu здесь мы перейдем в теги также берем latest Rolling и вот здесь уже идут уже версии также версии и вот допустим скоро выйти полноценная версия также есть 2110 вот обычные версии Давайте скачаем еще здесь будет команда указывается до capul Ubuntu 20 на 4 уже готовая но мы можем его

скачаем еще здесь будет команда указывается до capul Ubuntu 20 на 4 уже готовая но мы можем его сразу и запустить он автоматически скачается давай так сделаем Дока Run ubuntum очень важно двоеточие 20.04 как также как указывается так вот у нас так есть 20.04 все запуск и Давайте сразу ему команду передадим Давайте пускай он нам скажет эхо лодок все imach запустил скачался и запустился сразу же вот нам написала и мы видим Ubuntu 2/4 смотрите Что такое вещи если вы запускаете только контейнер то

нам написала и мы видим Ubuntu 2/4 смотрите Что такое вещи если вы запускаете только контейнер то есть пишите doca Run и Ubuntu то всегда берется имидж с тегом latest Если вы хотите запустить определенные версии Вам всегда нужно будет указывать версию которую хотите запустить то есть тег которым хотите запустить моем случае 204 Ну там допустим можно запустить рот команду с помощью команды лес мы это просим содержимое территории по умолчанию и запомнишь что у каждого имиджа есть своя территория

это просим содержимое территории по умолчанию и запомнишь что у каждого имиджа есть своя территория по умолчанию То есть это куда он заходит при своем запуске и вот здесь отобразился рабочий директория самого контейнера далее следующая такая штука что если мы перейдем снова на Дока хаб Ну давайте вот плейтест версию бунтум то здесь мы можем видеть Для каких архитектур предназначены эти контейнеры если мы видим md64 то это значит обычно архитектура можно запускать на обычных серверах обычных

если мы видим md64 то это значит обычно архитектура можно запускать на обычных серверах обычных компьютерах Арома архитектура это Например Малинки иногда их больше иногда меньше иногда некоторые образы мы на маленько запустить не можем к сожалению поэтому берутся какие-то альтернативные имиджи Мы немножко отошли от темы возвращаемся Итак что мы скачали только посмотрим давайте мы снова запустим обычный контейнер только Давайте ее запустим всё докер запустился проверяем до капец Все работает

обычный контейнер только Давайте ее запустим всё докер запустился проверяем до капец Все работает хорошо даже хотел вам рассказать такие вещи Как можно остановить запустить и Допустим даже пузировать контейнер допустим Если у вас есть цепочка с контейнеров которые работают между собой есть процесс который приходит на один контейнер потом переходит на другой и на 3 и вы хотите где-то в середине оставить этот процесс чтобы даже не шел то есть один контейнер посредники вы хотите поузировать на

оставить этот процесс чтобы даже не шел то есть один контейнер посредники вы хотите поузировать на время чтобы посмотреть допустим логи то это легко Очень сделать с помощью команды дока и указать контейнер it либо я буду указывать так и посмотрим на процессы здесь у нас стоит что на паузе и мы можем запустить теперь это делать очень просто просто команда использует сейчас но иногда бывает полезны далее У нас процесс сейчас работает и мы можем его остановить с помощью тока далее указать либо

далее У нас процесс сейчас работает и мы можем его остановить с помощью тока далее указать либо контейнер один либо даже можно использовать имя иногда процесс занимает очень большое время Поэтому этот процесс можно просто сделать а Ну все он остановился уже мы посмотрели Как можно управлять своими контейнерами если они запущены далее Давайте снова запустим наш контейнер А еще одну если мы посмотрим Дока без минус А то мы видим что у нас есть много запущенных контейнеров которые мы запускали но

Дока без минус А то мы видим что у нас есть много запущенных контейнеров которые мы запускали но нам они уже больше не нужны Давайте их уберемся дока приму и указываем просто один либо имена все готово и Давайте снова запустим наш контейнер который мы запускали до этого Ubuntu но у каждого еще один параметр называется что он делает при запуске создается контейнер при остановке этого контейнера он контейнер маркируется как остановлен и чтобы они у нас сразу же убивались сразу же уничтожаясь эти

контейнер маркируется как остановлен и чтобы они у нас сразу же убивались сразу же уничтожаясь эти контей которые мы создаем Вот для этого нужен этот параметр Давайте попробуем запустился Давайте посмотрим Дока пьес вот у нас наш контейнер и Давайте его убьем до Car Kill все убиваешь как видите очень быстро и сразу если мы посмотрим вдоль Капец все контейнеры У нас ничего здесь не отображает потому что автоматически контейнер был не просто остановлен он был сразу уничтожен вот он был удален Вот

что автоматически контейнер был не просто остановлен он был сразу уничтожен вот он был удален Вот это очень хорошая вещь Когда вы тестируйте какие-то вещи далее Давайте Опять запустим наш контейнер наш контейнер работает следующая вещь Если вы приходите куда-то на ферму и там запущенных контейнер но вы не знаете что за контейнеры как они были построены Какие порты у них открыты и так далее так как здесь вы видите что под У нас ничего нету Давайте для наглядности еще запустим просто запустим

как здесь вы видите что под У нас ничего нету Давайте для наглядности еще запустим просто запустим контейнер только только тоже он качает образ и видите что будет запущен Давайте подождем пока скачается и посмотрим что у нас отобразится на портах это вещь очень интересная Когда в принципе всегда так нас контейнер запустился в фронтене то есть мы можем видеть Лог который происходит в контейнером давайте это остановим Control C и запустим заново наш контейнер в Detech моде и также с параметрами

давайте это остановим Control C и запустим заново наш контейнер в Detech моде и также с параметрами чтобы он удалялся все запустилась Дока пьес вот наша контейнеры работает под нашу бонус который был установлен до этого вот открытых портов внутри Нет есть указанный порт который работает на данный момент в контейнеры это порт 80 ttp и вот допустим такая ситуация вы пришли куда-то вы не совсем знаете что там как настроенный контейнер как они были собраны и Какие настройки в них есть для этого

что там как настроенный контейнер как они были собраны и Какие настройки в них есть для этого есть такая команда и указываем контейнер контейнер ID и здесь показывает вся информация которая относится к данному контейнеру Здесь также указывается порты которые были открыты Здесь также указывается С какого как собирался этот контейнер и так далее эта команда Очень полезная Если вы совершенно не знаете что запущены как работает данный контейнер что в нем внутри далее У нас есть контейнер который

что запущены как работает данный контейнер что в нем внутри далее У нас есть контейнер который требует соответственно тоже ресурсов и иногда бывает такая ситуация что нужно узнать какой контейнер сколько ресурсов требует и так далее да есть специальная утилиты которые это мониторят это показывает но к этому позже Вернемся чтобы посмотреть сколько какой-то определенный контейнер требует ресурсов делать с помощью команды докасте и указанию также мы здесь видим контейнер один именно такой процесс

с помощью команды докасте и указанию также мы здесь видим контейнер один именно такой процесс сколько используется процессора они сейчас наши контейнеры абсолютно ничего не делают Поэтому 0 процентов сколько не памяти занимают очень мизин количество нагрузка на сеть нагрузка на диске сколько и так далее Control C и давайте это подытожим чтобы запустить контейнер Нам необходимо сделать следующее сказать команду Дока Уран потом указать если необходим какие-нибудь опции например эта опция ТТ и

сказать команду Дока Уран потом указать если необходим какие-нибудь опции например эта опция ТТ и шмот опция удалить также можно указать имя которое мы хотим дать контейнеру это будет минус Минус и указываем имя которое мы хотим допустим его контейнер вот указать имя далее стоит указать который мы не запустить Ubuntu допустим 20 04 далее мы можем указать дополнительную команду которую мы хотим сделать это будет нас допустим команда и аргумент который мы хотим передать этой команде допустим это

это будет нас допустим команда и аргумент который мы хотим передать этой команде допустим это сделать запускаем Дока далее указываем опции которые мы хотим использовать их может быть намного больше это еще будет дальше далее обязательно указываем Image также Если хотите какой-то специальный имидж запустить версию какую-то специальную не лейтест то обязательно через двоеточие указываете какую какой тег вы хотите использовать далее это не обязательно но можно передать дальше контейнеру команду

тег вы хотите использовать далее это не обязательно но можно передать дальше контейнеру команду которая должна запустится в данном контейнере и аргументы которые будут переданы этой команде вот если мы это все запустим то у нас запустился контейнер в моде поэтому мы ничего здесь не видели как что нам Эхо сделал Давайте еще раз запустим только без и вот наш контейнер нам запустился команда далее будет интересно если мы сейчас запустим допустим я вам покажу как можно зайти посмотреть Локи если Ну

интересно если мы сейчас запустим допустим я вам покажу как можно зайти посмотреть Локи если Ну давайте минус Минус Remove и Engine X Давайте его ему дадим имя как раз вам покажу что такое вот готово до капец посмотрим процесс Вот наши доктора которые мы запускали до этого и Вот видите тот контейнер который мы запускали до этого обычно без параметра name ему только дал какое-то имя а здесь мы запустили с определенным именем так проще управлять контейнером даже мы можем указать только стоп либо

с определенным именем так проще управлять контейнером даже мы можем указать только стоп либо что-то еще с помощью этого имени далее Допустим мы хотим про мониторить какие логии происходит в инженец сейчас много будет потому что там ничего не происходит но тем не менее дока Локс и укажем контейнер то мы видим последние Локи которые были переданы этому постоянно обновляющийся тоже сделать параметр минус F мы поставим видим актуальные логику которая приходит на док-контейнер это очень хорошо Если

минус F мы поставим видим актуальные логику которая приходит на док-контейнер это очень хорошо Если вам нужно найти какую-то ошибку которая происходит либо какие-то процессы промониторить далее У нас есть сейчас запущенные докеры Дока контейнеры и так далее и мы хотим зайти на контейнер и что-то изменить Да это очень легко сделать Давайте посмотрим у нас контейнеры работают до капец и вот у нас есть давайте мы зайдем на наш созданный Почему нет пишем только указывая контейн на it либо имя мне

есть давайте мы зайдем на наш созданный Почему нет пишем только указывая контейн на it либо имя мне будет удобно указать имя Я хочу вот этот контейнер зайти подключиться далее указываем что мы хотим запустить нужно правильно и все мы находимся внутри в доке хочу сразу что в док контейнерах не все есть команды которые мы привыкли в той же Ubuntu это все связано с тем что контейнеры должны быть минимальными минимум Всего должно в них работать самое необходимое для работы того же инженекса

минимальными минимум Всего должно в них работать самое необходимое для работы того же инженекса допустим и вот мы находимся в инженексе как бы все здесь мы можем создавать файлы какие-то но имейте файлы будут утеряны при остановке токера это очень важно все файлы которые вы здесь создаете и не сделали директории какие-то то они все будут утеряны ну к этому потом перейдем Когда будем изучать хорошо этом Понятно выходим контейнера посмотрим еще наши контейнеры до капец это работающий контейнеры

этом Понятно выходим контейнера посмотрим еще наши контейнеры до капец это работающий контейнеры минус И это все контейнеры которые также запущены и которые были остановлены Вот видите у нас один контейнер он остановлен И также у нас есть imagers вот эти вот три вещи это нужно запомнить они используются постоянно также потом будем рассматривать еще другие вещи и давайте мы все уберем что мы до этого создавали это можно сделать конечно удалением сначала контейнеров мы можем Ну давайте вот если

создавали это можно сделать конечно удалением сначала контейнеров мы можем Ну давайте вот если мы начнем удалять вот это то нам нужно сначала удалить установить контейнер который работает потом Удалить контейнер который остановленный а потом только сможем удалить Вот Но мы можем удалить все у нас нету можно сделать докажите минус И сразу я хочу сказать что если вы собираетесь полностью удалять все все то еще жарко добавить параметры минус Минус volumex Чтобы наверняка все удалить и здесь нам

все все то еще жарко добавить параметры минус Минус volumex Чтобы наверняка все удалить и здесь нам сразу пока что будет удалено все контейнеры будут все остальные контейнеры и так далее мы соглашаемся с этим все Давайте посмотрим Image У нас есть да потому что здесь указано что Поэтому нам нужно все контейнеры остановить дока с Мы остановимся контейнеры хорошо и далее делаем снова соглашаемся и видим у нас уже намного больше ударила всего и сколько места мы освободили если мы сейчас снова

и видим у нас уже намного больше ударила всего и сколько места мы освободили если мы сейчас снова сделаем команду есть у нас нет никаких контейнеров работающих и Давайте перейдем к следующей теме давайте рассмотрим Как работает порт mapping либо проброс портов У нас есть сервер на нем установлен doka и Допустим мы хотим установить веб-сервер допустим на основе ngx мы знаем что веб-сервера используют протоколу http либо https и соответственно для http протокола мы используем порт 80 этот порт мы

протоколу http либо https и соответственно для http протокола мы используем порт 80 этот порт мы рассмотрим У нас есть определенные люди допустим это будет админы которые хотят подключиться к данному контейнеру на основе ngx что происходит они напрямую не могут подключиться Не сработает потому что порт открыт только на самом контейнере в этом данном случае если мы хотим дать доступ снаружи кому-нибудь к данному серверу к данному именно контейнеру то нужно запустить контейнер следующей командой

к данному серверу к данному именно контейнеру то нужно запустить контейнер следующей командой использовать параметр минус пи то есть только Run там разные параметры и параметры минус пи 80 80 что в данном случае происходит этот эта цифра 1 Это означает что порт 80 на самом сервере будет открыт и он пробрасывается в сам контейнер 80 и запускает X то есть подключается вот команда запускаем на контейнер X то есть образом люди подключаются к ip-адресу либо доменным имени сервера на порту 80 и

контейнер X то есть образом люди подключаются к ip-адресу либо доменным имени сервера на порту 80 и стерео уже перебрасывает все запросы которые приходят на порт 80 именно в контейнер X веб-сервер Но что если мы хотим запустить на сервере в Дока много инженерных серверов да они тоже будут работать на парте 80 как нам быть в этом случае в данном случае мы можем использовать другой порт например порт 8080 любой другой это неважно команда будет выведенске ищем образом мы пробрасываем порты 80-80

8080 любой другой это неважно команда будет выведенске ищем образом мы пробрасываем порты 80-80 самого сервера в на порт 80 вам дока и все люди подключаются на порт 8080 сервера автоматически все запросы перебрасываются на порт 80 antion X контейнер Вот так это работает Теперь давайте посмотрим как работает на практике порт mapping и Давайте запустим контейнер Engine X пишем только давай добавим еще параметр Мы хотим назвать его просто допустим Web и запускаем скачивание самого Image потом

еще параметр Мы хотим назвать его просто допустим Web и запускаем скачивание самого Image потом контейнер контейнер запустился проверяем до У нас есть который запустился мы здесь видим что контейнеры открыт порт 80 также Мы это можем посмотреть используя команду докат и указать ID контейнера либо имя поднимаясь немножко выше здесь указывается вот параметр порты которые открыты в самом контейнере Итак хочу сказать что к этому порту мы подключиться не сможем это также можно проверить с помощью

Итак хочу сказать что к этому порту мы подключиться не сможем это также можно проверить с помощью команды нет штат минус turkin видим что у нас на сервере нет открытого порта 80 то есть мы уже никак не сможем подключиться к нашему серверу на порт 8 чтобы он потом перебрасывался в контейнер Давайте оставим наш контейнер Дока чтоб он нам не нужен мы не можем и Давайте изменим нашу команду Давайте добавим теперь параметр и укажем порт 80 на сервер должен перебрасываться в порт 80 в доке и Давайте

теперь параметр и укажем порт 80 на сервер должен перебрасываться в порт 80 в доке и Давайте еще изменим имя все у нас контейнера запустился смотрим Дока пи с и мы видим что у нас порт 80 самого сервера пробрасывается в порт 80 но запустился Web 1 Давайте проверим браузере работает ли это все посмотрим IP адрес нашего сервера я это скопирую переходим в браузер вводим нажимаем Enter все у нас работает Welcome to Engine X прекрасным все хорошо давайте создадим еще один контейнер вот как мы на

Welcome to Engine X прекрасным все хорошо давайте создадим еще один контейнер вот как мы на графике картинки видели что это контейнер у нас работает мы можем подключиться по порту 80 и мы создадим еще один веб-сервер на основе GX и пробросов порт 880 В контейнер давайте это сделаем Итак изменим снова нашу команду Это у нас будет 2 и порты 880 Давайте посмотрим что будет если мы запустим те же порты У нас есть ошибка потому что порт 8 лет порт уже используется понятно хорошо Теперь если мы все

У нас есть ошибка потому что порт 8 лет порт уже используется понятно хорошо Теперь если мы все же здесь изменим порт 80 Мы даже сейчас сделать не можем потому что Дока попытался сдать контейнер с именем Web 2 мы не можем создать это можно посмотреть до капец с именем Web 2 но он остановлен просто создан created этот контейнер мы можем удалить Дока ему Веб 2 и Давайте снова попытаемся запустить контейнер уже с правильной ми портами Как видим у нас все запустилась проверяем до kps наши рабочие

контейнер уже с правильной ми портами Как видим у нас все запустилась проверяем до kps наши рабочие контейнеры У нас есть контейнер портами 88 на сервер открытой порты 80 80 и открыт порт 8 для контейнера Web 1 также можем проверить нет как это все выглядит на самом сервере у нас порты 80 открыты и порт 80 также открыты порты для IP версии 68 и порт 80 Давайте перейдем в браузер это все проверим сейчас большое изменение видим потому что у нас одинаковые сайты здесь отображается но мы можем это

сейчас большое изменение видим потому что у нас одинаковые сайты здесь отображается но мы можем это немножечко изменить и Давайте зайдем на сам контейнер вдоха так минус и т в один и запустим команду bin besh и Идем дальше в директорию Юза ш hnx HTML посмотрим какие здесь файлы находятся и здесь находятся файлы HTML по умолчанию то есть мы знаем что индекс HTML он запускается по умолчанию если мы заходим на сервер и Давайте создадим новый файлик с таким содержанием Давайте назовем это все Web 1

заходим на сервер и Давайте создадим новый файлик с таким содержанием Давайте назовем это все Web 1 и закинем это все в файлик тест Хорошо посмотрим все у нас есть это мы сделаем на веб 1 Давайте Так это у нас второй Веб 2 это у нас в 1 и вызовем нас тест точка HTML все у нас работает Web 1 если мы здесь попробуем запросить этот же Файлик то у нас над found понятно И давайте сделаем то же самое для второго сервера немножко потренируемся запускаем эту же команду к для контейнера web2 и еще одно

второго сервера немножко потренируемся запускаем эту же команду к для контейнера web2 и еще одно чтобы выйти с самого контейнера достаточно нажать Control Team также идем за шею смотрим 10 файлика такого нету Давайте создадим эху вдова 2 и Давайте закинь это все готово и снова переходим в браузер обновляем страницу и у нас есть reweb Server 2 Вот так мы смогли запустить два веб сервера на одном сервере использовать просто различные порты зачастую хочу сказать сразу что чтобы не было каши с

сервере использовать просто различные порты зачастую хочу сказать сразу что чтобы не было каши с портами чтобы не нужно было где какой порт работает на этом месте Вот здесь устанавливается прокси сервер то есть там уже он работает по DNS запросам и он уже сам перенаправляет на необходимые порты запросов Ну ладно это к этой теме далее Давайте посмотрим где находится описание портов Для различных сервисов Для различных контейнеров заходим на Дока хаб и Давайте зайдем сразу то что мы использовали

Для различных контейнеров заходим на Дока хаб и Давайте зайдем сразу то что мы использовали Сейчас переходим к спускаемся ниже и Да вот одно из вещей минус V это volums мы о них поговорим немножко попозже здесь вот указывается Где находится файлы контента которые можно изменять Но это другая тема далее вот зачастую по документации к контейнерам можно найти сразу описание Какие порты используя Какие порты нужно перебрасывать с серверов контейнер если это необходимо и вот здесь нам Как пример нам

порты нужно перебрасывать с серверов контейнер если это необходимо и вот здесь нам Как пример нам показывает что порт 88 перебраться порт 80 в контейнере это понятно помимо веб-серверов есть также очень огромное количество различных контейнеров которые также используются веб-сервера веб-ресурсы и Давайте на примере мы это посмотрим Давайте графа нам Кто не знает что такое графа на это различные графики которые можно создавать на основе мониторинга на основе других каких-то значений система

графики которые можно создавать на основе мониторинга на основе других каких-то значений система очень классная но тело не в этом а делаем на в портах его сразу у нас показывается в графане примерно запуска и здесь видно что порт предлагается 3000 контейнера 3000 честно скачается имидж графана Давайте посмотрим контейнер у нас работает Engine X Engine X и вот графона и мы видим что порты 3000 перебраться в порт 3000 Давайте примем работает ли это все заходим на наш тестовый сервер вот этот наш

в порт 3000 Давайте примем работает ли это все заходим на наш тестовый сервер вот этот наш Веб 2 и просто меняем порт на 3000 Все мы запустили стерео графа На прекрасном очень просто да то есть скопировали команду запустили Все работает далее если мы посмотрим пример запуска Давайте посмотрим пример запуска то здесь нас интересует только вот этого часть Мы видим что мы можем пробрасывать несколько портов в один контейнер то есть порты 9200 самого серверов 1200 на контейнере это уже 9000 300 то

портов в один контейнер то есть порты 9200 самого серверов 1200 на контейнере это уже 9000 300 то есть пробросать больше количество портов если это нужно именно для работы самого контейнера и еще один такой пример на основе Эдгард Хоум это система для блокировки рекламы на основе DNS У меня есть на канале видео об этом но если мы посмотрим как запускается этот контейнер Мы видим здесь целый список портов потому что эта система она может DNS и нужно использовать различные порты для запросов по

портов потому что эта система она может DNS и нужно использовать различные порты для запросов по DNS и так далее Также она может 10 пи делать но тем не менее здесь мы видим список портов которые необходимо для работы этого сервиса и вот здесь снизу зачастую есть в примерах описание Какие порты для чего используют если их большое количество это не обычный веб-сервер Вот так это все работает и Давайте переходим к следующей теме дальше рассмотрим and либо переменные окружения что это такое будете

переходим к следующей теме дальше рассмотрим and либо переменные окружения что это такое будете встречать при запуске Дока контейнеров вот такие вот параметры допустим только дальше минус и Вот это именно envienned переменная как она работает Для чего нужна давайте рассмотрим на примере базы данных Майской Давайте спускать немножко ниже и посмотрим как запускается Майская контейнер и вот у нас пример простой запуск контейнера можем это все скопировать давайте так и сделаем и немножечко это

пример простой запуск контейнера можем это все скопировать давайте так и сделаем и немножечко это подредактируем так и Давайте ставим Итак что мы здесь делаем мы запускаем все как обычно даем имя нашему контейнеру Майская минус Майской и дальше идет переменная которую мы даем нашим контейнеру в данном случае это То есть это переменной мы сможем указать какой хотим пароль мы для рута Давайте запускаем в 2000 мод то есть бэк раунде и какой контейнер Майской нажимаем это все стандартно для

запускаем в 2000 мод то есть бэк раунде и какой контейнер Майской нажимаем это все стандартно для скачивание самого имиджа с докохаб и будет запуск Майской контейнер Все мы запустили myscreen Давайте проверим только PS у нас контейнер работает и мы можем подключиться к этому контейнеру как мы знаем это будет докатит далее какой контейнер это будет тебе будет получаться по имени и далее Мы хотим запустить команду Где мы можем посмотреть наши переменные которые мы дали Это те же самые переменные

команду Где мы можем посмотреть наши переменные которые мы дали Это те же самые переменные которые мы сможем видеть в линуксе командой nvident invy мы сможем запросить все переменные системы системный пигмент это важна системная переменная и вот мы видим нашу переменную pv 1234 Вот так это работает то есть эти перемены которые мы указываем это будут просто системно переменные которые с помощью скриптов с помощью различных программ они могут использоваться эти переменные и Давайте протестим

скриптов с помощью различных программ они могут использоваться эти переменные и Давайте протестим работает ли Вообще наш мастер можем здесь запустить пароль копируем Все мы зашли на базу данных и Давайте еще покажу как можно не заходя в сам контейнер запустить в конце с помощью команды мы захотим запустить какую-то команду в данном контейнере можно просто здесь же Указать место Бин как мы указали пользователя труд Король и далее указываем пароль снова Давайте скопируем пароль вставляем и все мы

пользователя труд Король и далее указываем пароль снова Давайте скопируем пароль вставляем и все мы также в базе данных Вот так это все работает и Давайте еще посмотрим несколько примеров Давайте вернемся к Майской Вот то есть здесь у нас коза простой запуск Майская и зачастую Если вы смотрите документацию по какому-нибудь контейнеру то уже там будет указано все перемены которые можно использовать контейнер вам не надо Выдумать это 90 процентов случаев где все указано иногда бывает указано в

контейнер вам не надо Выдумать это 90 процентов случаев где все указано иногда бывает указано в официальной документации на веб-сайтах каких-либо программ то есть там уже более подробную документация А здесь только такой быстрый запуск допустим указывается Ну и Давайте если мы спускаемся немножко ниже то здесь будет указанный вот эти вот переменные мы можем указать и они будут приняты программы и что-то будет изменено допустим можем сразу же Создать пользователя для базы данных можем создать

и что-то будет изменено допустим можем сразу же Создать пользователя для базы данных можем создать для него пароль и так далее можно создать имя базы данных такие вот вещи и эти перемены это все эти перемены которые мы сможем увидеть в системе также Вот я нахожусь на Linux я веду команду инвоймент я вижу все переменные которые у меня есть системе если я хочу сюда добавить какую-то переменную именно в систему я могу сделать командой Export далее укажу тест переменная какая-нибудь и она равняется

в систему я могу сделать командой Export далее укажу тест переменная какая-нибудь и она равняется бла бла нижнее подчеркивание Да все готово и теперь снова иду инвалид и ищем наши тест 2 вот тест мы эту переменную можем использовать вот принципе в докере это все так же как и здесь работает Ну давайте еще один пример сделаем Давайте запустим наш ток и просто ведем какую-нибудь переменную что будет и Давайте любой переменную придумаю она будет равняется допустим новый контейнер и здесь на основе

и Давайте любой переменную придумаю она будет равняется допустим новый контейнер и здесь на основе маской все поехали готовим смотрим только без у нас запустилась два контейнера хорошо и Давайте зайдем на наш второй контейнер только x минус идти второй контейнер и пин Беш запустим хорошо и посмотрим Какие перемены есть И вот наша переменная То есть вы можете добавить любые переменные которые вы хотите которые вы придумаете Но не все переменные будут работать с этой программой которая вы которую

которые вы придумаете Но не все переменные будут работать с этой программой которая вы которую вы запускаете поэтому очень важно смотреть документацию и смотреть Именно какие переменные и на необходимо для этой программы чтобы она запустилась есть перемены которые опциональны вот допустим Если мы Майское попробуем запустить без этой переменной без пароля так 3 и запустим она запускается до кран без каких-либо переменных Давайте посмотрим [музыка] Да у нас ничего не сработало Давайте уберем ты

без каких-либо переменных Давайте посмотрим [музыка] Да у нас ничего не сработало Давайте уберем ты течь мод чтобы увидеть ошибку Почему не запустилась создан уже Давайте все-таки удалим Ну это хорошо повторяем как раз команда которая только ему и все хорошо и Давайте снова запустим мода у нас ошибка потому что мы не задали пароль для рута то есть в любом случае Нам нужен нужно 1 переменная которая задает здесь пароль также есть очень много переменных как мы смотрели вот документации по Майской

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

но нас интересует не самая программа а именно переменная как запускается все и вот у нас есть запуск до Коран и так далее И вот здесь у нас тоже указывается пароль для Flame пароль то есть для того чтобы мы смогли как админ использовать графическую оболочку Ну и Давайте запустим наш контейнер Давайте попробуем просто вот что получится Итак Здесь также есть указывается Volume это мы рассмотрим потом сейчас не нужно просто я удаляю можно запустить с ним ничего страшного не будет И вот у нас тут

сейчас не нужно просто я удаляю можно запустить с ним ничего страшного не будет И вот у нас тут Flame Давайте изменим чтобы попроще было просто напас 12 так все в принципе достаточно мы делаем пробрасываем порты 5000 5 для удобства Давайте вернемся в и там по идее сверху указаны правильное имя как мы должны скачивать вот это вот мы копируем много главное чтобы правильно репозиторий мы указывали то есть называется не просто Flame называется вот так все идет скачивание Все мы запустили и так

то есть называется не просто Flame называется вот так все идет скачивание Все мы запустили и так перейдем на наш сервер и Давайте в браузер и Давайте попробуем Достучаться 149 по моему 9 и порт 50005 сейчас не 149 сейчас на посмотреть 194 5 и вот у нас есть мы зашли графическую оболочку Да измельем settings и здесь нужно указать будет пас 1234 по моему логин да не то указала Давайте еще раз проверим что мы здесь указали 123 давайте это и укажем ПАЗ 1 2 3 логин Все мы зашли то есть таким образом

что мы здесь указали 123 давайте это и укажем ПАЗ 1 2 3 логин Все мы зашли то есть таким образом передаются пароли допустим это самое часто используем что мы можем пароль передать Ну и принципе есть очень много настроек которые можно изменять с помощью если мы не указываем от и они не обязательно будут использоваться значение по умолчанию Вот вот так это работает все спасибо переходим дальше одно из важных тем является то Как сохранять наши данные которые были изменены в ходе работы контейнеров

из важных тем является то Как сохранять наши данные которые были изменены в ходе работы контейнеров как мы знаем что если мы контейнеры убираем убиваем то наши данные теряются это происходит вот так у нас есть сервер У нас есть док-контейнеры сам только работает и при запуске команды докат мы получаем наш контейнер Майской И как мы знаем что в Майской Эльф все данные хранятся по умолчанию в директории валип Майской тоже самое происходит если мы запускаем какие-нибудь приложения Да с помощью

валип Майской тоже самое происходит если мы запускаем какие-нибудь приложения Да с помощью Taka Run App допустим какое-то имя то какие-то данные какие-то файлы конфигурации всякое такое сохраняется также в определенной территории ну допустим у нас будет какой-то определенная приложении своей конфигурации в киси App confix Если же мы вводим команды Дока стоп Майская и докаримов Майская то есть мы убиваем это контейнер мы убиваем не просто контейнер мы убиваем полностью все наши данные нас их

мы убиваем это контейнер мы убиваем не просто контейнер мы убиваем полностью все наши данные нас их нету то есть они остаются то же самое происходит приложение если мы убиваем основ ным и убиваем контейнер то у нас также пропадает наши конфигурационные файлы либо файлы которые были изменены в ходе работать приложение как же нам сохранить эти файлы чтобы они у нас оставались если мы допустим хотим обновить наши контейнер тоже сам Кстати да происходит если мы хотим обновить контейнер допустим

обновить наши контейнер тоже сам Кстати да происходит если мы хотим обновить контейнер допустим mysql5.7 версии Мы хотим новый контейнер получить допустим какие-то есть патчи там по безопасности то нам нужно убить предыдущий контейнера запустить новый контейнер если мы убьем предыдущий контейнер то мы убьем сразу же эти данные Итак давайте разберем Как нам сохранить наши данные вот эти данные довольно таки просто мы эти данные должны сохранять на самом сервере либо на Хосте то есть мы можем

довольно таки просто мы эти данные должны сохранять на самом сервере либо на Хосте то есть мы можем смонтировать определенные директории которая у нас есть На физическом сервере на жестком диске На физическом в Дока контейнеры это называется либо сохраняющиеся данные чтобы сделать вот такой вот соединение соединить Наши директории в контейнерах и их как бы смонтировать на физический сервер или наоборот что нам нужно сделать есть три способа как сделать Mount и Давайте их разберем первый

или наоборот что нам нужно сделать есть три способа как сделать Mount и Давайте их разберем первый называется Host volums и делается это следующим образом при запуске Дока мы используем параметр минус V то есть volums И указываем вот таким образом даны это в игре приведены вот таким образом то есть Давайте разберемся если мы указываем -3 opt mysql Data двоеточие и Валид Майской то есть слева стоит часть та которая принадлежит самому серверу то есть физический сервер у него есть такие директории

часть та которая принадлежит самому серверу то есть физический сервер у него есть такие директории то с правой стороны находится директории в док-контейнере то есть мы монтируем вот эту часть левую часть в правую физический сервер контейнер она будет смонтирована валиб маскуэль директорию то же самое с приложением допустим опт config будет смонтирована в etc opt config следующий тип это анонимные Volume это делать следующим образом то есть мы видим что у нас нет никаких двоеточие У нас просто

Volume это делать следующим образом то есть мы видим что у нас нет никаких двоеточие У нас просто указывается минус и указывается какой Volume Мы хотим смонтировать В контейнер Майская и это выглядит следующим образом мы также монтируем определенные директория с жесткого диска в контейнер но в этом случае нам довольно-таки сложно понять какой именно Volume как он находится где он находится поэтому попозже увидим я вам покажу как это все работает но Что происходит в этом случае если мы указываем

попозже увидим я вам покажу как это все работает но Что происходит в этом случае если мы указываем такую команду то у нас в директории валидоковой потом какой-то и потом минус дата и там уже хранятся данные которые находятся Валик Майской В контейнере тоже самое происходит со второй директории который мы смонтировали и следующий тип это именные и указываем куда его нужно смонтировать что в этом случае происходит на Севере на котором мы запускаем эту команду происходит создание директории

этом случае происходит на Севере на котором мы запускаем эту команду происходит создание директории валлиптока Volume этап создаются Volume которая которым мы хотим добавить в контейнер и вот этот вот этот директория она монтируется уже Валик эти две команды не похоже они отличаются только тем что здесь будет просто сгенерирован какой-то Хеш какой-то номер будет дан а здесь мы конкретно видим что мы монтируем это будет потом видно и Давайте приступим к практике мы разберем основные команды Как

мы монтируем это будет потом видно и Давайте приступим к практике мы разберем основные команды Как работать с валюмами и вот эти вот три варианта тоже мы все создадим переходим на сервер мы на нашу серию где установлен docker и Давайте посмотрим есть делать командой дока Volume LS и видим у нас нет никаких volum of и давайте для примера сразу же возьмем какую-то контейнер Я выбрал для этого GX чтобы сразу могли видеть результат и Давайте спускаемся ниже посмотрим как запускать Engine X и вот

чтобы сразу могли видеть результат и Давайте спускаемся ниже посмотрим как запускать Engine X и вот самый Первая команда самый простой командой как это все сделать Давайте скопируем и разберемся что мы здесь будем делать вставляем и так мы создаем запускаемый контейнер даем ему имя давайте назовем сразу просто для нас будет Web 01 и вот наша команда что у нас интересует минус V это Volume что нам предлагает сразу же это сам контент то есть что угодно может смонтировать в эту директорию и дальше

предлагает сразу же это сам контент то есть что угодно может смонтировать в эту директорию и дальше хочу заметить что есть стоит двоеточие У то есть что контейна который запустится он не имеет прав изменять что-то в этой директории он имеет право только читать read Only Да и мы запустим в скрытом режиме наш enginex Ну и Давайте еще такую штуку посмотрим какие вольфы мы сможем здесь использовать данном случае у нас хост будем то здесь в конце директория которая будет смонтирована в нашей GX

данном случае у нас хост будем то здесь в конце директория которая будет смонтирована в нашей GX Давайте уберем без этой директории мы ничего здесь не будем добавлять просто запустим наш работает ли он или нет проверим только без хорошо и Давайте зайдем посмотрим Итак у нас вот этот вставляем у нас ошибка А почему ошибка так с предыдущим видео Мы помним что нужно еще нам добавить порт mapping и давайте это сделаем только нам нужно установить контейнер [аплодисменты] только хорошо и Давайте его

это сделаем только нам нужно установить контейнер [аплодисменты] только хорошо и Давайте его сразу же готово берем нашу предыдущую команду и добавляем mapping как Мы помним это минус пи и перебрасываем порты 80-80 в контейнер все запуска готова проверяем у нас контейнер работает и Давайте снова попробуем зайти и вот у нас запустился Давайте сразу чтобы видно было адресная строка Вот так вот все хорошо У нас как обычный сайт стандартный который и давайте мы сменим его чтобы нам было понятно что

У нас как обычный сайт стандартный который и давайте мы сменим его чтобы нам было понятно что мы что-то меняем Что что-то может быть пропасть что-то изменится и так в данном случае мы не смонтировали никакого директории что мы можем мы можем просто зайти на сам контейнер и там добавить какой-то файл давайте это сделаем Итак пишем только интерактив мод далее указываем 01 и запустим команду Мы в контейнере и чтобы нам знать где нам изменять нашу директорию мы можем подняться нет вверх Мы не

в контейнере и чтобы нам знать где нам изменять нашу директорию мы можем подняться нет вверх Мы не сможем подняться потому что мы не запускали никакую директорию не монтировали мы сможем зайти на Engine X оригинал и зайти вот в эту директорию здесь будет считываться HTML файлы в этой директории Итак копируем и переходим в эту директорию смотрим что в ней нас есть индекс HTML как мы знаем что по умолчанию веб-сервер спрашивает файлы который называется Intex мы посмотрим то внутри вот такие вот

умолчанию веб-сервер спрашивает файлы который называется Intex мы посмотрим то внутри вот такие вот вещи которые мы видим принципе в браузере Но это другая тема мы попробуем изменить этот Файлик Итак Посмотрим есть у нас вин установленный команды нету посмотрим на но также Нет что нам в этом случае делать мы можем воспользоваться командой и что мы сделали Мы добавим просто наш индекс так все что у нас здесь происходит Мы добавляем это содержимое Файлик индекс HTML Хорошо Enter готова проверяем

у нас здесь происходит Мы добавляем это содержимое Файлик индекс HTML Хорошо Enter готова проверяем и вот наше содержимое нашего файлика так только у нас осталось еще предыдущая шапка Ну ладно пускай будет так Давайте снова обновим нашу страницу и мы видим что вот добавилось то что мы импортировали допустим у нас есть статистический сайт вот наш он работает все заходит смотрят и так далее Все хорошо Давайте проверим что если мы остановим контейнер случайно Мало ли что давайте выйдем с

Все хорошо Давайте проверим что если мы остановим контейнер случайно Мало ли что давайте выйдем с контейнером посмотрим ID Хотя с именем и посмотрим только стоп 01 хорошо Но наш контейнер остался созданный он есть что можем сделать мы можем только старт и запустить наш контейнер хорошо работать Интересно наши данные оставили либо Нет давайте обновим страницу да наши данные остались потому что мы остановили контейнер он был создан и сейчас если мы его убьем то наверное что-то изменится Давайте

остановили контейнер он был создан и сейчас если мы его убьем то наверное что-то изменится Давайте попробуем только стоп 01 и также мы теперь удалим хорошо и Давайте создадим снова контейнер такой же с теми же именами с теми же портами с тем же именем очень мы ничего Изменять не будем вот так команда которую мы запускали предыдущий контейнер что произойдет Все мы запустили проверяем контейнер работает переходим на сайт обновляем увы наших данных там нет В чем это плохо то что если мы зайдем на

переходим на сайт обновляем увы наших данных там нет В чем это плохо то что если мы зайдем на прием выше то здесь допустим Вы установили определенную версию 1 2 1 2 3 1 2 3 и потом выходит новое обновление новый хотите что это все обновилось вы загружать новый контейнер Либо вы используете лейтест что еще хуже вы постоянно вы задали контейнер потом нужно обновить вы убиваете контейнер запускайте новый но вашего сайта уже нет он заново нужно все импортировать и так далее это ну так не делают

новый но вашего сайта уже нет он заново нужно все импортировать и так далее это ну так не делают Короче дальше давайте мы сделаем все таки с Volume переходим давайте начнем его сверху и вниз и создадим хост переходим в папку и Давайте создадим папку и в этой папке мы создадим еще одну папку назовем ее дата как данные наши будут снова Давайте вернемся в наших предыдущих команде который мы запускали и добавим параметр что мы хотим смонтировать контейнер находится опт эту директору Мы хотим

и добавим параметр что мы хотим смонтировать контейнер находится опт эту директору Мы хотим смонтировать в контейнер а куда мы хотим смонтировать это написано здесь изменяли индекс вот она и здесь также Вот она указывается я скопируем и вставляем и запускаем X Да у нас контейнер создан предыдущий нужно его убить веб 01 нужно сначала остановить потом Удалить готово и Давайте снова повторим нашу команду ничего страшного ошибки Так мы учимся проверяем контейнер работает Итак мы смонтировали одну

ничего страшного ошибки Так мы учимся проверяем контейнер работает Итак мы смонтировали одну директорию контейнер Давайте посмотрим что у нас показывается на сайте и у нас ничего нет Странно почему потому что давайте заглянем директорию у нас здесь ничего нет который мы хотим отобразить индекс HTML и добавим то же самое содержимое которое было до этого вставляем вот наше содержимое сохраняем выходим Хорошо Давайте проверим работает ли Да у нас есть то содержимое которое мы сейчас вставили в

Хорошо Давайте проверим работает ли Да у нас есть то содержимое которое мы сейчас вставили в этот Файлик и что произойдет если мы контейнер убьем давайте это сделаем только стоп веб 1 далее его убиваем и Давайте заново запустим вот мы монтируем Ту же самую директорию контейнер давайте что-то для проверки посмотрим у нас в директории также есть этот индекс Файлик хорошо запускаем поехали отлично и Давайте сразу перейдем на сайт обновим страницу на все также есть у нас все те же изменения есть и

Давайте сразу перейдем на сайт обновим страницу на все также есть у нас все те же изменения есть и давайте для проверки Чтобы наверняка что это не что-то еще мы добавим что-нибудь и вот Хотя тема с изменяем и и volumex хорошо сохраняем выходим переходим снова наш сайт и мы видим что у нас изменились наши вещи Давайте убьем контейнер хорошо так Давайте запустим следующий контейнер используем анонимный Volume То есть у нас будет использоваться Давайте Сначала посмотрим что в этих территориях есть

Volume То есть у нас будет использоваться Давайте Сначала посмотрим что в этих территориях есть переходим сидим вам клип токер У нас есть папочка [музыка] и вот у нас ничего Нет давайте мы сделаем как мы видим на картинке запускает нам контейнер нужно просто с параметром минус ви и просто указывает куда мы будем монтировать В контейнер давайте это сделаем берем нашу предыдущую команду Давайте сразу еще добавлю что наш контейнер при сноке будет сразу удаляться вот так будет лучше видно и убираем

еще добавлю что наш контейнер при сноке будет сразу удаляться вот так будет лучше видно и убираем переднюю часть все поехали хорошо докер работает и посмотрим что с папки валиус произошло и у нас есть Будем Это довольно-таки плохо что мы не поймаем к чему это примонтировано сейчас нужно смотреть в настройки самого доктора Ну не суть и Давайте посмотрим на сайт обновляем страницу и у нас есть Welcome to Engine X как бы все работает Давайте снова зайдем в этот хорошо Это принадлежит этому

Welcome to Engine X как бы все работает Давайте снова зайдем в этот хорошо Это принадлежит этому контейнеру переходим дата и Здесь также лежит индекс Файлик Давайте его изменим это все мы удаляем и вставляем Наш текст сохраняем выходим переходим на сайт обновляем как мы видим у нас теперь наша содержимое отображается на сайте прекрасно это работает Давайте это Мы удалим только стоп веб 01 хорошо и Давайте посмотрим какие Volume У нас есть созданные какие были мы знают наш докер пишем только с у

Давайте посмотрим какие Volume У нас есть созданные какие были мы знают наш докер пишем только с у нас не отображается никакие Давайте вернемся в нашу предыдущую директорию И как мы видим она также удалилась вместе с докером То есть если мы удаляем докер то это директория также удаляется можем это проверить что можем сделать вывод так запуская докер не стоит хорошо и Давайте еще сделаем последнюю команду которая самая распространенная не Команда А будем и которые можно использовать это именно и

команду которая самая распространенная не Команда А будем и которые можно использовать это именно и Давайте запустим нашу команду с параметром и где наш Вот вводим и Давайте назовем Веб дата мы матируем 8 докер запустился все прекрасно Давайте проверим работает ли обновляем отлично Все работает далее снова идем в лип докер volums смотрите нас волями Ага У нас есть уже дата прекрасно Заходим в дата Здесь также есть под дата но как мы видим у нас уже не просто какой-то хэш был создан А у нас

дата Здесь также есть под дата но как мы видим у нас уже не просто какой-то хэш был создан А у нас создан был именно именной вводим и Здесь также у нас есть индекс HTML Давайте его Изменять не будем Я думаю вы мне верите на слова что она так все и останется Что происходит если у нас все остается по-прежнему у нас дата также есть Давайте запустим еще дока Volume Посмотрим есть у нас здесь отображается вводим который дальше это один из способов то есть мы Таким образом мы создали контейнер

вводим который дальше это один из способов то есть мы Таким образом мы создали контейнер запустили контейнер создали же сразу же в этой же команде Мы создали вводим в директории контейнера хорошо Еще есть другой способ как создавать Volume это будет доком Create и название Volume которое мы хотим Ну допустим мы хотим инфус неважно один момент сесть при запуске токера в данном случае он попытался запустить контейнер infox но такого нет Нужно когда снова Дока Volume и у нас есть два будима к

запустить контейнер infox но такого нет Нужно когда снова Дока Volume и у нас есть два будима к примеру вы используете контейнер в нашем случае вот у нас Engine X работал который мы убили Но тем не менее осталось остался боги и Вам он уже больше не нужен Вы видите что он висит Занимает место и так далее его стоит Удалить Мы хотим работать проверяем у нас его нету И также инфос Нам тоже уже не нужно готово прекрасно и давайте сейчас посмотрим еще несколько примеров по использованию volum of это

готово прекрасно и давайте сейчас посмотрим еще несколько примеров по использованию volum of это Довольно простой пример Где используется только один воду здесь не очень много монтируется и все я хотел вам показать на примере Да это платформе на канале есть о нем видео клад платформа можно самому на своих серверах это разворачивать так вот на Дока Хаби страничка и Давайте посмотрим как он запускается так спускаемся ниже это тоже простой запуск нас интересует расширенный вот Давайте разберем у

так спускаемся ниже это тоже простой запуск нас интересует расширенный вот Давайте разберем у нас запускается docker nexcloud и монтируется вульмы nexcloud в эту директорию в HTML директорию далее Apps то есть какие-то приложения это пользовательские приложения какие-то конфигурация также отдельно монтируется отдельно монтируется дата и так далее давайте это все мы сделаем давайте мы это все скопируем мы запускаем докер контейнер в моде то есть бэкграунде вставляем далее мы монтируем наш Volume

мы запускаем докер контейнер в моде то есть бэкграунде вставляем далее мы монтируем наш Volume Давайте перед этим добавим ему имя давайте это будет у нас Так мы сказали что дальше идет монтируем один Ну и этот пулю мы монтировать не будем это темы какие-то которые монтируются Да все хорошо Но в таком случае мы запустим именно вот вот эти вот Volume то есть создадут нас в этой директории в директории доктора volums у нас сдадутся Volume для NEX клауда Ну давайте мы так сделаем и просто посмотрим

доктора volums у нас сдадутся Volume для NEX клауда Ну давайте мы так сделаем и просто посмотрим что будет идет скачиваем на экспродам я пока нажму на паузу для вас Это буквально одна секунда хорошо все скачалось Давайте посмотрим Дока без у нас работает но что мы забыли мы забыли пробросить порты то есть порт 80 открыт в контейнеры но не открыт на Хосте то есть мы к нему Достучаться не сможем Давайте контейнера остановим только стоп Клауд Ну и Давайте удалим мы делаем так и пробрасываем порты

контейнера остановим только стоп Клауд Ну и Давайте удалим мы делаем так и пробрасываем порты хорошо все запустилась отлично смотрим Все работает парты проброшенный и Давайте зайдем теперь на наш сайт посмотрим работает ли он или нет и все отлично У нас запустился nexcloud на тут можно установить и так далее 8 он работает и Давайте посмотрим что у нас происходит с директориями докер бульонс и мы видим что у нас пачка вольмов была создана для работы в склада Вот так это работает вот так задаются

что у нас пачка вольмов была создана для работы в склада Вот так это работает вот так задаются волю мы я вам не удаляются и при создании контейнеров Не забывайте никогда создавать постоянные место хранения для ваших данных иначе будет очень обидно что ваши данные просто потерялись из-за того что вы остановили или удалили Обновили контейнер все переходим к системе сейчас мы рассмотрим одну из самых интересных и сложных тем которые касаются Докера это будет только сети Я думал что это будет

самых интересных и сложных тем которые касаются Докера это будет только сети Я думал что это будет маленькая короткая тема но нет она оказалась довольно таки обширной и интересной на данном видео не будет много слайдов но будет много Стрелок и прямоугольников и давайте мы начнем У нас есть сервер на котором работает докер сервер там работает какой-то Linux и у нас Мы запустили токер и мы сразу же получаем новый интерфейс Я думаю вы все Знамени когда запустили докер мы получаем интерфейс Дока 0

получаем новый интерфейс Я думаю вы все Знамени когда запустили докер мы получаем интерфейс Дока 0 при создании Докера при запуске мы получаем несколько типов сетей по умолчанию которую уже есть уже нам докер их предоставляет Это тип сети Bridge Host и Non тип сети Bridge Это тип сети по умолчанию при запуске контейнеров обычным способом до Коран и название имиджа он попадает в сеть Bridge это сеть по умолчанию Она имеет зачастую по умолчанию сеть 182 1700 слэш 16 это стоит запомнить Потому что

по умолчанию Она имеет зачастую по умолчанию сеть 182 1700 слэш 16 это стоит запомнить Потому что постоянно Когда вы запускаете докер для теста или чего-то еще контейнеры контейнер который в этой сети находится они имеют сразу же доступ наружу то есть они могут подчас другим серверам они могут подключаться к интернету очень имеется доступ также мы контейнером можем подключиться локально и чтобы нам подключиться Извне контейнеру нам нужно сделать так называемый мостик Bridge поэтому называется

нам подключиться Извне контейнеру нам нужно сделать так называемый мостик Bridge поэтому называется это Bridge Он соединяет сам контейнер IP адрес контейнера с IP адресом сервера чтобы нам включиться к контейнеру который работает в сети Bridge нам нужно создать мостик и этот мостик создается с помощью параметра минус пи то есть порт mapping которым изучили до этого И что происходит у нас получается мы Соединяем порт 80 Хоста с портом 80 контейнера это случай есть мы запускаем если запускается

мы Соединяем порт 80 Хоста с портом 80 контейнера это случай есть мы запускаем если запускается другая программа которая имеет графическую оболочку либо что-то еще то изменяться Ну суть не в том Суть в том что мы просто так называемый мостик и таким образом мы сможем подключиться именно к нашему контейнеру Если же мы хотим запустить контейнер в кипе сети Host то нам нужно указать параметр Network и Указать тип сети Host то когда контейнеры здесь создаются Они получают IP адрес именно Хоста Да

и Указать тип сети Host то когда контейнеры здесь создаются Они получают IP адрес именно Хоста Да они отличаются портами и так далее но тем не менее не получает IP адрес Хоста эти контейнеры также могут подключаться наружу выходить наружу в интернет скачивать что-то еще передавать какие-то данные можем к ним подключаться локально и чтобы нам подключиться к контейнеру допустим нам достаточно просто указать ip-адреса самого Хоста и указать порт либо пор не указано если мы в браузер то браузер по

указать ip-адреса самого Хоста и указать порт либо пор не указано если мы в браузер то браузер по умолчанию идет на порт 80 либо 43 Да но если нам какой-то контейнер другим портом то нам стоит указать адрес самого сервера Ну таким образом И следующий если мы хотим создать контейнеры в кие сети но то нам нужно соответственно указать параметр минус Минус Network и в сети но в данном случае мы никак не сможем подключиться к контейнеру Извне то есть ну нет доступа у него нет IP адреса мы не сможем

не сможем подключиться к контейнеру Извне то есть ну нет доступа у него нет IP адреса мы не сможем подключиться к контейнеру локально потому что также Нет у него своего IP адреса но мы сможем зайти на контейнер подключиться непосредственно к самому контейнеру не через IP адрес не через порт какой-то посмотреть там допустим но мы сможем посмотреть Локи и запустить какие-то программы можно быть в самом контейнере это три основных типа сетей которые создаются с доктором автоматически то есть не

самом контейнере это три основных типа сетей которые создаются с доктором автоматически то есть не сразу же есть мы это увидим на практике но наверное было бы довольно таки Просто если было всего лишь три типа поэтому Давайте добавим еще следующий тип сети это Мег вилан и ipvan эти два типа мы рассмотрим немножко позже я пока что опущу из еще один есть тип орлей он из пост тогда когда тока запускается в кластере как кластер только допустим используется только свом это тип сети я рассматривать

в кластере как кластер только допустим используется только свом это тип сети я рассматривать не буду так как мы не будем рассматривать только свом и как бы это немножечко уходит в прошлое но тем не менее стоит знать есть кто-то хочет очень просто использовать кластер только в кластеры то конечно да только с вам это прощает во много раз но все же давайте рассмотрим эти три типа сетей Breach host Итак переходим что у нас происходит у нас есть сервер где работает токер и у нас есть как говорил уже

переходим что у нас происходит у нас есть сервер где работает токер и у нас есть как говорил уже по умолчанию один Бридж дефолтная сеть по умолчанию если мы запускаем контейнеры как я уже говорил обычным образом и название имиджа создаем контейнер то он попадает именно в эту сеть дефолт мы создаем один контейнер второй 10 как я говорил эти контейнеры могут выходить наружу можно к ним подключаться и так далее создавать мостики такие Кроме того данный контейнеры могут общаться между собой Они

и так далее создавать мостики такие Кроме того данный контейнеры могут общаться между собой Они получают IP адреса какие-то Рандомные ip-адреса в этой сети и они могут общаться именно по IP адреса между собой но они не могут общаться между собой используя свои имена То есть как бы домены имена которые получают они при создании контейнера наш сервер также может получиться данным контейнером и как ничего страшного но что делать тогда когда мы убиваем контейнер за на создаем то Они получают

и как ничего страшного но что делать тогда когда мы убиваем контейнер за на создаем то Они получают какие-то Рандомные снова ip-адреса могут получать нам было удобно было бы использовать именно доменные имена нам нужно создать новую сеть допустим создаем тип сети Bridge это версиям образом имя которое мы хотим дать нашей сети если мы не указываем этот параметр то продаются автоматически типа Bridge то есть данная вещь можно опустить сразу же сеть создаться типа Bridge Ну и Допустим мы хотим

то есть данная вещь можно опустить сразу же сеть создаться типа Bridge Ну и Допустим мы хотим создать имя майонез Мы создали новую сеть и хотим запустить контейнер чтобы запустить контейнер именно в этой сети не просто до Коран и они запустится в дефолтной сети а именно в нашей новой сети нам нужно указать параметр минус Минус нет либо минус Минус Network и указать My net1 и указать название имиджа который мы хотим запустить допустим останется при Джинкс мы запустили два контейнера то в этой

который мы хотим запустить допустим останется при Джинкс мы запустили два контейнера то в этой сети уже эти контейнеры они могут общаться между собой допустим этот контейнер приложения Engine X а вторая база данных допустим так как контейнер в этой сети получать свои IP адреса 172 17 и так далее они могут общаться и также они могут общаться по DNS именам такие имена которые мы указываем допустим в параметре минус Минус и название контейнера либо если мы этого не делаем то докер присваивает

в параметре минус Минус и название контейнера либо если мы этого не делаем то докер присваивает какой-то имя контейнер то есть мы можем использовать имя для подключения к контейнерам и также можем подключаться к тренерам но мы можем между ними общаться но две сети кислотность и Наша сеть Они между собой общаться не могут Ну и Давайте посмотрим если мы создадим еще одну сеть также свою дефолтную назовем ее майонез 2 создадим там два контейнера то в этом случае мы также К сожалению сможем

назовем ее майонез 2 создадим там два контейнера то в этом случае мы также К сожалению сможем Соединить две сети майнет один и майонез 2 Это хорошо тем что мы можем изолировать два приложения полностью добавлять какой-то безопасности этим контейнером Мы также можем локально в следующую сеть сеть хост она создается также указывается драйвер хост и название сети и что здесь происходит если мы создали данную сеть У нас есть сервер с доктором два контейнера то эти контейнеры могут общаться между

данную сеть У нас есть сервер с доктором два контейнера то эти контейнеры могут общаться между собой и также серый Может к ним подключаться непосредственно и также эти контейнеры которые создаются Они получают своего адреса они используют самого Хоста вот есть мы хотим получить к какому-то из контейнеров Извне то нам нужно указывать адрес нашего сервера И следующий тип сети это Но это довольно таки самая простая Тип который в принципе редко очень используется он создает с помощью Drive но он

таки самая простая Тип который в принципе редко очень используется он создает с помощью Drive но он что происходит у нас есть тира с докером и сотные два контейнера как картинки уже можно понять что эти контейнеры они изолированы сами по себе Да мы не можем непосредственно подключиться к ним по IP адресам к портам но мы можем запустить на них какие-то команды локальные и так далее Я думаю это более-менее понятно с контейнером это три основных типа в основном используются Ну наверное в 95

более-менее понятно с контейнером это три основных типа в основном используются Ну наверное в 95 случаев это используется тип Бридж иногда использовать Ну также существует два типа которые очень интересный именно со стороны сетей это Мэг вилан и Давайте представим У нас есть сервер Host и как и все сервера У нас есть ip-адрес у нас есть сетевая карточка если мы уже говорим о IP Van то приходит на ум что это что-то сетью связано именно с вилами когда мы говорим то стоит отобразить сетевое

на ум что это что-то сетью связано именно с вилами когда мы говорим то стоит отобразить сетевое оборудование я отображу здесь свитч работает и идет подключение к нашему серверу и давайте мы запустим два контейнера именно в сети mackvielan что происходит данный контейнеры Они получают свои карточки сетевые и также соответственно свои ip-адреса Вот и мы уже непосредственно можем подключиться сразу же по ip-адресу без указания портов Ну или указывать порты если это нужно но тем не менее мы можем

же по ip-адресу без указания портов Ну или указывать порты если это нужно но тем не менее мы можем непосредственно подключиться именно к контейнерам непосредственно но при создании контейнеров сети происходит следующее сервер имеет силу карточку карты сетевая карта имеет свой MAC адрес допустим у сервера вот такой то контейнеры в этой сети Они получают свои методы что упрощает намного маршрутизацию именно свеча он знает уже непосредственно Где находится какая пиар адрес находится и так далее и

именно свеча он знает уже непосредственно Где находится какая пиар адрес находится и так далее и идет подключением непосредственно к контейнеру Что происходит с типом сети у нас также есть сервер с IP адресом также контейнеры в этой сети получает свои IP адреса но mac-адрес он остается без изменения то есть контейнеры получают и на сетевые карты контейнера получает те же mac-адреса что и наш сервер вот ну и подключение происходит таким же обычным образом Вот так мы разобрали все типы сети

сервер вот ну и подключение происходит таким же обычным образом Вот так мы разобрали все типы сети которые используются в докере и Давайте перейдем к практике посмотрим как это все работает создадим пару сетей и что будет делать именно контейнером переходим на сервер именно сервере Где работает Давайте посмотрим на сервер Какие сетевые интерфейсы У нас есть пишем что у нас есть интерфейс 18 это сетевая карточка виртуальной машины и также сетевая карточка Докера виртуальная карточка И у нас есть

карточка виртуальной машины и также сетевая карточка Докера виртуальная карточка И у нас есть в докере также адрес и указывается масса сети хорошо Network и LS то есть лист и мы видим у нас есть три типа сетей это Bridge Host и Non все кому Понятно Это стандартные все вещи которые создаются при установке Докера создадим свою собственную сеть Итак пишем дока далее Мы хотим создавать сеть поэтому пишем дальше круит как бы мы хотим это сделать И Давайте напишем май нет 01 допустим Хорошо давайте

пишем дальше круит как бы мы хотим это сделать И Давайте напишем май нет 01 допустим Хорошо давайте посмотрим что у нас появилось дока и у нас наша новая сеть появилась с драйвером как я говорил что сеть есть вы создаете без каких-либо параметров без указания драйвера она появляется сразу автоматическая в Бридж А что будет если мы создадим хост дока Network Create минус Минус либо можно просто указать минус dim далее указываем драйвер Host и Давайте назовем дадим имя май нет хвост и видите

указать минус dim далее указываем драйвер Host и Давайте назовем дадим имя май нет хвост и видите сейчас что получится Вот мы не можем создавать больше одной сети типа хост потому что все контейнеры которые создаются на сервере в этой сети они создаются как бы как будто вы Установите программу на сам север то есть этот контейнер будет использовать вот этот интерфейс вот поэтому только один возможный хорошо Поехали дальше Теперь давайте создадим драйвер ноль то есть пустота и майонез Вот так и

хорошо Поехали дальше Теперь давайте создадим драйвер ноль то есть пустота и майонез Вот так и мы видим Что также мы не можем создать больше одной сети типа 0 потому что все контейнеры в этой сети они также ничего не спутник пусть его карту Не используют то есть мы простой контейнеры и не создаются без ничего пустые хорошо Мы создали какую-то сеть Она как-то работает хорошо давайте немножечко посмотрим вот допустим на сервер и у нас есть какая-то сеть мы не ничего не знаем как нам быть как нам

вот допустим на сервер и у нас есть какая-то сеть мы не ничего не знаем как нам быть как нам узнать информацию для этого пишем только и указываем либо имя сети либо и мы видим здесь настройка вот самой сети как она будет 19 слэш 16 небольшая информация Таким образом мы можете узнать не запуска никаких контейнеров какая Вот маленькая информация далее создавать контейнеры и пробуй как-нибудь работать но перед этим Давайте мы создадим какую-то не дефолтную сеть то есть Мы создали просто Мы создали

но перед этим Давайте мы создадим какую-то не дефолтную сеть то есть Мы создали просто Мы создали сеть которая типа Бридж но мы хотим указать какой ip-адреса мы хотим именно использовать как это можно сделать Ну и давайте сделаем пишем только Network как обычно Create мы создаем далее указываем тип драйвера Бридж либо можем ничего не указано давайте для нога Насти укажем далее мы указываем вот как здесь у нас было 19 но мы хотим допустим вообще другую взять Давайте 192 168 Ну я не знаю Давайте

здесь у нас было 19 но мы хотим допустим вообще другую взять Давайте 192 168 Ну я не знаю Давайте возьмем 10.0 слэш 24 то есть намного меньше сеть далее указываем то есть куда будет идти наш пакеты и допустим 101 по стандарту название что мы хотим создавать очень удобно пишем только тока Network inspect и звоните и вот Наша сеть то есть Таким образом мы создаем свои собственные сети хорошо Допустим мы насоздавали этих сетей очень большое количество создавали контейнеры и так далее и видим что

мы насоздавали этих сетей очень большое количество создавали контейнеры и так далее и видим что нам эти сети вообще не нужны абсолютно вот эти вот локальные такие маленькие сети как нам быть просто их можем удалить Для этого стоит только для этого и далее указать название сети либо также их один все они удалились нас этого больше ничего нет Все прекрасно Давайте теперь перейдем все же к анализу Как нам делать контейнер чтобы они правильно корректно все работали Итак давайте для этого возьмем

Как нам делать контейнер чтобы они правильно корректно все работали Итак давайте для этого возьмем определенные контейнер чтобы могли анализировать Почему нельзя взять потому что основа контейнеров это как можно маленький образ Он должен работать только с одной программой и я нашел два контейнера в которых уже есть предусмотрены все утилиты для анализа сети это не ту и второй это netshot Ну давайте будем использовать netshot так как не как здесь больше всего скачивание 50 плюс миллионов в этом

будем использовать netshot так как не как здесь больше всего скачивание 50 плюс миллионов в этом контейнеры 100 тысяч плюс Ну как бы оба они хороши и нам будет достаточно любого из них возьмем netshot если снизу посмотреть как они запускается то вот таким вот командами мы можем запускать наши контейнеры так если мы сделаем Просто только Run и наш контейнер сейчас [музыка] и ставим наш контейнер запустим наш контейнер Только бы у нас ничего интересного получится он работать не будет никакая

запустим наш контейнер Только бы у нас ничего интересного получится он работать не будет никакая программа Посмотрим это проверим ничего не работает вот он сразу же нам это не нужно хорошо и Давайте теперь все-таки запустим правильно Так давайте пишем докан далее Мы хотим его ударять при установке в лимуфт далее мы должны его запустить в intercti Mode чтобы сразу него войти и можно в нем работать было далее укажем ему имя чтобы не путались допустим контейна 1 Ну и теперь указываем наш контейнер

было далее укажем ему имя чтобы не путались допустим контейна 1 Ну и теперь указываем наш контейнер то есть наш Image который мы хотим использовать и команду которую хотим запустить при Когда мы подключимся это будет так надо быть внимательным видео Итак у нас контейнер который для анализа нашей сети есть мы идем команду IP мы посмотрим которые уже есть в контейнере и мы видим У нас есть 52 1702 тоже можно попробовать сделать допустим Google и мы видим что Пинг у нас также работает отлично для

тоже можно попробовать сделать допустим Google и мы видим что Пинг у нас также работает отлично для анализа сети между контейнерами нам хорошо бы использовать второй контейнер поэтому давайте сейчас я экран и чтобы нам было сразу видно так будет удобно и Давайте запустим второй контейнер будет использовать такую же команду как и до этого скопируем ее вставляем и давать немножко изменим что будет имя контейнер номер два так запускаем второй контейнер посмотрим какой адрес у нас есть у нас в

имя контейнер номер два так запускаем второй контейнер посмотрим какой адрес у нас есть у нас в конце тройка здесь у нас двойка Давайте посмотрим Сможем ли мы сделать с одного сервера на 2 Давайте попробуем здесь пишем и указываем IP адрес нашего сервера отлично пин-класс работает и можно сработает DNS то есть Можем ли мы сделать именно не по IP адресу а подключиться непосредственно к самому контейнеру сделать Пинг по его имени нас контейнер называется контейнер 2 посмотрим Нет к сожалению это

сделать Пинг по его имени нас контейнер называется контейнер 2 посмотрим Нет к сожалению это сделать не можем подключаться между контейнерами по их адресам это прекрасно Хорошо давайте еще проанализируем какой сети они находятся То есть вы допустим не знаете В какой сети находится какой-то контейнер Давайте с одного мы выйдем посмотрим контейнер у нас работают У нас есть один но как мы видим здесь не указывается нигде адрес Как нам этом случае [музыка] inspect и уже указываем имя контейнера

не указывается нигде адрес Как нам этом случае [музыка] inspect и уже указываем имя контейнера либо ID Ну возьмем контейнер хорошо Мы зашли на сам контейнер и Давайте здесь сразу видно у нас ip-адрес контейнера его Gateway и так далее То есть Так мы можем проанализировать В какой сети находится тот либо другой контейнер хорошо мы сейчас выяснили что у нас не работает привязка по DNS Как нам в этом случае быть мы можем создать свой собственную сеть и потом добавить туда контейнера либо еще проще

случае быть мы можем создать свой собственную сеть и потом добавить туда контейнера либо еще проще еще изначально создавать сеть а потом уже запускать контейнеры уже в нужной сети давайте сделаем сеть дока [музыка] и Давайте назовем май нет 01 хорошо она создала сеть можно проверить только [музыка] и Давайте запустим те же контейнеры только уже в этой сети Давайте возьмем наш контейнер имя контейнером у нас был контейнер один далее укажем минус net и далее указываем имя сети где мы хотим

контейнером у нас был контейнер один далее укажем минус net и далее указываем имя сети где мы хотим запустить его все запускаем минус Минус нет [музыка] отлично с контейнер работает посмотрим вот у нас видите уже не 17 здесь а уже 20 с 16 и здесь мы сделаем то же самое только контейнер 2 назовем это один контейнер 2 готово посмотрим все есть в одинаковой сети находимся попробуем сделать это работает также будет здесь тоже самое работать все есть а теперь сможем сделать пин и контейнер 2 и у нас

также будет здесь тоже самое работать все есть а теперь сможем сделать пин и контейнер 2 и у нас также это все работает вот так очень легко связать контейнеры что не нужно указывать Какой ip-адрес сейчас у кого-то контейнера есть просто запускаете ни о чем не думайте и все можно по имени к нему подключаться все хорошо это прекрасно работает что быть если мы запустили контейнеры они уже работают мы не хотим их там убивать как-то перебивать и так далее как на них переместить как бы в другую сеть

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

попробуем сделать нам нужно сейчас убить будет один контейнер ладно допустим он будет работать вот этот то как есть и вот вы видим наш контейнер 2 который мы запускали сверху что ж дальше пишем только Network Connect то есть мы хотим подключить к нашей сети которая у нас указывалась майонез 01 которая создана и мы хотим подключить контейнер 2 все посмотрим Дока у нас контейнер также работает по-прежнему посмотрим здесь IP адреса и мы видим что мы находимся в двух сетях кобыл Тоже неплохо но от

посмотрим здесь IP адреса и мы видим что мы находимся в двух сетях кобыл Тоже неплохо но от старости Мы хотим отключиться Давайте посмотрим если мы сделаем дока инспектор нашего контейнера то мы здесь увидим это вот новая сеть которую мы находимся вот 20 и сверху будет наша старая сеть то есть мы можем использовать именно вот для того чтобы отключиться от сети И мы здесь выше видим и вот вторая сеть типа ближе но у нее название есть майонез 01 что ж мы включимся от этой сети нам нужно для этого

типа ближе но у нее название есть майонез 01 что ж мы включимся от этой сети нам нужно для этого Network ID и пишем Давайте еще раз доктор PS и только Network is Connect мы а хотим отключиться от чего мы хотим отучиться тип сети верней АйТи в нашем случае будет Давайте уберем так и название контейнера прекрасно ошибок нет уже Хорошо посмотрим какие апятки сам нас теперь остались и у нас есть только один IP адрес Вот так мы можем передвигать контейнеры с одной сети в другую и при этом они

только один IP адрес Вот так мы можем передвигать контейнеры с одной сети в другую и при этом они остаются работать дальше Может в один контейнер мы можем получить ко многим сетям очень многим это очень удобно когда допустим у нас работает прокси сервер и у нас также есть много сетей много маленьких контейнеров там веб-серверов которые находятся за прокси и мы просто прокси получаем к каждому каждой сети Где работает маленький контейнер это повышает намного безопасность сами контейнеры между

сети Где работает маленький контейнер это повышает намного безопасность сами контейнеры между собой разговаривать не могут Ну естественно не могут через прокси выходить тем не менее могут непосредственно друг с другом работать Это намного лучше чем они находились просто в одной сети я думаю понятно Давайте посмотрим на схему которую мы видели У нас есть начально были контейнеры в сети по умолчанию где мы могли делать Пинг но у нас не было DNS не работал Здесь также мы Создали нашу одну сеть и

где мы могли делать Пинг но у нас не было DNS не работал Здесь также мы Создали нашу одну сеть и давайте сейчас создадим еще одну сеть и посмотрим Сможем ли мы между собой это все запускать Я думаю вы уже тогда что мы этого делать не сможем но тени дать это попробуем Давайте снова найду и сделаем майонез 2 то есть мы не собьем изначально некую сеть мы просто указываем в команде при запуске контейнера какую сеть Мы хотим поместить Наш новый контейнер создаст ли докер нам новую сеть нет увы это

какую сеть Мы хотим поместить Наш новый контейнер создаст ли докер нам новую сеть нет увы это так не работает у нас вышла ошибка Поэтому будем создавать дока Network Create и создадим вторую сеть все на сети создалась [музыка] У нас есть также типа Хорошо теперь Давайте возьмем снова нашу команду и запустим посмотрим адрес у нас другой Нет это не работает Это что доказывает то что стоит каждое приложение запускать в отдельно для него сети чтобы все приложения все контейнеры работали отдельно

приложение запускать в отдельно для него сети чтобы все приложения все контейнеры работали отдельно друг от друга это довольно-таки важно Ну и давайте для наглядности Просто запустим теперь контейнеры в разных сетях мы закончим сейчас тип Host и тип ноун то есть без сети посмотрим что будет выходим с этих контейнеров они удаляются сразу же Давайте посмотрим на сети есть Дока и запустим тип хост Давайте воспользоваться наши предыдущие командой минус типа хост Хорошо посмотрим что у нас есть и я

воспользоваться наши предыдущие командой минус типа хост Хорошо посмотрим что у нас есть и я вам сейчас покажу что такое вот как бы мы видим сейчас много интерфейса мы видим также интерфейс нашего Хоста мы сейчас находимся там есть как бы мы видим что у нас тоже самое если в контейнере все тоже самое У нас существует в контейнер вот ведь еще у нас показывается сети которые мы создавали наши кастомные сети были созданы контейнеры вот 17 по умолчанию вот Нет 02 наш который мы создавали и также мы

сети были созданы контейнеры вот 17 по умолчанию вот Нет 02 наш который мы создавали и также мы видим в этом контейне который мы запускали именно сетевую карточку самого Хоста Давайте запустим еще 2 контейнер также в сети host как бы есть и Давайте посмотрим что мы сможем сделать потому что у контейнера кабы нету своего IP адреса Он работает на Хосте то есть мы будем пинговать сам Сможем ли мы сделать Pink именно имени контейнера вот наше имя контейнер 2 увы это также не работает хорошо в

мы сделать Pink именно имени контейнера вот наше имя контейнер 2 увы это также не работает хорошо в принципе Хосте думает понятно это как запускать вы просто устанавливаете программу на сам хост это же работает так давайте убьем и Давайте запустим контейнер тип сети Посмотрим это мы здесь Сейчас сделаем проверяем ip-адреса и у нас есть только localhost второй контейнер запускать не буду потому что так понятно что Они между собой связаться никак не смогут Вот это три основные типа сетей которые

так понятно что Они между собой связаться никак не смогут Вот это три основные типа сетей которые есть в докере но также Мы помним что есть еще два типа сетей которые иногда используются особенно если мы хотим работать сетью У нас есть какие-то сетевые приложения Firewall им прокси то это будет наши сети по названием и Давайте что-то подобное с этого сделаем Так давайте создадим для начала сеть Итак пишем тоже самое [музыка] далее указан драйвер который мы хотим сделать будет 192 168 100.1

Итак пишем тоже самое [музыка] далее указан драйвер который мы хотим сделать будет 192 168 100.1 далее при создании сети вот этой сети создается как бы dcp-сервер то есть при запуске Докера докер контейнера у нас сразу же раздается контейнером какая-то какой-то ip-адрес именно с этой сети Вот но мы не хотим мы хотим конкретно указать какой IP адрес будет даваться одному контейнеру Допустим мы хотим сделать Firewall запустить В контейнере и мы хотим чтобы ему всегда присваивался один IP адрес

сделать Firewall запустить В контейнере и мы хотим чтобы ему всегда присваивался один IP адрес для этого стоит указать минус Минус это делать не обязательно Это я делаю лишь для того чтобы показать возможности этого всего что мы можем задать какой Range может даваться нашим контейнером это будет 192 168 100 и Давайте далее нам стоит указать с чем будет спаренная материнская сетевая карточка и Давайте посмотрим кино сетевые карты есть на сервере Какие названия и вот сама карточка И нс-18 то есть

посмотрим кино сетевые карты есть на сервере Какие названия и вот сама карточка И нс-18 то есть у нас будет Point int 18 и далее пишем название Наш стиль давайте так назовем май Мэг здесь просто стоит еще указать слэш 32 что только опирать только вот этот IP адрес все у нас все создалось Давайте посмотрим теперь можем Запустить видео у нас здесь ничего не изменилось поэтому посмотрим у нас только и вот у нас появился наша новая карточка прекрасно Давайте запустим контейнер который будет

только и вот у нас появился наша новая карточка прекрасно Давайте запустим контейнер который будет использовать эту сеть Так у нас вот наш контейнер и он будет запускаться [музыка] наши новости Хорошо давайте посмотрим IP адреса какой у меня какая будет ответ вот именно та сеть которая мы запустили здесь мы можем раздавать сети именно как угодно где угодно я сейчас задал просто какую-то сеть то есть допустим это домашний но Давайте все же сделаем именно Практическое использование этой сети я

есть допустим это домашний но Давайте все же сделаем именно Практическое использование этой сети я если посмотрю у нас IP адреса то на сервер находится в сети 10 10 194 Ну и я знаю что у меня 193 свободный IP адрес точно Давайте создадим на вторую сеть именно в этом диапазоне так Давайте немножко изменим нашу команду которая была у нас subnet будет 10 10 далее будет присваиваться 10 10 всё мы не можем запустить второй Mac vilan Давайте предыдущий удалим только Network ему нужно убить контейнер

можем запустить второй Mac vilan Давайте предыдущий удалим только Network ему нужно убить контейнер Видите сколько ошибок Сколько сразу же мы решаем проблем все хорошо и теперь запускаем заново Отлично все сработало наконец-то Дока Нет ну принципе это хорошо что мы видим сразу проблемы которые могут могут попадаться так и теперь мы запустим наш контейнер в нашей сети запускаем здесь IP А вот 193 и Давайте еще такую штуку сделаем запустим повышал и сделаем Пинг 10 10 193 у нас все работает Если

и Давайте еще такую штуку сделаем запустим повышал и сделаем Пинг 10 10 193 у нас все работает Если 4 сделаем также все будет работать вот как бы так это все просто настраивается хорошо Мы создали сеть и при указали что запускается контейнер в нашем сети именно с одним IP адресом то есть мы не сможем при 2 адрес 2 контейнер который должен автоматически получить IP адрес Давайте попробуем такую штуку еще сделать если мы укажем IP адрес именно сами давайте так вот наша команда и Давайте теперь

штуку еще сделать если мы укажем IP адрес именно сами давайте так вот наша команда и Давайте теперь укажем здесь еще минус Минус и мы указывали что 10 10 Давайте 213 допустим наш контейнер в нашей сети все смотрим все у нас работает все отлично то есть Таким образом мы можем раздавать и на IP адреса запускать контейнеры с конкретным IP адресом То есть у нас данный момент есть Наша сеть только Network LS У нас есть сеть my home LAN типа Mac villan и в этой сети У нас есть DHCP как бы сервер

Network LS У нас есть сеть my home LAN типа Mac villan и в этой сети У нас есть DHCP как бы сервер который раздает лишь один IP адрес если мы не указываем контейнеру конкретные IP адрес Но тоже Мы в этой сети можно пока другие контейнера который будет использовать именно нами указанные IP адреса вот принципе так это все работает тема Давайте не простая попробуйте понастраивайте как работает контейнер это будет еще очень интересно мы будем рассматривать до каком там будет более-менее я думаю

это будет еще очень интересно мы будем рассматривать до каком там будет более-менее я думаю понятно и логически это все сделано Все спасибо продолжаем мы переходим к самой интересной теме это как мы создадим свой собственный Дока контейнер Вернее только имидж Мы стоим только можно его закрутить либо на доках либо на свой репозиторий либо же сразу же непосредственно создать контейнер с нашего докаинач Нам нужно будет написать так называемый только файл данный Дока файл он содержит определенную

Нам нужно будет написать так называемый только файл данный Дока файл он содержит определенную информацию которую мы должны будем передать эта информация Какие пакеты Мы хотим запихнуть в наш Дока Image то есть в наш будущий контейнер потом Какая конфигурация должна быть какие файлы может быть что-то запускается это все Мы также опишем в инструкциях то есть что зачем В какой последовательности все должно находиться Но это все мы опишем именно в тока файле и Давайте посмотрим что собственно

все должно находиться Но это все мы опишем именно в тока файле и Давайте посмотрим что собственно представляет собой Дока файл расскажу это не так сложно не так тяжело как кажется на первый взгляд Итак только файл он содержит себе определенную информацию что у него входит это базовый образ либо Image и Давайте посмотрим как это будет выглядеть именно в докопали это описывается командой From то есть в данном случае мы берем базовый образ это будет Ubuntu 22 на 4 то здесь мы можем играть как

есть в данном случае мы берем базовый образ это будет Ubuntu 22 на 4 то здесь мы можем играть как угодно зависимость того что мы В итоге получить далее нам нужно описание образа это опция не обязательно это делать с помощью такой команды лейбл там мы можем указать что угодно любую информацию о нашем образе о нашем контейнере будущем далее Нам необходимо будет описать команды Это я с помощью команды Run об этой понятно и дальше зависимости от того какой у нас базовый образ мы соответственно

Run об этой понятно и дальше зависимости от того какой у нас базовый образ мы соответственно делаем какие-то команды либо те команды которые должны нам сделать нашу программу рабочую в то как контейнере то есть мы можем там допустим Если у вас программа разработчик Вы можете в нем сразу же скомпилировать что вы хотите То есть будет Run campile что-то еще Ну в общем это мы все разберем нужно указать либо можно указать рабочую директорию это указывает команда и далее указывается рабочей

указать либо можно указать рабочую директорию это указывает команда и далее указывается рабочей директория Мы также подроб Давайте разберем далее мы указываем файлы также можем указать это не обязательно но если там какие-то файлы необходимы для работы нашего приложения то стоит указать файлы то есть с помощью команды копии мы будем копировать файлы которые находятся у нас на локальной машине в наш Image Ну в данном случае мы копируем файл индекс HTML в рабочей территории то есть квартир Но это

Image Ну в данном случае мы копируем файл индекс HTML в рабочей территории то есть квартир Но это Мы также все Потом посмотрим все вам подробно покажу Это просто для примера что какие команды можно использовать в докопали Я говорю можно Потому что не все команды Они обязательно Все зависит от того что вы хотите создать далее команда для работы с файлами также скопировали какой-то скрипт и здесь мы можем его сделать [музыка] далее мы можем сказать переменные это перемены то есть при запуске мы

мы можем его сделать [музыка] далее мы можем сказать переменные это перемены то есть при запуске мы можем указать с помощью команды и какую-то инвайман переменную я рассматриваю это во втором видео Вот и здесь Мы также можем указать эти переменные По моему это будет переменные которые указывает по умолчанию которые впоследствии мы можем изменять то есть эти перемены если мы не указываем никакие переменные при запуске контейнера то будут применяться эти перемены Мы также можем указать порты если

при запуске контейнера то будут применяться эти перемены Мы также можем указать порты если у нас допустим приложение программа веб-сервер и для доступа к нашему приложению необходимо какие-то порты через которые на наши другие предложения подключается к нашему созданному контейнеру то мы также можем указать здесь порты но хочу сразу заметить что эта команда Это несет такой информационной контекст То есть она ничего особо не делает дополнительно не делал для образа это больше информационные и

То есть она ничего особо не делает дополнительно не делал для образа это больше информационные и далее нам стоит Описать как бы что должно происходить при запуске нашего контейнера то есть мы знаем что любой контейнер при его запуске Он выполняет какую-то команду если никакой процесс не работает в контейнере То есть он сразу же убивается и мы должны будем в конце описать Что должен делать наш контейнер при запуске это делается с помощью команды ng-point и 7D разница в этих командах я вам покажу

при запуске это делается с помощью команды ng-point и 7D разница в этих командах я вам покажу немножко позже и Давайте приступим к практике посмотрим как это работает что нам для этого надо и результат нас получится сразу скажу что у нас будет где-то порядка больше 10 контейнером мы создадим Ну давайте переходим на сервер и начнем создавать наши только файлы сначала папку где будем эти файлы создавать папку и чтобы начать писать рецепт как мы будем делать наши контейнер нам нужно создать файл

папку и чтобы начать писать рецепт как мы будем делать наши контейнер нам нужно создать файл тока файл для этого просто создаем Файлик под названием только файл хорошо и теперь его Давайте Будем изменять хочу сразу сказать что контейнеры не появляются просто так не из ничего они базируются все на каких-то имиджах на какие-то образах других контейнеров точно также какие мы устанавливаем Linux Мы берем ISO файл и запускаем его то есть уже там есть какой-то базис на который все настраивается Ну в

ISO файл и запускаем его то есть уже там есть какой-то базис на который все настраивается Ну в общем Итак Давайте возьмем наш базовый имидж командой From и будет это нас Ubuntu но если мы сделаем так то мы будем скачивать всегда именно я хочу же использовать конкретный тег использовать 04 мы будем все ставить 22 04 актуальная версия если мы сохраним такой файл и сделаем бильд то есть создадим Image наш то у нас ничего не произойдет так как у нас всего лишь будут скачан Ubuntu Image и Наш доктор

наш то у нас ничего не произойдет так как у нас всего лишь будут скачан Ubuntu Image и Наш доктор посмотрит А это точно такой же контейнер Мы хотим потом но ничего не получим выйти сразу же напишем команду которая будет выполняться при запуске нашего контейнер командой семьи и Давайте самое простое мы сделаем мы сделаем и укажем Hello My First только как бы все там сохраняем и выходим У нас есть Дока файл что мы с этим можем сделать нам необходимо сделать бильд пишем Дока бильд Где находится

Дока файл что мы с этим можем сделать нам необходимо сделать бильд пишем Дока бильд Где находится наш Дока файл в этой территории Где мы находимся и нажимаем Это все что происходит у нас Step один из двух У нас две команды У нас есть команда From и у нас идет скачивание базового образа 22 на 4 потом у нас есть степ 2 то есть шаг 2 это будет команда Давайте посмотрим какие есть Какие образы сейчас есть и у нас есть один пункт 224 это наш базовый имидж и у нас есть наш имидж который Мы создали Да

есть и у нас есть один пункт 224 это наш базовый имидж и у нас есть наш имидж который Мы создали Да он выглядит не очень красиво это можно исправить это нужно исправлять потому что в итоге получится у вас очень много имиджей которые имеют такое название но у нас только один Если вы же так создали это все это можно все исправить Для этого необходимо написать дохом так то есть мы хотим изменить далее стоит указать SOS то есть Какой имидж мы хотим изменить у нас здесь Нон Нон поэтому можем взять

стоит указать SOS то есть Какой имидж мы хотим изменить у нас здесь Нон Нон поэтому можем взять один идентификатор как бы нашего имиджа и далее указать Какое имя Мы хотим иметь Давайте назовем май Дока мои только 01 Хотя это у нас будет первая версия поэтому так называем версия 01 все теперь давайте посмотрим вот наш мая только версия 01 Давайте все же запустим наш и посмотрим что будет пишем Дока минус Минус Я хочу сделать так чтобы мой запускался то есть стартовал и потом если я его сразу

Дока минус Минус Я хочу сделать так чтобы мой запускался то есть стартовал и потом если я его сразу убивался чтобы не заморачиваться его потом вручную удалять и далее указываем Давайте еще указывать Какое имя нашего контейнером Давайте будет так и Дали указываем наш имидж май Дока и версии 01 запускаем и Как видим у нас сделать команда Hello my First doca ошибка сделать Ну ладно не столь важно что мы можем сделать нашим образом мы можем посмотреть что в нем внутри допустим вы где-то скачали

что мы можем сделать нашим образом мы можем посмотреть что в нем внутри допустим вы где-то скачали один имидж который запустить новые статьи что у него три что он делает и чтобы наверняка быть уверенным что его можно запускать мы можем проанализировать это делается просто Дока и мышь мы будем работать и указываем либо один либо имя в контейнером и также версии 0 и посмотрим что как создавался этот им еще что он делает собой вот здесь указаны все команды которые выполняются при выполнялись при

им еще что он делает собой вот здесь указаны все команды которые выполняются при выполнялись при создании контейнер который будет выполняться и переменные которые можно использовать также потом еще посмотрим как будет отображаться порты и так далее Итак первое что мы можем увидеть команда при запуске 7t Это нулевой наш образ который мы использовать далее тот и мыть который Мы создали у нас выполняется команда потом команда Эхо и наш Low My First Talk Давайте все-таки исправим это имя и создадим

команда потом команда Эхо и наш Low My First Talk Давайте все-таки исправим это имя и создадим новый контейнер Давайте предыдущий удалим и удаляем только Все мы удалили наш и матч и Давайте создадим новый нас есть также только файл Давайте его изменим и сохраняем далее сделаем команду но не просто не так как мы в предыдущий раз это запускали Дока бильд и прошлый раз у нас простоял точка то есть мы создавали здесь делали бильд с нашего doca-файла но мы не указали ничего больше то есть он

есть мы создавали здесь делали бильд с нашего doca-файла но мы не указали ничего больше то есть он создавался и у нас получалось У нас без имени Вот давайте сверху посмотрим нас вот такой вот получилось Ну это не очень удобно потому что нужно потом изменять имя и так далее мы можем сразу же задать имя которое мы хотим это будет минус это то есть так и давайте укажем это у нас будет май имидж версии 01 и здесь все у нас получился новый имидж Давайте посмотрим и вот у нас есть наш новый имидж май

01 и здесь все у нас получился новый имидж Давайте посмотрим и вот у нас есть наш новый имидж май имидж версии 01 хорошо получится только давайте предыдущих команда воспользуется только нужно будет изменить все с тегом на версии 01 запускаем и у нас получается Hello my filestock все у нас контейнер становится потому что команда выполняется их и контейнер убивается потому что мы указали минус Минус также мы можем запустить нашу команду в interactive Mode что в этом случае получится Давайте

Минус также мы можем запустить нашу команду в interactive Mode что в этом случае получится Давайте попробуем интерактив мод и запустим команду bin все как бы мы находимся в контейнере внутри как бы ничего не происходит никакая команда не выполняется просто мы запустили но мы сделали команду симки Давайте еще раз посмотрим только файл Вот это команда которая указывает Что происходит при запуске контейнера с нашего имиджа но также есть еще одна команда которая называется Давайте изменим семьи

контейнера с нашего имиджа но также есть еще одна команда которая называется Давайте изменим семьи сохраняем делаем [музыка] только вторую все у нас Получилось Только images и у нас есть версия 2 вот на самом деле Вот здесь написано 77 мегабайт занимает карта образ но он занимает намного меньше потому что он базируется на предыдущих они практически одинаково Вот Ну давайте запустим теперь версию 2 только Run и уже на мне вот эту команду используем версии только 2 все как бы происходит все тоже

2 только Run и уже на мне вот эту команду используем версии только 2 все как бы происходит все тоже самое что как бы разница Давайте будем разбираться перед этим еще делаю Одно замечание мы писали мы написали команду как мы пишем Linux и должен выдаваться нам результат но Правильнее будет писать если мы сделаем в формате то есть мы также открываем квадратные скобки далее делаем кавычки пишем запятая и закрываем кавычки что в данном случае происходит Мы сделали эту же самую команду только

запятая и закрываем кавычки что в данном случае происходит Мы сделали эту же самую команду только разделили это все на команду и параметр давайте это уберем вот так будет написание такое написание будет правильно сохраняем выходим и Давайте снова сделаем бильд проверим работает ли всем только [музыка] версии хорошо запускаем только у нас работает по-прежнему Итак давайте теперь все же перейдем к командам семьи и команда здесь семьи контейнер Мы заходили в и так далее если мы попробуем запустить

семьи и команда здесь семьи контейнер Мы заходили в и так далее если мы попробуем запустить команду попробуем это сделать только у нас был второй контейнер так только запустим это все минус видите у нас здесь ничего не произошло то есть когда мы запускали Наш третий то первый не контейнер и указывали бинбаш мы могли подключиться к нашему контейнеру напрямую Если же мы указывали Эндрю Поинт мы не сможем ничего сделать это вот команда именно это симби команда которую мы передавали наша Эхо не

не сможем ничего сделать это вот команда именно это симби команда которую мы передавали наша Эхо не выполнялся А наша команда это выполнять то есть мы перезаписывали нашу команду Echo вот этим дело если мы запустим 3 Image который мы делали и также попробуем зайти дальше у нас все получится мы зайдем потому что мы перезаписываем в командной строке здесь нашу команду но также можно использовать параллельно две команды Когда это все происходит Давайте изменим наш будет [музыка] Мы перед ним

параллельно две команды Когда это все происходит Давайте изменим наш будет [музыка] Мы перед ним команду допустим а семьи это то что мы можем перезаписать будет передавать всего лишь значение по умолчанию это будет hellomofirst daha Давайте попробуем это запустить что получится Я хочу сразу сказать что это симки и интрипоинт это наверное самое сложное из всего Дока файла две команды чем у них разница как их правильно использовать вот это вот наверно самый сейчас это все разберем и потом все

разница как их правильно использовать вот это вот наверно самый сейчас это все разберем и потом все пойдет как по маслу и так делаем новый бинт только у нас будет уже версия 4 готово Давайте попробуем запустить [музыка] обычный формате версия 4 все у нас отображается но если мы запустим тоже самое но укажем допустим то нам отобрать Hello ровный почему такое происходит Снова вернемся в Toca файл у нас enterpoint это фиксированная команда то есть мы это Изменять не можем а семьи это то что мы

у нас enterpoint это фиксированная команда то есть мы это Изменять не можем а семьи это то что мы можем изменять То есть если мы здесь написали список каких-то команд они выполнялись бы постоянно без изменений осинки мы могли изменять то есть здесь бы допустим стоял там Эхо бла бла там потом с ног а чего-то и так далее а в семье стояла reboot допустим перезагрузить или что-то еще подобного рода то мы вот именно этот команду или что-то другое мы могли записать а то Что находилось мы перезаписать

мы вот именно этот команду или что-то другое мы могли записать а то Что находилось мы перезаписать никак бы не смогли это неизменяемая команды семьи это команды изменяемые это стоит запомнить и понять Итак переходим дальше следующая штука которую хотел вам показать это то есть какая-то информация которую мы можем передавать нашему именю и допустим люди когда скачивать наш перезапуском Кто автор что этот и так далее Давайте сначала изменим что симки вернем наш предыдущий так готово и пишем лейбл

этот и так далее Давайте сначала изменим что симки вернем наш предыдущий так готово и пишем лейбл что мы в лейбл можем все что угодно Давайте сделаем следующее ауто автор У меня даже следующий лейбл можем создать Ну допустим это будет на Skype какой у нас тип это у нас будет демо следующий лейблом Давайте будет платформа это будет нас YouTube все готово делаем все опускается у нас здесь уже Степан немножко побольше стал здесь у нас было 101 From команда лейбл добавился потом еще один лейбл еще

немножко побольше стал здесь у нас было 101 From команда лейбл добавился потом еще один лейбл еще один лейбл потом команда и так далее Давайте запустим контейнер только рано и у нас контейнер версии 5 имичу вернее версии 5 как все работает без изменений Но эти лейблы когда мы их сможем увидеть это когда мы делаем инспектор только Image Давайте посмотрим есть сейчас и меньше у нас много ими же дамой Image бла бла бунту проанализировать этот имидж версии 05 Итак давайте сделаем только имидж спект

Image бла бла бунту проанализировать этот имидж версии 05 Итак давайте сделаем только имидж спект р версии 05 и далее посмотрим Поднимать немножко выше и видел здесь такие лейблс вот те лейблы которые мы создавали как бы все та информация которую мы хотим передать нашему контейнеру либо вернее имиджу Да здесь это все можем Давайте немножко изменим наш Дока имидж Вернее только файл и установим в наш будущий контейнер Engine X8 делать веб-сервер изменяем только файл Давайте уберем лейблы нам они

будущий контейнер Engine X8 делать веб-сервер изменяем только файл Давайте уберем лейблы нам они столько нам не нужно Синди также мы оставим и команд который мы изучим это будет команда Run то есть что там будем запускать и мы знаем что бунту чтобы что-то установить нужно сделать апдейт если мы просто укажем то у нас будет маленькая ошибка но все будет работать но будет небольшая поэтому используя и следующие команда мы делаем что-то и это будет но мы знаем что при установке любого другого

и следующие команда мы делаем что-то и это будет но мы знаем что при установке любого другого пакета иногда зачастую нам нужно подтвердить то что хотим это установить чтобы этого не происходило мы указываем соглашение на установку [музыка] докара бильд шестая версия все идет установка в ней обновления репозиторий и сейчас будет идти установка так Install нужно правильно написать Давайте снова сделаем бильд все идет установка хорошо мы установили ngx и так далее прекрасно все работает Давайте

бильд все идет установка хорошо мы установили ngx и так далее прекрасно все работает Давайте запустим наш контейнер Давайте посмотрим Вот наши образы видите у нас уже сайт изменится 170 не 77 87 установили что-то в него и довольно таки получилось много 100 Мега Пусть наш версию 6 и версия 6 То есть то что мы установили в него что будет а будет холодно все тоже самое происходит потому что нужно Изменить команду 7D и давайте это сделаем Дока файл Итак команда семьи чтобы запустить Engine X нам

Изменить команду 7D и давайте это сделаем Дока файл Итак команда семьи чтобы запустить Engine X нам нужно воспользоваться как бы команды которая преднаписана инженексом для запуска В контейнере это будет Engine X далее параметр минус G следующий параметр Все делается с запятой из кавычками of точка запятой все так сохраняем и выходим и делаем снова бильд Давайте назовем мои X и версии у нас будет большой мы сделать можем маленький готова давайте перезапустим это [музыка] и Как видим у нас как

большой мы сделать можем маленький готова давайте перезапустим это [музыка] и Как видим у нас как бы не особо ничего не происходит давайте запустим это контейнер в 2000 то есть background что произойдет как бы посмотрим [музыка] все контейнер работает Если до предыдущей нас останавливать потому что они команду свою Эхо сделали и все то здесь же контейнер продолжает работать и вот наш контейнер работает как бы ничего Давайте подключимся контейнеры посмотрим что в нем работает [музыка] и у нас

работает как бы ничего Давайте подключимся контейнеры посмотрим что в нем работает [музыка] и у нас есть прикольно все он работает именно в контейнер Все работает но мы никак не сможет подключиться к нашему Давайте попробуем это сделать [музыка] видим на спорт 80 Нет мы никак не сможем Достучаться к нашим контейнерам Давайте наш контейнер убьем докатки с пишем только стоп и это будет моя Только мы ему давали имя все он остановится и убивать потому что мы используем параметр Давайте запустим

мы ему давали имя все он остановится и убивать потому что мы используем параметр Давайте запустим нашу предыдущую команду только 80 80 Да и запускаем наш контейнер Image X и пробрасываем порты посмотрим что будет хорошо что проверим какие у нас открыты либо сделаем такую штуку [музыка] и даже Мы видим что у нас порты контейнер уже пробрасывается проверим сервер [музыка] и у нас порт 80 если мы сделаем и localhost то мы получаем ответ от нашего веб-сервера Ну давай для наглядности чтобы это было

и localhost то мы получаем ответ от нашего веб-сервера Ну давай для наглядности чтобы это было лучше видно Посмотрим какая у нас API адрес нашего сервера 1094 это скопируем и вставим просто в браузер и все у нас есть Welcome to Engine X Все мы подключиться к нашему контейнеру очень здорово прекрасно все работает но Есть еще такая вещь вот допустим мы взяли контейнер и мы какой-нибудь да но мы не Знаки порты в нем есть документация практически нет ничего вот ну какая-то минимальная есть мы знаем

порты в нем есть документация практически нет ничего вот ну какая-то минимальная есть мы знаем что контейнер какая-то работает и чтобы нам дать знать другим людям Какие порты стоит открывать для работы мы можем воспользоваться команда xpose Давайте ставим этого этот контейнер только [музыка] и изменим наш только добавим такой параметр как xpose и укажем порт 80 то есть мы можем указать порт в офисе просто мы можем указать допустим tcp сказать что только протокола tcp будет работать либо также

просто мы можем указать допустим tcp сказать что только протокола tcp будет работать либо также сделать 443 порт но здесь мы укажем киси Давайте вот так вот запустим создадим наш и матч новый сохраняем выходим далее Engine X и у нас версия 2 то есть тема указан xpose и Давайте проанализируем наш Image сделаем первый анализ 1 и меньше это будет Дока имидж который первым создавали без спрос версия 01 посмотрим что здесь есть всякие команды которые мы запускали нас также лейблы есть команда

01 посмотрим что здесь есть всякие команды которые мы запускали нас также лейблы есть команда которую мы запускаем вся информация которую используют ищем наш экспус и вот xpos мы указали два порта 443 tcp и 80p получился что ж Давайте запустим наш контейнер без указания портмопенга тока ран и сделаем версию вторую бесплатную сказали посмотрим докас и видим что у нас оказывается порты 2 порта которые есть в xpose то мы можем сделать также установить этот контейнер запустить в спорт мейпингом то

есть в xpose то мы можем сделать также установить этот контейнер запустить в спорт мейпингом то есть перебросить порты Ну как бы хорошо Да у нас есть уже к тому же информация это все будет даже рабы Как из первой версии Ну давайте сделаем немножко другую вещь контейнер только запустим его параметром но не маленькая а большая всё посмотрим то капец и мы видим что порты старшего сервера перебросились автоматически в контейнер но перебросили они не 88 как мы указывали а какой-то Рандомный порт

автоматически в контейнер но перебросили они не 88 как мы указывали а какой-то Рандомный порт перебрасывается в контейнер Это я забыл сказать когда мы изучали порт mapping но сейчас вы это видите параметры минус PE больше проверим как это все работает Можем ли мы Достучаться к нашему порт Давайте проверим без порта как бы все грузится ничего не происходит ничего не происходит Давайте изменим теперь и все работает все по-прежнему то есть мы можем делать и так и так если для тестирования то можно

и все работает все по-прежнему то есть мы можем делать и так и так если для тестирования то можно использовать минус том что будет указываться какой-то порт и Давайте вам покажу как установить Как создается только имидж для установки запуска создадим новый только файл Давайте апача скопируем наш докафа чтобы заново все не писать папку опять же заходим папку печи и редактируем только в нас также From остается лейбл нам без разницы Мы также делаем апдейт и устанавливаем только они же X Apache

From остается лейбл нам без разницы Мы также делаем апдейт и устанавливаем только они же X Apache Apache [музыка] сэкономим время X по смыслом так порт 80 и самое интересное самое важное но если мы будем делать команду ничего не произойдет будет ошибка Поэтому нужно Изменить команду для запуска пишем далее используется минус D и параметр сохраняем выходим снова X Давайте тут будет тебя получше версии 01 все готово установка апача также можем если эти вы используете с каким-то модулем и так

версии 01 все готово установка апача также можем если эти вы используете с каким-то модулем и так далее Это все можно закинуть в ран запустить установить модули запустить их добавить и так далее но Давайте запустим теперь наш имидж только посмотрим и тут будет нас Майя версия 01 Давайте пробросим все-таки чтобы было удобнее порты 80 80 тоже самое еще одна вещь посмотрим работает у нас контейнером работает [музыка] Иначе мы даем одинаковое имя только Хорошо давайте эту команду а патч Все

работает [музыка] Иначе мы даем одинаковое имя только Хорошо давайте эту команду а патч Все работает проверяем Дока и с все у нас все работает порты проброшены Ну и Давайте обновим страницу теперь нам не нужно указывать какой порт все у нас работает патч на ubunt всем кому прикольно Все работает хорошо Но мы сейчас запустили мы запустили печь у них были стандартные сайты Да отображаются информационный что это все работает все прекрасно но мы хотим отобразить наш собственный сайт как это сделать

что это все работает все прекрасно но мы хотим отобразить наш собственный сайт как это сделать Да мы изучали Volume как это монтировать Давайте запустим свой лимон Давайте ставим наш патч вернемся все-таки нашему стандартному Дока файлом и Давайте посмотрим наши только имейте Да у нас есть но мы хотим отобразить наш сайт поэтому еще одну папочку наши файлы наши программные файлы файлс и создадим наш сайтик маленький я скопирую предыдущую заготовку индекс точка HTML стандартный сайтик и

наш сайтик маленький я скопирую предыдущую заготовку индекс точка HTML стандартный сайтик и скопируем содержимое это обычная HTML файл ничего большого в нем нет так сохраняем выходим и Давайте все-таки запустим наш контейнер только так мы только порты 88 у нас будет 3 который мы создавали и далее нам нужно смонтировать наш нашу папку файл в рабочую директорию Где находится по умолчанию файлы для запуска веб-сервера и нам нужно указать Где находится наш файл индекс указываем на севере Root

для запуска веб-сервера и нам нужно указать Где находится наш файл индекс указываем на севере Root директория и fats и это мы будем монтировать в директорию именно в контейнере слэш вам запускаем версии 3 Хорошо давайте посмотрим в браузере либо сделаем Да как бы отображается то что мы вводили Ну давайте для наглядности посмотрим еще здесь обновляем и видим Вот наши заготовочка Хорошо как бы все работает но как сделать так чтобы у нас при запуске контейнеры наши содержимое появлялось независимо

но как сделать так чтобы у нас при запуске контейнеры наши содержимое появлялось независимо от того если у нас файл индекс HTML который мы запускали либо нету у нас всегда это было в контейнер находилась и с помощью команды посмотрим оставим наши контейнер наш Давайте немножко уменьшим нам не нужно [музыка] что мы хотим скопировать у нас наш Файлик находится в директору вот наш Дока файл а наш индекс HTML находится файл поэтому изменяем пишем копим И указываем откуда мы будем копировать файл

индекс HTML находится файл поэтому изменяем пишем копим И указываем откуда мы будем копировать файл это территория файлс и далее индекс HTML так и куда мы будем это копировать рабочей территории все также вам и в конце обязательно еще слэш нужно указать мы будем копировать это все в директорию сохраняем выходим делаем только и это будет мой индекс четвертой версии то есть нашим файликом внутри Хорошо Давайте попробуем запустить но нам уже монтировать мы ничего не будем параметры и также

Хорошо Давайте попробуем запустить но нам уже монтировать мы ничего не будем параметры и также запустили проверяем все это у нас работает все у нас то же самое вот обновляем ничего мы не монтировали но у нас сайт уже есть в нашем имидже при запуске Дока контейнера с нашего имиджа мы получаем уже статические данные которые есть в этом имидже Давайте зайдем на контейнер посмотрим как это выглядит в этой территории в которой мы копировали это все так Майн только [музыка] и посмотрим и Обратите

в этой территории в которой мы копировали это все так Майн только [музыка] и посмотрим и Обратите внимание у нас есть индекс HTML и индекс это то что по умолчанию запускается если у вас нет другого индекса это вот то что мы создавали сейчас скопировали в контейнер А этот Файлик он устроиться автоматически при установке тоже самое происходит с Апачи То есть это по умолчанию в индекс но давайте сейчас выйдем еще раз контейнера я вам еще одну штуку покажу вот мы заходим в контейнер и мы

сейчас выйдем еще раз контейнера я вам еще одну штуку покажу вот мы заходим в контейнер и мы автоматически при контейнеров вы автоматически директорию здесь автоматически Терри мы находимся в директории слеш ну Наша Рабочая директория она и на та директора где находились наши файлы вот индекс HTML То есть это директория в HTML там хранится наши файлы наши данные и так далее мы хотим изменить чтобы при заходе в на контейнер но в принципе дали в директорию давайте это сделаем изменяем снова

чтобы при заходе в на контейнер но в принципе дали в директорию давайте это сделаем изменяем снова рабочий директория и наши рабочие территория будет Вот это хорошо давайте создадим снова контейнер не сделаем смотрим контейнер Давайте посмотрим до капец Давайте его убьем только Стоп У нас не второй контейнер с портами 80 поэтому предыдущему объем чтобы это все красиво работала и мы не путались так версии 5 и Давайте снова сделаем только зайдем в контейнер и видим когда мы попадаем мы пытаемся

версии 5 и Давайте снова сделаем только зайдем в контейнер и видим когда мы попадаем мы пытаемся посмотрим содержимое То есть как бы то же самое Нам нужен куда переходить Это хорошо когда вы работаете У вас есть Рабочая территория и ваше приложение и вы хотите поставить это приложение и также очень удобно тогда копировать файлы именно в рабочей директорию То есть вы указали один раз рабочий директорию и вы можете удобно копировать туда файлы либо содержимое Давайте я Вам сейчас покажу как

директорию и вы можете удобно копировать туда файлы либо содержимое Давайте я Вам сейчас покажу как выходим с контейнером изменяем снова только давайте оставим контейнер первую очередь так и изменим то как чтобы потом мы не забыли Это сделать здесь мы копируем файл индекс HTML в директорию но и выше мы указали рабочий директор то есть та которая по умолчанию и чтобы нам потом не писали Это всего мы просто будем все копировать в рабочей директорию то есть мы заходим сразу же на контейнер там в

мы просто будем все копировать в рабочей директорию то есть мы заходим сразу же на контейнер там в эту рабочую директорию и файл соответственно будет точка Это вот эта директория все будет отталкиваться от этого Либо нужно писать слэш бла бла как мы до этого делали указать просто точку Давайте попробуем что у нас получится 6 уже Хорошо давайте запустим [музыка] версия 6 Все работает и Давайте только директорию и у нас также находится индекс нету Все работает все прекрасно Это упрощает много

только директорию и у нас также находится индекс нету Все работает все прекрасно Это упрощает много файлов с разных директорий в одно место либо отталкиваться от работы далее следующий параметр это переменные это наверное очень важный параметры Если вы хотите сделать гибкие ваши контейнеры Давайте добавим invayments на что к файл так мы им только файл и добавляем параметры invaмент давайте это здесь и добавим и далее нужно добавить любые переменные Давайте будет я укажем далее Пускай у нас

здесь и добавим и далее нужно добавить любые переменные Давайте будет я укажем далее Пускай у нас будет следующая переменная Давайте будет это у нас будет хорошо сохраняем выходим и делаем новый [музыка] команду Это будет Давайте НД и версии 1 проверяем [музыка] о насколько имидж создал это но у нас нас интересует вот этот посмотрим до капец работали у нас контейнер работает остановим его Дока стоп мои током и Давайте запустим наш инвалид только [музыка] имя порт и здесь будет версия 1 Все

стоп мои током и Давайте запустим наш инвалид только [музыка] имя порт и здесь будет версия 1 Все работает и что собственно происходит с этими переменными наш контейнер он предыдущий так и этот они одинаковые Но есть одно отличие если мы снова затем контейнер дока Бин то же директорию здесь по работе ничего не изменилось но если не сделал команду которая есть на В контейнере то мы заметим что у нас добрались и наша Type Вот наши две переменные которые есть на сервере эти переменные можно

у нас добрались и наша Type Вот наши две переменные которые есть на сервере эти переменные можно использовать в программировании то есть при создании программы могут использовать переменные самой системы и даже эти переменные мы можем использовать при создании конфигурации файла при создании других файлов давайте сейчас это все проверим и посмотрим как это работает Давайте выйдем и вот мы запускаем наш контейнер Давайте его теперь оставим только Хотя принципе можно не оставлять мы просто не

наш контейнер Давайте его теперь оставим только Хотя принципе можно не оставлять мы просто не будем порты только [музыка] наш контейнер чтобы не было конфликтов 2 и далее мы можем указать переменные ну скажем тип изменим Давайте тип у нас будет равняется 1235 наверняка Давайте снова сделаем дока язык зайдем на наш контейнер только 2 вот мы запускали имя второе нашего контейнером него заходим и посмотрим перемены она остался предыдущим а Type у нас изменился Вот то есть Таким образом мы можем с

перемены она остался предыдущим а Type у нас изменился Вот то есть Таким образом мы можем с помощью командной строки когда мы запускаем создаем контейнер с имиджа мы можем изменять наши переменные Но если у нас перемен никаких не указано давайте сделаем анализ нашего имиджа током проанализируем наш имидж только мы здесь должны увидеть наши переменная и вот наша переменная Овна и Type но это не значит что только можно использовать переменный Уно Это Давайте запустим еще один контейнер и укажем

что только можно использовать переменный Уно Это Давайте запустим еще один контейнер и укажем какую-то переменную которая мы не указали в нашем так наша команда запускаем третий контейнер и указываем здесь Ну давайте tmp Темп 12345 вот так вот у нас здесь будет просто тест вот так вот запустим Хорошо давайте подключимся к нашему контейнеру третий контейнер хорошо и посмотрим остался нас Темп появился и Type Demo такой как мы указывали вдоха имидже но у нас добавился еще одна переменная все

появился и Type Demo такой как мы указывали вдоха имидже но у нас добавился еще одна переменная все хорошо поэтому Хочу указать на то что те перемены которые мы указываем в тока файле это как значение по умолчанию и эти значения Мы также можем использовать допустим попробуем сделаем посмотрим что получится Давайте скопируем [музыка] Наш новый Дока файл берем много чего ненужного чтобы нам не перезагружать взгляд так принципе Итак у нас будет также From Ubuntu Dash указом ninet пускай будет он

взгляд так принципе Итак у нас будет также From Ubuntu Dash указом ninet пускай будет он также укажем [музыка] далее кино команду то есть мы хотим что-то запустить это будет далее доллар и закидываем это в папку папку Файлик территорию Давайте пускай будет а команда симки мы покажем Что находится в этом файле и содержимое этого с такой выходим Давайте остановим наш контейнер который мы запустили много только с только стоп мои только мой Дока 2 и 3 контейнер хорошо мы изменили наш Дока файл

много только с только стоп мои только мой Дока 2 и 3 контейнер хорошо мы изменили наш Дока файл Давайте посмотрим еще раз Все работает сделан дока бильд Только бы тоже самое только версии Ну давайте будет 2 и запустим его дока Так давайте нам попроще надо запустить detach Mode нам не нужно нам нужно чтобы мы отобразили Наш содержим наши файла имя будет такая перемена дополнительную мы не хотим указывать версию 2 так вот такая команда у нас будет получается и мы видим ровно то есть мы отобразили

версию 2 так вот такая команда у нас будет получается и мы видим ровно то есть мы отобразили именно то что хотели Вот мы закинули в файл опт инфо мы закинули содержимое перемены уна и нас овна Chrome Nero и мы командой это содержимое отображает Ну и Допустим мы хотим при запуске контейнера изменить очень просто пишем равняется или какой-нибудь и запускаем Как видим у нас ничего не изменилось мы запустим допустим нас не запустится наша команда посмотрим [музыка] [музыка] то Освенцим то есть

мы запустим допустим нас не запустится наша команда посмотрим [музыка] [музыка] то Освенцим то есть команда которая выдает информацию Вот запись в этот файл происходит раньше чем мы Передаем переменную То есть это переменная она уже происходит после того когда мы заполнили выполнили команду Run это нужно учитывать но как нам сделать реально динамические файлы где мы сможем передавать переменную именно в командной строке изменять Давайте вернемся к нашему сайту веб страничке которая обычная и

именно в командной строке изменять Давайте вернемся к нашему сайту веб страничке которая обычная и тем некоторые изменения выходим нашего контейнера не работают хорошо и Давайте вернемся в историю файл вот наш индекс HTML и Давайте изменим режим Так у нас здесь стоит давайте это изменим на директорию переменную сделаем такую как метку обычно делаю метки с помощью процент процент скажем Уно а вместо Demo тоже Давайте будем указывать какую-то переменную процент А здесь будет у нас Type так будет

Demo тоже Давайте будем указывать какую-то переменную процент А здесь будет у нас Type так будет достаточно сохраняем файл чтобы нам изменять наши параметры которые мы изменили вот [музыка] два значения чтобы они принимали значения наших переменных то есть сюда будет наноситься переменная Уно А здесь будет переменная тайп заносится для удобства зачастую используется скрипты Давайте создадим и точка Вот с таким содержимым но при запуске скрипта что происходит Мы идем в директорию в HTML Index

Вот с таким содержимым но при запуске скрипта что происходит Мы идем в директорию в HTML Index HTML ищем значение процент Уно процент и заменяем его на системное значение переменной on то есть в этом файле мы ищем слово вот это вот с процентами и заменяем переменной которая системно доллар и потом мы выведем что запускается скрипт Давайте принципе так запустим наш наш посмотрим что будет у нас в контейнеры не в докопали когда мы запускаем у нас стоит Давайте сразу покажу что у нас есть докафа

контейнеры не в докопали когда мы запускаем у нас стоит Давайте сразу покажу что у нас есть докафа вот у нас есть команда и запускается нам либо запускать скрипт с помощью Либо мы можем все делать запускать этот скрипт поэтому эту команду мы можем просто напросто перенести в самом файлс скрипт и сделаем эту команду здесь Но нужно Конечно ее подправить чтобы она к будет запускаться в линуксе под Linux вот команда готова и Давайте теперь изменим немножечко наш Дока файл чтобы это все конкретно

Linux вот команда готова и Давайте теперь изменим немножечко наш Дока файл чтобы это все конкретно запускалась работалось так мы копируем с директории мы копируем далее нам нужно скопировать скрипт файлс копируем далее Давайте его не будем копировать рабочую территорию папку опт далее У нас скрипт не запускаемый мы хотим сделать чтобы он запускался мы могли его запустить поэтому наш скрипт и изменяем команду симки команда семьи теперь будет видеть намного проще всего лишь мы запускаем скрипт

команду симки команда семьи теперь будет видеть намного проще всего лишь мы запускаем скрипт готово выходим делаем пускай будет имидж X теперь версии у нас седьмой у нас почти окончательно готово Давайте запустим только седьмой версии Потом посмотрим работает и Давайте посмотрим что у нас отображается Как видим у нас Ромео только тему Хорошо это как бы работает то есть мы можем сказать что наш индекс он динамический то есть переменным можно передавать Ну это такая Давайте все же мы допустим

индекс он динамический то есть переменным можно передавать Ну это такая Давайте все же мы допустим контейнер только два теперь перебросим порт 81 на виртуальной машине порт 80 допустим наш Image но теперь мы изменим переменную нас перемена она и у нас теперь будет били и запускаем хорошо давайте перейдем браузер на порт 81 и мы видим что у нас изменяется Таким образом мы можем Изменять не только какие-то там значения веб-браузер мы можем также изменять конфигурации файлов в общем делать все что

там значения веб-браузер мы можем также изменять конфигурации файлов в общем делать все что угодно все что угодно с таким простым скриптом выглядит вот таким образом [музыка] карту файл скрипт вот эти вот вещи они чудеса брики на заметку таким образом наш большой Дока файл посмотрим Дока файл логин практически все используется что можно Ну давайте так для наглядности мы еще запустим сделаем парочку Дока файлов которые не связаны с Ubuntu А мы возьмем за основу немножко другие контейнеры

парочку Дока файлов которые не связаны с Ubuntu А мы возьмем за основу немножко другие контейнеры допустим вы разработчик PHP И хотите сделать контейнер в котором работает PHP поэтому давайте мы снова создадим новую папку [музыка] и создадим и Давайте Будем изменять Итак Первая команда мы знаем это будет это будет очень поэтому стоит пойти в браузер перейти на и указать PP контейнер То есть у нас нет в PHP здесь нет никакого приложения рабочего но вся основа для работы PHP там есть если мы

нас нет в PHP здесь нет никакого приложения рабочего но вся основа для работы PHP там есть если мы перейдем по тегам мы здесь увидим очень много тегов до которые можно запускать что хочу сделать Я хочу сделать чтобы мне отображалась информация phpinfo если мы снова перейдем на доках PHP то зачастую такие вещи уже описывается Как мы можем создавать наше приложение нас будет PHP версия у нас будет 7.2 и именно и далее нам нужно скопировать будет наш файл это у нас будет файлы индекс точка HP

7.2 и именно и далее нам нужно скопировать будет наш файл это у нас будет файлы индекс точка HP который мы сейчас будем создавать будем копировать его в рабочую территорию Это все можно увидеть на официальном сайте на доках именно по PHP и теперь нужно создать индекс Vi индекс HP и с таким содержимым готово сделаем теперь то назовем Теперь его май PHP первая версия готова идет скачивание снова базового имиджа php72 готово Мы создали имидж Давайте остановим предыдущий контейнеры топ мои только 2

имиджа php72 готово Мы создали имидж Давайте остановим предыдущий контейнеры топ мои только 2 ничего не работало не нужно мы допустим моя PHP так только запустим порты ставим стандартные 880 переменных нас никаких нету мы запускаем HP контейнер все готово поехали Давайте перейдем на наш сайт у нас порты открыты переходим браузер переходим на наш сервер и у нас работает phpinfo как бы отлично Все у нас информации есть у нас работает PHP контейнер супер и давайте сделаем такой примерчик напайтоне

нас информации есть у нас работает PHP контейнер супер и давайте сделаем такой примерчик напайтоне маленький до которая будет нам что-то делать там допустим суммировать два числа Давайте здесь мы выпьем другую территорию создадим папку поэтому заходим Python папку создадим Давайте скрипт на поэтому это будет сумма двух чисел сам изменяем его вот такой скрипт Что здесь происходит Мы Нам нужно будет ставить первое число второе число потом они будут результат у нас будет писаться что сумма первого

ставить первое число второе число потом они будут результат у нас будет писаться что сумма первого и второго числа равняется там все это сохраняем далее нам нужно сделать делаем пишем за основу [музыка] и также Вот здесь снизу вся информация Как можно создавать вот свои контейнеры и мыши вот как мы можем использовать будем использовать поэтому 3 вот есть Рабочая директория Вот и туда мы сможем все это копировать давайте это все скопируем вот этот весь ее просто под настроем под себя это я удалю

это копировать давайте это все скопируем вот этот весь ее просто под настроем под себя это я удалю вставляем рабочий директорию Нас устраивает далее мы будем копировать сам по нашему рабочей директорию далее запускать мы здесь ничего не будет никакие зависимости не требуется этому удаляем это мы тоже удаляем и что мы еще будем делать это нам нужно будет запустить наше поэтому здесь меняем наш скрипт точку еще все готово Давайте посмотрим Будет ли это работать так все Мы создали У нас доков есть

точку еще все готово Давайте посмотрим Будет ли это работать так все Мы создали У нас доков есть сделаем бит дока бильд май поэтому версии 1 идет скачивание базового образа все Мы создали наш Image и Давайте его запустим поскольку мы будем запускать программу которая ведет диалог то нам нужно запустить его в интернете мод только Run далее Мы хотим удалить потом этот контейнер и запускаем наш на спрашивает дети первое число Давайте ведем 12 введите второе число Ну давайте сделаем 50 и все сумма

дети первое число Давайте ведем 12 введите второе число Ну давайте сделаем 50 и все сумма на 100 12 50 равняется 62 все прекрасно сработает и контейнер потом убивается вот таким образом это все работает Давайте посмотрим сколько мы создавали уже images немало У нас есть также у пункту имя которое скачался как основной основа базовый потом мы скачивали как базовый еще Поэтому вот он и печки То есть у нас в сумме задавали 18 имиджей мы сделали мы это сделали всего лишь с помощью одного

То есть у нас в сумме задавали 18 имиджей мы сделали мы это сделали всего лишь с помощью одного практически одного до файла который мы постоянно расширяли увеличивали и добавлять какие-то новые функции на этом все по поводу создания своих Дока имиджей Я думаю если вы это все сделали вас все сработало все получилось что вы умеете создавать свои только контейнеры он используется для управления Одним или несколькими контейнерами это мы потом посмотрим на примерах Как управлять одним и также как

или несколькими контейнерами это мы потом посмотрим на примерах Как управлять одним и также как управлять сразу несколькими контейнерами долго компот он содержит инструкции по запуску контейнеров То есть то что мы вводили в командную строку мы будем вводить уже в определенный файл также догком буду упрощает автоматизацию запуска контейнеров то есть нам не нужно будет запоминать те команды те параметры которые нам необходимы для запуска контейнеров И последнее это что нужно знать это что док

которые нам необходимы для запуска контейнеров И последнее это что нужно знать это что док компост описывается в яму файле и зачастую он имеет название Дока минус compost.am и Давайте теперь посмотрим пример Для чего используется только compos как это все упрощает нам жизнь Итак мы записывали команду в командной строке это doca Run даже указывали какие-то параметры и запускали наш контейнер то есть указывали потом Image это такой простой запуск контейнеров и Давайте немножко его сейчас усложним

указывали потом Image это такой простой запуск контейнеров и Давайте немножко его сейчас усложним Итак добавим допустим порты то есть мы запускаем что Engine X использует это веб-сервер мы можем пробросить порты 80 и 443 и также мы добавим Допустим что мы хотим версию Давайте еще усложним Допустим мы хотим что-то больше Допустим мы хотим при запуске добавлять имя то есть чтобы знали что это наш но нам потом становится мало И мы упражняем еще мы добавляем допустим Volume то есть мы хотим чтобы у

нам потом становится мало И мы упражняем еще мы добавляем допустим Volume то есть мы хотим чтобы у нас пробрасывались наше содержание в контейнер то есть мы добавляем два Volume это Volume HTML папка в HTML в контейнеры и также допустим вас есть какие-то картинки Pictures Да мы добавляем это все в контейнер Ну хорошо как бы уже команда не совсем простая у нас много параметров но мы также можем увеличить наш контейнер добавить еще больше всего и Давайте добавим переменные вот допустим хотим

увеличить наш контейнер добавить еще больше всего и Давайте добавим переменные вот допустим хотим назвать что Engine X Host это будет с таким адресом веб.ру и также мы хотим показать у Engine support 80 в данном случае это не имеет большого значения для примера сойдет хорошо уже много параметров Добавляем еще параметры Итак сейчас мы добавим еще то что мы хотим запускаем наш контейнер в другой сети и вот добавляем параметр минус Минус Network и вебнет допустим и вот наша команда которую мы

сети и вот добавляем параметр минус Минус Network и вебнет допустим и вот наша команда которую мы запускаем допустим у нас вот есть окружение какое-то где нужно эти все параметры будут указывать как бы заполнить параметры все да один развести второй развести Это нормально Но если нужно будет опять это вспомнить через неделю то вряд ли все параметры вспомните их нужно будет где-то записывает сохранять и так далее и давайте рассмотрим вот сравнение вот этой команды которая у нас есть большая как

и так далее и давайте рассмотрим вот сравнение вот этой команды которая у нас есть большая как она будет выглядеть вдоха compost Итак у нас есть командная строка слева и докапом Итак командной строке это выглядит Вот так вот я написал команды с параметрами друг подружка Но это все будет в одной строке это что мы видим до этого и Давайте теперь Посмотрим как будет выглядеть в до каком постфале как это мы сможем записать Итак сначала пишется шапка это указывается версия по которой будет работать

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

как инструкция запуска нашего контейнера Итак указан У нас есть веб-сервер мы можем указать его как угодно любое имя придумать далее мы указываем Image и этот имидж Это соответствует тому имущество которое мы использовали в запуске в командной строке далее мы можем указать то есть указать как будет нам отображаться наш контейнер как он будет при команде до kps процессы посмотреть мы будем видеть это имя этот параметр не обязательно Ну он соответствует нашему параметру далее мы указываем Volume

это имя этот параметр не обязательно Ну он соответствует нашему параметру далее мы указываем Volume здесь у нас были воли мы монтировали и также мы здесь можем указать Volume вот все соответствует далее соответственно наши envice то есть наши переменные Мы также указываем до каком по асфальт далее У нас есть порты Вот наши порты так они записываются вдоха компас далее следующий параметры То есть это правило которое указывает Что нужно делать с контейнером при его установке при перезагрузке

это правило которое указывает Что нужно делать с контейнером при его установке при перезагрузке сервера и так дальше Стоп то есть при перезагрузке сервером наш контейнер будет иметь тоже состояние что и до перезагрузки То есть он был выключен Он не будет включен соответственно если он был включен Он также запустится Вот очень важно чаще всего используют либо Always то есть всегда будет перезапускаться наш контейнер неважно что случается с сервером или мы его установили перезагрузили он

наш контейнер неважно что случается с сервером или мы его установили перезагрузили он запускается вот ну и еще одно что мы пропустили это Network то есть мы здесь указали Network и в док компот файле это пицца вот такие вот параметром networks и дальше указывается несколько параметров которые описывает ту сеть в которой будет запускаться наш контейнер в данном случае мы будем использовать драйвер grage То есть как бы стандартный драйвер Вот и дадим имя нашей сети это будет вебнет Вот такой

grage То есть как бы стандартный драйвер Вот и дадим имя нашей сети это будет вебнет Вот такой способ записи в доко ком позвали то есть этот Файлик мы сохраняем как до каком постольчика ямы Вот и все мы можем синхронизировать с китом скопируя куда мы перенести и у нас будет всегда одинаково запускаться наш контейнер то есть вот цель доказ и чтобы запустить именно doca compost Нам нужно будет в месте нахождения нашего файлика то нам стоит только указать только компот либо новый вид записи это

месте нахождения нашего файлика то нам стоит только указать только компот либо новый вид записи это дока пробел compose Up минус D это тоже параметр минус D что здесь то есть он будет запускаться в бэкграунде Ну и Давайте теперь Посмотрим как будет запускаться если у нас есть несколько контейнеров Итак первый контейнер у нас будет PHP и с тегом и печь вот с такими параметры имя Port укажем и укажем что у нас сеть Интернет следующий контейнер который мы будем запускать это у нас будет И еще один

что у нас сеть Интернет следующий контейнер который мы будем запускать это у нас будет И еще один контейнер это будет то есть представим такую ситуацию У нас есть какое-то приложение которое работает на PHP Вот и Но это веб-приложение это приложение также используют как базу данных и также используют как кэш допустим это у нас контейнеры Обычно они пустые взятые столько хабом допустим представим что у нас такая ситуация и Давайте опишем теперь доку компос Итак у нас есть шапка версия и

что у нас такая ситуация и Давайте опишем теперь доку компос Итак у нас есть шапка версия и описываем сервисы первый сервис то есть наш первый контейнер это будет PHP мы указываем Image вот наша и мыс который мы будем запускать Далее для удобства указываем контейна name порты перебрасываем указываем правило для рестарта далее Давайте опишем следующий контейнер это у нас будет база данных поскольку это база данных Вот и дальше будет у нас также указываем имидж имя контейнера и параметры запуска

это база данных Вот и дальше будет у нас также указываем имидж имя контейнера и параметры запуска далее нам нужно указать будет параметр переменную это и пароль для запуска это будет просто необходимо и третий контейнер который мы укажем вот радиес тоже Image имя контейнера или далее такая ситуация если у нас есть приложение которое используют базу данных используют кэш то эти две вещи они должны запускаться до того как запустится наше приложение иначе наше приложение Скажет что-то не работает

запускаться до того как запустится наше приложение иначе наше приложение Скажет что-то не работает у меня нету базы данных я не знаю где брать свои данные поэтому мы можем указать такой параметр он то есть наше приложение запустится только тогда когда запустится вот эти два других сервиса потом запускается только наше приложение наша этот контейнер мы указали параметры Network да Вы наверное заметили что здесь их нету нигде то давайте это сейчас добавим в мы добавляем Network нет и добавляем

что здесь их нету нигде то давайте это сейчас добавим в мы добавляем Network нет и добавляем радиус также Нетворк и Давайте теперь еще одна вещь допустим у нас Приложение работает в паблике то есть любые люди мог нему подключаться что смотреть что-то делать регистрироваться так дальше и у нас есть получается фронт and то есть та сеть Куда люди подключаются и у нас есть backend то есть где работать наша база данных наш кэш и так далее поэтому Логично было бы добавить наше приложение в две сети и

наша база данных наш кэш и так далее поэтому Логично было бы добавить наше приложение в две сети и давайте это сделаем это будет Network интернет и appnet интернет это та сеть типа Bridge который мы сможем перебрасывать порты и люди будут подключаться именно к этой сети а appnet этот Back and Где работает соединение нашего приложения наша базы данных и нашего кэша Вот то есть мы разделяем как бы наш контейнер на 200 и описание Теперь нужно сделать их сетей это будет выглядеть так это будет

бы наш контейнер на 200 и описание Теперь нужно сделать их сетей это будет выглядеть так это будет Network интернет Это тип Бридж и имя Интернет также делаем с appnet мы описываем что это тип драйвер Bridge и имя даем ему преимуществ этого всего когда все контейнеры находятся в одной сети это мы уже изучали при изучении Дока нетбук то что наше приложение сможет подключаться по именам по App reds и mtb подключаться к другим контейнерам но мы сейчас рассмотрели Как запускать готовые имиджи Да вот

mtb подключаться к другим контейнерам но мы сейчас рассмотрели Как запускать готовые имиджи Да вот здесь имидж PHP на самом деле это обычный Image который находится только хаб он как бы пустой Да там есть какая-то стартовая страница и все но если допустим нас есть приложение написано нами Мы хотим там добавить наши наш контент туда какие-то изменения сделать и так далее то нам не обязательно сначала делать как мы на прошлом видео изучали мы можем это все здесь описать у нас будет в одной

сначала делать как мы на прошлом видео изучали мы можем это все здесь описать у нас будет в одной территории допустим находиться наш дураком пост файл и наш Дока файл с предыдущим видео то мы можем просто напросто указать вместо Image мы можем указать бильд и точка допустим у нас в этой директории Вот мы указывали и матч PSP apech начала собран контейнер Наш новый имидж и он будет запускаться Ну то есть он будет собран после того как запустится наши fdb и радиес и вот такой вот способ записи

то есть он будет собран после того как запустится наши fdb и радиес и вот такой вот способ записи когда мы хотим чтобы приложение Наше большое приложение находилась полностью в Дока компост то здесь все все правила описываться при запуске контейнеров и Давайте теперь посмотрим на практике переходим в консоль Так мы на сервере subuntu 204 Где установлен токер и чтобы начать использовать только compost нам нужно сначала установить его Давайте проверим установлен ли Дока компост на этом сервере

нам нужно сначала установить его Давайте проверим установлен ли Дока компост на этом сервере пишем только compos минус Минус вяжем не установлено еще стоит проверить такую штуку как только пробел compose и вяжем то есть Это старая способ записи догоком пост А это как бы новый то есть здесь это когда используется именно плагин до каком это Когда установится только компас обычный То есть это такие вещи стоит запомнить просто это старый это но и давайте мы установим только Итак переходим на

такие вещи стоит запомнить просто это старый это но и давайте мы установим только Итак переходим на официальный сайт токером и здесь есть такой пункт как установка и установка Linux Итак мы будем использовать Ubuntu как бы стоит добавить репозитории в на сам сервер И поэтому это мы можем сделать апдейт следующая команду Давайте скопируем устанавливаем дополнительные пакеты как бы они все с нуля но еще раз это сделаем так далее мы добавляем ключ и добавляем собственно репозиторий только лист

но еще раз это сделаем так далее мы добавляем ключ и добавляем собственно репозиторий только лист отлично теперь переходим снова к установке бунту делаем снова обновление обновляем репозиторий который только что установили готово и установим теперь плагин так идет звука плагином мы спускаем ниже и вот таким образом мы проверим установлен ли у нас долго compose Давайте скопируем сразу и вставляем все у нас установлен только compose версии 210 и с ним мы будем работать Итак давайте перейдем

все у нас установлен только compose версии 210 и с ним мы будем работать Итак давайте перейдем теперь в директору где будем создавать наши дома и обычно это делаю папки ОПТ и это наши старые примеры Давайте создадим новую папку и зайдем так и чтобы начать нам нужно создать Файлик называется doco compos ямы создаем файл Touch только compos Яма и редактируем его Итак чего мы начнем И давайте мы начнем все же с наших примеров которые мы смотрели на слайдах Итак Вот первый пример я скопирую команду

все же с наших примеров которые мы смотрели на слайдах Итак Вот первый пример я скопирую команду которая была Вот такая вот команда это мы обычный запуск нашего контейнера Давайте даже скопируем и запустим посмотрим работает ли она вообще запуск контейнера и Engine X stable не очень удобно отображаться вот так получше будет Вот с открытием портов из определенными переменными но запускаем да нам говорит что у нас не создана сеть можем ее создать вручную Или давайте просто мы уберем этот параметр

что у нас не создана сеть можем ее создать вручную Или давайте просто мы уберем этот параметр чтобы нам потом не путаться и мы посмотрим как делать и Давайте все-таки еще раз запустим все у нас работает проверяем до капец у нас работает Man Engine X мы можем это проверить на сразу на сайте так 10 10 194 Вот и у нас работает наш Ну как бы все отлично все хорошо давайте его основе убьем только стоп мы инженекс и также его убьем готово и Давайте эту команду Мы закинем сейчас в наш Дока компост

мы инженекс и также его убьем готово и Давайте эту команду Мы закинем сейчас в наш Дока компост файл для примера чтобы нам все было видно и начинаем писать на что как у вас Да я буду писать вручную не будем копировать и так как мы говорили у нас изначально идет название версии далее записывать все в формате ямы так версия у нас Давайте 35 самая новая 39 далее мы указываем все в СС и Далее идет описание нашей контейнеров Я в информатики очень важно обращать внимание на пробелы то есть сервисы и

нашей контейнеров Я в информатики очень важно обращать внимание на пробелы то есть сервисы и мы дальше описываем немножечко отодвигаясь от этого То есть все что мы описываю она будет относиться к сервисам Итак у нас будет название нашего сервиса это веб сервер и Далее идет описание веб-сервера то есть мы идем про Белый дом сервер Ну еще парочку пробелов доволен чтобы это относилась к веб-сервиру Итак пишем Image Откуда мы это будем копировать и мы будем брать имикс стабильной версии Далее для

Итак пишем Image Откуда мы это будем копировать и мы будем брать имикс стабильной версии Далее для удобства я укажу [музыка] и это у нас будет как мы назвали наш контейнер далее пишем и далее У нас уже относится ниже Volume еще пробелы ставим делаем список и у нас Volume 1 вводим нас вот такой вот и добавляем сейчас второй волью так вот сейчас ровненько нужно и добавляем второй Volume хорошо следующий параметр У нас есть nvidence Переменная пишем Nine добавляем переменные 1 переменная и сейчас

параметр У нас есть nvidence Переменная пишем Nine добавляем переменные 1 переменная и сейчас добавляем вторую переменную обычно мы редакторе намного проще делать там быстрее все но это Vim здесь не получится то есть оно будет отображаться как таба нужно именно пробелы это очень важно нужно обращать внимание чтобы ли не табы а именно Space и пробелы Так у нас есть перемены далее мы указываем порты параметр у нас будет под и также под портами у нас будет 80 80 и второй порт это будет 443 в 443

параметр у нас будет под и также под портами у нас будет 80 80 и второй порт это будет 443 в 443 далее Я люблю указывать параметры запуска то есть пристав и будет Вот так так Кто и следующее что мы укажем это Network где будет запускаться и вот наш контейнер Ну то есть мы можем сделать глобальную запись то есть мы пишем вот под сервисами то есть будет задаваться нас сеть дополнительное и уже будет помещаться в неё те коты не которые здесь описывается и давайте это сделаем это будет Фокс далее

помещаться в неё те коты не которые здесь описывается и давайте это сделаем это будет Фокс далее дефолт то есть сеть будет по умолчанию далее указываем драйвер это будет и также можем дать имя это все всему это будет веб нет Да вот как мы здесь назвали вебнет все у нас все записи есть кроме минус D мы не указали Но это параметры запуска именно до каком пост мы сейчас это все посмотрим проверим все готово вот так у нас выглядит Дока компос файл вот сверху Это пример Давайте красивее это все

все готово вот так у нас выглядит Дока компос файл вот сверху Это пример Давайте красивее это все сделаем вот так вот она запись Давайте теперь это все запустим сохраняем пишем только composs внимание что здесь пробел а не минус пишем нужно правильно все записывать драйвер драйвер все правильно теперь еще раз пробуем и снова опечатка давайте это все исправлять когда быстро пишу нас не Нижний подчеркивание А минус так вот все Давайте еще раз запускаем Ну в первом случае нас создался создала сеть

А минус так вот все Давайте еще раз запускаем Ну в первом случае нас создался создала сеть и на запустился поэтому много времени Давайте посмотрим браузером так обновляем нашу страницу еще раз обновим еще раз еще раз Ну как бы у нас Engine X отображается да давайте можем еще в одну вот нас Engine X как бы все работает все прекрасно и мы здесь сразу же видим блок нашего до каком фосфайла то есть тому что там запустилась и также здесь Lock отображается Вот моя инженекс именно это говорит что о

тому что там запустилась и также здесь Lock отображается Вот моя инженекс именно это говорит что о том именно этот Лог относится к этому контейнеру но это мы запустили в как не фоне у нас это все работает нажимаем Control C убиваем контейнер Давайте запустим его фоне минус D также Какие все у нас контейнер работает можем проверить это все до kps он все работает наши параметры все есть также можем перейти снова браузер Все работает все прекрасно но мы допустим вот так вот запустили наш докаком

перейти снова браузер Все работает все прекрасно но мы допустим вот так вот запустили наш докаком поз и хотим все же смотреть влоги которые там отображаются это делается очень просто пишем только composs Локс минус F и Вот наши логи отображается дальше вот таким образом и так же мы просто выходим с логов Control C если мы вышли а наш токер наш контейнер работает дальше вот таким образом чтобы это все остановить просто пишем в этой директору Где находится только compost файл Дока компас Стоп Все

все остановить просто пишем в этой директору Где находится только compost файл Дока компас Стоп Все на все убито теперь можно посмотреть Вот наши контейнеры еще созданные какие-то Да это старые с прошлого Видео давайте это все мы убиваем только ему все у нас все чистенько это Вот такой у нас пример и Давайте немножечко покажу вам Что относится к Volume так отметить указали именно Host Volume то есть мы перебрасывали какую-то директорию локальную по в директорию В контейнере вот ну допустим если

мы перебрасывали какую-то директорию локальную по в директорию В контейнере вот ну допустим если у нас есть еще config файлы какие-то вот конфиг нашим Давайте создадим еще новые так но теперь у нас будет просто конфиг вот такой вот это будет как named Volume то есть именной Volume мы будем сохранять Ну допустим это будет конфликт для нашего приложения это будет также вам Давайте будет конфиг неважно пускай будет так вот кстати еще покажу что мы создавая здесь пульмы и указали вот такие вот

неважно пускай будет так вот кстати еще покажу что мы создавая здесь пульмы и указали вот такие вот директории но я и до этого не создавал мы посмотрим что эти территории были созданы автоматически вот ну указали конфиг Но для того чтобы это все сработало нам нужно это все описать что это за Волю такой поэтому Обычно внизу только описывается volums и далее указывается Volume которая именно именные Ну это у нас будет Engine X и уже скопирую чтобы не сделать опечатку все сохраняем выходим и

Ну это у нас будет Engine X и уже скопирую чтобы не сделать опечатку все сохраняем выходим и Давайте снова Мы запустим то как Давайте фоне запустим но тем не менее я сделал отпечатку видимо Да нужно в конце еще ставить двоеточие все так все запускаем у нас работает смотрим До kps все прекрасно сработает дальше то что я говорил по поводу которая создавались Давайте зайдем эту директорию веб и посмотрим что у нас вот эти вот территории они создались автоматически также создалась территориях

посмотрим что у нас вот эти вот территории они создались автоматически также создалась территориях конфиг в директории Докера так хорошо это все работает Давайте убьем наш Дока компост обратно к нашему до каком поз стоп все у нас установлен контейнер и Дока пьеса проверим Давайте Вернемся перед ко второму примеру это у нас будет пример с тремя контейнерами теперь задаем следующий дока композ и Давайте скопируем примеры нашего слайда то есть там где у нас три три контейнера так готово Теперь

Давайте скопируем примеры нашего слайда то есть там где у нас три три контейнера так готово Теперь давайте будем писать наш тока файл Итак пишем как обычно Давайте посмотрим здесь 3 6 3 можно 35 Там разница невелика [музыка] даже будем писать наши сервисы Итак первый сервис у нас будет PHP [музыка] дальше мы указываем и первый имидж у нас будет PHP далее указываем как обычно это у нас будет Да как здесь мы указали это будет у нас далее мы указываем порты так порты в первом случае мы указали 80

здесь мы указали это будет у нас далее мы указываем порты так порты в первом случае мы указали 80 80 и так у нас есть три приложения три контейнера это наше приложение само основано на PHP допустим да это все такое виртуально допустим у нас есть база данных и у нас есть кэш То есть у нас база данных на основе кэш у нас будет на основе и наше приложение само и даже мы написали зависимости что наше приложение самому будет запускаться после базы данных и после кэша после radison и также мы внизу

приложение самому будет запускаться после базы данных и после кэша после radison и также мы внизу добавляем сети нет у нас Мы добавляем две сети типа Bridge Это он с именем интернет и локальный и Давайте проверим какие у нас сети есть уже установленные на сервере то есть в докере выходим сохраняем и Давайте посмотрим Наши сети дока и вот мы видим сеть которая была создана предыдущая вот с предыдущего тока compose это webnet и также наши сети вот с предыдущих видео Давайте запустим теперь наш

тока compose это webnet и также наши сети вот с предыдущих видео Давайте запустим теперь наш только compos только компост Up и все идет скачивание дока имиджей дальше на создаются сети и все идет запуск нашей контейнеров вот мы видим что у нас теперь разные цвета у нас есть приложение и у нас есть как бы это все у нас запустилось все работает ну как бы это приложение оно ничего не делает мы пробросили порт 80 если мы зайдем в браузер Да И вот на наш сервер обновляем страницу ничего не

мы пробросили порт 80 если мы зайдем в браузер Да И вот на наш сервер обновляем страницу ничего не отображается потому что у нас само приложение не совсем работает но это такое Я просто как запускается три контейнер как это все описывается как запускается давайте это убьем И запустим это еще моде минус готовом и Давайте посмотрим до капец у нас Вот видите три контейнера есть PHP с тегами если мы убиваем только compose compose Стоп Все то идет основной контейнеров все готово да у нас теперь

мы убиваем только compose compose Стоп Все то идет основной контейнеров все готово да у нас теперь никаких контейнеров нет запущены отлично это были такие вот примеры просто как запускаться как это все описывается но Давайте теперь посмотрим что-то более интересное то что можно установить дома и как-то логично использовать я подсмотрел на Дока компост Я выбрал такой контейнер как Flame Да это то есть такой вот где мы можем создавать сохранять какие-то ссылки на какие-то сервисы Давайте

это то есть такой вот где мы можем создавать сохранять какие-то ссылки на какие-то сервисы Давайте посмотрим как он запускается здесь установка и вот как запускается сам контейнер давайте скопируем это все И перезапишем это в только компас Так давайте мы создадим новую папку это будет ходим в папку и здесь будем создавать наш дока композ ямы Так давайте скопируем команду в котором ставим Не команду которая нам показывает Как запускать наш Flame и Давайте будем писать наш и так как обычно

команду которая нам показывает Как запускать наш Flame и Давайте будем писать наш и так как обычно Давайте будем это у нас 3.5 [музыка] дальше далее мы указываем это будет у нас сервис не будем выдумывать далее пишем имидж [музыка] весь далее пишем даем название нашему контейнеру [музыка] также будет далее вот Так у нас пять тысяч пять пускай будет такой порт и оставим так далее У нас есть Volume и переменные давайте это запишем volums и nvident так Volume здесь написано путь к данным Ну

Volume и переменные давайте это запишем volums и nvident так Volume здесь написано путь к данным Ну давайте это будет у нас опт Flame и Data вот Такой путь допустим там будет храниться наши измененные файлы то есть чтобы мы запускали наш контейнер и наши настройки сохранялись Вот то есть нам никаких там данных уже изначально хранить надо программу создаст файлы сама так и переменные красиво было и переменную для того чтобы настроить в принципе вот все еще Давайте добавим чтобы у нас контейнер

и переменную для того чтобы настроить в принципе вот все еще Давайте добавим чтобы у нас контейнер Не запускался сам по себе при перезагрузке чтоб все готово Давайте вот так назовем просто Password 123 все сохраняем выходим только компост об Отлично Да все равно ошибку сделал так да давайте перейдем еще на доках об здесь указано с Flame но есть мы посмотрим вверх то здесь указывается что сам контейнер называется не только флейм Да нужно скопировать именно вот этот полностью вот как здесь

контейнер называется не только флейм Да нужно скопировать именно вот этот полностью вот как здесь команда показывается где пул и вот этот полностью команда скопировать копируем и Давайте изменим наш редактируем Post файл имидже Flame найти только не смог А вот такой контейнер Давайте попробуем еще раз Да все у нас идет скачивание и меньше видите есть мы не указываем никакой никакую сеть будет создаваться сеть название самого контейнера и дефолт по умолчанию все у нас как бы все запустилась это

сеть название самого контейнера и дефолт по умолчанию все у нас как бы все запустилась это у нас спорт был 5000 5 давайте это проверим так 50005 все у нас все работает также мы можем здесь зайти все изменить но суть не в этом не в этом приложении а к запускается наш контейнер Ну это у нас один контейнер и Давайте добавим в тот же только компас файл еще один контейнер еще просто какой-нибудь контейнер для этого возьмем другой тоже будет называется есть мы спустя в ниже немножечко то здесь есть

для этого возьмем другой тоже будет называется есть мы спустя в ниже немножечко то здесь есть описание всех параметров какие есть и также есть пример Дока компас и вот до какого наше все знакомое версия 21 оказывается сервис и дальше идет описание сервиса мы сделаем проще Мы возьмем это все скопируем просто и добавим к нашему то как вас файлу опускаемся ниже новой строчки и теперь подредактировать это все так чтобы это все было в одну линию всё готово дальше что у нас здесь происходит Мы

это все так чтобы это все было в одну линию всё готово дальше что у нас здесь происходит Мы скачиваем Image который указывается который Вот и мы с этого хайм да у нас есть контейны у нас есть переменные tit это timession то есть мы можем указать где вы находитесь чтобы правильно отображалось время не будет Берлин далее стоит указать volums Где будут хранится наши конфиги давайте мы сделаем Давайте по стандарту вот конфиг и будет монтироваться то есть там Hyundai создаст твои конфики то есть

по стандарту вот конфиг и будет монтироваться то есть там Hyundai создаст твои конфики то есть стандарты будут постоянные данные у нас пробрасываются порты 80 и 43 и параметры перезапуска Давайте посмотрим что у нас произойдет сейчас только запускаем идет скачивание и видите мы видим Лог и Ханта и Flame наши предыдущих контейнер Давайте перейдем на сервер перезагрузим здесь 5000 5 это наш Flame и давайте сейчас мы зайдем на порт 80 то есть не будем указывать никакой порт и вот наш другой сервис

давайте сейчас мы зайдем на порт 80 то есть не будем указывать никакой порт и вот наш другой сервис все как бы работают они то есть там там его нужно настроить такое это не столь важно у нас работает сервис его я рассматривал на предыдущих видео хорошо это такие два простых сервиса два просто контейнером и Давайте немножко усложним наш контейнеры и запустим nexcloud сделаем только после Давайте остановим контейнеры нам не нужны контракты сразу выходим они контейнер останавливается Хорошо

остановим контейнеры нам не нужны контракты сразу выходим они контейнер останавливается Хорошо давайте создадим папку для сковорода заходим сразу файлик [музыка] и Давайте посмотрим на токах об что нам предлагает только Hub Как запустить nexcloud так страничка на исходу она Дока хабби спускаемся ниже посмотрим какие у нас параметры есть и как это все запускаться очень зачастую когда доках а предлагает большие какие-то контейнеры большие сервисы то сразу же есть описание то как композа мы можем

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

нужно добавить некоторые можно добавить опускаемся ниже и вот у нас есть пример Как запустить с использованием Две версии есть у нас есть просто печи базовая версия у нас есть три контейнера база данных само приложение и Web то есть ну мы будем использовать Попроще давайте это все скопируем и ставим в наш тока компас хорошо и давайте сейчас посмотрим сверху вниз Давайте нам изменим сразу версию 3.5 Итак здесь сверху указано Volume Ну пускай будет сверху дальше у нас указывается сервисом У нас

3.5 Итак здесь сверху указано Volume Ну пускай будет сверху дальше у нас указывается сервисом У нас есть база данных что мы используем это Image Мария тебе как база данных запускается автоматически перезапуск Ну оставим так Да что автоматически указывается команда это мы уже не рассматривали Это команда при запуске контейнера чтобы запущена дальше волю мы вот видите здесь сверху были указаны и вот именные воли мы тебе и вот используются первые буквы для базы данных чтобы данные были постоянно

именные воли мы тебе и вот используются первые буквы для базы данных чтобы данные были постоянно сохранялись далее есть есть некоторые заполненные есть некоторые не заполнены Давайте дополним Итак мысли Root Password то есть нужно указать пароль для базы данных для рута Ну давайте попроще пас 123 не столь важно и дальше мой пазл для именно пользователя nexl Да здесь мы видим что создается база данных nexcloud и создается пользователь Next Cloud и нужно для него создать пароль Ну давайте будет

nexcloud и создается пользователь Next Cloud и нужно для него создать пароль Ну давайте будет пас так пойдет все с базой данных мы завершили То есть это настройки базы данных даже Идет настройка самого приложения самого то есть мы берем Imagine перезапуск также постоянно порты которые будут перебрасываться топор 880 спорт 80 в контейнере Ну хорошо запомню что нам нужно будет в браузере зайти на порт 8080 даже используется линкс но здесь был пример версии версия 2.0 использовать линки сейчас

порт 8080 даже используется линкс но здесь был пример версии версия 2.0 использовать линки сейчас Links Не используют в принципе там может быть для а леса и да то есть какие-то другое имя то есть мы можем так написать там май типе то есть мы сможем сделать что наша база данных Также будут откликаться на мать мы будем ее вызывать с NEX контейнерных это мы уберем нам линз не нужны так воли Мы у нас остается также именной volumex Cloud хорошо вот здесь сверху написано и дальше идет описание

у нас остается также именной volumex Cloud хорошо вот здесь сверху написано и дальше идет описание переменных То есть это минимальные перемены которые нам нужно указать для работы его и также мы здесь видим что указывается массу и вот Майская Пасха который мы добавили это Мы также берем и добавляем сюда в данном случае что происходит создаются база данных создается сам сервер на этом сервисе дается база данных добавляется пользователь и добавляется к Этому пользователю пароль те же параметры

база данных добавляется пользователь и добавляется к Этому пользователю пароль те же параметры должны быть и здесь то есть мы указываем здесь контейнер Вот это имя раньше рассказывал дальше мы указываем пользователя который будет использовать для подключения базе данных здесь с паролем вот на пас nexcloud так такой же как мы изменили здесь и будут подключаться к базе данных Да очень много слов нет дальше Ну окей Все у нас это Готово это минимальная настройка то есть для продакшна То есть вы это

дальше Ну окей Все у нас это Готово это минимальная настройка то есть для продакшна То есть вы это хотите продуктивно использовать то вам желательно добавить намного больше параметров но речь не об этом речь идет о до каком Итак сохраняем выходим и запускаем только компос скачиваем сеть выше вот у нас создалась вот которые мы создавали и контейнеры Да мы здесь не указали контейна name поэтому у нас создались nexcloud F1 и индекс колод db1 то есть по названию вот Next Cloud это название папки

нас создались nexcloud F1 и индекс колод db1 то есть по названию вот Next Cloud это название папки который мы сейчас находимся и поэтому автоматически такой вот посоздавалась до app1 и теперь один по названием именно сервисов Итак спускаемся ниже все у нас поди сюда Что запустится было Давайте принципе сразу браузере и проверим переходим на сервер и мы указывали порт 8080 все у нас есть здесь мы можем создать то есть начальная страница при старте все у нас работает иначе у нас бы появлялась

мы можем создать то есть начальная страница при старте все у нас работает иначе у нас бы появлялась отображение что база данных не подключена ошибка была все отлично это работает Можете даже продолжать Можете даже создавать пользователя настраивать и так далее говорю что лучше всего перейти все же на docohub и посмотреть какие еще параметры есть в для Next колоды которые вам необходимо добавить чтобы немножко обезопасить немножко ускорить работу и так далее хорошо вот мы разобрались и Давайте

чтобы немножко обезопасить немножко ускорить работу и так далее хорошо вот мы разобрались и Давайте еще посмотрим такую очень знаменитую вещь как WordPress Кто знает этот cms для создания веб сайтов веб-сервисов Чего угодно общем это огромная штука вот и давайте это все мы сейчас создадим то есть в докеры запустим допустим Итак вы понимали что WordPress это не маленькая штучка и поэтому она также должна предлагать докафа У нас есть описание параметров переменных обычный запуск через командную

должна предлагать докафа У нас есть описание параметров переменных обычный запуск через командную строку нас интересует именно только Ну и вот у нас версии 31 Давайте все скопируем и запустим и здесь указывается внизу как бы это то что привычно то что удобно Давайте перейдем на север убиваем это все перейдем Давайте создадим новую папку WordPress [музыка] заходим также создаем только компот ямы вставляем наши вещи и Давайте посмотрим Давайте снова что-то Мне нравится версия 35 сервисом это у

вставляем наши вещи и Давайте посмотрим Давайте снова что-то Мне нравится версия 35 сервисом это у нас WordPress перезагрузка постоянно порты 8080 Ну принципе также как есть у нас есть WordPress тебе Host то есть каком хосту мы подключаемся это будет у нас хост кибин далее вот пресс пользователь который будет пас пароль название базы данных дата мы это ничего Изменять не будем знаете что параметры здесь указано они должны быть также указаны здесь дальше Давайте здесь база данных еще одна валюмы

здесь указано они должны быть также указаны здесь дальше Давайте здесь база данных еще одна валюмы именной Volume создается это нормально Здесь его есть описание Также вы можете это все менять можете также указывать там слэш допустим директории так далее перебрасывать монтировать это все вы можете изменять это все будет также работать хорошо Итак дальше база данных основанная на Москве 57 перезапуск всегда переменная указывается мой следует замкнут тебе пользователь пароль для пользователя вот

всегда переменная указывается мой следует замкнут тебе пользователь пароль для пользователя вот эти вещи должны быть такие же как здесь принципе но такие есть все дальше здесь для рута указан дом Root Password но лучше укажу просто что хочу контролировать и у нас Давайте будет рут тебе вот так вот и указывается как бы все хорошо все есть мы можем также здесь добавить он принципе делать не будем суть не в этом чтобы запустить и она работала даже стоит для продакшна конечно же добавить переменных

не в этом чтобы запустить и она работала даже стоит для продакшна конечно же добавить переменных побольше чтобы удобнее было работать и более безопасно и запускаем только и базы данных так все у нас запускается WordPress база данных немножко подождать Должно все у нас работать отлично сейчас создается как семплу базы данных создаются таблицы так в принципе все можем переходить и у нас порт был 8080 так такой же как запускался Ну ладно поэтому у нас ошибки нету перезапускаем Да все у нас Ford

8080 так такой же как запускался Ну ладно поэтому у нас ошибки нету перезапускаем Да все у нас Ford работает вот админ панель Спускаюсь ниже допустим выберем русский Все работает все отлично Вот так работает только компас все отлично Надеюсь я понятно вам рассказал как работает Дока компот что это намного упрощает запуск контейнеров Вы можете сразу в один файл добавить много контейнеров и запускать с помощью одного файла так конечно делать не стоит можете дать различные именно до каком пост

с помощью одного файла так конечно делать не стоит можете дать различные именно до каком пост файлом и запускать их в какой-то последовательности у вас вот все в одном файле то есть вот есть все параметры нужно иначе было бы вбивать в одну командную строку один-два раза можно запомнить если у вас 20-30 контейнеров там 40 контейнеров то это будет немножко сложновато На прошлой видео мы рассматривали Как работать с токер контейнерами Как создавать контейнеры Как создавать Volume сети с помощью

Как работать с токер контейнерами Как создавать контейнеры Как создавать Volume сети с помощью командной строки Как управлять этим всем с помощью команд мы изучили очень много но иногда хочется просто клики клики и чтобы создавать контейнеры создавать до каком пост файлы и так далее чтобы это было намного проще в этом нам может помочь тренер это мега популярная вещь которую используют практически все кто работает с докторами она упрощает создание управление контейнерами смотреть логи можно

все кто работает с докторами она упрощает создание управление контейнерами смотреть логи можно можно добавлять очень много хостов в один сервер объединять из одного места управлять всеми контейнер Вот вы сейчас перед экраном видите графическую оболочку этого всего Но мы начнем сначала и посмотрим как устанавливается Партнер как он настраивается и Как создаются контейнер это все и Давайте не терять время и начнем с ног Итак чтобы нам использовать партейнер нам нужно установить именно docker Итак

время и начнем с ног Итак чтобы нам использовать партейнер нам нужно установить именно docker Итак я использую сервер Ubuntu 204 Давайте посмотрим пункт 22.04 на него Будем ставить в первую очередь докер и doco complus и так сразу Давайте перейдем к руку и будем скачивать устанавливать докер будем делать с помощью скриптака который предлагается docahub для этого скачиваю сам скрипт это точка только точка ком и будем сохранять это точка Все скачиваем скрипт скачали вот он и теперь его запускаем

точка ком и будем сохранять это точка Все скачиваем скрипт скачали вот он и теперь его запускаем скачивание пакетов и установка готово до Красной Иса Давайте проверим только минус Минус вяжем версия 20.10 и также должен установить его сразу же Дока компост тоже все компост версии 2.12 прекрасно больше нам ничего не нужно и теперь давайте посмотрим как устанавливаться именно сам по Тайна так переход на страницу контейнера что мы видим у нас на начальной странице очень такая красивая информация

на страницу контейнера что мы видим у нас на начальной странице очень такая красивая информация все есть и дальше сверху нас есть prising а если мы посмотрим в праздник то мы увидим что как бы все у нас платная здесь есть Enterprise который еще дороже стоит Но не пугайте все Open Source можно посадить использовать бесплатно И для этого переходим в документацию из либо в гул и пишем Мы открываем открывается вот такая вот страница Где мы можем посмотреть варианты установки мы переходим в

открывается вот такая вот страница Где мы можем посмотреть варианты установки мы переходим в портальная Старейшин далее У нас есть несколько вариантов как хотим установить это Дока стен то есть на обычный сервер с помощью докас фон есть у вас класса и будем ставить все простой версии Это только Standalone далее Мы можем поставить У нас есть выбор У нас есть Дока он Linux далее Это Windows и Windows понятно что эти две вещи нам абсолютно Мы работаем с линуксом переходим в Linux и далее

и Windows понятно что эти две вещи нам абсолютно Мы работаем с линуксом переходим в Linux и далее спускаемся ниже здесь кое-ка информация также предлагать нам создать Volume для portane Data то есть там будет сохраняться настройки именно самого контейнера но немножко сделаем по-другому здесь У вас есть выбор на бизнес Edition и Community Edition они делал Что бизнес мы уже посмотрим какие возможности он добавляет но он будет платный нас интересует бесплатная версия вот этот вот вещь и вставляем

он добавляет но он будет платный нас интересует бесплатная версия вот этот вот вещь и вставляем на наш сервер но пока что не нажимаем Итак что мы видим у нас запускается до Коран пробрасывается порты 8000 и порт 943 для доступа будет создаваться контейнер с именем он будет перезапускаться всегда когда он падает что-то еще с ним случается Далее пробрасывается в это Дока сок сок то есть чтобы Партнер мог управлять именно докером это обязательно обязательно запускать его как Root либо нужно давать

мог управлять именно докером это обязательно обязательно запускать его как Root либо нужно давать определенные права далее пробрасывается Volume portana Data то есть где и будет сохраняться настройки самого контейнера мы это немножко изменим Вот и Flash дата в самом партнере и будет запускаться скачиваться вернее Image Pro 13 идишн это все классно но давайте это немножко перезапишем наверное вдоха Компас Так будет удобнее переходим сразу по стандартно территорию опт и создаем папку Заходим в

Компас Так будет удобнее переходим сразу по стандартно территорию опт и создаем папку Заходим в папку и гитаре и Давайте при запишем это все вдоха compose Итак мы перезаписали нашу одну команду в doca compost файл то есть будет запускаться сервис portane будет скачиваться Image такой же как и в одной команде здесь последней версии будет даваться имя потейна нашему контейнеру соответствует далее я добавил advent переменную чтобы у меня время в контейнеры указывалось правильно далее буду

далее я добавил advent переменную чтобы у меня время в контейнеры указывалось правильно далее буду добавляться вульмы вот то что я говорил сок у нас остается как и был А вот именно дата я монтирую так будет проще переносить потом контейнер на другой сервер Нужно обязательно пробросить порты такие же самые какие здесь указывается ничего не мешает прекрасно все работает все мы удаляем нашу команду которая здесь указана была делаем красиво сохраняем выходим wq и запускаем наш ее скачивание самого

которая здесь указана была делаем красиво сохраняем выходим wq и запускаем наш ее скачивание самого тренера и будет запускаться готово контейнер создан смотрим до капец у нас есть запущенный контейнер по порту 943 мы сможем Достучаться уже установленной версии Итак посмотрим IP адрес самого сервера который у меня здесь установлен 422 в конце переходим браузер 9443 так нас предупреждаю что сертификат не действительны это нормально потому что создавался сертификат именно с моим партнером это

не действительны это нормально потому что создавался сертификат именно с моим партнером это нормальным нажимаем дополнительно принятие риски Продолжить И вот наша Стартовая оболочка нам нужно создать имя пользователя админа который будет всем этим управлять и создать пароль самое главное это нужно пароль иметь 20 символов потом это можно уменьшить или изменить Но сейчас нужно убираем эту галочку в принципе можно ставить чтобы статистика отправляться анонимно Партенит создаем пользователям

в принципе можно ставить чтобы статистика отправляться анонимно Партенит создаем пользователям готово у нас открывается сам пар тренера и теперь можем уже с ним работать нас сразу открывается но давайте пока что пройдемся по настройкам я вам покажу Какие настройки где есть Для чего нужны очень классно партнеры то что у вас очень лаконичные настройки и они Понятно вместе находятся и Давайте самое первое что я всегда делаю Это перехожу в мой аккаунт и поменяем тему у нас есть вот здесь Кстати вы

первое что я всегда делаю Это перехожу в мой аккаунт и поменяем тему у нас есть вот здесь Кстати вы можете поменять пароль создавать Это для автоматизации сейчас нам это не столь важно И вот здесь пользовательская тема можете поставить высокий контраст обычная тема либо темная тема что мы можем делать в настройках создать новых пользователей какие-то права создать группы то есть группы роли здесь Конечно есть ограничения чтобы создать роли Вам необходимо иметь бизнес далее здесь мы будут

здесь Конечно есть ограничения чтобы создать роли Вам необходимо иметь бизнес далее здесь мы будут отображаться наша то есть наши докер сервер поэтому посмотрим попозже Также можно объединить наши докас сервера в группы добавить теги по умолчанию Мы скачиваем сразу все имиджи с Дока хаба но мы можем добавить registream допустим частный Я показывал на прошлых видео как сделать но Также вы можете добавить другие К сожалению мы также видим что нужно бизнес Edition далее мы видим все что

можете добавить другие К сожалению мы также видим что нужно бизнес Edition далее мы видим все что происходило на сервере На какие изменения были здесь какие-то общие настройки мы можем делать Также можно добавлять сертификаты свои сертификаты которые можете здесь загрузить с помощью файла и очень классная вещь это создание бэкапов далее классная штука что мы можем использовать Да что есть кто использует или что-то еще вы можете без проблем ничего за это не платить вы можете использовать этап

или что-то еще вы можете без проблем ничего за это не платить вы можете использовать этап здесь все настройки уже есть настройка не так много но все необходимое есть мы есть мы перейдем снова в home то мы видим что партейнер он автоматически подключился локально мы можем управлять локальными контейнерами которые есть на серии куда мы установили сам портрет и на домашней странице мы можем сразу видеть что у нас есть локоть Мы нажмем сюда то мы здесь видим такую вот отображается все основные

видеть что у нас есть локоть Мы нажмем сюда то мы здесь видим такую вот отображается все основные цифры которые есть у нас один контейнер работает у нас один стек нас один имидж и 4 эти все пункты это все пункты также отображаются здесь и Давайте немножко перейдем по основным путам начнем все сначала начнем с имиджей мы установили портрет и мы здесь можем видеть что у нас на севере это естественно имидж от партнера и он здесь отображается это тег который мы скачивали это понятно далее с Image

имидж от партнера и он здесь отображается это тег который мы скачивали это понятно далее с Image был создан контейнер Если мы придем в контейнеры мы видим протейна видим все данные которые мы указывали в Дока компос файле вот также мы можем здесь удобные вещи есть мы к ним Вернемся попозже немножечко далее netflox нас отображается все стандартные вещи Host но и также отображается по Тайна дефолт эта штука она была создана автоматически при использовании дога compose далее мы ничего не создавали

штука она была создана автоматически при использовании дога compose далее мы ничего не создавали никаких фолимов поэтому здесь ничего нет но мы можем их создать так основные вещи мы увидели далее Это все что происходит с контейнерами в принципе такой небольшой лук хост эта информация о Хосте Где работает партейнер и дальше настройки там сервера такие тонкие настройки можно сделать сам сервер что там зарегистрировано стекс стекс это ничего другого чем Дока компос файлы Да мы попозже посмотрим

там зарегистрировано стекс стекс это ничего другого чем Дока компос файлы Да мы попозже посмотрим как создается и видите у нас есть партейнер мы его создали как компост и здесь отображаются уже тип compose и принципе это все и Давайте посмотрим самое стандартное что не нужно много чего знать это App templates в templay то мы можем видеть самые стандартные басовые только контейнеры которые мы можем сразу же установить Да вот если Мы спустимся вниз то здесь у нас есть стандартно есть Ubuntu такой

сразу же установить Да вот если Мы спустимся вниз то здесь у нас есть стандартно есть Ubuntu такой базовый имидж но через Потом три веб-сервером набирает большую популярность далее У нас отличный базы данных есть и так далее их не так много но тем не менее и здесь Можете видеть что у нас некоторые контейнеры они вот здесь написано Ну давайте мы создадим быстренько какой контейнер допустим у нас будет далее нам стоит создать дать вернее контейнеру имя это будет майншен X далее мы указываем

нас будет далее нам стоит создать дать вернее контейнеру имя это будет майншен X далее мы указываем Network Пускай это будет Bridge и далее здесь мы нажмем диплоид контейна тогда он создаст там немножко дефолтные настройки сделать но мы нажмем Advanced options и сделаем порт mapping Итак мы видим что с левой стороны у нас настройки Хоста и давай дадим порт на хостел нас будет 81 А в контейнер будет прибрасываться в порт 80 это все автоматическое потому что templay то есть здесь уже все

будет прибрасываться в порт 80 это все автоматическое потому что templay то есть здесь уже все преднастроено и порт 43 будет 4431 Вот так далее можно сделать Volume mapping либо авто автомат здесь именно смонтировать директорию на Хосте В контейнер просто хотим посмотреть как работает контейнер запустим один ничего больше нажимаем это занимает зависимости от контейнера немножко больше немножко Меньше времени готово и у нас сразу перебрасывает в контейнер и мы видим что My ngx вот он запустился

времени готово и у нас сразу перебрасывает в контейнер и мы видим что My ngx вот он запустился наши порты которые мы указывали если бы мы не указали никаких портов то у нас бы показали здесь какие-нибудь Рандомные порты на Хосе тоже свободные были Это хорошо если мы используем прокси сервер перед этим и автоматизации для этого то не нужно думать Какие порты там открыты закрыты но мы сейчас хотим четко указать Какие порты Итак давайте посмотрим работает ли ngx Итак Нам нужно перейти на такой же

четко указать Какие порты Итак давайте посмотрим работает ли ngx Итак Нам нужно перейти на такой же сайт этой же адрес поэтому адресу только на порт допустим 81 Welcome to Engine X прекрасно все работает все хорошо Ну и Давайте еще посмотрим такую штуку что в темплейтах не всегда все работает сразу и нужно немножко больше установить чем надо Ну вот на примере ГОСТ платформа для блогеров там вы можете делать блоге это такой веб-сервер но есть нажимаем Давайте хвост создадим также будет Bridge

можете делать блоге это такой веб-сервер но есть нажимаем Давайте хвост создадим также будет Bridge добавляем options порт вставляем таким же самым 2 3 6 8 ничего делать не будем больше кастомного ничего нету оставляем все авто лейпци лейблы тоже не будет ничего указывать не будем просто нажмем посмотрим что будет готово ГОСТ нас скачался установился и Давайте посмотрим работает ли он на спорт 2 3 6 8 адрес 2 3 6 8 переходим Пока ничего не происходит Давайте посмотрим Вот именно что это такое

3 6 8 адрес 2 3 6 8 переходим Пока ничего не происходит Давайте посмотрим Вот именно что это такое Итак Первое это Лог что мы можем посмотреть что происходит с контейнером далее У нас информация у нас потом отображается можем сразу запустить консоли здесь же но нас интересует в данном случае это Локс если мы нажмем Локс что мы видим здесь и налоги нашего контейнера и сразу мы можем определить что у нас ошибка он не может Достучаться до порта 3306 А мы знаем что порт 3306 это база данных То есть

у нас ошибка он не может Достучаться до порта 3306 А мы знаем что порт 3306 это база данных То есть она не запущена нужно Здесь данном случае указывать другие контейнеры указывать переменные 8 смотреть как все настраивается это не всегда бывает очень хорошо написаны но очень классная вещь которую можно использовать темплейтах это кастом Темп если вам очень часто нужно создавать какие-то веб-сервер допустим и вас какая-то специфическая конфигурация для этого если вы хотите дать пользователям

допустим и вас какая-то специфическая конфигурация для этого если вы хотите дать пользователям вашей фирме доступ к вашим темплейтам Чтобы проще было быстрее было установка то очень хорошо можно здесь это сохранять Ну это дело другое Давайте перейдем именно контейнер это контейнер мы можем убить выделяем его здесь и удаляем не постоянные данные нам они нужны все готово все удалилось дались мы посмотрим Image Мы также видим что у нас остается Мы также его можем удалить нам не нужен всем готово

Image Мы также видим что у нас остается Мы также его можем удалить нам не нужен всем готово все удалилось переходим снова в контейнер и Давайте создадим один контейнер далее У нас также по-прежнему давайте мы создадим контейнер с эпоччи 2 давайте это будет два далее нам стоит указать мы ничего другого не добавляли но как я говорил если вы используете то вы можете здесь потом будете выбрать Откуда будет скачиваться ваш контейнер Image можно поискать на Дока Хаби наш там будет два ищем и вот нас

будет скачиваться ваш контейнер Image можно поискать на Дока Хаби наш там будет два ищем и вот нас отображается сразу поиск и берем этот команда берем вот это вот часть которая нам нужна для скачивания переходим снова указываем часть всегда скачивать пул имидж Да всегда скачивать веб-хуп мы создать не можем это для допустим Microsoft teams чтобы вам автоматически приходили оповещение спускаемся ниже даже можем указать auto.ru если мы ставим контейнер он будет убит автоматическим и Самое

ниже даже можем указать auto.ru если мы ставим контейнер он будет убит автоматическим и Самое интересное начинается внизу здесь у нас большие большое количество настроек которые мы можем сделать но одну вещь и пропустил это настройка портов Итак нам нужно добавить порты Значит на хостел у нас занят порт 81 для 52 сделаем Ford 82 он будет пробраться в контейнер вот здесь видите хвост потом контейнер на порт 80 стандартный порт ничего выдумывать не будем далее спускаемся ниже и здесь уже

контейнер на порт 80 стандартный порт ничего выдумывать не будем далее спускаемся ниже и здесь уже начинается всякие тонкие настройки это команды то есть мы здесь можно написать команду если мы хотим при запуском контейнера выдавать их там Старт контейна можем сказать ть ничего то же самое если мы хотим использовать нашу нашей странички наши какие-то данные веб-данные можно сделать также это создать Вот либо сделать бинт директорию на Хосте мы сможем при монтировать В контейнер нам это ничего

Вот либо сделать бинт директорию на Хосте мы сможем при монтировать В контейнер нам это ничего не нужно мы просто запустим посмотрим что это будет networks то же самое здесь тонкие настройки по networko можно Хоста им добавить Можно конкретно ip-адрес добавить версии 4 версии 6 DNS настройки Классно очень удобно и нужно очень много кода писать когда вы создаете это все вручную переменная знаете что каждый только контейнер определенные перемены которые можно изменять допустим время которое

что каждый только контейнер определенные перемены которые можно изменять допустим время которое отображает контейнер чтобы сделали для партнера вот это все делается здесь лейблы Также можно это все добавить То есть все настройки те что мы писали в силой только силой командной строке все можно сделать здесь делать и ходить нет мы просто здесь Смотрим как работать под тренер И много углубляться там опять идет скачивание и будет создаваться сам контейнер подождем небольшое время все готово печь 2

опять идет скачивание и будет создаваться сам контейнер подождем небольшое время все готово печь 2 запустился у нас спорт открыт 82 Давайте посмотрим как это все работает 82 будут у нас работает Это Давайте еще посмотрим что остальные значки нам показывают и вот допустим Information inspect ничего другого как мы в командной строке вводили Дока inspect и указывали ID контейнера либо имя контейнера мы здесь видим все вещи которые там по умолчанию при создании контейнера были добавлены информации

мы здесь видим все вещи которые там по умолчанию при создании контейнера были добавлены информации Понятно Мы до этого все видели статистика сколько использует памяти сколько опций и так далее удобная вещь Кстати если вам нужно делать какой-то контейнера и смотреть что же так очень грузит то здесь это все можно увидеть и часто используемые вещи это консоль здесь мы указываем какую команду Мы хотим запустить это bin Bash иногда в контейнерах и указываем пользователь который будет иметь доступ

запустить это bin Bash иногда в контейнерах и указываем пользователь который будет иметь доступ контейнеру иногда бывают другие это редкость мы находимся в контейнеры здесь немного но тем не менее Давайте сразу там индекс HTML поменяем индекс выключим и создадим новый индекс Может не всегда быть попробуем на но не найденный Ну тогда просто мы сделаем так эхо тест OK и добавим это все в индекс HTML все у нас есть индекс HTML и Давайте посмотрим что здесь обновляем страницу А все работает 8

HTML все у нас есть индекс HTML и Давайте посмотрим что здесь обновляем страницу А все работает 8 прекрасно мы разобрались как Надеюсь было понятно как создать контейнеры много очень настроек есть но абсолютно не идентичны тому что вы добавляете в консоли очень многие конечно умеет пользоваться контейнером но не знает как пользоваться силой но кто знает как пользоваться командной строкой для запуска и управление контейнерами тем очень легко будет разобраться в партнере одна вещь еще интересная

и управление контейнерами тем очень легко будет разобраться в партнере одна вещь еще интересная очень который я абсолютно всегда использую это секс что такое секс это те же самые дога компас файлы и Давайте посмотрим вкратце как они работают это очень удобно Вы можете всегда там сохранять файлы где угодно они будут вас статические только компост и давайте все-таки сделаем наш стек это понятно было и далее У нас есть определенные окошко которое нужно заполнить имя и давайте мы посмотрим на

было и далее У нас есть определенные окошко которое нужно заполнить имя и давайте мы посмотрим на примере Давайте стандарта Next Cloud далее У нас есть три четыре Даже варианта Как можно создать наш стек это выпадет здесь мы вставляем на что compost файл содержимое мы можем загрузить только compost файл также можем скачать его с репозитории это очень удобно для автоматизации если допустим автоматическая апдейту Если вы изменили только тренер скачать этот дураком пост файл изменит который здесь

апдейту Если вы изменили только тренер скачать этот дураком пост файл изменит который здесь работает Нужно быть немножко осторожным что если вы Сделать какую-то ошибку в каком по файле и Партнер автоматически сделать то может быть такое что просто ваш контейнер не заработает если какая-то ошибка есть мы будем использовать самый стартовый это удобно потому что можно 10 сразу все изменить и Давайте посмотрим nexploud вот страничка официальным если у нас есть пример Да вот у нас есть только Post

посмотрим nexploud вот страничка официальным если у нас есть пример Да вот у нас есть только Post файл это все мы выделяем копируем и вставляем в Партенит так посмотрим что нам нужно будет здесь изменить у нас наблюдается мы мы с вами все без изменения все будут по умолчанию далее нам нужно добавить это пароль для рта будет такой же пароль только root в конце и пароль для базы данных пускай будет ну тестовая версия так не делайте Если вы хотите продакшн использовать но мы для того чтобы

будет ну тестовая версия так не делайте Если вы хотите продакшн использовать но мы для того чтобы посмотреть будет использоваться далее У нас порты 880 пробрасывается Хоста пробраться порт 80 контейнер 88 нас не занят так что все нормально и даже ниже Здесь тоже можем добавить переменные но все переменные у нас указано здесь все нормально нам это достаточно всё нажимаем deploy ждем пока скачается наши два контейнера здесь у нас есть контейнер db это Мария тебе и сама само приложение Imagine

наши два контейнера здесь у нас есть контейнер db это Мария тебе и сама само приложение Imagine ждем пока это все скачается Единственное что хочешь сказать не хватает конечно здесь много до которые мы увидим контроле что там скачивается разархивируется тепло и цель всякое такое здесь мы этого не видим Мы видим просто что идет процесс какой-то и потом кажется Опа все запустилась Ну давайте подождем Все Готово Вот стек здесь есть посмотрим в контейнеры и видим что у нас есть также два контейнера

Все Готово Вот стек здесь есть посмотрим в контейнеры и видим что у нас есть также два контейнера добавилось это тебе один здесь отображает сразу же какие мы же используются для этого всего если мы указали тогда у нас бы здесь отобразилось именно то что мы указали так оно есть далее приложение само доступно по адресу сервера и порт 88 работали наши 80 все netcalut у нас работает мы дальше не будем это рассматривать как работает контейнер как все создается Там намного больше всяких переменных

это рассматривать как работает контейнер как все создается Там намного больше всяких переменных нужно указывать переменных чтобы он был стабильно работал чтобы сертификаты дали Здесь тема идет о протеина у нас это все работает Давайте запустим еще один стек давайте это будет хвост то что у нас была ошибка Давайте перешли мы на страницу на Дока хобби и ход спускать ниже и у нас есть Да вот только компост файл опять копируем это вот все говорю же это всего лишь пример мы никаких особо настроек

компост файл опять копируем это вот все говорю же это всего лишь пример мы никаких особо настроек сделал не будем идем с таким снова создаем стек также назовем вставляем и убираем немножечко и так на спорт 80 80 на задник сожалению нашим Next используется поэтому постави м 881 хотя мы можем просто прокинуть стандартный порт 2368 так и сделаем переменные говорит что смотрите документацию у нас адрес 10 40 22 Порт 2 3 6 8 это все мы убираем в принципе все готово такая маленький нас только компот

10 40 22 Порт 2 3 6 8 это все мы убираем в принципе все готово такая маленький нас только компот получился Ну Давайте попробуем запустим что с этого получится запустится ли все стек у нас запустился чехол нас 83 стакантены которые запустился до этого кстати хочу заметить что Партнер мы ничего с ним делать не можем потому что сам Партнер А с этим мы их можем допустим удалить контейнер К сожалению ничего не можем это лимит ответит Control limite здесь есть Давайте перейдем в контейнеры У нас есть

не можем это лимит ответит Control limite здесь есть Давайте перейдем в контейнеры У нас есть опять-таки чехол база данных и сам сама аппликация сам приложение вот все отобразилось у нас 2368 стоила подождать пока он полностью загрузится это бывает такое есть мы влоги посмотрим то здесь длится некоторое время это все нужно базу данных заполнить таблицами изначально не Социальная установка произошла 2 3 6 8 переходим на сайт 2368 и у нас работает это все мы видим что чехол который мы хотели

2 3 6 8 переходим на сайт 2368 и у нас работает это все мы видим что чехол который мы хотели установить stamplate нам не хватало база данных сейчас есть все это работает хорошо мы посмотрели как это запускается как у нас работает стыки как контейнеры Я советую использовать всегда стеки Неважно как вы там добавляете строки Это впади то лучше всего конечно с помощью репозитории Но это ваше дело и еще одно хотел вам показать это то есть мы сейчас использовали локальный доктор контейнер Но если у

еще одно хотел вам показать это то есть мы сейчас использовали локальный доктор контейнер Но если у вас несколько серверов что тогда делать на каждый ставить не очень удобно потому что запоминать адреса это все намного удобнее Когда у вас один Партнер управляет всеми контейнерами всеми докер серверами работают токеры и Давайте посмотрим как нужен можно добавить дополнительные Итак переходим естественно добавляем опять-таки У нас есть далее и будем использовать Агент здесь снизу показывается что

добавляем опять-таки У нас есть далее и будем использовать Агент здесь снизу показывается что нам нужно запустить на удаленном сервере чтобы его можно было подключить Давайте переходим на другой сервер и так Я подготовил сервер работает докер смотрим До капец контейнеров здесь нету 2 имиджа есть это Image My Engine X и registream Давайте запустим эту команду которая нам предлагает партейнер и скачивание портретного Агента готово Теперь смотрим работает ли Агент до капец Все работает все

и скачивание портретного Агента готово Теперь смотрим работает ли Агент до капец Все работает все прекрасно порт 9001 это также можно изменить это не обязательно должен быть но переходим снова в Партнер здесь указываем имя это будет у нас дока сервера 2 и указываем 10 10 я уже указывал все смотрим и у нас уже не только локоть но докас сервер 2 Давайте посмотрим что у нас есть у нас есть один стек только тестировал далее контейнеры У нас есть которые мы там установили и так далее еще интересно

только тестировал далее контейнеры У нас есть которые мы там установили и так далее еще интересно мы когда делали Я когда дело видео Давайте его также добавим подключаемся к серверам и снова Давайте запустим команду которая то это нам показывалось 2ment и добавим еще один до костентола он по-прежнему копируем 5 таких команду вставляем далее все у нас работает Если мы здесь посмотрим Да у нас здесь много чего создавалась но тем не менее Давайте посмотрим теперь этого сервера 40 24 имя только

много чего создавалась но тем не менее Давайте посмотрим теперь этого сервера 40 24 имя только сервер один 01 далее IP адрес и порт 9000 такой же Всё Давайте перейдем в home и мы видим нас много очень интересная штука что мы эти наши серверы мы можем объединить в группы тогда мы проще сможем управлять этим всем но это другая тема это надолго Может затянуться поэтому Давайте посмотрим что у нас есть на сервере первом который давно уже создан вот мы видим что 33 ими же есть у нас 10 нет уроков

есть на сервере первом который давно уже создан вот мы видим что 33 ими же есть у нас 10 нет уроков есть 12 вольвов мы здесь все можем этим управлять контейнер Вы можете также установить потом управлять тем что у вас уже есть вам не обязательно самого начала здесь все создавать он управляет даже уже созданный контейнерами получился показать вам и объяснить для чего нужен контейнер насколько он хороший насколько упрощает жизнь с доктором Спасибо большое за внимание за просмотр видео Всем пока

Traefik V2. Reverse Proxy и LoadBalancer для контейнеров в динамическом окружении.

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

на этом видео я вам покажу реверс прокси с довольно забавным логом под названием Traffic Давайте разберемся чем нам нужно вообще реестр прокси зачем это делаем Итак если мы не используем ревер спросим допустим у нас есть два веб-сервиса Да на основе печи на основе либо два других тв-ресурса неважно наши пользователи которые хотят чтобы получить этих ресурсов они отправляют запросы непосредственно найти сервисы и в данном случае если мы не используем нам нужна для каждого сервиса делать

найти сервисы и в данном случае если мы не используем нам нужна для каждого сервиса делать отдельные конфигурации что отдельная конфигурация само собой но также глобальные отдельные конфигурации серверов далее нам нужно делать отдельные записи в DNS также на каждом из сервера нам нужно делать свои сертификаты СС сертификаты нужно их постоянно обновлять следить за тем чтобы они работали далее нужно также управлять защитой доступа и также возникает сложность при балансировке нагрузки если мы

нужно также управлять защитой доступа и также возникает сложность при балансировке нагрузки если мы используем реверс проксима что в данном случае происходит допустим у нас есть теперь уже 4web сервиса и мы используем трафик в данном случае пользователь отправляет запросы сразу же на трафик То есть у нас есть запись DNS где только указаны адрес трафика далее трафик перенаправляет этот запрос на другие веб-серы зависимости от того На какой адрес пришел запрос либо с помощью других там правил

другие веб-серы зависимости от того На какой адрес пришел запрос либо с помощью других там правил Какие вы укажете этому потом еще посмотрим и давайте рассмотрим преимущество использования это мы можем делать глобальной конфигурации То есть все делается на трафике глобально и все нам не нужно каждый сервис отдельно как-то настраивать конфигурировать и так далее Все можно делать Центрально это очень удобно далее У нас есть центра управление СССР сертификатами нам не нужно следить на каждом из

удобно далее У нас есть центра управление СССР сертификатами нам не нужно следить на каждом из сервисов что у нас сертификат рабочий либо нерабочий его нужно обновлять и так далее Все делается также Центрально даже автоматически то есть трафик для вас это все может делать он может обнулять сертификат и так далее мы можем делать глобальные настройки доступа то есть глобально сказать все никакие запросы какой-то страны допустим какие-то IP адресов Мы хотим принимать и все вы делаете один раз одну

какой-то страны допустим какие-то IP адресов Мы хотим принимать и все вы делаете один раз одну настройку и все для всех сервисов это все работает и также мы можем сделать с помощью трафика Раньше я показывал другой прокси менеджер под названием Давайте посмотрим разницу между двумя решениями Итак мы можем перебраться запросы на физический сервер на виртуальную машину на любое устройство физическое либо виртуальное далее мы можем перебраться просто на токер контейнеры но есть некоторые нюансы и

либо виртуальное далее мы можем перебраться просто на токер контейнеры но есть некоторые нюансы и Давайте посмотрим сын преимуществом это проста настройки Вы заходите в графическую оболочку настраивайте куда будет перенаправляться запросы и все в принципе то Добавляйтесь сертификат прекрасно работает далее это есть возможность подключать удаленные Хосты да то есть у вас ngx спросим менеджер может работать на одном Хосте и вы можете перенаправлять запросы абсолютно другие Хосты на другие

может работать на одном Хосте и вы можете перенаправлять запросы абсолютно другие Хосты на другие кластеры и так далее но есть большой нюанс это ограниченная автоматизация и также практически нет динамики То есть Вам нужно постоянно вручную все настраивать все подправлять Да можно как это делать Это командами но тем не менее ограничения есть и трафик мы можем перенаправлять запросы в трафике вот докер можем докас-фом можем в киберне Почему я выделил эти три вещи именно такие вот квадратики

вот докер можем докас-фом можем в киберне Почему я выделил эти три вещи именно такие вот квадратики отдельно сейчас мы разберем плюсы трафик это отличное решение для тока только также присутствует полная автоматизация динамика мы это посмотрим уже на примере есть также нюансы это сложность настройки у вас нет графической оболочки для настройки и также минусом является то что работает только в пределах кластера то есть мы задали кластер доказм либо кабинет из 20 30 хостов неважно трафик сделан

кластера то есть мы задали кластер доказм либо кабинет из 20 30 хостов неважно трафик сделан для того чтобы передавать запросы именно в пределах этих кластеров Конечно можно реализовать что трафик будет запросы на внешний сервера Но тогда у вас пропадает полная динамика и автоматизация Давайте много не разговаривать и сразу перейдем к настройке трафика и посмотрим на примере как он работает и как его подключить к доктору я буду использовать обычный докер мы будем отправлять запросы с трафика в

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

делать и сразу же здесь слева есть как бы начать мы будем использовать докер для тестов то есть мы трафик можем подключить как я говорил докер cubannets принципе все виды кабернета практически и есть ниже здесь показываю примеры Как запустить первые контейнеры как их подключить к трафику как перенаправить трафик Итак давайте начнем с установки травик нужно устанавливать докер контейнер Поэтому нам необходимо установить докер я буду использовать тестовую машинку и докер у меня здесь установлен

необходимо установить докер я буду использовать тестовую машинку и докер у меня здесь установлен но вы можете установить докер на вашу инстанцию вот такой командой это будет скачет скрипт его потом запустить с этой командой будет установлен сам докер и только после установки Докера нужно проверить версию именно версию только компот поэтому пишем только [музыка] и у нас версия 2.18 очень важно что версия было два и выше поскольку трафик перенаправляет запросы по доминому имени то есть Смотря

что версия было два и выше поскольку трафик перенаправляет запросы по доминому имени то есть Смотря какой запрос мы отправили на наш сервер либо какой порт спрашиваем Ты просто необходимо сделать запись в DNS Да я это использую сейчас публичный сервер То есть у меня есть виртуальная машина которая имеет публичный ip-адрес давайте сделаем запись в DNS нашего видео Вот моя запись То есть все под доменные имена которые там допустим бла бла точка демо точка они будут перенаправляться Вот на этот IP

имена которые там допустим бла бла точка демо точка они будут перенаправляться Вот на этот IP адрес то есть мы там уже на нем будем использовать трафик все то же самое если вы будете использовать Также дома трафик вам для допустим те же сертификатов нужна публичная запись в DNS То есть это может быть динамический DNS и так далее но DNS нужно использовать обязательно Ладно возвращаемся обратно и будем устанавливать Давайте создадим папку это мы будем с ним работать [музыка] в этой папке мы будем

устанавливать Давайте создадим папку это мы будем с ним работать [музыка] в этой папке мы будем запускать наш трафик мы создаем Файлик до каком позже И если мы посмотрим на официальный сайт то здесь в быстром запуске для Докера есть уже готовые компост Файлик мы это все копируем и просто вставляем пока что просто без изменений Просто алем мы запустим его чтобы он работал Итак у нас в этом файлике есть тот имидж которому не запускать мы не запускать трафик версии 210 также есть ошибка команда

есть тот имидж которому не запускать мы не запускать трафик версии 210 также есть ошибка команда будет запускаться API in Secure то есть будет API без шифрования какого-либо я вам сейчас покажу что это означает и будет использовать провайдер Дока да то есть другой провайдер или что-то другое то соответственно будет другой провайдер далее Мы открываем порты порт 80 http и порт 8080 для We pui то есть мы сейчас увидим какой-то dashboat и также нам нужно пробросить чтобы наш трафик видел также

есть мы сейчас увидим какой-то dashboat и также нам нужно пробросить чтобы наш трафик видел также другие контейнеры которые запущены на данном сервере Поэтому нужно просит сокет токер который работает на локальной машине Так это все готово Давайте запустим только доказ и просто об все трек запустился хорошо и как Мы помним мы делали запись в DNS Давайте попробуем зайти на dashboard для трафика трафик демо ровно и очень важно указать порт 8080 все Как видите Мы зашли на трафик мы посмотрим что

демо ровно и очень важно указать порт 8080 все Как видите Мы зашли на трафик мы посмотрим что такое рутеры сервисы и Мидл вас и интрипоэйс сразу видим что у нас два порта открыты это 80 и 880 как Мы помним Мы в докер компост указывали что порты 80 и 80 80 у нас открыто далее спуск ниже у нас здесь http Мы также Можем пробрасывать tcp потом в конце видео покажу что такое как этим пользоваться и также для некоторых сервисов Это очень полезно здесь мы будем видеть все ошибки и так далее но ничего

для некоторых сервисов Это очень полезно здесь мы будем видеть все ошибки и так далее но ничего конфигурировать не сможем это чисто для того чтобы посмотреть что происходит и также некоторые логике можно здесь прочитать вся конфигурация происходит для других контейнеров и давайте мы сейчас это все и посмотрим так давайте снова перейдем в наш и мои редактируем только компас немножко дадим ему получше уберем эти все комментарии нам они в принципе не нужны сейчас на только две команды но будущими

уберем эти все комментарии нам они в принципе не нужны сейчас на только две команды но будущими станет намного больше Поэтому лучше всего для чтения этих команд и лучше Авито мы будем писать их один под другим это отдельную строчку и очень важно следить за количеством не табы а именно пробелы потому что это ямы файл для того чтобы начать использовать трафик очень рекомендуется использовать чтобы мы видели все ошибки и все что происходит с трафиком когда мы черного контейнера и так далее поэтому

видели все ошибки и все что происходит с трафиком когда мы черного контейнера и так далее поэтому мы добавляем новую запись вот таким образом Давайте запустим и посмотрим что произойдет все команды я вам потом покажу где их находить [музыка] и снова запускаем Это очень полезно если у вас возникает какие-то ошибки так оставлю слова контейнер и Давайте добавим сеть которая будет управляться с помощью трафика который будет помещаться в эту сеть сможет перебрасывать на них запросы и добавляем

помощью трафика который будет помещаться в эту сеть сможет перебрасывать на них запросы и добавляем запись вот так это выглядит если у вас эта сеть не создана до этого ее нужно будет создать Давайте запустим наш Вот видите здесь сказали что сеть только на этого Create и название сети все у нас есть создано И теперь мы можем запустить наш контейнер все у нас контейнер запустились у нас самый обычный конфигурация нашего трафика есть и Давайте при все же что-то запустим чтобы у нас перебрасывали

конфигурация нашего трафика есть и Давайте при все же что-то запустим чтобы у нас перебрасывали запросы на наш сервис я предлагаю сделать инженекс обычный веб-сервер без какие-то либо настройка особых просто обычный Давайте снова здесь даем нашу территорию где нас трафик работает Дока вот наша папка для трафика и Давайте создадим одну папку Где будет создаваться Наши все до как после других сервисов создадим папку Давайте будет Заходим в папку и будем создавать теперь только файл для создаем

создадим папку Давайте будет Заходим в папку и будем создавать теперь только файл для создаем его [музыка] вот так выглядит обычная конфигурация для запуска GX то есть без каких-либо настроек и всего такого но нам нужно добавить также чтобы у нас запускался контейнер в сети proxynet в котором работает трафик поэтому добавляем netforce И еще нам нужно указать некоторые параметры которые нужно передать для трафика чтобы трафик знал по какому запросу перенаправлять наши квесты наши запросы именно

для трафика чтобы трафик знал по какому запросу перенаправлять наши квесты наши запросы именно на этот контейнер Нам нужен для каждого контейнера указывать По какому уровню адресу будет же X поэтому мы добавляем лейблы и добавляем теперь необходимо что это означает то что мы создаем один как бы роутер Да под названием Вот это имя Вы можете указывать какой угодно далее мы указываем что хост будет все запросы будут идти сразу на этот сервер большой а потом уже этот контейнер сохраняем выходим и

все запросы будут идти сразу на этот сервер большой а потом уже этот контейнер сохраняем выходим и запустим проверим как это работает вообще заработает и Давайте запустим докапус минус F мы указываем файл потому что название файла Engine x минус compose а не только compost и пишем об так ошибка синтаксисе лейблы относятся к сервису Engine X вот так хорошо все сохраняем выходим и снова пытаемся запустить Да все запускается все у нас есть запуск у нас также есть записи в нашем трафике и Давайте

Да все запускается все у нас есть запуск у нас также есть записи в нашем трафике и Давайте снова переходим в браузер указываем antion X точка ты мой род.дое и видим что у нас отображается enging то есть наша веб-сервы запустился но бывает такое что у вас появляется там ошибка в этом случае желательно Остановите контейнер Engine X Остановите контейнер Traffic удалить эти контейнеры и заново запустить сначала трафик потом Engine X Подождите одну минутку чтобы трек настроился летом секунд 30 и

сначала трафик потом Engine X Подождите одну минутку чтобы трек настроился летом секунд 30 и Попробуйте заново также очень хороший способ проверить бывает кое-что некоторые веб-сайты вернее браузере кэшируют ответы поэтому нажимаете F12 и узнать галочку отключить кэш и с помощью которого посмотрим на наш dashboard у нас добавился http у нас также было с 1 сервис Вот то есть мы здесь можем увидеть нашему также мы можем выйти на сервисы здесь Как видите Да смаз если есть ошибка тоже пишется

нашему также мы можем выйти на сервисы здесь Как видите Да смаз если есть ошибка тоже пишется почему это ошибка появилась И вот здесь указаны все лейблы которые можно указать для Докера Мы видим что их довольно таки немало но здесь просто весь список приведен Да объяснений все остальное находится здесь по менюшкам поиски все это можно найти но двигаемся дальше трафик автоматически включен каждому контейнер который мы запускаем это не всегда удобно и желательно это все отключат Давайте оставим

контейнер который мы запускаем это не всегда удобно и желательно это все отключат Давайте оставим наш трафик и Давайте оставим наш изменим настройки трафика только compose Давайте немножко добавим сделаем его немножко покрасивее нужно добавить команды того чтобы отключить автоматическую регистрацию контейнеров добавляем следующий параметры и может обойти параметры указывает что трафик работает только в прокси нет то есть в определенной сети если будут созданы другие контейнеры в других сетях он

в прокси нет то есть в определенной сети если будут созданы другие контейнеры в других сетях он туда смотреть Просто не будет Давайте запустим снова наш трафик и снова наши посмотрим что будет и перед этим Давайте удалим все таки Наши были созданы они не удалились мы просто остановили И жадно их удалить дока идем по названию этот трафик и инженекс готово и запускаем заново трафик тем мы видим наш Лог и запускаем glex Так давайте снова перейдем в браузер и перезагрузим страницу видите у нас

наш Лог и запускаем glex Так давайте снова перейдем в браузер и перезагрузим страницу видите у нас ничего не работает поэтому мы оставляем наш Engine X и снова переходим побольше и снова переходим в сторону и добавим следующий лейбл Что включает у нас наш трафик называется лейбл Traffic enable Включи мне его сохраняем выходим и Давайте запустим снова компот переходим в браузер будем делать это новое при запускаем страницу и видите у нас все работает то есть включили снова наш Engine X контейнер

при запускаем страницу и видите у нас все работает то есть включили снова наш Engine X контейнер к трафику если мы посмотрим снова наш трафик на конфигурацию и мы видели количество конфигурации которые мы можем сделать то вот эти вот все вещи мы можем вынести вам файл сделать такую конфигурацию и снова если мы перейдем на официальную документацию какую-то настройку то увидите три вкладки обычно это файлы то мы и силой мы используем сейчас до этого мы используем всегда силой то есть мы выделяем

файлы то мы и силой мы используем сейчас до этого мы используем всегда силой то есть мы выделяем команду только Допустим мы это указывали в конфигурации в кавычках и это все работает также это все конфигурации мы можем вынести в отдельный файл абы для больших конфигураций это очень удобно и советуется именно так делать Вот с помощью ямы файла то что вы не путались если мы посмотрим синтаксис то здесь будет провайдер двоеточие Дока двоеточие и далее после значения да Или какое-то значение там

здесь будет провайдер двоеточие Дока двоеточие и далее после значения да Или какое-то значение там нужно указать будет силой это выглядит провайдерс точка Дока равно и так далее то здесь у нас будет Допустим True стоять вот такие вот вещи можно делать Мы вынесем вот эту всю конфигурацию в наш файл А здесь мы все отключим так это я скопируем потом это все отключим им создаем новый файл Давайте назовем трафик ему [музыка] добавляем сюда и давайте это все перезапишем так вот так будет выглядеть

трафик ему [музыка] добавляем сюда и давайте это все перезапишем так вот так будет выглядеть наш файл то есть точка Вот так же здесь опитовая точечку далее я переместил провайдер все значения провайдеров будет находиться вот так выглядит давайте это все мы уберем сохраняем выходим у нас появляется файл traffic.яму и теперь нужно это все пробросить Наш кот отель который будет запускаться поэтому и ориентируем снова наш докапосфелл Давайте эти команды Мы со комментируем чтобы не запускались и

и ориентируем снова наш докапосфелл Давайте эти команды Мы со комментируем чтобы не запускались и далее нам нужно добавить волью то есть в нашей этой территории Где мы сейчас находимся мы добавим трафик яму тот файл который Мы создали и мы против него в контейнер трафик яму из разрешением то есть сам трафик не сможет делать никаких изменений в этом файле как бы это немножко безопасность и Давайте снова запустим это все дело посмотрим как это работает Все мы запустили снова запустим наш

Давайте снова запустим это все дело посмотрим как это работает Все мы запустили снова запустим наш переходим браузер обновляем страницу Как видите у нас все работает снова можем для наглядности кэш и снова обновить страницу видите все работает хорошо Еще одна вещь кинострой которую мы делаем в настройках трафика вот в Дока компост либо фале Traffic Yamal и так далее Это называется статистическая конфигурация то есть так конфигурация которая действует для всех контейнер который мы потом создаем

конфигурация то есть так конфигурация которая действует для всех контейнер который мы потом создаем те изменения либо те лейблы которые мы прописываем в конфигурации к определенным догам контейнерам Да вот как здесь fengine X мы писали вот это вот конфигурация для трафика это будет динамическая конфигурация То есть те параметры которые мы хотим изменить в трафике нет свои статические вещи а контейнер который мы запускаем он может какие-то вещи изменять либо подправлять под себя для

вещи а контейнер который мы запускаем он может какие-то вещи изменять либо подправлять под себя для автоматизации для динамических окружений это самое лучшее что может быть теперь вернем это все обратно я буду делать все в одном файле Надеюсь вы поняли как работает яму конфигурация но чтобы для наглядности я буду делать все в одном файле и принципе на многих сайтах вы найдете именно информацию по таким записям валим Мы также убираем нам также не нужен сохраним выходим Теперь у нас есть другая

таким записям валим Мы также убираем нам также не нужен сохраним выходим Теперь у нас есть другая проблема у нас все сервисы они не защищенные то есть мы идем по протоколу http + Track despot он сейчас доступен абсолютно всем Да кто пойдет на данный адрес они могут увидеть все что меня здесь происходит все не защищено сейчас то же самое наш также имеет протокол его никак не защищен Да у нас нет никакого сертификата и давайте это сейчас мы все исправим консоль и Заходим в настройки для трафика в

сертификата и давайте это сейчас мы все исправим консоль и Заходим в настройки для трафика в первую очередь поэтому добавляем порт 443 [музыка] далее нам нужно добавить еще в команды следующий параметры это entry Points и также Описать как мы должны получать сертификаты ssl давайте сделаем сейчас красиво сделаем комментарии мы добавляем два интригпоинта то есть порт 80 это http и 443 вот эти вот название Вы можете делать как год допустим просто Web либо многих делают секс и так далее То есть

название Вы можете делать как год допустим просто Web либо многих делают секс и так далее То есть это все можно кастомизировать но также это потом стоит указывать в контейнер который вы запускаете далее делаем настройка для вот так выглядит настройка для получения бесплатной сертификатов от Lesson Script то есть мы указываем имя вернее нашему рессору это будет L lessonscript и также очень важно Это посмотреть на Челлендж где мы указываем как мы хотим верифицировать наши сертификаты то есть что

посмотреть на Челлендж где мы указываем как мы хотим верифицировать наши сертификаты то есть что действительно наш домен принадлежит нам данном случае я буду использовать новые также можете использовать другие челленджи которые указаны в официальной документации все зависит от вашего окружения у нас есть и также 1 из Челлендж далее нам стоит указать ему для того чтобы определили сообщение если у нас вдруг сертификат не очень работает так далее и где будет сохраняться наши настройки это слышал

нас вдруг сертификат не очень работает так далее и где будет сохраняться наши настройки это слышал скрипт далее нам нужно добавить также директорию куда будет сохраняться наш сертификаты Я добавляю директорию латинский пробраться её в контейнер Теперь мы это сохраняем и выходим и Давайте заново запустим готово и запускаем теперь всё есть и вот мы делать сертификат и Давайте посмотрим что происходит у нас в браузере так сертификат вроде уже получили обновляем страницу Как видим пока что

происходит у нас в браузере так сертификат вроде уже получили обновляем страницу Как видим пока что изменения никаких нету Давайте для проверки еще отключим кэш но если мы сделаем следующее если Мы отправимся в https сделаем запрос то мы видим что у нас защищенное соединение Connection Skill да то есть у нас сертификат все сработало но как вы заметили нам нужно было вручную указать что мы хотим отправляться именно по защищенному протоколу чтоб это избежать чтобы она автоматически

что мы хотим отправляться именно по защищенному протоколу чтоб это избежать чтобы она автоматически перебрасывалась Поэтому нужно сделать оставляем слово наш трафик переходим в настройку compose и добавляем Direction Давайте добавим и вот сейчас настройка что мы делаем перенаправление все Запрос который приходит на http мы перенаправляем автоматически на https все хорошо сохраняем выходим и снова запускаем Берем с нажимаем это видео у нас автоматически перебрасывает rodirection 301

и снова запускаем Берем с нажимаем это видео у нас автоматически перебрасывает rodirection 301 перебрасывает автоматически на https отлично Все работает но у нас также остается проблема Да у нас Desh pota он не защищенный и он все же недоступен пока что по https так как у нас есть пульса отдельный порт 88 давайте это в срочном порядке сделаем его защищенным снова переходим конфигурацию убираем сразу порт 880 у нас стоит 10 API insu Мы хотим только защищенные далее нам также стоит теперь указать

порт 880 у нас стоит 10 API insu Мы хотим только защищенные далее нам также стоит теперь указать что мы включаем dashbot и далее нам стоит добавить также лейблы в наш трафик мы сможем обезопасить что нам еще нужно сделать мы здесь писали что мы хотим делать по пользователю пароль для этого нужно указать пользователя и указать паспорт чтобы у нас был не пароль в открытом [музыка] и будем использовать и пароль будем делать тестер 123 Но для пароля тестера 123 нам нужно получить Хеш для этого

и пароль будем делать тестер 123 Но для пароля тестера 123 нам нужно получить Хеш для этого Давайте пойдем в другое окно на сервере это все делается до следующей командой нам нужно Здесь указать пользователя будет ровно и здесь у нас будет тестер 123 Так теперь вот это вот все мы можем скопировать и вставить есть убираем это все и вставляем все вот такой пароль у нас будет все готово сохраняем выходим Давайте запускаем наш трафик сейчас идет скачивание опять-таки сертификата для все готово

выходим Давайте запускаем наш трафик сейчас идет скачивание опять-таки сертификата для все готово переходим браузер выбираем теперь порт как бы у нас есть перенаправление на https вот у нас есть спрашивайте пользователи пароль теперь уже никто не сможет просто посмотреть что творится на нашем сервере указываем тестер 1 2 3 все у нас защищенное Подключение у нас использовали и пароль Таким образом мы защитили наш dashbot это очень не рекомендуется конечно dashboard делать для публичного доступа

мы защитили наш dashbot это очень не рекомендуется конечно dashboard делать для публичного доступа еще вот стоит переключить на тему Так намного приятнее Но поскольку это прокси сервер поэтому использовать только один докер Да который не очень целесообразно мы могли тоже самое сделать на одном контейнере все обработал давай добавим еще несколько контейнеров переходим в консоль давайте сделаем теперь опять да давайте запустим X в background фоне чтобы он работал да посмотрим до капец у нас все

опять да давайте запустим X в background фоне чтобы он работал да посмотрим до капец у нас все работает у нас работает трафик и работает и Давайте теперь сделаем мы скопируем пост чтобы все они подправлять [музыка] теперь нам стоит подправить наши настройки название контейнера для [музыка] даже последнюю версию название контейнера будет очень важная штука это изменить хост [музыка] и даже не забудьте обязательно Изменить название вашего роутера но есть допустим X то не apech контейнеры работать

обязательно Изменить название вашего роутера но есть допустим X то не apech контейнеры работать не будут здесь указываем ипчем все готово все остальное оставляем без изменений сохраняем выходим и запускаем теперь наш контейнер также как мы запускали наши запустим [музыка] все она запустилась проверяем до капец у нас работает Engine X и httpd название контейнера и печи трафик хорошо Теперь давайте зайдем на веб сервер и посмотрим работает все у нас работает трафик у нас также работает скопируем

зайдем на веб сервер и посмотрим работает все у нас работает трафик у нас также работает скопируем адрес вставляем только вместо все у нас работает также перебрасывается мы делаем простые контейнеры да то есть это обычные стандартные контейнеры Как работает трафик не как какие-то настройки по веб-серверам делать чтобы нам потом скалировать нам нужно убрать название контейнера то есть Нам нужно оставить чтобы наше название контейнеров были динамическими от Докера это мы все убираем далее лейблы

чтобы наше название контейнеров были динамическими от Докера это мы все убираем далее лейблы то же самое мы оставляем если изменяем рутас названием и также добавим другой адрес все у нас готово сохраняем выходим Давайте попробуем запустить это все переходим браузер Давайте снова скопируем теперь этот адрес так исправим всем вот так выглядит наш запрос да то есть мы видим IP адрес нашего контейнера то есть какая-то информация есть которая нам отправляет этот контейнер Почему ничего особенного

то есть какая-то информация есть которая нам отправляет этот контейнер Почему ничего особенного Давайте теперь сканируем наш контейнер все делать также как будто мы запускаем наш контейнер только в конце еще добавим и что мы хотим склера какой сервис мы назвали сервис Мы хотим два контейнера запустить всё создалось два контейнера до капец посмотрим и у нас должно быть сейчас два контейнера У нас вот первый контейнер вот второй контейнер Да и Давайте теперь снова зайдем браузер и видим У нас вот

первый контейнер вот второй контейнер Да и Давайте теперь снова зайдем браузер и видим У нас вот у нас меняется ip-адреса и порты То есть все зависит видите у нас работает лот балансинг Давайте снова посмотрим штук Давайте перейдем на них посмотрим видите у нас сразу показывает У нас здесь есть сертификаты хуама то что мы делали примерно посмотрим на Green X который самый первый мы делали как это все происходит то есть запрос на 443 потом на роутер и потом перебрасывается в контейнер который

все происходит то есть запрос на 443 потом на роутер и потом перебрасывается в контейнер который здесь указан также можем увидеть как я адреса внутренние что порт 80 открыт у контейнера у самого контейнера то есть чисто показывается вся информация по вашему окружению Где работает трафик но мы сейчас запускали контейнеры где открыт порт 80 либо 43 Что будет если мы запустим допустим другой контейнер работает другой порт в меру графану Да если мы посмотрим графану на докоха Хаби то мы не что

работает другой порт в меру графану Да если мы посмотрим графану на докоха Хаби то мы не что Спарты 3000 Давайте запустим графа Ну как контейн и Посмотрим как будет реагировать трафик снова переходим к нашим compose файлам снова копируем один из файлов допустим с кнопки Engine X изменяем на графа на и также опять редактируем это также все можно автоматизировать да то есть когда вы у вас постоянно динамические окружения вам нужно что-то новенькое делать это все спокойно Можно автоматизировать

динамические окружения вам нужно что-то новенькое делать это все спокойно Можно автоматизировать либо другие системы Так мы все Сейчас исправили то есть мы используем другой имидж другой название сервиса конкретно та же мы здесь исправили графан и добавили адрес сарафан этот все как бы готово Давайте запустим этот контейнер снова нашу команду только теперь мы запускаем графа ну [музыка] все контейнер запустился Давайте перейдем в браузер снова и попробуем открыть нашу графа Ну подождем

контейнер запустился Давайте перейдем в браузер снова и попробуем открыть нашу графа Ну подождем немножечко какое-то время обновляем потому что еще сертификат не запросился то есть я был довольно таки быстро видите графа на запускается с портом 3000 но мы зашли на этот сервис с помощью htps но бывает такое что контейнера довольно таки много портов открыты допустим это какие-то DNS фильтра или что-то еще mail сервера То есть у контейнера большое количество портов трафик пытается сразу же

или что-то еще mail сервера То есть у контейнера большое количество портов трафик пытается сразу же пробросить ко всем портам Это не очень хорошо потому что Допустим мы только хотим дать доступ через трафик для веб-сервиса все остальное должно идти напрямую либо как-то еще другим способом либо у нас есть подключение базы данных либо база данных еще работы ну не столь важно Допустим мы хотим сделать так чтобы один только порт разрешался для использования в трафике как Мы это сделаем мы снова

так чтобы один только порт разрешался для использования в трафике как Мы это сделаем мы снова переходим в настройки экрана и нужно добавить еще один лейблется 3000 этот порт будет доступен для трафика то есть трафик будет именно этот порт перенаправляет запрос Давайте остановим все всё работает все хорошо все запустилось давайте снова вернемся в dashpot и мы здесь видим http у нас все работает все Web Service у нас работают прекрасно мы это проверили но у нас ничего нет tcp для чего это нужно

Web Service у нас работают прекрасно мы это проверили но у нас ничего нет tcp для чего это нужно допустим у вас есть какой-то контейнер в котором хотите пробросить порт СССР Либо вы хотите использовать Майское через прокси сервер Вот давайте как раз на примере Майская мы этой посмотрим как это работает мы сделать проброс трафика по tcp через трафика Ну как так в общем ладно переходим в консоль идем сразу настройки нашего трафика и так messcale база данных стандартный порт 3306 и нам нужно это

сразу настройки нашего трафика и так messcale база данных стандартный порт 3306 и нам нужно это все указать сначала в трафика на нужно указать нужно добавить порты которые есть самое первое что я делаю Это обычно будет работать у нас база данных далее добавляем команду у нас добавляется entrepoint Да у нас два интрипоинта есть и добавим еще один можно скопировать 3306 и также очень важно изменить вот здесь название intrepoin там назовем это Майская все готово сохраняем выходим и запускаем

вот здесь название intrepoin там назовем это Майская все готово сохраняем выходим и запускаем трафик у нас запустился посмотрим видите у нас добавился intrepoint 3306 отлично У нас кстати уже нету порта 80 80 который был как бы notq для шпона поэтому теперь нам осталось запустить mysql и давайте сделаем только после и добавляем следующие содержимое Так мы будем использовать Image Мария диби сервис у нас называется mysql но будем использовать резьбе последней версии название контейнера Мария

у нас называется mysql но будем использовать резьбе последней версии название контейнера Мария диби не Будем изменять это все то есть нас работает контейнер Мари будет название это обязательно переменные которые нужно указать для работы базы данных то есть мы указываем любую там базу данных которые мы хотим создавать автоматически пользователь Майской это будет название db ниже подчерк потом пароль для этого пользователя и пароль для рута будет Root Password все как бы вот это чисто обычная

для этого пользователя и пароль для рута будет Root Password все как бы вот это чисто обычная настройка контейнера далее чтобы работала на все через трафик нам нужно добавить лейблы Я думаю это уже было понятно первое что мы добавляем это включаем трафик добавляем правила которые нам позволяет перенаправлять запросы мы используем который Мы создали вот до этого порт 3306 и вот здесь также указывается этот порт все больше ничего не делаем У нас есть 5 записи которые нужно добавить для того чтобы

этот порт все больше ничего не делаем У нас есть 5 записи которые нужно добавить для того чтобы трафика работал выходим сохраняем [музыка] и давайте это все запустим [музыка] готово проверяем до kps у нас моря теперь работает Если мы зайдем dashpod обновим и у нас все работает Если вы что-то забыли не так указали либо очень часто бывает что не такой лейбл указали название где-то Забыли то захватив error's и там в принципе все написано будет все понятно Где находится ошибка То есть у нас все

error's и там в принципе все написано будет все понятно Где находится ошибка То есть у нас все работает Давайте проверим действительно все работая и мы можем перебросить наш запрос на Майское пишем указываем хвост то есть минус пользователь будем использовать пользователя и пароль можно сказать сразу здесь и укажем пароль мы указывали Root нужно подчеркивание [музыка] вот мы в базе данных вот наша база данных которые мы указали вдруг все мы зашли Через наш трафик мы напрямую подключились к базе

база данных которые мы указали вдруг все мы зашли Через наш трафик мы напрямую подключились к базе данных на этом не всем Надеюсь было понятно как работает трафика Зачем нужен работу также очень легко использовать трафик для автоматизации и он просто незаменим для динамических окружений Спасибо за просмотр До новых видео Всем пока

данный видео рассмотрим системы которые облегчают работу с докером позволяет создавать управлять контейнерами также смотреть логин и отправлять сообщения и давайте начнем с первого сервиса партейнер наверное самый популярный сервис для работы в docker если докер сам по себе иногда окажется сложным нужно знать много нюансов при работе управления докером то партейнер все это упрощает кстати протейнер на канале есть уже отдельное видео и что такого особенно в Партнер это инструмент предоставляет

на канале есть уже отдельное видео и что такого особенно в Партнер это инструмент предоставляет вам удобный интерфейс для работы с докер контейнером вы забудете воспоминании длинных команд теперь все делается несколькими кликами мышки вы сможете создавать управлять докер контейнерами так будто это обычное приложение у партнеров довольно таки простой и понятный интерфейс который позволяет легко настраивать окружение следить за состоянием контейнеров и масштабировать приложение по мере

легко настраивать окружение следить за состоянием контейнеров и масштабировать приложение по мере необходимости одна из красных особенностей партнера его универса независимо от того Где находится ваша контейнеры на локальной машине на удаленном сервере или даже в Облаке партейнер может всем этим зоопарком управлять по сути партейнер делает работу с доктора доступным даже для тех кто не работает в области it Так что если вы хотите сэкономить время нервы при изучении либо при работе с токер

в области it Так что если вы хотите сэкономить время нервы при изучении либо при работе с токер несомненно стоит начать использовать партейнер И кстати я часто встречаю людей которые начинали свое знакомство с докером именно с партейнер второй сервис для управления докер контейнером называется яхт этот сервис очень похож на Партнер на время записи видео и коротко Если вы хотите сделать управление вашим докер контейнером легким и удобным это то что стоит попробовать и что такое это управление и

вашим докер контейнером легким и удобным это то что стоит попробовать и что такое это управление и давайте рассмотрим ключевые возможности это первое удобные понятный интерфейс который позволяет шаблоны которые позволяют разворачивать контейнеры всего в один клик есть также поддержка переменных шаблонах что позволяет делать запуск контейнеров динамическим есть мониторинг в реальном времени редактора простой редактирование Как вы знаете обновление контейнеров может быть настоящей головной болью

простой редактирование Как вы знаете обновление контейнеров может быть настоящей головной болью с этой задачей поможет следующий сервис под названием вот что этот инструмент сделает процесс обновления легким и самое главное автоматически А вот что также на канале есть отдельное видео и что такое Густаво это как ваш личный сторож только для доктора который постоянно следит за вашими контейнерами как только в репозитории появляется новая версия образа почтового моментально обнаруживает это и

как только в репозитории появляется новая версия образа почтового моментально обнаруживает это и запускает обновление либо просто информирует вас о новой версии нет больше необходимости вручную проверять и обновлять контейнеры вам также не нужно беспокоиться о безопасности в том чтобы пропустить какую-то важную версию либо обновление почтово всегда будет следить за актуальностью образов И поддерживать ваше приложение в актуальном состоянии и важно Это стоит запомнить Перед тем как мы перейдем к

ваше приложение в актуальном состоянии и важно Это стоит запомнить Перед тем как мы перейдем к следующему сервису Вот это инструмент для автоматическое обновления докер контейнеров на одном месте он мониторит образы используемые в запущенных контейнерах и обновляет их или просто оповещает об обновлении когда новой версии доступны работает на уровне одного Хоста и не требует настройки центрального сервера вот расшифровывается как у Watch update deploy то есть наблюдение обновление и

центрального сервера вот расшифровывается как у Watch update deploy то есть наблюдение обновление и развертывание Если вы работаете с докером вы вероятно знакомы с проблемой обновления и тем чтобы потом все контейнеры корректно запустились и работали также при обновлении стоит рассчитывать на Down Time что ваши сервисы будут некоторое время недоступны вот где в игру вступает Вуд Вот это полезный инструмент который упрощает процесс наблюдения обновления и развертывания ваших докер контейнеров Вы

который упрощает процесс наблюдения обновления и развертывания ваших докер контейнеров Вы можете представить фут как наблюдателя за контейнерами которые гарантирует что ваше приложение всегда будет находиться в актуальном состоянии с помощью Wood Вы можете автоматически мониторить наличие обновлений для ваших контейнеров Когда обновление доступны будут берет на себя процесс обновления и вам не нужно беспокоиться об этом И что самое лучшее ваше приложение остаются онлайн и стабильным во время

нужно беспокоиться об этом И что самое лучшее ваше приложение остаются онлайн и стабильным во время выполнения обновления фоновом режиме Это отличает его от почта Я понимаю что если вы ищете способ мониторинга обновления и развертывание ваших токер контейнеров без стрессов вот это то что вам необходимо теперь отличие от предыдущего сервиса почта Вуд управляет обновлением для множества докер контейнеров на разных хостах но требует настройки и установки на центральный сервер в общем оба

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

от конкретных требований и средств в которых они будут использоваться дозлу это простой но мощный контейнер для мониторинга Лога ваших запущенных докер контейнеров прямо в браузере порой при большом количестве контейнеров не так просто следить нужной логией если конечно вы не используете Центральный логинг-сервер и давайте рассмотрим некоторые его ключевые особенности простота установки можно легко Запустить видео доктора контейнера на вашем Хосте просто указывайте Какие контейнеры вы хотите

Запустить видео доктора контейнера на вашем Хосте просто указывайте Какие контейнеры вы хотите мониторить и дозло сразу начинает отображать их логин интерактивный интерфейс вы получаете красочный интерфейс в котором каждый контейнер представлен своим цветом Это позволяет быстро отличить логи разных контейнеров легкий доступ просто открываете браузер и переходите по адресу где запущен дозу обновление в реальном времени автоматически обновляет логи в реальном времени вы всегда будете в курсе что

в реальном времени автоматически обновляет логи в реальном времени вы всегда будете в курсе что происходит в ваших контейнерах фильтрации поиск Вы можете фильтровать и искать логи по ключевым словам это удобно Если вы и щете конкретные события либо ошибки Итак дозло делает мониторинг логов доктор контейнеров удобный визуально понятно он подходит как для разработчиков так и для системных администраторов которые хотят быстро получать информацию о работе своих контейнеров следующий сервис под

которые хотят быстро получать информацию о работе своих контейнеров следующий сервис под названием готифа не относится к системам управления docker Но если вам важно знать когда ваш контейнеры имеют какие-то проблемы либо например уведомления обновлениях то данный сервис поможет донести эту информацию систем которые мы рассмотрели Выше к вам через приложение на вашем смартфоне или в браузере на канале есть также отдельное видео по данной системе Итак gotify это открытый легкий способ отправки

канале есть также отдельное видео по данной системе Итак gotify это открытый легкий способ отправки уведомлений Вы можете рассматривать котика как сервис уведомлений который позволяет вам отправлять сообщения на различные устройства и приложения также с различных приложений особенности Первое это простая сноука второе универсальность кодивой предоставляет простой API который позволяет вам интегрировать его с любым приложением и сервисами Вы можете отправлять уведомления с вашего сервера

интегрировать его с любым приложением и сервисами Вы можете отправлять уведомления с вашего сервера веб-приложения или даже из скриптов присутствует множество плагинов поддерживает разнообразные плагины и расширения позволяет настраивать уведомления под ваши нужды например Вы можете отправлять уведомления на ваш телефон электронную почту или другие устройства ваши данные остаются защищенными благодаря https шифрованию чтобы список безопасную передачу сообщения годевая предоставляет интуитивный

https шифрованию чтобы список безопасную передачу сообщения годевая предоставляет интуитивный интерфейс для просмотра и управления вашим уведомлением Вы можете просматривать историю управлять устройствами и настраивать параметры теперь у вас есть возможность организовать уведомление между вашими приложениями и устройствами без лишних хлопот codify предоставляет удобный способ отправки и приема уведомлений что помогает вам оставаться в курсе событий вот так выглядит небольшой список тех программ

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

Всем привет Сегодня тема снова о докере кто использует докер в принципе это большинство из нас сейчас те знают что в докере нет встроенного механизма обновления то есть мы не знаем Есть ли новые имиджи либо нету нужно проверять вручную для этого существуют другие сервисы которые нам помогают в этом Да если вы используете нас систему либо ещё некоторые системы Они показывают что есть новый контейнер новый имидж и вы можете обновиться но в обычном окружении Когда у нас чисто есть сервер и docker

новый имидж и вы можете обновиться но в обычном окружении Когда у нас чисто есть сервер и docker контейнеры работают у нас этой возможности нет то есть нужно самим проверять есть ли обновление на этом видео я вам покажу систему по названием Юн либо Dian которая позволяет нам получать оповещение о новых докер имиджа Но перед тем как мы к ней перейдём Давайте посмотрим чем данная система отличается от других подобных И в чём могут быть её преимущества Я раньше показывал систему под название Watch

от других подобных И в чём могут быть её преимущества Я раньше показывал систему под название Watch Эта система очень классна для автоматического обновления Она смотрит е е новые имиджи она скачивает их и обновляет можно настроить Так что Watch будет вам только отправлять оповещение что есть новые имиджи либо также будет обновлять ваши контейнеры автоматически То есть вы получаете оповещение что Нашёлся новый контейнер новый имидж Вернее на вашей репозитории старый контейнер был остановлен идж

Нашёлся новый контейнер новый имидж Вернее на вашей репозитории старый контейнер был остановлен идж удалён новый контейнер скачен и запущен таким образом работает watcha но в watcha есть также несколько нюансов несколько минусов которые очень неудобно во-первых кто обновляется сейчас автоматически это может быть удобно быстро Хорошо вам не нужно смотреть следить за этим всем но если обновление происходит автоматически то очень часто какое-то приложение у вас перестаёт работать если вы например

автоматически то очень часто какое-то приложение у вас перестаёт работать если вы например используете по каким-то причинам последние имиджи то есть latest для баз данных а само приложение ещё не поддерживает самые последние версии базы данных то тогда у вас приложение перестанет работать если у вас автоматически обновится база данных поэтому большинство использует пота именно как оповещение То есть он отправляет вам оповещение вы уже сами подключаетесь к серверу и скачиваете обновление и также

он отправляет вам оповещение вы уже сами подключаетесь к серверу и скачиваете обновление и также для отправки оповещения У нас есть несколько вариантов куда мы можем отправлять оповещение это email SL MS teams и goy я думаю большинство используют именно email либо goy настройка довольно-таки простая нам нужно указать несколько параметров и всё у нас есть только четыре варианта но сейчас используют большинство мессенджеры это удобно вот допустим у вас есть Telegram либо я использую сейчас очень

большинство мессенджеры это удобно вот допустим у вас есть Telegram либо я использую сейчас очень много Matrix это удобно получать оповещение о новых обновлениях или чего-то ещё именно в тот месенджер которое вы используете вам не нужно дополнительно ничего устанавливать ничего настраивать но здесь у нас есть только email и gfy плюс SL Microsoft четыре варианта Ладно с cfy можно работать Классная штука Мы кстати её ещё затронем в этом видео дальше Watch он смотрит какие имиджи у вас есть

штука Мы кстати её ещё затронем в этом видео дальше Watch он смотрит какие имиджи у вас есть локально то есть какие запущены и он скачивает самые последние имиджи с репозитория и потом их сравнивает если мы посмотрим в аргументы то здесь есть немножко ниже здесь есть параметр without Ping New Image Это означает что он не будет скачивать имиджи а но в таком случае он будет смотреть чисто на локальные имиджи которые у вас есть на машине То есть это хорошо для тех условий Когда вы создаёте

локальные имиджи которые у вас есть на машине То есть это хорошо для тех условий Когда вы создаёте контейнеры вернее создаёте имиджи Бельды именно локально и тогда у вас хранятся имиджи у вас на локальной репозитории тогда это будет хорошо работать но Что происходит если каждый раз скачивать Watch имиджи локально допустим у вас есть тестовая машина да именно тестовая у меня несколько штук таких работает Там просто крутятся какие-то контейнеры я на них особо не смотрю но проходит месяц я их не

работает Там просто крутятся какие-то контейнеры я на них особо не смотрю но проходит месяц я их не обновляю контейнеры проходит Второй третий и за это время птся столько разных новых имиджей что просто забивается место на диске и нужно за этим следить Да ва скачивает постоянно новые имиджи которые появляются короче Watch Классная штука для автоматического обновления для оповещения многие используют Я тоже очень долго использовал его хорошо работает и удобно но сейчас я посмотрел на другое

Я тоже очень долго использовал его хорошо работает и удобно но сейчас я посмотрел на другое решение под названием dun либо D это doka Image update notifier э система чисто для отправки вам сообщения что есть новые имиджи этого достаточно чтобы знать что есть новый имидж и что нужно обновиться сейчас в нынешнее время обновляться стоит хотя бы раз в квартал либо желательно раз в месяц Ну давайте посмотрим Юн как он работает как его запустить И что с ним мы сможем сделать Итак если посмотрим в

посмотрим Юн как он работает как его запустить И что с ним мы сможем сделать Итак если посмотрим в installation здесь есть описание Как мы можем установить наш контейнер Какие параметры нужно указать мы сейчас это всё сделаем и вот у нас есть сразу же токо compose который мы можем скопировать и запустить но Давайте перед тем ещё посмотрим в куда мы можем отправлять это ВС и Как видите здесь намного больше вариантов то есть мы можем использовать discord мой любимый Matrix mail Go rocketchat

больше вариантов то есть мы можем использовать discord мой любимый Matrix mail Go rocketchat скрипты teams Telegram также классная вещь Если вы используете Telegram Я думаю тоже используете поэтому удобно получать также там уведомления и мы можем делать вебхуки и по провайдерам мы можем мониторить доке cuber do файлы Ну и файл много текста дава приступим к установке нашего D контейнера и посмотрим как он работает Итак мы можем в принципе скопировать сразу же этот docker файл я перехожу на

как он работает Итак мы можем в принципе скопировать сразу же этот docker файл я перехожу на сервер НМ но не столь важно здесь работает несколько контейнеров которые мы потом посмотрим как их обновить так Doc APS сразу посмотрим у нас работает cfy для того чтобы я вам показал как отправляют сообщения как они выглядят графана запущена обычные веб серверы Это чисто демки и homepage он не настроен поэтому он перезапускается каждый раз но Нас интересуют не эти контейнеры нас интересует Как работает

он перезапускается каждый раз но Нас интересуют не эти контейнеры нас интересует Как работает Итак переходим в op и будем там создавать наш создаём папку и здесь будем создавать наш Dock comp можем сразу с сайта скопировать Файлик В новых версиях доке не нужно указывать поэтому мы это опускаем копируем просто содержимое Итак давайте пройдёмся по содержимому у нас Image Dune latest последняя версия будет скачиваться запуск командой serve и у нас есть юмы Где будут храниться наши данные

версия будет скачиваться запуск командой serve и у нас есть юмы Где будут храниться наши данные persistence Data Давайте сразу это всё Мы подправить op dun Data и будет пробрасывается имиджи далее У нас будет очень много переменных environments стоит подкорректировать вашу временную зону в моём случае это Берлин de Watch workers сколько будет воркеров которые будут смотреть за новыми контейнерами это в принципе мы можем убрать это не нужно по умолчанию стоит 10 далее Watch shedu это Как часто

это в принципе мы можем убрать это не нужно по умолчанию стоит 10 далее Watch shedu это Как часто вы будете смотреть за новыми имиджа то есть Каждые 6 часов у вас будут проверяться на в моём случае на докер хабе новые имиджи это также мы сейчас опустим пока что не будем это использовать G Это говорит о том что запуск наших воркеров происходит в течение 30 секунд То есть может быть начаться ровно через 6 часов может быть через 6 часов и 10 секунд Ну в общем у нас 30 секунд это нам тоже как бы не

6 часов может быть через 6 часов и 10 секунд Ну в общем у нас 30 секунд это нам тоже как бы не нужно это стоит по умолчанию и D providers мы оставляем do и Lab enable то есть наш наш сервис сам по себе он будет также проверять сам себя то есть ели новые имиджи на нашего Дюна но Давайте немножко сразу же подправить для каждого контейнера у нас мы можем сделать глобально что будет смотреть за всеми контейнерами следить Итак на официальном сайте перейдём в configuration перед можем вть примм жа

контейнерами следить Итак на официальном сайте перейдём в configuration перед можем вть примм жа обновление если обновление если мы это не укажем поскольку по дефолту стоит fse то у нас обновление будет появлятся только тогда когда обновится это в репозитории но здесь есть один нюанс если мы этот параметр указываем то при первом запуске нам сразу же будут отправлены уведомление Что все контейнеры имеют обновление хотя на самом деле некоторые контейнеры уже имеют самую последнюю версию не знаю

имеют обновление хотя на самом деле некоторые контейнеры уже имеют самую последнюю версию не знаю что здесь происходит но по крайней мере Таким образом мы сразу сможем протестировать уведомление будем придерживать синтак который здесь уже был идём дальше чек при старте по дефолту стоит True то есть мы можем не указывать как мы только запускаем контейнер он сразу будет проверять обновление дальше у нас comp Digest стоит на True Это хорошо будет сразу же сравниваться наши имиджи которые локальные

нас comp Digest стоит на True Это хорошо будет сразу же сравниваться наши имиджи которые локальные которые в репозитории без скачивания отлично здесь слева у вас есть другие настройки по дефолту что вы можете указывать notifications это мы немножко попозже Посмотрим если вы используете част репозиторий где храните свои имиджи то это также вы сможете настроить в registry options и providers зайдём в doger provider имен на который мы используем сейчас здесь есть ещё один пример Dog compost файла

в doger provider имен на который мы используем сейчас здесь есть ещё один пример Dog compost файла с двумя контейнерами это Dune и Cloud flirt где показывает что Cloud flirt имеет Label Dune enabled TR Это означает что контейнер вернее Image Cloud flirt будет мониторить юном и отображаться оповещение если мы хотим это всё хорошо Если у вас два-три контейнера которые вы хотите мониторить Но если у вас их десятки сотни то это будет сложно каждому писать лейблы и иногда можно забыть Просто этот

у вас их десятки сотни то это будет сложно каждому писать лейблы и иногда можно забыть Просто этот лейбл указать поэтому мы спускаемся ниже и посмотрим немножко другой параметр Watch by default Dune будет смотреть автоматически а все контейнеры которые у вас работают вам не нужно будет указывать Dune enable True как Lab то есть всё у нас все контейнеры которые у нас работают локально они будут все монитори копируем эту настройку также ставим Ну далее добавим немножечко параметров для того чтобы

монитори копируем эту настройку также ставим Ну далее добавим немножечко параметров для того чтобы нас лучше отображались логи всё готово можем запускать Мы также уберём нам он сейчас не нужен и ещё я добавлю название контейнера чтобы к нему было проще потом подключаться нам готово входим и запускаем теперь наш docker compose Up я не буду указывать ми D в D мо не будем запускать чтобы нам сразу было видно Log что происходит Мы скачиваем сам имид нашего Юна и он будет сейчас запущен Итак мы

было видно Log что происходит Мы скачиваем сам имид нашего Юна и он будет сейчас запущен Итак мы видим что у нас сразу же найдено пять имиджей которые работают И как вы видите у нас для каждого имиджа есть обновление New Image found это всё происходит из-за параметра оповещения при первом чеки даже если у вас имидж будет самая последняя версия вы всё равно Получите данное сообщение Вот такой вот нюанс этого параметра и всё у нас работа прекращена Почему работа прекращена потому что у нас нету

нюанс этого параметра и всё у нас работа прекращена Почему работа прекращена потому что у нас нету Шед сейчас мы это всё исправим и у нас будет работать но увидите Что происходит при втором запуске Давайте исправим doger compose и включим наш ше Дюла но поставим чтобы он проверял каждые 3 минуты если вы не знаете как работает эта штука шедл Как настраивать то есть интересный сайт cron Tab Guru Здесь вы легко сможете создать либо проверить Ваш Рон Job вернее время запуска вы указываете цифры

Здесь вы легко сможете создать либо проверить Ваш Рон Job вернее время запуска вы указываете цифры звёздочки слш и получаете потом в обычном текстовом видео когда будет запущен тот либо иной Джоб также Если вы хотите запускать Джоб в какой-то определённый день месяц с какой-то определённой периодичностью то здесь также это легко настроить вы сразу будете видеть Когда будет запускаться ваша задача готово Давайте закрываем это всё И снова запустим наш to compose снова найдены пять имиджей но уже

готово Давайте закрываем это всё И снова запустим наш to compose снова найдены пять имиджей но уже нет тифи никакого то есть нам не показывается вот что новые имиджи какие находятся потому что он один раз уже это всё нам показал и также он говорит что я поработал И следующий запуск будет через 3 минуты 18 секунд вот поскольку мы указывали 3 минуты но плюс-минус 30 секунд ещё Давайте остановим его чтобы Вы снова видели оповещение которое вам показывается в директории которой мы указываем там

его чтобы Вы снова видели оповещение которое вам показывается в директории которой мы указываем там presence Data у нас задаётся папка Data если мы её удалим то у нас как бы будет свежий контейнер Но если сейчас мы снова запустим то у нас по идее Должно всё также отобразится как и до этого но только контейнер не остановится поскольку у нас есть Юла который говорит ему тебе нужно снова запуститься через некоторое время вот Ну и всё теперь он работает отлично У нас докер контейнеры находятся всё

через некоторое время вот Ну и всё теперь он работает отлично У нас докер контейнеры находятся всё прекрасно но это всё локально и всё в логе Давайте добавим всё-таки оповещение Я выбрал самый простой способ для оповещения чтобы вам показать это через goy также goy работает у меня локально to PS goy я его недавно вот запустил 50 минут назад как бы все контейнеры запущены не так давно Но они старые но сначала Давайте перейдём вюн конфигурацию и посмотрим какие параметры нам нужно чтобы у нас

но сначала Давайте перейдём вюн конфигурацию и посмотрим какие параметры нам нужно чтобы у нас работало оповещение открываем сразу здесь do comp и переходим в notifications и goy смотрим ниже У нас есть несколько параметров которые мы можем указать не все нужно указывать Давайте их все Сейчас скопирую чтобы нам потом проще было смотреть goy endp нам здесь нужно будет указать Какой адрес нашего goy сервера это мы сейс сделаем далее Нам нужно будет указать это обязательно управлять оповещение

goy сервера это мы сейс сделаем далее Нам нужно будет указать это обязательно управлять оповещение можно указать токен не в Dog копо файле а указать как в токен файле мы этого делать не будем и укажем всё здесь приоритет у нас будет единица та поставим 10 секунд далее У нас есть возможность под настроить темплейты то есть Вид сообщения которые вы будете получать и template Body это всё указывается на официальном сайте здесь вот есть по дефолту template title выглядит таким образом и Body то

на официальном сайте здесь вот есть по дефолту template title выглядит таким образом и Body то есть Какая информация будет вам отображаться вот таким образом у нас должны получаться наше оповещения давайте это всё настроим Итак мой goy Заходим в Apps по goy уня есть видео Если вы хотите посмотреть как его установить в принципе очень всё просто Create Application всё нам больше ничего делать не нужно нажимаем Create готово нам нужно теперь скопировать данный и также нам понадобится IP адрес

нужно нажимаем Create готово нам нужно теперь скопировать данный и также нам понадобится IP адрес сервера это всё Мы вставляем в Dog comp Мы указываем token и endp то есть интернет адрес goif сервера Это чисто тестовый сервер Так что http достаточно 2025 и всё вот эти два оповещения мы убираем вернее две настройки готово вот таким образом у нас выглядит полноценная Рабочая версия Единственное что мы можем поставить поменьше закрываем это всё и как пом если мы сейчас запустим у нас никаких

что мы можем поставить поменьше закрываем это всё и как пом если мы сейчас запустим у нас никаких оповещений не будет Поэтому удаляем дата Итак запускаем compose и посмотрим что у нас произойдёт посмотрим Будут ли отправлены оповещения посмотрим на сайт у нас Юн здесь и у нас Как видите отображаются наши оповещения что графана найден новый имидж и по всем как бы контейнерам которые у на есть у нас есть новые имиджи и коротко о том как обновить контейнер всё делается очень просто Итак смотрим

нас есть новые имиджи и коротко о том как обновить контейнер всё делается очень просто Итак смотрим Какие контейнеры у нас работают Допустим мы получили обновление для какого-то из контейнеров возьмём допустим Engine X поэтому мы должны остановить данный контейнер если мы используем этот контейнер как do compose тогда лучше всего остановить полностью docker compose останавливаем Dog compose смотрим наши имиджи которые у нас есть смотрим именно на тот имидж на Engine X его удаляем и затем просто

наши имиджи которые у нас есть смотрим именно на тот имидж на Engine X его удаляем и затем просто запускаем doose заново и уже будет скачен ид из репозитория Иначе если мы Image не удалим то тогда будет смотреть докер в локальный репозиторий Он увидит что у нас есть Engine X latest и возьмёт его а не будет скачивать новый вот так ещё очень классная вещь именно в deun Мне нравится то что у нас есть ссылки мы сразу можем посмотреть что нового произошло Ну давайте нажмём на goy Да на данный сервис

ссылки мы сразу можем посмотреть что нового произошло Ну давайте нажмём на goy Да на данный сервис мы попадаем на doc и здесь есть у нас новые теги описание Что изменилось для сравнения Давайте покажу вам как выглядит оповещение для Watch Watch того выглядит всё намного проще Как по мне всё находится в одном сообщении для всех контейнеров найден был новый допустим идж для plka App plka App контейнер был остановлен и новый создан и был старый имидж удалён но ещё раз повторюсь если Watch у вас

был остановлен и новый создан и был старый имидж удалён но ещё раз повторюсь если Watch у вас стоит только как оповещение То есть он не обновляет ничего то каждый раз новые имиджи будут скачиваться и локально в локальной репозитории на сервере будут сохраняться и таким образом пройдёт месяц второй третий у вас будет этих имиджей очень и очень много что занимает довольно-таки много места и Давайте я вам покажу как выглядит ещё Tok compost для gfy это очень Элементарная система Как видите

Давайте я вам покажу как выглядит ещё Tok compost для gfy это очень Элементарная система Как видите настроек очень мало всего лишь нужно указать порт по умолчанию пользователя и пароль потом это всё изменяется и у вас уже будет своя система для оповещений также ссылку на видео по gfy Я прикреплю в описании под видео А на этом всё спасибо за просмотр обновляйте свои системы следите за безопасностью и до новых видео Всем пока

gonna start this tech quest with silly song but if you don't like silly songs that's okay stack quests hello I'm Josh stormer and welcome to stack quest today we're going to do a gentle introduction to machine learning note this stack quest was originally prepared for and presented at the Society for scientific advancements annual conference one of the things that Sosa does is promote science and technology in Jamaica let's start with a silly example do you like silly songs if you like silly

technology in Jamaica let's start with a silly example do you like silly songs if you like silly songs are you interested in machine learning if you like silly songs and machine learning then you'll love stack quest if you like silly songs but not machine learning are you interested in statistics if you like silly songs and statistics but not machine learning then you'll still love stack quest otherwise you might not like stack quest won't Wang if you don't like silly songs are you interested

you might not like stack quest won't Wang if you don't like silly songs are you interested in machine learning if you don't like silly songs but you like machine learning then you'll love stack quest if you don't like silly songs or machine learning are you interested in statistics if you don't like silly songs or machine learning but you're interested in statistics then you will love stack quest otherwise you might not like stack quest wah wah this is a silly example but it illustrates a

quest otherwise you might not like stack quest wah wah this is a silly example but it illustrates a decision tree a simple machine learning method the purpose of this particular decision tree is to predict whether or not someone will love stack quest alternatively we could say that this decision tree classifies a person as either someone who loves stack quest or someone who doesn't since decision trees are a type of machine learning then if you understand how we use this tree to predict or

trees are a type of machine learning then if you understand how we use this tree to predict or classify if someone would love stack quest you are well on your way to understanding machine learning BAM here's another silly example of machine learning imagine we measured how quickly someone could run 100 meters and how much yam they ate this is me I'm not very fast and I don't eat much yam these are some other people and this is Shane bolt hold is very fast Andy eats a lot of yam given this

are some other people and this is Shane bolt hold is very fast Andy eats a lot of yam given this pretend data we see that the more yam someone eats the faster they run the 100-meter dash we can fit a black line to the data to show the trend but we can also use the black line to make predictions for example if someone told us they ate this much yam then we could use the black line to predict how fast that person might run this is the predicted speed the black line is a type of machine learning

fast that person might run this is the predicted speed the black line is a type of machine learning because we can use it to make predictions in general machine learning is all about making predictions and classifications BAM now that we can make predictions and classifications let's talk about some of the main ideas in machine learning first of all in machine learning lingo the original data is called training data so the black line is fit to training data alternatively we could have fit a

is called training data so the black line is fit to training data alternatively we could have fit a green squiggle to the training data the green squiggle fits the training data better than the black line but remember the goal of machine learning is to make predictions so we need a way to decide if the green squiggle is better or worse than the black line at making predictions so we find a new person and measure how fast they run and how much ham they eat and then we find another and another

person and measure how fast they run and how much ham they eat and then we find another and another and another altogether the blue dots represent testing data we use the testing data to compare the predictions made by the black line to the predictions made by the green squiggle let's start by seeing how well the black line predicts the speed of each person in the testing data here's the first person in the testing data they ate this much yam and they ran this fast however the black line

person in the testing data they ate this much yam and they ran this fast however the black line predicts that someone who ate this much yam should run a little slower so let's measure the distance between the actual speed and the predicted speed and save the distance on the right while we focus on the other people in the testing data here's the second person in the testing data they ate this much yam and they ran this fast but the black line predicts that they will run a little faster so we

yam and they ran this fast but the black line predicts that they will run a little faster so we measure the distance between the actual speed and the predicted speed and add it to the one we measured for the first person in the testing data then we measure the distance between the real and the predicted speed for the third person in the testing data and add it to our running total of distances between the real and predicted speeds for the black line then we do the same thing for the fourth

between the real and predicted speeds for the black line then we do the same thing for the fourth person in the testing data and add that distance to our running total for the black line this is the sum of all the distances between the real and predicted speeds for the black line now let's calculate the distances between the real and predicted speeds using the green squiggle remember the green squiggle did a great job fitting the training data but when we are doing machine learning we are more

did a great job fitting the training data but when we are doing machine learning we are more interested in how well the green squiggle can make predictions with new data so just like before we determine this person's real speed and their predicted speed and measure the distance between them and just like we did for the black line we'll keep track of the distances for the green squiggle over here then we do the same thing for the second person in the testing data and the third person and the

then we do the same thing for the second person in the testing data and the third person and the fourth person this is the sum of the distances between the real and predicted speeds for the green squiggle the sum of the distances is larger for the green squiggle than the black line in other words even though the green squiggle fit the training data way better than the black line the black line did a better job predicting speeds with the testing data so if we had to choose between using the

did a better job predicting speeds with the testing data so if we had to choose between using the black line or the green squiggle to make predictions we would choose the black line BAM this example teaches two main ideas about machine learning first we use testing data to evaluate machine learning methods second don't be fooled by how well a machine learning method fits the training data note fitting the training data well but making poor predictions is called the bias-variance tradeoff Ohno a

the training data well but making poor predictions is called the bias-variance tradeoff Ohno a shameless self-promotion if you want to learn more about the bias-variance tradeoff there's a stat quest that will walk you through it one step at a time before we move on you may be wondering why we used a simple black line in a silly green squiggle instead of a deep learning or convolutional neural network or insert sir who is with bestest most fancy machine learning method here here there are tons

or insert sir who is with bestest most fancy machine learning method here here there are tons of fancy sounding machine learning methods and each year something new and exciting comes on the scene but regardless of what you use the most important thing isn't how fancy it is but how it performs with testing data double BAM now let's go back to the decision tree that we started with remember we wanted to classify if someone loved stat quest based on a few questions to create the decision tree we

to classify if someone loved stat quest based on a few questions to create the decision tree we collected data from people who loved stat quest and from people who did not love stat quest altogether this was the training data and we used it to build the decision tree got data from a few more people who love stat quest and a few more people who did not love stat quest altogether this forms the testing data we can use the testing data to see how well our decision tree predicts if someone will

testing data we can use the testing data to see how well our decision tree predicts if someone will love stat quest the first person in the testing data did not like silly songs so we go to the right side of the decision tree they didn't like machine learning either so we just keep on going down the right side of the decision tree they didn't like statistics either so the decision tree predicts that this person will not love stat quest however this person loves stat quest so the decision tree

that this person will not love stat quest however this person loves stat quest so the decision tree made a mistake want wall the second person in the testing data liked silly songs and that takes us down the left side of the decision tree they were also interested in machine learning so we predict that that person loves stat quest and since this person actually loves stat quest the decision tree did a good job hooray now we just run all of the other people in the testing data down the decision

did a good job hooray now we just run all of the other people in the testing data down the decision tree and compare the predictions to reality then we can compare this decision tree to the latest greatest machine learning method ultimately we pick the method that does the best job predicting if someone will love stat quest or not triple bam in summary machine learning is all about making predictions and classifications there are tons of fancy machine learning methods but the most important

and classifications there are tons of fancy machine learning methods but the most important thing to know about them isn't what makes them so fancy it's that we decide which method fits our needs the best by using testing data one last thing before we go you may be wondering how we decide which data go into the training set and which data go into the testing set earlier we just arbitrarily decided that these red dots were the training data but the blue dots could have just as easily been the

that these red dots were the training data but the blue dots could have just as easily been the training data the good news is that there are ways to determine which samples should be used for training data and which samples should be used for testing data and if you're interested in learning more about this check out the stat quest and there are lots more stat quests that walk you through machine learning concepts step-by-step so check them out hooray we've made it to the end of another

machine learning concepts step-by-step so check them out hooray we've made it to the end of another exciting stack quest if you like this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs or getting a t-shirt or a hoodie or some other slick merchandise there's links on the screen and there's links in the description below alright until next time quest on

StatQuest Check it out talking about Machine-learning. Yeah StatQuest Check it out Talking about cross-validation StatQuest Hello, I'm Josh stormer and welcome to StatQuest today we're going to talk about cross validation and it's gonna be clearly explained Okay, let's start with some data We want to use the variables chest pain good blood circulation Etc To predict if someone has heart disease Then when a new patient shows up we can measure these variables and Predict if they have heart disease

when a new patient shows up we can measure these variables and Predict if they have heart disease or not However, first we have to decide which machine learning method would be best we could use logistic regression or K nearest neighbors Or support vector machines and Many more machine learning methods. How do we decide which one to use? Cross-validation allows us to compare different machine learning methods and get a sense of how well they will work in practice Imagine that this blue column

methods and get a sense of how well they will work in practice Imagine that this blue column represented all of the data that we have collected about people with and without heart disease We need to do two things with this data One we need to estimate the parameters for the machine learning methods in In other words to use logistic regression we have to use some of the data to estimate the shape of this curve in machine learning lingo Estimating parameters is called training the algorithm The

of this curve in machine learning lingo Estimating parameters is called training the algorithm The second thing we need to do with this data is evaluate how well the machine learning methods work in? Other words we need to find out if this curve will do a good job categorizing new data in In machine learning lingo Evaluating a method is called testing the algorithm Thus using machine learning lingo we need the data to one train the machine learning methods and to test the machine learning

lingo we need the data to one train the machine learning methods and to test the machine learning methods a A terrible approach would be to use all the data to estimate the parameters ie to train the algorithm Because then we wouldn't have any data left to test the method Reusing the same data for both training and Testing is a bad idea because we need to know how the method will work on data. It wasn't trained on a Slightly better idea would be to use the first seventy-five percent of the data

wasn't trained on a Slightly better idea would be to use the first seventy-five percent of the data for training and the last 25% of the data for testing   We could then compare methods by seeing how well each one categorized the test data But how do we know that using the first? Seventy-five percent of the data for training in the last 25% of the data for testing is the best way to divide up the data What if we use the first 25% of the data for testing Or what about one of these middle blocks?

data What if we use the first 25% of the data for testing Or what about one of these middle blocks? Rather than worry too much about which block would be best for testing cross-validation uses them all one at a time and summarizes the results at the end     For example cross-validation would start by using the first three blocks to train the method and then use the last block to test the method and Then it keeps track of how well the method did with the test data then it uses this combination

and Then it keeps track of how well the method did with the test data then it uses this combination of blocks to train the method and this block is used for testing and Then it keeps track of how well the method did with the test data, etc Etc, etc   in the end every block of data is used for testing and we can compare methods by seeing how well they performed in This case since the support vector machine did the best job classifying the test data sets. We'll use it BAM!!! Note: in this

vector machine did the best job classifying the test data sets. We'll use it BAM!!! Note: in this example, we divided the data into 4 blocks. This is called four-fold cross validation However, the number of blocks is arbitrary In an extreme case we could call each individual patient (or sample) a block This is called "Leave One Out Cross Validation" Each sample is tested individually That said in practice it is very common to divide the data into ten blocks. This is called 10-fold

That said in practice it is very common to divide the data into ten blocks. This is called 10-fold cross-validation Double BAM!!! One last note before we're done Say like we wanted to use a method that involved a tuning parameter a parameter that isn't estimated but is just sort of guessed For example Ridge regression has a tuning parameter Then we could use 10-fold cross validation to help find the best value for that tuning parameter Tiny Bam! Hooray we've made it to the end of another

find the best value for that tuning parameter Tiny Bam! Hooray we've made it to the end of another exciting StatQuest if you like this StatQuest and want to see more please subscribe And if you want to support StatQuest well Please click the like button down below and consider buying one of my original songs Alright until next time quest on

if you feel confused don't sweat it Stan Quest is here stack quest hello I'm Josh stormer and welcome to stack quest today we're going to cover another machine learning fundamental the confusion matrix and it's going to be clearly explained imagine that we have this medical data we've got some clinical measurements like chest pain good blood circulation blocked arteries and weight and we want to apply a machine learning method to them to predict whether or not someone will develop heart disease

a machine learning method to them to predict whether or not someone will develop heart disease to do this we could use logistic regression or K nearest neighbors or random forest or some other method there are tons to choose from how do we decide which one works best with our data we start by dividing the data into training and testing sets note this would be an excellent opportunity to use cross-validation and if you're not familiar with that we'll check out the stat quest then we train all of

and if you're not familiar with that we'll check out the stat quest then we train all of the methods were interested in with the training data then test each method on the testing set now we need to summarize how each method performed on the testing data one way to do this is by creating a confusion matrix for each method the rows in a confusion matrix correspond to what the machine learning algorithm predicted and the columns correspond to the known truth since there are only two categories to

predicted and the columns correspond to the known truth since there are only two categories to choose from heart disease or does not have heart disease then the top-left corner contains true positives these are patients that had heart disease that were correctly identified by the algorithm the true negatives are in the bottom right hand corner these are patients that did not have heart disease that were correctly identified by the algorithm the bottom left-hand corner contains false negatives

were correctly identified by the algorithm the bottom left-hand corner contains false negatives false negatives are when a patient has heart disease but the algorithm said they didn't lastly the top right hand corner contains false positives false positives are patients that do not have heart disease but the algorithm says they do for example when we applied the random forest to the testing data there were 142 true positives patients with heart disease that were correctly classified and 110

there were 142 true positives patients with heart disease that were correctly classified and 110 true negatives patients without heart disease that were correctly classified however the algorithm misclassified 29 patients that did have heart disease by saying they did not these are false negatives in the algorithm misclassified 22 patients that did not have heart disease by saying that they did these are false positives the numbers along the diagonal the green boxes tell us how many times the

these are false positives the numbers along the diagonal the green boxes tell us how many times the samples were correctly classified the numbers not on the diagonal the red boxes are samples that the algorithm messed up now we can compare the random force confusion matrix to the confusion matrix we get when we use K nearest neighbors k-nearest neighbors was worse than the random forest at predicting patience with the heart disease 107 versus 142 and worse at predicting patients without heart

patience with the heart disease 107 versus 142 and worse at predicting patients without heart disease 79 versus 110 so if we had to choose between using the random forest and K nearest neighbors we would choose the random forest BAM lastly we can apply logistic regression to the testing data set and create a confusion matrix these two confusion matrices are very similar and make it hard to choose which machine learning method is a better fit for this data we'll talk about more sophisticated

which machine learning method is a better fit for this data we'll talk about more sophisticated metrics like sensitivity specificity ROC and AOC that can help us make a decision in the next stack quests now that we have the basic confusion matrix figured out let's look at a more complicated one here's a new data set now the question is based on what people think of these movies Jurassic Park 3 run for your wife out cold spelled with a k and Howard the Duck can we use a machine learning method

for your wife out cold spelled with a k and Howard the Duck can we use a machine learning method to predict their favorite movie if the only options for favorite movie were troll to Gore police or cool as ice then the confusion matrix would have three rows and three columns but just like before the diagonal the green boxes are where the machine learning algorithm did the right thing and everything else is where the algorithm messed up in this case the machine learning algorithm didn't do very

else is where the algorithm messed up in this case the machine learning algorithm didn't do very well but can you blame it these are all terrible movies BAM ultimately the size of the confusion matrix is determined by the number of things we want to predict in the first example we were only trying to predict two things if someone had heart disease or if they didn't and that gave us a confusion matrix with two rows and two columns in the second example we had three things to choose from in a

matrix with two rows and two columns in the second example we had three things to choose from in a confusion matrix with three rows and three columns if we had four things to choose from we get a confusion matrix with four rows and four columns and if we had 40 things to choose from we get a confusion matrix with 40 rows and 40 columns double bam in summary a confusion matrix tells you what your machine learning algorithm did right and what it did wrong hooray we've made it to the end of

your machine learning algorithm did right and what it did wrong hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest well consider buying one or two of my original songs alright until next time quest on

when the well runs dry you might be thirsty but this still StatQuest you can watch it StatQuest hello I'm Josh Starmar and welcome to StatQuest today we're gonna continue our series on machine learning fundamentals and we're going to talk about sensitivity and specificity they're gonna be clearly explained this StatQuest follows up on the one that describes the confusion matrix so if you're not already down with that check out the quest the first half of this video will explain how to calculate

down with that check out the quest the first half of this video will explain how to calculate and interpret sensitivity and specificity when you have a confusion matrix with two rows and two columns and the second half will show you how to calculate and interpret sensitivity and specificity when you have three or more rows and columns even if you're already down with the confusion matrix let's remember that rows correspond to what was predicted and columns correspond to the known truth when

remember that rows correspond to what was predicted and columns correspond to the known truth when there are only two categories to choose from in this case the two choices were has heart disease or does not have heart disease then the top left-hand corner contains the true positives true positives are patients that had heart disease that were also predicted to have heart disease true negatives are in the bottom right hand corner true negatives are patients that did not have heart disease and

are in the bottom right hand corner true negatives are patients that did not have heart disease and were predicted not to have heart disease the bottom left-hand corner contains the false negatives false negatives are when a patient has heart disease but the prediction said they didn't lastly the top right hand corner contains the false positives false positives are patients that do not have heart disease but the prediction says that they do once we filled out the confusion matrix we can

heart disease but the prediction says that they do once we filled out the confusion matrix we can calculate two useful metrics sensitivity and specificity in this case sensitivity tells us what percentage of patients with heart disease were correctly identified sensitivity is the true positives divided by the sum of the true positives and the false negatives specificity tells us what percentage of patients without heart disease were correctly identified specificity are the true negatives

of patients without heart disease were correctly identified specificity are the true negatives divided by the sum of the true negatives and the false positives in the StatQuest on the confusion matrix we applied logistic regression to a testing data set and ended up with this confusion matrix let's start by calculating sensitivity for this logistic regression here's the formula for sensitivity and for true positives we plug in 139 and for false negatives we plug in 32 when we do the math we get

for true positives we plug in 139 and for false negatives we plug in 32 when we do the math we get zero point eight one sensitivity tells us that 81% of the people with heart disease were correctly identified by the logistic regression model now let's calculate the specificity here's the formula for specificity and for true negatives we will plug in 112 and for false positives we will plug in 20 when we do the math we get 0.85 specificity tells us that 85% of the people without heart disease

when we do the math we get 0.85 specificity tells us that 85% of the people without heart disease were correctly identified by the logistic regression model now let's calculate sensitivity and specificity for the random forest model that we used in the confusion matrix StatQuest here's the confusion matrix here's the formula for sensitivity and when we plug in the numbers we get zero point eight three here's the formula for specificity and when we plug in the numbers we get zero point eight

three here's the formula for specificity and when we plug in the numbers we get zero point eight three again now we can compare the sensitivity and specificity values that we calculated for the logistic regression to the values we calculated for the random forest sensitivity tells us that the random forest is slightly better at correctly identifying positives which in this case are patients with heart disease specificity tells us that logistic regression is slightly better correctly identifying

disease specificity tells us that logistic regression is slightly better correctly identifying negatives which in this case are patients without heart disease we would choose the logistic regression model if correctly identifying patients without heart disease was more important than correctly identifying patients with heart disease alternatively we would choose the random forest model if correctly identifying patients with heart disease was more important than correctly identifying patients

identifying patients with heart disease was more important than correctly identifying patients without heart disease BAM in the confusion matrix stat quest we calculated this confusion matrix when we tried to predict someone's favorite movie now let's talk about how to calculate sensitivity and specificity when we have a confusion matrix with three rows and three columns the big difference when calculating sensitivity and specificity for larger confusion matrices is that there are no single

calculating sensitivity and specificity for larger confusion matrices is that there are no single values that work for the entire matrix instead we calculate a different sensitivity and specificity for each category so for this confusion matrix we'll need to calculate sensitivity and specificity for the movie troll 2 for the movie Gore police and for the movie cool as ice let's start by calculating sensitivity for troll 2 for troll 2 there were 12 true positives people that were correctly

sensitivity for troll 2 for troll 2 there were 12 true positives people that were correctly predicted to love troll 2 more than Gore police and cool as ice so for true positives we'll plug in 12 and there were 112 plus 83 which equals 195 false negatives people that love to troll 2 but were predicted to love Gore police or cool as ice so for false negatives will plug in 195 and when we do the math we get 0.06 sensitivity for troll 2 tells us that only 6% of the people that loved the movie troll

we get 0.06 sensitivity for troll 2 tells us that only 6% of the people that loved the movie troll 2 more than Gore police or cool as ice were correctly identified now let's calculate the specificity for troll 2 there were 23 plus 77 plus 92 plus 17 equals 209 true negatives people that were correctly predicted to like Gore police or cool as ice more than troll 2 so for true negatives will plug in 209 and there were 102 plus 93 equals 195 false positives people that loved gore police or cool as

209 and there were 102 plus 93 equals 195 false positives people that loved gore police or cool as ice the most but were predicted to love troll 2 so for false positives will plug in 195 and when we do the math we get 0.52 specificity for troll 2 tells us that 52% of the people who loved Gore police or cool as ice more than troll 2 were correctly identified calculating sensitivity and specificity for Gore police is very similar let's start by calculating sensitivity there are 23 true positives

for Gore police is very similar let's start by calculating sensitivity there are 23 true positives people that were correctly predicted to love Gore police the most and 102 plus 92 equals 194 false negatives people who loved Gore police the most but were predicted to love troll 2 or cool as ice more when we do the math we get 0.11 sensitivity for Gore police tells us that only 11% of the people that loved Gore police were correctly identified now let's calculate specificity there were 12 plus

that loved Gore police were correctly identified now let's calculate specificity there were 12 plus 93 plus 83 plus 17 equals 205 true negatives people correctly identified as loving troll 2 or cool as ice more than gore police and 112 plus 77 equals 189 false positives people predicted to love gore police even though they didn't and when we do the math we get 0.52 specificity for gore police tells us that 52% of the people that loved troll 2 or cool as ice more than gore police were correctly

us that 52% of the people that loved troll 2 or cool as ice more than gore police were correctly identified lastly calculating sensitivity and specificity for cool as ice follows the same steps we identify the true positives the false positives the true negatives and the false negatives and then plug in the numbers first for sensitivity then for specificity double bam if we had a confusion matrix with four rows and four columns then we would have to calculate sensitivity and specificity for

with four rows and four columns then we would have to calculate sensitivity and specificity for four different categories little bam in summary sensitivity equals the true positives divided by the sum of the true positives and the false negatives and specificity equals the true negatives divided by the sum of the true negatives and the false positives we can use sensitivity and specificity to help us decide which machine learning method would be best for our data if correctly identifying

to help us decide which machine learning method would be best for our data if correctly identifying positives is the most important thing to do with the data we should choose a method with higher sensitivity if correctly identifying negatives is more important then we should put more emphasis on specificity hooray we've made it to the end of another exciting StatQuest if you like this StatQuest and want to see more please subscribe and if you want to support stack quest well consider buying one

want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs alright until next time quest on

sensitivity is the percentage of actual positives correctly predicted specificity is the percentage of actual negatives correctly predicted precision is something different it's the percentage of predicted positives correctly predicted and rico hits us back to the start is the same as sensitivity is the percentage of actual positives correctly predicted bam [Music]

Hurricane Florence came by while I was working on stat quest dark clouds filled the sky but that didn't stop stat quest stand quest hello I'm Josh stormer and welcome to stat quest today we're going to be talking about some machine learning fundamentals bias and variance and they're gonna be clearly explained imagine we measured the weight and height of a bunch of mice and plotted the data on a graph light mice tend to be short and heavier mice tend to be taller but after a certain weight mice

light mice tend to be short and heavier mice tend to be taller but after a certain weight mice don't get any taller just more obese given this data we would like to predict Mouse height given its weight for example if you told me your mouse weighed this much then we might predict that the mouse is this tall ideally we would know the exact mathematical formula that describes the relationship between weight and height but in this case we don't know the formula so we're going to use two machine

weight and height but in this case we don't know the formula so we're going to use two machine learning methods to approximate this relationship however I'll leave the true relationship curve in the figure for reference the first thing we do is split the data into two sets one for training the machine learning algorithms and one for testing them the blue dots are the training set and the green dots are the testing set here's just the training set the first machine learning algorithm that we

dots are the testing set here's just the training set the first machine learning algorithm that we will use is linear regression aka least squares linear regression it's a straight line to the training set note the straight line doesn't have the flexibility to accurately replicate the arc in the true relationship no matter how we try to fit the line it will never curve thus the straight line will never capture the true relationship between weight and height no matter how well we fit it to the

never capture the true relationship between weight and height no matter how well we fit it to the training set the inability for a machine learning method like linear regression to capture the true relationship is called bias because the straight line can't be curved like the true relationship it has a relatively large amount of bias another machine learning method might fit a squiggly line to the training set the squiggly line is super flexible and hugs the training set along the arc of the

the training set the squiggly line is super flexible and hugs the training set along the arc of the true relationship because the squiggly line can handle the arc in the true relationship between weight and height it has very little bias we can compare how well the straight line and the squiggly line fit the training set by calculating their sums of squares in other words we measure the distances from the fit lines to the data square them and add them up just they are squared so that negative

from the fit lines to the data square them and add them up just they are squared so that negative distances do not cancel out positive distances notice how the squiggly line fits the data so well that the distances between the line and the data are all 0 in the contest to see whether the straight line fits the training set better than the squiggly line the squiggly line wins but remember so far we've only calculated the sums of squares for the training set we also have a testing set now let's

we've only calculated the sums of squares for the training set we also have a testing set now let's calculate the sums of squares for the testing set in the contest to see whether the straight line fits the testing set better than the squiggly line the straight line wins even though the squiggly line did a great job fitting the training set it did a terrible job fitting the testing set in machine learning lingo the difference in fits between data sets is called variance the squiggly line has

learning lingo the difference in fits between data sets is called variance the squiggly line has low bias since it is flexible and can adapt to the curve in the relationship between weight and height but the squiggly line has high variability because it results in vastly different sums of squares for different data sets in other words it's hard to predict how well the squiggly line will perform with future data sets it might do well sometimes and other times it might do terribly in contrast the

future data sets it might do well sometimes and other times it might do terribly in contrast the straight line has relatively high bias since it cannot capture the curve in the relationship between weight and height but the straight line has relatively low variance because the sums of squares are very similar for different data sets in other words the straight line might only give good predictions and not great predictions but they will be consistently good predictions BAM Oh No terminology

and not great predictions but they will be consistently good predictions BAM Oh No terminology alert because the squiggly line fits the training set really well but not the testing set we say that the squiggly line is over fit in machine learning the ideal algorithm has low bias and can accurately model the true relationship and it has low variability by producing consistent predictions across different data sets this is done by finding the sweet spot between a simple model and a complex model

data sets this is done by finding the sweet spot between a simple model and a complex model oh no another terminology alert 3 commonly used methods for finding the sweet spot between simple and complicated models our regularization boosting and bagging the stat quest on a random forest show an example of bagging in action and we'll talk about regularization and boosting in future stat quests double bam hooray we've made it to the end of another exciting stat quest if you liked this stack quest

bam hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest well please consider buying one or two of my original songs alright until next time quest arm

wait till you see the roc and the a you see they're cool yeah stack quest hello i'm josh starmer and welcome to statquest today we're going to talk about roc and auc and they're going to be clearly explained note this stat quest builds on the confusion matrix and sensitivity and specificity stat quests so if you're not already down with those check out the quests also the example i give in this stat quest is based on logistic regression so even though roc and auc apply to more than just logistic

quest is based on logistic regression so even though roc and auc apply to more than just logistic regression make sure you understand those basics let's start with some data the y-axis has two categories obese and not obese the blue dots represent obese mice and the red dots represent mice that are not obese along the x-axis we have weight this mouse is not obese even though it weighs a lot it must be mighty mouse and just full of muscles this mouse doesn't weigh that much but it is still

it must be mighty mouse and just full of muscles this mouse doesn't weigh that much but it is still considered obese for its size now let's fit a logistic regression curve to the data when we're doing logistic regression the y-axis is converted to the probability that a mouse is obese now let's just look at the curve if someone told us that they had a heavy mouse that weighs this much then the curve would tell us that there is a high probability that the mouse is obese if someone told us that

would tell us that there is a high probability that the mouse is obese if someone told us that they had a light mouse that weighs this much then the curve would tell us that there is a low probability that the mouse is obese so this logistic regression tells us the probability that a mouse is obese based on its weight however if we want to classify the mice as obese or not obese then we need a way to turn probabilities into classifications one way to classify mice is to set a threshold at 0.5

to turn probabilities into classifications one way to classify mice is to set a threshold at 0.5 and classify all mice with the probability of being obese greater than 0.5 as obese and classify all mice with the probability of being obese less than or equal to 0.5 as not obese using 0.5 as the cut off we would call this mouse obese and this mouse not obese if another mouse weighed this much then we would classify it as obese and if another mouse weighed this much then we would classify it as

we would classify it as obese and if another mouse weighed this much then we would classify it as not obese to evaluate the effectiveness of this logistic regression with the classification threshold set to 0.5 we can test it with mice that we know are obese and not obese here are the weights of four new mice that we know are not obese and here are the weights of four new mice that we know are obese we know that this mouse is not obese and the logistic regression with the classification

are obese we know that this mouse is not obese and the logistic regression with the classification threshold set to 0.5 correctly classifies it as not obese this mouse is also correctly classified but this mouse is incorrectly classified we know that it is obese but it is classified as not obese the next mouse is correctly classified but this mouse is incorrectly classified the last three mice are correctly classified now we create a confusion matrix to summarize the classifications these three

correctly classified now we create a confusion matrix to summarize the classifications these three samples were correctly classified as obese and this sample was predicted to be obese but was not obese these three samples were correctly classified as not obese and this sample was predicted to be not obese even though it was obese once the confusion matrix is filled in we can calculate sensitivity and specificity to evaluate this logistic regression when 0.5 is the threshold for obesity little

and specificity to evaluate this logistic regression when 0.5 is the threshold for obesity little bam because so far this is all review now let's talk about what happens when we use a different threshold for deciding if a sample is obese or not for example if it was super important to correctly classify every ob sample we could set the threshold to 0.1 this would result in correct classifications for all four obese mice but it would also increase the number of false positives the lower

for all four obese mice but it would also increase the number of false positives the lower threshold would also reduce the number of false negatives because all of the obese mice were correctly classified note if the idea of using a threshold other than 0.5 is blowing your mind imagine that instead of classifying samples as obese or not obese we were classifying samples as infected with ebola and not infected with ebola in this case it's absolutely essential to correctly classify every sample

not infected with ebola in this case it's absolutely essential to correctly classify every sample infected with ebola in order to minimize the risk of an outbreak and that means lowering the threshold even if that results in more false positives on the other hand we could set the threshold to 0.9 in this case we would correctly classify the same number of ob samples as when the threshold was set to 0.5 but we wouldn't have any false positives and we would correctly classify one more sample that

0.5 but we wouldn't have any false positives and we would correctly classify one more sample that was not obese and have the same number of false negatives as before with this data the higher threshold does a better job classifying samples as obese or not obese but the threshold could be set to anything between 0 and 1. how do we determine which threshold is the best for starters we don't need to test every single option for example these thresholds result in the exact same confusion matrix but

test every single option for example these thresholds result in the exact same confusion matrix but even if we made one confusion matrix for each threshold that mattered it would result in a confusingly large number of confusion matrices so instead of being overwhelmed with confusion matrices receiver operator characteristic roc graphs provide a simple way to summarize all of the information the y-axis shows the true positive rate which is the same thing as sensitivity the true positive rate is

shows the true positive rate which is the same thing as sensitivity the true positive rate is the true positives divided by the sum of the true positives and the false negatives in this example the true positives are the samples that were correctly classified as obese and the false negatives are the ob samples that were incorrectly classified as not obese the true positive rate tells you what proportion of ob samples were correctly classified the x-axis shows the false positive rate which is

of ob samples were correctly classified the x-axis shows the false positive rate which is the same thing as one minus specificity the false positive rate is the false positives divided by the sum of the false positives and true negatives the false positives are the non-ob samples that were incorrectly classified as obese and the true negatives are the samples correctly classified as not obese the false positive rate tells you the proportion of not ob samples that were incorrectly classified and

false positive rate tells you the proportion of not ob samples that were incorrectly classified and are false positives to get a better sense of how the roc works let's draw one from start to finish using our example data we'll start by using a threshold that classifies all of the samples as obese and that gives us this confusion matrix first let's calculate the true positive rate there are four true positives and there were zero false negatives doing the math gives us one the true positive

true positives and there were zero false negatives doing the math gives us one the true positive rate when the threshold is so low that every single sample is classified as obese is one this means that every single ob sample was correctly classified now let's calculate the false positive rate there were four false positives in the confusion matrix and there were zero true negatives doing the math gives us one the false positive rate when the threshold is so low that every single sample is

math gives us one the false positive rate when the threshold is so low that every single sample is classified as obese is also one this means that every single sample that was not obese was incorrectly classified as obese now plot a point at one comma one a point at one comma one means that even though we correctly classified all of the ob samples we incorrectly classified all of the samples that were not obese this green diagonal line shows where the true positive rate equals the false

that were not obese this green diagonal line shows where the true positive rate equals the false positive rate any point on this line means that the proportion of correctly classified ob samples is the same as the proportion of incorrectly classified samples that are not obese going back to the logistic regression let's increase the threshold so that all but the lightest sample are called obese the new threshold gives us this confusion matrix we then calculate the true positive rate and the

the new threshold gives us this confusion matrix we then calculate the true positive rate and the false positive rate and plot a point at 0.75 comma 1. since the new point is to the left of the dotted green line we know that the proportion of correctly classified samples that were obese is greater than the proportion of samples that were incorrectly classified as obese in other words the new threshold for deciding if a sample is obese or not is better than the first one now let's increase the

for deciding if a sample is obese or not is better than the first one now let's increase the threshold so that all but the two lightest samples are called obese the new threshold gives us this confusion matrix we then calculate the true positive rate and the false positive rate and plot a point at 0.5 comma 1. the new point is even further to the left of the dotted green line showing that the new threshold further decreases the proportion of samples that were incorrectly classified as obese in

threshold further decreases the proportion of samples that were incorrectly classified as obese in other words the new threshold is the best one so far now we increase the threshold again create a confusion matrix calculate the true positive rate and the false positive rate and plot the point now we increase the threshold again create a confusion matrix calculate the true positive rate and the false positive rate and plot the point the threshold represented by the new point correctly classifies

positive rate and plot the point the threshold represented by the new point correctly classifies 75 percent of the ob samples and 100 percent of the samples that were not obese in other words this threshold resulted in no false positives now we increase the threshold again and plot the point now we increase the threshold again and plot the point lastly we choose a threshold that classifies all of the samples as not obese and plot the point the point at zero comma zero represents a threshold

of the samples as not obese and plot the point the point at zero comma zero represents a threshold that results in zero true positives and zero false positives if we want we can connect the dots and that gives us an roc graph the roc graph summarizes all of the confusion matrices that each threshold produced without having to sort through the confusion matrices i can tell that this threshold is better than this threshold and depending on how many false positives i'm willing to accept the

is better than this threshold and depending on how many false positives i'm willing to accept the optimal threshold is either this one or this one bam now that we know what an roc graph is let's talk about the area under the curve or auc the auc is 0.9 bam the auc makes it easy to compare one roc curve to another the auc for the red roc curve is greater than the auc for the blue roc curve suggesting that the red curve is better so if the red roc curve represented logistic regression and the

that the red curve is better so if the red roc curve represented logistic regression and the blue roc curve represented a random forest you would use the logistic regression double bam now one last thing before we're all done although roc graphs are drawn using true positive rays and false positive rates to summarize confusion matrices there are other metrics that attempt to do the same thing for example people often replace the false positive rate with precision precision is the true positives

example people often replace the false positive rate with precision precision is the true positives divided by the sum of the true positives and false positives precision is the proportion of positive results that were correctly classified if there were lots of samples that were not obese relative to the number of ob samples then precision might be more useful than the false positive rate this is because precision does not include the number of true negatives in its calculation and is not

is because precision does not include the number of true negatives in its calculation and is not affected by the imbalance in practice this sort of imbalance occurs when studying a rare disease in this case the study will contain many more people without the disease than with the disease bam in summary roc curves make it easy to identify the best threshold for making a decision this threshold is better than this one and the auc can help you decide which categorization method is better the red

better than this one and the auc can help you decide which categorization method is better the red method is better than the blue method hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest well consider getting a t-shirt or a hoodie or buying one or two of my original songs the links for doing that are below alright until next time quest on

let's make a graph let's make it look cool thank goodness Stack quest is here just step quest rules stack quest hello I'm Josh Starla and welcome to stack quest today we're gonna talk about drawing ROC graphs and calculating the AUC in R if you're interested in doing this at home there's a link to the example code in the description below in this stack quest we'll draw simple ROC graph extract thresholds for a specific region in the ROC draw and compute a partial area under the curve and end by

for a specific region in the ROC draw and compute a partial area under the curve and end by layering two ROC graphs so that they can be easily compared note this stack quest builds on the example used in the ROC and AUC stack quest so you might want to watch the first few minutes of that one if you haven't already the first thing we need to do is load in PR OC the library that will draw ROC graphs for us if you don't have P ROC installed just use installed out packages PR OC to install it we're

for us if you don't have P ROC installed just use installed out packages PR OC to install it we're also going to use the random forests package as part of the example for the purposes of this stack quest you just need to know that a random forest is a way to classify samples and we can change the threshold that we use to make those decisions however if you want more details check out the quests don't have random forests installed just use install dot packages random forests to install it since

have random forests installed just use install dot packages random forests to install it since we are going to generate an example dataset let's set the seed for the random number generator so that we can reproduce our results note I usually set the random number seed to 42 but 420 made a nicer looking set of random data this example dataset will be just like the one we used in the ROC and AOC stat quest only this one will have 100 samples instead of just eight so let's start by setting num

stat quest only this one will have 100 samples instead of just eight so let's start by setting num dots ampuls to 100 now we'll create 100 measurements and store them in a variable called weight we do this by using the R norm function to generate 100 random values from a normal distribution with the mean set to 172 and the standard deviation set to 29 just just in case you're interested the internet told me that the average man weighs 172 pounds with a standard deviation of 29 and then we use

told me that the average man weighs 172 pounds with a standard deviation of 29 and then we use the sort function to sort the numbers from low to high this next line of code classifies an individual as obese or not obese the way we are going to classify a sample as obese is to start by using the rank function to rank the weights from lightest to heaviest the lightest sample will have rank equals 1 and the heaviest sample will have rank equals 100 then we scale the ranks by 100 this means that

1 and the heaviest sample will have rank equals 100 then we scale the ranks by 100 this means that the lightest sample will equal 1 divided by 100 which equals 0.01 and the heaviest sample will equal 100 divided by 100 which equals 1 then we compare the scaled ranks to random numbers between 0 & 1 and if the random number is smaller than the scaled rank then the individual is classified as obese otherwise it is classified as not obese the if smaller than obese otherwise not obese is performed

otherwise it is classified as not obese the if smaller than obese otherwise not obese is performed by the if-else function and the results are stored in a variable called obese to see what that fancy line of code just did we can print out the contents of obese the zeroes stand for not obese and the ones stand for obese the lighter samples are mostly zeros not obese and the heavier samples are mostly wands obese now let's plot the data to see what it looks like BAM these samples are obese and

wands obese now let's plot the data to see what it looks like BAM these samples are obese and these samples are not obese now we will use the GLM function to fit a logistic regression curve to the data if you want to learn more about how the GLM function works there's a stat quest that can fill you in on the details otherwise just know that we can store the results of the GLM function in a variable called GL m dot fit and pass weight and the fitted values stored in GL m dot fit into the lines

called GL m dot fit and pass weight and the fitted values stored in GL m dot fit into the lines function to draw a curve that tells us the predicted probability that an individual is obese or not obese GL m dot fit dollar sign fitted out values contains the y axis coordinates along the curve for each sample in other words GL m dot fit dollar sign fitted dot values contains estimated probabilities that each sample is obese we will use the known classifications and the estimated probabilities to

that each sample is obese we will use the known classifications and the estimated probabilities to draw an ROC curve we use the ROC function from the PR OC library to draw the ROC graph we pass in the known classifications obese or not obese for each sample and the estimated probabilities that each sample is obese and we tell the ROC function to draw the graph not just calculate all of the numbers used to draw the graph when you use the ROC function it prints out a bunch of stuff the first part

used to draw the graph when you use the ROC function it prints out a bunch of stuff the first part just echoes what you typed in and isn't very interesting the second part is a little more interesting it tells us how many samples were not obese remember not obese equals zero and how many samples were obese obese equals one the third part is the most interesting of all it tells us the area under the curve or the AUC tada here's the graph here's the ROC curve and here's the diagonal line that

the curve or the AUC tada here's the graph here's the ROC curve and here's the diagonal line that shows where the true positive rate is the same as the false positive rate but if you draw this graph in our studio then you'll also get this ugly padding on each side to get rid of the ugly padding we have to use the par function and muck around with the graphics parameters in this case we set PT y aka the plot type to s which is short for square then we use the up arrow key to bring back the call

the plot type to s which is short for square then we use the up arrow key to bring back the call to the ROC function and we get a much nicer ROC graph by default the ROC function plots specificity on the x-axis instead of one - specificity as a result the x-axis goes from one on the left side to zero on the right side if using a backwards X access gives you a headache don't freak out instead said legacy taxis to true and the ROC function who will use one - specificity on the x-axis and all will

legacy taxis to true and the ROC function who will use one - specificity on the x-axis and all will be right in the world again now that we're on the subject of changing the axes I have a confession to make I have a very hard time remembering what sensitivity and specificity mean so I set percent to true so that the axes are in percentages rather than values between zero and one and I label the x-axis false positive percentage and label the y-axis true positive percentage BAM now we have a

x-axis false positive percentage and label the y-axis true positive percentage BAM now we have a nice-looking x-axis and a nice-looking y-axis we can also change the color of the ROC curve and make it thicker you can change the color to anything you want by setting the call parameter I set it to RGB values that I found on the color Brewer website and you can change the line thickness to whatever you want by setting the lwd parameter now imagine were interested in the range of thresholds that

you want by setting the lwd parameter now imagine were interested in the range of thresholds that resulted in this part of the ROC curve we can access those thresholds by saving the calculations that the ROC function does in a variable and then make a data frame that contains all of the true positive percentages by multiplying the sensitivities by 100 and the false positive percentages by multiplying 1 minus specificities by 100 and last but not least the thresholds we can then use the head

1 minus specificities by 100 and last but not least the thresholds we can then use the head function to look at the first six rows of the new data frame and we see that when the threshold is set to negative infinity so that every single sample is called obese then the TPP the true positive percentage is 100 because all of the obese samples were correctly classified and the fpp the false positive percentage is also 100 because all of the samples that were not obese were incorrectly classified so

is also 100 because all of the samples that were not obese were incorrectly classified so the first row in roc DF corresponds to the upper right hand corner of the ROC curve we can use the tail function to look at the last six rows of the data frame and we see that when the threshold is set to positive infinity so that every single sample is classified not obese then the TPP and fpp are both zero because none of the samples were classified either correctly or incorrectly obese so the last row

because none of the samples were classified either correctly or incorrectly obese so the last row in our OCD f corresponds to the bottom left-hand corner of the ROC curve now we can isolate the TPP the fpp and the thresholds used when the true positive rate is between 60 and 80 if we were interested in choosing a threshold in this range we could pick one that had the optimal balance of true positives and false positives now let's go back to talking about customizing with the ROC function

positives and false positives now let's go back to talking about customizing with the ROC function drawers if we want to print the AUC directly on the graph then we set the print auc parameter to true you can also draw and calculate a partial area under the curve these are useful when you want to focus on the part of the ROC curve that only allows for a small number of false positives to print and draw the partial a you see we start by setting the print a you see parameter to true we then

and draw the partial a you see we start by setting the print a you see parameter to true we then specify where along the x-axis you want the AUC to be printed otherwise the text might overlap something important note I settled on 45 after trying a bunch of different locations then we set partial AUC to the range of specificity values that we want to focus on note the range of values is in terms of specificity not one - specificity so one hundred percent specificity corresponds to zero percent

of specificity not one - specificity so one hundred percent specificity corresponds to zero percent on our one - specificity axis and ninety percent specificity corresponds to ten percent on our one - specificity axis then we draw the partial area under the curve by setting a UC polygon to true and we set a UC polygon call to specify the polygons color note I use the same RGB numbers that I used to make the line blue however I added two digits to the end to make the color semi-transparent BAM

to make the line blue however I added two digits to the end to make the color semi-transparent BAM for those of you keeping track were up to three exclamation points on the BAM lastly let's talk about how to overlap two ROC curves so that they are easy to compare we'll start by making a random forest classifier with the same data set now we draw the original ROC curve for the logistic regression then we add the ROC curve for the random forest we do this with the plot ROC function almost

then we add the ROC curve for the random forest we do this with the plot ROC function almost everything in the call to plot ROC is the same as in the call to the ROC function however since we are using a random forest for the second ROC we pass in the number of trees in the forest that voted correctly we also set the color to green instead of blue again I got these RGB values from the color Brewer website we also set ad to true so that this ROC curve is added to an existing graph and we set

website we also set ad to true so that this ROC curve is added to an existing graph and we set print AUC dot why 240 so that the AUC for the random forest is printed below the AUC for the logistic regression lastly we draw legend in the bottom right hand corner um once we're all done drawing ROC graphs we need to reset the PTY graphical parameter back to its default value M which is short for maximum as in use the maximum amount of space provided to draw graphs hooray we've made it to the end

as in use the maximum amount of space provided to draw graphs hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest well consider getting a t-shirt or a hoodie or buying one or two of my original songs the links to do that are all below alright until next time quest on

yes you can understand entropy hooray steadquest hello i'm josh starmer and welcome to statquest today we're going to talk about entropy for data science and it's going to be clearly explained note this stat quest assumes that you are already familiar with the main ideas of expected values if not check out the quest entropy is used for a lot of things in data science for example entropy can be used to build classification trees which are used to classify things entropy is also the basis of

used to build classification trees which are used to classify things entropy is also the basis of something called mutual information which quantifies the relationship between two things and entropy is the basis of relative entropy aka the colback liebler distance and cross entropy which show up all over the place including fancy dimension reduction algorithms like t snee and umap what these three things have in common is that they all use entropy or something derived from it to quantify

three things have in common is that they all use entropy or something derived from it to quantify similarities and differences so let's learn how entropy quantifies similarities and differences however in order to talk about entropy first we have to understand surprise so let's talk about chickens imagine we had two types of chickens orange and blue and instead of just letting them randomly roam all over the screen our friends stat squats chased them around until they were organized into three

all over the screen our friends stat squats chased them around until they were organized into three separate areas a b and c now if statsquatch just randomly picked up a chicken in area a then because there are six orange chickens and only one blue chicken there is a higher probability that they will pick up an orange chicken and since there is a higher probability of picking up an orange chicken it would not be very surprising if they did in contrast if statsquatch picked up the blue chicken

it would not be very surprising if they did in contrast if statsquatch picked up the blue chicken from area a we would be relatively surprised area b has a lot more blue chickens than orange and because there is now a higher probability of picking up a blue chicken we would not be very surprised if it happened and because there is a relatively low probability of picking the orange chicken that would be relatively surprising lastly area c has an equal number of orange and blue chickens thus

would be relatively surprising lastly area c has an equal number of orange and blue chickens thus regardless of what color chicken we pick up we would be equally surprised combined these areas tell us that surprise is in some way inversely related to probability in other words when the probability of picking up a blue chicken is low the surprise is high and when the probability of picking up a blue chicken is high the surprise is low bam now we have a general intuition of how probability is

blue chicken is high the surprise is low bam now we have a general intuition of how probability is related to surprise now let's talk about how to calculate surprise because we know there is a type of inverse relationship between probability and surprise it's tempting to just use the inverse of probability to calculate surprise because when we plot the inverse we see that the closer the probability is to zero the larger the y-axis value however there's at least one problem with just using the

is to zero the larger the y-axis value however there's at least one problem with just using the inverse of the probability to calculate surprise to get a better sense of this problem let's talk about the surprise associated with flipping a coin imagine we had a terrible coin and every time we flipped it we got heads blah blah blah blah ugh flipping this coin is super boring hey statsquatch how surprised would you be if the next flip gave us heads i would not be surprised at all so when the

surprised would you be if the next flip gave us heads i would not be surprised at all so when the probability of getting heads is one then we want the surprise for getting heads to be zero however when we take the inverse of the probability of getting heads we get one instead of what we want zero and this is one reason why we can't just use the inverse of the probability to calculate surprise so instead of just using the inverse of the probability to calculate surprise we use the log of the

so instead of just using the inverse of the probability to calculate surprise we use the log of the inverse of the probability now since the probability of getting heads is 1 and thus we will always get heads and it will never surprise us the surprise for heads is zero in contrast since the probability for getting tails is zero and thus will never get tails it doesn't make sense to quantify the surprise of something that will never happen so when we plug in 0 for the probability and use the

surprise of something that will never happen so when we plug in 0 for the probability and use the properties of logs to turn the division into subtraction the second term is the log of 0 and because the log of 0 is undefined the whole thing is undefined and this result is ok because we're talking about the surprise associated with something that never happens like the inverse of the probability the log of the inverse of the probability gives us a nice curve and the closer the probability gets

the log of the inverse of the probability gives us a nice curve and the closer the probability gets to zero the more surprise we get but now the curve says there is no surprise when the probability is one so surprise is the log of the inverse of the probability bam note when calculating surprise for two outputs in this case the two outputs are heads and tails then it is customary to use the log base 2 for the calculations now that we know what surprise is let's imagine that our coin gets heads

2 for the calculations now that we know what surprise is let's imagine that our coin gets heads 90 percent of the time and it gets tails 10 percent of the time now let's calculate the surprise for getting heads and tails as expected because getting tails is much rarer than getting heads the surprise for tails is much larger now let's flip this coin three times and we get heads heads and tails the probability of getting two heads and one tail is 0.9 times 0.9 for the heads times 0.1 for the

the probability of getting two heads and one tail is 0.9 times 0.9 for the heads times 0.1 for the tails and if we want to know exactly how surprising it is to get two heads and one tail then we can plug this probability into the equation for surprise and use the properties of logs to convert the division into subtraction and use the properties of logs to convert the multiplication into addition and then plug in chug and we get 3.62 but more importantly we see that the total surprise for a

and then plug in chug and we get 3.62 but more importantly we see that the total surprise for a sequence of coin tosses is just the sum of the surprises for each individual toss in other words the surprise for getting one heads is 0.15 and since we got two heads we add 0.15 two times plus 3.32 for the one tail to get the total surprise for getting two heads and one tail medium bam now because this diagram takes up a lot of space let's summarize the information in a table the first row in the

diagram takes up a lot of space let's summarize the information in a table the first row in the table tells us the probability of getting heads or tails and the second row tells us the associated surprise now if we wanted to estimate the total surprise after flipping the coin 100 times we approximate how many times we will get heads by multiplying the probability we will get heads 0.9 by 100 and we estimate the total surprise from getting heads by multiplying by 0.15 so this term represents how

estimate the total surprise from getting heads by multiplying by 0.15 so this term represents how much surprise we expect from getting heads in 100 coin flips likewise we can approximate how many times we will get tails by multiplying the probability we will get tails 0.1 by 100 and we estimate the total surprise from getting tails by multiplying by 3.32 so the second term represents how much surprise we expect from getting tails in 100 coin flips now we can add the two terms together to find

we expect from getting tails in 100 coin flips now we can add the two terms together to find out the total surprise and we get 46.7 hey statsquatch is back ok i see that we just estimated the surprise for 100 coin flips but aren't we supposed to be talking about entropy funny you should ask if we divide everything by the number of coin tosses 100 then we get the average amount of surprise per coin toss 0.47 so on average we expect the surprise to be 0.47 every time we flip the coin and that is

toss 0.47 so on average we expect the surprise to be 0.47 every time we flip the coin and that is the entropy of the coin the expected surprise every time we flip the coin double bam in fancy statistics notation we say that entropy is the expected value of the surprise anyway since we are multiplying each probability by the number of coin tosses 100 and also dividing by the number of coin tosses 100 then all of the values that represent the number of coin tosses 100 cancel out and we are left

100 then all of the values that represent the number of coin tosses 100 cancel out and we are left with the probability that a surprise for heads will occur times its surprise plus the probability that a surprise for tails will occur times its surprise thus the entropy 0.47 represents the surprise we would expect per coin toss if we flipped this coin a bunch of times and yes expecting surprise sounds silly but it's not the silliest thing i've heard note we can rewrite entropy just like an

sounds silly but it's not the silliest thing i've heard note we can rewrite entropy just like an expected value using fancy sigma notation the x represents a specific value for surprise times the probability of observing that specific value for surprise so for the first term getting heads the specific value for surprise is 0.15 and the probability of observing that surprise is 0.9 so we multiply those values together then the sigma tells us to add that term to the term for tails either way we

those values together then the sigma tells us to add that term to the term for tails either way we do the math we get 0.47 now personally once i saw that entropy was just the average surprise that we could expect entropy went from something that i had to memorize to something i could derive because now we can plug the equation for surprise in for x the specific value and we can plug in the probability and we end up with the equation for entropy bam unfortunately even though this equation is

and we end up with the equation for entropy bam unfortunately even though this equation is made from two relatively easy to interpret terms the surprise times the probability of the surprise this isn't the standard form of the equation for entropy that you'll see out in the wild first we have to swap the order of the two terms then we use the properties of logs to convert the fraction into subtraction and the log of one is zero then we multiply both terms and the difference by the probability

and the log of one is zero then we multiply both terms and the difference by the probability then lastly we pull the minus sign out of the summation and we end up with the equation for entropy that claude shannon first published in 1948 small bam that said even though this is the original version and the one you'll usually see i prefer this version since it is easily derived from surprise and it is easier to see what is going on now going back to the original example we can calculate the

it is easier to see what is going on now going back to the original example we can calculate the entropy of the chickens so let's calculate the entropy for area a because six of the seven chickens are orange we plug in six divided by seven for the probability then we add a term for the one blue chicken by plugging in 1 divided by 7 for the probability now we just do the math and get 0.59 note even though the surprise associated with picking up an orange chicken is much smaller than picking up a

though the surprise associated with picking up an orange chicken is much smaller than picking up a blue chicken there's a much higher probability that we will pick up an orange chicken than pick up a blue chicken thus the total entropy 0.59 is much closer to the surprise associated with orange chickens than blue chickens likewise we can calculate the entropy for area b only this time the probability of randomly picking up an orange chicken is 1 divided by 11 and the probability of picking up a

of randomly picking up an orange chicken is 1 divided by 11 and the probability of picking up a blue chicken is 10 divided by 11 and the entropy is 0.44 in this case the surprise for picking up an orange chicken is relatively high but the probability of it happening is so low that the total entropy is much closer to the surprise associated with picking up a blue chicken we also see that the entropy value the expected surprise is less for area b than area a this makes sense because area b has a

value the expected surprise is less for area b than area a this makes sense because area b has a higher probability of picking a chicken with a lower surprise lastly the entropy for area c is one and that makes the entropy for area c the highest we have calculated so far in this case even though the surprise for orange and blue chickens is relatively moderate one we always get the same relatively moderate surprise every time we pick up a chicken and it is never outweighed by a smaller value for

moderate surprise every time we pick up a chicken and it is never outweighed by a smaller value for surprise like we saw earlier for areas a and b as a result we can use entropy to quantify the similarity or difference in the number of orange and blue chickens in each area entropy is highest when we have the same number of both types of chickens and as we increase the difference in the number of orange and blue chickens we lower the entropy triple bam p.s the next time you want to surprise

of orange and blue chickens we lower the entropy triple bam p.s the next time you want to surprise someone just whisper the log of the inverse of the probability bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if

exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

[Music] Mutual in formation it's really cool gonna check it out now stat Quest hello I'm Josh charmer and welcome to stat Quest today we're going to talk about Mutual information and it's going to be clearly explained I don't want to spend a lot of time scaling up my stuff to work in the cloud I would rather spend my time working all my stuff cause that's the fun part lightning this stack Quest is also sponsored by the letters a b and c a always b b c curious always be curious imagine we had a

also sponsored by the letters a b and c a always b b c curious always be curious imagine we had a data set with a lot of variables which are also called features and because we want to simplify the amount of time we spend collecting data we wanted to remove some of them thus we want to know how much each variable can tell us about the thing we want to predict in this case we want to predict if someone loves the movie Troll 2 and we want to know which of these variables likes popcorn height Etc

loves the movie Troll 2 and we want to know which of these variables likes popcorn height Etc play the biggest role in making good predictions in theory we could use something like r squared to see if a specific variable is related to Love's Troll 2 except r squared only works with continuous data and loves Troll 2 is yes or no and so is likes PopCorn by the way if you're not familiar with r squared you probably should be so check out the quest so when we have a mixture of continuous and

r squared you probably should be so check out the quest so when we have a mixture of continuous and discrete variables how do we quantify their relationship to the thing we want to predict well one way to quantify how each variable is related to Love's Troll 2 is to use Mutual information like r squared Mutual information is a numeric value that gives us a sense of how closely related two variables are bam the equation for calculating Mutual information looks kind of nasty but don't worry we'll

are bam the equation for calculating Mutual information looks kind of nasty but don't worry we'll go through it one step at a time in a nutshell these two sigmas greet characters that stand for summation tell us that we're going to do a lot of addition and we're going to be adding up joint probabilities and dividing some of those joint probabilities by marginal probabilities um what are joint and marginal probabilities joint probabilities are just the probability of two things occurring at the

marginal probabilities joint probabilities are just the probability of two things occurring at the same time for example given our data set we can calculate the probability that someone likes popcorn and loves troll too in this case the probability that someone likes popcorn and loves Troll 2 is 3 divided by five because three of the five people in the data set like popcorn and love troll 2. in contrast marginal probabilities are just the probability of one thing occurring for example if we

contrast marginal probabilities are just the probability of one thing occurring for example if we just focus on likes popcorn we can calculate the probability that someone does not like popcorn in this case the probability that someone does not like popcorn is two divided by five because two of the five people in the data set do not like popcorn likewise we can calculate the marginal probability that someone does not love troll 2. the probability that someone does not love Troll 2 is 1 divided

that someone does not love troll 2. the probability that someone does not love Troll 2 is 1 divided by five because only one of the five people in the data set does not love troll 2. now for any pair of variables like likes popcorn and love stroll too we can keep track of their joint and marginal probabilities in a table in this table the first two columns represent whether or not someone likes popcorn in the first two rows represent whether or not someone loves troll 2. The Joint probability

popcorn in the first two rows represent whether or not someone loves troll 2. The Joint probability that someone likes popcorn and loves Troll 2 which we calculated earlier goes in the upper left hand corner of the table likewise we can calculate the joint probability that someone does not like popcorn and loves troll 2. and put that in the top of the second column now if we want to know the marginal probability that someone loves Troll 2 we can either calculate it like we did earlier by

marginal probability that someone loves Troll 2 we can either calculate it like we did earlier by dividing the number of people that love Troll 2 by the total number of people or we can simply add the joint probability that someone likes popcorn and loves Troll 2 to the Joint probability that someone does not like popcorn and loves troll too and when we do the math we get 4 divided by five so either way we get the same marginal probability 4 divided by five likewise we can solve for the

so either way we get the same marginal probability 4 divided by five likewise we can solve for the remaining joint probabilities and plug them into the table and we can solve for the marginal probability that someone does not love Troll 2 either directly from the data or we can add up the two joint probabilities in the second row in the table either way we get the same result then we can calculate the marginal probability that someone likes popcorn either directly or by adding the values in the

the marginal probability that someone likes popcorn either directly or by adding the values in the column together then we can calculate the marginal probability that someone does not like popcorn now we have a table filled out with all of the joint and marginal probabilities associated with likes popcorn and loves troll 2. bam bam note the marginal probabilities are all in the margins of the table so that's where the name comes from small bam anyway and now that we have this table of joint and

so that's where the name comes from small bam anyway and now that we have this table of joint and marginal probabilities for likes popcorn and loves Troll 2 we can calculate their Mutual information by plugging the joint and marginal probabilities into this equation The Joint probabilities go here and here and the marginal probabilities both go here note the two summations ensure that we include all possible combinations of the variables likes popcorn yes and no with loves Troll 2 yes and no

all possible combinations of the variables likes popcorn yes and no with loves Troll 2 yes and no for example we start by plugging in the joint and marginal probabilities for where both popcorn and loves Troll 2 equal yes then we add a term where popcorn is yes and loves Troll 2 is no then we add a term where popcorn is no and loves Troll 2 is yes and lastly a term where popcorn is no and loves Troll 2 is no now that we have expanded this double summation by adding terms for all possible

Troll 2 is no now that we have expanded this double summation by adding terms for all possible combinations of popcorn and loves troll too we plug in the joint and marginal probabilities that we calculated earlier for example The Joint probability that someone likes popcorn and Troll 2 is 3 divided by five so we plug that in and then we plug in the marginal probability that someone likes popcorn three divided by five and the marginal probability that someone loves Troll 2 4 divided by five then

divided by five and the marginal probability that someone loves Troll 2 4 divided by five then we just plug in the joint and marginal probabilities for all of the other terms note before we move on I want to point out that the log function that we use in this equation can be any base however the default log function for most machine learning and most programming languages is the natural log so that's what we use here anyway when we do the math the whole thing is equal to 0.22 so the mutual

that's what we use here anyway when we do the math the whole thing is equal to 0.22 so the mutual information between likes popcorn and loves Troll 2 is 0.22 we can then compare this Mutual information value 0.22 to the mutual information values for other variables to decide which ones are the most useful double bam oh no it's a super technical note if you look carefully at this second term in the equation you'll see that if we divide 0 by 5 then we'll get a zero here and we'll get a zero in

the equation you'll see that if we divide 0 by 5 then we'll get a zero here and we'll get a zero in this numerator which means the whole term is zero times the log of zero and technically the log of 0 is not defined the good news is that even though the log of 0 is not defined as X gets close to zero x times the log of x equals zero so the second term is just equal to zero tiny bam now let's go back to the raw data and see what happens when we change it so that likes popcorn is always yes in

back to the raw data and see what happens when we change it so that likes popcorn is always yes in other words let's see what the mutual information is now that likes popcorn is always yes and never changes so just like before let's fill out the table of the joint and marginal probabilities and now let's use the table to calculate the mutual information first let's expand the summation so that we have a term for all possible combinations of likes popcorn and loves troll 2. then we plug numbers

have a term for all possible combinations of likes popcorn and loves troll 2. then we plug numbers into each term and when we do the math we get zero in other words when likes popcorn never changes it can't tell us anything about what's happening in love's troll 2. and in general when at least one of the two columns never changes then the mutual information will be zero because something that never changes can't tell us about something that does now let's go back to the raw data and see what

changes can't tell us about something that does now let's go back to the raw data and see what happens when we change it so that likes popcorn is yes when loves Troll 2 is yes and likes popcorn is no when loves Troll 2 is no in other words now both columns change but they change in the exact same ways so let's fill out the table of the joint and marginal probabilities and use the table to calculate the mutual information and when we do the math we get something close to but not exactly 0.5 so

the mutual information and when we do the math we get something close to but not exactly 0.5 so given this data set where the two columns change and they change in the exact same ways the mutual information is close to 0.5 and this value is larger than 0.22 which is what we got when we calculated the mutual information with the original data and remember both columns changed in the original data but not in exactly the same ways so when both columns change and the changes in one tell us more

but not in exactly the same ways so when both columns change and the changes in one tell us more about what's going on in the other than the mutual information value is larger now let's go back to the raw data again and see what happens when we change it so that likes popcorn is yes when loves Troll 2 is no and likes popcorn is no when loves Troll 2 is yes in other words let's see what the mutual information is when both columns change but in the exact opposite ways so we fill out the table of

information is when both columns change but in the exact opposite ways so we fill out the table of the joint and marginal probabilities [Music] and plug the numbers into the equation for Mutual information and when we do the math just like when we had both columns changing the exact same ways we get something close to but not exactly 0.5 in other words when both columns change it doesn't matter if they change in the exact same or exact opposite ways they both give us the same Mutual information

they change in the exact same or exact opposite ways they both give us the same Mutual information and the changes in one column can tell us exactly what is changing in the other double bam so far we've seen how to calculate Mutual information for two discrete variables likes popcorn and loves troll 2. how do we calculate the mutual information when we have a continuous variable like height when we want to calculate the mutual information and one or more of the variables is continuous then we

we want to calculate the mutual information and one or more of the variables is continuous then we simply create a histogram of the continuous values and then we can use each bin in the histogram as a discrete category and use the discrete categories to calculate the joint and marginal probabilities note because we have three bins in the histogram we have three columns of joint probabilities in the table and that means that when we expand the equation for Mutual information we end up with six

the table and that means that when we expand the equation for Mutual information we end up with six terms because we have Troll 2 equals yes and Troll 2 equals no for each of the three bins then we just do the math and get 0.22 and since we got 0.22 for both likes popcorn and height we can use either one triple bam one last note if you're familiar with how entropy is used in data science and if not check out the quest then you may have noticed that the equation for Mutual information has a lot

check out the quest then you may have noticed that the equation for Mutual information has a lot in common with the equation for entropy they are both Psalms of probabilities times logs these equations are similar because Mutual information can be derived from entropy and in a sense Mutual information tells us how on average the surprise or change we see in one variable is related to the surprise or change in another for example do you remember when we calculated the mutual information and

or change in another for example do you remember when we calculated the mutual information and likes popcorn never changed well when we have something that never changes then the surprise is always zero so it's no surprise that the mutual information is also zero because the changes in loves Troll 2 have nothing to be related to in contrast when the surprise is greater than zero for both variables and the changes are related then the mutual information will also be greater than zero and reflect

and the changes are related then the mutual information will also be greater than zero and reflect how much the changes are related bam and now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the statquest PDF study guides and my book The stackquest Illustrated guide to machine learning at stackquest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and

hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support stat Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

The Main Ideas of Fitting a Line to Data (The Main Ideas of Least Squares and Linear Regression.)

When we go on a quest and that quest is really awesome. It's that StatQuest Yeah, yeah, yeah Hello, and welcome to StatQuest. StatQuest is brought to you by the friendly folks in the genetics Department at the University of North Carolina at Chapel Hill. Today, we're going to talk about fitting a line to Data. aka Least Squares aka Linear regression. Now let's get to it. Okay, you worked really hard. You did the experiment and now you got some data. Here it is plotted on an XY graph. We usually

You did the experiment and now you got some data. Here it is plotted on an XY graph. We usually like to add a line to our data so we can see what the trend is. But is this the best line we should use? Or does this new line fit the data even better? Or what about this line is it better or worse than the other options? A horizontal line that cuts through the average y value of our data is probably the worst fit of all. However, it gives us a good starting point for talking about how to find the

the worst fit of all. However, it gives us a good starting point for talking about how to find the optimal line to fit our data. So now let's focus on this horizontal line. It cuts through the average Y value which is 3.5. Let's just call this point B. Because different data sets will have different average values on the Y axis. That is to say the Y value for this line is B, and for this particular data set B equals 3.5. We can measure how well this line fits the data by seeing how close it is

data set B equals 3.5. We can measure how well this line fits the data by seeing how close it is to the data points. We'll start with the point in the lower left-hand corner of the graph with Coordinates X-One Y-one. We can now draw a line from this point up to the line that cuts across the average Y value for this data set. The distance between the line and the first data point equals B minus Y1. The distance between the line and the second data point is B minus Y2? So far the total distance

The distance between the line and the second data point is B minus Y2? So far the total distance between the data points and the line is the sum of the two distances and we can calculate the distance between the line and the third point that equals B minus Y3. Now we've added the third distance to our total sum. The distance for the fourth point is B minus Y4. Note Y4 is greater than B. Because it's above the horizontal line, so this value will be negative. That's no good, since it will

it's above the horizontal line, so this value will be negative. That's no good, since it will subtract from the total and make the overall fit appear better than it really is. The fifth data point is even higher relative to the horizontal line this distance is going to be very negative. Back in the day when they were first working this out they probably tried taking the absolute value of everything and then discovered that it made the math pretty tricky. So they ended up squaring each term.

and then discovered that it made the math pretty tricky. So they ended up squaring each term. Squaring ensures that each term is positive. Here's the equation that shows the total distance the data points have from the horizontal line. In this specific example, 24.62 is our measure of how well this line fits the data. It's called the sum of squared residuals because the residuals are the differences between the real data and the line and we are summing the square of these values. Now let's see

between the real data and the line and we are summing the square of these values. Now let's see how good the fit is if we rotate the line a little bit. In this case, the sum of squared residuals equals 18.72. This is better than before. Does this fit improve if we rotate a little more? Yes, the sum of squared residuals now equals 14.05. That value keeps going down the more we rotate the line. What if we rotate the line a whole lot? Well as you can see the fit gets worse, in this case the sum of

if we rotate the line a whole lot? Well as you can see the fit gets worse, in this case the sum of squared residuals is 31.71. so there's a sweet spot in between horizontal and two vertical. To find that sweet spot let's start with the generic line equation. This is Y equals AX or A times X plus B. A is the slope of the line and B is the Y-intercept of the line. That's the location on the Y axis that the line crosses when X equals 0. We want to find the optimal values for A and B so that we

that the line crosses when X equals 0. We want to find the optimal values for A and B so that we minimize the sum of squared residuals. In more general math terms the sum of squared residuals is this complicated mathematical equation. But it's actually not that complicated, this first part is the value of the line at X1 and this second part is the observed value at X1. So really all we're doing in this part of the equation is calculating the distance between the line and the observed value. So

this part of the equation is calculating the distance between the line and the observed value. So this is no big deal. Since we want the line that will give us the smallest sum of squares this method for finding the best values for A and B is called least squares. If we plotted the sum of squared residuals versus each rotation we get something like this, where on the Y axis we have the sum of squared residuals and on the X axis we've got each different rotation of the line. We see that the sum

residuals and on the X axis we've got each different rotation of the line. We see that the sum of squared residuals goes down when we start rotating the line, but that it's possible to rotate the line too far in the sum of squared residual starts going back up again. How do we find the optimal rotation for the line? Well, we take the derivative of this function. The derivative tells us the slope of the function at every point. The slope at the point on the far left side is pretty steep. As we

of the function at every point. The slope at the point on the far left side is pretty steep. As we move to the right we see that the slope isn't as steep. The slope at the best point where we have the least squares is zero after that the slope starts getting steep again. Let's go back to that middle point where we have the least squares value and the slope is zero. Remember the different rotations are just different values for A the slope and B the intercept. We can use a 3D graph to show how

are just different values for A the slope and B the intercept. We can use a 3D graph to show how different values for the slope and intercept result in different sums of squares. In this graph the intercept is the Z axis so it's going back sort of deep into your computer screen and if we select one value for the intercept. For example, assume we set the intercept value to be 3. Then we could change values for the slope and see how an intercept of 3 plus different values for the slope would

change values for the slope and see how an intercept of 3 plus different values for the slope would affect the sum of squared residuals. Anyways, we do that for bunches of different intercepts and slopes. Taking the derivatives of both the slope and the intercepts tells us where the optimal values are for the best fit. Note: no one ever solves this problem by hand, this is done on a computer. So for most people It's not essential to know how to take these derivatives. However, it's essential to

most people It's not essential to know how to take these derivatives. However, it's essential to understand the concepts. Big important concept number one, we want to minimize the square of the distance between the observed values and the line. Big important concept number two, we do this by taking the derivative and finding where it is equal to zero. The final line minimizes the sums of squares. It gives the least squares between it and the real data. In this case, the line is defined by the

It gives the least squares between it and the real data. In this case, the line is defined by the following equation Y = 0.77 * X + 0.66. Hooray, we've made it to the end of another StatQuest. Tune in next time for another exciting adventure in statistics land.

Say that on a boat headed towards that quest Join me on this boat. Let's go to stab quest it's super cool Hello, and welcome to static quest Static Quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill Today, we're going to be talking about linear regression Aka General Linear models part one there's a lot of parts to linear models But it's a really cool and powerful concept so let's get right down to it. I Promise you I have

But it's a really cool and powerful concept so let's get right down to it. I Promise you I have lots and lots of slides that talk about all the nitty-Gritty details behind linear regression But first let's talk about the main ideas behind it The first thing you do in linear regression is use least squares to fit a line to the data The second thing you do is calculate R squared lastly calculate a p-value for R squared There are lots of other little things that come up along the way but these are

for R squared There are lots of other little things that come up along the way but these are the three most important concepts behind linear regression in the stat Quest fitting align to Data we talked about fitting align to Data duh But let's do a quick review. I'm Going to introduce some new terminology in this part of the video so it's worth watching even if you've already seen the earlier stat quest That said if you need more details check that stat quest out For this review we're going to

quest That said if you need more details check that stat quest out For this review we're going to be talking about a data set where we took a bunch of mice And we measured their size, and we measured their weight our Goal is to use mouse weight as a way to predict mouse size first draw a line through the data Second measure the distance from the line to the Data square each distance and then add them up Terminology alert the distance from the line to the Data point is called a residual third

them up Terminology alert the distance from the line to the Data point is called a residual third rotate the line a little bit With the new line measure the residuals square them and then sum of the squares Now rotate the line a little bit more sum up the squared residuals ETc, Etc, ETc. We rotate and then sum of the squared residuals Rotate that sum of the squared residuals just keep doing that After a bunch of rotations you can plot the sum of squared residuals and corresponding rotation so

After a bunch of rotations you can plot the sum of squared residuals and corresponding rotation so in this graph We have the sum of squared residuals on the y-Axis and the different rotations on the x-Axis Lastly you find the rotation that has the least sum of squares More details about how this is actually done in practice are provided in a stat quest on fitting a line to data So we see that this rotation is the one with the least squares, so it will be the one to fit to the data This is our

rotation is the one with the least squares, so it will be the one to fit to the data This is our least squares rotation Super imposed on the original Data Bam Now we know why the method for fitting a line is called least squares Now we have fit along to the data. This is awesome Here's the equation for the line least Squares estimated two parameters A yxs intercept and a slope Since the slope is not zero it means that knowing a mouse's weight will help us make a guess About that mouse's size

not zero it means that knowing a mouse's weight will help us make a guess About that mouse's size How good is that guess? Calculating r-squared is the first step in determining. How good that guess will be? the scat Quest R-Squared explained talks about you got it R-Squared Let's do a quick review. I'm also going to Introduce some additional terminology So it's worth watching this part of the video even if you've seen the original stat quest on r-Squared first Calculate the average mouse size

even if you've seen the original stat quest on r-Squared first Calculate the average mouse size okay, I've just Shifted all the Data points to the y access to emphasize that at this point We are only interested in mouse size Here I've drawn a black line to show the average mouse size bam Now some the squared residuals Just like in least squares We measure the distance from the mean to the data point and square it and then add those squares together Terminology alert we'll call this ss. Mean for

and square it and then add those squares together Terminology alert we'll call this ss. Mean for sum of squares around the mean Note the sum of squares around the mean equals the data minus the mean squared The variation around the mean equals the data minus the mean squared Divided by n n Is the sample size in this case N equals 9? The shorthand notation is the variation around the mean equals the sum of squares around the mean? Divided by N. The sample size Another way to think about variance

sum of squares around the mean? Divided by N. The sample size Another way to think about variance is as the average sum of squares per mouse Now go back to the original plot and sum of the squared residuals around our least squares fit We'll call this ss. Fit for the sum of squares around the least squares fit The sum of Squares around the least squares fit is the sum of the distances between the data and the line squared Just like with the mean the variance around the fit is the distance

the data and the line squared Just like with the mean the variance around the fit is the distance between the line and the data squared Divided by N. The sample size The shorthand is the variation around the fitted line Equals the sum of Squares around the fitted line divided by n. The sample size Again, we can think of the variation around the fit as the average of the sum of squares around the fit for each mouse in general the Variance of something equals the sum of squares Divided by the

fit for each mouse in general the Variance of something equals the sum of squares Divided by the number of those things in other words. It's an average of sum of Squares I Mention this because it's going to come in handy in a little bit. So keep it in the back of your mind Okay, let's step back a little bit. This is the raw variation in mouse size and This is the variation around the least squares line there's less variation around the line that we fit by least squares that is to say the

squares line there's less variation around the line that we fit by least squares that is to say the residuals are smaller as a result we say that some of the variation in mouse size is explained by taking mouse weight into account in Other words Heavier mice are bigger Lighter mice are smaller R-Squared tells us how much of the variation in Mouse size can be explained by taking Mouse weight into account? This is the formula for R. Squared. It's the variation around the mean Minus the variation

account? This is the formula for R. Squared. It's the variation around the mean Minus the variation around the fit divided by the variation around the Let's look at an example in this example the variation around the mean equals Eleven Point one and the variation around the fit Equals four point four so we plug those numbers into the equation The result is that R squared equals zero point six? Which is the same thing as saying 60%? This means there is a 60% reduction in the variance when we

Which is the same thing as saying 60%? This means there is a 60% reduction in the variance when we take the mouse weight into account Alternatively we can say that mouse weight explains 60 percent of the variation in mouse size We can also use the sum of squares to make the same calculation This is because when we're talking about variation everything's divided by n. The sample size Since everything scaled by N We can pull that term out and just use the raw sum of squares In this case the sum

scaled by N We can pull that term out and just use the raw sum of squares In this case the sum of squares around the mean equals 100 and the sum of squares around the fit equals 40 plugging those numbers into the equation Gives us the same value we had before R squared equals zero point six which equals 60 percent? 60 percent of the sums of squares of the mouse size can be explained by mouse weight Here's another example We're also going to go back to using variation in the calculation since

Here's another example We're also going to go back to using variation in the calculation since that's more common in This case knowing mouse weight means you can make a perfect prediction of mouse size The variation around the mean is the same as it was before Eleven point one, but now the variation around the fitted line equals zero because there are no residuals Plugging the numbers n. Gives us an r-Squared equal to one which equals one hundred percent in This case mouse weight explains 100

an r-Squared equal to one which equals one hundred percent in This case mouse weight explains 100 percent of the variation in mouse size Okay, one last example In this case knowing mouse weight doesn't help us predict mouse size If someone tells us they have a heavy mouse well that mouse could either be small or large with equal probability Similarly if someone said they had a light mouse well again We wouldn't know if it was a big mouse or a small mouse because each of those options is equally

We wouldn't know if it was a big mouse or a small mouse because each of those options is equally likely Just like the other two examples the variation around the mean is equal 11.1 However in this case the variation around the fit is also equal 11.1 so we plug those numbers in and we get R squared equals zero which equals zero percent in This case mouse wait doesn't explain any of the variation around the mean when calculating the sum of squares around the mean we collapse the points onto the

around the mean when calculating the sum of squares around the mean we collapse the points onto the Y-Axis just to emphasize the fact that we were ignoring mouse weight but we could just as easily draw a line y equals the mean mouse size and Calculate the sum of squares around the mean around that in This example we applied R squared to a simple equation for a line y equals zero point one plus zero point seven eight times x This gave us an r-Squared of sixty percent Meaning 60 percent of the

zero point seven eight times x This gave us an r-Squared of sixty percent Meaning 60 percent of the variation in mouse size could be explained by mouse weight But the concept applies to any equation no matter how complicated First you measure square and sum the distance from the data to the mean In measure Square and sum the distance from the data to the complicated equation Once you've got those two sums of squares. Just plug them in and you've got R squared Let's look at a slightly more

those two sums of squares. Just plug them in and you've got R squared Let's look at a slightly more complicated example Imagine we wanted to know if mouse weight and tail length did a good job predicting the length of the mouse's body? So we measure a bunch of mice To plot this data. We need a three-dimensional graph We want to know how well weight and tail length predict body length The first mouse we measured had weight equals 2.1 Tail length equals 1.3 and body length equals 2.5 So that's

mouse we measured had weight equals 2.1 Tail length equals 1.3 and body length equals 2.5 So that's how we plot this data on this 3D graph Here's all the data in the graph The larger Circles are points that are closer to us and represent mice that have shorter tails The smaller Circles are points that are further from us and represent mice with longer tails Now we do a least-squares fit Since we have the extra term in the equation Representing an extra dimension we fit a plane instead of a line

the extra term in the equation Representing an extra dimension we fit a plane instead of a line Here's the equation for the plane the Y-value represents body length least Squares estimates three different parameters The first is the y-intercept that's when both tail length and mouse weight are equal to zero The second parameter zero point seven is for the mouse weight the last term zero point five is for the tail length if We know a mouse's weight and tail length. We can use the equation to

five is for the tail length if We know a mouse's weight and tail length. We can use the equation to guess the body length for example given the weight and tail length for this mouse the equation predicts this body length Just like before we can measure the residuals square them and then add them up to calculate R squared now if the tail length where the z axis is Useless and doesn't make the sum of squares fit any smaller then least squares We'll ignore it by making that parameter equal to zero

squares fit any smaller then least squares We'll ignore it by making that parameter equal to zero in this case Plugging the tail length into the equation would have no effect on predicting the mouse size this means Equations with more parameters will never make the sum of squares around the fit worse than equations with fewer parameters in other words this equation mouse size equals 0.3 plus mouse weight plus flip of a coin plus favorite color plus Astrological sign plus extra stuff will never

weight plus flip of a coin plus favorite color plus Astrological sign plus extra stuff will never perform worse than this equation mouse size equals 0.3 plus mouse weight this is because Li squares will cause any term that makes sum of squares around the fit worse to be multiplied by 0 and in a sense no longer exists Now due to random chance There is a small probability that the small mice in the data set might get heads more frequently than large mice If this happened, then we'd get a smaller

data set might get heads more frequently than large mice If this happened, then we'd get a smaller sum of squares fit and a better r-squared Wha-wha here's the frowny face of sad times? The more silly parameters we add to the equation the more Opportunities we have for random events to reduce sum of squares fit and result in a better r-squared Thus people report an adjusted r-Squared value that in essence Scales R-Squared by the number of Parameters R Squared is awesome, but it's missing

that in essence Scales R-Squared by the number of Parameters R Squared is awesome, but it's missing something What if all we had were two measurements? We'd calculate the sum of squares around the mean in this case. That would be 10 Then we calculate the sum of squares around the fit which equals 0 The sum of Squares around the fit equals 0 because you can always draw a straight line to connect any two points What this means is when we calculate r squared by plugging the numbers end we're going

two points What this means is when we calculate r squared by plugging the numbers end we're going to get 100% 100% is a great number we've explained all the variation But any two random points will give us the exact same thing. It doesn't actually mean anything We need a way to determine if the r-Squared value is statistically significant. We need a p-value Before we calculate the p-value Let's review the main Concepts behind R-Squared one last time The general equation for R Squared is the

review the main Concepts behind R-Squared one last time The general equation for R Squared is the variance around the mean minus the variance around the fit divided by the variance around the mean in Our example this means the variation in the mouthsize - the variation after taking weight into account divided by the variation in mouth size in Other words R. Squared equals the variation in mouth size explained by weight divided by the variation mouth size without taking weight into account in

size explained by weight divided by the variation mouth size without taking weight into account in This particular example R. Squared equals zero point six Meaning we saw 60 percent reduction in variation once we took mouse weight into account Now that we have a thorough understanding of the ideas behind r squared let's talk about the main ideas behind Calculating a p-value for it The P-value for R. Squared comes from something called f f is equal to the variation in mouth size explained by

for R. Squared comes from something called f f is equal to the variation in mouth size explained by weight divided by the variation mouth size not explained by weight the numerators for r-Squared and for f are the same That is to say it's the reduction in Variance when we take the weight into account The denominator is a little different These dotted lines the residuals Represent the variation that remains after fitting the line. This is the variation that is not explained by weight So together

remains after fitting the line. This is the variation that is not explained by weight So together we have the variation in mouth size explained by weight divided by the variation in mouth size not explained by weight Now let's look at the underlying mathematics just as a reminder. Here's the equation for R squared This is the general equation that will tell us if R squared is significant The meat of these two equations are very similar and rely on the same sums of squares Like we said before

of these two equations are very similar and rely on the same sums of squares Like we said before the numerators are the same in our mouth size and weight example the numerator is the variation of mouth size explained by weight and The sum of Squares around the fit is just the residuals squared and summed up around the fitted line So that's the variation that the fit does not explain These numbers over here are the degrees of freedom? They turn the sums of squares into variances. I'm Going to

over here are the degrees of freedom? They turn the sums of squares into variances. I'm Going to dedicate a whole stack west to degrees of freedom but for now Let's see if we can get an intuitive feel for what they're doing here Let's start with these P fit is the number of parameters in the fit line Here's the equation for the fit line in a general format. We just have the y-intercept plus the slope times x The Y-intercept and the slope are two separate parameters That means p fit equals two P

times x The Y-intercept and the slope are two separate parameters That means p fit equals two P mean is the number of parameters in the mean line? in general that equation is y equals the y-intercept that's what gives us a horizontal line that cuts through the Data in This case the y-intercept is the mean value This equation just has one parameter Thus P mean Equals 1 both equations have a parameter for the y-intercept However, the fit line has one extra parameter the slope in our example This

for the y-intercept However, the fit line has one extra parameter the slope in our example This slope is the relationship between weight and size in This example p. Fit minus p mean equals 2 minus 1 Which equals 1 The fit has one extra parameter mouse weight Thus the numerator is the variance explained by the extra parameter in Our example that the variance in mouse size explained by mouse weight if We had used mouse weight and tail length to explain variation in size Then we would end up with

if We had used mouse weight and tail length to explain variation in size Then we would end up with an equation that had three parameters and p fit would equal 3 Thus P fit minus P mean would equal 3 minus 1 Which equals 2 Now the fit has two extra parameters mouse weight and tail length With the fancier equation for the fit the numerator is the variance in mouse size explained by mouse weight and tail length Now let's talk about the denominator for our equation for f The denominator is the

and tail length Now let's talk about the denominator for our equation for f The denominator is the variation in mouse size not explained by the fit that Is to say it's the sum of squares of the residuals that remain after we fit our new line to the data Y divided sum of squares fit by N. Minus p fit instead of just n Intuitively the more parameters you have in your equation the more data You need to estimate them for example. You only need two points to estimate a line but you need three points

to estimate them for example. You only need two points to estimate a line but you need three points to estimate a plane if The fit is good then the variation explained by the extra parameters in the fit will be a large number and the Variation not explained by the extra parameters in the fifth will be a small number that makes f a really large number Now that question we've all been dying to know the answer to how do we turn this number into a p-value conceptually generate a set of random Data

the answer to how do we turn this number into a p-value conceptually generate a set of random Data calculate the mean and the sum of squares around the mean Calculate the fit in the sum of squares around the fit Now plug all those values into our equation for f and that will give us a number in this case that number is 2 Now plot that number in a histogram Now generate another set of random Data calculate the mean and the sum of squares around the mean Then calculate the fit and the sum of

calculate the mean and the sum of squares around the mean Then calculate the fit and the sum of squares around the fit Plug those values into our equation for f and in this case we get f equals 3 so we then plug that value into our histogram and Then we repeat with yet another set of random Data in this case We got f equals 1 that's plotted on our histogram, and we just keep generating more and more random data sets Calculating the sums of squares plugging them into our equation for f and

and more random data sets Calculating the sums of squares plugging them into our equation for f and plotting the results on our histogram now Imagine we did that hundreds if not millions of times When we're all done with our random data sets we return to our original data set We then plug the numbers into our equation for f in this case. We got f equals 6 the P value is the number of More Extreme values divided by all of the values So in this case we have the value at f equals 6 and the value

values divided by all of the values So in this case we have the value at f equals 6 and the value at f equals 7 divided by all the other Randomizations that we created originally if this concept is confusing to you I have a stat quest that explains p values so check that one out Bam You can approximate the histogram with a line in Practice rather than generating tons of random Data sets people use the line to calculate the P value Here's an example of one standard f distribution that people use

the line to calculate the P value Here's an example of one standard f distribution that people use to calculate p values the degrees of freedom Determine the shape the Red Line represents another Standard F distribution That people use to calculate P values in This case the sample size used to draw the red line is smaller than the sample size used to draw the blue line Notice that when n minus p fit equals 10 the distribution tapers off faster This means that the p value will be smaller when

p fit equals 10 the distribution tapers off faster This means that the p value will be smaller when there are more samples relative to the number of parameters in the fit equation triple Bam Hooray we finally got our p value now. Let's review the main ideas Given some data that you think are related linear regression Quantifies the relationship in the data This is R squared this needs to be large It also Determines how reliable that relationship is This is the p value that we calculated with f

It also Determines how reliable that relationship is This is the p value that we calculated with f this needs to be small you Need both to have an interesting result Hooray We've made it to the end of another exciting stat quest wow this was a long one I hope you had a good time If you like this and want to see more stat quest like it wants you subscribe to my channel it's real easy just click the red button and If you have any ideas of that quest that you'd like me to create just put them in

red button and If you have any ideas of that quest that you'd like me to create just put them in the comments below That's all there is to it alright. Tune in next time for another really exciting stat quest

StatQuest, StatQuest, StatQuest, StatQuest!  Yeah! StatQuest! Hello, I'm Josh Stommer and welcome to Stat Quest. StatQuest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill. Today we're gonna be talking about multiple regression, and it's gonna be clearly explained. This StatQuest builds on the one for linear regression. So, if you haven't already seen that one yet, check it out. Alright, now let's get to it! People who don't

you haven't already seen that one yet, check it out. Alright, now let's get to it! People who don't understand linear regression tend to make a big deal out of the "differences" between simple and multiple regression. It's not a big deal and a StatQuest on simple linear regression already covered most of the concepts we're going to cover here. You might recall from the StatQuest on the linear regression that simple regression is just fitting a line to data. We're interested in the r-squared and

that simple regression is just fitting a line to data. We're interested in the r-squared and the p-value to evaluate how well that line fits the data. In that same stat quest. I also showed you how to fit a plane to data. Well, that's what multiple regression is. You fit a plane or some higher-dimensional object to your data. A term like higher-dimensional object sounds really fancy and complicated, but it's not. All it means is that we're adding additional data to the model. In the previous

but it's not. All it means is that we're adding additional data to the model. In the previous example all that meant was that instead of just modeling body length by mouse weight, we modeled body length using mouse weight and tail length. If we added additional factors like the amount of food eaten or the amount of time spent running on a wheel, well those would be considered additional dimensions, but they're really just additional pieces of data that we can add to our fancy equation. So, from

but they're really just additional pieces of data that we can add to our fancy equation. So, from the StatQuest on linear regression you may remember the first thing we did was calculate R squared. Well, the good news is calculating r squared is the exact same for both simple regression and multiple regression. There's absolutely no difference. Here's the equation for R squared, and we plug in the values for the sums of squares around the fit and then we plug in the sums of squares around the

values for the sums of squares around the fit and then we plug in the sums of squares around the mean value for the body length. Regardless of how much additional data we add to our fancy equation, if we're using it to predict body lengths, then we use the sums of squares around the body length. One caveat is for multiple regression you adjust r-squared to compensate for the additional parameters in the equation. We covered this in the StatQuest for linear regression, so it's no big deal. Now

in the equation. We covered this in the StatQuest for linear regression, so it's no big deal. Now we want to calculate a p-value for our r-squared. Calculating F And the p-value is pretty much the same. You plug in the sums of squares around the fit and then you plug in the sums of squares around the mean. For simple regression P fit equals 2 because we have two parameters in the equation that least-squares has to estimate. And for this specific example the multiple regression version of P fit

has to estimate. And for this specific example the multiple regression version of P fit equals 3 because least-squares had to estimate three different parameters. If we added additional data to the model for example the amount of time a mouse spins running on a wheel then we have to change P fit to equal the number of parameters in our new equation. And for both simple regression and multiple regression, P mean equals 1 because we only have to estimate the mean value of the body length. So far

P mean equals 1 because we only have to estimate the mean value of the body length. So far we have compared this simple regression to the mean and this multiple regression to the mean, but we can compare them to each other. And this is where multiple regression really starts to shine. This will tell us if it's worth the time and trouble to collect the tail length data because we will compare a fit without it, the simple regression, to a fit with it, the multiple regression. Calculating the F

fit without it, the simple regression, to a fit with it, the multiple regression. Calculating the F value is the exact same as before only this time we replace the mean stuff with the simple regression stuff. So instead of plugging in the sums of squares around the mean, we plug in the sums of squares around the simple regression. Ane instead of plugging in P Mean we plug in P Simple, which equals the number of parameters in the simple regression. That's 2. And then we plug in the sums of

equals the number of parameters in the simple regression. That's 2. And then we plug in the sums of squares for the multiple regression and we plug in the number of parameters in our multiple regression equation. BAM! If the difference in r squared values between the simple and multiple regression is big and the p value is small then adjusting tail length to the model is worth the trouble Hooray, we've made it to the end of another exciting StatQuest! Now for this StatQuest I've made another

we've made it to the end of another exciting StatQuest! Now for this StatQuest I've made another one that shows you how to do multiple regression in R. It shows all the little details and sort of what's important and what's not important about the output that R gives you. So, check that one out and don't forget to subscribe! Ok, until next time, Quest on!

stat Quest stat Quest stat Quest yeah hello and welcome to stat Quest stat Quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're doing part two of our series on General linear models last time we talked about how to do linear regression this time we're going to talk about how to use those exact same techniques to do tea tests and a Nova we'll do this using something called a design Matrix which is a cool concept

tea tests and a Nova we'll do this using something called a design Matrix which is a cool concept that will expand upon in future stat quests on General linear models let's start with a super quick review of linear regression last time we measured mouse weight and mouse size and we wanted to learn two things from it we wanted to learn how useful mouse weight was for predicting Mouse size R squar told us this and we wanted to know if the relationship was due to Chance the P value told us this

told us this and we wanted to know if the relationship was due to Chance the P value told us this now let's see if we can apply those Concepts to a T Test in this specific example we're going to be comparing gene expression between control mice and mutant mice mutant mice are just normal mice that have a specific Gene that's been knocked out and is no longer functioning correctly the goal of a T Test is to compare means and see if they are significantly different from each other if the same

T Test is to compare means and see if they are significantly different from each other if the same method can calculate P values for a linear regression and a t test then we can easily calculate P values for more complicated situations so now I'm going to walk you through the steps for using the techniques from linear regression to do a t test on the left side of the screen our remind you how each step applies to linear regression on the right side of the screen I'll show you how those steps

step applies to linear regression on the right side of the screen I'll show you how those steps apply to T tests step one ignore the xais and find the overall mean to emphasize that we want to focus on the Y AIS I've removed the labels on the X AIS here are the overall means for the linear regression and the T Test the next step is to calculate the sum of squared residuals around the mean this is SS mean these are the residuals the distance from the data points to the lines in this case the

is SS mean these are the residuals the distance from the data points to the lines in this case the lines are the overall means bam calculating the sum of squared residuals around the mean was easy step three fit a line to the data Note this is when we start caring about the X AIS again on the left side we have the least squares fit to the data however how do we do a least squares fit to a T Test let's start by just fitting a line to the Control Data we start by finding a least squares fit to

let's start by just fitting a line to the Control Data we start by finding a least squares fit to the Control Data it turns out that the mean is the least squares fit the mean intercepts the Y AIS at 2.2 this is the equation for horizontal line that intercepts the Y AIS at 2.2 thus this is the line that we fit to the Control Data now let's fit a line to the mutant data the least squares fit is the mean of the mutant data the mean intercepts the y axis at 3.6 this is the equation for a

fit is the mean of the mutant data the mean intercepts the y axis at 3.6 this is the equation for a horizontal line that intercepts the Y AIS at 3.6 thus this is the line that we fit to the mutant data data we have fit two lines to the data originally when we did the regression we fit a single line to the data however there is a way to combine these two lines into a single equation this will make the steps for computing F the exact same for the regression and the test which in turn means a

make the steps for computing F the exact same for the regression and the test which in turn means a computer can do it automatically this is key because we don't want to do this by hand hand ever this is going to look a little weird but just bear with me keep in mind that the goal is to have a flexible way for a computer to solve this and every other least squares based problem without having to create a whole new method each time this is the equation which combines both lines for this point we

a whole new method each time this is the equation which combines both lines for this point we have 1 time the mean of the Control Data 0er times the mean of the mutant data plus the residual yes this is strange especially multiplying the mutant mean by zero but bear with me if we multiplied things out the equation for this point would be y = 2.2 plus the residual and that sort of makes sense but just bear with me this is the equation for the next point the only difference is the residual this

just bear with me this is the equation for the next point the only difference is the residual this one is smaller this is the equation for the next Point again the only difference is the residual this is the equation for the next point and again the only difference is the residual this is the equation for the first point in the mutant data set now we are multiplying the control mean by zero and multiplying the mutant mean by one these are the equations for the remaining points now let's focus

multiplying the mutant mean by one these are the equations for the remaining points now let's focus on the ones and zeros they function like on and off switches for the two means a one turns the mean on and a zero turns the mean off when we isolate the ones and zeros they form a matrix called a design Matrix the design Matrix can be combined with an abstract version of the equation to represent a fit to the data column one turns the control mean on or off column two turns the mutant mean on or

fit to the data column one turns the control mean on or off column two turns the mutant mean on or off in practice the role of each column is assumed and the equation is written out like this y equals the mean of the Control Data plus the mean of the mutant data now that we have the fit for the control and mutant data down to a single equation plus design Matrix we can move on to calculating F and the P value so step four calculate the sum of squares of the residuals around the fitted lines

and the P value so step four calculate the sum of squares of the residuals around the fitted lines with the linear regression that means the sum of these squared residuals the sum of squares around the fit for the T Test is the sum of these squared residuals to viw what we've done so far we've calculated the sum of squared residuals around the mean and then we calculated the sum of squared residuals around the fitted line now we can just plug these things in to our equation for f f will lead to

around the fitted line now we can just plug these things in to our equation for f f will lead to a P value for the linear regression p mean refers to the number of parameters in the equation for the mean Mouse size that's one parameter in the T Test p mean refers to the number of parameters in the equation for the mean of the gene expression that's also just one parameter for the linear regression P fit refers to the number of parameters in the equation for the fitted line in this case that's

P fit refers to the number of parameters in the equation for the fitted line in this case that's two the parameters are the intercept and the slope for the T Test P fit refers to the number of parameters in the line that we fit to the T Test data in this case P fit equals 2 because we had to estimate two parameters one for the mean of the control data and one for the mean of the mutant data now we can calculate a P value for the T Test bam let's review what we've done so far here's the original

can calculate a P value for the T Test bam let's review what we've done so far here's the original data gene expression for control mice and mutant mice the first thing we did is we calculated the sum of squares of the resist residuals around the overall mean then we calculated the sum of squares of the residuals around the fit in order to do this with a single equation we had to create a design Matrix once we've calculated the sums of squares all we have to do is plug the values into the

Matrix once we've calculated the sums of squares all we have to do is plug the values into the equation for f and then we'll get our P value now let's do an anova an NOA tests if all five categories are the same here we have control and mutant mice just like before but we also have control and mutant mice on a funky diet and we also have heterozygote mice the first thing we do is calculate the sum of squares around the mean we do this just like before we calculate an overall mean value for all

of squares around the mean we do this just like before we calculate an overall mean value for all of the categories and then Square the residuals and sum them up no big deal the equation for the overall mean is just y equals mean expression that equation only has a single parameter the overall mean so p mean equals 1 now we calculate the sum of squares around the fitted lines the equation for the fitted lines has five parameters one for each mean therefore P fit equals five here's what the

the fitted lines has five parameters one for each mean therefore P fit equals five here's what the design Matrix looks like one column per category now now that we've calculated the sum of squares around the mean and the sum of squares around the fit along with p mean and P fit we can plug those values in and calculate F triple bam if we can calculate F then we've got ourselves a P value one last important detail before we're done the design matrices that I've shown you are not the standard

important detail before we're done the design matrices that I've shown you are not the standard design matrices used for doing T tests and a NOA this is what we used for the T Test in this stat Quest but this is a more common design Matrix for the same thing both design matrices will get the job done it's just the one on the right is more commonly used we'll talk about this one and other more elaborate designs in the next stat Quest hooray we've made it to the end of another exciting stat Quest

designs in the next stat Quest hooray we've made it to the end of another exciting stat Quest if you like this and would like to see more stat quests like it feel free to subscribe and if you if you have any suggestions for future stat quests put them in the comments below tune in next time for another exciting stack Quest

stat Quest is getting bigger watch out hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about general linear models and this is part 3 of a series that we're doing on this this time we're gonna focus on design matrices this stat quest picks up exactly where part two leaves off so if you haven't seen that one yet I'd recommend doing it right now in part

part two leaves off so if you haven't seen that one yet I'd recommend doing it right now in part two of this series we ended by saying that this was not the standard design matrix for a t-test it was kind of a cliffhanger and then I showed you that this is the standard design matrix for a t-test it corresponds to a slightly different equation let's focus on what this new design matrix and equation are all about in this version all measurements both control and mutant turn on the term for the

are all about in this version all measurements both control and mutant turn on the term for the mean control value but only the mutant measurements turn on the term for the difference between the mean of the mutant data and the mean of the control data this term serves as an offset that we can use for the mutant data for example this one turns the term for the mean of the control data on for this data point and this zero turns the term for the difference between the mean of the mutant data and

data point and this zero turns the term for the difference between the mean of the mutant data and the mean of the control data off for this data point this one turns the term for the mean of the control data on for this data point and this one turns the term for the difference between the mean of the mutant data and the control data on for this data point the residuals are the same for both equations and design matrices the equations also have the same number of parameters too so P fit is the

and design matrices the equations also have the same number of parameters too so P fit is the same so in our equation for f we plug in the exact same value for the sum of squares around the fit we also plug in the exact same value for the P fit parameter this results in the exact same value for F and that means we're going to get the exact same P value if they both do the same thing and the result is the same P value Y is the one on the right more common I'll be honest I don't know the answer

is the same P value Y is the one on the right more common I'll be honest I don't know the answer for sure but I think it has something to do with regression so far we've looked at design matrices in the context of using ones and zeros to turn parts of the equation on or off so let's take a step back and remember how it works remember that the numbers in the first column are multiplied by the term for the mean of the control values and the numbers in the second column are multiplied by the term

for the mean of the control values and the numbers in the second column are multiplied by the term that represents the difference between the mean of the mutant values and the mean of the control values multiplying the mean of the control data by one turns it on by just letting it be multiplying the difference between the mean of the mutant data and the mean of the control data by zero makes it zero and that turns it off a design matrix full of ones and zeros is perfect for doing T tests or

zero and that turns it off a design matrix full of ones and zeros is perfect for doing T tests or ANOVA's anytime we have different categories of data but we can use other numbers for example here's a design matrix for linear regression it pairs with this equation we've got a bunch of ones in the first column and in the second column we've got the x-axis position for each point let's focus on the first row in the design matrix for now it corresponds to this point just like before the numbers in

first row in the design matrix for now it corresponds to this point just like before the numbers in the first column multiply the first term in the formula in this case multiplying the y-intercept by one turns it on and just like before the numbers in the second column multiply the second term in the formula in this case we're scaling the term for the slope to make this more concrete let's see what happens when we use real numbers for the y-intercept and slope the y-intercept is super small N

happens when we use real numbers for the y-intercept and slope the y-intercept is super small N equals 0.01 so that's the number we plug in here the slope equals zero point eight and we plug that in right here and now we do the math and you get a point on the least squares fit line that corresponds with the first data point now let's focus on the second row it corresponds to this point the number in the first column multiplies the y-intercept and the number in the second column scales the slope

in the first column multiplies the y-intercept and the number in the second column scales the slope plug in the y-intercept and the slope and do the math and you get a point on the line that corresponds to the second data point plugging each row into the equation gives us a bunch of points on the least squares fit line once we have all the points on the line we can calculate the residuals and that means we can calculate a p-value this example shows that a design matrix isn't always just a bunch

means we can calculate a p-value this example shows that a design matrix isn't always just a bunch of zeros and ones but can be any set up numbers that we want to plug into an equation one row at a time one note before we move on since this style of design matrix with one's all the way down the first column is more common all of the examples from here on out will be consistent with this format now that we know we can put any number into the design matrix let's do something fancy let's combine a

that we know we can put any number into the design matrix let's do something fancy let's combine a t-test and a regression holy smokes that's totally crazy okay we're back to the relationship between mouse weight and mouse size however we have two types of mice these measurements are from normal control mice these measurements are from mutant mice that make them tall and skinny by eye we can see that mutant mice tend to be larger even if they weigh the same in other words the mutant mice seem

that mutant mice tend to be larger even if they weigh the same in other words the mutant mice seem to follow this trend in the control mice seem to follow this trend can we use statistics to test if there is a significant difference between the two types of mice if we just did a regression we'd get a nice looking line but it wouldn't tell us if the mutant mice were significantly larger than the normal mice on the other hand a normal t-test would ignore the relationship between weight and size

normal mice on the other hand a normal t-test would ignore the relationship between weight and size and in this case the p-value is greater than 0.05 since Mouse type and the relationship between weight and size are both important we need to combine them into a single test in other words instead of comparing this mean to this mean which is what a t-test would do we want to compare this line to this line to do this we need an equation that has a term for the y-intercept for the normal mice we

this line to do this we need an equation that has a term for the y-intercept for the normal mice we also need a term for the mutant mouse offset and lastly a term for the slope which in this case is the same for both types of mice this means we need to design matrix where the first column is ones this means that both lines intercept the y-axis at some point the second column indicates whether the mutant offset is on or off the mutant offset is off for the control mice and on for the mutant mice

mutant offset is on or off the mutant offset is off for the control mice and on for the mutant mice this allows the mutants to have their own y-intercept and the last column has the weight data the first four values are the x coordinates for the control mice and the last four values are the x coordinates for the mutant mice let's focus on the first row plug in the numbers and we get a value on the red line now let's focus on the second row again we get a value on the red line and from here we

red line now let's focus on the second row again we get a value on the red line and from here we just plug in the values and we get coordinates on either the red or the green line we get coordinates on the red line when the mutant offset is off and we get coordinates on the green line when the mutant offset is on once we have the locations on the lines we can calculate the residuals which are hard to see since they are so small in this example now we can compare the fancy model to a simpler

hard to see since they are so small in this example now we can compare the fancy model to a simpler model in the simpler model we model Mouse size by using just the average size of the mouse we ignore Mouse weight and we ignore Mouse type this is the default model that we use when we do the t-test now we plug in the sum of squares of the residuals for the fancy model and we plug in 3 for the P fancy term since there are 3 parameters in our fancy equation and we plug in the sum of squares of the

term since there are 3 parameters in our fancy equation and we plug in the sum of squares of the residuals for the simple model and we plug in one for the P simple term since there is only one parameter in the simple equation this gives us 20 1.88 and that gives us a p-value of 0.003 BAM the small p-value says that taking weight and Mouse type into account is significantly better at predicting size than just using the average size note the simple model can be any simpler model if we did a super

than just using the average size note the simple model can be any simpler model if we did a super simple linear regression we'd have a model that takes weight into account but ignores the fact that some mice are normal and others are mutants then we plug in the sum of squares of the residuals just like before the simple regression equation has two parameters so P simple equals 2 we then plug in the numbers and we get a p-value equal to zero point zero zero two three double bail this small

in the numbers and we get a p-value equal to zero point zero zero two three double bail this small p-value suggests that using both weight and mouse type is better at predicting Mouse size than weight alone here's another simple model it's just a normal t-test this model ignores Mouse weight again plug in the sum of squares of the residuals in the equation has two parameters so P simple equals two and that gives us a p-value equal to zero point zero zero two five oh my gosh it's the coveted

two and that gives us a p-value equal to zero point zero zero two five oh my gosh it's the coveted triple bam this small p-value suggests that using mouse weight and type is better at predicting Mouse size than Mouse type alone so you can see that the question you want to ask determines what type of simple model you want to use to compare your fancy model to okay one last example of a design matrix lab a dozen experiment then lab B replicates it however their measurements tended to be smaller

lab a dozen experiment then lab B replicates it however their measurements tended to be smaller overall this is a batch effect we would like to combine these two datasets to see if mutants are different from controls but we need to compensate for the batch effect here's how to do it first add a term for the mean control value from lab a second add a term for the lab B offset this takes care of the batch effect third add a term for the differences between the mutant and the control measurements

batch effect third add a term for the differences between the mutant and the control measurements here's the design matrix essentially we want to know if this last term in the equation is important or not alternatively is this last column important so we compare the fit of this fancy equation to this simpler one that ignores the control mutant difference a small p-value will tell us that the equation that keeps track of the mutant control differences predicts the gene expression better than one

that keeps track of the mutant control differences predicts the gene expression better than one that does not this will mean that the difference between controls and mutants is significant hurray we've made it to the end of another exciting stat quest if you like this stat quest and would like to see more please subscribe and if you have any other ideas of things you'd like me to do stat quests on or you've got a certain design matrix you'd like to see an example of just let me know in the

on or you've got a certain design matrix you'd like to see an example of just let me know in the comments below until then quest on

the stat quest is odd so I'm gonna talk about the odds and the log of the odds stacked quest hello I'm Josh stommer and welcome to stack quest today we're gonna be talking about odds and log odds and they're gonna be clearly explained the odds are in favor that you're already familiar with odds for example you might say that the odds in favor of my team winning the game are 1 to 4 visually we have 5 games total one of which my team will win and four of which my team will lose so the odds are one

5 games total one of which my team will win and four of which my team will lose so the odds are one to four alternatively we can write this as a fraction visually we have one game my team wins divided by the four games that my team loses if we do the math we will see that the odds are 0.25 that my team will win the game here's another example you might say that the odds in favor of my team winning the game are five to three visually we have eight games total five of which my team will win and

the game are five to three visually we have eight games total five of which my team will win and three of which my team will lose so the odds are five to three alternatively we can write this as a fraction 5/3 visually we have the five games my team wins divided by the three games my team loses if we do the math we see that the odds are one point seven that my team will win the game note ads are not probabilities the odds are the ratio of something happening ie my team winning to something not

not probabilities the odds are the ratio of something happening ie my team winning to something not happening ie my team not winning probability is the ratio of something happening I eat my team winning to everything that could happen ie my team winning and losing in the previous example the odds in favor of my team winning the game are five to three however the probability of my team winning is the number of games they win five divided by the total number of games they play eight here's the

the number of games they win five divided by the total number of games they play eight here's the math for the odds we have the ratio of 5 to 3 and for the probability we have the ratio of 5 to 8 thus we see that the odds in favor of my team winning are different from the probability of my team winning now that we know that odds are different from probabilities let's talk about how odds can be calculated from probabilities in the last example we saw that the odds of winning are 1 point 7 and

calculated from probabilities in the last example we saw that the odds of winning are 1 point 7 and the probability of winning is 0.625 we can also calculate the probability of losing the probability of losing is 0.375 note we could also calculate the probability of losing as 1 minus the probability of winning that equals 1 minus 5/8 and that gives us 8 divided by 8 minus 5/8 and ultimately we get 3/8 this is equal to 0.375 so either way we get the same probability now let's take the ratio of

3/8 this is equal to 0.375 so either way we get the same probability now let's take the ratio of the probability of winning to the probability of losing alternatively we can put 1 minus the probability of winning into the denominator either way we get the same ratio 5/8 divided by 3/8 the eights cancel out since they scale the numerator and the denominator by the exact same amount thus the ratio of the probability ends up being the same thing as the ratio of the raw counts and so either way we

of the probability ends up being the same thing as the ratio of the raw counts and so either way we get the same odds 1.7 I mentioned this because about 50% of the time you see odds calculated from counts and the other 50% of the time you will see odds calculated from probabilities either way you get the same results note out there in the wild world of statistics you will often see this formula simplified to this where P is the probability of winning BAM [Music] now that we know what the odds

simplified to this where P is the probability of winning BAM [Music] now that we know what the odds are let's talk about the log of the odds let's go back to the original example in this example we calculated the odds of winning as one to four or 0.25 if my team was worse the odds of winning could be one to eight or 0.125 and if my team was terrible the odds of winning could be one to sixteen or 0.063 and lastly if my team was the worst the odds of winning could be one to 32 or 0.03 one we can

0.063 and lastly if my team was the worst the odds of winning could be one to 32 or 0.03 one we can see that the worse my team is the odds of winning get closer and closer to zero in other words if the odds are against my team winning then they will be between zero and one now if my team was good then the odds might be four to three or one point three in favor of my team winning and if my team was better the odds might be eight to three or two point seven in favor of winning and if my team was

better the odds might be eight to three or two point seven in favor of winning and if my team was really good the odds might be thirty two to three or ten point seven in favor of winning we can see that the better my team is the odds of winning started one and just go up and up in other words if the odds are for my team winning then they will be between 1 and infinity another way to look at this is with a number line the odds of my team losing go from zero to one and the odds of my team winning

with a number line the odds of my team losing go from zero to one and the odds of my team winning go from one to infinity and beyond the asymmetry makes it difficult to compare the odds for or against my team winning for example if the odds are against one to six then the odds are 1/6 which equals zero point 1 7 but if the odds are in favor 6 to 1 then the odds are 6 divided by 1 which equals 6 the magnitude of these odds looks way smaller than these odds taking the log of the odds solves this

magnitude of these odds looks way smaller than these odds taking the log of the odds solves this problem by making everything symmetrical for example if the odds are against one to six then the log of the odds or the log of one divided by six which equals the log of 0.1 seven which equals negative one point seven nine and if the odds are in favor six to one then the log of the odds are the log of 6 divided by 1 which equals the log of 6 which equals one point seven nine using the log function

6 divided by 1 which equals the log of 6 which equals one point seven nine using the log function the distance from the origin or zero is the same for one to six or six to one odds double bail okay now that we know the main idea about the log of the odds let's get into some details earlier we saw that odds can be calculated from counts and we saw that the same odds could be calculated from probabilities and that means we can calculate the log of the odds with counts or probabilities either way

and that means we can calculate the log of the odds with counts or probabilities either way we'll get the same value note the log of the ratio of the probabilities is called the logit function and it forms the basis for logistic regression I mention it because if you do logistic regression you'll see it a whole lot it's no big deal ok I get it odds are just the ratio of something happening to something not happening and the log of the odds is just the duh log of the odds what's the big deal to

not happening and the log of the odds is just the duh log of the odds what's the big deal to show you what the big deal is all about if I pick pairs of random numbers that add up to 100 for example and use them to calculate the log of the odds and draw a histogram the histogram is in the shape of a normal distribution this makes the log of the odds useful for solving certain statistics problems specifically ones where we are trying to determine probabilities about win or lose or yes or no or

specifically ones where we are trying to determine probabilities about win or lose or yes or no or true or false type situations triple bam in summary the odds are just the ratio of something happening I Eve my team winning to something not happening ie my team not winning and the log of the odds is just the log of the odds it's no big deal the log of the odds makes things symmetrical easier to interpret and easier for fancy statistics one last thing before we go even though the odds is a ratio

and easier for fancy statistics one last thing before we go even though the odds is a ratio it's different from an odds ratio but don't panic we'll talk about the odds ratio in the next stat quest hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you'd like to support stat quest well liked the video and consider buying one or two of my original songs alright until next time quest on

static quest is on my mind all night long static quest hello I'm Josh stormer and welcome to stack quest today we're going to talk about odds ratios and log odds ratios and they're gonna be clearly explained the stack quest on odds and the log of the odds ended in a cliffhanger we talked about how the odds are just the ratio of something happening ie my team winning to something not happening ie my team not winning we Illustrated this with circles blue circles represented my team winning red

my team not winning we Illustrated this with circles blue circles represented my team winning red circles represented my team losing and the odds of my team winning were just the blue circles over the red circles alternatively we could just use numbers to represent the odds and when we do the math we see the odds of winning are 0.5 the cliffhanger came when I said that even though the odds our ratio it's not what people mean when they say odds ratio so let's clear this up once and for all when

it's not what people mean when they say odds ratio so let's clear this up once and for all when people say odds ratio they are talking about a ratio of odds so we've got a ratio of these odds to these odds doing the math gives us 2 divided by 4 over 3 divided by 1 and that gives us zero point 1 7 just like when we calculate the odds of something if the denominator is larger than the numerator the odds ratio will go from 0 to 1 and if the numerator is larger than the denominator then the odds

odds ratio will go from 0 to 1 and if the numerator is larger than the denominator then the odds ratio will go from 1 to infinity and beyond and just like the odds taking the log of the odds ratio makes things nice and symmetrical for example if the odds ratio is two divided by four over three divided by one then the log of the odds ratio equals negative one point seven nine and if the odds ratio is the opposite it's three to one over two to four then the log of the odds ratio is the positive

is the opposite it's three to one over two to four then the log of the odds ratio is the positive version it equals one point seven nine great now that we've got that cleared up what can we do with odds ratios here's an example of the odds ratio in action we've got a bunch of people 356 to be exact 29 of these people have cancer and 327 do not we also know that 140 of these people have the mutated gene I'm just going to let you imagine which gene I'm talking about here and 216 people do not

gene I'm just going to let you imagine which gene I'm talking about here and 216 people do not have the mutated gene we can use an odds ratio to determine if there's a relationship between the mutated gene and cancer if someone has the mutated gene or the odds higher that they will get cancer given that a person has the mutated gene the odds that they have cancer are 23 to 117 so we'll put that on top of the odds ratio and given that a person does not have the mutated gene the odds that they

on top of the odds ratio and given that a person does not have the mutated gene the odds that they have cancer are 6 to 210 so we'll put that on the bottom of the odds ratio here's our odds ratio we do the math and the odds ratio tells us that the odds are six point eight eight times greater that someone with the mutated gene will also have cancer and the log of the odds ratio is 1.93 small bam what does all this mean the odds ratio and the log of the odds ratio are like r-squared they indicate

does all this mean the odds ratio and the log of the odds ratio are like r-squared they indicate a relationship between two things in this case a relationship between the mutated gene and cancer and just like r-squared the values correspond to effect size larger values mean the mutated gene is a good predictor of cancer smaller values mean that the mutated gene is not a good predictor of cancer BAM [Music] however just like r-squared we need to know if this relationship is statistically

BAM [Music] however just like r-squared we need to know if this relationship is statistically significant so let's do it there are three ways to determine if an odds ratio or log of an odds ratio is statistically significant one Fisher's exact test to a chi-square test and three the Wold test one super annoying thing is that there is no general consensus on which method is best and people often mix and match some people we use Fisher's exact test or the chi-square test to calculate a p-value

mix and match some people we use Fisher's exact test or the chi-square test to calculate a p-value and use the Wald test to calculate a confidence interval and some people are happy to let Wall do all the work calculate the p-value and the confidence interval the last method ensures that the p-value and confidence interval will always be consistent but check and see what other folks do in your field to find out what is most acceptable so let's start with Fisher's exact test step 1 watch the

field to find out what is most acceptable so let's start with Fisher's exact test step 1 watch the stat quest on enrichment analysis using Fisher's exact test and the hyper geometric distribution BAM now think of the people as a bag of tasty M&Ms people with cancer are represented by 23 plus 6 equals 29 red M&Ms people without cancer are represented by 117 plus 210 equals 320 7 blue M&Ms now just like in that stat quest we work out the p-value for grabbing a handful of 23 red M&Ms and 117 blue

like in that stat quest we work out the p-value for grabbing a handful of 23 red M&Ms and 117 blue M&Ms and just like in that stat quest we use a computer and it says the p-value equals zero point zero zero zero zero one another small BAM now let's talk about how to calculate the p-value using a chi-square test the chi-square test compares the observed values to expected values that assume there is no relationship between the mutated gene and cancer to do this we calculate the probability of

is no relationship between the mutated gene and cancer to do this we calculate the probability of having cancer as the total number of people with cancer that's 29 divided by the total number of people that's 356 so the probability of having cancer is 0.08 so if the gene is not associated with the 23 plus 117 equals 140 people with the mutated gene then the probability of having cancer times the number of people with the mutated gene equals 11 point 2 thus the expected number of people with the

of people with the mutated gene equals 11 point 2 thus the expected number of people with the mutated gene and cancer is 11 point 2 in the remaining 100 28.8 people with the mutated gene are expected not to have cancer likewise if the gene is not associated with the six plus 200 ten equals 216 people without the mutated gene then the probability of having cancer times the number of people without the mutated gene equals seventeen point three thus the expected number of people with cancer that

the mutated gene equals seventeen point three thus the expected number of people with cancer that do not have the mutated gene is seventeen point three and the remaining 100 98.7 people with the mutated gene are expected not to have cancer now we do a chi-square test to compare the observed and expected values and the p-value is zero point zero zero zero zero one with the continuity correction and zero point zero zero zero zero zero four without the continuity correction if you're not familiar

zero point zero zero zero zero zero four without the continuity correction if you're not familiar with the chi-square test don't panic we'll do a stat quest on it one last small BAM lastly let's talk about the Wold test this test is commonly used to determine the significance of odds ratios in logistic regression and to calculate confidence intervals the wold test takes advantage of the fact that the log of the odds ratios just like the log of the odds are normally distributed this is a

that the log of the odds ratios just like the log of the odds are normally distributed this is a histogram of 10,000 randomly generated log of the odds ratios that tells us what to expect if there is no relationship between the mutated gene and cancer if you want to draw this histogram at home randomly pick a total number of people between 300 and 400 we do this to simulate the fact that if we repeated this experiment we might not get the exact same sample size each time then for each sample

repeated this experiment we might not get the exact same sample size each time then for each sample select a random number between 0 and 1 if the number was less than 0.08 the proportion of people with cancer then the sample has cancer then pick another random number between zero and one if the number was less than 0.3 nine the proportion of people with the mutated gene then it has the mutated gene this gives you a matrix of random values that did not depend on a relationship between the

gene this gives you a matrix of random values that did not depend on a relationship between the mutated gene and cancer lastly calculate the log of the odds ratio do this 10,000 times and draw a histogram a normal curve fits pretty well notice that the histogram and curve are centered on zero when there is no difference in the odds the log of the odds ratio equals zero the standard deviation of the 10,000 log of the odds ratios is zero point four three however it is more common to estimate the

10,000 log of the odds ratios is zero point four three however it is more common to estimate the standard deviation from the observed values you do this by taking the square root of the sum of one over each of the observed values if we do the math we get 0.47 the two different standard deviations that we calculated are very similar all that the wold test does is look to see how many standard deviations the observed log of the odds ratio is from zero and since the Wold test typically uses the

the observed log of the odds ratio is from zero and since the Wold test typically uses the estimated standard deviation we'll replace the histogram with a normal curve centered on 0 that has a standard deviation of 0.47 the log of the odds ratio is the same one that we already calculated here's where the log of the odds ratio goes on the curve to find out how many standard deviations the log of the odds ratio is away from 0 we simply divide by the standard deviation thus we divide 1.93 by 0.47

odds ratio is away from 0 we simply divide by the standard deviation thus we divide 1.93 by 0.47 and that gives us 4 point 1 1 so our log of the odds ratio is 4 point 1 1 standard deviations away from the mean of the distribution a general rule of thumb with normal distributions is that anything further than two standard deviations from the mean will have a p-value less than 0.05 so we know our log of the odds ratio is statistically significant however to get a precise two-sided p-value we can

of the odds ratio is statistically significant however to get a precise two-sided p-value we can add up the areas under the curve for points greater than one point nine three and four points less than negative one point nine three however this is traditionally done using a standard normal curve ie a normal curve with mean equals zero and standard deviation equal to one and that means adding up the areas under the curve for points that are greater than four point 1 1 and for points that are less

areas under the curve for points that are greater than four point 1 1 and for points that are less than negative 4 point 1 1 where for point 1 1 is the number of standard deviations that the log of the odds ratio is away from the mean ultimately the p-value that the mutated gene does not have a relationship with cancer is 0.00005 double bam before we go here are some final thoughts about the three different statistical tests we can use with the log of the odds ratio when I generated the 10,000

different statistical tests we can use with the log of the odds ratio when I generated the 10,000 random log of the odds ratios I performed all three tests on them if the tests worked as expected 5 percent should have p-values less than 0.5 here's what I got for Fisher's exact test four percent of the p-values were less than 0.05 for the chi-square test with the continuity correction three percent of the p-values were less than 0.05 without the continuity correction five percent of the p-values

of the p-values were less than 0.05 without the continuity correction five percent of the p-values were less than 0.05 for the Wold test 5% of the p-values were less than 0.05 so all of the tests did a good job limiting significant p-values so just find out what method is most commonly used in your field personally I'd be more comfortable with a borderline p-value if I knew it passed all of the tests in summary an odds ratio is just a ratio of odds and a log of the odds ratio is just wait for

tests in summary an odds ratio is just a ratio of odds and a log of the odds ratio is just wait for it the log of an odds ratio the odds ratio and the log of the odds ratio tells us if there is a strong or weak relationship between two things like whether or not having a mutated gene increases the odds of having cancer and depending on the field you work in people use Fisher's exact test chi squared or the wold test to determine p-values for the significance of that relationship hooray we've

or the wold test to determine p-values for the significance of that relationship hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you want to support stat quest well click the like button below and consider buying one or two of my original songs alright until next time quest on

If you can fit a line you can fit a squiggle if you can, make me laugh you can, make me giggle stat quest Hello, i'm josh stormer and welcome to stat quest today we're going to talk about logistic regression This is a technique that can be used for traditional statistics as, well as machine learning so let's get right to it Before we dive into logistic regression let's take. A, step back and review, linear regression in Another stat quest, we talked, about linear regression We had some data

linear regression in Another stat quest, we talked, about linear regression We had some data Weight and size then, we fit a line to it and With that line, we could do a lot of things First we could calculate r-squared and determine if weight and size are correlated large values imply a large effect, and Second calculate a p-value to determine if the r-squared value is statistically significant and Third, we could use the line, to predict, size given weight if a, new, mouse has this weight Then

Third, we could use the line, to predict, size given weight if a, new, mouse has this weight Then this, is the size that, we predict, from the weight although We didn't mention it at the time using data to predict something falls under the category of machine learning So plain old linear regression is a form of machine learning We also talked a little bit about multiple regression Now, we are trying to predict, size, using weight and blood volume Alternatively we could, say that, we are trying

to predict, size, using weight and blood volume Alternatively we could, say that, we are trying to model size using weight and blood volume Multiple regression, did the same things that normal regression did we calculated r-squared and we calculated the p-value and We could predict, size, using weight and blood volume and This, makes multiple regression a slightly fancier machine learning method We also talked, about how, we can use discrete measurements like genotype to predict size if you're

We also talked, about how, we can use discrete measurements like genotype to predict size if you're Not familiar with the term genotype don't freak out it's. No, big deal just know that it refers to different types of mice lastly, we could compare models So on the left side we've got normal regression, using weight to predict size and We can, compare those predictions to the ones, we get from multiple regression, where we're using weight and blood volume to predict size Comparing the simple

multiple regression, where we're using weight and blood volume to predict size Comparing the simple model to the complicated one tells us if we need to measure weight and blood volume to accurately predict Size or if we can get, away, with just weight Now that we remember all the cool, things, we can, do with linear regression Let's talk, about logistic regression Logistic regression is similar to linear regression except Logistic regression predicts whether something, is true or false instead

linear regression except Logistic regression predicts whether something, is true or false instead of predicting something continuous, like, sighs these mice are obese and These mice are not Also instead of fitting a line to the data logistic regression fits an s-shaped logistic function The curve goes from zero to one? And that, means that the curve tells you the probability that a mouse is obese based on its weight If we weighed a very heavy mouse? There is a high probability that the new,

based on its weight If we weighed a very heavy mouse? There is a high probability that the new, mouse is obese? If we weighed an intermediate mouse Then there is only a 50% chance of the mouse is obese? Lastly, there's only a small probability that a light mouse is obese Although, logistic regression, tells the probability that a mouse is obese or not it's usually used for classification For example if the probability of mouse is obese is greater than 50% Then we'll classify it as obese

example if the probability of mouse is obese is greater than 50% Then we'll classify it as obese Otherwise we'll classify it as not obese Just like with linear regression, we can, make simple models in this case, we can have obesity predicted, by weight or? more complicated models in this case obesity is predicted by weight and genotype in This, case, obesity is predicted. By weight and genotype and age and Lastly, obesity is predicted by weight genotype, age and Astrological sign in other

and age and Lastly, obesity is predicted by weight genotype, age and Astrological sign in other words just like linear regression logistic Regression can work with continuous data, like weight and age and discrete data like genotype and astrological sign We can, also test to see if each variable is useful for predicting obesity however Unlike normal regression, we can't easily compare the complicated model to the simple model and we'll talk more about, why in a bit Instead we just test to see

model to the simple model and we'll talk more about, why in a bit Instead we just test to see if a variables affect on the prediction is significantly different from zero If not it, means that the variable is not helping the prediction We use, wald's tests to figure this out we'll talk, about that in another stat quest in This, case, the astrological sign is totes useless That statistical jargon for not helping That, means we can, save time and space in our study. By leaving it out Logistic

for not helping That, means we can, save time and space in our study. By leaving it out Logistic regressions ability to provide probabilities and classify, new samples using continuous and discrete measurements Makes it a popular machine learning method One big difference between linear regression and logistic regression is how the line is fit to the data With linear regression, we fit the line, using least squares In other words, we find the line that minimizes the sum of the squares of these

using least squares In other words, we find the line that minimizes the sum of the squares of these residuals We also use the residuals to calculate r. Squared and to compare simple models to complicated models Logistic regression doesn't have the same concept of a residual so it can't use least squares and it can't calculate r squared instead it uses something called maximum likelihood There's a whole stack quest on maximum likelihood so see that for details but in a nutshell You, pick a

a whole stack quest on maximum likelihood so see that for details but in a nutshell You, pick a probability scaled. By weight of observing an obese mouse just like this curve and You, use that to calculate the likelihood of observing a, non obese mouse that weighs this much and then you calculate the likelihood of observing, this mouse and you, do that for all of the mice and Lastly, you multiply all of those likelihoods together that's the likelihood of the data given this line then you shift

all of those likelihoods together that's the likelihood of the data given this line then you shift the line and calculate a new, likelihood of the data and then ship the line and calculate the likelihood, again, and again Finally the curve with the maximum value for the likelihood is selected bam in summary logistic regression can be used to classify samples and it can, use different types of data like, size and/or genotype to do that classification and it can, also be used to assess what

data like, size and/or genotype to do that classification and it can, also be used to assess what variables are useful for classifying samples ie Astrological sign is totes useless Hooray, we've made it to the end of another exciting stat quest do you, like this StackQuest, and want to see more please subscribe if you, have suggestions for future stat quests, well put them in the comments below, until next time quest on

If I were in Hawaii I'd be sitting on a beach In the shade of a tree Watching snack quest Hello, I'm Josh Starmer and welcome to StatQuest today We're gonna cover logistic regression and we're gonna dive deep into the details. This is part one of a series of videos I'm gonna do on logistic regression this time we're talking about coefficients This stat quest follows up on logistic regression clearly explained Which provides the big picture of what logistic regression is and how it works In this

explained Which provides the big picture of what logistic regression is and how it works In this video. I want to dive deeper into how logistic regression works Specifically we'll talk about the coefficients that are the results of any logistic regression We'll talk about how they are determined and interpreted we'll talk about the coefficients in the context of using a continuous variable like weight to predict obesity and We'll talk about the coefficients in the context of testing if a

like weight to predict obesity and We'll talk about the coefficients in the context of testing if a discrete variable Like whether or not a mutated gene is related to obesity Before we dive into the details Let's do a quick review of some of logistic regressions main ideas to make sure we're all on the same page in This example the y-axis is the probability a mouse is obese It goes from 0 the mouse is not obese to 1 the mouse is obese The dotted line is fit to the data to predict the

0 the mouse is not obese to 1 the mouse is obese The dotted line is fit to the data to predict the probability a mouse is obese given its weight If we wait a heavyweight Mouse Then the corresponding point on the line indicates that there is a high probability close to one that it is obese and if we weight a middleweight Mouse Then there's an intermediate probability close to 0.5 that it is obese Lastly a lightweight Mouse has a low probability close to 0 of being obese Ok, those are all the

Lastly a lightweight Mouse has a low probability close to 0 of being obese Ok, those are all the basics we need for this stat quest One last thing before we get started I want to mention that logistic regression is a specific type of generalized a linear model often abbreviated GLM Generalized linear models are a generalization of the concepts and abilities of regular linear models Which we've already talked about in many stat quests That means that if you're familiar with linear models, then

talked about in many stat quests That means that if you're familiar with linear models, then you are well on your way to understanding logistic regression We'll start by talking about logistic regression when we use a continuous variable like weight to predict obesity This type of logistic regression is closely related to linear regression a type of linear model So let's do a super quick review of linear regression Shameless self-promotion if you're not already familiar with linear regression

of linear regression Shameless self-promotion if you're not already familiar with linear regression Check out the stat quests on linear regression and linear models part one Ok, we start with some data and we fit a line to it and this is the equation for the line It has a y-axis intercept and a slope and We plug in values for wait to get predicted values for size So even though we didn't measure a mouse that weighed 1.5 we can plug 1.5 into the equation and predict that Mouse to have size 1.9 1

mouse that weighed 1.5 we can plug 1.5 into the equation and predict that Mouse to have size 1.9 1 And a mouse with weight 1.5 and size 1.9 one would end up on the line at this point Now even though it's silly the equation can predict the size of mice with weight equals zero that's just the y axis intercept zero point eight six and We can even predict the size of mice with negative weights I'm pointing this out because the fact that we are not limiting the equation to a specific domain and

pointing this out because the fact that we are not limiting the equation to a specific domain and range makes it easier to solve and This has a big effect on how logistic regression is done So over on the left side we have the linear regression and on the right side we have the logistic regression with linear regression the values on the y-axis Can in theory be any number? Unfortunately with logistic regression the y axis is confined to probability values between 0 and 1 To solve this problem

regression the y axis is confined to probability values between 0 and 1 To solve this problem the y axis in logistic regression is Transformed from the probability of obesity to the log odds of obesity. So just like the y axis and linear regression It can go from negative infinity to positive infinity So we can see what we're doing let's move the logistic regression to the left side Now let's transform the y-axis from a probability of obesity scale to a log odds of obesity scale We do that with

the y-axis from a probability of obesity scale to a log odds of obesity scale We do that with the logit function that we talked about in the odds slash log odds stat quest P in this case is the probability of a mouse being obese and Corresponds to a value on the old y axis between 0 and 1 The midpoint on the old y axis corresponds to P equals 0.5 and When we plug P equals 0.5 into the logit formula and do the math We get 0 the center of the new y axis here Is P equals zero point 7 31 on the old

and do the math We get 0 the center of the new y axis here Is P equals zero point 7 31 on the old y axis if? We plug P equals zero point seven three one into the logit function and do the math we get one on the new y axis if We plug P equals zero point eight eight into the logit function and do the math we get two on the new y axis if We plug P equals zero point nine five into the logit function and do the math We get three on the new y axis Lastly these blue points from the original data are

and do the math We get three on the new y axis Lastly these blue points from the original data are at P equals one If we plug P equals one into the logit function and do the math Well, technically you can't divide by zero. However the log of one divided by zero equals the log of one minus the log of zero and the log of zero is defined as negative infinity and Since something minus negative infinity equals positive infinity this whole thing is equal to positive infinity This means the original

equals positive infinity this whole thing is equal to positive infinity This means the original samples that were labeled obese are at positive infinity on the new y-axis as a result the original y-axis from 0.5 to 1 is Stretched out from 0 to positive infinity on the new y-axis Similarly 0.5 to 0 on the old y-axis is stretched out from 0 to negative infinity on the new y-axis Ultimately we end up with the log of the odds of obesity on the new y-axis And the new y-axis transforms the squiggly

up with the log of the odds of obesity on the new y-axis And the new y-axis transforms the squiggly line into a straight line The important thing to know is that even though the graph with the squiggly line is what we associate with logistic regression The coefficients are presented in terms of the log odds graph In the stack quest logistic regression details part 2 fitting a line with maximum likelihood We'll talk more about how this line is fit to the data But for now just take my word for it

We'll talk more about how this line is fit to the data But for now just take my word for it that this is the best fitting line Just like with linear regression the best fitting line has a y-axis intercept and a slope The coefficients for the line are what you get when you do logistic regression The first coefficient is the y-axis intercept when weight equals zero It means that when weight equals zero the log of the odds of obesity are negative three point four seven six in Other words if you

zero the log of the odds of obesity are negative three point four seven six in Other words if you don't weigh anything the odds are against you being obese, duh here's the standard error for the estimated intercept and The Z value is the estimated intercept divided by the standard error In other words, it's the number of standard deviations. The estimated intercept is away from zero on the standard normal curve That means that this is the Wald's test that we talked about in the odds ratio stat

normal curve That means that this is the Wald's test that we talked about in the odds ratio stat quest Since the estimate is less than two standard deviations away from zero. We know it is not statistically significant and This is confirmed by the large p-value the area under the standard normal curve That is further than one point four seven standard deviations away from zero The second coefficient is the slope It means that for every one unit of weight gained the log of the odds of obesity

is the slope It means that for every one unit of weight gained the log of the odds of obesity increases by one point eight to five Here's the standard error for the slope Again, the Z value is the number of standard deviations. The estimate is from zero on the standard normal curve and Again, the estimate is less than two standard deviations from zero. So it is not statistically significant, this is no surprise with such a small sample size and This is confirmed with the large p-value Double

is no surprise with such a small sample size and This is confirmed with the large p-value Double bam Now we know all about the logistic regression coefficients when we use a continuous variable like weight to predict obesity now let's talk about logistic regression coefficients in the context of testing if a discrete variable like whether or not a mouse has a mutated gene is related to obesity on the left side we have mice that have a normal gene and On the right side. We have mice with a

on the left side we have mice that have a normal gene and On the right side. We have mice with a mutated gene Just like before some of the mice are obese in some of the mice are not obese This type of logistic regression is very similar to how a t-test is done using linear models So let's do a quick review of how a t-test is done using linear models Shameless self-promotion If you're not already familiar with how a t-test can be performed using a linear model then check out the stat quest

familiar with how a t-test can be performed using a linear model then check out the stat quest linear models part two t-tests and anova Okay, we start with some data in this case we've measured the size of mice that have a normal gene and the size of mice with a mutated version of that gene Then we fit two lines to the data the first line represents the mean size for the mice with the normal copy of the gene the Second line represents the mean size of the mice with the mutated copy of the gene

of the gene the Second line represents the mean size of the mice with the mutated copy of the gene These two lines come together to form the coefficients in this equation the mean value for size for the mice with the normal copy of the gene goes here and The difference between the mean size of the mice with a mutated gene and the mean size of the mice with the normal gene goes here We then pair this equation with a design majors to predict the size of a mouse Given that it has the normal or

this equation with a design majors to predict the size of a mouse Given that it has the normal or mutated version of the gene This is the design matrix for the observed data The first column corresponds to values for b1 and it turns on the first coefficient the mean of the normal mice The second column corresponds to values for b2 and turns the second coefficient the mean of the mutant mice minus the mean of the normal mice off or on Depending on whether it is a zero or a one For example the

the mean of the normal mice off or on Depending on whether it is a zero or a one For example the first row in the design matrix corresponds to a mouse with a normal copy of the gene We predict its size by replacing b1 with 1 in replacing b2 with 0 and then we just do the math and We see that this mouse is associated with the mean of the normal mice This row in the design matrix corresponds to a mouse with the mutated gene We plug in 1 for b1 and Plug in 1 for b2 and we see that the mean of the

with the mutated gene We plug in 1 for b1 and Plug in 1 for b2 and we see that the mean of the mice with the normal gene plus the difference between the two means Associates this mouse with the mean for the mice with a mutated gene When we do a t-test this way we are basically testing to see if this coefficient The mean of the mutant mice minus the mean of the normal mice is equal to zero But you already know all this t-test stuff what you really want to know is how it applies to logistic

you already know all this t-test stuff what you really want to know is how it applies to logistic regression The first thing we do is transform the y-axis from the probability of being obese To the log of the odds of obesity Now we fit two lines to the data For the first line we take the normal gene data and Use it to calculate the log of the odds of obesity for mice with the normal gene Thus the first line represents the log of the odds of obesity for the mice with the normal gene Let's call

first line represents the log of the odds of obesity for the mice with the normal gene Let's call this the log of the odds for gene normal We then calculate the log of the odds of obesity for the mice with the mutated gene Thus the second line represents the log of the odds of obesity for a mouse with the mutant gene Let's call this the log of the odds gene mutated These two lines come together to form the coefficients in this equation the log of the odds gene normal goes here in the difference

form the coefficients in this equation the log of the odds gene normal goes here in the difference between the log of the odds gene mutated in the log of the odds gene normal goes here and since subtracting one log from another Can be converted into division this term is a log of the odds ratio It tells us on a log scale how much having the mutated gene Increases or decreases the odds of a mouse being obese Okay, now that we know what the equation is all about let's substitute in the numbers

being obese Okay, now that we know what the equation is all about let's substitute in the numbers the log of the odds for gene normal is just the log of 2 divided by 9 and The log of the odds for gene mutated is just the log of 7/3 Now we just do the math and that gives us these coefficients and Those are what you get when you do logistic regression the intercept is the log of the odds for gene normal and The gene mutant term is the log of the odds ratio That tells you on a log scale how much

normal and The gene mutant term is the log of the odds ratio That tells you on a log scale how much having the mutated gene increases or decreases the odds of being obese and here are the standard errors for those estimated coefficients and Here are the z values aka the Wald's test values that tell you how many standard deviations The estimated coefficients are away from 0 on a standard normal curve The Z value for the intercept negative 1.9 tells us that the estimated value for the intercept

The Z value for the intercept negative 1.9 tells us that the estimated value for the intercept negative 1.5 is less than 2 standard deviations from 0 and thus not significantly different from 0 and this is confirmed by a p-value greater than 0.05 The z-value for gene mutant the log odds ratio that describes how having the mutated gene Increases the odds of being obese is greater than two Suggesting it is statistically significant. And this is confirmed by a p-value less than 0.05 Double bam now

it is statistically significant. And this is confirmed by a p-value less than 0.05 Double bam now we have seen how some of the linear model concepts for regression apply to logistic regression and We have seen how some of the linear model concepts for T tests apply to logistic regression in short in terms of the coefficients Logistic regression is the exact same as good old linear models, except the coefficients are in terms of the log odds This means that all those fancy things we can do with

the coefficients are in terms of the log odds This means that all those fancy things we can do with linear models like multiple regression and ANOVA Can be done using logistic regression all we have to remember is that the scale for the coefficients is log odds Triple bam hooray We've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them Please subscribe and if you want to support stat quest well Click the like button below and consider

subscribe and if you want to support stat quest well Click the like button below and consider buying one or two of my original songs Alright until next time quest on

maximum likelihood in your neighborhood I think that you should learn about it stack west hello I'm Josh star and welcome to stack quest today we're gonna follow up on our series of videos on logistic regression this time we're going to talk about fitting a line using maximum likelihood that is to say we're going to talk about how this squiggle is optimized to fit the data the best in the first video in this series logistic regression details part 1 coefficients we saw that logistic regression

in this series logistic regression details part 1 coefficients we saw that logistic regression is very similar to regular old linear models like linear regression t-tests and fancy stuff like multiple regression and ANOVA the big difference is that logistic regression uses the log odds on the y-axis however you may recall that in that stat quest I said just take my word for it that this is the best fitting line well the time for blindly trusting me is over let's see how this line is fit to the

fitting line well the time for blindly trusting me is over let's see how this line is fit to the data however before we talk about how lines are fit in logistic regression let's do a super quick review of how lines are fit in linear regression we start with some data and we fit a line to it using least squares in other words we measured the residuals the distances between the data and the line then square them so that negative values do not cancel out positive values and then add them all up

then square them so that negative values do not cancel out positive values and then add them all up then we rotate the line a little bit and do the same thing measure the residuals square them and add them up in the line with the smallest sum of squared residuals the least squares is the line chosen to fit best okay now that we remember how to fit a line in linear regression let's talk about logistic regression in this example we are using logistic regression to determine the effect of weight

regression in this example we are using logistic regression to determine the effect of weight on obesity these mice are obese and these mice are not obese our goal is to draw the best fitting squiggle for this data as we know in logistic regression we transform the y axis from the probability of obesity to the log odds of obesity we can draw a candidate best fitting line on the graph the only problem is that the transformation pushes the raw data to positive and negative infinity and this means

is that the transformation pushes the raw data to positive and negative infinity and this means that the residuals the distance from the data points to the line are also equal to positive and negative infinity and this means we can't use least squares to find the best fitting line instead we use maximum likelihood the first thing we do is project the original data points onto the candidate line this gives each sample a candidate log-odds value in other words the log odds of this point is two

this gives each sample a candidate log-odds value in other words the log odds of this point is two point one and the log odds of this point is one point four then we transform the candidate log odds to candidate probabilities using this fancy looking formula which is just a reordering of the transformation from probability to log odds for those at home keeping score here's how to convert the equation that takes probability as input and outputs log odds into an equation that takes log odds as

that takes probability as input and outputs log odds into an equation that takes log odds as input and outputs probability first we exponentiate both sides then we multiply both sides by one minus P and then multiply 1 minus P and E to the log odds then we add P times e to the log odds to both sides then we pull P out on the left side of the equation lastly we divide both sides by 1 plus e to the log odds BAM now let's see this fancy equation in action for example for this point we substitute

log odds BAM now let's see this fancy equation in action for example for this point we substitute negative 2.1 for the log odds and that gives us P equals 0.1 and that gives us a y-coordinate on the squiggle and we do the same thing for all of the points now we use the observed status obese or not obese to calculate their likelihood given the shape of the squiggly line we'll start by calculating the likelihood of the obese mice given the shape of the squiggle the likelihood that this Mouse is

the likelihood of the obese mice given the shape of the squiggle the likelihood that this Mouse is obese given the shape of the squiggle is the value on the y-axis where the point intersects the squiggle 0.49 in other words the likelihood that this Mouse is obese given the shape of the squiggle is the same as the predicted probability in this case the probability is not calculated as the area under a curve but instead is the y-axis value and that's why it's the same as the likelihood the

under a curve but instead is the y-axis value and that's why it's the same as the likelihood the likelihood that this Mouse's obese is 0.9 the likelihoods that these mice are obese are 0.9 10.9 1 and 0.92 the likelihood for all of the obese mice is just the product of the individual likelihoods now we'll figure out the likelihoods for the mice that are not obese note the lower the probability of being obese the higher the probability of not being obese thus for these mice the likelihood equals

being obese the higher the probability of not being obese thus for these mice the likelihood equals one minus the probability the mouse is obese the probability that this Mouse is obese is 0.9 so the probability and likelihood that it is not obese is 1 minus 0.9 the probability that this Mouse is obese is 0.3 so the probability and likelihood that it is not obese is 1 minus 0.3 the probabilities that these mice are obese are both 0.01 so the probability and the likelihood that they are not

that these mice are obese are both 0.01 so the probability and the likelihood that they are not obese is 1 minus 0.01 now we can include the individual likelihoods for the mice that are not obese to the equation for the overall likelihood note although it is possible to calculate the likelihood as the product of the individual likelihoods statisticians prefer to calculate the log of the likelihood instead either way works because the squiggle that maximizes the likelihood is the same one that

instead either way works because the squiggle that maximizes the likelihood is the same one that maximizes the log of the likelihood with the log of the likelihood or log-likelihood to those in the know we add the logs of the individual likelihoods instead of multiplying the individual likelihoods thus the log likelihood of the data given the squiggle is negative three point seven seven and this means that the log-likelihood of the original line is negative three point seven seven now we rotate

that the log-likelihood of the original line is negative three point seven seven now we rotate the line in calculate its log likelihood by projecting the data onto it transforming the log odds to probabilities and then calculating the log likelihood and the final value for the log likelihood is negative four point one five so this one is not as good as the first line and we just keep rotating the log odds line and projecting the data onto it and then transforming it to probabilities in

the log odds line and projecting the data onto it and then transforming it to probabilities in calculating the log-likelihood note the algorithm that finds the line with the maximum likelihood is pretty smart each time it rotates the line it does so in a way that increases the log likelihood thus the algorithm can find the optimal fit after a few rotations ultimately we get a line that maximizes the likelihood and that's the one chosen to have the best fit BAM that's all there is to it but just

likelihood and that's the one chosen to have the best fit BAM that's all there is to it but just like with linear regression there's more to logistic regression than just fitting a line we want to know if that line represents a useful model and that means we need an r-squared value and a p-value however in logistic regression we have to do that without the usual residuals so we'll learn about r-squared and P values for logistic regression in the next stack west cool hooray we've made it to the

and P values for logistic regression in the next stack west cool hooray we've made it to the end of another exciting stat quest if you liked this stack west and want to see more of them please subscribe and if you want to support stack quest well click the like button below and consider buying one or two of my original songs alright until next time quest on

ah square p-values effects sons significance let's talk about it stat quest hello I'm Josh Starla and welcome to stat quest in this video we're going to continue our series on logistic regression and we're going to talk about R squared and P values in the stat quest logistic regression details part 2 fitting a line with maximum likelihood we had weight measurements for obese mice and weight measurements for some mice that were not obese and we converted the y-axis from probability to the log

for some mice that were not obese and we converted the y-axis from probability to the log odds of obesity and then fit a line to that data using maximum likelihood well technically we maximize the log likelihood but either way you do it you get the same best fitting line however we ended with a bit of a cliffhanger we know that the line is best fit but how do we know if it is useful in other words how do we calculate R squared and a p-value for the relationship between weight and obesity the

how do we calculate R squared and a p-value for the relationship between weight and obesity the answer is it's complicated although the idea behind generalized linear models a common framework for solving all kinds of problems is nice the result is a bit of a hot mess even though pretty much everyone agrees on how to calculate R squared and The Associated p-value for linear models there is no consensus on how to calculate R squared for logistic regression there are more than 10 different ways

on how to calculate R squared for logistic regression there are more than 10 different ways to do it so before you settle on a way to calculate R squared for logistic regression look and see what other people are already doing in your field that will give you a good starting point for this stat quest rather than describe every single r-squared for logistic regression I'm focusing on one that is commonly used and is easily calculated from the output that R gives you just so you know this R

is commonly used and is easily calculated from the output that R gives you just so you know this R squared is called McFadden's pseudo R squared another bonus is that this method is very similar to how R squared is calculated for regular old linear models so let's do a super quick review of R squared for regular old linear models using size and weight measurements as an example so that the concepts are fresh in your mind wow that was a long sentence in linear regression and other linear models

are fresh in your mind wow that was a long sentence in linear regression and other linear models R squared and the related p-value are calculated using the residuals in brief we square the residuals and then add them up I call this SS fit for sum of squares of the residuals around the best fitting line and we compare that to the sum of squared residuals around the worst fitting line the mean of the y axis values this is called SS mean R squared compares a measure of a good fit SS fit to a

of the y axis values this is called SS mean R squared compares a measure of a good fit SS fit to a measure of a bad fit SS mean R squared is the percentage of variation around the mean that goes away when you fit a line to the data also because I want to refer to this later I'm going to point out another thing you already know R squared goes from 0 to 1 if there wasn't a relationship between weight and size the data might look like this and the best fitting line might look like this in this

and size the data might look like this and the best fitting line might look like this in this case SS fit equals SS mean and when we plug in the values for SS fit and SS mean we get 0 in the numerator and then R squared equals 0 on the other hand when the line fits the data perfectly ss fit equals zero and that means when we plug in the values for SS fit and SS mean we get SS mean minus zero in the numerator and then R squared equals one duh I told you this was something you already knew now

the numerator and then R squared equals one duh I told you this was something you already knew now let's talk about R squared in terms of logistic regression like linear regression we need to find a measure of a good fit to compare to a measure of a bad fit unfortunately the residuals for logistic regression are all infinite so we can't use them but we can project the data onto the best fitting line and then we translate the log odds back to probabilities and lastly calculate the log likelihood

and then we translate the log odds back to probabilities and lastly calculate the log likelihood of the data given the best fitting squiggle in this case that gives us negative three point seven seven we can call this ll fit for the log likelihood of the fitted line and use it as a substitute for SS fit now we need a measure of a poorly fitted line that is analogous to SS mean we do this by calculating the log odds of obesity without taking weight into account the overall log odds of obesity is

the log odds of obesity without taking weight into account the overall log odds of obesity is just the total number of obese mice divided by the total number of mice that are not obese then we just take the log of the whole thing and do the math in this case we get a horizontal line at zero point two two then project the data onto this line and then we translate the log odds back to probabilities that gives us a horizontal line at P equals zero point five six note the overall log odds zero

that gives us a horizontal line at P equals zero point five six note the overall log odds zero point two two translates to the overall probability of being obese zero point five six in other words we can arrive at the same solution by calculating the overall probability of obesity hooray they are the same so we have two different ways to calculate the exact same number now calculate the log likelihood of the data given the overall probability of obesity this gives us negative six point one

of the data given the overall probability of obesity this gives us negative six point one eight we'll call this ll overall probability and use it as a substitute for SS mean so we have LL overall probability a measure of a bad fit and ll fit hopefully a measure of a good fit and it makes intuitive sense that we could combine them just like we combined SS mean and SS fit to calculate R squared plugging in the numbers gives us an r-squared value equals zero point three nine BAM however before we

in the numbers gives us an r-squared value equals zero point three nine BAM however before we get too excited let's verify that calculating R squared with these log likelihoods will result in a value between zero when the fit is bad and one when the fit is good let's start by looking at the r-squared we'll get when weight is not a good predictor of obesity there are light mice that are obese and light mice that are not obese and there are heavy mice that are obese and heavy mice that are not

light mice that are not obese and there are heavy mice that are obese and heavy mice that are not obese intuitively we can see that with this data weight makes a poor predictor of obesity the maximum likelihood best fitting line for this data has an intercept of negative zero point two two and a slope of practically zero 5.10 to the negative 17 to be exact on the log-odds scale and this translates to a horizontal line at 0.45 on the probability scale ll fit is the log likelihood of the data

to a horizontal line at 0.45 on the probability scale ll fit is the log likelihood of the data projected onto the best fitting line and that value is negative six point one eight now let's calculate ll overall probability the first step is simply to calculate the overall probability of obesity that gives us a line at zero point four four ll overall probability is the log likelihood of the data projected onto the overall probability in this case ll overall probability equals negative six point

onto the overall probability in this case ll overall probability equals negative six point one eight now let's just plug in the values for ll overall probability and ll fit when we do the math we get R squared equals zero BAM now let's look at the R squared we'll get when weight is an awesome predictor of obesity the maximum-likelihood best fitting line for this data has an intercept of negative sixty three point seven two and a slope of twenty two point four two and this translates to a

sixty three point seven two and a slope of twenty two point four two and this translates to a squiggly line on the probability scale lfit is the log likelihood of the data projected onto the best fitting line in this case ll fit equals zero that's because the log of one equals zero so ll fit is just the sum of a bunch of zeros now let's calculate the overall probability of obesity and that gives us a line at 0.44 ll overall probability is the log likelihood of the data projected onto the

gives us a line at 0.44 ll overall probability is the log likelihood of the data projected onto the overall probability in this case that value is negative six point one eight at this point you may have noticed something when the model is a poor fit the log likelihood for logistic regression is a relatively large negative value and when the model is a good fit the log likelihood for logistic regression is a value close to zero log likelihoods for logistic regression will always be between zero

is a value close to zero log likelihoods for logistic regression will always be between zero and negative infinity because we are taking logs of values between 0 and 1 and good fits result in log likelihoods close to 0 and bad fits result in larger negative log likelihoods okay back to calculating r squared let's plug in the values for LL overall probability and ll fit this gives us an R squared equals 1 double bail so we see that at least on an intuitive level the r-squared calculated with log

1 double bail so we see that at least on an intuitive level the r-squared calculated with log likelihoods behaves like the r-squared calculated from sums of squares the log likelihood r-squared values go from 0 for poor models to 1 for good models now we need a p-value the good news is that calculating the p-value is pretty straightforward two times the difference between ll fit and ll overall probability equals a chi-squared value with degrees freedom equal to the difference in the number of

equals a chi-squared value with degrees freedom equal to the difference in the number of parameters in the two models ll fit has two parameters since it needs estimates for a y-axis intercept and a slope ll overall probability has one parameter since it only needs an estimate for a y-axis intercept so in this case the degrees of freedom equals 1 here's a graph of a chi-squared distribution with one degree of freedom in the worst case scenario ll fit equals ll overall probability and the whole

one degree of freedom in the worst case scenario ll fit equals ll overall probability and the whole thing equals zero in this case the p value equals one since the area under the curve from 0 to infinity equals 1 however most of the time ll fit will be closer to zero than ll overall probability and since the log likelihoods are negative this will be a positive value on the x-axis and the p value will get smaller in the example we've worked out in this stat quest we end up with four point eight

will get smaller in the example we've worked out in this stat quest we end up with four point eight two for the chi-squared distribution and the p value equals zero point zero three thus the relationship between weight and obesity is not due to chance and the R squared value zero point three nine tells us the effect size of this relationship triple bam before we leave there are a few things I need to point out when you see these formulas for r-squared and the associated p-value out in the wild

to point out when you see these formulas for r-squared and the associated p-value out in the wild they will look more like this this is because the formulas usually include terms for the saturated model I'll talk more about the saturated model in another stat quest for now however just know that when doing logistic regression the log-likelihood of the saturated model equals zero so we can omit it and when we omit the term for the saturated model we get the simple equations are presented in this

and when we omit the term for the saturated model we get the simple equations are presented in this stat quest however the log likelihood of the saturated model isn't always zero when it is used with other generalized linear models so people included when talking about the log likelihood r-squared and associated p-value so that it'll work in other situations but don't worry we'll talk about these topics in a stat quest on the saturated model and deviance statistics hooray we've made it to the

topics in a stat quest on the saturated model and deviance statistics hooray we've made it to the end of another exciting stat quest if you liked this static quest and want to see more please subscribe and if you want to support stack quest well please click the like button below and consider buying one or two of my original songs alright until next time quest on

stack question and elevator stack quest now end of long step question a wheelbarrow stack quest is everywhere hello I'm Josh stormer and welcome to stack quest today we're gonna be talking about saturated models and deviance statistics note there's a jackhammer blasting away at concrete right across the street from me so if you hear a low rumbling noise that's not my stomach that's a jackhammer if you're watching this video chances are it is because you've already stumbled over something called

you're watching this video chances are it is because you've already stumbled over something called the saturated model you might have seen it in the context of the log likelihood based R squared formula aka McFadden's pseudo R squared or maybe you saw the saturated model in the formula for residual deviance or maybe you're just here for the song regardless in this video I'll demystify the saturated model and a related concept deviant statistics lastly I'll explain why you can ignore the

saturated model and a related concept deviant statistics lastly I'll explain why you can ignore the saturated model when you're doing logistic regression note the saturated model and deviance statistics are part of generalized linear models and are intended to be used in a wide variety of situations including but not limited to logistic regression linear models and other methods so let's dive in imagine we weighed some mice now just for the sake of this example assume that we already know the

imagine we weighed some mice now just for the sake of this example assume that we already know the standard deviation of the data that means all we need to do to fit a normal curve to the data is estimate its mean BAM here's our normal curve centered on the estimated mean value the normal curve is a model of the data we can use it instead of the original data to estimate probabilities and do statistical tests since we only had to estimate the mean for this model we can say that the model has

tests since we only had to estimate the mean for this model we can say that the model has one parameter and since a one parameter model is as simple as it gets we'll call it the null model the likelihood of the data given the null model equals 0.03 in the log likelihood of the data given the null model equals the log of 0.03 which equals negative 3.5 1 we could also create a slightly fancier model by fitting two normal curves to the data this model would have two parameters one for each mean

by fitting two normal curves to the data this model would have two parameters one for each mean that we estimated missed we're still assuming we do not have to estimate standard deviations the likelihood of the data given the fancier model equals three point five seven and the log likelihood of the data given the fancier model equals the log of three point five seven which equals one point two seven we could also create a super fancy model for our data the super fancy model has one parameter

seven we could also create a super fancy model for our data the super fancy model has one parameter per data point the super fancy model is called the saturated model because it maxes out the number of parameters we can estimate the likelihood of the data given the saturated model equals 1291 point five in the log likelihood of the data given the saturated model is the log of 1291 point five which equals seven point one six so far we've looked at the likelihood of the data using three different

equals seven point one six so far we've looked at the likelihood of the data using three different models we looked at the likelihood of the data given the null model which has only one parameter we looked at the likelihood of the data given a model with two parameters let's call this the proposed model imagine it's the one were really interested in using and we looked at the likelihood of the data given the saturated model which has one parameter per data point by calculating the likelihood of

given the saturated model which has one parameter per data point by calculating the likelihood of the null model we have a sense of the worst case scenario and by calculating the likelihood of the saturated model we have a sense of the best-case scenario the likelihood of the saturated model is as high as it can be ideally we want the likelihood of the data given our proposed model to be larger than the null model and close to the saturated model when using likelihoods we use the null and

than the null model and close to the saturated model when using likelihoods we use the null and saturated models to determine whether the proposed model does a good job with the data in other words we use the null and saturated models to calculate R squared and its p-value for the proposed model let's start by explaining the role that the saturated model plays in the log-likelihood paste r-squared but before we get started let me review one concept from the normal r-squared the one from linear

but before we get started let me review one concept from the normal r-squared the one from linear regression calculated with the sums of squares of the residuals with the normal r-squared this sums of squares for the null model determines the boundary for a bad fit and when the model fits the data perfectly the residuals are all 0 in the sums of squares for the proposed model equals 0 in other words there is a fixed value 0 that represents a boundary for the best a model can do and when we plug

there is a fixed value 0 that represents a boundary for the best a model can do and when we plug in 0 we get R squared equals 1 to summarize the normal r-squared has a boundary for how poorly a model can perform the sums of squares for the null model and a fixed value zero that represents the best possible model now let's go back to talking about the log likelihood based R squared just like before the null model provides a boundary for how poor a model can perform however unlike the traditional

the null model provides a boundary for how poor a model can perform however unlike the traditional R squared there is no fixed value for an ideal fit that works in every situation and that's where the saturated model comes in the saturated model provides an upper bound for what an ideal fit is thus if the proposed model is just as good as the saturated model then the log-likelihood of the proposed model will equal the log likelihood of the saturated model and that makes the numerator the same

model will equal the log likelihood of the saturated model and that makes the numerator the same as the denominator and r-squared equals one BAM but not a big BAM just a little BAM for now to see the problem that the saturated model solves in action let's see what happens when we exclude it from the equation and plug in the log likelihood values that we've calculated so far first we plug in the log likelihood for the null model that's negative three point five one then we plug in the log

the log likelihood for the null model that's negative three point five one then we plug in the log likelihood for the proposed model that equals one point two seven now just do the math when we leave out the saturated model the r-squared equals one point three six whoa our squared is only supposed to go from zero to one we must be missing a scaling factor now let's redo the calculation but this time let's plug in the value for the log likelihood of the saturated model the other values are the

time let's plug in the value for the log likelihood of the saturated model the other values are the same as before and now we just do the math this time we got 0.45 a reasonable value that is between 0 & 1 this deserves a big Bam Bam in summary the log-likelihood of the saturated model ensures that the r-squared value ranges between zero and one now let's talk about deviance a concept related to the saturated model that will ultimately lead us to a p-value for the r-squared we're going to talk

the saturated model that will ultimately lead us to a p-value for the r-squared we're going to talk about two types of deviants residual deviance and null deviance residual deviance is defined as two times the difference between the log-likelihood of the saturated model and the log-likelihood of the proposed model the two times part makes the difference in these log likelihoods have a chi-squared distribution with degrees freedom equal to the difference in the number of parameters in this case

distribution with degrees freedom equal to the difference in the number of parameters in this case the degrees of freedom is for the number of parameters in the saturated model 6 - the number of parameters in the proposed model - to see the residual deviance in action let's plug in the numbers boo-boo-boo-boo-boo PPP boo now we just do the math and we get eleven point seven eight here's a chi-square distribution with four degrees of freedom and here's where the residual deviance 11.7 8 is on

distribution with four degrees of freedom and here's where the residual deviance 11.7 8 is on the x-axis in the area under the curve from eleven point seven eight to infinity is zero point zero two so the p value equals zero point zero two and this means that the saturated model is significantly different from the proposed model to be honest I'm not a huge fan of this statistic in and of itself but it is very common and as we'll see in a bit can be used as a stepping stone for calculating the

but it is very common and as we'll see in a bit can be used as a stepping stone for calculating the p-value for r-squared note for this chi-square test to work correctly the proposed model and the saturated model have to be nested in other words the proposed model has to be a simpler version of the saturated model and not just any old model now let's talk about the null deviance the null deviance is defined as two times the difference between the log-likelihood of the saturated model and the

is defined as two times the difference between the log-likelihood of the saturated model and the log-likelihood of the null model again the two times part makes the difference in these log likelihoods have a chi-squared distribution with degrees freedom equal to the difference in the number of parameters in this case the degrees of freedom is 5 the number of parameters in the saturated model 6 minus the number of parameters in the null model 1 to see the null deviance in action let's plug in

minus the number of parameters in the null model 1 to see the null deviance in action let's plug in the numbers bbb-big boo boo boo boo boo boo now we just do the math and that gives us a value of 21 point 3 4 here's a chi-square distribution with 5 degrees of freedom and here's where the null deviance 21 point 3 4 is on the x-axis in the area under the curve from 21 point 3 4 to infinity is close to 0 so the p value equals close to 0 thus the null unsaturated models are significantly different

to 0 so the p value equals close to 0 thus the null unsaturated models are significantly different just like for the residual deviance I'm not a huge fan of this statistic in and of itself however it's very common and you can calculate the p-value for the log-likelihood r-squared from the difference in the deviances this difference is a chi-square value with degrees freedom equal to the difference in the number of parameters for the proposed model in the null model in this case the degrees of

in the number of parameters for the proposed model in the null model in this case the degrees of freedom is 1 the number of parameters in the proposed model 2 - the number of parameters in the null model 1 plugging in the values for the null and residual deviances gives us Oh baby baby baby boo boo boo boo nine point five six here's a chi-square distribution with one degree of freedom and here's where nine point five six is on the x-axis in the area under the curve from nine point five six to

where nine point five six is on the x-axis in the area under the curve from nine point five six to infinity is zero point zero zero two thus the p-value for the log-likelihood r-squared value we calculated before is zero point zero zero two this means that not only does our model have a reasonable effect size the r-squared value we know that that value is not by chance double bam note there is more than one way to calculate the chi-squared value for the r-squared alternatively we can calculate

than one way to calculate the chi-squared value for the r-squared alternatively we can calculate the significance of the r-squared directly by comparing the proposed model to the null model since the null model is nested within the proposed model the formula is simply two times the difference between the log-likelihood of the proposed model and the log-likelihood of the null model again the two times part makes the difference in these log likelihoods have a chi-squared distribution with degrees

part makes the difference in these log likelihoods have a chi-squared distribution with degrees freedom equal to the difference in the number of parameters however I mentioned the method that uses deviances because the null and residual deviances are very frequently reported in contrast the log-likelihood of the proposed model and the log-likelihood of the null model are not always reported little Bingham okay we talked about the saturated model residual deviance and null deviance now let's

Bingham okay we talked about the saturated model residual deviance and null deviance now let's talk about why you can ignore the saturated model entirely when you do logistic regression when you do logistic regression you're fitting a squiggle to your data and calculating the log likelihood of the data given that squiggle however with the saturated model the squiggle fits the data perfectly in the log likelihood of the data is zero because the log of one equals zero so the log likelihood is

the log likelihood of the data is zero because the log of one equals zero so the log likelihood is just a big sum of zeroes this means that the equation for the likelihood based R squared is this which boils down to this simpler equation similarly the equations for residual deviance and null deviance reduced to just two times the negative log likelihoods of the proposed model and the null model note these deviances will ultimately be positive numbers because the likelihoods will be numbers

note these deviances will ultimately be positive numbers because the likelihoods will be numbers between 0 & 1 and the log of a number between 0 & 1 is a negative number and multiplying a negative number by negative 1 results in a positive number double BAM in summary we talked about how the saturated model provides an upper bound on the log-likelihood for a model and that upper bound is useful for calculating a likelihood based r-squared however with logistic regression the upper bound is

for calculating a likelihood based r-squared however with logistic regression the upper bound is always going to be zero so we can ignore it we also talked about how residual and null deviance can be used to calculate the p-value for a likelihood based r-squared the difference between the null deviance and the residual deviance equals a chi-squared value with degrees of freedom equal to the number of parameters in the proposed model minus the number of parameters in the null model hooray we've

of parameters in the proposed model minus the number of parameters in the null model hooray we've made it to the end of another exciting step quest if you like this stat quest and want to see more of them please subscribe and if you want to support stat quest please click the like button below who consider buying one or two of my original songs alright until next time quest on

step quest gettin freaky step quest kind of sneaky step quests hello I'm Josh Starla and welcome to stat quest today at long last we're gonna cover logistic regression in our note a link to the code which is chock full of comments and should be easy to follow is in the description below for this example we're going to get a real data set from the UCI machine learning repository specifically we want the heart disease data set note this is the same data set we used when we made random forests in

the heart disease data set note this is the same data set we used when we made random forests in our if you're familiar with that data you can skip ahead to about 3 minutes and 44 seconds in this video we start by making a variable called URL and set it to the location of the data we want this is how we read the data set into our from the URL the head function shows us the first six rows of data unfortunately none of the columns are labeled wah-wah so we named the columns after the names that

unfortunately none of the columns are labeled wah-wah so we named the columns after the names that were listed on the UCI website hooray now when we look at the first six rows with the head function things look a lot better however the stirrer function which describes the structure of the data tell us that some of the columns are messed up right now sex is a number but it's supposed to be a factor where zero represents female and one represents male CP aka chest pain is also supposed to be a

where zero represents female and one represents male CP aka chest pain is also supposed to be a factor where levels 1 through 3 represent different types of pain and 4 represents no chest pain CA and Thal are correctly called factors but one of the levels is question mark when we need it to be in a so we've got some cleaning up to do the first thing we do is change the question marks to n A's then just to make the data easier on the eyes we convert the zeros in sex to F for female and the ones

just to make the data easier on the eyes we convert the zeros in sex to F for female and the ones to M for male lastly we convert the column into a factor then we convert a bunch of other columns into factors since that's what they're supposed to be see the UCI website or the sample code on the stat quest blog for more details since the CA column originally had a question mark in it rather than in a are thinks it's a column of strings we correct that assumption by telling our that it's a column

a are thinks it's a column of strings we correct that assumption by telling our that it's a column of integers and then we convert it to a factor then we do the same thing for Thal the last thing we need to do to the data is make HD aka heart disease a factor that is easy on the eyes here I'm using a fancy trick with the if-else function to convert the zeros to healthy and the ones to unhealthy we could have done a similar trick for sex but I wanted to show you both ways to convert numbers to

we could have done a similar trick for sex but I wanted to show you both ways to convert numbers to words once we're done fixing up the data we check that we have made the appropriate changes with the stir function hooray it worked now we see how many samples rows of data have na values later we will decide if we can just toss these samples out or if we should impute values for the NA s6 samples rows of data have n A's in them we can view the samples within a z' by selecting those rows from the

of data have n A's in them we can view the samples within a z' by selecting those rows from the data frame and there they are here are the NA values five of the six samples are male and two of the six have heart disease if we wanted to we can impute values for the NA s using a random forest or some other method however for this example we'll just remove these samples including the six samples within A's there are three hundred three samples then we remove the six samples that have n A's and

within A's there are three hundred three samples then we remove the six samples that have n A's and after removing those samples there are two hundred ninety seven samples remaining Scapa now we need to make sure that healthy and diseased samples come from each gender female and male if only male samples have heart disease we should probably remove all females from the model we do this with the X tabs function we pass X tabs the data and use model syntax to select the columns in the data we

X tabs function we pass X tabs the data and use model syntax to select the columns in the data we want to build a table from in this case we want a table with heart disease and sex and bam healthy and unhealthy patients are both represented by a lot of female and male samples now let's verify that all four levels of chest pain CP for short were reported by a bunch of patients yes and then we do the same thing for all of the boolean and categorical variables that we are using to predict heart

the same thing for all of the boolean and categorical variables that we are using to predict heart disease here's something that could cause trouble for the resting electrocardiographic results only for patients represent level 1 this could potentially get in the way of finding the best fitting line however for now we'll just leave it in and see what happens and then we just keep looking at the remaining variables to make sure that they're all represented by a number of patients okay we've done

variables to make sure that they're all represented by a number of patients okay we've done all the boring stuff now let's do logistic regression let's start with a super simple model we'll try to predict heart disease using only the gender of each patient here's our call to the GLM function the function that performs generalized linear models first we use formula syntax to specify that we want to use sex to predict heart disease then we specify the data that we are using for the model lastly

to use sex to predict heart disease then we specify the data that we are using for the model lastly we specify that we want the binomial family of generalized linear models this makes the GLM function do logistic regression as opposed to some other type of generalized linear model oh I almost forgot to mention that we are storing the output from the GLM function in a variable called logistic we then use the summary function to get details about the logistic regression BAM [Music] the first line

use the summary function to get details about the logistic regression BAM [Music] the first line has the original call to the GLM function then it gives you a summary of the deviance residuals they look good since they are close to being centered on zero and are roughly symmetrical if you want to know more about deviance residuals check out the stat quest deviance residuals clearly explained then we have the coefficients they correspond to the following model heart disease equals negative one

we have the coefficients they correspond to the following model heart disease equals negative one point zero four three eight plus one point two seven three seven times the patient is male the variable the patient is male is equal to zero when the patient is female and one when the patient is male thus if we are predicting heart disease for our female patient we get the following equation heart disease equals negative one point zero four three eight plus one point two seven three seven times

disease equals negative one point zero four three eight plus one point two seven three seven times zero this reduces to heart disease equals negative one point zero four three eight thus the log odds that a female has heart disease equals negative one point zero four three eight if we were predicting heart disease for a male patient we get the following equation heart disease equals negative one point zero four three eight plus one point two seven three seven times one and that reduces to heart

zero four three eight plus one point two seven three seven times one and that reduces to heart disease equals negative one point zero four three eight plus one point two seven three seven since this first term is the log odds of a female having heart disease the second term indicates the increase in the log of the odds that a male has of having heart disease in other words the second term is the log of the odds ratio of the odds that a male will have heart disease over the odds that a female

log of the odds ratio of the odds that a male will have heart disease over the odds that a female will have heart disease this part of the logistic regression output shows how the Wald's was computed for both coefficients and here are the P values both P values are well below 0.05 and thus the log of the odds and the log of the odds ratios are both statistically significant but remember a small p value alone isn't interesting we also want large effect sizes and that's what the log of the odds

p value alone isn't interesting we also want large effect sizes and that's what the log of the odds and the log of the odds ratio tells us if you want to know more details on the coefficients and the Wold test check out the following stat quests odds and the log odds clearly explained odds ratios and log odds ratios clearly explained in logistic regression details part 1 coefficients next we see the default dispersion parameter used for this logistic regression when we do normal linear

we see the default dispersion parameter used for this logistic regression when we do normal linear regression we estimate both the mean and the variance from the data in contrast with logistic regression we estimate the mean of the data in the variance is derived from the mean since we are not estimating the variance from the data and instead just deriving it from the mean it is possible that the variance is underestimated if so you can adjust the dispersion parameter in the summary command

the variance is underestimated if so you can adjust the dispersion parameter in the summary command then we have the null deviance and the residual deviance these can be used to compare models compute R squared in an overall p value for more details check out the stat quests logistic regression details part 3 R squared and its p-value in saturated models and deviance statistics clearly explained then we have the AIC the Chi key information criterion which in this context is just the residual

then we have the AIC the Chi key information criterion which in this context is just the residual deviance adjusted for the number of parameters in the model the AIC can be used to compare one model to another lastly we have the number of Fisher scoring iterations which just tells us how quickly the GLM function converged on the maximum likelihood estimates for the coefficients if you want more details on how the coefficients were estimated check out the stat quest logistic regression details

details on how the coefficients were estimated check out the stat quest logistic regression details part two fitting a line with maximum likelihood double bam now that we've done a simple logistic regression using just one of the variables sects to predict heart disease we can create a fancy model that uses all of the variables to predict heart disease this formula syntax HD tilde dot means that we want to model heart disease HD using all of the remaining variables in our data frame called data

want to model heart disease HD using all of the remaining variables in our data frame called data we can then see what our model looks like with the summary function dang the summary goes off the screen no worries we'll just talk about a few of the coefficients we see that age isn't a useful predictor because it has a large p-value however the median age in our dataset was 56 so most of the folks were pretty old and that explains why it wasn't very useful gender is still a good predictor though

were pretty old and that explains why it wasn't very useful gender is still a good predictor though if we scroll down to the bottom of the output we see that the residual deviance and the AIC are both much smaller for this fancy model than they work for the simple model when we only use gender to predict heart disease if we want to calculate McFadden's pseudo r-squared we can pull the log likelihood of the null model out of the logistic variable by getting the value for the null deviance and

of the null model out of the logistic variable by getting the value for the null deviance and dividing by negative two and we can pull the log-likelihood for the fancy model out of the logistic variable by getting the value for the residual deviance and dividing by negative 2 then we just do the math and we end up with a pseudo R squared equals 0.55 this can be interpreted as the overall effect size and we can use those same log likelihoods to calculate a p-value for that r-squared using a

size and we can use those same log likelihoods to calculate a p-value for that r-squared using a chi-squared distribution in this case the p-value is tiny so the r-squared value isn't due to dumb luck one last shameless self-promotion more details on the r-squared and p-value can be found in the following stat quest logistic regression details part 3 R squared and it's p-value lastly we can draw a graph that shows the predicted probabilities that each patient has heart disease along with their

a graph that shows the predicted probabilities that each patient has heart disease along with their actual heart disease status I'll show you the code in a bit most of the patients with heart disease the ones in turquoise are predicted to have a high probability of having heart disease and most of the patients without heart disease the ones in salmon are predicted to have a low probability of having heart disease thus our logistic regression has done a pretty good job however we could use

having heart disease thus our logistic regression has done a pretty good job however we could use cross-validation to get a better idea of how well it might perform with new data but we'll save that for another day to draw the graph we start by creating a new data frame that contains the probabilities of having heart disease along with the actual heart disease status then we sort the data frame from low probabilities to high probabilities then we add a new column to the data frame that has the

low probabilities to high probabilities then we add a new column to the data frame that has the rank of each sample from low probability to high probability then we load the ggplot2 library so we can draw a fancy graph then we load the Cal plot library so that ggplot has nice-looking to false then we call GG plot and use G on point to draw the data and lastly we call GG Save to save the graph as a PDF file triple bam hooray we've made it to the end of another exciting stat quest if you like

as a PDF file triple bam hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you want to support stat quest well please click the like button below and consider buying one or two of my original songs alright until next time quest on

if I was a cat I'd be sleeping on the couch but I'm not a cat so I'm watching stat quest stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about deviance residuals and they're gonna be clearly explained this stat quest follows up on the stat quest on saturated models and deviant statistics so watch that video first if you're not familiar with those topics we already know that the residual deviance is defined as two times the difference between the log

we already know that the residual deviance is defined as two times the difference between the log likelihood of the saturated model and the log likelihood of the proposed model let's start by reviewing how the residual deviance is calculated the likelihood of the data given the saturated model is equal to the likelihood of the first data point times the likelihood of the second data point times the likelihood of the third data point note we're just using three data points in this example

the likelihood of the third data point note we're just using three data points in this example however if you've got more data you just keep adding them to the multiplication and the log likelihood is just duh the log of the likelihood and that's what we plug in to the first part of the equation the likelihood of the data given the proposed model equals the likelihood of the first data point times the likelihood of the second data point times the likelihood of the third data point then we just

the likelihood of the second data point times the likelihood of the third data point then we just take the log of the likelihood and plug that into the last part of the equation putting the log likelihoods together gives us the difference in the likelihoods these terms represent the difference in likelihood between the saturated and proposed model for the first data point these terms represent the difference for the second data point and these terms represent the difference for the third data

difference for the second data point and these terms represent the difference for the third data point we can rearrange the equation for residual deviance to reflect the difference in likelihoods for the individual data points again the first term represents the difference for the first data point the second term represents the difference for the second data point and the third term represents the difference for the third data point deviance residuals are just the square roots of the individual

difference for the third data point deviance residuals are just the square roots of the individual terms in other words the deviance residuals represent the square root of the contribution that each data point has to the overall residual deviance the first deviance residual represents the square root of the difference in log likelihoods for the first data point the second deviance residual represents the square root of the difference and log likelihoods for the second data point this last

the square root of the difference and log likelihoods for the second data point this last deviance residual represents the square root of the difference in log likelihoods for the third data point if we then Square the individual deviance residuals and then add them up we will end up with the residual deviance thus the deviance residuals are analogous to the residuals in ordinary least squares when we square these residuals we get the sums of squares that we use to assess how well the model

when we square these residuals we get the sums of squares that we use to assess how well the model fits the data similarly when we square the deviance residuals we get the residual deviance that we use to assess how well a model fits the data BAM [Music] when doing logistic regression the equation for deviance residuals can be rewritten to be based on the distances between the data and the best fitting line the blue deviance residuals calculated with the blue distances are positive because they

line the blue deviance residuals calculated with the blue distances are positive because they are above the squiggly line and the deviance residuals calculated with the red distances are negative because they are below the squiggly line making the residuals above the squiggle positive and the residuals below the squiggle negative helps us identify outliers if you plot them on an XY graph they should be centered and relatively close to zero here's the first deviance residual it's close to zero

be centered and relatively close to zero here's the first deviance residual it's close to zero because the squiggly line is very close to it here's the second deviance residual it's a lot further from zero since the squiggly line doesn't fit it well here's the third deviance residual here's the fourth deviance residual here's the fifth deviance residual and here's the last deviance residual the second and fifth deviance residuals are relatively far from zero and maybe outliers we should make

second and fifth deviance residuals are relatively far from zero and maybe outliers we should make sure we didn't make a mistake when we originally labeled them double bail in summary deviance residuals represent the square root of the contribution that each data point has to the overall residual deviance and we use them to identify outliers hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support

quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest well please click the like button below and consider buying one or two of my original songs alright until next time quest on

regularization it's just another way to save desensitization let's check it out with a new regression stat quest hello I'm Josh stormer and welcome to stat quest today we're going to do part 1 of a series of video on regularization techniques in this video we're gonna cover Ridge regression and it's going to be clearly explained note this stat cuesta seems you understand the concepts of bias and variance in the context of machine learning if not check out machine learning fundamentals bias and

variance in the context of machine learning if not check out machine learning fundamentals bias and variance it also assumes that you are familiar with linear models if not check out the following stat quests the links are in the description below lastly if you're not already familiar with the concept of cross-validation check out the stack west on cross-validation in this stack quest we will one look at a simple example that shows the main ideas behind Ridge regression to go into details about

look at a simple example that shows the main ideas behind Ridge regression to go into details about how Ridge regression works three show how Ridge regression works in a variety of situations and four lastly we'll talk about how Ridge regression can solve the unsolvable BAM let's start by collecting weight and size measurements from a bunch of mice since these data look relatively linear we will use linear regression aka least squares to model the relationship between weight and size so we'll

use linear regression aka least squares to model the relationship between weight and size so we'll fit a line to the data using least squares in other words we find the line that results in the minimum sum of squared residuals ultimately we end up with this equation for the line the line has two parameters a y-axis intercept and a slope we can plug in a value for weight for example two point five and do the math and get a value for size together the value for weight two point five and the value

and do the math and get a value for size together the value for weight two point five and the value for size two point eight give us a point on the line when we have a lot of measurements we can be fairly confident that the least squares line accurately reflects the relationship between size and weight but what if we only have two measurements we fit a new line with least squares since the new line overlaps the two data points the minimum sum of squared residuals equals zero ultimately we end

overlaps the two data points the minimum sum of squared residuals equals zero ultimately we end up with this equation for the new line note here are the original data in the original line for comparison let's call the two red dots the training data in the remaining green dots that testing data the sum of the squared residuals for just the two red points the training data is small in this case it is zero but the sum of the squared residuals for the green points the testing data is large and that

zero but the sum of the squared residuals for the green points the testing data is large and that means that the new line has high variance in machine learning lingo we'd say that the new line is over fit to the training data now let's go back to just the training data we just saw that least squares results in a line that is over fit and has high variance the main idea behind Ridge regression is to find a new line that doesn't fit the training data as well in other words we introduce a small

to find a new line that doesn't fit the training data as well in other words we introduce a small amount of bias into how the new line is fit to the data but in return for that small amount of bias we get a significant drop in variance in other words by starting with a slightly worse fit Ridge regression can provide better long-term predictions BAM now let's dive into the nitty-gritty and learn how Ridge regression works let's go back to just the training data when least-squares determines

how Ridge regression works let's go back to just the training data when least-squares determines values for the parameters in this equation it minimizes the sum of the squared residuals in contrast when Ridge regression determines the values for the parameters in this equation it minimizes the sum of the squared residuals plus lambda times the slope squared note I usually try to avoid using Greek characters as much as possible but if you are ever going to do Ridge regression in practice you

characters as much as possible but if you are ever going to do Ridge regression in practice you have to know that this term is called lambda this part of the equation adds a penalty to the traditional least squares method and lambda determines how severe that penalty is to get a better idea of what's going on let's plug in some numbers let's start by plugging in the numbers that correspond to the least squares fit the sum of the squared residuals for the least squares fit is zero because the

least squares fit the sum of the squared residuals for the least squares fit is zero because the line overlaps the data points and the slope is one point three we'll talk more about lambda later but for now let lambda equal one all together we have zero plus one times one point three squared and when we do the math we get one point six nine now let's see what happens when we plug in numbers for the ridge regression line the sum of the squared residuals is zero point three squared for this

for the ridge regression line the sum of the squared residuals is zero point three squared for this residual plus zero point one squared for this residual the slope is 0.8 and just like before we'll let lambda equal 1 altogether we have 0.3 squared plus 0.1 squared plus 1 times 0.8 squared and when we do the math we get 0.7 for for the least squares line the sum of squared residuals plus the ridge regression penalty is one point six nine for the ridge regression line the sum of squared

the ridge regression penalty is one point six nine for the ridge regression line the sum of squared residuals plus the ridge regression penalty is 0.74 thus if we wanted to minimize the sum of the squared residuals plus the ridge regression penalty we would choose the ridge regression line over the least squares line without the small amount of bias that the penalty creates the least squares fit has a large amount of variance in contrast the ridge regression line which has a small amount of

has a large amount of variance in contrast the ridge regression line which has a small amount of bias due to the penalty has less variance now before we talk about lambda let's talk a little bit more about the effect that the ridge regression penalty has on how the line is fit to the data to keep things simple imagine we only have one line this line suggests that for every one unit increase in weight there is a one unit increase in predicted size if the slope of the line is steeper than for

weight there is a one unit increase in predicted size if the slope of the line is steeper than for every one unit increase in weight the prediction for size increases by over two units in other words when the slope of the line is steep then the prediction for size is very sensitive to relatively small changes in weight when the slope is small then for every one unit increase in weight the prediction for size barely increases in other words when the slope of the line is small then predictions

for size barely increases in other words when the slope of the line is small then predictions for size are much less sensitive to changes in weight now let's go back to the least squares and Ridge regression lines fit to the two data points the ridge regression penalty resulted in a line that has a smaller slope which means that predictions made with the ridge regression line are less sensitive to weight than the least squares line BAM now let's go back to the equation that Ridge regression

to weight than the least squares line BAM now let's go back to the equation that Ridge regression tries to minimize and talk about lambda lambda can be any value from 0 to positive infinity when lambda equals zero then the ridge regression penalty is also zero and that means that the ridge regression line will only minimize the sum of squared residuals and the ridge regression line will be the same as the least squares line because they are both minimizing the exact same thing now let's see

same as the least squares line because they are both minimizing the exact same thing now let's see what happens as we increase the value for lambda in the example we just looked at we said lambda equals 1 and the ridge regression line ended up with a smaller slope than the least squares line when we set lambda equals 2 the slope gets even smaller and when we set lambda equals 3 the slope is even smaller and the larger we make lambda the slope gets asymptotically close to 0 so the larger lambda

smaller and the larger we make lambda the slope gets asymptotically close to 0 so the larger lambda gets our prediction for size become less and less sensitive to weight so how do we decide what value to give lambda we just try a bunch of values for lambda and use cross-validation typically 10-fold cross-validation to determine which one results in the lowest variance double bail in the previous example we showed how ridge regression would work when we want to predict size which is a continuous

we showed how ridge regression would work when we want to predict size which is a continuous variable using weight which is also a continuous variable however Ridge regression also works when we use a discrete variable like normal diet versus high fat diet to predict size in this case the data might look like this in the least squares fitted equation might look like this where 1.5 the equivalent of a y-intercept corresponds to the average size of the mice on the normal diet and 0.7 the

of a y-intercept corresponds to the average size of the mice on the normal diet and 0.7 the equivalent of a slope corresponds to the difference between the average size for the mice on the normal diet compared to the mice on the high-fat diet note from here on out we'll refer to this distance as diet difference high-fat diet is either zero for mice on a normal diet or one for mice on the high-fat diet in other words this term alone predicts the size of mice on the normal diet in the sum of

diet in other words this term alone predicts the size of mice on the normal diet in the sum of these two terms is the prediction for the size of mice on the high-fat diet for the mice on the normal diet the residuals are the distances between the mice and the normal diet mean and for mice on the high-fat diet the residuals are the distances between the mice and the high fat diet mean when Lee squares determines the values for the parameters in this equation it minimizes the sum of the squared

determines the values for the parameters in this equation it minimizes the sum of the squared residuals in other words these distances between the data and the means are minimized when Ridge regression determines values for the parameters in this equation it minimizes the sum of the squared residuals plus lambda times diet difference squared remember diet difference simply refers to the distance between the mice on the normal diet and the mice on the high-fat diet when lambda equals zero this

between the mice on the normal diet and the mice on the high-fat diet when lambda equals zero this whole term ends up being zero and we get the same equation that we got with least squares but when lambda gets large the only way to minimize the whole equation is to shrink diet distance down in other words as lambda gets larger our prediction for the size of mice on the high-fat diet becomes less sensitive to the difference between the normal diet and the high-fat diet and remember the whole

sensitive to the difference between the normal diet and the high-fat diet and remember the whole point of doing rich regression is because small sample sizes like these can lead to poor least squares estimates that result in terrible machine learning predictions BAM Ridge regression can also be applied to logistic regression in this example we are using weight to predict if a mouse's obese or not this is the equation for this logistic regression and Ridge regression would shrink the estimate

this is the equation for this logistic regression and Ridge regression would shrink the estimate for the slope making our prediction about whether and out of mouse is obese less sensitive to weight note when applied to logistic regression Ridge regression optimizes the sum of the likelihoods instead of the squared residuals because logistic regression is solved using maximum likelihood so far we've seen simple examples of how Ridge regression helps reduce variance by shrinking parameters and

seen simple examples of how Ridge regression helps reduce variance by shrinking parameters and making our predictions less sensitive to them but we can apply Ridge regression to complicated models as well in this model we've combined the weight measurement data from the first example with the two diets from the second example combining these two datasets gives us this equation and Ridge regression tries to minimize this now the ridge regression penalty contains the parameters for the slope and

tries to minimize this now the ridge regression penalty contains the parameters for the slope and the difference between diets in general the ridge regression penalty contains all of the parameters except for the y intercept if we had a big huge crazy equation with terms for astrological sign the airspeed of a swallow and other stuff then the ridge regression penalty would have all those parameters squared except for the y intercept every parameter except for the y intercept is scaled by the

squared except for the y intercept every parameter except for the y intercept is scaled by the measurements and that's why the y intercept is not included in the ridge regression penalty double bam okay now the next thing we're going to talk about is going to sound totally random but trust me it will lead to the coolest thing about Ridge regression it's so cool it's almost like magic we all know that this is the equation for a line in an order for least squares to solve for the parameters the

that this is the equation for a line in an order for least squares to solve for the parameters the y-intercept and slope we need at least two data points these data points result in these parameters in this specific line if we only have one data point then we wouldn't be able to solve for these parameters because there would be no way to tell if this line is better than this line or this line or any old line that goes through the one data point all of these lines have zero residuals and thus

any old line that goes through the one data point all of these lines have zero residuals and thus all minimize the sum of the squared residuals it's not until we have two data points that it becomes clear that this is the least square solution now let's look at an equation that has three parameters to estimate we need to estimate a y-intercept a slope that reflects how weight contributes to the prediction of size and a slope that reflects how age contributes to the prediction of size when we

prediction of size and a slope that reflects how age contributes to the prediction of size when we have three parameters to estimate then just two data points isn't going to cut it that's because in three dimensions which is what we get when we add another access to our graph for age we have to fit a plane to the data instead of just a line and with only two data points there's no reason why this plane fits the data any better than this plane or this plane but as soon as we have three data

this plane fits the data any better than this plane or this plane but as soon as we have three data points we can solve for these parameters if we have an equation with four parameters then least squares needs at least four data points to estimate all four parameters and if we have an equation with 10,001 parameters then we need at least 10,000 and one data points to estimate all of the parameters an equation with 10,001 parameters might sound bonkers but it's more common than you might expect

an equation with 10,001 parameters might sound bonkers but it's more common than you might expect for example we might use gene expression measurements from 10,000 genes to predict size and that would mean we would need gene expression measurements from ten thousand and one mice unfortunately collecting gene expression measurements from ten thousand and one mice is crazy expensive and time-consuming right now in practice a huge data set might have measurements from 500 mice so what do we do if

right now in practice a huge data set might have measurements from 500 mice so what do we do if we have an equation with ten thousand and one parameters in only 500 data points we use Ridge regression it turns out that by adding the ridge regression penalty we can solve for all 10,000 won parameters with only 500 or even fewer samples one way to think about how Ridge regression can solve for parameters when there isn't enough data is to go back to our original size versus weight example only

when there isn't enough data is to go back to our original size versus weight example only this time there is only one data point in the training set least squares can't find a single optimal solution since any line that goes through the dot will minimize the sum of the squared residuals but Ridge regression can find a solution with cross-validation and the Ridge regression penalty that favors smaller parameter values since this stack quest is already super long we'll save a more thorough

smaller parameter values since this stack quest is already super long we'll save a more thorough discussion of how this works for a future stat quest triple bam in summary when the sample sizes are relatively small then Ridge regression can improve predictions made from new data ie reduce variance by making the predictions less sensitive to the training data this is done by adding the ridge regression penalty to the thing that must be minimized the ridge regression penalty itself is lambda

penalty to the thing that must be minimized the ridge regression penalty itself is lambda times the sum of all squared parameters except for the y-intercept and lambda is determined using cross-validation lastly even when there isn't enough data to find the least squares parameter estimates Ridge regression can still find a solution using cross-validation and the ridge regression penalty hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see

made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs alright until next time quest on

laso and ridge regression of similar but there's a big important difference we'll talk about it stat quest hello I'm Josh stormer and welcome to stat quest today we're gonna do part two of our series on regularization we're gonna talk about lasso regression and it's going to be clearly explained this stat quest follows up on the one on Ridge regression so if you aren't already familiar with that check it out even if you are familiar with Ridge regression you should seriously consider watching or

it out even if you are familiar with Ridge regression you should seriously consider watching or at least skimming that stat quest because the examples in this video are based on the ones in that video last so regression is very very similar to Ridge regression but it has some very very important differences to understand those similarities and differences let's first do a super quick review of Ridge regression in the stat quest on Ridge regression we started out with weight and size

of Ridge regression in the stat quest on Ridge regression we started out with weight and size measurements from a bunch of mice and we split the data into two sets the red dots were training data and the green dots were testing data then we fit a line to the training data using least squares in other words we minimize the sum of the squared residuals when we did this we saw that even though the line fit the training data really well that is to say it had low bias it did not fit the testing data

fit the training data really well that is to say it had low bias it did not fit the testing data very well at all that is to say it had high variance then we fit a line to the data using Ridge regression we minimized the sum of the squared residuals plus lambda times the slope squared Ridge regression is just least squares plus the ridge regression penalty the Blue Ridge regression line did not fit the training data as well as the red least squares line in other words Ridge regression had more

the training data as well as the red least squares line in other words Ridge regression had more bias than least squares but in return for that small amount of bias the ridge regression line had a significant drop in variance the main idea was that by starting with a slightly worse fit Richard rushman provided better long-term predictions BAM now let's go back to the equation that Ridge regression minimizes and focus on the ridge regression penalty if instead of squaring the slope we take the

minimizes and focus on the ridge regression penalty if instead of squaring the slope we take the absolute value then we have lasso regression note just like with Ridge regression lambda can be any value from 0 to positive infinity and is determined using cross-validation like Ridge regression lasso regression the orange line results in a line with a little bit of bias but less variance than least squares BAM reach regression and lasso regression look very similar and they do similar things in

squares BAM reach regression and lasso regression look very similar and they do similar things in this case they make our predictions of size less sensitive to this tiny training data set both Ridge and lasso regression can be applied in the same context like this situation where we are using two different diets to predict size or in a logistic regression setting where we use weight to predict obesity and both Ridge and lasso regression can be applied to complicated models that combine

obesity and both Ridge and lasso regression can be applied to complicated models that combine different types of data in this case we've combined the data from the first two examples weight which is continuous and high fat diet which is discrete just like the ridge regression penalty the lasso regression penalty contains all of the estimated parameters except for the y-intercept it's also worth mentioning that when Ridge and lasso regression shrink parameters they don't have to shrink them all

that when Ridge and lasso regression shrink parameters they don't have to shrink them all equally for example if these were the training data and these were the testing data then when lambda equals zero we would start with these least squares estimates for the slope and the offset for diet difference but as we increase the value for lambda rage and lasso regression may shrink diet difference a lot more than they shrink the slope okay we've seen how Ridge and lasso regression are similar now

lot more than they shrink the slope okay we've seen how Ridge and lasso regression are similar now let's talk about the big difference between them to see what makes lasso regression different from Ridge regression let's go back to the two-sample training data and let's focus on what happens when we increase the value for lambda when lambda equals zero then the lasso regression line will be the same as the least squares line as lambda increases in value the slope gets smaller until the slope

same as the least squares line as lambda increases in value the slope gets smaller until the slope equals zero BAM the big difference between Ridge and lasso regression is that Ridge regression can only shrink a slope asymptotically close to zero while lasso regression can shrink the slope all the way to 0 to appreciate this difference let's look at a big huge crazy equation the goal of this equation is to predict size the terms for weight and high fat diet are both reasonable things to use to

is to predict size the terms for weight and high fat diet are both reasonable things to use to predict size but the astrological sign and the airspeed of a swallow African or European are terrible ways to predict size when we apply Richard Russian to this equation we find the minimal sum of the squared residuals plus the ridge regression penalty and the larger we make lambda these parameters might shrink a little bit and these parameters might shrink a lot but they will never be equal to 0 in

shrink a little bit and these parameters might shrink a lot but they will never be equal to 0 in contrast with lasso regression when we increase the value for lambda then these parameters will shrink a little bit and these parameters will go all the way to 0 and these terms go away and we're left with a way to predict size that only includes weight and diet and excludes all of the silly stuff since lasso regression can exclude useless variables from equations it is a little better than Ridge

lasso regression can exclude useless variables from equations it is a little better than Ridge aggression at reducing the variance and models that contain a lot of useless variables in contrast Ridge regression tends to do a little better when most variables are useful double bam in summary Ridge regression is very similar to lasso regression and the superficial difference is that Ridge regression squares the variables and lasso regression takes the absolute value but the big difference is that

squares the variables and lasso regression takes the absolute value but the big difference is that Lasser aggression can exclude useless variables from equations this makes the final equation simpler and easier to interpret hooray we've made it to the end of another exciting stack quest if you like this stack quest and want to see more please subscribe and if you want to support stack quest well please consider buying one or two of my original songs alright until next time quest on

Ridge regression versus lasso regression which one will survive stat quest hello I'm Josh stormer and welcome to stat quest today we're gonna talk about rage versus lasso regression and the differences are going to be visualised note this stack quest assumes that you are already familiar with rage and lasso regression if not check out the quests to show you the difference between Ridge and lasso regression we're going to use a very simple dataset that consists of weight and height measurements

regression we're going to use a very simple dataset that consists of weight and height measurements and we'll start by fitting this horizontal line to the data this horizontal line represents a terrible fit and we can measure how bad that fit is by calculating residuals the difference between the observed and predicted values in order to compare the horizontal line to other lines fit to the data we will plot the sum of the squared residuals on a graph the y-axis on this graph is the sum of the

we will plot the sum of the squared residuals on a graph the y-axis on this graph is the sum of the squared residuals and the x-axis represents different slope values for the fitted line in this case the slope for the horizontal line is zero now let's increase the slope to zero point two and calculate a new value for the sum of the squared residuals now let's increase the slope to zero point four and calculate a new value for the sum of the squared residuals we can keep plugging in new values

and calculate a new value for the sum of the squared residuals we can keep plugging in new values for the slope and plotting the sum of the squared residuals or we can just plot the curve for this equation we can see that the best fitting line is at the bottom of the parabola in other words when the slope equals 0.45 we get the lowest sum of the squared residuals in this example we simply calculated the sum of the squared residuals for different slopes now let's add the ridge regression penalty

the sum of the squared residuals for different slopes now let's add the ridge regression penalty aka the l 2-norm note if you asked me it should be called the squared penalty since that's what it is and for me way easier to remember the thick blue line that we just drew represents lambda equals zero this is because when lambda equals zero the penalty is equal to zero regardless of the slope and we are left with the original sum of squared residuals now let's see what happens when we set lambda

are left with the original sum of squared residuals now let's see what happens when we set lambda equal to 10 and just like before we'll start with a horizontal line only this time the line is orange just like before we can calculate the residuals and we can calculate the sum of the squared residuals plus lambda times the slope squared in this case lambda equals 10 in the slope of the horizontal line is 0 so the penalty is 0 so we plot the sum of the squared residuals here now let's increase

line is 0 so the penalty is 0 so we plot the sum of the squared residuals here now let's increase the slope to 0.2 note the residuals are smaller than before so the sum of squared residuals is smaller than before but now the penalty is 0.4 and that gives us this point on the graph now let's increase the slope to 0.4 and the residuals are even smaller but now the penalty is 1.6 and that gives us this point on the graph and like we did before we can keep plugging in new values for the slope and

this point on the graph and like we did before we can keep plugging in new values for the slope and plotting the sum of the squared residuals plus the penalty or we can just plot the curve with a thick orange line that represents lambda equals 10 the bottom of the parabola is where the slope gives us the lowest sum of squared residuals plus penalty and that corresponds to this specific line and when we compare that to the optimal slope when lambda equals zero we see that setting lambda equal to

we compare that to the optimal slope when lambda equals zero we see that setting lambda equal to ten results in a smaller optimal slope note we can also see that when lambda equals ten the lowest point in the parabola is closer to zero than when lambda equals zero so either way we look at it we see that the larger value for lambda Shrunk the optimal value for the slope likewise the thick green line represents lambda equals 20 we see that the minimum value is closer to zero and the optimal slope

represents lambda equals 20 we see that the minimum value is closer to zero and the optimal slope has shrunk some more the purple lines represent lambda equals 40 and it shrinks the slope even more in other words as we increase lambda for the ridge regression penalty aka the l2 penalty aka the square penalty the optimal slope gets closer and closer to zero but it does not equal zero BAM now let's see what happens if we use the lasso penalty aka the l1 norm or if you asked me I'd call it the

see what happens if we use the lasso penalty aka the l1 norm or if you asked me I'd call it the absolute value penalty unfortunately no one asked me again the thick blue line represents lambda equals zero so there is no extra penalty this is because when we plug lambda equals zero into the equation the penalty becomes zero and we are left with the original sum of the squared residuals note just like before we'll keep track of the best fitting line plus penalty in this graph on the left the

like before we'll keep track of the best fitting line plus penalty in this graph on the left the thick orange line represents lambda equals 10 so now we are turning on the penalty and shrinking the slope note when lambda equals Tim we start to see a kink in the curve where the slope is zero the thick green line represents lambda equals 20 and this kink at zero is becoming more prominent lastly the thick purple line represents lambda equals 40 and now the kink at zero is super obvious now the

the thick purple line represents lambda equals 40 and now the kink at zero is super obvious now the lowest point in the purple curve aka the optimal slope given the absolute value penalty when lambda equals 40 is zero and that means the slope of the optimal line is zero and that means when lambda equals 40 we ignore weight as a variable when predicting height double bam in summary when we increase the Ridge regression penalty aka the l2 penalty aka the square penalty the optimal slopes shift

the Ridge regression penalty aka the l2 penalty aka the square penalty the optimal slopes shift towards zero but we retain a nice parabola shape and even when we set lambda to something crazy high like 400 we still end up with an optimal value greater than zero in contrast when we increase the lasso penalty aka the l1 penalty aka the absolute value penalty the optimal value shifts towards zero but since we have a kink at zero zero ends up being the optimal slope BAM hooray we've made it to the

since we have a kink at zero zero ends up being the optimal slope BAM hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

elastic net regression sounds so crazy fancy but it's way way simpler than you might expect stat quest hello I'm Josh Dahmer and welcome to stat quest today we're gonna do part 3 of our series on regularization we're gonna cover elastic net regression and it's going to be clearly explained this stat quest follows up on the stat quests on Ridge regression and lasso regression so if you aren't already familiar with them check them out we ended the stat quest on lasso regression by saying that it

familiar with them check them out we ended the stat quest on lasso regression by saying that it works best when your model contains a lot of useless variables so if this was the model we were using to predict size then lasso regression would keep the terms for weight and high fat diet and it would eliminate the terms for astrological sign and the airspeed of a swallow African or European creating a simpler model that is easier to interpret we also said that Ridge regression works best when most

a simpler model that is easier to interpret we also said that Ridge regression works best when most of the variables in your model are useful so if we were trying to predict size using a model where most of the variables were useful then Ridge regression will shrink the parameters but will not remove any of them great when we know a lot about all of the parameters in our model it's easy to choose if we want to use lasso regression or Ridge regression but what do we do when we have a model that

if we want to use lasso regression or Ridge regression but what do we do when we have a model that includes tons more variables last week I went to a deep learning conference and people there were using models that included millions of parameters far too many to know everything about and when you have millions of parameters then you will almost certainly need to use some sort of regularization to estimate them however the variables in those models might be useful or useless we don't know in

to estimate them however the variables in those models might be useful or useless we don't know in advance so how do you choose if you should use lasso or Ridge regression the good news is that you don't have to choose instead use elastic net regression elastic net regression sounds super fancy but if you already know about lasso and Ridge regression it's super simple just like lasso and Ridge regression elastic net regression starts with least squares then it combines the lasso regression

regression elastic net regression starts with least squares then it combines the lasso regression penalty yeehaw with the ridge regression penalty BRR altogether elastic net combines the strengths of lasso and Ridge regression note the lasso regression penalty and the ridge regression penalty get their own Landis lambda sub 1 for lasso and lambda sub 2 for Ridge we use cross-validation on different combinations of lambda sub 1 and lambda sub 2 to find the best values when both lambda sub 1 and

combinations of lambda sub 1 and lambda sub 2 to find the best values when both lambda sub 1 and lambda sub 2 equals 0 then we get the original least-squares parameter estimates when lambda sub 1 is greater than zero and lambda sub two equals zero then we get lasso regression when lambda sub 1 equals zero and lambda sub two is greater than zero then we get ridge regression and when both lambda sub 1 is greater than zero and lambda sub two is greater than zero then we get a hybrid of the two the

1 is greater than zero and lambda sub two is greater than zero then we get a hybrid of the two the hybrid elastic net regression is especially good at dealing with situations when there are correlations between parameters this is because on its own lasso regression tends to pick just one of the correlated terms and eliminate the others whereas Ridge regression tends to shrink all of the parameters for the correlated variables together by combining lasso and Ridge regression elastic net

for the correlated variables together by combining lasso and Ridge regression elastic net regression groups and shrinks the parameters associated with the correlated variables and leaves them in the equation or removes them all at once BAM in summary elastic net regression combines the lasso regression penalty yeehaw with the ridge regression penalty birth and by doing so gets the best of both worlds plus it does a better job dealing with correlated parameters hooray we've made it to the end of

plus it does a better job dealing with correlated parameters hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest well consider buying one or two of my original songs alright until next time quest on you

elastic regression won't help you to sing in tune but if you do it and ah it's not that hard stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about Ridge lasso and elastic net regression in our note this stack quest assumes you're already familiar with the concepts behind Ridge lasso in elastic net regression if not check out the quests to do Ridge lasso an elastic net regression and our we will use the GLM net library the GLM part of GLM net stands for

elastic net regression and our we will use the GLM net library the GLM part of GLM net stands for generalized linear models which means that this tool can be applied to linear regression and logistic regression as well as a few other models the net part of GLM net is from elastic net at least I'm pretty sure that's where it's from if you know otherwise put it in the comments below in the stat quest on elastic net regression we talked about how the elastic net combines the lasso regression

quest on elastic net regression we talked about how the elastic net combines the lasso regression penalty Yi how with the ridge regression penalty BER and that you can control how much either penalty is included by adjusting lambda sub 1 or lambda sub 2 however GLM net does things just a little differently instead of two different lambdas GLM net has a single lambda and another parameter called alpha alpha can be any value from zero to one when alpha equals zero then the whole lasso penalty

alpha alpha can be any value from zero to one when alpha equals zero then the whole lasso penalty goes to zero and goes away and we're left with just the ridge regression penalty and the whole thing reduces to Ridge regression burr when alpha equals 1 then the whole Ridge penalty goes to 0 and goes away and were left with just the lasso regression penalty and the whole thing reduces to lasso regression yeehaw and when alpha is between 0 & 1 we get a mixture of the two penalties that does a

regression yeehaw and when alpha is between 0 & 1 we get a mixture of the two penalties that does a better job shrinking correlated variables than either lasso or Ridge does on their own lambda controls how much of the penalty to apply to their regression when lambda equals zero then the whole penalty goes away and we're just doing standard least squares for linear regression or maximum likelihood for logistic regression and when lambda is greater than zero then the elastic net penalty kicks in

for logistic regression and when lambda is greater than zero then the elastic net penalty kicks in and we start shrinking parameter estimates thus when we use the GLM net package to do elastic net regression we will test different values for lambda and alpha now that we know how GLM networks let's do ridge lasso an elastic net regression in our note the following code is based on an example written by Josh day however the modified code that I'm about to present can be found by following the

by Josh day however the modified code that I'm about to present can be found by following the link in the description below first load the GLM netlibrary then set a seed for the random number generator so that you'll get the same results as me now let's make up a data set that we can use to test out ridge lasso and elastic net regression the made-up data set will have N equals 1,000 samples and P equals 5000 parameters to estimate however only 15 of those parameters will help us predict the

P equals 5000 parameters to estimate however only 15 of those parameters will help us predict the outcome the remaining 4985 parameters will just be random noise now we create a matrix called X that is full of randomly generated data the matrix has 1,000 rows since n equals 1000 and 5000 columns since P equals 5,000 and the values in the matrix come from a standard normal distribution with mean equals zero and standard deviation equals one and we'll need n times P or one thousand times five

equals zero and standard deviation equals one and we'll need n times P or one thousand times five thousand equals five million values since our matrix has n rows and P columns now we create a vector of values called Y that we will try to predict with the data in X this call to apply will return a vector of 1000 values that are the sums of the first 15 columns and X since X has 1000 rows this is what isolates columns 1 through 15 from X and this one specifies that we want to perform a function

what isolates columns 1 through 15 from X and this one specifies that we want to perform a function on each row of the data that we've isolated from X and some is the function we want to apply to each row to summarize this call to apply will return a vector of values that depend on the first 15 columns in X once we have that vector of Psalms we add a little bit of noise using the R norm function which in this case returns 1000 random values from a standard normal distribution so this whole

which in this case returns 1000 random values from a standard normal distribution so this whole thing creates a vector called Y that is dependent on the first 15 columns in X plus a little noise to make things interesting thus X is a matrix of data that we will use ridge lasso an elastic net regression to predict the values in y BAM now we need to divide the data into training and testing sets so we make a vector of indexes called Train underscore rows that contains the row numbers of the rows

we make a vector of indexes called Train underscore rows that contains the row numbers of the rows that will be in the training set the sample function randomly selects numbers between 1 and n the number of rows in our data set and it will select 0.66 x n row numbers in other words two-thirds of the data will be in the training set now that we have the indexes for the rows in the training set in train underscore rows we can make a new matrix X dot train that just contains the training data and

train underscore rows we can make a new matrix X dot train that just contains the training data and we can make a testing set X dot test that contains the remaining rows this is done by putting a negative sign in front of train underscore rows when we select rows from X now we select the training values in Y and save them in Y dot train and we select the testing values in Y and save them in Y dot test hooray we've created our training and testing datasets will apply Ridge lasso an elastic net

test hooray we've created our training and testing datasets will apply Ridge lasso an elastic net regression separately to these datasets so that we can see how it's done and see which method works best we'll start with Ridge regression the first thing we need to do is fit a model to the training data we do this with the CV GLM net function the CV part means we want to use cross-validation to obtain the optimal values for lambda by default CV GLM net uses 10-fold cross-validation the first two

the optimal values for lambda by default CV GLM net uses 10-fold cross-validation the first two parameters specified the training sets in this case we want to use X train to predict y train note unlike the LM or g LM functions cv g LM net does not accept formula notation x and y must be passed in separately type dot measure is how the cross-validation will be evaluated and it is set to MSE which stands for mean squared error mean squared error is just the sum of the squared residuals divided by

for mean squared error mean squared error is just the sum of the squared residuals divided by the sample size note if we are applying elastic net regression to logistic regression then we would set this to deviance since we are starting with Ridge regression we set alpha to zero lastly we set family to Gaussian this tells gl and net that we are doing linear regression note if we were doing logistic regression we would set this to binomial altogether this called a CV GL and net will fit a linear

regression we would set this to binomial altogether this called a CV GL and net will fit a linear regression with a Ridge regression penalty using 10-fold cross-validation to find optimal values for lambda in the fit model along with optimal values for lambda is saved as alpha 0 dot fit which will help us remember that we set alpha to 0 for ridge regression now we will use the predict function to apply alpha zero da fit to the testing data the first parameter is a fitted model in this case it's

apply alpha zero da fit to the testing data the first parameter is a fitted model in this case it's alpha 0 dot fit s which I think stands for size as in the size of the penalty is set to one of the optimal values for lambda stored an alpha 0 dot fit in this example we're setting s to lambda dot 1 se lambda dot 1 se is the value for lambda stored an alpha 0 dot fit that resulted in the simplest model ie the model with the fewest nonzero parameters and was within 1 standard error of the lambda

model ie the model with the fewest nonzero parameters and was within 1 standard error of the lambda that had the smallest sum note alternatively we could set s to lambda dot min which would be the lambda that resulted in the smallest sum however in this example we would use lambda dot 1 s e because in a statistical sense it is indistinguishable from lambda dot min but it results in a model with fewer parameters wait a minute I thought only last so an elastic net regression could eliminate

fewer parameters wait a minute I thought only last so an elastic net regression could eliminate parameters what's going on since we will compare Ridge to lasso and elastic net regression we will use lambda dot one se for all three cases to be consistent lastly we set new X to the testing data set X dot test and we save the predicted values as alpha 0 dot predicted now we calculate the mean squared error of the difference between the true values stored in a wideout test and the predicted values

error of the difference between the true values stored in a wideout test and the predicted values stored in alpha 0 to predicted and we get fourteen point four seven something something BAM [Music] now let's try lasso regression with the same training and testing datasets just like before we call CVG L and net to fit a linear regression using 10-fold cross-validation to determine optimal values for lambda only this time we set alpha to 1 and we will store the model and the optimal values for

for lambda only this time we set alpha to 1 and we will store the model and the optimal values for lambda in alpha one fit to remind us that we set alpha to 1 then we call the predict function just like before only this time we pass an alpha 1 dot fit and save the results as alpha 1 dot predicted then we calculate the mean squared error and we get one point one nine something something one point one nine something something is way smaller than fourteen point four seven something something so

one nine something something is way smaller than fourteen point four seven something something so Lasser regression is much better with this data than Ridge regression double bam now let's see how well elastic net regression which combines both Ridge and lasso penalties performs just like before we call CV GL and net to determine optimal values for lambda only this time we set alpha to 0.5 and we store the model and the optimal values for lambda in alpha 0.5 dot fit to remind us that we set

we store the model and the optimal values for lambda in alpha 0.5 dot fit to remind us that we set alpha to 0.5 then we call the predict function with alpha 0.5 dot fit and calculate the mean squared error and we get 1.2 for something something this is slightly larger than the 1.19 something something we got with lasso regression so so far lasso wins yeehaw but to really know if lasso wins we need to try a lot of different values for alpha to try a bunch of values for alpha we'll start by

need to try a lot of different values for alpha to try a bunch of values for alpha we'll start by making an empty list called list of fits that will store a bunch of elastic net regression fits then we use a for loop to try different values for alpha in this for loop I will be integer values from 0 to 10 first we paste together a name for the elastic net fit that we are going to create for example when I equals 0 then fit dot name will be alpha 0 because alpha will be pasted to 0 divided by 10

when I equals 0 then fit dot name will be alpha 0 because alpha will be pasted to 0 divided by 10 which equals 0 when I equals one then fit name will be alpha 0.1 because alpha will be pasted to 1/10 which equals 0.1 here's where we create the elastic net fit using the CV GLM net function everything is the same as before except where we set alpha when I equals 0 then alpha will be zero and result in Ridge regression and when I equals 1 then alpha will be 0.1 etc etc etc until I equals 10 and

in Ridge regression and when I equals 1 then alpha will be 0.1 etc etc etc until I equals 10 and alpha equals 1 resulting in lasso regression each fit will be stored in a list of fits under the name we stored in fit dot name now we are ready to calculate the mean squared errors for each fit with the testing data set we'll start by creating an empty data frame called results that will store the mean squared errors and a few other things then we'll use another for loop to predict values using the

squared errors and a few other things then we'll use another for loop to predict values using the testing data set to calculate the mean squared errors just like before the for loop goes from zero to ten and just like before we'll create a variable called fit name that contains the name of the elastic net regression fit however this time we'll use the predict function to predict values with X dot test the testing data we use the list of fits list and fit dot name to pass a specific fit to the

test the testing data we use the list of fits list and fit dot name to pass a specific fit to the predict function and to pass the lambda dot one se value for S the predicted values are stored in a variable called predicted and then used to calculate the mean squared error for the fit then we store the value for alpha the mean squared error and the name of the fit in a temporary data frame called temp and we use the our bind function to append temp to the bottom row of the results data frame

temp and we use the our bind function to append temp to the bottom row of the results data frame after we run the for-loop we can print out the results the first column has the values for alpha ranging from zero to one the second column has the mean squared errors note these are slightly different from what we got before because the parameter values prior to regularization and optimization are randomly initialized thus this is another good reason to use set seed to ensure consistent results and

initialized thus this is another good reason to use set seed to ensure consistent results and in the last column we have the name of the fit v where alpha equals 1 is still the best so Lasser regression is the best method to use with this data triple bam hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs alright until next

want to support stack quest well consider buying one or two of my original songs alright until next time quest on

StatQuest breaks it down into bite-sized pieces, hooray! Hello, I'm Josh Starmer and welcome to StatQuest. In this StatQuest we're going to go through Principal Component Analysis (PCA) one step at a time using Singular Value Decomposition (SVD). You'll learn about what PCA does, how it does it, and how to use it to get deeper insight into your data. Let's start with a simple data set. We've measured the transcription of two genes, Gene 1 and Gene 2, in 6 different mice. Note: If you're not into

the transcription of two genes, Gene 1 and Gene 2, in 6 different mice. Note: If you're not into mice and genes, think of the mice as individual samples and the genes as variables that we measure for each sample. For example, the samples could be students in high school and the variables could be test scores in math and reading, or the samples could be businesses and the variables could be market capitalization and the number of employees. Okay, now we're back to mice and genes, because I'm a

capitalization and the number of employees. Okay, now we're back to mice and genes, because I'm a geneticist and I work in a genetics department. If we only measure one gene we can plot the data on a number line. Mice 1, 2, and 3 have relatively high values and mice 4, 5, and 6 have relatively low values. Even though it's a simple graph, it shows us that mice 1, 2, and 3 are more similar to each other than they are to mice 4, 5, and 6. If we measured 2 genes, then we can plot the data on a

other than they are to mice 4, 5, and 6. If we measured 2 genes, then we can plot the data on a two-dimensional X-Y graph. Gene 1 is the x-axis and spans one of the two dimensions in this graph. Gene 2 is the y-axis and spans the other dimension. We can see that mice 1, 2, and 3 cluster on the right side and mice 4, 5, and 6 cluster on the lower left hand side. If we measured three genes, we would add another axis to the graph and make it look 3D, i.e. 3-dimensional. The smaller dots have

would add another axis to the graph and make it look 3D, i.e. 3-dimensional. The smaller dots have larger values for Gene 3 and are further away. The larger dots have smaller values for Gene 3 and are closer. If we measured 4 genes, however, we can no longer plot the data. 4  genes require 4 dimensions.  So we're going to talk about how PCA can take 4 or more gene measurements, and thus 4 or more dimensions of data, and make a 2-dimensional PCA plot. This plot will show us that similar mice

dimensions of data, and make a 2-dimensional PCA plot. This plot will show us that similar mice cluster together. We'll also talk about how PCA can tell us which gene, or variable, is the most valuable for clustering the data. For example PCA might tell us that Gene 3 is responsible for separating samples along the x-axis. Lastly, we'll talk about how PCA can tell us how accurate the 2D graph is. To understand what PCA does and how it works, let's go back to the data set that only had 2 genes.

To understand what PCA does and how it works, let's go back to the data set that only had 2 genes. We'll start by plotting the data. Then we'll calculate the average measurement for Gene 1, and the average measurement for Gene 2. With the average values, we can calculate the center of the data. From this point on, we'll focus on what happens in the graph -  we no longer need the original data. Now, we'll shift the data so that the center is on top of the origin in the graph. Note: Shifting the

we'll shift the data so that the center is on top of the origin in the graph. Note: Shifting the data did not change how the data points are positioned relative to each other. This point is still the highest one, and this is still the rightmost point, etc. Now that the data are centered on the origin, we can try to fit a line to it. To do this, we start by drawing a random line that goes through the origin. Then we rotate the line until it fits the data as well as it can, given that it has to

the origin. Then we rotate the line until it fits the data as well as it can, given that it has to go through the origin. Ultimately, this line fits best. But I'm getting ahead of myself, first we need to talk about how PCA decides if a fit is good or not. So, let's go back to the original random line that goes through the origin. To quantify how good this line fits the data, PCA projects the data onto it and then it can either measure the distances from the data to the line and try to find the

onto it and then it can either measure the distances from the data to the line and try to find the line that minimizes those distances, or it can try to find the line that maximizes the distances from the projected points to the origin. If those options don't seem equivalent to you, we can build intuition by looking at how these distances shrink when the line fits better, while these distances get larger when the line fits better. Now, to understand what is going on in a mathematical way, let's

larger when the line fits better. Now, to understand what is going on in a mathematical way, let's just consider one data point. This point is fixed and so is its distance from the origin. In other words, the distance from the point to the origin doesn't change when the red dotted line rotates. When we project the point onto the line, we get a right angle between the black dotted line and the red dotted line. That means that if we label the sides like this: A, B, and C, then we can use the

red dotted line. That means that if we label the sides like this: A, B, and C, then we can use the Pythagorean theorem to show how B and C are inversely related. Since A, and thus A squared, doesn't change if B gets bigger then C must get smaller. Likewise, if C gets bigger then B must get smaller. Thus, PCA can either minimize the distance to the line, or maximize the distance from the projected point to the origin. The reason I'm making such a fuss about this is that, intuitively, it makes

point to the origin. The reason I'm making such a fuss about this is that, intuitively, it makes sense to minimize B and the distance from the point to the line, but it's actually easier to calculate C, the distance from the projected point to the origin, so PCA finds the best fitting line by maximizing the sum of the squared distances from the projected points to the origin. So, for this line, PCA projects the data onto it and then measures the distance from this point to the origin, let's

PCA projects the data onto it and then measures the distance from this point to the origin, let's call it D1. Note: I'm going to keep track of the distances we measure up here. And then PCA measures the distance from this point to the origin, we'll call that D2. Then it measures D3, D4, D5, and D6. Here are all six distances that we measured. The next thing we do is square all of them. The distances are squared so that negative values don't cancel out positive values. Then we sum up all these

are squared so that negative values don't cancel out positive values. Then we sum up all these squared distances, and that equals the sum of the squared distances. For short we'll call this SS distances, for sum of squared distances. Now we rotate the line, project the data onto the line, and then sum up the squared distances from the projected points to the origin. And we repeat until we end up with the line with the largest sum of squared distances between the projected points and the origin.

the line with the largest sum of squared distances between the projected points and the origin. Ultimately, we end up with this line. It has the largest sum of squared distances. This line is called Principal Component 1, or PC1 for short. PC1 has a slope of 0.25. In other words, for every 4 units that we go out along the Gene 1 axis, we go up 1 unit along the Gene 2 axis. That means that the data are mostly spread out along the Gene 1 axis, and only a little bit spread out along the Gene 2

data are mostly spread out along the Gene 1 axis, and only a little bit spread out along the Gene 2 axis. One way to think about PC1 is in terms of a cocktail recipe. To make PC1 mix four parts Gene 1 with one part Gene 2. Pour over ice and serve! The ratio of Gene 1 to Gene 2 tells you that Gene 1 is more important when it comes to describing how the data are spread out. Oh no, terminology alert! Mathematicians call this cocktail recipe a linear combination of Genes 1 and 2. I mention this

Mathematicians call this cocktail recipe a linear combination of Genes 1 and 2. I mention this because when someone says PC1 is a linear combination of variables, this is what they're talking about.  It's no big deal. The recipe for PC1, going over 4 and up 1 gets us to this point. We can solve for the length of the red line using the Pythagorean theorem, the old A squared equals B squared plus C squared. Plugging in the numbers gives us A equals 4.12. So the length of the red line is 4.12.

C squared. Plugging in the numbers gives us A equals 4.12. So the length of the red line is 4.12. When you do PCA with SVD, the recipe for PC1 is scaled so that this length equals 1. All we have to do to scale the triangle so that the red line is 1 unit long is to divide each side by 4.12. For those of you keeping score, here's the math worked out that shows that all we need to do is divide all 3 sides by 4.12. Here are the scaled values. The new values change our recipe, but the ratio is the

by 4.12. Here are the scaled values. The new values change our recipe, but the ratio is the same. We still use four times as much Gene 1 as Gene 2. So now we are back to looking at the data, the best fitting line, and the unit vector that we just calculated. Oh no, another terminology alert! This 1 unit long vector, consisting of 0.97 parts Gene 1 and 0.242 parts Gene 2, is called the Singular Vector, or the Eigenvector for PC1, and the proportions of each gene are called loading scores. Also

or the Eigenvector for PC1, and the proportions of each gene are called loading scores. Also while I'm at it, PCA calls the average of the sums of the squared distances for the best fit line the Eigenvalue for PC1. And the square root of the sums of the squared distances is called the Singular Value for PC1. Bam! That's a lot of terminology. Now that we've got PC1 all figured out let's work on PC2. Because this is only a two-dimensional graph, PC2 is simply the line through the origin that is

Because this is only a two-dimensional graph, PC2 is simply the line through the origin that is perpendicular to PC1 without any further optimization that has to be done. And this means that the recipe for PC2 is -1 parts Gene 1 to 4 parts Gene 2. If we scale everything so that we get a unit vector, the recipe is -0.242 parts Gene 1 and 0.97 parts Gene 2. This is the singular vector for PC2 or the eigenvector for PC2. These are the loading scores for PC2, they tell us that, in terms of how the

eigenvector for PC2. These are the loading scores for PC2, they tell us that, in terms of how the values are projected onto PC2, Gene 2 is 4 times as important as Gene 1. Lastly the eigenvalue for PC2 is the average of the sum of the squares of the distances between the projected points and the origin. Hooray! We've worked out PC1 and PC2! To draw the final PCA plot, we simply rotate everything so that PC1 is horizontal. Then we use the projected points to find where the samples go in the PCA

so that PC1 is horizontal. Then we use the projected points to find where the samples go in the PCA plot. For example, these projected points correspond to sample 6, so sample 6 goes here. Sample 2 goes here. And Sample 1 goes here. Etc. Double bam! That's how PCA is done using singular value decomposition. Okay, one last thing before we dive into a slightly more complicated example. Remember the eigenvalues? We got those by projecting the data onto the principal components, measuring the

the eigenvalues? We got those by projecting the data onto the principal components, measuring the distances to the origin, then squaring and adding them together. Well, if you're familiar with the equation for variation, you will notice that eigenvalues are just measures of variation. For the sake of this example imagine that the variation for PC1 equals 15 and the variation for PC2 equals 3. That means that the total variation around both PCS is 15 plus 3 equals 18. And that means PC1 accounts

means that the total variation around both PCS is 15 plus 3 equals 18. And that means PC1 accounts for 15 divided by 18 equals 0.83 or 83% of the total variation around the PCs. PC2 accounts for 3 divided by 18 equals 17% of the total variation around the PCs. Oh no another terminology alert! A scree plot is a graphical representation of the percentages of variation that each PC accounts for. We'll talk more about scree plots later. Bam. Okay, now let's quickly go through a slightly more

We'll talk more about scree plots later. Bam. Okay, now let's quickly go through a slightly more complicated example. PCA with 3 variables, in this case that means 3 genes, is pretty much the same as 2 variables. You center the data. You then find the best fitting line that goes through the origin. Just like before, the best fitting line is PC1. But the recipe for PC1 now has 3 ingredients. In this case Gene 3 is the most important ingredient for PC1. You then find PC2, the next best fitting

this case Gene 3 is the most important ingredient for PC1. You then find PC2, the next best fitting line given that it goes through the origin and is perpendicular to PC1. Here's the recipe for PC2. In this case Gene 1 is the most important ingredient for PC2. Lastly, we find PC3, the best fitting line that goes through the origin and is perpendicular PC1 and PC2. If we had more genes, we just keep on finding more and more principal components by adding perpendicular lines and rotating them. In

on finding more and more principal components by adding perpendicular lines and rotating them. In theory, there is 1 per gene or variable, but in practice the number of PCs is either the number of variables or the number of samples, whichever is smaller. If this is confusing, don't sweat it. It's not super important and I'm going to make a separate video on this topic in the next week. Once you have all the principal components figured out you can use the eigenvalues, i.e. the sums of squares

have all the principal components figured out you can use the eigenvalues, i.e. the sums of squares of the distances, to determine the proportion of variation that each PC accounts for. In this case, PC1 accounts for 79% of the variation, PC2 accounts for 15% of the variation and PC3 accounts for 6% of the variation. Here's the scree plot. PC1 and PC2 account for the vast majority of the variation. That means that a 2D graph, using just PC1 and PC2, would be a good approximation of this 3D

That means that a 2D graph, using just PC1 and PC2, would be a good approximation of this 3D graph, since it would account for 94% of the variation in the data. To convert the 3D graph into a two-dimensional PCA graph, we just strip away everything but the data and PC1 and PC2, then project the samples onto PC1 and PC2. Then we rotate so that PC1 is horizontal and PC2 is vertical. This just makes it easier to look at. Since these projected points correspond to sample 4, this is where sample 4

it easier to look at. Since these projected points correspond to sample 4, this is where sample 4 goes in our new PCA plot. etc. etc. etc. Double bam! To review, we started with an awkward 3D graph that was kind of hard to read, then we calculated the principal components, then, with the eigenvalues for PC1 and PC2, we determined that a 2D graph would still be very informative. Lastly, we used PC1 and PC2 to draw a two-dimensional graph with the data. If we measured 4 genes per mouse, we would

and PC2 to draw a two-dimensional graph with the data. If we measured 4 genes per mouse, we would not be able to draw a 4-dimensional graph of the data, but that doesn't stop us from doing the PCA math, which doesn't care if we can draw a picture of it or not, and looking at the scree plot. In this case, PC1 and PC2 account for 90% of the variation, so we can just use those to draw a 2-dimensional PCA graph. So we project the samples onto the first 2 PCs. These 2 projected points correspond to

PCA graph. So we project the samples onto the first 2 PCs. These 2 projected points correspond to sample 2, so sample 2 goes here. Bam! Note, if the scree plot looked like this, where PC3 and PC4 account for a substantial amount of variation, then just using the first two PCs would not create a very accurate representation of the data. However, even a noisy PCA plot like this can be used to identify clusters of data. These samples are still more similar to each other than they are to the other

clusters of data. These samples are still more similar to each other than they are to the other samples. Little bam. Hooray! We've made it to the end of another exciting StatQuest. If you liked this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, please consider buying one or two of my original songs, the link to my bandcamp page is in the lower right corner and in the description below. All right until next time quest on!

that quest is the best if you don't think so then we have different opinions hello I'm Josh stommer and welcome to stat quest today we're gonna be talking about the main ideas behind principle component analysis and we're going to cover those concepts in five minutes if you want more details than you get here be sure to check out my other PCA video let's say we had some normal cells if you're not a biologist imagine that these could be people or cars or cities or etc they could be anything even

a biologist imagine that these could be people or cars or cities or etc they could be anything even though they look the same we suspect that there are differences these might be one type of cell or one type of person or car or city etc these might be another type of cell and lastly these might be a third type of cell unfortunately we can't observe differences from the outside so we sequence the messenger RNA in each cell to identify which genes are active this tells us what the cell is doing

messenger RNA in each cell to identify which genes are active this tells us what the cell is doing if they were people we could measure their weight blood pressure reading level etc okay here's the data each column shows how much each gene is transcribed in each cell for now let's imagine there are only two cells if we just have two cells then we can plot the measurements for each gene this gene gene one is highly transcribed in cell one and lowly transcribed in cell two and this gene gene 9 is

one is highly transcribed in cell one and lowly transcribed in cell two and this gene gene 9 is lowly transcribed in cell 1 and highly transcribed in cell 2 in general cell one and cell to have an inverse correlation this means that they are probably two different types of cells since they are using different genes now let's imagine there are three cells we've already seen how we can plot the first two cells to see how closely they are related now we can also compare cell one to sell three cell

two cells to see how closely they are related now we can also compare cell one to sell three cell one and cell three are positively correlated suggesting they are doing similar things lastly we can also compare cell two to cell three the negative correlation suggests that cell two is doing something different from cell 3 alternatively we could try to plot all three cells at once on a three dimensional graph cell one could be the vertical axis cell two could be the horizontal axis and sell three

graph cell one could be the vertical axis cell two could be the horizontal axis and sell three could be depth we could then rotate this graph around to see how the cells are related to each other but what do we do when we have four or more cells draw tons and tons of to sell plots and try to make sense of them all or draw some crazy graph that has an axis for each cell and makes our brain explode no both of those options are just plain silly instead we draw a principal component analysis or PCA

no both of those options are just plain silly instead we draw a principal component analysis or PCA plot a PCA plot converts the correlations or lack thereof among the cells into a 2d graph cells that are highly correlated cluster together this cluster of cells are highly correlated with each other so are these and so are these to make the clusters easier to see we can color-code them once we've identified the clusters in the PCA plot we can go back to the original cells and see that they

identified the clusters in the PCA plot we can go back to the original cells and see that they represent three different types of cells doing three different types of things with their genes BAM here's one last main idea about how to interpret PCA plots the axes are ranked in order of importance differences among the first principal component access PC one are more important than differences along the second principal component access PC two if the plot looked like this where the distance

along the second principal component access PC two if the plot looked like this where the distance between these two clusters is about the same as the distance between these two clusters then these two clusters are more different from each other than these two clusters before we go you should know that PCA is just one way to make sense of this type of data there are lots of other methods that are variations on this theme of dimension reduction these methods include heat maps tea Snee plots and

variations on this theme of dimension reduction these methods include heat maps tea Snee plots and multiple dimension scaling plots the good news is that I've got stat quests for all of these so you can check those out if you want to learn more note if the concept of dimension reduction is freaking you out check out the original stat quest on PCA I take it nice and slow so it's clearly explained hooray we've made it to the end of another exciting stat quest if you like the stat quest and want

hooray we've made it to the end of another exciting stat quest if you like the stat quest and want to see more of them please subscribe and if you have any ideas for additional stat quests well put them in the comments below until next time quest on

I've got a few these see a tips just for you hello I'm Josh stormer and welcome to stat quest today we're gonna be talking about pca and i'm gonna give you a few practical tips specifically we're going to talk about one scaling your data to centering your data and three how many principal components you should expect to get note this is a follow up to my video principal component analysis PCA step by step so make sure you've seen that video first or at least already know how PCA works practical

by step so make sure you've seen that video first or at least already know how PCA works practical tip number one make sure the variables are on the same scale and if not scale them here we have math and reading scores for a bunch of students let's plot the data math scores are from 0 to 100 and they are spread out between 0 and 100 in the graph in contrast reading scores are only from 0 to 10 and they are all crammed between 0 and 10 on the graph if we centered the data and did PCA on it we

and they are all crammed between 0 and 10 on the graph if we centered the data and did PCA on it we get this recipe for PC 1 to make PC 1 makes 0.99 parts math with zero point one part reading it suggests that math is 10 times better than reading for capturing variation in aptitude but this is only because the math scores are on a scale ten times larger than the scale for reading scores if we divided the math scores by 10 and re plotted and then Center the data and did PCA on it we'd get this

the math scores by 10 and re plotted and then Center the data and did PCA on it we'd get this recipe for PC 1 to make PC 1 mix 0.77 parts math with zero point seven seven parts reading this suggests that reading and math are equally good at capturing variation in aptitude the moral of this story is that you need to make sure the scales for each variable in this case math and reading scores are roughly equivalent otherwise you will be biased towards one of them the standard practice is to divide

equivalent otherwise you will be biased towards one of them the standard practice is to divide each variable by its standard deviation thus if a variable has a wide range it will have a large standard deviation and dividing by it will scale the values a lot if a variable has a narrow range it will have a small standard deviation and scaling will be minimal practical tip number two make sure your data is centered the very first step centering the data is an important one but not every PCA

your data is centered the very first step centering the data is an important one but not every PCA program does this by default if you do PCA using SVD without centering it will still try to fit a line to the data that goes through the origin and your pcs will not be what you expect so double-check that the PC a program you are using centers the data or center it yourself practical tip number three how many principal components can you expect to find in the first example we have math and

three how many principal components can you expect to find in the first example we have math and reading scores from a bunch of students we then plotted the data on a two-dimensional graph we then Center the data and then we found the best fitting line that goes through the origin this is PC 1 the second PC PC 2 was the line perpendicular to PC 1 then we just moved on without asking if there were any more principal components so now let's ask the question is there a third principle component to

any more principal components so now let's ask the question is there a third principle component to find a third PC we need to find a line perpendicular to both pc1 & pc2 and in two dimensions that's not possible so the answer is no to see why it's not possible to draw a line perpendicular to both pc1 & pc2 we could add a third line and rotate it until it is perpendicular to pc1 & pc2 this position is perpendicular to pc2 but not pc one so we keep rotating this position is perpendicular to PC

is perpendicular to pc2 but not pc one so we keep rotating this position is perpendicular to PC one but not PC two thus when we measure two things math and reading in this case per sample ie per student at most we can have two principal components and now imagine that math and reading scores are 100% correlated then we centered the data then we found the best fitting line principal component one technically speaking we could find a line perpendicular to PC one but if we projected the data on to

speaking we could find a line perpendicular to PC one but if we projected the data on to this line it would all just go to the origin this means that the eigenvalue for the new line the sum of squares of the distances between the points projected onto the line and the origin would be zero this means that pc1 accounts for 100% of the variation and the new line accounts for 0% thus for all practical purposes pc1 is the only one that matters likewise if we only had two students and then we

purposes pc1 is the only one that matters likewise if we only had two students and then we centered the data and then we found the best fitting line PC one then just like before we could find a line that is perpendicular to PC one but the eigen value would be zero so just like before there is really only one principle component worth talking about another perhaps simpler way to think about this is that two points define a line so these two points can only define a single line in order to define

that two points define a line so these two points can only define a single line in order to define a plane something with two axes we need at least three points now imagine we had two students and three test scores math reading and gymnastics we can Center the data and just like before since we only have two points and two points to final line we only have one PC now imagine we had three students and we remember that three points define a plane and a plane has only two axes then we would

and we remember that three points define a plane and a plane has only two axes then we would predict that there would only be two principal components so we can Center the data find the line through the origin that fits best PC one then find the line perpendicular to PC one that fits best and that's it since a third line would have an eigen value equal to zero there's no PC three in summary technically there is a PC for each variable in the data set however if there are fewer samples than

technically there is a PC for each variable in the data set however if there are fewer samples than variables then the number of samples puts an upper bound on the number of PCs with eigen values greater than zero hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you'd like to support stat quest well consider buying one or two my original songs okay until next time quest on

stat Quest is moving around watch it go hello I'm Josh stormer and welcome to stat quest stat quest is brought to you by the friendly folks in a genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about how to do PCA and are it's going to be clearly explained note in the description below this video I provided a link to the code that I use so if you want to do it yourself all you got to do is follow that link copy and paste and you're good to go

want to do it yourself all you got to do is follow that link copy and paste and you're good to go here's what we're going to be talking about how to use the per comp function to do PCA how to draw a PCA plot using base graphics and ggplot2 how to determine how much variation each principal component accounts for and lastly how to examine the loading scores to determine what variables have the largest effects on the graph first let's generate a fake data set that we can use in the demonstration

effects on the graph first let's generate a fake data set that we can use in the demonstration note if the details in this section don't make a whole lot of sense because we're talking about genes and read counts don't worry too much the important thing is that we have some data and you might have your own data to work with we will make a matrix of data with ten samples where we measured a hundred genes in each sample this is where we name the samples the first five samples will be WT or

hundred genes in each sample this is where we name the samples the first five samples will be WT or wild-type samples the WT samples are normal everyday samples the last five Center poles will be ko or knockout samples these are samples that are missing a gene because we knocked it out this is where we named the genes usually you'd have things like sox9 and UT x but since this is a fake data set we have gene one gene two to gene 100 this is where we give the fake genes fake read counts

set we have gene one gene two to gene 100 this is where we give the fake genes fake read counts sticklers for details will recognize that I'm using the Poisson distribution instead of the negative binomial distribution like I said these are fake reads for fake genes so don't worry about it too much and here are the first six rows in our data matrix note the samples are columns and the genes are rows now that we have our data we call per comp to do the PCA on our data the goal is to draw a graph

now that we have our data we call per comp to do the PCA on our data the goal is to draw a graph that shows how the samples are related or not related to each other note by default per comp expects the samples to be rows in the genes to be columns since the samples and our data matrix are columns and the genes variables are rows we have to transpose the matrix using the T function if we don't transpose the matrix we will ultimately get a graph that shows how the genes are related to each other

the matrix we will ultimately get a graph that shows how the genes are related to each other and this isn't what we want in this case per comp returns three things X s dev and rotation I'll talk about all three things as we use them we'll start with X X contains the principal components P C's for drawing a graph here we are using the first two columns and X to draw a 2d plot that uses the first two principal components remember since there are 10 samples there are 10 principal components the

two principal components remember since there are 10 samples there are 10 principal components the first principal component accounts for the most variation in the original data the gene expression across all 10 samples the second principal component accounts for the second most variation and so on to plot a 2d PCA graph we usually use the first two principal components however sometimes we use principal component two in principal component three here's our graph using the base graphics

use principal component two in principal component three here's our graph using the base graphics function plot pc1 is on the x-axis because pc 1 is the first column in x pc 2 is on the y-axis it's the second column in x five of the samples are on one side of the graph and the other five samples are on the other side of the graph to get a sense of how meaningful these clusters are let's see how much variation in the original data principal component one accounts for to do this we use the square

variation in the original data principal component one accounts for to do this we use the square of s dev which stands for standard deviation to calculate how much variation in the original data each principal component accounts for since the percentage of variation that each principal component accounts for is way more interesting than the actual value we calculate the percentages and plotting the percentages is easy with the bar plot function principal component 1 accounts for almost all of

the percentages is easy with the bar plot function principal component 1 accounts for almost all of the variation in the data this means that there is a big difference between these two clusters we can use ggplot2 to make a fancy PCA plot that looks nice and also provides us with tons of information first format the data the way ggplot2 likes it we make a data frame where one column has the sample IDs two columns are for the x and y coordinates for each sample here's what the data frame looks

IDs two columns are for the x and y coordinates for each sample here's what the data frame looks like we have one row per sample each row has a sample ID and XY coordinates for that sample here's the call to ggplot I'll go through this one line at a time but first let's look at the graph that draws the x axis tells us what percentage of the variation in the original data that pc1 accounts for the y axis tells us what percentage of the variation in the original data that pc2 accounts for now the

y axis tells us what percentage of the variation in the original data that pc2 accounts for now the samples are labels so we know which ones are on the left and the right in the first part of our ggplot function call we pass in the pca data data frame until ggplot which columns contain the x and y coordinates and which column has the sample labels then we use geum text to tell ggplot to plot the labels rather than dots or some other shape then we use X lab and while Abe to add X and y axis

the labels rather than dots or some other shape then we use X lab and while Abe to add X and y axis labels here I'm using the paste function to combine the percentage of variation with some text to make the labels look nice calling themed BW makes the graphs background white this is optional but I prefer the way this looks lastly we add a title to the graph using GG title BAM [Music] lastly let's look at how to use loading scores to determine which genes have the largest effect on where samples

look at how to use loading scores to determine which genes have the largest effect on where samples are plotted in the PCA plot the per comp function calls the loading scores rotation there are loading scores for each principal component here I'm just going to look at the loading scores for principal component one since it accounts for 92 percent of the variation in the data genes or variables that push the samples to the left side of the graph we'll have large negative values in genes or

that push the samples to the left side of the graph we'll have large negative values in genes or variables that push the samples to the right will have large positive values since we're interested in both sets of genes or variables we use the absolute value function to sort based on the numbers magnitude rather than from high to low now we sort the magnitudes of the loading scores from high to low now we get the names for the top 10 genes with the largest loading score magnitudes lastly we can

now we get the names for the top 10 genes with the largest loading score magnitudes lastly we can see which of these genes have positive loading scores these push the chaos intervals to the right side of the graph and then we see which genes have negative loading scores these push the wild-type samples to the left side of the graph hooray we've made it to the end of another exciting static quest if you liked this stack quest and want to see more of them please subscribe and if you have any

if you liked this stack quest and want to see more of them please subscribe and if you have any suggestions for future stack quests well put them in the comments below until next time quest on

that quest is off some he comes out [Music] hello I'm Josh stormer and welcome to stat quest today we're gonna be talking about how to do PCA and Python it's gonna be clearly explained however before I get started I need to have a big shout out for Chris yoga zimsky he wrote the code that I'm gonna be talking about and he's the reason why the stat quest exists to begin with here's what we're going to talk about first we'll talk about how to make up some data that we can apply PCA to then we'll

to talk about first we'll talk about how to make up some data that we can apply PCA to then we'll talk about how to use the PC a function from scikit-learn to do PCA we'll also talk about how to determine how much variation each principal component accounts for we'll talk about how to draw a fancy PCA graph using matplotlib and lastly we'll talk about how to examine the loading scores to determine what variables have the largest effect on the graph the first thing we do is import the pandas

what variables have the largest effect on the graph the first thing we do is import the pandas package pandas short for panel data makes it easy to manipulate data in python then we import the numpy package numpy will allow us to generate random numbers and do other mathy things the random package will be useful for generating an example dataset if you're working with real data you won't need this package here we are importing the PC a function from scikit-learn note just like our there are a

package here we are importing the PC a function from scikit-learn note just like our there are a few Python PCA functions to choose from the one in scikit-learn is the most commonly used that I know of the pre-processing package from psych had learned gives us functions for scaling the data before performing PCA lastly we'll import matplotlib so we can draw some fancy graphs Python being a general-purpose programming language doesn't have built-in support for tables of data random number

general-purpose programming language doesn't have built-in support for tables of data random number generation or graphing like R so we import all the stuff we need it's no big deal now that we've imported all the packages and functions we need let's generate a sample data set the first thing we do is generate an array of a hundred gene names since this is just an example data set our gene names are super boring gene one gene two etc now we create arrays of sample names we have five wild-type

are super boring gene one gene two etc now we create arrays of sample names we have five wild-type or WT samples and five knockout or ko samples if you don't know what wild-type or knockout samples are don't worry about it just know that there's two different types of samples note the range one comma six function generates values one two three four and five in other words it generates all integer values from 1 up to the value less than six now we create a panda's data frame to store the made-up

values from 1 up to the value less than six now we create a panda's data frame to store the made-up data the stars unpack the WT and ko arrays so that the column names are a single array that looks like this without the stars we would create an array of two arrays and that wouldn't create twelve columns like we want the gene names are used for the index which means that they are the equivalent of row names this is where we finally create the random data for each gene in the index ie gene one

of row names this is where we finally create the random data for each gene in the index ie gene one gene two dot dot all the way to gene 100 we create five values for the WT samples and five values for the KO samples the made up data comes from two Poisson distributions one for the WT samples and one for the ko samples note RNA sequencing aficionados will recognize that the Poisson distribution isn't the right one to use for RNA seek data no big deal this is just a made-up dataset so don't

isn't the right one to use for RNA seek data no big deal this is just a made-up dataset so don't worry about it for each gene we select a new mean for the Poisson distribution the means can vary between 10 and 1000 the head method for our data frame returns the first five rows of data this is useful for verifying that the data look the way we expect they should the shape attribute returns the dimensions of our data matrix in this case we get a hundred comma 10 100 genes by 10 total samples now

of our data matrix in this case we get a hundred comma 10 100 genes by 10 total samples now that we've created a sample data set let's do PCA actually before we do PCA we have to Center and scale the data after centering the average value for each gene will be zero and after scaling the standard deviation for the values for each gene will be 1 notice that we are passing in the transpose of our data the scale function expects the samples to be in rows instead of columns note we use samples as

data the scale function expects the samples to be in rows instead of columns note we use samples as columns in this example because that is often how genomic data is stored if you have other data you can store it however is easiest for you there's no requirement that the samples be rows or columns just be aware that if it is columns you'll need to transpose it before analysis one other note this is just one way to use scikit-learn to Center and scale the data so that the means for each gene are

just one way to use scikit-learn to Center and scale the data so that the means for each gene are 0 and the standard deviations for each gene are 1 alternatively we could have use standard scalar fit underscore transform the second method is more commonly used for machine learning and that's what scikit-learn was designed to do that's why it's available one last note about scaling with scikit-learn versus using scale or per comp in our to do the scaling in scikit-learn variation is calculated

versus using scale or per comp in our to do the scaling in scikit-learn variation is calculated as the measurements minus the mean squared divided by the number of measurements in contrast in our using scale or per comp variation is calculated as the measurements minus the mean squared divided by the number of measurements minus one this method results in larger but unbiased estimates of the variation the good news is that these differences do not affect the PCA analysis the loading scores and

the good news is that these differences do not affect the PCA analysis the loading scores and the amount of variation per principal component will be the same either way the bad news is that these differences will have a minor effect on the final graph this is because the coordinates on the final graph come from multiplying the loading scores by the scaled values now we create a PCA object rather than just have a function that does PCA and returns results scikit-learn uses objects that can be

than just have a function that does PCA and returns results scikit-learn uses objects that can be trained using one data set and applied to another data set since we're only using PCA to explore one data set and not using PCA in a machine learning setting the additional steps are a little tedious but they set us up for the machine learning topics that I'll be covering very soon then we call the fit method on the scale data this is where we do all the PCA math ie we calculate the loading scores

method on the scale data this is where we do all the PCA math ie we calculate the loading scores and the variation each principal component accounts for lastly this is where we generate coordinates for a PCA graph based on the loading scores in the scaled data now we're ready to draw a graph we'll start with a scree plot to see how many principle components should go into the final plot the first thing we do is calculate the percentage of variation that each principal component accounts for now

thing we do is calculate the percentage of variation that each principal component accounts for now we create labels for the scree plot these are pc-1 pc2 etc one label per principal component now we use matplotlib to create a bar plot and here's what the scree plot looks like with all the fancy annotation that we added using the y label X label and title methods almost all of the variation is along the first principal component so a 2d graph using pc1 & pc2 should do a good job representing

along the first principal component so a 2d graph using pc1 & pc2 should do a good job representing the original data to draw a PCA plot well first put the new coordinates created by PCA transform of the scaled data into a nice matrix where the rows have sample labels and the columns have PC labels these commands draw chatter plot with the title and nice access labels and this loop adds sample names to the graph lastly we display the graph there it is wow so awesome BAM the WT samples clustered

to the graph lastly we display the graph there it is wow so awesome BAM the WT samples clustered on the left side suggesting that they are correlated with each other the KO samples clustered on the right side suggesting that they are correlated with each other and the separation of the two clusters along the x-axis suggests that the wild-type samples are very different from the knockout samples lastly let's look at the loading scores for PC one to determine which genes had the largest influence

let's look at the loading scores for PC one to determine which genes had the largest influence on separating the two clusters along the x axis we'll start by creating a panda's series object with the loading scores in principal component one note the principal components are zero index so PC one equals zero now we sort the loading scores based on their magnitude aka we take the absolute value here we are just getting the names of the top ten indexes which are the gene names lastly we print out

we are just getting the names of the top ten indexes which are the gene names lastly we print out the top ten gene names and their corresponding loading scores and this is what we get these values are super similar so a lot of genes played a role in separating the samples rather than just one or two double bam hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you have any suggestions for future stat quests

quest and want to see more please subscribe and if you have any suggestions for future stat quests well put them in the comments below until next time quest on

StatQuest: Linear Discriminant Analysis (LDA) clearly explained.

Starck wins that's coming at you stick quiz stats gonna find you stick quiz watch out hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about linear discriminant analysis which let's be honest sounds really fancy and it kind of is but not really I think we can understand it let's see what it does and then we'll work it out that is let's look at some

we can understand it let's see what it does and then we'll work it out that is let's look at some examples of why we might need linear discriminant analysis and then we'll talk about the details of how it works imagine that we have this cancer drug and that cancer drug works great for some people but for other people it just makes them feel worse wha-wha we want to figure out who to give the drug to we want to give it to people who it's going to help but we don't want to give it to people that

to we want to give it to people who it's going to help but we don't want to give it to people that it might harm and since I'm a geneticist and I work in a genetics department the way I answer all my questions is to look at gene expression maybe gene expression can help us decide here's an example using one gene to decide who gets the drug and who doesn't we've got a number line and on the left side we've got fewer transcripts and on the right side we've got more transcripts the dots represent

we've got fewer transcripts and on the right side we've got more transcripts the dots represent individual people the green dots are people who the drug works for the red dots represent people whom the drug just makes them feel worse we can see that for the most part the drug works for people with low transcription of gene X and for the most part the drug does not work for people with high transcription of gene acts in the middle we see that there's overlap and that the no obvious cutoff for

of gene acts in the middle we see that there's overlap and that the no obvious cutoff for who to give the drug to in summary gene X does an okay job at telling us who should take the drug and who shouldn't can we do better what if we used more than one gene to make a decision here's an example of using two genes to decide who gets the drug and who doesn't on the x-axis we have gene X and on the y-axis we have gene Y now that we have two genes we can draw a line that separates the two categories

we have gene Y now that we have two genes we can draw a line that separates the two categories the green where the drug works and the red where the drug doesn't work and we can see that using two genes does a better job separating the two categories than just using one gene however it's not perfect with using three genes be even better here I've got an example where we're trying to use three genes to decide who gets the drug and who doesn't gene Z is on the z axis which represents depth so

genes to decide who gets the drug and who doesn't gene Z is on the z axis which represents depth so imagine a line going through your computer screen and into the wall behind it and the big circles or the big samples are the ones that are closer to you and the smaller circles smaller samples are the ones that are further away and those are along the z axis when we have three dimensions we use a plane to try to separate the two categories now I'll be honest I drew this picture but even for me

plane to try to separate the two categories now I'll be honest I drew this picture but even for me it's hard to tell if this plane separates the two categories correctly it's hard for us to visualize three dimensions on a flag computer screen we need to be able to rotate the figure and look at it from different angles to really know and that's tedious what if we need four or more genes to separate two categories well the first problem is we can't draw a four dimensional graph or a 10,000

two categories well the first problem is we can't draw a four dimensional graph or a 10,000 dimensional graph we just can't draw it that's a bummer wha-wha we ran into the same problem when we talked about principal component analysis or PCA and if you don't know about principal component analysis be sure to check out the stat quest on that subject it's got a lot of likes and it's helped a lot of people understand how it works and what it does pca if you can remember about it reduces dimensions

people understand how it works and what it does pca if you can remember about it reduces dimensions by focusing on genes with the most variation this is incredibly useful when you're plotting data with a lot of dimensions or a lot of genes onto a simple XY plot however in this case we're not super interested in the genes with the most variation instead we're interested in maximizing the separable 'ti between the two groups so that we can make the best decisions linear discriminant analysis Lda

'ti between the two groups so that we can make the best decisions linear discriminant analysis Lda is like pca it reduces dimensions however it focuses on maximizing the separable 'ti among the categories let's repeat that to emphasize the point linear discriminant analysis Lda is like pca but it focuses on maximizing the separable ax t among the known categories here we're going to start with a super simple example we're just going to try to reduce a two-dimensional graph to a 1d graph that is

simple example we're just going to try to reduce a two-dimensional graph to a 1d graph that is to say we want to take this two-dimensional graph aka and XY graph and reduce it to a one-dimensional graph aka a number line in such a way that maximizes the separable 'ti of the two categories what's the best way to reduce the dimensions well to answer that let's start by looking at a bad way and understanding what its flaws are one bad option would be to ignore gene Y and if we did that we would

what its flaws are one bad option would be to ignore gene Y and if we did that we would just project the data down on to the x axis this is bad because it ignores the useful information that gene Y provides projecting the genes onto the y axis ie ignoring the gene X isn't any better Lda provides a better way here we're going to try to reduce this two-dimensional graph to a 1d graph using Lda Lda uses the information from both genes to create a new access and it projects the data onto this new

uses the information from both genes to create a new access and it projects the data onto this new axis in a way to maximize the separation of the two categories so the general concept here is that Lda creates a new axis and it projects the data onto that new access in a way that maximizes the separation of the two categories now let's look at the nitty-gritty details and figure out how Lda does that how does Lda create the new axis the new axis is created according to two criteria that are

that how does Lda create the new axis the new axis is created according to two criteria that are considered simultaneously the first criteria is that once the data is projected onto the new axis we want to maximize the distance between the two means here we have a green mu character which is a Greek character representing the mean for the green category and a red mu representing the mean for the red category the second criteria is that we want to minimize the variation which Lda calls scatter

red category the second criteria is that we want to minimize the variation which Lda calls scatter and is represented by s squared within each category on the left side we see the scatter around the green dots on the right side we see the scatter around the red dots and this is how we consider those two criteria simultaneously we have a ratio of the difference between the two mean squared over the sum of the scatter the numerator is squared because we don't know if the Green mu is going to be

sum of the scatter the numerator is squared because we don't know if the Green mu is going to be larger than the red view or the red Muse going to be larger than the green meter we don't want that number to be negative we want it to be positive so whatever it is um whether it's negative or positive begin with we square it and it becomes a positive number now ideally the numerator would be very large there'd be a big difference or a big distance between the two means and ideally the denominator

there'd be a big difference or a big distance between the two means and ideally the denominator would be very small in that the scatter the variation of the data around each mean in each category would be small now I know this isn't a very complicated equation but to make things simple later on in this discussion let's call the difference between the two means D for distance so we can replace the difference between the two means with D now I want to show you an example of why both the distance

difference between the two means with D now I want to show you an example of why both the distance between the two means and the scatter are important here's a new data set we still just have two categories green and red in this case there's a little bit of overlap on the y-axis but lots of spread along the x-axis if we only maximize the distance between the means then we'll get something like this and the result is we'll have a lot of overlap in the middle this isn't great separation however

and the result is we'll have a lot of overlap in the middle this isn't great separation however if we optimize the distance between the means and the scatter then we get nice separation here the means are a little closer to each other than they were in the graph on the top but the scatter is much less so if we optimize both criteria at the same time we can get good separation so what if we have more than two genes that is to say what if we have more than two dimensions the good news is that the

than two genes that is to say what if we have more than two dimensions the good news is that the process is the same we create a new access that maximizes the distance between the means for the two categories while minimizing the scatter so here's an example of trying to do Lda with three genes we've got that three dimensional graph that I showed you earlier here we've created a new axis and the data are projected onto the new axis this new access was chosen to maximize the distance between the

are projected onto the new axis this new access was chosen to maximize the distance between the two means between the two categories that is while minimizing the scatter what if we have three categories in this case two things change but just barely here's a plot that has two genes but now we have three categories the first difference between having three categories as opposed to just two categories like we have four is how we measure the distances among the means instead of just measuring the

like we have four is how we measure the distances among the means instead of just measuring the distance between the two means we first find a point that is central to all of the data then we measure the distances between a point that is central in each category and the main central point now we want to maximize the distance between each category in the central point while minimizing the scatter for each category and here's the equation that we want to optimize and this is the same equation as

for each category and here's the equation that we want to optimize and this is the same equation as before but now there are terms for the blue category the second difference is LD a creates two axes to separate the data this is because the three central points for each category define a plane remember from high school two points to find a line and three points to find a plane that is to say we create new x and y axes however these are now optimized to separate the categories when we only use

create new x and y axes however these are now optimized to separate the categories when we only use two genes this is no big deal the data started out on an XY plot and plotting them on a new XY plot doesn't change all that much but what if we use data from 10,000 genes that would mean we need 10,000 dimensions to draw the data suddenly being able to create two axes that maximize the separation of the three categories is super cool it's way better than drawing a 10,000 dimension figure that we

the three categories is super cool it's way better than drawing a 10,000 dimension figure that we can't even imagine what it would look like here's an example using real data I'm trying to separate three categories and I've got 10,000 genes plotting the raw data would require 10,000 axes we used Lda to reduce the number to two and although the separation isn't perfect it is still easy to see three separate categories now let's use that same data set to compare Lda to pca here's the LDA plot

separate categories now let's use that same data set to compare Lda to pca here's the LDA plot that we saw before and now we've applied pca to the exact same set of genes PCA doesn't separate the categories nearly as well we can see lots of overlap between the black and the blue points however PCA wasn't even trying to separate those categories it was just looking for the genes with the most variation so we've seen the differences between Lda and PCA but now let's talk about some of the

variation so we've seen the differences between Lda and PCA but now let's talk about some of the similarities the first similarity is that both methods rank the new axes that they create in order of importance PC won the first new access that PCA creates accounts for the most variation in the data likewise PC to the second new access does the second best job and this goes on and on for the number of axes that are created from the data ld1 the first new axis that Lda creates accounts for the

of axes that are created from the data ld1 the first new axis that Lda creates accounts for the most variation between the categories LD to the second new access does the second best job etc etc etc also both methods let you dig in and see which genes are driving the new axes in PCA this means looking at the loading scores in LD a one thing you can do is look and see which which genes or which variables correlate with the new axes so in summary LD a is like PCA both try to reduce dimensions PCA

correlate with the new axes so in summary LD a is like PCA both try to reduce dimensions PCA does this by looking at the genes with the most variation in contrast Lda tries to maximize the separation of known categories and that's it tune in next time for another exciting stat quest

When the going gets tough the tough get stuff and when the tough get stuff they get StatQuest! Hello, I'm Josh Starmer welcome to StatQuest. Today we're going to talk about BAM and it's gonna be clearly explained Note this StatQuest assumes that you want to know what BAM!!! means. If not, it assumes you have a sense of humor If you watch StatQuest videos, chances are, you've experienced BAM!!! You may have also experienced Double BAM!!! And if you're really lucky, you might have experienced the

may have also experienced Double BAM!!! And if you're really lucky, you might have experienced the rare and coveted TRIPLE BAM!!! Unfortunately, some of you may have also experienced small bam or even worse tiny bam If you've experienced these "bams" and wondered what they're all about, the good news is that you are not alone. This guy wants to know what BAM means and so does this dude? When you see a big bam like... BAM!!! Then you know something awesome just happened. And if it didn't seem

see a big bam like... BAM!!! Then you know something awesome just happened. And if it didn't seem awesome to you, just rewind and play it over and over again. Sooner or later you will achieve enlightenment and become one with the... BAM!!! NOTE: The size and number of bams are(not is) correlated with the awesomeness. For example, this is just one bam with font size equal to 88 and it means something awesome just happened. In contrast, this is three bams with font size equal to 248 and it means

awesome just happened. In contrast, this is three bams with font size equal to 248 and it means something totally awesome happened. When you see a small bam, you know, you've just survived another Dreaded terminology alert!!! ...or maybe you just saw something else, that is lame but probably important to know. In summary BAM!!! Double BAM and TRIPLE BAM!!! Let you know that you're watching... StatQuest Because StatQuest is totally BAAAAM!!! (It reminded me the kid who yells yeah boi) Hooray.

Because StatQuest is totally BAAAAM!!! (It reminded me the kid who yells yeah boi) Hooray. We've made it to the end of another exciting StatQuest I hope you guys are all healthy and well and enjoyed this little bit of light humor in this time of uncertainty Alright until next time quest on

that quest is groovy just like a movie groove hello I'm Josh stormer and welcome to stat quest today we're going to be talking about multi-dimensional scaling MDS and principle coordinate analysis PCO a first of all if you don't have principal component analysis PCA down cold check out the stat quest PCA main ideas in five minutes principal component analysis and multi-dimensional scaling are both very very similar so I want you to be able to understand PCA before we move on with this one also

very very similar so I want you to be able to understand PCA before we move on with this one also to be clear about what we will cover in this stat quest there are two types of multi-dimensional scaling there's classical or metric multi-dimensional scaling versus non metric multi-dimensional scaling I'm only going to talk about classical multi-dimensional scaling in this stat quest and classical multi-dimensional scaling is the exact same thing as principle coordinate analysis okay enough

multi-dimensional scaling is the exact same thing as principle coordinate analysis okay enough preliminary stuff let's dive in let's say we had some normal cells if you're not a biologist these could be people or cars or cities etc even though they look the same we suspect that there are differences these might be one type of cell or one type of person or car or city etc these might be another type of cell and these might be a third type of cell unfortunately we can't observe the differences

type of cell and these might be a third type of cell unfortunately we can't observe the differences from the outside so we sequence the messenger RNA in each cell to identify which genes are active this tells us what each cell is doing alternatively if they were people we could measure their height blood pressure reading level etc here's the data each column shows how much each gene is transcribed in each cell when we did PCA in the stat quest that explains the main ideas of PCA and five

in each cell when we did PCA in the stat quest that explains the main ideas of PCA and five minutes we converted the correlations or lack thereof among the samples into a 2d principal component analysis plot and we saw that highly correlated samples form clusters multi-dimensional scaling MDS and principle coordinate analysis PCO a are very similar to pca except that instead of converting correlations into a 2d graph they convert distances among the samples into a 2d graph so in order to do MDS

into a 2d graph they convert distances among the samples into a 2d graph so in order to do MDS or PCO a we have to calculate the distance between cell one and cell two and the distance between cell one and cell three and the distance between cell one and cell four and the distance between cell two and cell three all right you get the idea we calculate the distance between every pair of cells now let's just talk about how to calculate distances for now let's imagine we only needed to calculate

let's just talk about how to calculate distances for now let's imagine we only needed to calculate the distance between cell one and cell two one very common way to calculate distances between two things is to calculate the Euclidean distance if we just had two genes we could draw a line that represented the difference between the values for gene 1 and we could draw a line that represented the difference between the values for gene 2 then the Euclidean distance between cell one and cell 2 would

between the values for gene 2 then the Euclidean distance between cell one and cell 2 would be the hypotenuse ie the Pythagorean theorem with more genes we just add the square of more differences between more genes this is the difference for gene one this is the difference for gene - and this is the difference for gene three etc etc etc and once we calculated the distance between every pair of cells MDS and P CoA would reduce them to a two-dimensional graph the bad news is that if we use the

cells MDS and P CoA would reduce them to a two-dimensional graph the bad news is that if we use the Euclidean distance the graph would be identical to a PC a graph in other words clustering based on minimizing the linear distances is the same as maximizing the linear correlations the good news is that there are tons of other ways to measure distance we don't have to use the Euclidean distance although sometimes people choose to use it anyways for example another way to measure distances between

sometimes people choose to use it anyways for example another way to measure distances between cells is to calculate the average of the absolute value of the log fold changes among the genes using the data from cells 1 & 2 the log fold change for gene 1 is the log of 3 divided by 0.25 and the log fold change for gene 2 is the log of 2.9 divided by 0.8 and we just keep going calculating log fold changes for each gene for cells 1 & 2 for example the log fold change for gene 8 equals the log of 1

for each gene for cells 1 & 2 for example the log fold change for gene 8 equals the log of 1 divided by 2 point 7 here are the actual log two values of the ratios I've just talked about we've got three point five eight one point eight six dot dot dot and then negative one point four three now we take the absolute value lastly we take the average of all the numbers that's the average of the absolute value of the log fold change among the genes note we take the absolute value so that the negative

value of the log fold change among the genes note we take the absolute value so that the negative fold changes don't cancel out the positive ones ultimately will get graphs that look different a biologist might choose to use log fold change to calculate distance because they are frequently interested in log fold changes among genes but there are lots of distances to choose from the Manhattan distance Hamming distance Great Circle distance etc etc etc you can look them up on the web selecting

Hamming distance Great Circle distance etc etc etc you can look them up on the web selecting the best distance is part of the art of data science in summary PCA creates plots based on correlations among samples and MDS and principle coordinate analysis create plots based on distances among samples the closer samples are to each other the more tightly they cluster in the final plot in other words PCA starts by calculating the correlations among the samples then there's some fancy math

words PCA starts by calculating the correlations among the samples then there's some fancy math specifically eigen decomposition and out of that we get coordinates for a graph we get the percent of variation each access accounts for and we get loading scores to determine which variables have the largest effect in contrast MDS and principle coordinate analysis start by calculating distances among the samples however that's the only difference the fancy math is the exact same and the output is

the samples however that's the only difference the fancy math is the exact same and the output is similar you get coordinates for a graph the percent of variation that each access accounts for and loading scores to determine which variables have the largest effect hooray we've made it to the end of another exciting stat quest if you liked this static quest and want to see more of them please subscribe and if you have any ideas for future stat quests well put them in the comments below until

and if you have any ideas for future stat quests well put them in the comments below until next time quest on

stack west on a Monday makes for a fun day stack west on any day makes that day fun hello I'm Josh Dharma and welcome to stack west today we're going to talk about doing multi-dimensional scaling mb/s and principle coordinate analysis PCO a in r if you don't already know MDS or classical or metric MDS is the exact same thing as PCO a one last thing before we move on the code that I use in the stack quest is available on the stack quest website and the link to that code is in the description

stack quest is available on the stack quest website and the link to that code is in the description below first we load in ggplot2 since we'll need it later to draw fancy looking graphs now we generate some fake data this is exactly the same as the data we used in the PCA in our stat quest so I'm going to breeze through this pretty quickly if you need more details check out that stat quest the data will consist of a matrix with ten columns corresponding to ten samples and 100 rows corresponding

will consist of a matrix with ten columns corresponding to ten samples and 100 rows corresponding to measurements from 100 genes the first five columns will be WT or wild-type samples and the last five columns will be ko or knockout samples the genes will have really creative names like gene one gene two this is where we generate the fake data and the head function shows us the first six rows or genes for all ten samples now just for comparison will do PCA on the data set I'm going to breeze

genes for all ten samples now just for comparison will do PCA on the data set I'm going to breeze through these steps since we went over them already in the PCA in our stat quest now we create a PCA plot using GG plot note we covered this command in the PCA and our stat quest so check that out if this looks totally crazy BAM the wild-type samples are on the left side of the graph and the knockout samples are on the right side the x-axis PC one for the first principal component accounts for 91%

samples are on the right side the x-axis PC one for the first principal component accounts for 91% of the variation in the data and the y-axis for PC - or principal component - only accounts for 2.7 percent of the variation in the data this means that most of the differences were between the wild type and the knockout samples now let's create an MDS or PC Oh a plot to compare to this one step one create a distance matrix we do this with the dist function just like with PCA we transpose the

one create a distance matrix we do this with the dist function just like with PCA we transpose the matrix so the samples are rows we also Center and scale the measurements for each gene which are now the columns lastly we tell the disk function that we want to create the matrix using euclidean distance metric note the dist function has six different distance metrics to choose from step to perform multi-dimensional scaling on the distance matrix using the CMD scale function CMD scale stands for

multi-dimensional scaling on the distance matrix using the CMD scale function CMD scale stands for classical multi-dimensional scaling we tell CMD scale that we want it to return the eigen values we use these to calculate how much variation in the distance matrix each access in the final MDS plot accounts for we can also get CMD scale to return the doubly centered ie both rows and columns are centered version of the matrix this is useful if you want to demonstrate how to do MDS using the eigen

version of the matrix this is useful if you want to demonstrate how to do MDS using the eigen function instead of the CMD scale function originally I thought I was going to demonstrate how to use the eigen function to do multi-dimensional scaling but in the end I really wanted to keep this practical and you're gonna do MDS you're gonna use the CMD scale function step 3 calculate the amount of variation each access in the MDS plot accounts for using the eigenvalues step four format the data for

each access in the MDS plot accounts for using the eigenvalues step four format the data for ggplot lastly call ggplot to make a fancy graph just like in the pca graph the wild-type samples are on the left side of the graph and the knockout samples are on the right side and just like in the PCA graph the X access accounts for 91% of the variation in the data and the y axis only accounts for 2.7 percent of the variation in the data actually the pca graph and the MDS graph don't just look similar

of the variation in the data actually the pca graph and the MDS graph don't just look similar they are exactly the same this is because we use the Euclidean metric to calculate the distance matrix now let's see what happens when we use a different metric to calculate the distance matrix let's use the average of the absolute value of the log fold change just for all you gene expression folks this is what edge R does when you call the plot MDS function the first thing we do is calculate the log

is what edge R does when you call the plot MDS function the first thing we do is calculate the log to values of the measurements for each gene since the average of absolute values of the log fold change isn't one of the distance metrics built into the dist function we'll create our own distance matrix by hand in this step we're just creating an empty matrix this is where we fill the matrix with the average of the absolute values of the log fold changes and here's what that matrix looks like

the average of the absolute values of the log fold changes and here's what that matrix looks like because the full matrix would be symmetrical we only have to calculate the values for the lower triangle now we perform multi-dimensional scaling on our new distance matrix here I'm just converting our homemade matrix into a true distance matrix so that cm descale knows what it's working with in other words a true distance matrix only needs the bottom triangle to be computed and not the whole thing

words a true distance matrix only needs the bottom triangle to be computed and not the whole thing everything else is the same just like before we calculate the amount of variation each access in the MDS plot accounts for using the eigenvalues and again just like before we format the data for ggplot lastly we create the graph using ggplot double bound the two different MDS plots one using the Euclidean distance and the other using the average of the absolute value of the log fold change are

Euclidean distance and the other using the average of the absolute value of the log fold change are similar but not the same in the new graph the x-axis accounts for more of the variation 99.2% versus 91% hooray we've made it to the end of another exciting stat quest if you like this tack quest and want to see more of them please subscribe and if you have any ideas for additional stat quests well put them in the comments below alright until next time quest on

I'm drawing a graph doesn't it look cool but I didn't know how until I watched a quest hello and welcome to stack quest stack quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about T Snee or tis knee to be honest I don't actually know how it's pronounced but it's gonna be clearly explained I know that bet also this stack quest is by request a couple of people put it in the comments below

I know that bet also this stack quest is by request a couple of people put it in the comments below and I got a couple of emails from other people so I'm doing it because you guys want it here goes if you're watching this stack quest chances are you've seen an example of a tea sneak graph before what tea Snee does is it takes a high dimensional data set and reduces it to a low dimensional graph that retains a lot of the original information if you're not familiar with those terms of taking a

that retains a lot of the original information if you're not familiar with those terms of taking a high dimensional data set and reducing it to a low dimensional graph you might want to watch the stat quest for pca because i explain what that means in that video here's a basic 2d scatter plot let's do a walk through of how tea stain would transform this graph into a flat one dimensional plot on a number line I'm going to use this super simple example to explain the concepts behind tea Snee so

a number line I'm going to use this super simple example to explain the concepts behind tea Snee so that when you see it applied to a much larger data set a much more complex data set you'll still know how that graph was drawn note if we just projected the data onto one of the axes we just get a big mess that doesn't preserve the original clustering if we project it on to the y axis instead of two distinct clusters we just see a mishmash and the same thing happens if we just project the data

two distinct clusters we just see a mishmash and the same thing happens if we just project the data onto the x axis what T Snee does is find a way to project data into a low dimensional space in this case the one-dimensional number line so that the clustering in the high dimensional space in this case the 2-dimensional scatterplot is preserved so let's step through the basic ideas of how tasty does this we'll start with the original scatter plot then we'll put the points on the number line in a

this we'll start with the original scatter plot then we'll put the points on the number line in a random order from here on out T sneem moves these points a little bit at a time until it has clustered them let's figure out where to move this first point should it move a little to the left or a little to the right because it is part of this cluster in the two-dimensional scatter plot it wants to move closer to these points but at the same time these points are far away in the scatter plot so

move closer to these points but at the same time these points are far away in the scatter plot so they push back these points attract while these points repel in this case the attraction is strongest so the point moves a little to the right BAM now let's move this point a little bit these points attract because they are close to each other in the two-dimensional scatter plot and this point repels a little bit because it is far from the point in the two-dimensional scatter plot so it moves a

a little bit because it is far from the point in the two-dimensional scatter plot so it moves a little closer to the other orange points double bam at each step a point on the line is attracted to points it is near in the scatterplot and repelled by points it is far from triple bail now that we've seen what tea Snee tries to do let's dive into the nitty-gritty details of how it does what it does step 1 determine the similarity of all the points in the scatter plot for this example let's focus

step 1 determine the similarity of all the points in the scatter plot for this example let's focus on determining the similarities between this point and all of the other points first measure the distance between two points then plot that distance on a normal curve that is centered on the point of interest lastly draw a line from the point to the curve the length of that line is the unscaled similarity I made that terminology up but it'll make sense in just a bit so hold on now we calculate the

I made that terminology up but it'll make sense in just a bit so hold on now we calculate the unscaled similarity for this pair of points now we calculate the unscaled similarity for this pair of points and now we calculate the unscaled similarity for this pair of points etc etc etc using a normal distribution means that distant points have very low similarity values and close points have high similarity values ultimately we measure the distances between all of the points and the point of

similarity values ultimately we measure the distances between all of the points and the point of interest then plot them on a normal curve and then measure the distances from the points to the curve to get the unscaled similarity scores with respect to the point of interest the next step is to scale the unscaled similarities so that they add up to 1 um why do the similarity scores need to add up to 1 it has to do with something I didn't tell you earlier and to illustrate the concept I need to

to 1 it has to do with something I didn't tell you earlier and to illustrate the concept I need to add a cluster that is half as dense as the others the width of the normal curve depends on the density of data near the point of interest less dense regions have wider curves so if these points have 1/2 the density as these points and this curve is half as wide as this curve then scaling the similarity scores will make them the same for both clusters here's an example where I've worked out the

scores will make them the same for both clusters here's an example where I've worked out the math this curve has a standard deviation equal to 1 these are the unscaled similarity values this curve has a standard deviation equal to 2 these points are twice as far from the middle the unscaled similarity values are half of the other ones to scale the similarity scores so that they sum to one you take a score and you divided by the sum of all the scores that equals the scaled score here's how the

a score and you divided by the sum of all the scores that equals the scaled score here's how the math works out when the distribution has a standard deviation equals to one we get zero point eight two and zero point one eight as the scaled similarity scores and here's the math for when everything is spread out twice as much we get zero point eight two and zero point one eight the similarity scores on top are equal to the similarity scores below they are the same that implies that the scaled

on top are equal to the similarity scores below they are the same that implies that the scaled similarity scores for this relatively tight cluster are the same for this relatively loose cluster the reality is a little more complicated but only slightly T Snee has a perplexity parameter equal to the expected density around each point and that comes into play but these clusters are still more similar than you might expect now back to the original scatter plot we've calculated similarity scores

than you might expect now back to the original scatter plot we've calculated similarity scores for this point now we do it for this point and we do it for all the points one last thing and the scatter plot will be all set with similarity scores because the width of the distribution is based on the density of the surrounding data points the similarity score for this node might not be the same as the similarity to this node so T Snee just averages the two similarity scores from the two directions

similarity to this node so T Snee just averages the two similarity scores from the two directions no big deal ultimately you end up with a matrix of similarity scores each row and column represents the similarity scores calculated from that point of interest red equals high similarity and white equals low similarity I've drawn the similarity from a point of interest to itself as dark red however it doesn't really make sense to say that a point is similar to itself because that doesn't help the

it doesn't really make sense to say that a point is similar to itself because that doesn't help the clustering so T's knee actually defines that similarity as zero hooray were done calculating similarity scores for the scatter plot now we randomly project the data onto the number line and calculate similarity scores for the points on the number line just like before that means picking a point measuring a distance and lastly drawing a line from the point to a curve however this time we're using

a distance and lastly drawing a line from the point to a curve however this time we're using a t-distribution a t-distribution is a lot like a normal distribution except the tea isn't as tall in the middle and the tails are taller on the ends the t-distribution is the tea in tea stay we'll talk about why the t-distribution is used in a little bit so using a t-distribution we calculate unscaled similarity scores for all the points and then scale them like before like before we end up with a

similarity scores for all the points and then scale them like before like before we end up with a matrix of similarity scores but this matrix is a mess compared to the original matrix the goal of moving this point is we want to make this row look like this row t Snee moves the points a little bit at a time edit each step it chooses a direction that makes the matrix on the left more like the matrix on the right it uses small steps because it's a little bit like a chess game and can't be solved

on the right it uses small steps because it's a little bit like a chess game and can't be solved all at once instead it goes one move at a time BAM now to finally tell you why the t-distribution is used without it the clusters would all clump up in the middle and be harder to see triple bam and now we know how teeny works i've used a really simple example here but the concepts are the exact same for more complicated data sets hooray we've made it to the end of another exciting stack quest if

for more complicated data sets hooray we've made it to the end of another exciting stack quest if you like this stack quest and want to see more like it please subscribe and if you have any ideas for future stack quests just put them in the comments below until next time quest on

[Music] going on a quest on a stat Quest stat Quest hello and welcome to stat Quest today we're going to be talking about hierarchical clustering hierarchical clustering is often associated with heat Maps if you're not already familiar with what heat maps are just know that the columns typically represent different samples and that the rows typically represent measurements from different genes red typically signifies High expression of a gene and blue or purple means lower expression for a gene

typically signifies High expression of a gene and blue or purple means lower expression for a gene hierarchical clustering orders the rows and or the columns based on similarity this makes it easy to see correlation in the data for example these samples express the same genes and these genes behave the same on the left we have a heat map without hierarchical clustering and on the right we have a heat map with hierarchical clustering so you can see that the clustering makes a big difference on

heat map with hierarchical clustering so you can see that the clustering makes a big difference on how the data is presented heat Maps often come with dendrograms so we'll talk about those too let's get started we'll start with a simple example here we've got a simple heat map that has three samples and four genes for this example we are just going to Cluster or reorder the rows or the genes conceptually the first step is to figure out which Gene is most similar to Gene number one genes number

the first step is to figure out which Gene is most similar to Gene number one genes number one and two are different we can tell because the colors are very different Gene one is highly expressed in Sample number one so it has a red color Gene 2 however is not highly expressed on Sample number one so it has a blue color in Sample number three Gene one is lowly expressed so it's blue and Gene 2 is highly expressed so it's red genes 1 and three are similar so that means in Sample one both Gene 1

highly expressed so it's red genes 1 and three are similar so that means in Sample one both Gene 1 and three are red they're highly expressed and in Sample three they're both blue meaning they're lowly expressed genes one and four are also similar however Gene number one is most similar to Gene number three so the second step is to figure out what Gene is most similar to Gene number two so we do all the comparisons and we see that Gene number two is most similar to Gene number four and then we

all the comparisons and we see that Gene number two is most similar to Gene number four and then we do the same thing for Gene number three and then Gene number four in Step number three we look at the different combinations and figure out which two genes are the most similar once we've done that we merge them into a cluster in this case genes number one and three are more similar than any other combination of genes so genes 1 and three are now cluster number one step four go back to step one

combination of genes so genes 1 and three are now cluster number one step four go back to step one but now treat the new cluster like it's a single Gene so in step one we figure out which Gene is most similar to Cluster number one cluster number one is most similar to Gene number four and we figure out which Gene is most similar to Gene number two in this case Gene number two is most similar to Gene number four but notice that we compared Gene number two to Cluster number one and then we do the

number four but notice that we compared Gene number two to Cluster number one and then we do the same thing for Gene number four of the different combinations figure out which two genes are the most similar now merge them into a cluster in this case genes 2 and four are the most similar combination so we've merged them into a cluster now we go back to Step One however since all we have left are two clusters we merge them bam we're all done hierarchical clustering is usually accompanied by a

two clusters we merge them bam we're all done hierarchical clustering is usually accompanied by a dendrogram it indicates both the similarity and the order that the Clusters were formed cluster number one was formed first and is is most similar it has the shortest Branch cluster number two was second and is the second most similar it has the second shortest Branch cluster number three which contains all of the genes was formed last it has the longest Branch now let's go over a few nitpicky

all of the genes was formed last it has the longest Branch now let's go over a few nitpicky details remember the first step figure out which Gene is most similar to Gene number one well we have to Define what most similar means the method for determining similarity is arbitrarily chosen however the ukian distance between genes is used a lot let's look at an example we'll use a very simple heat map that just has two samples and two genes now we're displaying the values that underly the the

map that just has two samples and two genes now we're displaying the values that underly the the colors that we have in the heat map the ukian distance between genes 1 and two is just the square root of the difference in Sample number one squared plus the difference in Sample number two squared here we'll just plug in the values for sample number one we have 1.6 minus 0.5 now let's plug in the values to calculate the difference in Sample number two we have 0.5 minus -1.9 doing the subtraction

to calculate the difference in Sample number two we have 0.5 minus -1.9 doing the subtraction gives us the square < TK of 2.12 + 2.4 2ar we can think of these values within the parentheses as sides on a triangle so on the x axis we have the distance between Gene 1 and Gene 2 in Sample number one and on the Y AIS we have the distance between Gene 1 1 and two in Sample number two the hypotenuse is the distance between genes 1 and two the Pythagorean theorem says that the hypotenuse equals theare

the distance between genes 1 and two the Pythagorean theorem says that the hypotenuse equals theare < TK of x^2 + y^2 in this case that means the Square t of 2.12 + 2.4 SAR and that gives us 3.2 the distance between Gene number one and Gene number two when we have more samples we just extend the equation it's no big deal the ukian distance is just one method there are lots more including the Manhattan distance the Manhattan distance is just the absolute value of the differences so instead of

distance the Manhattan distance is just the absolute value of the differences so instead of squaring the differences and then taking the square root all we do is take the absolute value of the differences we can think of the Manhattan distance in geometric terms by imagining that each difference is a line segment if we take all those line segments and put them together head to tail head to tail and then add that total length of all those line segments together that's the Manhattan distance yes

then add that total length of all those line segments together that's the Manhattan distance yes it makes a difference here's a heat map Drawn using the ukian distance and here's the same information drawn as a heat map but now we're using the Manhattan distance the heat maps are very similar but there are also a few differences the choice and distance metric is arbitrary W there is no biological or physical reason to choose one and not the other pick the one that gives you more insight into

or physical reason to choose one and not the other pick the one that gives you more insight into your data now do you remember how we merged genes 1 and three into cluster number one and compared it to other genes well there are different ways to compare clusters too one simple idea is to use the average of the measurements from each sample but there are lots more and these have effect on clustering as well so let's talk about the different ways to compare clusters for the sake of visualizing

as well so let's talk about the different ways to compare clusters for the sake of visualizing how the different methods work imagine our data was spread out on an XY plane now imagine that we have already formed these two clusters and we just want to figure out which cluster this last Point belongs to we can compare that point to the average of each cluster this is called the centroid the closest point in each cluster this is called single linkage or we can compare it to the furthest point in

point in each cluster this is called single linkage or we can compare it to the furthest point in each cluster this is called complete linkage and there are other methods as well here's a heat map that compares the furthest points in the clusters by the way if you use R this is the default setting for the hclust function this heat map compares the average points in the Clusters and this last Heat Map compares the closest points in the Clusters these heat maps are all very similar but there are

Map compares the closest points in the Clusters these heat maps are all very similar but there are also differences in the way the data is presented in some summary clusters are formed based on some notion of similarity you have to decide what that is however most programs have reasonable defaults once you have a subcluster you have to decide how it should be compared to other rows columns or subclusters Etc and most programs have good default settings for this as well and the height of the

subclusters Etc and most programs have good default settings for this as well and the height of the branches in the Dinger gram shows you what is most simple similar hooray we've made it to the end of another exciting stat Quest if you liked this presentation please subscribe to my channel and you'll get more like it also if you'd like me to do something specific feel free to mention it in the comments below

statcast [Music] stat quest stat quest stat quest hello I'm Josh stormer and welcome to stat quest today we're going to be talking about k-means clustering we're gonna learn how to cluster samples that can be put on a line on an XY graph and even on a heat map and lastly we'll also talk about how to pick the best value for K imagine you had some data that you could plot on a line and you knew you needed to put it into three clusters maybe they are measurements from three different types of

you needed to put it into three clusters maybe they are measurements from three different types of tumors or other cell types in this case the data make three relatively obvious clusters but rather than rely on our eye let's see if we can get a computer to identify the same three clusters to do this we'll use k-means clustering we'll start with raw data that we haven't yet clustered step one select the number of clusters you want to identify in your data this is the K in k-means clustering in

the number of clusters you want to identify in your data this is the K in k-means clustering in this case we'll select K equals three that is to say we want to identify three clusters there is a fancier way to select a value for K but we'll talk about that later step two randomly select three distinct data points these are the initial clusters step 3 measure the distance between the first point and the three initial clusters this is the distance from the first point to the blue cluster this is

the three initial clusters this is the distance from the first point to the blue cluster this is the distance from the first point to the green cluster and this is the distance from the first point to the orange cluster well it's kind of yellow but we'll just call it orange for now step 4 assign the first point to the nearest cluster in this case the nearest cluster is the blue cluster now we do the same thing for the next point we measure the distances and then assign the point to the nearest

the same thing for the next point we measure the distances and then assign the point to the nearest cluster now we figure out which cluster the third point belongs to we measure the distances and then assign the point to the nearest cluster the rest of these points are closest to the orange cluster so they'll go in that one two now that all the points are in clusters we go on to step 5 calculate the mean of each cluster then we repeat what we just did measure and cluster using the mean values

the mean of each cluster then we repeat what we just did measure and cluster using the mean values since the clustering did not change at all during the last iteration were done BAM the k-means clustering is pretty terrible compared to what we did by eye we can assess the quality of the clustering by adding up the variation within each cluster here's the total variation within the clusters since k-means clustering can't see the best clustering it's only option is to keep track of these clusters

clustering can't see the best clustering it's only option is to keep track of these clusters and their total variance and do the whole thing over again with different starting points so here we are again back at the beginning k-means clustering picks three initial clusters and then clusters all the remaining points calculates the mean of each cluster and then re clusters based on the new means it repeats until the cluster is no longer change bit bit bit of bit of boop boop boop now that the

it repeats until the cluster is no longer change bit bit bit of bit of boop boop boop now that the data are clustered we sum the variation within each cluster and then we do it all again at this point k-means clustering knows that the second clustering is the best clustering so far but it doesn't know if it's the best overall so it will do a few more clusters it does as many as you tell it to do and then come back and return that one if it is still the best question how do you figure out what

and then come back and return that one if it is still the best question how do you figure out what value to use for K with this data it's obvious that we should set K to three but other times it is not so clear one way to decide is to just try different values for K we'll start with k equals 1 k equals 1 is the worst case scenario we can quantify its badness with the total variation now try K equals 2 K equals 2 is better and we can quantify how much better by comparing the total variation

equals 2 K equals 2 is better and we can quantify how much better by comparing the total variation within the two clusters to K equals 1 now try K equals 3 k equals 3 is even better we can quantify how much better by comparing the total variation within the three clusters to k equals 2 now try k equals 4 the total variation within each cluster is less than when K equals 3 each time we add a new cluster the total variation within each cluster is smaller than before and when there is only one

cluster the total variation within each cluster is smaller than before and when there is only one point per cluster the variation equals 0 however if we plot the reduction in variance per value for K there is a huge reduction in variation with K equals three but after that the variation doesn't go down as quickly this is called an elbow plot and you can pick K by finding the elbow in the plot question how is k-means clustering different from hierarchical clustering k-means clustering

plot question how is k-means clustering different from hierarchical clustering k-means clustering specifically tries to put the data into the number of clusters you tell it to hierarchical clustering just tells you pairwise what two things are most similar question what if our data isn't plotted on a number line just like before you pick three random points and we use the Euclidean distance in two dimensions the Euclidean distance is the same thing as the Pythagorean theorem then just like

two dimensions the Euclidean distance is the same thing as the Pythagorean theorem then just like before we assign the point to the nearest cluster and just like before we then calculate the center of each cluster and re cluster BAM although this looks good the computer doesn't know that until it does the clustering a few more times question what if my data is a heatmap well if we just have two samples we can rename them x and y and we can then plot the data in an XY graph then we can cluster

samples we can rename them x and y and we can then plot the data in an XY graph then we can cluster just like before note we don't actually need to plot the data in order to cluster it we just need to calculate the distances between things when we have two samples or two axes the Euclidean distance is the square root of x squared plus y squared when we have three samples or three axes the Euclidean distance is the square root of x squared plus y squared plus Z squared and when we have four

distance is the square root of x squared plus y squared plus Z squared and when we have four samples or four axes the Euclidean distance is the square root of x squared plus y squared plus Z squared plus a squared etc etc etc hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest well click the like button down below and consider buying one or two of my original songs alright tune in

the like button down below and consider buying one or two of my original songs alright tune in next time for another exciting stat quest

dp scan clusters just like a person can statquest [Music] hello i'm josh starmer and welcome to statquest today we're going to talk about clustering with db scan and it's going to be clearly explained now imagine we collected weight and height measurements from a bunch of people and we plotted the people on a two-dimensional graph like this where we have weight on the x-axis the first dimension and height on the y-axis the second dimension by eye we can see two different clusters by identifying

height on the y-axis the second dimension by eye we can see two different clusters by identifying two different but relatively dense clumps of people in contrast these people that are far from everyone else look a little bit like outliers so by eye clustering this data is pretty easy however because these clusters are nested meaning the green cluster wraps around the blue cluster a relatively standard clustering method like k-means clustering might have difficulty identifying these two clusters

clustering method like k-means clustering might have difficulty identifying these two clusters instead because of the nesting a simple clustering method might get something weird like this where these points are assigned to the blue cluster even though they look like they belong to the green cluster so we need a clustering algorithm that can handle nested clusters also remember this two-dimensional graph only uses weight and height data but if we wanted to include each person's age we would

graph only uses weight and height data but if we wanted to include each person's age we would have to add a third axis and now our graph is three-dimensional drawing a three-dimensional graph on a two-dimensional computer screen is awkward but possible however if we wanted to include four or more features we'd need to draw a four or more dimensional graph and that's not possible and if we can't draw and look at a four or more dimensional graph then we need a way to identify nested clusters that

and look at a four or more dimensional graph then we need a way to identify nested clusters that we cannot see by eye the good news is that there are clustering algorithms that can identify nested clusters in high dimensions one of these algorithms is called db scan and that's what we'll talk about today so let's go back to the original two-dimensional graph and see how db scan tries to mimic what we can easily do by eye now remember by eye we identify clusters by the densities of the points

we can easily do by eye now remember by eye we identify clusters by the densities of the points clusters are in high density regions and outliers tend to be in low density regions so let's see how dbscan uses the densities of the points to identify these two clusters bam now starting with the raw unclustered data the first thing we can do is count the number of points close to each point for example if we start with this red point and we draw an orange circle around it then we can see that the

if we start with this red point and we draw an orange circle around it then we can see that the orange circle overlaps at least partially eight other points so the red point is close to eight other points note the radius of the orange circle is user defined so when using dbscan you may need to fiddle around with this parameter now this red point is close to five other points because the orange circle overlaps at least partially five other points this red point is close to six other points and

overlaps at least partially five other points this red point is close to six other points and this red point is close to seven other points this red point is only close to two other points and this red point is not close to any other point because the orange circle does not overlap anything else likewise for all the remaining points we count the number of close points now in this example we will define a core point to be one that is close to at least four other points note the number of close

define a core point to be one that is close to at least four other points note the number of close points for a core point is user defined so when using db scan you might need to fiddle with this parameter as well anyway these four points are some of the core points because their orange circles overlap at least four other points hooray but neither of these points are core points because their orange circles do not overlap four or more other points ultimately we can call all of these red points

circles do not overlap four or more other points ultimately we can call all of these red points core points because they are all close to four or more other points and the remaining points are non-core now we randomly pick a core point and assign it to the first cluster next the core points that are close to the first cluster meaning they overlap the orange circle are all added to the first cluster then the core points that are close to the growing first cluster join it and extend it to other

then the core points that are close to the growing first cluster join it and extend it to other core points that are close by here we see two core points and one non-core point that are all close to the growing first cluster and at this point we only add the core points to the first cluster that said eventually we will add this non-core point but right now we are only adding core points ultimately all of the core points that are close to the growing first cluster are added to it and then used

all of the core points that are close to the growing first cluster are added to it and then used to extend it further bam note at this point every single point in the first cluster is a core point and because we can no longer add any more core points to the first cluster we add all of the non-core points that are close to the core points to the first cluster for example this point which is a non-core point is close to a core point in the first cluster so we add it to the first cluster however

point is close to a core point in the first cluster so we add it to the first cluster however because this is not a core point we do not use it to extend the first cluster any further that means that this other non-core point which is close to the non-core point that was just made part of the first cluster will not be added to the first cluster because it is not close to a core point so unlike core points non-core points can only join a cluster they cannot extend it further now we add all of

core points non-core points can only join a cluster they cannot extend it further now we add all of the non-core points that are close to core points in the first cluster to the first cluster and now we are done creating the first cluster double bam to summarize how the first cluster was formed we picked a random core point and it started the first cluster then neighboring core points joined and extended the first cluster [Laughter] and non-core points only joined the first cluster bam now

and extended the first cluster [Laughter] and non-core points only joined the first cluster bam now because none of these core points are close to the first cluster they form a new second cluster because they are close to each other and the non-core points that are close to the second cluster are added to it lastly because all of the core points have been assigned to a cluster we're done making new clusters and any remaining non-core points that are not close to core points in either cluster

new clusters and any remaining non-core points that are not close to core points in either cluster are not added to clusters and called outliers and that is how the db scan algorithm works triple bam note as we just saw clusters are created sequentially that means if we had a non-core point close to both clusters then when we built the first cluster beep we would add this non-core point to the first cluster because it is close to a core point along with all of the other non-core points that

first cluster because it is close to a core point along with all of the other non-core points that were close and now that this point is part of the first cluster it is no longer eligible to be in any other cluster small bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this

for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

[Music] St Quest St Quest stack Quest hello and welcome to stack Quest stack Quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about the K nearest neighbors algorithm which is a super simple way to classify data in a nutshell if you already had a lot of data that Define these cell types we could use it to decide which type of cell this guy is let's see it in action step one start with a data

use it to decide which type of cell this guy is let's see it in action step one start with a data set with known categories in this case we have different cell types from an intestinal tumor we then cluster that data in this case we used PCA step two add a new cell with unknown category to the plot we don't know this cell's category because it was taken from another tumor where the cells were not properly sorted and so what we want to do is we want to classify this new cell we want to figure

properly sorted and so what we want to do is we want to classify this new cell we want to figure out what cell it's most similar to and then we're going to call it that type of cell step three we classify the new cell by looking at the nearest nearest annotated cells I.E the nearest neighbors if the K in K nearest neighbors is equal to one then we will only use the nearest neighbor to define the category in this case the category is green because the nearest neighbor is already known to be the

category in this case the category is green because the nearest neighbor is already known to be the green cell type if k equals 11 we would use the 11 nearest Neighbors in this case the category is still green because the 11 cells that are closest to the unknown cell are already green now the new cell is somewhere more interesting it's about halfway between the green and the red cells if k equals 11 and the new cells between two or more categories we simply pick the category that gets the most

11 and the new cells between two or more categories we simply pick the category that gets the most votes in this case seven nearest neighbors are red three nearest neighbors are orange one nearest neighbor is green since red got the most votes the final assignment is red this same principle applies to heat Maps this heat map was drawn with the same data and clustered using hierarchical clustering if our new cell ended up in the middle of the light blue cluster and if k equals 1 we just look at

if our new cell ended up in the middle of the light blue cluster and if k equals 1 we just look at the nearest cell and that cell is light blue so we classify the unknown cell as a light blue cell if k equals 5 we'd look at the five nearest cells which are also light blue so we'd still classify the unknown cell as light blue if the new cell ended up closer to the edge of the light blue cells and k equals 11 then we take a vote seven nearest neighbors are light blue and four are light green so

k equals 11 then we take a vote seven nearest neighbors are light blue and four are light green so we'd still go with light blue if the new cell is right between two categories well if K is odd then we can avoid a lot of ties if we still get a tied vote we can flip a coin or decide not to assign the cell to a category before we go let's talk about a little machine learning SL data mining terminology the data used for the initial clustering the data where we know the categories in advance is

the data used for the initial clustering the data where we know the categories in advance is called training data bam a few thoughts on picking a value for K there is no physical or biological way to determine the best value for K so you may have to try out a few values before settling on one do this by pretending part of the training data is unknown and then what you do is you categorize that unknown data using the K nearest neighbor algorithm and you assess how good the new categories match

data using the K nearest neighbor algorithm and you assess how good the new categories match what you know already low values for K like k equal 1 or k equals 2 can be noisy and subject to the effects of outliers large values for K smooth over things but you don't want K to be so large that a c category with only a few samples in it will always be outvoted by other categories hooray we've made it to the end of another exciting stack Quest if you like this stack Quest go ahead and subscribe to

to the end of another exciting stack Quest if you like this stack Quest go ahead and subscribe to my channel and you'll see more like it and if you have any ideas of things you'd like me to do a stack Quest on feel free to put those ideas in the comments okay guess that's it tune in next time for another exciting stag Quest

I'm at home during lockdown working on my step quest yeah I'm at home during lockdown working on my stack quest yeah stack quest hello I'm Josh starburns welcome to static quest today we're gonna talk about naive Bayes and it's gonna be clearly explained this stack quest is sponsored by jad bio just add data and their automatic machine learning algorithms will do the rest of the work for you for more details follow the link in the pinned comment below note when most people want to learn about

more details follow the link in the pinned comment below note when most people want to learn about naive Bayes they want to learn about the multinomial naive bayes classifier and that's what we talk about in this video however just know that there is another commonly used version of naive Bayes called Gaussian naive Bayes classification and I cover that in a follow-up stat quest so check that one out when you're done with this quest BAM now imagine we received normal messages from friends and

out when you're done with this quest BAM now imagine we received normal messages from friends and family and we also received spam unwanted messages that are usually scams or unsolicited advertisements and we wanted to filter out the spam messages so the first thing we do is make a histogram of all the words that occur in the normal messages from friends and family we can use the histogram to calculate the probabilities of seeing each word given that it was in a normal message for example the

the probabilities of seeing each word given that it was in a normal message for example the probability we see the word dear given that we saw it in a normal message is eight the total number of times deer occurred in normal messages divided by 17 the total number of words in all of the normal messages and that gives us 0.47 so let's put that over the word dear so we don't forget it likewise the probability that we see the word friend given that we saw it in a normal message is 5 the total

the probability that we see the word friend given that we saw it in a normal message is 5 the total number of times friend occurred in normal messages divided by 17 the total number of words in all of the normal messages and that gives us zero point two nine so let's put that over the word friend so we don't forget it likewise the probability that we see the word launch given that it is in a normal message is 0.18 and the probability that we see the word money given that it is in a normal

normal message is 0.18 and the probability that we see the word money given that it is in a normal message is 0.06 now we make a histogram of all the words that occur in the spam and calculate the probability of seeing the word dear given that we saw it in the spam and that is two the number of times we saw deer in the spam divided by seven the total number of words in the spam and that gives us zero point two nine likewise we calculate the probability of seeing the remaining words given that

zero point two nine likewise we calculate the probability of seeing the remaining words given that they were in the spam BAM now because these histograms are taking up a lot of space let's get rid of them but keep the probabilities oh no it's the dreaded terminology alert because we have calculated the probabilities of discreet individual words and not the probability of something continuous like weight or height these probabilities are also called likelihoods I mention this because some

like weight or height these probabilities are also called likelihoods I mention this because some tutorials say these are probabilities and others say they are likelihoods in this case the terms are interchangeable so don't sweat it we'll talk more about probabilities versus likelihoods when we talk about Gaussian naive Bayes in the follow-up Quest now imagine we got a new message that said dear friend and we want to decide if it is a normal message or spam we start with an initial guess about

friend and we want to decide if it is a normal message or spam we start with an initial guess about the probability that any message regardless of what it says is a normal message this guess can be any probability that we want but a common guess is estimated from the training data for example since 8 of the 12 messages are normal messages our initial guess will be 0.67 so let's put that under the normal messages so we don't forget it oh no it's another dreaded terminology alert the initial

the normal messages so we don't forget it oh no it's another dreaded terminology alert the initial guests that we observe a normal message is called a prior probability now we multiply the initial guess by the probability that the word dear occurs in a normal message and the probability that the word friend occurs in a normal message now we just plug in the values that we've worked out earlier and do the math beep-boop beep-boop it and we get 0.09 we can think of 0.09 as the score that dear

and do the math beep-boop beep-boop it and we get 0.09 we can think of 0.09 as the score that dear friend gets if it is a normal message however technically it is proportional to the probability that the message is normal given that it says dear friend so let's put that on top of the normal messages so we don't forget now just like we did before we start with an initial guess about the probability that any message regardless of what it says is spam and just like before the guests can be any

that any message regardless of what it says is spam and just like before the guests can be any probability we want but a common guess is estimated from the training data and since four of the twelve messages are spam our initial guess will be 0.33 so let's put that under the spam so we don't forget it now we multiply that initial guess by the probability that the word dear occurs in spam and the probability that the word friend occurs in spam now we just plugged in the values that we worked out

that the word friend occurs in spam now we just plugged in the values that we worked out earlier and do the math BIP BIP BIP BIP BIP and we get 0.01 like before we can think of 0.01 as the score the dear friend gets if it is spam however technically it is proportional to the probability that the message is spam given that it says dear friend and because the score we got for normal message 0.09 is greater than the score we got for spam 0.01 we will decide that dear friend is a normal message

is greater than the score we got for spam 0.01 we will decide that dear friend is a normal message double BAM now before we move on to a slightly more complex situation let's review what we've done so far we started with histograms of all the words in the normal messages and all of the words in the spam then we calculated the probabilities of seeing each word given that we saw the word in either a normal message or spam then we made an initial guess about the probability of seeing a normal

a normal message or spam then we made an initial guess about the probability of seeing a normal message this guest can be anything between zero and one but we based hours on the classifications in the training data set then we made the same sort of guess about the probability of seeing spam then we multiplied our initial guests that the message was normal by the probabilities of seeing the words dear and friend given that the message was normal then we multiplied our initial guests that the

dear and friend given that the message was normal then we multiplied our initial guests that the message was spam by the probabilities of seeing the words dear and friend given that the message was spam then we did the math and decided that dear friend was a normal message because 0.09 is greater than 0.01 now that we understand the basics of how naive Bayes classification works let's look at a slightly more complicated example this time let's try to classify this message lunch money money

a slightly more complicated example this time let's try to classify this message lunch money money money money note this message contains the word money four times and since the probability of seeing the word money is much higher in spam than in normal messages then it seems reasonable to predict that this message will end up being spam so let's do the math calculating the score for a normal message works just like before we start with the initial guess then we multiply it by the probability we

works just like before we start with the initial guess then we multiply it by the probability we see lunch given that it is in a normal message and the probability we see money four times given that it is in a normal message when we do the math we get this tiny number however when we do the same calculation for spam we get zero this is because the probability we see lunch in spam is zero since it was not in the training data and when we plug in zero for the probability we see lunch given that

was not in the training data and when we plug in zero for the probability we see lunch given that it was in spam then it doesn't matter what value we picked for the initial guess that the message was spam and it doesn't matter what the probability is that we see money given that the message was spam because anything times zero is zero in other words if a message contains the word lunch it will not be classified as spam and that means we will always classify the messages with lunch in them as

not be classified as spam and that means we will always classify the messages with lunch in them as normal no matter how many times we see the word money and that's a problem to work around this problem people usually add one count represented by a black box to each word in the histograms note the number of counts we add to each word is typically referred to with the Greek letter alpha in this case alpha equals one but we could have said it to anything anyway now when we calculate the

this case alpha equals one but we could have said it to anything anyway now when we calculate the probabilities of observing each word we never get 0 for example the probability of seeing lunch given that it is in spam is 1/7 the total number of words in spam plus for the extra counts that we added and that gives us 0.09 note adding counts to each word does not change our initial guess that a message is normal or the initial guess that the message is spam because adding a count to each word did

is normal or the initial guess that the message is spam because adding a count to each word did not change the number of messages in the training data set that are normal or the number of messages that are spam now when we calculate the scores for this message we still get a small number for the normal message but now when we calculate the value for spam we get a value greater than zero and since the value for spam is greater than the one for a normal message we classify the message as spam

the value for spam is greater than the one for a normal message we classify the message as spam spam now let's talk about why naive Bayes is naive the thing that makes naive Bayes so naive is that it treats all word orders the same for example the normal message score for the phrase dear friend is the exact same for the score for friend dear in other words regardless of how the words are ordered we get 0.08 treating all word orders equal is very different from how you and I communicate every

we get 0.08 treating all word orders equal is very different from how you and I communicate every language has grammar rules and common phrases but naivebayes ignores all of that stuff instead naivebayes treats language like it is just a bag full of words and each message is a random handful of them naive bayes ignores all the rules because keeping track of every single reasonable phrase in a language would be impossible that said even though naive bayes is naive it tends to perform

in a language would be impossible that said even though naive bayes is naive it tends to perform surprisingly well when separating normal messages from spam in machine learning lingo we'd say that by ignoring relationships among words naivebayes has high bias but because it works well in practice naive Bayes has low variance shameless self-promotion if you are not already familiar with the terms bias and variance check out the quest the link is in the description below triple spam oh no it's

bias and variance check out the quest the link is in the description below triple spam oh no it's one last shameless self-promotion one awesome way to support stack quest is to purchase the naivebayes stack quest study guide it has everything you need to study for an exam or job interview it's eight pages of total awesomeness and while you're there check out the other stack quest study guides there's something for everyone hooray we've made it to the end of another exciting stat quest if you

something for everyone hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

[Music] quest hello i'm josh starmer and welcome to stat quest today we're going to talk about gaussian naive bayes and it's going to be clearly explained note this stack quest assumes that you are already familiar with the main ideas behind multinomial naive bayes if not check out the quest the link is in the description below this stack quest also assumes that you are familiar with the log function the normal or gaussian distribution and the difference between probability and likelihood if not

the normal or gaussian distribution and the difference between probability and likelihood if not check out the quests the links are in the description below imagine we wanted to predict if someone would love the 1990 movie troll 2 or not so we collected data from people that love troll 2 and from people that do not love troll 2 we measured the amount of popcorn they ate each day how much soda pop they drank and how much candy they ate the mean for popcorn for the people who love troll 2 is 24

they drank and how much candy they ate the mean for popcorn for the people who love troll 2 is 24 and the standard deviation is 4 and a gaussian or normal distribution with mean equals 24 and standard deviation equals 4 looks like this likewise the average amount of popcorn for people who do not love troll 2 is 4. and the standard deviation is 2 and that corresponds to this gaussian or normal distribution now we calculate the mean and standard deviation for soda pop for people that love troll 2

now we calculate the mean and standard deviation for soda pop for people that love troll 2 and draw the corresponding gaussian distribution then we do the same thing for the people that do not love troll 2. lastly we draw the gaussian distributions for candy gaussian naive bayes is named after the gaussian distributions that represent the data in the training data set now someone new shows up and says they eat 20 grams of popcorn and drink 500 milliliters of soda pop and eat 25 grams of candy

says they eat 20 grams of popcorn and drink 500 milliliters of soda pop and eat 25 grams of candy every day let's use gaussian naive bays to decide if they love troll 2 or not the first thing we do is make an initial guess that they love troll 2. this guess can be any probability that we want but a common guess is estimated from the training data for example since 8 of the 16 people in the training data loved troll 2 the initial guess will be 0.5 so we'll put that up here so we don't forget

data loved troll 2 the initial guess will be 0.5 so we'll put that up here so we don't forget likewise the initial guess for does not love troll 2 is 0.5 so let's put that here so we don't forget oh no it's the dreaded terminology alert the initial guesses are called prior probabilities now the score for love's troll 2 is the initial guess that the person loves troll 2 times the likelihood that they eat 10 grams of popcorn given that they love troll 2. note the likelihood is the y-axis

that they eat 10 grams of popcorn given that they love troll 2. note the likelihood is the y-axis coordinate on the curve that corresponds to the x-axis coordinate and we multiply that by the likelihood that they drink 500 milliliters of soda pop given that they love troll 2 times the likelihood that they eat 25 grams of candy given that they love troll 2. the initial guess that someone loves troll 2 is 0.5 the likelihood for popcorn is 0.06 the likelihood for soda pop is 0.004 and the

troll 2 is 0.5 the likelihood for popcorn is 0.06 the likelihood for soda pop is 0.004 and the likelihood for candy is a really really small number note when we get really really small numbers it's a good idea to take the log of everything to prevent something called underflow the general idea of underflow is every computer has a limit to how close a number can get to zero before it can no longer accurately keep track of that number when a number gets smaller than that limit we run into

longer accurately keep track of that number when a number gets smaller than that limit we run into underflow problems and errors occur so we use the log function to avoid underflow note any log will do but the natural log or log base e is the most commonly used log in statistics and machine learning so we take the log of everything and the log turns the multiplication into the sum of the individual logs the log base e of 0.5 is negative 0.69 the log of 0.06 is negative 2.8 the log of 0.004 is

logs the log base e of 0.5 is negative 0.69 the log of 0.06 is negative 2.8 the log of 0.004 is negative 5.5 and the log of this really really small number is negative hundred fifteen now we just add this up and we get negative one hundred twenty four so the log of the love's troll two score is negative one hundred twenty four bam now let's calculate the score for not loving troll 2. we start with the initial guess that someone does not love troll 2 times the likelihood that they eat 20 grams

the initial guess that someone does not love troll 2 times the likelihood that they eat 20 grams of popcorn given that they do not love troll 2 times the likelihood that they drink 500 milliliters of soda pop times the likelihood that they eat 25 grams of candy so let's plug in the numbers and take the log of everything and that turns the multiplication into the sum of logs now we just do the math and we get negative 48 and since the score for does not love troll 2 is greater than the score for

and we get negative 48 and since the score for does not love troll 2 is greater than the score for love's troll 2 we will classify this person as someone who does not love troll 2. double bam note when we look at the raw data it almost looks like we should have classified this person as someone who loves troll 2. after all they ate a lot more popcorn than the average person who doesn't love troll 2 and they drank as much soda as the average person who loves troll 2. however the big thing is

2 and they drank as much soda as the average person who loves troll 2. however the big thing is that they ate a lot more candy than the people who loved troll 2 and the log of the likelihoods for candy are way different and this difference is what made us classify the new person as someone who does not love troll 2. in other words candy can have a much larger say in whether or not someone loves troll 2 than popcorn and soda pop and this means we might only need candy to make classifications we

2 than popcorn and soda pop and this means we might only need candy to make classifications we can use cross validation to help us decide which things popcorn soda pop and or candy help us make the best classifications shameless self-promotion if you don't already know about cross-validation check out the quest the link is in the description below triple bam oh no it's another shameless self-promotion one awesome way to support statquest is to purchase the gaussian naive bayes stat quest study

one awesome way to support statquest is to purchase the gaussian naive bayes stat quest study guide it has everything you need to study for an exam or job interview it's seven pages of total awesomeness and while you're there check out the other stat quest study guides there's something for everyone hooray we've made it to the end of another exciting stack quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my

want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

i like decision trees how about you stat quest hello i'm josh darmer and welcome to statquest today we're going to talk about decision and classification trees and they're going to be clearly explained here is a simple decision tree if a person wants to learn about decision trees then they should watch this stat quest in contrast if a person does not want to learn about decision trees then check out the latest justin bieber video instead in general a decision tree makes a statement and then

out the latest justin bieber video instead in general a decision tree makes a statement and then makes a decision based on whether or not that statement is true or false it's no big deal when a decision tree classifies things into categories it's called a classification tree and when a decision tree predicts numeric values it's called a regression tree in this case we're using diet to predict a numeric value for mouse size note for the remainder of this video we are going to focus on

a numeric value for mouse size note for the remainder of this video we are going to focus on classification trees however if you want to learn more about regression trees fear not there's a whole stat quest dedicated to regression trees the link is in the description below now here's a more complicated classification tree it combines numeric data with yes no data so it's okay to mix data types in the same tree also notice that the tree asks about exercising multiple times and that the amount of

the same tree also notice that the tree asks about exercising multiple times and that the amount of time exercising isn't always the same so numeric thresholds can be different for the same data lastly the final classifications can be repeated for the most part classification trees are pretty easy to work with you start at the top and work your way down and down until you get to a point where you can't go any further and that's how you'll classify something note so far i've been labeling the

can't go any further and that's how you'll classify something note so far i've been labeling the arrows with true or false but usually it is just assumed that if a statement is true you go to the left and if a statement is false you go to the right so sometimes you see true and false labels sometimes you don't it's no big deal oh no it's the dreaded terminology alert the very top of the tree is called the root node or just the root these are called internal nodes or branches branches have

is called the root node or just the root these are called internal nodes or branches branches have arrows pointing to them and they have arrows pointing away from them lastly these are called leaf nodes or just leaves leaves have arrows pointing to them but there are no arrows pointing away from them bam now that we know how to use and interpret classification trees let's learn how to build one from raw data this data tells us whether or not someone loves popcorn whether or not they love soda

from raw data this data tells us whether or not someone loves popcorn whether or not they love soda their age and whether or not they love the 1991 blockbuster cool as ice starring vanilla ice so we will use this data to build this classification tree that predicts whether or not someone loves cool as ice now pretend you've never seen this tree before and let's see how to build a tree starting with just data the first thing we do is decide whether loves popcorn love soda or age should be the

with just data the first thing we do is decide whether loves popcorn love soda or age should be the question we ask at the very top of the tree to make that decision we'll start by looking at how well loves popcorn predicts whether or not someone loves cool as ice to do this we'll make a super simple tree that only asks if someone loves popcorn and then we'll run the data down the tree for example the first person in the dataset loves popcorn so they go to the leaf on the left and because they

the first person in the dataset loves popcorn so they go to the leaf on the left and because they do not love cool as ice we'll keep track of that by putting a 1 under the word no the second person in the data set also loves popcorn so they also go to the leaf on the left and because they also do not love cool as ice we increment no to two the third person does not love popcorn so they go to the leaf on the right and because they love cool as ice we put a 1 under the word yes likewise we run

leaf on the right and because they love cool as ice we put a 1 under the word yes likewise we run the remaining rows down the tree keeping track of whether or not each one loves cool as ice bam now let's do the exact same thing for love soda at the two little trees we see that neither one does a perfect job predicting who will and who will not love cool as ice specifically these three leaves contain mixtures of people that do and do not love cool as ice dread it's another terminology alert

contain mixtures of people that do and do not love cool as ice dread it's another terminology alert because these three leaves all contain a mixture of people who do and do not love cool as ice they are called impure in contrast this leaf only contains people who do not love cool as ice because both leaves in the love's popcorn tree are impure and only one leaf in the love soda tree is impure it seems like love soda does a better job predicting who will and who will not love cool as ice but it

seems like love soda does a better job predicting who will and who will not love cool as ice but it would be nice if we could quantify the differences between love's popcorn and love soda the good news is that there are several ways to quantify the impurity of the leaves one of the most popular methods is called genie impurity but there are also fancy sounding methods like entropy and information gain however numerically the methods are all quite similar so we will focus on genie impurity since

gain however numerically the methods are all quite similar so we will focus on genie impurity since not only is it very popular i think it is the most straightforward so let's start by calculating the genie impurity for love's popcorn to calculate the genie impurity for love's popcorn we start by calculating the genie impurity for the individual leaves the genie impurity for the leaf on the left is 1 minus the probability of yes squared minus the probability of no squared so we start out with

is 1 minus the probability of yes squared minus the probability of no squared so we start out with one then we subtract the squared probability of someone in this leaf loving cool as ice which is one the number of people in the leaf who loved cool as ice divided by the total number of people in the leaf four and then the whole term is squared lastly we subtract the squared probability of someone in this leaf not loving cool as ice which is three the number of people in the leaf who did not love

this leaf not loving cool as ice which is three the number of people in the leaf who did not love cool as ice divided by the total number of people in the leaf squared and when we do the math we get 0.375 so let's put 0.375 under the leaf on the left so we don't forget it now let's calculate the genie impurity for the leaf on the right just like before we start out with one then we subtract the squared probability of someone in this leaf loving cool as ice and the squared probability of someone

probability of someone in this leaf loving cool as ice and the squared probability of someone in this leaf not a loving cool is ice and when we do the math we get 0.444 now because the leaf on the left has four people in it and the leaf on the right only has three people in it the leaves do not represent the same number of people thus the total genie impurity is the weighted average of the leaf impurities we start by calculating the weight for the leaf on the left the weight for the left leaf

impurities we start by calculating the weight for the leaf on the left the weight for the left leaf is the total number of people in the leaf four divided by the total number of people in both leaves seven then we multiply that weight by its associated genie impurity 0.375 now we add the weighted impurity for the leaf on the right which is the total number of people in the leaf 3 divided by the total number of people in both leaves 7 times the associated genie impurity 0.444 and when we do the

number of people in both leaves 7 times the associated genie impurity 0.444 and when we do the math we get 0.405 so the genie impurity for love's popcorn is 0.405 likewise the genium purity for love soda is 0.214 now we need to calculate the genie impurity for age however because age contains numeric data and not just yes no values calculating the genie impurity is a little more involved the first thing we do is sort the rows by age from lowest value to highest value then we calculate the

first thing we do is sort the rows by age from lowest value to highest value then we calculate the average age for all adjacent people lastly we calculate the geniu impurity values for each average age for example to calculate the gd impurity for the first value we put age less than 9.5 in the root and because the only person with age less than 9.5 does not love cool is ice we put a 0 under yes and a 1 under no then everyone with age greater than or equal to 9.5 goes to the leaf on the right

and a 1 under no then everyone with age greater than or equal to 9.5 goes to the leaf on the right now we calculate the genie impurity for the leaf on the left and get zero and this makes sense because every single person in this leaf does not love cool as ice so there is no impurity then we calculate the genie impurity for the leaf on the right and get 0.5 now we calculate the weighted average of the two impurities to get the total genie impurity and we get 0.429 likewise we calculate the

of the two impurities to get the total genie impurity and we get 0.429 likewise we calculate the genie impurities for all of the other candidate values these two candidate thresholds 15 and 44 are tied for the lowest impurity 0.343 so we can pick either one in this case we'll pick 15. however remember that we are comparing genie impurity values for age loves popcorn and love soda to decide which features should be at the very top of the tree earlier we calculated the genie impurity values for

features should be at the very top of the tree earlier we calculated the genie impurity values for love's popcorn and love soda and now we have the genie impurity for age and because love soda has the lowest genie impurity overall we know that its leaves had the lowest impurity so we put love soda at the top of the tree bam now the four people that love soda go to a node on the left and the people that do not love soda go to a node on the right now let's focus on the node on the left all four

that do not love soda go to a node on the right now let's focus on the node on the left all four people that love soda are in this node three of these people love cool as ice and one does not so this node is impure so let's see if we can reduce the impurity by splitting the people that love soda based on love's popcorn or age we'll start by asking the four people that love soda if they also love popcorn because two of the four people that love soda also love popcorn they end up in the leaf on

popcorn because two of the four people that love soda also love popcorn they end up in the leaf on the left the remaining two people that love soda but do not love popcorn end up on the right and the total genie impurity for this split is 0.25 so let's put 0.25 here so we don't forget now we test different age thresholds just like before only this time we only consider the ages of people who love soda and age less than 12.5 gives us the lowest impurity zero because both leaves have no impurity

soda and age less than 12.5 gives us the lowest impurity zero because both leaves have no impurity at all so let's put zero here now because zero is less than 0.25 we will use age less than 12.5 to split this node into leaves note these are leaves because there is no reason to continue splitting these people into smaller groups likewise this node consisting of the three people who do not love soda is also a leaf because there is no reason to continue splitting these people into smaller groups

is also a leaf because there is no reason to continue splitting these people into smaller groups now there is just one last thing we need to do before we are done building this tree we need to assign output values for each leaf generally speaking the output of a leaf is whatever category that has the most values in other words because the majority of the people in these leaves do not love cool as ice the output values are does not love cool as ice and because the majority of the people in this

ice the output values are does not love cool as ice and because the majority of the people in this leaf love cool as ice the output value is love's cool as ice hooray we finished building a tree from this data double bam now if someone new comes along and we want to predict if they will love cool as ice then we run the data down our tree and because they love soda they go to the left and because they are 15 so age less than 12.5 is false they end up in this leaf and we predict that they will

they are 15 so age less than 12.5 is false they end up in this leaf and we predict that they will love cool as ice triple bam okay now that we understand the main ideas of how to build and use classification trees let's discuss one technical detail remember when we built this tree only one person in the original data set made it to this leaf because so few people made it to this leaf it's hard to have confidence that it will do a great job making predictions with future data and it is possible

have confidence that it will do a great job making predictions with future data and it is possible that we have overfit the data note if the term overfit is new to you don't don't instead check out the stack quest on bias and variance in machine learning regardless in practice there are two main ways to deal with this problem one method is called pruning and there's a whole stack quest dedicated to it so check it out alternatively we can put limits on how trees grow for example by requiring

to it so check it out alternatively we can put limits on how trees grow for example by requiring three or more people per leaf now we end up with an impure leaf but also a better sense of the accuracy of our prediction because we know that only 75 percent of the people in the leaf love to cool as ice note even when a leaf is impure we still need an output value to make a classification and since most of the people in this leaf love cool as ice that will be the output value also note when we

most of the people in this leaf love cool as ice that will be the output value also note when we build a tree we don't know in advance if it is better to require three people per leaf or some other number so we test different values with something called cross validation and pick the one that works best and if you don't know what cross validation is check out the quest bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the

self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the

buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

StatQuest: Decision Trees, Part 2 - Feature Selection and Missing Data

when you've got too much data don't freak out when you've got missing data don't freak out you've got stat quest hello I'm Josh star and welcome to stat quest today we're gonna be talking about decision trees part two feature selection and missing data this is just a short and sweet stat quest to touch on a few topics we didn't get to in the original stat quest on decision trees in the first stack quest on decision trees we started with a table of data and built a decision tree that gave us a

quest on decision trees we started with a table of data and built a decision tree that gave us a sense of how likely a patient might have heart disease if they have other symptoms we first asked if a patient had good blood circulation if so we then asked if they had blocked arteries and if so we then asked if they had chest pain if so there's a good chance that they have heart disease since 17 people with similar answers did and only three people with similar answers did not if they don't have

with similar answers did and only three people with similar answers did not if they don't have chest pain there's a good chance that they do not have heart disease however remember that if someone had good circulation and did not have blocked arteries we did not ask about chest pain because there was less impurity in our results if we didn't in other words we calculated the impurity after separating the patients using chest pain then we calculated impurity without separating and since the

the patients using chest pain then we calculated impurity without separating and since the impurity was lower when we didn't separate we made it a leaf node now imagine of chest pain never gave us a reduction in impurity score if this were the case we would never use chest pain to separate the patients and chest pain would not be part of our tree now even though we have data for chest pain it is not part of our tree anymore all that's left are good circulation and blocked arteries this is a

is not part of our tree anymore all that's left are good circulation and blocked arteries this is a type of automatic feature selection however we could also have created a threshold such that the impurity reduction has to be large enough to make a big difference as a result we end up with simpler trees that are not over fit oh no some jargon just snuck up on us overfit means our tree does well with the original data the data we use to make the tree but doesn't do well with any other data set

with the original data the data we use to make the tree but doesn't do well with any other data set decision trees have the downside of often being overfit requiring each split to make a large reduction in impurity helps a tree from being over fit so in a nutshell that's what feature selection is all about now let's talk about missing data in the first video on decision trees we calculated impurity for blocked arteries boota boota boota boota boota boota boo and we skipped this patient since we

for blocked arteries boota boota boota boota boota boota boo and we skipped this patient since we didn't know if they had blocked arteries or not but it doesn't have to be that way we could pick the most common option if overall yes occurred more times than no we could put yes here alternatively we could find another column that has the highest correlation with blocked arteries and use that as a guide in this case chest pain and blocked arteries are often very similar the first patient has no

guide in this case chest pain and blocked arteries are often very similar the first patient has no in both categories the second patient has yes in both categories the third patient has no in both categories and so for the fourth patient since chest pain is yes we'll make blocked arteries yes as well now imagine we had weight data instead of blocked artery data we could replace this missing value with the mean or the median alternatively we could find another column that has the highest

value with the mean or the median alternatively we could find another column that has the highest correlation with weight in this case height is highly correlated with weight and then we can do a linear regression on the two columns and use the least squares line to predict the value for weight so you can see that if we're missing some data there are a lot of ways to guess at what it might be BAM hooray we've made it to the end of another exciting stat quest if you like this stat quest and want

hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more like it please subscribe and if you have any ideas for future stat quests well put them in the comments below until next time quest on

smelly stat smelly stat how are they training you I hope they're using stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about how to prune regression trees there are several methods for pruning regression trees the one we'll talk about in this quest is called cost complexity pruning aka weakest link pruning we'll start by giving a general overview of how cost complexity pruning works and then will describe how it's used to build regression trees note this

complexity pruning works and then will describe how it's used to build regression trees note this stat quest assumes that you are already familiar with regression trees if not check out the quest the link is in the description below also note this stat quest assumes that you are already familiar with cross-validation if not check out the quest in the stack quest on regression trees we had this data given different drug dosages on the x-axis we measured the drug effectiveness on the y-axis when

given different drug dosages on the x-axis we measured the drug effectiveness on the y-axis when the drug dosage was too low or too high the drug was not effective medium dosages were very effective and moderately high dosages were moderately effective we then fit a regression tree to the data and each leaf correspond to the average drug effectiveness from a different cluster of observations this tree does a pretty good job reflecting the training data because each leaf represents a value that

tree does a pretty good job reflecting the training data because each leaf represents a value that is close to the data however what if these red circles were testing data these three observations are pretty close to the predicted values so their residuals the difference between the observed and predicted values are not very large similarly the residuals for these observations in the testing data are relatively small however the residuals for these observations are larger than before and the

are relatively small however the residuals for these observations are larger than before and the residuals for these observations are much larger these four observations from the training data with 100% drug effectiveness now look a little bit like outliers and that means that we over fit the regression tree to the training data one way to prevent over-fitting a regression tree to the training data is to remove some of the leaves and replace the split with a leaf that is the average of a larger

is to remove some of the leaves and replace the split with a leaf that is the average of a larger number of observations now all of the observations between 14.5 and 29 go to the leaf on the far right the large residuals tell us that the Nutri doesn't fit the training data as well as before but the new subtree does a much better job with the testing data thus the main idea behind pruning a regression tree is to prevent overfitting the training data so that the tree will do a better job with the

tree is to prevent overfitting the training data so that the tree will do a better job with the testing data BAM note if we wanted to prune the tree more we could remove these two leaves and replace the split with a leaf that is the average of a larger number of observations and we could then remove these two leaves and replace the split with a leaf that is the average of all of the observations so the question is how do we decide which tree to use in this stat quest we will answer that

so the question is how do we decide which tree to use in this stat quest we will answer that question with cost complexity pruning the first step in cost complexity pruning is to calculate the sum of the squared residuals for each tree in this example we'll start with the original full-sized tree here is the original full-sized tree some of the squared residuals for the observations with dosages less than 14.5 is d tu tutitu tutitu tu tu 320 point 8 so we'll save that sum of squared residuals

less than 14.5 is d tu tutitu tutitu tu tu 320 point 8 so we'll save that sum of squared residuals underneath the corresponding leaf some of squared residuals for observations with dosages greater than or equal to 29 is 75 some of squared residuals for observations with dosages greater than or equal to 23 in less than 29 is 140 8.8 in the sum of squared residuals for observations with dosages greater than or equal to 14.5 in less than twenty three point five is zero thus the total sum of

greater than or equal to 14.5 in less than twenty three point five is zero thus the total sum of squared residuals for the whole tree is 320 plus seventy five plus one hundred forty eight point eight plus zero equals five hundred forty three point eight so let's put SSR equals five hundred forty three point eight on top of the original full-sized tree now let's calculate the sum of squared residuals for the subtree with one fewer leaf going back to the data some of squared residuals for when

for the subtree with one fewer leaf going back to the data some of squared residuals for when dosage is less than 14.5 is the same as before and it's the same for when dosage is greater than or equal to 29 but we have to calculate a new sum of squared residuals for when the dosage is between 14.5 and 29 thus the total sum of squared residuals for this tree is three hundred twenty plus seventy five plus five thousand ninety nine point eight which equals five thousand four hundred ninety four

five plus five thousand ninety nine point eight which equals five thousand four hundred ninety four point eight so let's put SSR equals five thousand four hundred ninety four point eight on top of the sub tree with three leaves similarly the sum of squared residuals for the subtree with two leaves is nineteen thousand two hundred forty three point seven so we put SSR equals nineteen thousand two hundred forty three point seven on top of the subtree with two leaves lastly the sum of squared

two hundred forty three point seven on top of the subtree with two leaves lastly the sum of squared residuals for the subtree with only one leaf is twenty eight thousand eight hundred ninety seven point two so let's put SSR equals twenty eight thousand eight hundred ninety seven point two on top of the sub tree with one leaf note the sum of squared residuals is relatively small for the original full-size tree but each time we remove a leaf the sum of squared residuals gets larger and larger

full-size tree but each time we remove a leaf the sum of squared residuals gets larger and larger however we knew that was going to happen because the whole idea was for the pruned trees to not fit the training data as well as the full sized tree so how do we compare these trees weakest link pruning works by calculating a tree score that is based on the sum of squared residuals for the tree or subtree and a tree complexity penalty that is a function of the number of leaves or terminal nodes in

and a tree complexity penalty that is a function of the number of leaves or terminal nodes in the tree or subtree the tree complexity penalty compensates for the difference in the number of leaves note alpha is a tuning parameter that we find using cross-validation and we'll talk more about it in a bit for now let's let alpha equal 10,000 now let's calculate the tree score for each tree the tree score for the original full-sized tree is the total SSR for the tree which is five hundred forty

score for the original full-sized tree is the total SSR for the tree which is five hundred forty three point eight plus ten thousand times T the total number of leaves which is four so the tree score for the original full-size tree is forty thousand five hundred forty three point eight now let's save the tree score below the tree and calculate the tree score for the subtree with one fewer leaf the sum of squared residuals for this subtree is five thousand four hundred ninety four point eight

the sum of squared residuals for this subtree is five thousand four hundred ninety four point eight and since there are three leaves T equals three and the total tree score equals thirty-five thousand four hundred ninety four point eight the tree score for the subtree with two leaves is be boo-boo-boo-boo-boo-boo-boop thirty-nine thousand two hundred forty three point seven lastly the tree score for the subtree with only one leaf is EP boopy boopy boopy boopy 38 thousand eight hundred ninety

for the subtree with only one leaf is EP boopy boopy boopy boopy 38 thousand eight hundred ninety seven point two note because alpha equals 10,000 the tree complexity penalty for the tree with one leaf was 10,000 and the tree complexity penalty for the tree with two leaves was 20,000 and the tree complexity penalty for the tree with three leaves was 30,000 and the tree complexity penalty for the original full size tree with four leaves was 40,000 thus the more leaves the larger the penalty of

original full size tree with four leaves was 40,000 thus the more leaves the larger the penalty of calculated tree scores for all of the trees we pick this subtree because it has the lowest tree score double bam note if we set alpha equals 22,000 and calculate the tree scores we would use the subtree with only one leaf because it has the lowest tree score thus the value for alpha makes a difference in our choice of subtree so let's talk about how to build a pruned regression tree and how to

in our choice of subtree so let's talk about how to build a pruned regression tree and how to find the best value for alpha first using all of the data build a full sized regression tree note this full size tree is different than before because it was fit to all of the data not just the training data also note this full-size tree has the lowest tree score when alpha equals zero this is because when alpha equals zero the tree complexity penalty becomes zero and the tree score is just the sum of

alpha equals zero the tree complexity penalty becomes zero and the tree score is just the sum of the squared residuals and as we saw earlier all of the sub trees will have larger sum of squared residuals so let's put alpha equals zero here to remind us that this tree has the lowest tree score when alpha equals zero now we will increase alpha until pruning leaves will give us a lower tree score in this case when alpha equals 10,000 we'll get a lower tree score if we remove these leaves and use

this case when alpha equals 10,000 we'll get a lower tree score if we remove these leaves and use this sub tree now we increase alpha again until pruning leaves will give us a lower tree score in this case when alpha equals 15,000 we will get a lower tree score if we remove these leaves and use this sub tree instead and when alpha equals 22,000 we will get a lower tree score if we remove these leaves and use this subtree instead in the end different values for alpha give us a sequence of trees

and use this subtree instead in the end different values for alpha give us a sequence of trees from full sized to just a leaf now go back to the full data set and divided into training and testing data sets and just using the training data use the Alpha values we found before to build a full tree and a sequence of sub trees that minimize the tree score in other words when alpha equals zero we build a full-sized tree since it will have the lowest tree score however when alpha equals 10,000 we

a full-sized tree since it will have the lowest tree score however when alpha equals 10,000 we will get a lower tree score if we prune these leaves and use this tree instead and when alpha equals 15,000 we will get a lower tree score if we prune these leaves and use this tree instead lastly when alpha equals 22,000 we will get a lower tree score if we prune these two leaves and use this tree instead now calculate the sum of squared residuals for each new tree using only the testing data in this

now calculate the sum of squared residuals for each new tree using only the testing data in this case the tree with alpha equals 10,000 had the smallest sum of squared residuals for the testing data now we go back and create new training data and a new testing data just using the new training data build a new sequence of trees from full sized to a leaf using the Alpha values we found before then we calculate the sum of squared residuals using the new testing data this time the tree with alpha

we calculate the sum of squared residuals using the new testing data this time the tree with alpha equals zero had the lowest sum of squared residuals now we just keep repeating until we have done 10-fold cross-validation and the value for alpha that on average gave us the lowest sum of squared residuals with the testing data is the final value for alpha in this case the optimal trees built with alpha equals 10,000 had on average the lowest sum of squared residuals so alpha equals 10,000 is our

equals 10,000 had on average the lowest sum of squared residuals so alpha equals 10,000 is our final value lastly we go back to the original trees and sub trees made from the full data and pick the tree that corresponds to the value for alpha that we selected sub-tree will be the final pruned tree triple bam hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest consider contributing

and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

One-Hot, Label, Target and K-Fold Target Encoding, Clearly Explained!!!

one hot label Target encoding yeah yeah stack Quest hello I'm Josh starmer and welcome to statquest today we're going to talk about one hot label and Target encoding and they're going to be clearly explained you don't have to worry about the details of scaling your stuff up in the cloud cause lightning will take care of it for you bam this stat Quest is also brought to you by the letters a b and c a always b b c curious always be curious imagine we had this data and we wanted to use favorite

c a always b b c curious always be curious imagine we had this data and we wanted to use favorite color and height to predict if someone loves Troll 2 which is a movie that some people love and some people don't in this case favorite color has three discrete values blue red and green now in theory discrete features like favorite color are fine for most machine learning algorithms but in practice a lot of popular machine learning algorithms including neural networks do not work well with them as

lot of popular machine learning algorithms including neural networks do not work well with them as a result discrete data are often converted into numerical values before being used for machine learning one popular method for converting discrete variables or features into numbers is to use something called one hot encoding when we have three or more options for a discrete variable and in the case of favorite color we have three options we start by creating a new column for each option in this

of favorite color we have three options we start by creating a new column for each option in this case that means creating three new columns blue red and green now in the blue column we set the value to 1 if we had blue in the original favorite color column and we set the remaining values to zero likewise for the red column we set the value to 1 the one time we had read in the original favorite color column and we set the remaining values to zero lastly for the green column we set the value to

column and we set the remaining values to zero lastly for the green column we set the value to 1 if we had green in the original favorite color column and we set the remaining values to zero note the last column loves Troll 2 is also discrete but it only has two options yes and no so we simply replace yes with one and no with zero and now all of the columns in our new data set are numeric and can be used with algorithms that don't do well with discrete data like neural networks or XG boost bam

be used with algorithms that don't do well with discrete data like neural networks or XG boost bam using one hot encoding to convert discrete data into numeric data works fine when we don't have too many options in this case we only have three options for favored color so we replace favorite color with three new columns but when we have a lot of options for example if we had a column of postal codes and there are 41 683 postal codes in the United States then we would end up replacing the one

codes and there are 41 683 postal codes in the United States then we would end up replacing the one postal code column with 41 683 new columns which might make the data difficult to work with so when we have tons of options for a discrete variable one alternative to one hot encoding is to Simply assign numbers from low to high to each option so in this case we might set blue to zero red to one and green to two and just like before we could convert Love's Troll 2 to be numeric by setting yes to

green to two and just like before we could convert Love's Troll 2 to be numeric by setting yes to one and no to zero simply converting the discrete values to random numbers like what we did here is called label encoding and again just like before all of the columns are now numeric and we can run the data through a neural network double bam note one thing that people don't like about using label encoding is that the numbers we use are just arbitrary and some machine learning algorithms will

encoding is that the numbers we use are just arbitrary and some machine learning algorithms will treat the order of the numbers as if they might mean something and that can cause problems for example a decision tree splitting on favored color would be forced to group red and green together or blue and red together simply because of the random numbers we assign to each color so instead of just picking random numbers to represent the options blue red and green we can calculate the mean value of

random numbers to represent the options blue red and green we can calculate the mean value of the target the thing we want to predict which in this case is loves Troll 2 for each option for example of the three people that like the color blue only one of them loves troll 2. so the mean value for blue is 1 divided by 3 or 0.33 so we replace blue with 0.33 likewise because only one person likes red and they do not love Troll 2 the mean for red is zero so we replace red with zero lastly because

and they do not love Troll 2 the mean for red is zero so we replace red with zero lastly because two of three people who like green also love Troll 2 we replace green with 0.67 because we use the target the thing we want to predict to determine what values to replace the discrete options this method is called Target encoding that being said we've only talked about the simplest type of Target encoding a more commonly used version of Target encoding deals with the fact that we only had one person

a more commonly used version of Target encoding deals with the fact that we only had one person who liked the color red and that means we only used one person to determine the mean value for red and thus we don't have a lot of data supporting the use of zero to replace red in contrast both blue and green have more data three people each supporting the values we use to replace them because less data supports the value we replaced red with we have less confidence that we replaced red with the

data supports the value we replaced red with we have less confidence that we replaced red with the best value than we have for blue and green so in order to deal with this target encoding usually is done using a weighted mean that combines the mean for a specific option like red with the overall mean of the target which is Love's troll 2. for example in order to use the fancier Target encoding with our data we start by plugging in the mean of the target for blue 1 divided by three then because

our data we start by plugging in the mean of the target for blue 1 divided by three then because three people were used to calculate the mean for blue we plug in 3 for n then we plug in the overall main for the Target loves troll 2. 3 divided by 7 because overall three of the seven people love troll 2. now we just need to pick a value for M the weight for the overall mean m is a user-defined parameter or hyper parameter and in this example we set m equal to 2. setting m equal to 2 means we need

or hyper parameter and in this example we set m equal to 2. setting m equal to 2 means we need at least three rows of data before the option mean the mean we calculated for blue becomes more important than the overall mean now we just do the math and get 0.37 so we plug in 0.37 for blue now we calculate the weighted mean for red beep beep boop and we get 0.29 so we plug in 0.29 for red lastly we calculate the weighted mean for green beep [Music] and we get 0.57 so we plug in 0.57 for green bam

calculate the weighted mean for green beep [Music] and we get 0.57 so we plug in 0.57 for green bam now let's compare the target encoding when we use the weighted mean to the Target encoding without the weighted mean the target encoding for blue and green are similar to what they were before and this makes sense because we had a relatively large amount of data for both blue and green in contrast with the weighted mean the value for red is much closer to the overall mean than before and this

with the weighted mean the value for red is much closer to the overall mean than before and this also makes sense because we have so little data for red only one row in a way we can think of the overall mean as our best guess given no data however as we get more data more rows for each option we use the data more rather than our best guess to determine the target encoding note if you're familiar with Bayesian methods this approach may look familiar because a lot of Bayesian methods boil down to

Bayesian methods this approach may look familiar because a lot of Bayesian methods boil down to calculating a weighted average between a guess and the data as a result some people call this Bayesian mean encoding triple bam note some of you may have noticed that we are using the target the thing we want to predict to modify the values in favored color and doing this sort of thing is a data science no no that we call data leakage data leakage results in models that work great with training data

no no that we call data leakage data leakage results in models that work great with training data but not so well with testing data in other words data leakage results in models that are over fit the good news is that there are a bunch of relatively simple ways to avoid data leakage or at least reduce the amount of data leakage so that you can use Target encoding without overfitting your model one of the most popular methods to reduce leakage is called k-fold Target encoding so let's go back to

of the most popular methods to reduce leakage is called k-fold Target encoding so let's go back to the original data set that had blue red and green categories for favored color and talk about k-fold targeting coding note the word fold in k-fold Target encoding refers to splitting the data into equal sized subsets and the K refers to how many subsets we create for example if we did two-fold Target encoding then we would divide the data into two equal sized subsets note because we have an uneven

encoding then we would divide the data into two equal sized subsets note because we have an uneven number of rows we just made the subsets as similar in size as possible now to make it easier to keep track of things let's label the first subset a and the second subset B now to Target in code blue in subset a we ignore the target values in this subset in other words we ignore the values for Love's Troll 2 in this subset and instead plug the target values from subset B into the weighted mean

Troll 2 in this subset and instead plug the target values from subset B into the weighted mean equation we start by plugging in the subset b mean of the target for blue zero divided by one because the one person in subset B that likes blue does not love troll 2. then because there is only one person in subset B that likes blue we plug in 1 for n then we plug in the overall mean for the Target in subset b 1 divided by 3 because overall one of the three people in subset B loves troll 2. and just

subset b 1 divided by 3 because overall one of the three people in subset B loves troll 2. and just like we did before we'll set m equal to 2. now we just do the math and get 0.22 so we plug in 0.22 for the two rows and subset a with blue now we need to Target and code the one row with blue in subset B so we ignore the target values in this subset and instead plug the target values from subset a into the equation for the weighted mean [Music] then we do the math and get 0.5 so we plug in 0.5

a into the equation for the weighted mean [Music] then we do the math and get 0.5 so we plug in 0.5 for blue but only in subset B note you may have noticed that the different subsets have different values for blue this is okay because favorite color is becoming a continuous variable just like height and now let's encode the color red in subset a so we ignore the target values in subset a and instead plug the target values from subset B into the equation for the weighted mean now because subset

plug the target values from subset B into the equation for the weighted mean now because subset B doesn't have anyone who likes the color red the mean for red is zero and n equals zero the other values are the same as before and we end up replacing red in subset a with 0.33 likewise Green in subset a uses the target values in subset B and turns into 0.42 and green in subset B uses the target values from subset a and turns into 0.67 now that each color and each subset has been encoded we merge

from subset a and turns into 0.67 now that each color and each subset has been encoded we merge the subsets back together and we're done note this process reduces data leakage because the rows do not use their own Target values to calculate their encoding bam now going back to the original data with blue red and green if we set k equal to 7 then we would divide the data into seven subsets now Target encoding the first subset which consists of a single row with favorite color equal to Blue means

encoding the first subset which consists of a single row with favorite color equal to Blue means we ignore its Target value and use the target values from all of the other subsets to calculate the weighted mean likewise encoding the other subsets would use all of the other Target values except their own note when we use all of the target values except 1 to do the encoding it's called leave one out Target encoding a quick scan of the internet shows that some people are successful with leave one

Target encoding a quick scan of the internet shows that some people are successful with leave one out Target encoding and other people are successful with setting k equal to five triple bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the statquest PDF study guides in my book The stackquest Illustrated guide to machine learning at stackwest.org there's something for everyone hooray we've made it to the end of another

learning at stackwest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support stack Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

decision trees from stock to finch in python we're gonna do it today hip hip hooray stat quest great well thank you guys very much for joining me for my uh webinar in decision trees from start to finish in python i'm going to share the screen right here uh can you guys all see that i'm sharing the uh this jupiter notebook um i hope everyone can see it yes i got a yes that's great so what we're gonna go through today is this jupiter notebook and i'm going to email you every single one of you guys

go through today is this jupiter notebook and i'm going to email you every single one of you guys a copy of this uh it will include the jupiter notebook which has to be opened up within jupiter but also a copy uh that can be run directly in python so if you don't have jupiter installed on your computer but you won't but you have python you still should be able to run everything that we talk about and all of the um all of the writing in here there's lots of writing lots of comments uh all of

and all of the um all of the writing in here there's lots of writing lots of comments uh all of that will be in comments in the code so so you will get everything one way or the other um yeah so today we're going to use scikit-learn and cost complexity pruning to build this classification tree right here which uses continuous and categorical data from the uci machine learning repository to predict whether or not a patient has heart disease note all these things are hyperlinks so if you want to

whether or not a patient has heart disease note all these things are hyperlinks so if you want to learn more about the uci machine learning repository or you want to learn more about the specific data set we're using uh you can click on the links and learn more um so so there there are lots of hyperlinks in here anyways the classification trees are an exceptionally useful machine learning method when you need to know what how the decisions are being made for example if you have to justify the

when you need to know what how the decisions are being made for example if you have to justify the predictions to your boss classification trees are a good method because each step in the decision making process is easy to understand now i know classification trees some people think they're not the sexiest of machine learning thing methods out there but they are super practical and are actually very frequently used in the medical profession because the decisions you can trace exactly what the

very frequently used in the medical profession because the decisions you can trace exactly what the rationale is for for everything and that's important in in certain fields and so um and i also like them just for like exploring data uh in terms of like looking to see which um features or variables are the most important so there's a lot of cool things we can do with decision trees and so we're going to learn all about them so we're going to learn about importing data which is not very exciting

to learn all about them so we're going to learn about importing data which is not very exciting but it's important we're going to talk about how to deal with missing data identifying it dealing with it we're going to talk about formatting the data for decision trees um specifically we're going to talk about one hot encoding um we're also going to build a preliminary classification tree and it's going to not be very good but then we're going to optimize that thing using cost complexity pruning

going to not be very good but then we're going to optimize that thing using cost complexity pruning and then once we've optimized it we're going to build draw interpret and evaluate the final classification tree and this all covers a lot of material so we're going to move pretty quickly however if you have questions at the end of each section feel free to uh to bring them up uh you can also you should all have my email the statquest.bam gmail.com you can email me questions later um so with that

all have my email the statquest.bam gmail.com you can email me questions later um so with that let's just dive right in oh by the way i s once you get this code i strongly encourage you to play around with it um playing with the code is the best way to learn from it uh and i've got um alternative ways to do things in the comments so you can try like the way we're gonna do it today but you can also try alternative versions and see if you get the same results or not okay so um someone just asked

try alternative versions and see if you get the same results or not okay so um someone just asked we're going to share this notebook link i'm going to actually email everyone this uh this notebook you're going to get everyone's going to get a copy of it plus all the code so you'll get everything um so don't worry about if i move fast and you're having trouble taking notes or something like that don't worry about it you're going to get everything and i've commented and written everything up uh

don't worry about it you're going to get everything and i've commented and written everything up uh uh with lots and lots of details some of which we'll cover today and there's actually stuff we won't get to so you can read more and learn more once you get the notebook okay so the very first thing we do is load in a bunch of python modules python itself as many of you may know but some of you might not just gives us a basic programming language these modules give us extra functionality to

might not just gives us a basic programming language these modules give us extra functionality to import the data clean it up and format it and then build evaluate and draw the classification tree note i'm doing everything in python 3 and if you've got your own installation of python going you're going to need certain versions of of the modules these are listed here and i've got a little blurb on how to update modules should you need to do that but uh since i don't have to do that we're just

on how to update modules should you need to do that but uh since i don't have to do that we're just going to skip right here but uh and these are the modules we're going to load we're going to load pandas we're going to do that for manipulating data and for one hot encoding we're loading num pi to calculate the mean and standard deviation and then we're importing matplotlib to draw some graphs and then a bunch of scikit learn modules and and bits to do classification trees and confusion

and then a bunch of scikit learn modules and and bits to do classification trees and confusion matrices and cross validation so with a jupiter notebook some of you guys may know this some of you may not uh if you want to run code you just click in the pane that has the code and it gets highlighted and then you can go up here and you can click that play button and it'll it'll run everything there's also key combinations for doing the same thing or you can go to the run menu so we could do um

also key combinations for doing the same thing or you can go to the run menu so we could do um control enter to run this selected cell or we could click here when we do um you will see a star um show up here and that means python is working and when it's done working it'll put a number there um the actual number is not very important so don't worry about that but when you try to run this you may see a little star for a little bit but when the star turns into a number you should be good to go so

a little star for a little bit but when the star turns into a number you should be good to go so we've imported uh the modules um so now we're ready to move on to the next thing we're going to import the data we're going to load in a data set from the uci machine learning repository specifically we're going to use the heart disease data set and this data set will allow us to predict if someone has a heart disease based on their sex age blood pressure and a bunch of other metrics so we're going

a heart disease based on their sex age blood pressure and a bunch of other metrics so we're going to use pandas to read that data frame in and when it does it returns a data frame which is a lot like a spreadsheet the data are organized in rows and columns and each row can contain a mixture of text and columns and the standard variable name for a data frame is the initials df for data frame so that's what we're going to use here we're going to try to stick to the the python convection

so that's what we're going to use here we're going to try to stick to the the python convection conventions um so we've got this code um we've got data frame that's going to be our new data df that's going to be our data frame it's our new variable and we're setting it to um to the data we're going to read in using read csv which is a pandas function um the data is i'm also going to email you the data it's a relatively small file so you'll get the data as well however as you see below we can

data it's a relatively small file so you'll get the data as well however as you see below we can also read it directly from the machine learning repository by just plugging in the url for the data so i'm going to run this code bam okay now we've got the data loaded into a data frame called df and we're going to look at the first five rows using the head function so we've got df dot head and that will print out the first five rows i'm going to use control enter and that prints that out diff by

will print out the first five rows i'm going to use control enter and that prints that out diff by the way different uh computers i've got a macintosh that i'm using right now uh if you're on uh windows or a pc or linux it may be a different key combination to run the code just go up to the run menu and figure out what it is on your platform of choice all right so we see um the first six rows they're kind of a mess we got row numbers and column numbers however we do not have column names and

kind of a mess we got row numbers and column numbers however we do not have column names and since nice column names would make it easier to know how to format the data we're going to replace the column numbers with the following column names i got these names by the way off the uci website so i didn't just make them up we've got age sex chest pain resting blood pressure uh cholesterol fasting blood sugar resting electrocardiographic results uh this maximum heart rate achieved exercise induced

sugar resting electrocardiographic results uh this maximum heart rate achieved exercise induced angina um and a bunch of other things the point is we're going to set the column names by with df.columns and they're going to be set to this array of column names and then once we've set the column names we're going to print out the first five rows like we just did and hopefully we'll see nice pretty looking column name so let's run this bam okay so uh so now instead of column numbers we've got nice

column name so let's run this bam okay so uh so now instead of column numbers we've got nice column names which are much easier to remember and manipulate okay so now that we've got the data in our data frame and we've got nice column names we are ready to identify with missing data i identify and deal with missing data i apologize um so i've broken this uh into two parts the first part is going to focus on identifying missing data and then the second part is going to be um focused on dealing

to focus on identifying missing data and then the second part is going to be um focused on dealing with missing data and unfortunately the biggest part of any data analysis project is making sure that the data is correctly formatted and fixing it when it is not the first part of this process is identifying and dealing with missing data missing data is simply a blank space or a surrogate value like n a that indicates that we failed to collect data for one of the features for example if we forgot

n a that indicates that we failed to collect data for one of the features for example if we forgot to ask someone's age or forgot to write it down then we would have a blank space in the data set for that person's age there are two main ways to deal with missing data one is just to remove if it's if it's a single column or row that has a lot of missing data we can remove that row of data or we can move that column alternatively we can impute the values that are missing and in this context

we can move that column alternatively we can impute the values that are missing and in this context impute is just a fancy way of saying we can make an educated guess about what the value should be um so if we were missing a value for age uh instead of throwing out that entire row of data we might fill in a missing value with the average age or the median or use some more sophisticated approach to guess an appropriate value so first what we're going to do is we're going to see what kind of data

guess an appropriate value so first what we're going to do is we're going to see what kind of data we have in our data frame and we'll do that with the d types uh by looking at d types so we've got d data frame dot d types and we run that and that tells us that age is a float which is good because age is supposed to be a number sex is a float maybe that's good maybe that's not um so we got a bunch of floats and then we've got um ca and foul both have the object data type and one column hd which

of floats and then we've got um ca and foul both have the object data type and one column hd which is just short for heart disease whether or not someone has heart disease is an integer so the fact that the ca and foul columns have object data types suggest that there's something funny going on in them object data types are used when there is a mixture of things like a mixture of numbers and letters and in theory both ca and false should just have a few values representing different categories

and in theory both ca and false should just have a few values representing different categories and i know this from the uci website so you can if you want to learn more about this data set i've actually got more about the data set further down in but you can also read about it on the on the uci website anyways so what we're going to do to investigate what's going on in these columns is we're going to print out their unique values so we're going to start with ca so we've got data frame and then

to print out their unique values so we're going to start with ca so we've got data frame and then in square brackets and single quotes we've we've identified the column we are interested in we're interested in the ca column and we're interested in seeing the unique values we're going to use the unique function to print out those values so we run it and we see that ca contains numbers 0 3 2 and 1 and question marks the numbers represent the number of blood vis vessels that were lit up during

1 and question marks the numbers represent the number of blood vis vessels that were lit up during fluoroscopy which is some sort of diagnostic procedure i actually don't know the details about it it's not super important to be able to follow along with what's going on in this webinar and the question marks however those represent missing data uh now we're going to look at the unique values in the column called fal which is short for thallium heart scan and we're doing the exact same code that

column called fal which is short for thallium heart scan and we're doing the exact same code that we had before we've got the data frame and in square brackets and single quotes we specify which column we are interested in looking at and then we print out the unique values and again we see that foul contains a mixture of numbers representing the different diagnoses for the thallium heart scan and question marks which represent different mis represent missing values so now that we've identified

question marks which represent different mis represent missing values so now that we've identified some missing values we need to deal with them and that leads us to missing data part two dealing with missing data since scikit learns classification trees do not support data sets with missing values we need to figure out what to do with these question marks we can either delete these patients from the training data set or impute the missing data or impute values for the missing data so first

the training data set or impute the missing data or impute values for the missing data so first we're going to see how many rows contain missing values we do that we're going to count the number of rows so we're going to use the len which is short for length function and we're specifying with with this line we want to look at rows um in the data frame the location of which this is true so uh is there a question mark for the ca value or that's a pipe which represents a logical or or a bitwise or

a question mark for the ca value or that's a pipe which represents a logical or or a bitwise or uh or we want the rows that have a question mark uh in the foul spot so we're going to run this code and we see that there are only six rows that have missing values and since that's not very many we're just going to print them out so we're going to run the exact same code we just ran however we're not going to wrap it in the length function or the len function so we're not going to count the number

going to wrap it in the length function or the len function so we're not going to count the number of rows we're just going to print them out so let's run that here we are um we can see a question mark here in the foul column a question mark here question mark here blah blah blah we've got these question marks so that's what the those are that's what the data looks like um with the question marks now we're going to see how many rows are in the full data set so we're using that length function

now we're going to see how many rows are in the full data set so we're using that length function again only this time we're not specifying which rows we want to look at we're just saying let's count all of the rows when we do that we see we've got 303 rows and so 6 of the 303 rows are 2 percent contain missing values and since 297 is still plenty of data relatively speaking uh to build this classification tree we're going to remove of the rows with missing values rather than try to impute

classification tree we're going to remove of the rows with missing values rather than try to impute their values note imputing missing values is a big topic that we will tackle in another webinar because there's lots of ways to do it there's lots of nuance and so that's real high on my to-do list for what the next webinar is going to be so by taking the easy route by just deleting the rows of missing values we can we can stay focused on what we want to talk about today which are decision trees

values we can we can stay focused on what we want to talk about today which are decision trees because we still have a lot to talk about with decision trees so what we're going to do is we're going to remove the rows with missing values by selecting all of the rows that do not contain question marks in either the ca or foul columns so this looks a lot this looks very similar to the code we were just running when we wanted to print out the rows however instead of looking for rows um that have

just running when we wanted to print out the rows however instead of looking for rows um that have the question mark we're looking for rows that do not so that not equal says do not match a question mark and we want to do that for both of these uh columns and we want to use the logical and to get all of the rows that do not have a question mark here or here we want everything but those rows so we'll run that and since and we oh by the way we saved um the results in a new variable called df no

run that and since and we oh by the way we saved um the results in a new variable called df no missing so this is our data frame with no missing values and since uh df no missing has six fewer rows in the original data frame it should have 297 rows we can verify that with this command uh and we see that it we got it the math works out so hooray the math works out however we can also make sure that ca no longer contains question marks for printing its unique values so this is just like what we

ca no longer contains question marks for printing its unique values so this is just like what we did before only this time we're calling on df no missing instead of uh just df alone and we see that we just have numbers and there's no question mark here so that's good now we're going to do the same thing for thal and again we see we just have the numbers so bam we have verified that data frame no missing or the data frame with no missing values does not contain any missing values note ca and

no missing or the data frame with no missing values does not contain any missing values note ca and thal still have the object data type that's okay now we're ready to format the data for making a classification tree all right the first thing we need to do when we format the data for a classification tree is split the data into two parts we want to have the columns of data that we will use to make classifications and we want the one column of data that we want to predict with the data over here

classifications and we want the one column of data that we want to predict with the data over here and we're going to use the conventional notation of capital x to represent the columns that we will use to make the classifications and predictions and lowercase y to represent the thing we want to predict in this case we want to predict hd the column specified by hd which is short for heart disease and the reason why we deal with missing data before we split it into x and y is that if we need to

and the reason why we deal with missing data before we split it into x and y is that if we need to remove rows splitting afterwards ensures that each row and x will correctly correspond to a row and y if we do it the other way around everything's going to get mixed up so uh so what we're going to do is we're going to copy all of the rows uh excuse me all of the columns except for the one column that has that is named hd and i've got some alternative ways to do this code so you can you can play

has that is named hd and i've got some alternative ways to do this code so you can you can play around with it once you get the jupiter notebook and then what we're going to do is once we copy everything but hd we're going to look at the first five rows just to verify that we did it correctly so there we go and we see in the ver on the right side where we no longer have that column called hd so that worked out well and now we are uh we're gonna just copy the hd column into our new variable

so that worked out well and now we are uh we're gonna just copy the hd column into our new variable called y all right okay now that we've created x which has the data we want to use to make predictions and y which has the data we want to predict we are ready to continue formatting x so that it is suitable for making a decision tree all right here we get to the fun part one hot encoding a lot of you people may already know what one hot encoding is if you don't don't worry this is something

of you people may already know what one hot encoding is if you don't don't worry this is something we're going to go into in detail now we have to split the data frame into now that we have split the data frame into two pieces x which contains the data we want to use to make classifications and why which contains the known classifications in our training data set we need to take a closer look at the variables in x the list below tells us what each variable represents and the type of data float

the variables in x the list below tells us what each variable represents and the type of data float or categorical it should um uh it should contain okay so uh uh so we've got age uh which should be a float because that can be any number uh and we've got sex that should be a category that should be a value of either zero for females and one for males we have chest pain which should also be a category we've got four different categories we'll go through those categories in more detail later um

we've got four different categories we'll go through those categories in more detail later um but we see in this list we've got resting blood pressure that's just a number so we're going to save that as a float um serum cholesterol that's also just a number so that's a float um and then we've got categories and different things like that however just review let's go look at the data types in x to remember how python is seeing the data so this is how the data should be considered as as as some

remember how python is seeing the data so this is how the data should be considered as as as some things are floats and some things are categories but when we go to xd types or x dot d types and we see what data type each column has we see that a lot of these things that are supposed to be categories are um like slope is supposed to be a category um but we have it stored as a float okay so that's there's some there's a problem with that uh however before we get to the problem i'm going to say

there's some there's a problem with that uh however before we get to the problem i'm going to say that we we see that age resting blood pressure cholesterol and to latch are all float 64 which is good because we want them to be floating point numbers that's the way the data is supposed to be all of the other columns however need to be inspected to make sure that they only contain reasonable values and some of them need to change this is because while scikit-learn decision trees natively

values and some of them need to change this is because while scikit-learn decision trees natively supports continuous data like resting blood pressure and maximum heart rate they do not natively support categorical data like chest pain which contains four different categories thus in order to use categorical data with scikit-learn decision trees we have to use a trick that converts a column with categorical data into multiple columns of binary values and this trick is called one hot encoding

categorical data into multiple columns of binary values and this trick is called one hot encoding okay at this point you may be wondering what's wrong with treating categorical data like continuous data and to answer that question we're going to look at an example for the cp chest pain column we have four options one typical angina two atypical angina three non-anginal pain and four asymptomatic now if we treated these values one two three and four like continuous data then we would assume that

if we treated these values one two three and four like continuous data then we would assume that 4 which means asymptomatic is more similar to 3 which means non-anginal pain than it is to 1 or 2 which are other types of chest pain that means the decision tree would be more likely to cluster the patients with fours and threes together than patients with fours and ones together in contrast if we treat these numbers like categorical data then we treat each one as a separate category that is no

treat these numbers like categorical data then we treat each one as a separate category that is no more or less similar to any of the other categories thus the likelihood of clustering patients with fours and threes is the same as clustering fours and ones and that approach is more reasonable partly because i don't really know what these what this means is are our one and two more similar i don't know because i don't know i'm gonna use one hot encoding to force psychic learn to treat this like

know because i don't know i'm gonna use one hot encoding to force psychic learn to treat this like categorical data rather than continuous data so now let's inspect and if needed convert the columns that contain categorical and integer data into the correct data types we'll start with the chest pain by inspecting its unique values okay so the good news is that chest pain only contains the values it is supposed to contain one two three and four so we'll convert it using one hot encoding into a

it is supposed to contain one two three and four so we'll convert it using one hot encoding into a series of columns that only contain zeros and ones um note i've got a long description on the different ways to do one hot encoding um there's two major methods one is called column transformer from scikit learn and the other is called get dummies from pandas both methods have pros and cons we're going to use get dummies today because i think it's the best way to teach [Music] how to do one hot

going to use get dummies today because i think it's the best way to teach [Music] how to do one hot encoding i think it's i think it by far is the best way to teach it however column transformer is more commonly used in production systems so uh make sure you're familiar with both um uh and one way to do that is just read the uh read this write-up that i've provided you it provides you with all the pros and cons of the different methods so at your leisure you can go through that however so uh so

pros and cons of the different methods so at your leisure you can go through that however so uh so we're gonna we're just gonna use get dummies uh because i think it's better for teaching um so what we're gonna do is we're gonna start with chest pain and just to see what happens when we can convert chest band we're going to do this without saving the results um just so we can see how git dummies works so what we're doing is we're going to use this panda function get dummies or passing it our

works so what we're doing is we're going to use this panda function get dummies or passing it our data uh our data frame which we're calling x that's the that's the data we're using to make predictions and we're specifying one column we're just going to specify the chest pane column we could specify a bunch of columns and convert them all at once but right now we're just going to specify chest pane and we're going to print out the first five rows to see what it does to the chest pane column so

and we're going to print out the first five rows to see what it does to the chest pane column so let's run that and we can see in the printout above that git dummies puts all of the columns it does not process in front and it puts chest pain at the end right here so everything we did not touch is up here on the left side and everything that we did touch was with just chest pain is on the right side it also splits chest pain into four columns just like we expected it to do chest pain 1.0 is one

it also splits chest pain into four columns just like we expected it to do chest pain 1.0 is one for any patient that scored a one for chest pain and zero for all other patients chest pain 2.0 is one for every patient that scored two for chest pain and zero for all other patients likewise we have chest pain three and chest pain four and this accounts for all four different options we had for chest pain um so now that we see how git dummies works we're going to use it on the four categorical

pain um so now that we see how git dummies works we're going to use it on the four categorical columns that have more than two categories and we're going to save the result this time we're not just going to print it out okay note in a real situation and not a tutorial like this what you should do is verify that all five of these columns only contain the accepted categories uh i feel like every data set i've ever worked with uh always has someone just typing in something completely random and we

set i've ever worked with uh always has someone just typing in something completely random and we need to get rid of that stuff so use that unique function to make sure that each one of these columns is correctly formatted however for this tutorial i've already done that so we're going to skip that step so here we're we're doing the exact same thing we did before except now we're specifying four columns to process and then we're when we're saving it in a new data frame called x encoded and then

to process and then we're when we're saving it in a new data frame called x encoded and then we're going to print out the first five rows of x encoded bam there it is um so we've got chest pain resting electrocardiogram we've got slope and we've got foul and so they've all been one hot encoded now we need to talk about the three categorical columns that only contain zeros and ones sex fasting blood sugar and exercise induced angina um as we can see one hot encoding converts a column with with

sugar and exercise induced angina um as we can see one hot encoding converts a column with with more than two columns excuse me more than two categories like chest pain into multiple columns of zeros and ones since sex fasting blood sugar and exercise induced angina only have two categories to begin with and only contain zeros and ones we do not have to do anything special to them so we're done formatting the data for the classification tree hooray note again in practice we would use unique uh

the data for the classification tree hooray note again in practice we would use unique uh to verify that they only contain zeros and ones but to save times just trust me um now one last thing before we build a classification tree um we have uh y uh and that's what we're trying to predict and it doesn't just contain zeros and one instead it has five different levels of heart disease um zero for no heart disease and one through four for various degrees of heart disease we can see this with a

no heart disease and one through four for various degrees of heart disease we can see this with a unique function so y dot unique bam so we see that we've got all these different values in the y column however in this tutorial we're just going to make a tree that does simple classification and only care if someone has heart disease or not so we're going to convert all numbers greater than 0 to 1. and the way we're going to do that is we're going to store the indices of every time this statement

and the way we're going to do that is we're going to store the indices of every time this statement is true every time the value in y is greater than zero we're going to save that index and then we're going to set all of those indexes to one or all the values that those indexes to want and then we're going to verify that we only have zeros and ones we're going to run this code bam and we did it actually that's a double bam we finally finished formatting the data for making a classification tree

that's a double bam we finally finished formatting the data for making a classification tree and now over here in the in the chat i see there's a question naomi thompson asks is there a limit to the number of types of chest pain uh to make sense to use in one hot encoding is the method better is one method better than other when one has hundreds of classifying values um it depends if all of those hundreds of classifying values are unique categories in and of themselves um then yes we need to

hundreds of classifying values are unique categories in and of themselves um then yes we need to use one hotend coding and um if we i mean that could happen if we have a massive data set uh if we've got hundreds and hundreds of categories um for a single value variable we we'd have to have you know a huge data set and that can happen um uh and yeah so we would apply one hot encoding uh and we would then end up with this data frame our x x encoded data frame would then have hundreds and hundreds

then end up with this data frame our x x encoded data frame would then have hundreds and hundreds of extra columns added to it um i've never used a data set like that before in scikit learn so i cannot guarantee that it will it will not cause the machine to crash however there are machine learning methods like xgboost that are designed to deal with situations like that specifically um so that's another uh webinar that we'll do uh in the next couple of months i've actually already got the

another uh webinar that we'll do uh in the next couple of months i've actually already got the jupiter notebook ready for xgboost uh so we'll be i'm actually just a sneak preview next month we're doing support vector machines and then we're going to do the following month we're going to do xgboost and then i think after that we're going to do imputing data imputing missing values and going through all of the various ways for doing that so that's a little shameless self-promotion right there now

all of the various ways for doing that so that's a little shameless self-promotion right there now let's move on and build a preliminary classification tree this is preliminary because there are lots and lots of actually someone just raised a hand so before we get too into this i'll go back and address this if we use dummy variables don't we run the risk of perfect cholera and co-linearity among dummies if yes how do we deal with them um as you saw i mean i guess it's it is possible uh to get

dummies if yes how do we deal with them um as you saw i mean i guess it's it is possible uh to get co-linearity uh among the variables uh the nice thing is with regression trees is they are relatively immune to that as a problem um typically what regression trees do is they order the columns alphabetically or numerically there's some way it goes through the um uh through the through the variables and it just picks the first one that it gets to and if i've got multiple columns that have the

and it just picks the first one that it gets to and if i've got multiple columns that have the exact same data and uh and this in this call that first column is really good for um classifying and so it does a great job separating and the other columns would do just as well it just uses that first one every time um so it ends up not being an issue if we have redundancy in our data set and that's one of the nice things about um decision trees um all right so i think we are ready to move on um all

of the nice things about um decision trees um all right so i think we are ready to move on um all right so we're going to build a preliminary classification tree this is a classification tree uh that is not optimized that's why it's preliminary then we'll go through how to optimize it once we get this going uh so the first thing we're going to do is we're going to split our our data into testing and training data uh sets subsets so we've got x underscore train x underscore test y underscore

and training data uh sets subsets so we've got x underscore train x underscore test y underscore train y underscore test and we're using train test split to take y x encoded and y and split them into uh training and testing pieces and i've set the random state to 42 so that when you run this code you will get the exact same results that i get after we split the data we're initializing a decision tree classifier and then we are going to fit uh the data to the training data um and so let's run

tree classifier and then we are going to fit uh the data to the training data um and so let's run this and it's uneventful because we didn't print anything out and we didn't uh draw anything however uh this piece of code will draw um uh the decision tree that we just created it's a huge tree um i'm using the plot tree function that comes with scikit-learn um and we just pass it the tree that we created and trained the classification decision tree uh and and we've got a few uh parameters that

created and trained the classification decision tree uh and and we've got a few uh parameters that were passing it to make it easier to look at so let's let's draw this there it is this is a monster decision tree it's a lot a lot bigger than the um than the um than the tree i showed you at the very top of this uh jupiter notebook i also by the way i see some people are raising their hands i'll get to those questions once we're done with the section we're almost done um okay so we've built this

to those questions once we're done with the section we're almost done um okay so we've built this classification tree this monster we're gonna see how and so far it's only seen the training data set so we're going to see how how it performs on the testing data set by running the testing data set down the tree and then drawing a confusion matrix and we're going to do that with this function called plot confusion matrix and we pass it the tree uh that we've created plus the testing data sets and

plot confusion matrix and we pass it the tree uh that we've created plus the testing data sets and we're going to add labels so the confusion matrix is easy to look at so let's run that and there is our confusion matrix okay so we see that of the 42 people that did not have heart disease 31 of them are 71 are correctly classified and of the 33 people that have heart disease uh 26 or 79 were class correctly classified so the question is can we do better one thing that might be holding this

class correctly classified so the question is can we do better one thing that might be holding this classification tree back is that it may have over fit the training data set so we're going to prune the tree pruning in theory should solve the overfitting problem and give us a better results okay so we finished that section i'm gonna look and see um at some questions i know some people raise some raise their hand uh uh and i've got we've got some stuff in the q a real quick uh yes someone asked

raise their hand uh uh and i've got we've got some stuff in the q a real quick uh yes someone asked about whether the uh i'm going to answer this live someone asked if uh train test split is 70 30 i believe that is the default so right here when we're running train test split we're just using the default splitting and i believe that's a 70 30. um uh someone asked why i say this is a huge tree um um and the reason why i say it's a huge tree is is actually i know what the final tree the best

um um and the reason why i say it's a huge tree is is actually i know what the final tree the best optimal tree is uh we actually looked at it very big at the very beginning and it's much much smaller so this tree may be huge maybe not huge it's relative to the optimal tree that does the best job with the testing data set in this case i know that it's huge and how do i know it's over fit i guess i know uh because i've i've already optimized uh the tree and i've seen that it performs much better

know uh because i've i've already optimized uh the tree and i've seen that it performs much better and it's in the much smaller ones performs better so in general when you're doing machine learning that's a big step you need to do you need to uh you you make a preliminary tree just like we did make your make your confusion matrix and then try to optimize it because this confusion matrix is sort of a base can we improve on that if we can then we know that original tree was over fit but we also

of a base can we improve on that if we can then we know that original tree was over fit but we also know that by setting parameters and trying to optimize we actually improved things so this is sort of our base ground base that we're starting from and we're going to try to do better than this um someone asked if this was production code would we use scikit-learn or would we use something else i think scikit-learn is fine i mean it just sort of depends on the situation if you've got tons and

i think scikit-learn is fine i mean it just sort of depends on the situation if you've got tons and tons of data and need a lot of optimization for a massive data set um scikit-learn is not great for that but for relatively small data sets like what we're using sure go ahead and use it uh it's it's uh it's fine um i've answered i hope i've answered these questions uh also uh i see one in the chat that says what happens and we've removed the missing values after splitting the data into testing

that says what happens and we've removed the missing values after splitting the data into testing and training um uh it depends oh if you're gonna remove rows of data try to do it beforehand because you don't want a severe imbalance uh if we you know uh say like we have got testing data set and most of the uh uh rows that we're going to remove are in the testing dataset we [Music] will do you know the testing data set will shrink and things will get out of balance so that's just that's

you know the testing data set will shrink and things will get out of balance so that's just that's something you need to be aware about aware of if you want to wait i'd recommend just getting it over with earlier on however imputing values is another story in if we want to impute values it's best to do that after uh splitting and testing and so that's something we'll talk about when we when we talk about in the web in the webinar for imputing values okay i think i've addressed everyone's

we talk about in the web in the webinar for imputing values okay i think i've addressed everyone's question and i think we're ready to move on uh to cost complexity pruning um so decision trees are notorious for being over fit to the training data set and there are a lot of parameters like maximum depth or the minimum number of samples like decision trees have lots of parameters that we can set and they're all designed to reduce overfitting however pruning a tree with cost complexity pruning

and they're all designed to reduce overfitting however pruning a tree with cost complexity pruning can simplify the whole process of finding a smaller tree that improves the accuracy with the training date or the testing data set so that's what we're going to do here and it's going to allow us to skip having to deal with a lot of these sort of tedious parameters because pruning with cost complexity and pruner just takes care of them all in one fell swoop pruning a decision tree is all about

and pruner just takes care of them all in one fell swoop pruning a decision tree is all about finding the right value for the pruning parameter alpha which controls how little or how much pruning happens one way to find the optimal value for alpha is to plot the accuracy of the tree as a function of different values we do this for both the training data set and the testing data set so first we're going to extract the different values for alpha that are available for this tree and build a prune

going to extract the different values for alpha that are available for this tree and build a prune tree for each value for alpha um note i'm emitting the maximum value for alpha because that just leaves us the root of the tree and we don't want to just we don't want to use that so i'm going to run this code we are running a little bit behind schedule um so i'm going to breeze through this uh by just telling you that this is how this this chunk of code which you'll get so you don't have to

by just telling you that this is how this this chunk of code which you'll get so you don't have to memorize it but this is how we extract the values for alpha ccp stands for cost complexity pruning so these are the cost complexity pruning alphas and here's when we're peeling off the maximum value for alpha and we're not going to use that and here uh is where we're going to create an array of decision trees and we're going to use a for loop for each value for alpha we're going to create a

decision trees and we're going to use a for loop for each value for alpha we're going to create a decision tree and we're going to see how it performs and we already did that now we're going to graph the accuracy of the trees using the training data set and the testing data set as functions of alpha all this code is doing right here is it's drawing this graph so the blue is the accuracy for our training data set and the orange is the accuracy for the testing data set uh you can see that with

training data set and the orange is the accuracy for the testing data set uh you can see that with the full size tree when alpha equals zero and we have the full size tree uh we do the best with the training data set but we do not do very well with the testing data set we see that as we prune we increase alpha so as we increase aloe the size of the trees get smaller and as the trees get smaller our testing accuracy improves um and that's good that means uh we can prune the tree and we can

our testing accuracy improves um and that's good that means uh we can prune the tree and we can actually perform better with the testing data and just by looking at this we can kind of guess that the a good value for alpha is 0.016 um note i don't know if you guys watched the cost complexity pruning um video stat quest in that we are uh pruning a regression tree and that uh uh the the score or we evaluate that tree with the sum of the squared residuals when we evaluate a decision tree we're

we evaluate that tree with the sum of the squared residuals when we evaluate a decision tree we're using genie and genie values range from zero to one and so these values for alphas are way smaller than the ones that are in the uh the stat quest on uh pruning but there's a reason for that because genie values only go from zero to one and they don't whereas the sum of square residuals can be this huge number okay now what we're going to do now that we've seen how to use cross complexity pruning

huge number okay now what we're going to do now that we've seen how to use cross complexity pruning to improve the actual we're actually going to use cross validation so before in this section uh we just used the the the way the data was split between testing and or excuse me training and testing that original split uh but we only used one split we didn't use ten fold cross validation to validate that um that that wasn't actually optimal across all of the different ways we could subdivide the

that um that that wasn't actually optimal across all of the different ways we could subdivide the data so now we're going to use cross validation um this first bit of of code um is going to use cross validation to show that if we just eyeball uh this number without using cross validation if we just if we don't use cross validation we just pick the first number we get we actually don't get the optimal tree we get it at one point but we see that uh another splitting of training and testing data

tree we get it at one point but we see that uh another splitting of training and testing data set another fold um gives us really bad accuracy and so we want to avoid that and that could that's just a function of how the data was split so we're using cross validation to make sure that we don't get tricked um okay so the graph above shows that using different training and data sets with the same alpha resulted in different accuracies suggesting that alpha is sensitive to the data sets so instead

resulted in different accuracies suggesting that alpha is sensitive to the data sets so instead of picking a single training data set and a single testing data set we're going to use cross validation to find the optimal value for cost complexity pruning alpha so here we're doing the exact same thing we did before however now we're calculating the accuracy with clap with cross validation for each value for alpha oh and then um we're going to plot a graph of the accuracy let's run that and here

value for alpha oh and then um we're going to plot a graph of the accuracy let's run that and here we see using cross validation that overall instead of using uh this is the value we've been using before 0.016 this value to the left might be better overall over the over the over the each fold of cross validation uh so instead of setting cccp alpha to 0.016 we need to set it something closer to 0.014 so we're going to find the exact value by um sort of narrowing down the range that we're looking

so we're going to find the exact value by um sort of narrowing down the range that we're looking at between 0.014 and 0.015 and here's that value for alpha and we're going to store that in a new variable so we're going to we've got a new variable called ideal cost complexity pruning alpha and that stores it there however at this point python thinks that this variable that we just created ideal cost complexity pruning alpha is a series which is a type of array we can tell that because when we

cost complexity pruning alpha is a series which is a type of array we can tell that because when we printed it out we got two bits of stuff the first was 20 right here which is the index in the series and the second one is the value for alpha um we need to convert this to a float before we pass it to a classification tree so that's what we're going to do and we do that just by asking for alpha so hooray now we have the ideal value for alpha and we can build evaluate and draw the final

alpha so hooray now we have the ideal value for alpha and we can build evaluate and draw the final classification tree okay now we're on the last section of but before there's a couple of questions i want to answer real quickly someone asked if the alpha value can be found with richer search yes um definitely grid search is a way of of of looking at different uh uh parameters or or trying different values with different values at uh different values with different parameters at the same time as

values with different values at uh different values with different parameters at the same time as uh it basically uh it tries all different combinations see we've got a bunch of questions in the q a um uh is there a mini method to find the internet intersection from the graph instead of guessing it um i'm sure there is i'm blanking on it right now um uh where is uh stack exchange when we need it i would just i would just google that on stack exchange i'm sure there's something good uh and

it i would just i would just google that on stack exchange i'm sure there's something good uh and someone asked can we just do cross validation from the get go and the answer is yes there's no need to um to do it the way i did it where i just kind of did it simply and then use cross validation basically i was just trying to emphasize why we do cross validation uh to show that we'll actually get a different value once we use it um uh is single cross validation sufficient for model evaluation or

different value once we use it um uh is single cross validation sufficient for model evaluation or is nested cross-validation better um i'll be honest i don't know the answer to that question so i will say that's another stack exchange question okay um so moving on uh we've got just a few minutes i'm shooting for 1205 as the optimal finish time since we started five minutes late let's end five minutes late and we'll be on time if you have to leave early don't worry you'll get a link to this

minutes late and we'll be on time if you have to leave early don't worry you'll get a link to this video to this webinar you'll be able to watch it again and you'll get this jupiter notebook so you can go through it at your own pace later okay uh now that we have the ideal value for alpha we can build the final classification tree by setting this parameter ccp alpha to the ideal value so that's what we do we use the exact same call that we did before however this time we're setting this

what we do we use the exact same call that we did before however this time we're setting this parameter and then we are fitting it to the training data set and now what we're doing is we're plotting a confusion matrix but now we're using the pruned tree hooray the prune tree is better at classifying patients than the full-sized tree of the 42 people that did not have heart disease disease now we're up to 81 class correctly classified before uh we only got 74 uh and for the people with heart

we're up to 81 class correctly classified before uh we only got 74 uh and for the people with heart disease we're up to 85 and before we only had 79 so now we're ready for the last thing which is to to draw the prune tree and discuss how to interpret it so we're going to draw the tree and this is the prune tree now just for reference this was the original tree which is huge and after pruning it we got down to this and this little guy performs better than that big tree does and it's because that

got down to this and this little guy performs better than that big tree does and it's because that big tree over fits the data of the training data it fits it like a glove and someone i i recently read somewhere i wish i could remember where i read it but someone someone someone said that overfitting is sort of like memorizing all the answers to an exam um rather than understanding what the questions actually are um so by pruning it uh we're forcing the tree tree to not memorize the answers but

actually are um so by pruning it uh we're forcing the tree tree to not memorize the answers but to uh you know do a better job classifying so we're going to discuss how to interpret the tree so each each node in the tree has a column name that was used to split so we used ca values less than 0.5 go to the left of values greater so if it's if this if this statement is false we go to the right we've got the genie impurity for the node the number of samples in the node and the number of

right we've got the genie impurity for the node the number of samples in the node and the number of classifications in that node so we've got 118 people that do not have heart disease and 104 people that do have heart disease and lastly the class tells us whatever category has the majority and so since no heart disease has the majority of the class is no heart disease it's also colored according to whoever has the majority so all of these orange or orangish nodes have have a majority of no

to whoever has the majority so all of these orange or orangish nodes have have a majority of no heart disease and the bluish nodes have a majority of yes heart disease the darker the color the lower the genie impurity so the better the split the better uh the uh the sort of bias towards one category or the other so this guy uh has a relatively low genie impurity especially compared to where we started where there was almost a 50 50 split between people with heart disease and without heart

we started where there was almost a 50 50 split between people with heart disease and without heart disease but by the time we get down here we've got an extreme bias towards people without heart disease after looking at ca the thallium heart scan old peak and then getting to this leaf the leafs by the way don't have column names because they're no longer splitting the data so in conclusion we have imported data identified and dealt with missing data formatted the data for a decision tree using

imported data identified and dealt with missing data formatted the data for a decision tree using one hot encoding built a preliminary decision tree for classification and that's what we use as a reference to know if pruning or optimizing the tree was going to make any different difference then we pruned with cost complexity pruning then we built drew interpreted and evaluated the final classification tree so hooray triple bam we made it oh a couple things before we go i want to say a lot of

tree so hooray triple bam we made it oh a couple things before we go i want to say a lot of people when they uh register they'll use one email to register with zoom and another email because that's their paypal account or another email associated with the payment when i email uh this out uh i will email it out make sure you check both because i get uh i get a i get i get a bunch of lists of emails and i can't make sense of which one the one is is the one you check the most often so if you have

and i can't make sense of which one the one is is the one you check the most often so if you have multiple email addresses make sure you check both what else do i need to uh notice oh the video and this jupiter notebook should be available by tomorrow at the latest um oh somebody asked for views on a c 4.5 tree and i'm going to be honest and say i don't actually know what we've gone through is cart and i can't remember the difference between cart and c 4.5 right now um i will say that cart uses

and i can't remember the difference between cart and c 4.5 right now um i will say that cart uses genie uh we could have used entropy and actually i created uh i did i used entropy i did a just earlier this morning i was like hey i wonder what will happen if i use entropy instead of genie and so shocking to me is that the tree performed much worse uh i was i was under the impression that entropy and genie were this roughly equivalent and that you could just use them interchangeably uh it turns

and genie were this roughly equivalent and that you could just use them interchangeably uh it turns out that at least with this data set that is not the case um anyways i want to oh oh someone asked me to confirm a recommendation uh for using a production system as an alternative scikit-learn uh i unfortunately do not have an opinion on that uh i wish i did and that's something i will uh i'll look into uh and hopefully have an answer for you guys later i'll try to if there's questions i've

look into uh and hopefully have an answer for you guys later i'll try to if there's questions i've given super lame answers to i will try to research and send answers as part of the email that i send out to people someone asked if there's a way to know which features have the most influence uh yes uh yes there is you can just look at the tree to get a sense of which parameters had uh uh were useful you can also look at um drop and genie scores uh we can print all this stuff out all these all

you can also look at um drop and genie scores uh we can print all this stuff out all these all these values that we're looking at we can actually store those in variables and then parse algorithmically so we could see which variables are associated with the greatest drop in genie um and um and so that's a way we could figure out which variables are the most influential or the most important for separation all right everyone thank you very much i really appreciate you for uh joining the um the

separation all right everyone thank you very much i really appreciate you for uh joining the um the the discussion and i'll try to address any other questions in the email if i don't give them to them right now uh thank you very much uh um it really means a lot to me that you're you're here and i hope everyone is safe and uh we'll talk to you uh i guess in the next live stream or the next web in our next month we're doing support vector machines so uh so there you go oh someone did ask if

in our next month we're doing support vector machines so uh so there you go oh someone did ask if decision trees are better for medical data than random forests and i don't know i like i love random forests i'm a random forest dude um i'm always thinking about them um uh i i think it might be appropriate in a medical setting uh it just sort of depends um uh i would like for it to be um because i like random forests uh but in terms of like sheer interpretability simplicity decision trees are the

random forests uh but in terms of like sheer interpretability simplicity decision trees are the best random forests are similar but still a little more challenging to interpret so that's the answer to that all right i hope everyone's doing okay until next time quest on

StatQuest: Random Forests Part 1 - Building, Using and Evaluating

Wandering around a random forest. I won't get lost because of stat quest Hello, I'm Josh Dharma and welcome to stat quest today We're gonna be starting part one of a series on random forests, and we're going to talk about building and evaluating random forests Note random forests are built from decision trees. So if you don't already know about those check out my stat quest and beef up Decision trees are easy to build easy to use and easy to interpret But in practice they are not that awesome to

are easy to build easy to use and easy to interpret But in practice they are not that awesome to quote from the elements of statistical learning Aka the Bible of machine learning Trees have one aspect that prevents them from being the ideal tool for predictive learning Namely in accuracy. In other words, they work great with the data used to create them But they are not flexible when it comes to classifying new samples The good news is that random forests combine the simplicity of decision

to classifying new samples The good news is that random forests combine the simplicity of decision trees with flexibility Resulting in a vast improvement in accuracy So let's make a random forest step 1 create a bootstrap data set imagine that these 4 samples are the entire data set that we are going to build a tree from I Know it's crazy small, but just pretend for now To create a bootstrap data set that is the same size as the original. We just randomly select samples from the original data

set that is the same size as the original. We just randomly select samples from the original data set The important detail is that we're allowed to pick the same sample more than once This is the first sample that we randomly select So it's the first sample in our bootstrap data set This is the second randomly selected sample from the original data set So it's the second sample in our bootstrap data set Here's the third randomly selected sample So here it is in the bootstrap data set Lastly

data set Here's the third randomly selected sample So here it is in the bootstrap data set Lastly here's the fourth randomly selected sample note. It's the same as the third and Here it is BAM we've created a bootstrap data set Step2 for creating a random forest is to create a decision tree using the bootstrap dataset But only use a random subset of variables or columns at each step in This example, we will only consider two variables or columns at each step Note, we'll talk more about how to

we will only consider two variables or columns at each step Note, we'll talk more about how to determine the optimal number of variables to consider later Thus instead of considering all four variables to figure out how to split the root node We randomly select two in This case we randomly selected good blood circulation and blocked arteries as candidates for the root node Just for the sake of the example assume that good blood circulation. Did the best job separating the samples? Since we used

example assume that good blood circulation. Did the best job separating the samples? Since we used a good blood circulation, I'm going to gray it out so that we focus on the remaining variables Now we need to figure out how to split samples at this node just like for the route we randomly select two variables as candidates instead of all three remaining columns and We just build the tree as usual, but only considering a random subset of variables at each step double bound we built a tree one

but only considering a random subset of variables at each step double bound we built a tree one using a bootstrap data set and Two only considering a random subset of variables at each step Here's the tree we just made Now go back to step one and repeat Make a new bootstrap data set and build a tree considering a subset of variables at each step Ideally you do this hundreds of times, but we only have space to show six, but you get the idea Using a bootstrap sample and considering only a subset

have space to show six, but you get the idea Using a bootstrap sample and considering only a subset of variables at each step results in a wide variety of trees The variety is what makes random forests more effective than individual decision trees Sweet now that we've created a random forest. How do we use it? Well first we get a new patient We've got all the measurements and now we want to know if they have heart disease or not So we take the data and run it down the first tree that we made

if they have heart disease or not So we take the data and run it down the first tree that we made Booboo, dooba, dooba, dooba dooba, dooba. Do the first tree says yes, the patient has heart disease and We keep track of that here now we run the data down the second tree that we made the second tree also says yes and We keep track of that here. And then we repeat for all the trees we made After running the data down all of the trees in the random forest. We see which option received more votes in

the data down all of the trees in the random forest. We see which option received more votes in This case yes received the most votes so we will conclude that this patient has heart disease BAM Oh No terminology alert Bootstrapping the data plus using the aggregate to make a decision is called bagging Okay, now we've seen how to create and use a random forest How do we know if it's any good Remember when we created the bootstrapped data set We allow duplicates in trees in the bootstrapped data

when we created the bootstrapped data set We allow duplicates in trees in the bootstrapped data set as A result. This entry was not included in the bootstrap data set Typically about one third of the original data does not end up in the bootstrap data set Here's the entry that didn't end up in the bootstrapped dataset If the original dataset were larger, we'd have more than just one entry over here This is called the out-of-bag data set If it were up to me I would have named it thee out of boot

This is called the out-of-bag data set If it were up to me I would have named it thee out of boot data set since it's the entries that didn't make it into the bootstrap dataset Unfortunately, it's not up to me Since the out-of-bag data was not used to create this tree We can run it through and see if it correctly classifies the sample as no heart disease In this case the tree correctly labels the out of bag sample. No Then we run this out of bag sample through all of the other trees that were

out of bag sample. No Then we run this out of bag sample through all of the other trees that were built without it This tree incorrectly labeled the out of bag sample. Yes These trees correctly labeled the out of bag sample know Since the label with the most votes wins is the label that we assign this out of bag sample in This case the out of bag sample is correctly labeled by the random forest We then do the same thing for all of the other out of bag samples for all of the trees This out of

We then do the same thing for all of the other out of bag samples for all of the trees This out of bag sample was also correctly labeled This out of bag sample was incorrectly labeled Etc etc, etc Ultimately we can measure how accurate our random forest is by the proportion of out-of-bag samples that were correctly classified by the random forest The proportion of out-of-bag samples that were incorrectly classified is the out of bag error Okay, we now know how to one build a random forest to

classified is the out of bag error Okay, we now know how to one build a random forest to use a random forest and three estimate the accuracy of a random forest However now that we know how to do this we can talk a little more about how to do this Remember when we built our first tree and we only use two variables columns of data to make a decision at each step Now we can compare the out-of-bag error for a random forest built using only two variables per step to a random forest built using three

for a random forest built using only two variables per step to a random forest built using three variables per step and We test a bunch of different settings and choose the most accurate random forest In other words one we build a random forest and then two we estimate the accuracy of a random forest then we change the number of variables used per step and We do this a bunch of times and then choose the one that is the most accurate Typically we start by using the square of the number of

choose the one that is the most accurate Typically we start by using the square of the number of variables and then try a few settings above and below that value Triple bail Hooray We've made it to the end of another exciting static quest tune in next week And we'll talk about how to deal with missing data and how to cluster the samples. All right, and tell them quest are armed

random force part - yep it hooray it's true stead quest hello I'm Josh stommer and welcome to stack quest today we're doing random forests part two and we're gonna focus on missing data and sample clustering to be honest the sample clustering aspect of random forests is my favorite part so I'm really excited we're gonna cover it here's our data set we've got data for four separate patients however for patient number four we've got some missing data random forests consider two types of missing

for patient number four we've got some missing data random forests consider two types of missing data one missing data in the original data set used to create the random forest and two missing data in a new sample that we want to categorize we'll start with this one so we want to create a random forest from this data however we don't know if this patient has blocked arteries or their weight the general idea for dealing with missing data in this context is to make an initial guess that could be

idea for dealing with missing data in this context is to make an initial guess that could be bad and then gradually refine the guess until it is hopefully a good guess because this person did not have heart disease the initial and possibly bad guests for the blocked arteries value is just the most common value for blocked arteries found in the other samples that do not have heart disease among the people that do not have heart disease know is the most common value for blocked arteries it occurs

people that do not have heart disease know is the most common value for blocked arteries it occurs in two out of two samples so no is our initial guess since weight is numeric our initial guess will be the median value of the patients that did not have heart disease in this case the median value is 160 7.5 here's our new data set with the filled in missing values now we want to refine these guesses we do this by first determining which samples are similar to the one with missing data so let's

we do this by first determining which samples are similar to the one with missing data so let's talk about how to determine similarity step 1 build a random forest step two run all of the data down all of the trees we'll start by running all of the data down the first tree dooba dooba dooba dooba dooba do dooba dooba dooba dooba dooba dooba do Duke do this boo notice that sample three and sample for both ended up at the same leaf node that means they're similar at least that's how similarity is

both ended up at the same leaf node that means they're similar at least that's how similarity is defined in random forests we keep track of similar samples using a proximity matrix the proximity matrix has a row for each sample and it has a column for each sample because sample three and sample four ended up in the same leaf node we put a one here we also put a one here since this position also represents samples three and four because no other pair of samples ended in the same leaf node our

represents samples three and four because no other pair of samples ended in the same leaf node our proximity matrix looks like this after running the samples down the first tree now we run all of the data down the second tree bet it boop bop bop bop better but but buttered up oh but up up up but I don't bump up but out up buh-buh-buh note samples two three and four all ended up in the same leaf node this is what the proximity matrix looked like after running the data down the first tree and

node this is what the proximity matrix looked like after running the data down the first tree and after the second tree we add one to any pair of samples that ended up in the same leaf node samples three and four ended up in the same node together again in sample two also ended up in that same node now we run all of the data down the third tree and here's the updated proximity matrix only samples three and four ended up in the same leaf node ultimately we run the data down all the trees and the

three and four ended up in the same leaf node ultimately we run the data down all the trees and the proximity matrix fills in then we divide each proximity value by the total number of trees in this example assume we have ten trees now we use the proximity values for sample four to make better guesses about the missing data four blocked arteries we calculate the weighted frequency of yes and no using proximity values as the weights yes occurs in one third of the samples no occurs in two-thirds

proximity values as the weights yes occurs in one third of the samples no occurs in two-thirds of the samples the weighted frequency for yes is the frequency of yes times the weight for yes the weight for yes equals the proximity of yes divided by all of the proximities the proximity for yes is the proximity value for sample to the only one with yes and we divide that by the sum of the proximities for sample for so the wait for yes is 0.1 thus the weighted frequency for yes is 0.03 the weighted

for sample for so the wait for yes is 0.1 thus the weighted frequency for yes is 0.03 the weighted frequency for no is the frequency of no which is 2/3 times the weight for now samples 1 & 3 both have no with that in mind we can plug in the values for the proximity of no / all proximities thus the weight for no is 0.9 and the weighted frequency for no is 0.6 no has a way higher weighted frequency so we'll go with it in other words our new improved and revised guessed based on the proximities is

so we'll go with it in other words our new improved and revised guessed based on the proximities is no for blocked arteries for weight we use the proximities to calculate a weighted average in this case the weighted average equals sample ones weight sample ones weighted average weight sorry if there's any confusion between a patient's weight or a samples weight and the weight used in the weighted average to calculate that weight we start with the proximity for sample 1 divided by the sum of the

average to calculate that weight we start with the proximity for sample 1 divided by the sum of the proximities so sample ones weighted average weight is 0.1 here's the weighted value for sample number two who weighs 180 here's the weighted average value for sample number three who weighs 210 ultimately the weighted average of weight is 198 point five and remember the weights that we used in the weighted average were based on proximity x' now that we've revised our guesses a little bit we do

weighted average were based on proximity x' now that we've revised our guesses a little bit we do the whole thing over again we build a random forest run the data through the trees recalculate the proximities and recalculate the missing values we do this six or seven times until the missing values converge ie no longer change each time we recalculate BAM now it's time for an interlude of Awesomeness let me show you something super cool we can do with the proximity matrix this is the proximity

let me show you something super cool we can do with the proximity matrix this is the proximity matrix before we divided each value by 10 the number of trees in the pretend random forest just for the sake of easy math imagine if samples 3 & 4 ended up in the same leaf node in all 10 trees now we have a 10 here and here after dividing by 10 the number of trees in the forest we see that the largest number in the proximity matrix is 1 1 in the proximity matrix means the samples are as close as

number in the proximity matrix is 1 1 in the proximity matrix means the samples are as close as close can be that means 1 minus the proximity values equals distance closest can be equals no distance between and not close equals far away this is a distance matrix and that means we can draw heat map with it if you don't know what a heat map is check out the stat quest and we can also draw an MVS plot with it and if you don't know what an MDS plot is well check out the stat quest I think this is

with it and if you don't know what an MDS plot is well check out the stat quest I think this is super cool because it means that no matter what the data are ranks multiple-choice numeric etc if we can use it to make a tree we can draw a heat map or an MDS plot to show how the samples are related to each other this is awesome ok enough fun stuff let's get back to the missing data problem at long last we'll talk about the second method this is when we have missing data in a new sample that we

last we'll talk about the second method this is when we have missing data in a new sample that we want to categorize imagine we had already built a random forest with existing data and wanted to classify this new patient so we want to know if they have heart disease or not but we don't know if they have blocked arteries so we need to make a guess about blocked arteries so we can run the patient down all the trees in the forest the first thing we do is create two copies of the data one that has

all the trees in the forest the first thing we do is create two copies of the data one that has heart disease and one that doesn't have heart disease then we use the iterative method we just talked about to make a good guess about the missing values these are the guesses that we came up with then we run the two samples down the trees in the forest and we see which of the two is correctly labeled by the random forest the most times this option was correctly labeled yes in all three trees this

by the random forest the most times this option was correctly labeled yes in all three trees this option was only correctly labeled no in one tree this option wins because it was correctly labeled more than the other option BAM we filled in the missing data and we've classified our sample hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon

more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

you don't need a ukulele to do statistics but it makes it more fun hello I'm Josh stormer and welcome to stat quest today we're going to talk about how to build use and evaluate random forests in our this stat quest builds on two stat quests that I've already created that demonstrate the theory behind random forests so if you're not familiar with it check them out just so you know you can download all the code that I describe in this tutorial using the link in the description below the first

all the code that I describe in this tutorial using the link in the description below the first thing we do is load in ggplot2 so we can draw fancy graphs and when I do that our prints out a little message it's no big deal then we load Cal plot which just improves some of ggplot2 s default settings it overwrites the GG save function and that's fine with me so no worries here the last library we need to load is random forests duh so we can make random forests it also prints out some stuff in red

to load is random forests duh so we can make random forests it also prints out some stuff in red but it's no big deal we can move on from here for this example we're going to get a real data set from the UCI machine learning repository specifically we want the heart disease data set so we make a variable called URL and set it to the location of the data we want for our random forest and this is how we read the data set into our from the URL the head function shows us the first six rows of data

we read the data set into our from the URL the head function shows us the first six rows of data unfortunately none of the columns are labeled wha-wha so we named the columns after the names that were listed on the UCI website the UCI website actually lists a whole lot of information about this data so it's worth checking out if you haven't done that already hooray now when we look at the first six rows with the head function things look a lot better however the stur function which describes

six rows with the head function things look a lot better however the stur function which describes the structure of the data tells us that some of the columns are messed up sex is supposed to be a factor where zero represents female and one represents male CP aka chest pain is also supposed to be a factor where levels 1 through 3 represent different types of pain and 4 represents no chest pain see a and Thal are correctly called factors but one of the levels is question mark when we need it to

a and Thal are correctly called factors but one of the levels is question mark when we need it to be an n/a so we've got some cleaning up to do the first thing we do is change the question marks to n A's then just to make the data easier on the eyes we convert the zeros in sex to F for female and the ones to M for male lastly we convert the column into a factor then we convert a bunch of other columns into factors since that's what they're supposed to be see the UCI website or the sample code

into factors since that's what they're supposed to be see the UCI website or the sample code on the stat quest blog for more details since the CA column originally had a question mark in it rather than in a are thinks it's a column of strings we correct that assumption by telling our it's a column of integers and then we convert it to a factor then we do the exact same thing for Thal the last thing we need to do to the data is make HD aka heart disease a factor that is easy on the eyes here I'm

we need to do to the data is make HD aka heart disease a factor that is easy on the eyes here I'm using a fancy trick with if-else to convert the zeros to healthy and the ones to unhealthy we could have done a similar trick for sex but I wanted to show you both ways to convert numbers to words once we're done fixing up the data we can check that we've made the appropriate changes with the stir function sex is now a factor with levels F and M and everything else looks good too hooray we're done

sex is now a factor with levels F and M and everything else looks good too hooray we're done with the boring part now we can have some fun since we are going to be randomly sampling things let's set the seed for the random number generator so that we can reproduce our results now we impute values for the NA s in the dataset with our F impute the first argument to our F impute is HD tilde dot and that means we want the HD aka heart disease column to be predicted by the data in all of the other

that means we want the HD aka heart disease column to be predicted by the data in all of the other columns here's where we specify which data set to use in this case there's only one data set and it's called data here's where we specify how many random forests our F impute should build to estimate the missing values in theory four to six iterations is enough just for fun I set this parameter editor equal to 20 but it didn't improve the estimates lastly we save the results the data set with

editor equal to 20 but it didn't improve the estimates lastly we save the results the data set with imputed values instead of n A's as data dot imputed after each iteration our F impute prints out the out of bag OOB error rate this should get smaller if the estimates are improving since it doesn't we can conclude that our estimates are as good as they're going to get with this method here's where we actually build a proper random forest using the random forest function just like when we imputed

we actually build a proper random forest using the random forest function just like when we imputed values for the NA s we want to predict HD aka heart disease using all of the other columns in the data set however this time we specify data imputed as the data set we also want random forests to return the proximity matrix we'll use this to cluster the samples at the end of the stat quest lastly we save the random forest and associated data like the proximity matrix as model to get a summary of

save the random forest and associated data like the proximity matrix as model to get a summary of the random forest and how well it performed we can just type model on the command prompt and then hit enter here's what gets printed to the screen the first thing is the original call to random forest next we see that the random forest was built to classify samples if we had used the random forest to predict weight or height it would say regression and if we had omitted the thing the random forest

predict weight or height it would say regression and if we had omitted the thing the random forest was supposed to predict entirely it would say unsupervised then it tells us how many trees are in the random forest the default value is 500 later we will check to see if 500 trees is enough for optimal classification then it tells us how many variables or columns of data were considered at each internal node classification trees have a default setting of the square root of the number of variables

node classification trees have a default setting of the square root of the number of variables regression trees have a default setting of the number of variables divided by 3 since we don't know if 3 is the best value we'll fiddle with this parameter later on here's the out-of-bag oob error estimate this means that 83.5% of the oob samples were correctly classified by the random forest lastly we have a confusion matrix there were 141 healthy patients that were correctly labeled healthy hooray

have a confusion matrix there were 141 healthy patients that were correctly labeled healthy hooray there were 27 unhealthy patients that were incorrectly classified as healthy boo there were 23 healthy patients that were incorrectly classified unhealthy ooh lastly there were 112 unhealthy patients that were correctly classified unhealthy hooray to see if 500 is enough for optimal classification we can plot the error rates here we create a data frame that formats the error rate information so

we can plot the error rates here we create a data frame that formats the error rate information so that ggplot2 will be happy this is kind of complicated so let me walk you through it for the most part this is all based on a matrix within model called dot rate this is what the earth dot rate matrix looks like there's one column for the out-of-bag error rate one column for the healthy error rate ie how frequently healthy patients are misclassified and one column for the unhealthy error rate ie

ie how frequently healthy patients are misclassified and one column for the unhealthy error rate ie how frequently unhealthy patients are misclassified each row reflects the error rates at different stages of creating the random forest the first row contains the error rates after making the first tree the second row contains the error rates after making the first two trees the last row contains the error rates after making all 500 trees so what we're doing here is making a data frame that looks

error rates after making all 500 trees so what we're doing here is making a data frame that looks like this there's one column for the number of trees there's one column for the type of error and one column for the actual error value and here's the call to ggplot BAM the blue line shows the error rate when classifying unhealthy patients the green line shows the overall out-of-bag error rate the red line shows the error rate when classifying healthy patients in general we see the error rates

red line shows the error rate when classifying healthy patients in general we see the error rates decrease when our random forest has more trees if we added more trees with the error rate go down further to test this hypothesis we make a random forest with 1,000 trees the out-of-bag error rate is the same as before and the confusion matrix shows that we didn't do a better job classifying patients and we can plot the error rates just like before double bam and we see that the error rates

and we can plot the error rates just like before double bam and we see that the error rates stabilize right after 500 trees so adding more trees didn't help but we would not have known this unless we used more trees now we need to make sure we are considering the optimal number of variables at each internal node in the tree we start by making an empty vector that can hold ten values and then we create a loop that tests different numbers of variables at each step each time we go through the loop

a loop that tests different numbers of variables at each step each time we go through the loop I increases by one it starts at one and ends after ten in this line we are building a random forest using AI to determine the number of variables to try at each step specifically we are setting m try equals I and I equals values between 1 and 10 this is where we store the out-of-bag error rate after we build each random forest that uses a different value for M try this is a bit of complex code here's

build each random forest that uses a different value for M try this is a bit of complex code here's what's going on tamp top model contains a matrix called air dot rate just like model did before and we want to access the value in the last row and in the first column ie the out-of-bag error rate when all 1000 trees have been made now we can print out the out-of-bag error rates for different values for m try the third value corresponding to m try equals 3 which is the default in this case has

for m try the third value corresponding to m try equals 3 which is the default in this case has the lowest out-of-bag error rate so the default value was optimal but we wouldn't have known that unless we tried other values lastly we want to use the random forests to draw an MDS plot with samples this will show us how they are related to each other if you don't know what an MDS plot is don't freak out just check out the stat quest on it we start by using the dist function to make a distance

out just check out the stat quest on it we start by using the dist function to make a distance matrix from 1 minus the proximity matrix then we run CMD scale on the distance matrix CMD scale stands for classical multi-dimensional scaling then we calculate the percentage of variation in the distance matrix that the x and y axes account for again see the other stat quest for details then we format the data for ggplot and then we draw the graph with ggplot triple bam unhealthy samples are on the

the data for ggplot and then we draw the graph with ggplot triple bam unhealthy samples are on the left side healthy samples are on the right side I wonder if patient 253 was misdiagnosed and actually has heart disease note the x-axis accounts for 47% of the variation in the distance matrix the y-axis only accounts for 14% of the variation in the distance matrix that means that the big differences are along the x-axis lastly if we got a new patient and didn't know if they had heart disease and

are along the x-axis lastly if we got a new patient and didn't know if they had heart disease and they clustered down here we'd be pretty confident that they had heart disease [Music] hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you have any suggestions for future stat quests well put them in the comments below until next time quest on

the chain rule is cool stat quest yeah [Music] hello i'm josh starmer and welcome to statquest today we're going to talk about the chain rule and it's going to be clearly explained note this stat quest assumes that you are already familiar with the basic idea of a derivative and just want a deeper understanding of the chain rule that said let's do a super quick review imagine we collected these measurements from a bunch of people on the x-axis we measured how much they liked statquest and on the

from a bunch of people on the x-axis we measured how much they liked statquest and on the y-axis we measured awesomeness we can then fit this orange parabola to the data the equation for the parabola is awesomeness equals likes statquest squared the derivative of this equation tells us the slope of the tangent line at any point along the curve the slope of the tangent line tells us how quickly awesomeness is changing with respect to like's stat quest we can calculate the derivative of

awesomeness is changing with respect to like's stat quest we can calculate the derivative of awesomeness with respect to like's stat quest by using the power rule the power rule tells us to multiply like's stat quest by the power which is 2 and raise stat quest by the power 2 -1 and since minus one equals one and raising something by one is the same as omitting the power we end up with two times like's statquest okay bam that's the review now let's dive into the chain rule with a super simple

like's statquest okay bam that's the review now let's dive into the chain rule with a super simple example imagine we collected weight and height measurements from three people and then we fit a line to the data now if someone tells us they weigh this much we can use the green line to predict that they are this tall bam now imagine we collected height and shoe size measurements and we fit a line to the data now if someone tells us that they are this tall we can use the orange line to predict

to the data now if someone tells us that they are this tall we can use the orange line to predict that this is their shoe size bam now if someone tells us that they weigh this much then we can predict their height and we can use the predicted height to predict shoe size and if we change the value for weight we see a change in shoe size bam now let's focus on this green line that represents the relationship between weight and height we see that for every one unit increase in weight there's a two

between weight and height we see that for every one unit increase in weight there's a two unit increase in height in other words the slope of the line is 2 divided by 1 which equals 2 and since the slope is 2 the derivative the change in height with respect to a change in weight is two now since the slope of the green line is the same as its derivative two the equation for height is height equals the derivative of height with respect to weight times weight which equals two times weight note the

the derivative of height with respect to weight times weight which equals two times weight note the equation for height has no intercept because the green line goes through the origin now let's focus on the orange line that represents the relationship between height and shoe size in this case we see that for every one unit increase in height there is a one-quarter unit increase in shoe size and i admit that it's hard to see the one-quarter unit increase in shoe size so just trust me anyway

i admit that it's hard to see the one-quarter unit increase in shoe size so just trust me anyway because we go up one quarter unit for every one unit we go over the slope is one quarter divided by one which equals one quarter and since the slope is one quarter the derivative or the change in shoe size with respect to a change in height is one quarter now since the slope of the orange line is the same as its derivative the equation for shoe size is shoe size equals the derivative of shoe size

same as its derivative the equation for shoe size is shoe size equals the derivative of shoe size with respect to height times height which equals one-quarter times height and again because the orange line goes through the origin the equation for shoe size has no intercept now because weight can predict height and height can predict shoe size we can plug the equation for height into the equation for shoe size now if we want to determine exactly how shoe size changes with respect to changes in

for shoe size now if we want to determine exactly how shoe size changes with respect to changes in weight we can take the derivative of shoe size with respect to weight and the derivative of the equation for shoe size with respect to weight is just the product of the two derivatives in other words because height connects weight to shoe size the derivative of shoe size with respect to weight is the derivative of shoe size with respect to height times the derivative of height with respect to

the derivative of shoe size with respect to height times the derivative of height with respect to weight this relationship is the essence of the chain rule plugging in numbers gives us one half and that means for every one unit increase in weight beep boop beep there is a one-half unit increase in shoe size bam now let's look at a slightly more complicated example imagine we measured how hungry a bunch of people were and how long it had been since they last had a snack as time since the last

a bunch of people were and how long it had been since they last had a snack as time since the last snack increases on the x-axis people got hungrier and hungrier at a faster rate so we fit an exponential line with intercept one-half to the measurements to reflect the increasing rate of hunger then we measured how much people craved ice cream and how hungry they were the hungrier someone was the more they craved ice cream but after a certain amount of hunger the craving did not continue to

the more they craved ice cream but after a certain amount of hunger the craving did not continue to increase very much so we fit a square root function to the data to reflect how the increase in craving tapers off now if we want to see how the rate of craving ice cream changes with respect to the time since the last snack plugging the equation for hunger into the equation for craves ice cream gives us an equation without an obvious derivative to convince yourself that taking the derivative of

us an equation without an obvious derivative to convince yourself that taking the derivative of this is no fun at all pause the video and give it a try however because hunger links time since last snack to craves ice cream we can use the chain rule to solve for this derivative first the power rule tells us that the derivative of hunger with respect to the time since the last snack is two times time likewise the power rule tells us that the derivative of craves ice cream with respect to hunger

likewise the power rule tells us that the derivative of craves ice cream with respect to hunger is one divided by two times the square root of hunger so with these two derivatives the chain rule tells us that the derivative of craves ice cream with respect to time is the derivative of craves ice cream with respect to hunger times the derivative of hunger with respect to time since last snack so we plug in the derivatives and plug in the equation for hunger and cancel out the twos and we get the

plug in the derivatives and plug in the equation for hunger and cancel out the twos and we get the derivative of craves ice cream with respect to time since last snack this derivative tells us how quickly or slowly our craving for ice cream changes with respect to time double bam in this last example it was obvious that hunger was the link between time since last snack and craves ice cream and we had an equation for hunger in terms of time and an equation for craves ice cream in terms of hunger

had an equation for hunger in terms of time and an equation for craves ice cream in terms of hunger however usually these relationships are not so obvious instead of having two separate equations we usually get the first equation jammed into the second and when all you have is this it's not so obvious how the chain rule applies so we can talk about how to apply the chain rule in this situation let us scooch the equation to the left so we have room to work now one thing we can do in this

let us scooch the equation to the left so we have room to work now one thing we can do in this situation is look for things in the equation that can be put in parentheses for example the square root symbol can be replaced with parentheses now we can say that the stuff inside the parentheses is time squared plus one half and craves ice cream can be rewritten as the square root of the stuff inside now the chain rule tells us that the derivative of craves ice cream with respect to time is the

now the chain rule tells us that the derivative of craves ice cream with respect to time is the derivative of craves ice cream with respect to the stuff inside times the derivative of the stuff inside with respect to time the power rule gives us the derivative of craves ice cream with respect to the stuff inside and the power rule gives us the derivative of the stuff inside with respect to time now we just plug the derivatives into the chain rule and plug in the equation for the stuff inside

now we just plug the derivatives into the chain rule and plug in the equation for the stuff inside cancel out the twos and we get the derivative of craves ice cream with respect to the time since last snack and that's exactly what we got before bam now let's look at how the chain rule applies to the residual sum of squares a commonly used loss function in machine learning note if this does not make any sense to you just imagine i said now let's look at one last example imagine we measured

make any sense to you just imagine i said now let's look at one last example imagine we measured someone's weight and height and we wanted to fit this green line to the measurement now to keep things simple let's assume we can only move the green line up and down the equation for the green line is height equals the intercept plus 1 times weight and we can change the intercept but to keep things simple we can't change the slope which is set to 1. if we set the intercept to 0 then this location

simple we can't change the slope which is set to 1. if we set the intercept to 0 then this location on the green line is the predicted height and we can calculate the residual the difference between the observed height and the value predicted by the line and we can plot the residual on this graph which has the intercept on the x-axis and the residual on the y-axis if we change the intercept here then we can see the change in the residual here and because a common way to evaluate how good the

then we can see the change in the residual here and because a common way to evaluate how good the green line fits the data is the squared residual we can plot the squared residual here where we have the residuals on the x-axis and the squared residuals on the y-axis now if we change the intercept here then we change the residual here and here and changing the residual here changes the squared residual here in order to find the value for the intercept that minimizes the squared residual we are

here in order to find the value for the intercept that minimizes the squared residual we are going to find the derivative of the squared residual with respect to the intercept and then we're going to find where the derivative equals zero because given the function y equals the residual squared the derivative is zero at the lowest point the chain rule says that because the residual links the intercept to the squared residual then the derivative of the squared residual with respect to the

intercept to the squared residual then the derivative of the squared residual with respect to the intercept is the derivative of the squared residual with respect to the residual times the derivative of the residual with respect to the intercept the power rule tells us that the derivative of the residual squared is just two times the residual so let's plug that in to solve for the derivative of the residual with respect to the intercept we move the equation for the residual over here so we have

residual with respect to the intercept we move the equation for the residual over here so we have room to work then we plug in the equation for the predicted height then in order to remove these parentheses we multiply everything inside by negative one now the derivative of the residual with respect to the intercept is zero because this term does not contain the intercept plus negative one because the derivative of the negative intercept equals negative one plus zero because the last term does

the derivative of the negative intercept equals negative one plus zero because the last term does not contain the intercept now do the math and we are left with negative one and that makes sense because the derivative is just the slope of the orange line and by i we can see that the slope of the orange line is negative one so let's plug this derivative in here and do a little math and plug in the equation for the residual now we have the derivative for the residual squared in terms of the

the equation for the residual now we have the derivative for the residual squared in terms of the intercept note if instead of starting with separate equations for the residual and the residual squared we started with just the equation for the residual squared with the equation for the predicted height jammed into it then just like before we can use parentheses to help us out in this case we'll call everything between the outermost parentheses the stuff inside which equals the observed minus

call everything between the outermost parentheses the stuff inside which equals the observed minus the intercept minus one times weight and that means the residual squared can be rewritten as the square of the stuff inside now we can use the chain rule to determine the derivative of the residual squared with respect to the intercept it's the derivative of the residual squared with respect to the stuff inside times the derivative of the stuff inside with respect to the intercept just like before

inside times the derivative of the stuff inside with respect to the intercept just like before the derivative of the residual with respect to the stuff inside is two times the stuff inside so we plug that into the chain rule and the derivative of the stuff inside with respect to the intercept is negative one so we plug that into the chain rule now we just plug in the stuff inside multiply two with negative one and we end up with the exact same derivative as before bam now we want to find the

negative one and we end up with the exact same derivative as before bam now we want to find the value for the intercept such that the derivative of the residual squared equals zero so we plug in the observed height and the observed weight set the derivative equal to 0 and solve for the intercept and at long last we see that when the intercept equals one we minimize the squared residual and we have the best fitting line triple bam hooray we've made it to the end of another exciting stack quest

the best fitting line triple bam hooray we've made it to the end of another exciting stack quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of the statquest study guides or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Gradient Descent is decent at estimating parameters. StatQuest! Hello! I'm Josh Starmer and welcome to StatQuest. Today we're going to learn about Gradient Descent and we're going to go through the algorithm step by step. Note: this StatQuest assumes you already understand the basics of least squares and linear regression, so if you're not already down with that, check out the Quest. In statistics, machine learning, and other data science fields, we optimize a lot of stuff. When we fit a line

machine learning, and other data science fields, we optimize a lot of stuff. When we fit a line with linear regression, we optimize the intercept and the slope. When we use logistic regression, we optimize a squiggle. And when we use t-SNE, we optimize clusters. These are just a few examples of the stuff we optimize, there are tons more. The cool thing is that Gradient Descent can optimize all these things, and much more. So, if we learn how to optimize this line using Gradient Descent, then

these things, and much more. So, if we learn how to optimize this line using Gradient Descent, then we'll have learned the strategy that optimizes this squiggle, and these clusters, and many more of the optimization problems we have in statistics, machine learning, and data science. So let's start with a simple data set. On the x-axis we have weight. On the y-axis we have height. If we fit a line to the data and someone tells us that they weigh 1.5, we can use the line to predict that they will

to the data and someone tells us that they weigh 1.5, we can use the line to predict that they will be 1.9 tall. So let's learn how Gradient Descent can fit a line to data by finding the optimal values for the intercept and the slope. Actually, we'll start by using Gradient Descent to find the intercept. Then, once we understand how Gradient Descent works, we'll use it to solve for the intercept and the slope. So, for now, let's just plug in the Least Squares estimate for the slope, 0.64, and

and the slope. So, for now, let's just plug in the Least Squares estimate for the slope, 0.64, and we'll use Gradient Descent to find the optimal value for the intercept. The first thing we do is pick a random value for the intercept. This is just an initial guess that gives Gradient Descent something to improve upon. In this case, we'll use 0, but any number will do. And that gives us the equation for this line. In this example, we will evaluate how well this line fits the data with the sum of

for this line. In this example, we will evaluate how well this line fits the data with the sum of the squared residuals. Note: in machine learning lingo, the sum of the squared residuals is a type of Loss Function. We'll talk more about Loss Functions towards the end of the video. We'll start by calculating this residual. This data point represents a person with weight 0.5 and height 1.4. We get the predicted height, the point on the line, by plugging weight equals 0.5 into the equation for the

predicted height, the point on the line, by plugging weight equals 0.5 into the equation for the line. And the predicted height is 0.32. The residual is the difference between the observed height and the predicted height, so we calculate the difference between 1.4 and 0.32, and that gives us 1.1 for the residual. Here's the square of the first residual. The second residual is 0.4. and the third residual is 1.3. In the end, 3.1 is the sum of the squared residuals. Now, just for fun, we can plot

is 1.3. In the end, 3.1 is the sum of the squared residuals. Now, just for fun, we can plot that value on a graph. This graph has the sum of squared residuals on the y-axis, and different values for the intercept on the x-axis. This point represents the sum of the squared residuals when the intercept equals zero. However, if the intercept equals 0.25, then we would get this point on the graph. And if the intercept equals 0.5, then we would get this point. And for increasing values for the

And if the intercept equals 0.5, then we would get this point. And for increasing values for the intercept we get these points. Of the points that we calculated for the graph, this one has the lowest sum of squared residuals. But is it the best we can do? What if the best value for the intercept is somewhere between these values? A slow and painful method for finding the minimal sum of the squared residuals is to plug and chug a bunch more values for the intercept. Don't despair! Gradient

residuals is to plug and chug a bunch more values for the intercept. Don't despair! Gradient Descent is way more efficient. Gradient Descent only does a few calculations far from the optimal solution, and increases the number of calculations closer to the optimal value. In other words, gradient descent identifies the optimal value by taking big steps when it is far away, and baby steps when it is close. So let's get back to using gradient ascent to find the optimal value for the intercept,

is close. So let's get back to using gradient ascent to find the optimal value for the intercept, starting from a random value. In this case, the random value was zero. When we calculated the sum of the squared residuals, the first residual was the difference between the observed height, which was 1.4, and the predicted height, which came from the equation for this line. So we replace predicted height with the equation for the line. Since the individual weighs 0.5 we replace weight with 0.5.

height with the equation for the line. Since the individual weighs 0.5 we replace weight with 0.5. So, for this individual, this is their observed height and this is their predicted height. Note: we can now plug in any value for the intercept and get a new predicted height. Now let's focus on the second data point. Just like before, the residual is the difference between the observed height, which is 1.9, and the predicted height, which comes from the equation for the line. Snd since this

which is 1.9, and the predicted height, which comes from the equation for the line. Snd since this individual weighs 2.3, we replace weight with 2.3. Now let's focus on the last person. Again, the residual is the difference between the observed height, which is 3.2, and the predicted height, which comes from the equation for the line. And since this person weighs 2.9, we'll replace weight with 2.9. Now we can easily plug in any value for the intercept and get the sum of the squared residuals.

Now we can easily plug in any value for the intercept and get the sum of the squared residuals. Thus, we now have an equation for this curve, and we can take the derivative of this function and determine the slope at any value for the intercept. So let's take the derivative of the sum of the squared residuals with respect to the intercept. The derivative of the sum of the squared residuals with respect to the intercept equals the derivative of the first part, plus the derivative of the second

respect to the intercept equals the derivative of the first part, plus the derivative of the second part, plus the derivative of the third part. Let's start by taking the derivative of the first part. First, we'll move this part of the equation up here, so that we have room to work. To take the derivative of this we need to apply the chain rule. So we start by moving the square to the front and multiply that by the derivative of the stuff inside the parentheses. These parts don't contain a term

that by the derivative of the stuff inside the parentheses. These parts don't contain a term for the intercept, so they go away. Then we simplify by multiplying two by negative one. And this is the derivative of the first part, so we plug it in. Now we need to take the derivative of the next two parts. I'll leave that as an exercise for the viewer. Bam! Let's move the derivative up here, so that it's not taking up half the screen. Now that we have the derivative, Gradient Descent will use it to

not taking up half the screen. Now that we have the derivative, Gradient Descent will use it to find where the sum of squared residuals is lowest. Note: if we were using least squares to solve for the optimal value for the intercept, we would simply find where the slope of the curve equals zero. In contrast gradient descent finds the minimum value by taking steps from an initial guess until it reaches the best value. This makes Gradient Descent very useful when it is not possible to solve for

the best value. This makes Gradient Descent very useful when it is not possible to solve for where the derivative equals zero. And this is why Gradient Descent can be used in so many different situations. Bam! Remember, we started by setting the intercept to a random number. In this case that was zero. So we plug zero into the derivative and we get negative 5.7. So, when the intercept equals 0, the slope of the curve equals negative 5.7. Note: the closer we get to the optimal value for the

0, the slope of the curve equals negative 5.7. Note: the closer we get to the optimal value for the intercept, the closer the slope of the curve gets to zero. This means that when the slope of the curve is close to zero, then we should take baby steps, because we are close to the optimal value. And when the slope is far from zero, then we should take big steps because we are far from the optimal value. However, if we take a super, huge step, then we would increase the sum of the squared

value. However, if we take a super, huge step, then we would increase the sum of the squared residuals. So the size of the step should be related to the slope, since it tells us if we should take a baby step or a big step. But we need to make sure the big step is not too big. Gradient Descent determines the step size by multiplying the slope by a small number called the learning rate. Note: we'll talk more about learning rates later. When the intercept equals 0, the step size equals negative

talk more about learning rates later. When the intercept equals 0, the step size equals negative 5.7. With the step size, we can calculate a new intercept. The new intercept is the old intercept minus the step size. So we plug in the numbers, and the new intercept equals 0.57. Bam! In one big step, we moved much closer to the optimal value for the intercept. Going back to the original data and the original line, with the intercept equals 0, we can see how much the residuals shrink when the

the original line, with the intercept equals 0, we can see how much the residuals shrink when the intercept equals 0.57. Now let's take another step closer to the optimal value for the intercept. To take another step, we go back to the derivative and plug in the new intercept, and that tells us the slope of the curve equals negative 2.3. Now let's calculate the step size. By plugging in negative 2.3 for the slope, and 0.1 for the learning rate, ultimately the step size is negative 0.23. And the

for the slope, and 0.1 for the learning rate, ultimately the step size is negative 0.23. And the new intercept equals 0.8. Now we can compare the residuals when the intercept equals 0.57 to when the intercept equals 0.8. Overall the sum of the squared residuals is getting smaller. Notice that the first step was relatively large, compared to the second step. Now let's calculate the derivative at the new intercept: and we get negative 0.9. The step size equals negative 0.09, and the new intercept

new intercept: and we get negative 0.9. The step size equals negative 0.09, and the new intercept equals 0.89. Now we increase the intercept from 0.8 to 0.89, then we take another step and the new intercept equals 0.92. And then we take another step, and the new intercept equals 0.94. And then we take another step, and the new intercept equals 0.95. Notice how each step gets smaller and smaller the closer we get to the bottom of the curve. After six steps, the gradient ascent estimate for the

the closer we get to the bottom of the curve. After six steps, the gradient ascent estimate for the intercept is 0.95. Note: the least squares estimate for the intercept is also 0.95. so we know that gradient descent has done its job, but without comparing its solution to a gold standard, how does gradient descent know to stop taking steps? Gradient Descent stops when the step size is very close to zero. The step size will be very close to zero when the slope is very close to zero. In practice,

zero. The step size will be very close to zero when the slope is very close to zero. In practice, the minimum step size equals 0.001 or smaller. So if this slope equals 0.009, then we would plug in 0.009 for the slope and 0.1 for the learning rate and get 0.0009, which is smaller than 0.001, so gradient descent would stop. That said, gradient descent also includes a limit on the number of steps it will take before giving up. In practice, the maximum number of steps equals 1000 or greater. So,

it will take before giving up. In practice, the maximum number of steps equals 1000 or greater. So, even if the step size is large, if there have been more than the maximum number of steps, gradient descent will stop. Okay, let's review what we've learned so far. The first thing we did is decide to use the sum of the squared residuals as the loss function to evaluate how well a line fits the data. Then, we took the derivative of the sum of the squared residuals. In other words, we took the

data. Then, we took the derivative of the sum of the squared residuals. In other words, we took the derivative of the loss function. Then, we picked a random value for the intercept, in this case we set the intercept to be equal to zero. Then, we calculated the derivative when the intercept equals zero, plugged that slope into the step size calculation, and then calculated the new intercept, the difference between the old intercept and the step size. Lastly, we plugged the new intercept into

difference between the old intercept and the step size. Lastly, we plugged the new intercept into the derivative and repeated everything until step size was close to zero. Double bam! Now that we understand how gradient descent can calculate the intercept, let's talk about how to estimate the intercept and the slope. Just like before, we'll use the sum of the squared residuals as the loss function. This is a 3D graph of the loss function for the different values for the intercept and the slope.

This is a 3D graph of the loss function for the different values for the intercept and the slope. This axis is the sum of the squared residuals, this axis represents different values for the slope, and this axis represents different values for the intercept. We want to find the values for the intercept and slope that give us the minimum sum of the squared residuals. So, just like before, we need to take the derivative of this function. And just like before, we'll take the derivative with

need to take the derivative of this function. And just like before, we'll take the derivative with respect to the intercept. But, unlike before, we'll also take the derivative with respect to the slope. We'll start by taking the derivative with respect to the intercept. Just like before, we'll take the derivative of each part. And, just like before, we'll use the chain rule and move the square to the front, and multiply that by the derivative of the stuff inside the parentheses. [Music] Since

the front, and multiply that by the derivative of the stuff inside the parentheses. [Music] Since we are taking the derivative with respect to the intercept, we treat the slope like a constant, and the derivative of a constant is zero. So, we end up with negative one, just like before. Then we simplify by multiplying two by negative one. And this is the derivative of the first part. So we plug it in. Likewise, we replace these terms with their derivatives. So this whole thing is the derivative

in. Likewise, we replace these terms with their derivatives. So this whole thing is the derivative of the sum of squared residuals with respect to the intercept. Now let's take the derivative of the sum of the squared residuals with respect to the slope. Just like before, we take the derivative of each part and, just like before, we'll use the chain rule to move the square to the front and multiply that by the derivative of the stuff inside the parentheses. Since we are taking the derivative

that by the derivative of the stuff inside the parentheses. Since we are taking the derivative with respect to the slope, we treat the intercept like a constant and the derivative of a constant is zero. So we end up with negative 0.5. Then we simplify by moving the negative 0.5 to the front. Note: I left the 0.5 in bold instead of multiplying it by 2 to remind us that 0.5 is the weight for the first sample. And this is the derivative of the first part. So we plug it in. Likewise, we replace

first sample. And this is the derivative of the first part. So we plug it in. Likewise, we replace these terms with their derivatives. Again, 2.3 and 2.9 are in bold to remind us that they are the weights of the second and third samples. Here's the derivative of the sum of the squared residuals with respect to the intercept, and here's the derivative with respect to the slope. Note: when you have two or more derivatives of the same function they are called a gradient. We will use this gradient

two or more derivatives of the same function they are called a gradient. We will use this gradient to descend to the lowest point in the loss function, which, in this case, is the sum of the squared residuals. Thus, this is why the algorithm is called Gradient Descent. Bam! Just like before, we'll start by picking a random number for the intercept. In this case, we'll set the intercept to be equal to zero, and we'll pick a random number for the slope. In this case we'll set the slope to be 1.

to zero, and we'll pick a random number for the slope. In this case we'll set the slope to be 1. Thus, this line, with intercept equals 0 and slope equals 1, is where we will start. Now, let's plug in 0 for the intercept and 1 for the slope. And that gives us two slopes. Now, we plug the slopes into the step size formulas, and multiply by the learning rate, which this time we set to 0.01. Note: The larger learning rate that we used in the first example doesn't work this time. Even after a bunch

larger learning rate that we used in the first example doesn't work this time. Even after a bunch of steps, Gradient Descent doesn't arrive at the correct answer. This means that Gradient Descent can be very sensitive to the learning rate. The good news is that, in practice, a reasonable learning rate can be determined automatically by starting large and getting smaller with each step. So, in theory, you shouldn't have to worry too much about the learning rate. Anyway, we do the math and get

you shouldn't have to worry too much about the learning rate. Anyway, we do the math and get two step sizes. Now we calculate the new intercept and new slope by plugging in the old intercept and the old slope, and the step sizes. And we end up with a new intercept and a new slope. This is the line we started with and this is the new line after the first step. Now we just repeat what we did until all of the step sizes are very small, or we reach the maximum number of steps. This is the best

all of the step sizes are very small, or we reach the maximum number of steps. This is the best fitting line, with intercept equals 0.95 and slope equals 0.64,  the same values we get from least squares. Double bam! We now know how Gradient Descent optimizes two parameters, the slope and the intercept. If we had more parameters then we just take more derivatives and everything else stays the same. Triple bam! Note: the sum of the squared residuals is just one type of Loss Function. However,

Triple bam! Note: the sum of the squared residuals is just one type of Loss Function. However, there are tons of other loss functions that work with other types of data. Regardless of which Loss Function you use, Gradient Descent works the same way. Step 1: take the derivative of the loss function for each parameter in it. In fancy machine learning lingo, take the gradient of the loss function. Step 2: pick random values for the parameters. Step 3: plug the parameter values into the derivatives

2: pick random values for the parameters. Step 3: plug the parameter values into the derivatives (ahem, the gradient). Step 4: calculate the step sizes. Step 5: calculate the new parameters. Now go back to step 3 and repeat until step size is very small or you reach the maximum number of steps. One last thing before we're done. In our example we only had three data points, so the math didn't take very long. But when you have millions of data points it can take a long time. So there is a thing

very long. But when you have millions of data points it can take a long time. So there is a thing called Stochastic Gradient Descent that uses a randomly selected subset of the data at every step rather than the full data set. This reduces the time spent calculating the derivatives of the loss function. That's all. Stochastic Gradient Descent sounds fancy, but it's no big deal. Hooray! We've made it to the end of another exciting StatQuest. If you like this StatQuest and want to see more,

made it to the end of another exciting StatQuest. If you like this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, well, consider buying one or two of my original songs, or buying a StatQuest t-shirt or hoodie. The links are in the description below. Alright, until next time. Quest on!

you're gonna do something crazy I'm gonna do something random he's gotta be stochastic he's gotta be stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about stochastic gradient descent and it's gonna be clearly explained note this stat quest assumes that you are already familiar with gradient descent if not check out the quest the link is in the description below this video picks up where the original leaves off providing more details about how stochastic

below this video picks up where the original leaves off providing more details about how stochastic gradient descent works in some of its more subtle advantages now even though I just said you need to watch the stat quest on gradient descent let's do a little review to demonstrate the problem that stochastic gradient descent solves in the stat quest on gradient descent we took this simple data set height and weight measurements from three different people and we want it to fit a line to it

set height and weight measurements from three different people and we want it to fit a line to it using gradient descent however at first we started out with this generic equation for a line and the goal was to find the optimal values for the intercept and the slope for example if we started with the intercept equals 0 and the slope equals 1 then we could use wait to predict height then we would use the sum of the squared residuals as the loss function to determine how well the initial line fit

the sum of the squared residuals as the loss function to determine how well the initial line fit the data note the sum of the squared residuals is just one of many different loss functions that can evaluate how well something fits the data in this case that something is a lime to find the optimal values for the intercept and slope we plug the equation for the predicted height into the sum of the squared residuals then we took the derivative of the sum of the squared residuals with respect to

squared residuals then we took the derivative of the sum of the squared residuals with respect to the intercept and with respect to the slope then we plugged in the values from the observed data into the derivative with respect to the intercept and then we did the same thing for the derivative with respect to the slope then we plugged in the initial guess for the intercept 0 and the initial guess for the slope 1 we did the math plug the slopes into the step size formulas and multiplied by the

for the slope 1 we did the math plug the slopes into the step size formulas and multiplied by the learning rate which we set to 0.01 then we did the math calculated the new intercept and new slope by plugging in the old intercept an old slope and the step sizes and we did the math and we ended up with a new intercept and a new slope then we went back to the derivatives and repeated the process a lot of times until we took the maximum number of steps or the steps became very very small in this

lot of times until we took the maximum number of steps or the steps became very very small in this super simple example we were just fitting a line with two parameters the intercept and the slope and we only had three data points so we only had three terms to compute each step for the intercept and we only had three terms to compute each step for the slope so each step didn't require much math what if we had a more complicated model like a logistic regression that used 23,000 genes to predict

if we had a more complicated model like a logistic regression that used 23,000 genes to predict if someone will have a disease then we will have 23,000 derivatives to plug the data into and what if we have data from 1 million samples then we would have to calculate 1 million terms for each of the 23,000 derivatives in other words we'd have to calculate 23 billion terms for each step and since it's common to take at least 1,000 steps we would calculate at least two point three trillion terms so

common to take at least 1,000 steps we would calculate at least two point three trillion terms so for big data gradient descent is slow this is where stochastic gradient descent comes in handy going back to our super simple example stochastic gradient descent would randomly pick one sample for each step and just use that one sample to calculate the derivatives thus in this super simple example stochastic gradient descent reduced the number of terms computed by a factor of three if we had 1

stochastic gradient descent reduced the number of terms computed by a factor of three if we had 1 million samples then stochastic gradient descent would reduce the amount of terms computed by a factor of 1 million so that's pretty cool stochastic gradient descent is especially useful when there are redundancies in the data for example we have 12 data points but there is a lot of redundancy that forms three clusters so we start with a line with the intercept equals 0 and the slope equals 1 then

three clusters so we start with a line with the intercept equals 0 and the slope equals 1 then we randomly pick this point so we plug in the wait three and height three point three do the math in the slopes then multiply by the learning rate note just like with regular gradient descent stochastic gradient descent is sensitive to the value you choose for the learning rate and just like for regular gradient descent the general strategy is to start with a relatively large learning rate and make it

gradient descent the general strategy is to start with a relatively large learning rate and make it smaller with each step and lastly just like for regular gradient descent many implementations of stochastic gradient descent will take care of this for you by default oh no it's a terminology alert the way the learning rate changes from relatively large to relatively small is called the schedule so if you fail to converge on parameter estimates try futzing with this setting in this simple example

if you fail to converge on parameter estimates try futzing with this setting in this simple example however we're just setting the learning rate to 0.01 now we do the math intercept and the new slope BAM the new parameters give us this new line then we randomly pick another point and calculate the intercept and slope for another line then we just repeat everything a bunch of times and ultimately we end up with a line where the intercept equals 0.85 and the slope equals zero point six eight and

we end up with a line where the intercept equals 0.85 and the slope equals zero point six eight and the least squares estimates aka the gold standard gives a line where the intercept equals 0.87 and the slope equals zero point six eight BAM note the strict definition of stochastic gradient descent is to only use one sample per step however it is much more common to select a small subset of data or mini-batch for each step for example we could use three samples per step instead of just one using

mini-batch for each step for example we could use three samples per step instead of just one using a mini batch for each step takes the best of both worlds between using just one sample and all of the data at each step similar to using all of the data using a mini batch can result in more stable estimates for the parameters in fewer steps and like using just one sample per step using a mini batch is much faster than using all of the data in this example using three samples per step we ended up

is much faster than using all of the data in this example using three samples per step we ended up with an intercept equals zero point eight six and the slope equals zero point six eight which means that the estimate for the intercept was just a little closer to the gold standard 0.87 then when we used one sample and got zero point eight five double bam one cool thing about stochastic gradient descent is that when we get new data we can easily use it to take another step for the parameter

descent is that when we get new data we can easily use it to take another step for the parameter estimates without having to start from scratch in other words we don't have to go all the way back to the initial guesses for the slope and intercept and redo everything instead we pick up right where we left off and take one more step using the new sample so we plug in the weight from the new sample 1.1 and the height too do the math plug in the slopes then multiply by the learning rate 0.01 do the

and the height too do the math plug in the slopes then multiply by the learning rate 0.01 do the math intercept not from the initial guess but from the most recent estimate and calculate the new slope from the most recent estimate in the new line has intercept equals zero point eight seven eight and slope equals zero point seven triple bam we updated the parameters for the line with just the new data in summary stochastic gradient descent is just like regular gradient descent except it only

data in summary stochastic gradient descent is just like regular gradient descent except it only looks at one sample per step or a small subset or mini batch for each step stochastic gradient descent is great when we have tons of data and lots of parameters in these situations regular gradient descent may not be computationally feasible and it's cool that we can easily update the parameters when new data shows up hooray we've made it to the end of another exciting stat quest if you liked this

new data shows up hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs or getting a t-shirt the links to do this are in the description below alright until next time quest on

mocchi but it's not so complicated stack quest hello I'm Josh stormer and welcome to stack quest today we're gonna cover adaboost and it's gonna be clearly explained note this stack quest shows how to combine adaboost with decision trees because that is the most common way to use adaboost so if you're not familiar with decision trees check out the quest we will also mention random forests so if you don't know about them check out the quest we'll start by using decision trees and random forests

don't know about them check out the quest we'll start by using decision trees and random forests to explain the three concepts behind adaboost then we'll get into the nitty-gritty details of how adaboost creates a forest of trees from scratch and how it's used to make classifications so let's start by using decision trees and random forests to explain the three main concepts behind adaboost in a random forest each time you make a tree you make a full-sized tree some trees might be bigger than

random forest each time you make a tree you make a full-sized tree some trees might be bigger than others but there's no predetermined maximum depth in contrast in a forest of trees made with adaboost the trees are usually just a node and two leaves oh no it's the dreaded terminology alert a tree with just one node and two leaves is called a stump so this is really a forest of stumps rather than trees stumps are not great at making accurate classifications for example if we were using this data

stumps are not great at making accurate classifications for example if we were using this data to determine if someone had heart disease or not then a full-size decision tree would take advantage of all four variables that we measured chest pain blood circulation blocked arteries and weight to make a decision but a stump can only use one variable to make a decision thus stumps are technically weak learners however that's the way adaboost likes it and it's one of the reasons why they are so

weak learners however that's the way adaboost likes it and it's one of the reasons why they are so commonly combined now back to the random forest in a random forest each tree has an equal vote on the final classification this trees vote is worth just as much as this trees vote or this trees vote in contrast in a forest of stumps made with adaboost some stumps get more say in the final classification than others in this illustration the larger stumps get more say in the final classification

than others in this illustration the larger stumps get more say in the final classification than the smaller stumps lastly in a random forest each decision tree is made independently of the others in other words it doesn't matter if this tree was made first or this one in contrast in a forest of stumps made with adaboost order is important the errors that the first stump makes influence how the second stump is made and the air is that the second stone makes influence how the third stump is made

stump is made and the air is that the second stone makes influence how the third stump is made etc etc etc to review the three ideas behind adaboost our one adaboost combines a lot of week learners to make classifications the week learners are almost always stumps to some stumps get more say in the classification than others three each stump is made by taking the previous stumps mistakes into account BAM into the nitty-gritty detail of how to create a forest of stumps using adaboost first we'll

BAM into the nitty-gritty detail of how to create a forest of stumps using adaboost first we'll start with some data we create a forest of stumps with adaboost to predict if a patient has heart disease we will make these predictions based on a patient's chest pain and blocked artery status and their weight the first thing we do is give each sample a weight that indicates how important it is to be correctly classified note the sample weight is different from the patient weight and I'll do the

be correctly classified note the sample weight is different from the patient weight and I'll do the best I can to be clear about which of the two I'm talking about at the start all samples get the same weight one divided by the total number of samples in this case that's 1/8 and that makes the samples all equally important however after we make the first stump these weights will change in order to guide how the next stump is created in other words we'll talk more about the sample weights later

guide how the next stump is created in other words we'll talk more about the sample weights later now we need to make the first stump in the forest this is done by finding the variable chest pain blocked arteries or patient weight that does the best job classifying the samples note because all of the weights are the same we can ignore them right now we start by seeing how well chest pain classifies the samples of the five samples with chest pain three were correctly classified as having heart

the samples of the five samples with chest pain three were correctly classified as having heart disease and two were incorrectly classified of the three samples without chest pain two were correctly classified as not having heart disease and one was incorrectly classified now we do the same thing for blocked arteries and for patient wait note we used the techniques described in the decision tree stat quest to determine that 176 was the best weight to separate the patients now we calculate the

stat quest to determine that 176 was the best weight to separate the patients now we calculate the Gini index for the three stumps the Gini index for patient weight is the lowest so this will be the first stump in the forest now we need to determine how much say this stump will have in the final classification remember some stumps get more say in the final classification than others we determine how much say a stump has in the final classification based on how well it classified the samples

how much say a stump has in the final classification based on how well it classified the samples this stump made one error patient who weighs less than 176 has heart disease but the stump says they do not the total error for a stump is the sum of the weights associated with the incorrectly classified samples thus in this case the total error is 1/8 note because all of the sample weights add up to one total air will always be between zero for a perfect stump and one for a horrible stump we use

one total air will always be between zero for a perfect stump and one for a horrible stump we use the total error to determine the amount of say this stump has in the final classification with the following formula amount of say equals 1/2 times the log of 1 minus the total error divided by the total error we can draw a graph of the amount of say by plugging in a bunch of numbers between 0 & 1 for total error the blue line tells us the amount of safe for total error values between 0 & 1 when a

total error the blue line tells us the amount of safe for total error values between 0 & 1 when a stump does a good job and the total error is small then the amount of say is a relatively large positive value when a stump is no better at classification than flipping a coin ie half the stumps are correctly classified and half are incorrectly classified and the total error equals 0.5 then the amount of say will be zero and when a stump does a terrible job and the total error is close to one in

of say will be zero and when a stump does a terrible job and the total error is close to one in other words if the stump consistently gives you the opposite classification then the amount of say will be a large negative value so if a stump votes for heart disease the negative amount of say will turn that vote into not heart disease note if total error is 1 or 0 then this equation will freak out in practice a small error term is added to prevent this from happening with patient weight greater

in practice a small error term is added to prevent this from happening with patient weight greater than 176 the total error is 1/8 so we just plug and chug booty today voodoo to pooh-poohed and the amount of say that this stump has in the final classification is zero point nine seven BAM now that we've worked out how much say this stump gets when classifying a sample let's work out how much say the chest pain stump would have if it had been the best stump note we don't need to do this but I

the chest pain stump would have if it had been the best stump note we don't need to do this but I think it helps illustrate the concepts we've covered so far chest pain made three errors and the total error equals the sum of the weights for the incorrectly classified samples be do do booty so the total error for chest pain is 3/8 we can get a sense of what the amount of say will be by looking at the graph when total error equals 3/8 so we are expecting the amount of say to be between 0 and 0.5

the graph when total error equals 3/8 so we are expecting the amount of say to be between 0 and 0.5 now we plug 3/8 into the formula for the amount of say and do the math do t do pooty to do D pooh-coo pooh-coo and the amount of say that the chest pain stump would have had on the final classification is 0.42 I'll leave the blocked artery stump as an exercise for the viewer now we know how the sample weights for the incorrectly classified samples are used to determine the amount of say each

sample weights for the incorrectly classified samples are used to determine the amount of say each stump gets BAM now we need to learn how to modify the weights so that the next stump will take the errors that the current stump made into account let's go back to the first stump that we made when we created this stump all of the sample weights were the same and that meant we did not emphasize the importance of correctly classifying any particular sample but since this stumped incorrectly

the importance of correctly classifying any particular sample but since this stumped incorrectly classified this sample we will emphasize the need for the next stump to correctly classify it by increasing its sample weight and decreasing all of the other sample weights let's start by increasing the sample wait for the incorrectly classified sample this is the formula we will use to increase the sample weight for the sample that was incorrectly classified we plug in the sample weight from the

sample weight for the sample that was incorrectly classified we plug in the sample weight from the last stump and we scale one eighth with this term to get a better understanding of how this part will scale the previous sample wait let's draw a graph the blue line is equal to e raised to the amount of say when the amount of say is relatively large ie the last stump did a good job classifying samples then we will scale the previous sample weight with a large number this means that the new sample

then we will scale the previous sample weight with a large number this means that the new sample weight will be much larger than the old one and when the amount of say is relatively low ie the last stump did not do a very good job classifying samples then the previous sample weight is scaled by a relatively small number this means that the new sample weight will only be a little larger than the old one in this example the amount of say was zero point nine seven and E raised to the zero point

old one in this example the amount of say was zero point nine seven and E raised to the zero point nine seven equals two point six four that means the new sample weight is zero point three three which is more than the old one BAM now we need to decrease the sample weights for all of the correctly classified samples this is the formula we will use to decrease the sample weights the big difference is the negative sign in front of amount of say just like before we plug in the sample wait and just

is the negative sign in front of amount of say just like before we plug in the sample wait and just like before we can get a better understanding of how this will scale the sample weight by plotting a graph using different values for amount of say the blue line represents e raised to the negative amount of say when the amount of se is relatively large then we scale the sample weight by a value close to zero this will make the new sample weight very small if the amount of say for the last stump

to zero this will make the new sample weight very small if the amount of say for the last stump is relatively small then we will scale the sample weight by a value close to 1 this means that the new sample weight will be just a little smaller than the old one in this example the amount of say was 0.97 and e raised to the negative zero point nine seven equals zero point three eight the new sample weight is zero point zero five which is less than the old one BAM we will keep track of the new

weight is zero point zero five which is less than the old one BAM we will keep track of the new sample weights in this column we plug in zero point three three for the sample that was incorrectly classified all of the other samples gets zero point zero five now we need to normalize the new sample weights so that they will add up to one right now if you add up the new sample weights you get zero point six eight so we divide each new sample weight by 0.68 to get the normalized values now when we

six eight so we divide each new sample weight by 0.68 to get the normalized values now when we add up the new sample weights we get 1 plus or minus a little rounding error now we just transfer the normalized sample weights to the sample weights column since those are what we will use for the next stomp now we can use the modified sample weights to make the second stump in the forest BAM in theory we could use the sample weights to calculate weighted genie indexes to determine which variable

we could use the sample weights to calculate weighted genie indexes to determine which variable should split the next stump the weighted genie index would put more emphasis on correctly classifying this sample the one that was miss classified by the last stump since this sample has the largest sample weight alternatively instead of using a weighted Gini index we can make a new collection of samples that contains duplicate copies of the samples with the largest sample weights so we start by

that contains duplicate copies of the samples with the largest sample weights so we start by making a new but empty data set that is the same size as the original then we pick a random number between 0 and 1 and we see where that number falls when you use the sample weights like a distribution if the number is between 0 and 0.7 then we would put this sample into the new collection of samples and if the number is between 0.7 and 0.14 then we would put this sample into the new collection of

and if the number is between 0.7 and 0.14 then we would put this sample into the new collection of samples and if the number is between 0.14 and 0.2 1 then we would put this sample into the new collection of samples and if the number is between zero point two one and zero point seven zero then we would put this sample into the new collection of samples etc etc for example imagine the first number I picked was 0.72 then I would put this sample into my new collection of samples then I pick

number I picked was 0.72 then I would put this sample into my new collection of samples then I pick another random number and get 0.42 and I would put this sample into my new collection of samples then I pick 0.83 and I would put this sample into my new collection of samples then I pick 0.51 and I would put this sample into my new collection of samples note this is the second time we have added this particular sample to the new collection of samples we then continue to pick random numbers and

this particular sample to the new collection of samples we then continue to pick random numbers and add samples to the new collection until the new collection is the same size as the original ultimately this sample was added to the new collection of samples four times reflecting its larger sample weight now we get rid of the original samples and use the new collection of samples lastly we give all of the samples equal sample ways just like before however that doesn't mean the next stump will

all of the samples equal sample ways just like before however that doesn't mean the next stump will not emphasize the need to correctly classify these samples because these samples are all the same they will be treated as a block creating a large penalty for being misclassified now we go back to the beginning and try to find the stump that does the best job classifying the new collection of samples so that is how the errors that the first tree makes influence how the second tree is made and how

so that is how the errors that the first tree makes influence how the second tree is made and how the errors that the second tree makes influence how the third tree is made etc etc etc double bam now we need to talk about how a forest of stumps created by adaboost makes classifications imagine that these stumps classified a patient as has heart disease and these stumps classified the patient as does not have heart disease these are the amounts of say for these stumps and these are the amounts

does not have heart disease these are the amounts of say for these stumps and these are the amounts of say for these stumps now we add up the amounts of say for this group of stumps and for this group of stumps ultimately the patient is classified as has heart disease because this is the larger sum triple bam to review the three ideas behind adaboost our one adaboost combines a lot of weak learners to make classifications the weak learners are almost always stumps to some stumps get more say in

to make classifications the weak learners are almost always stumps to some stumps get more say in the classification than others and three each stump is made by taking the previous stumps mistakes into account if we have a way to Gini function then we use it with the sample weights otherwise we use the sample weights to make a new dataset that reflects those weights hooray we've made it to the end of another exciting stack quest if you like this stack quest and want to see more please subscribe

of another exciting stack quest if you like this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying a t-shirt or a hoodie or buying one or two of my original songs the links to do this are in the description below alright until next time quest on

[Music] gradiant buspar Tuan regression main ideas stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about the gradient boost machine learning algorithm specifically we're going to focus on how gradient boost is used for regression note this stat quest assumes you already understand decision trees so if you're not already down with those check out the quest this stat quest also assumes that you are familiar with adaboost and the trade-off between bias and

this stat quest also assumes that you are familiar with adaboost and the trade-off between bias and variance if not check out the quests the links are in the description below this stat quest is the first part in a series that explains how the gradient boost machine learning algorithm works specifically we'll use this data where we have the height measurements from six people their favorite colors their genders and their weights and we'll walk through step by step the most common way that

colors their genders and their weights and we'll walk through step by step the most common way that gradient boost fits a model to this training data note when gradient boost is used to predict a continuous value like weight we say that we are using gradient boost for regression using gradient boosts for regression is different from doing a linear regression so while the two methods are related don't get them confused with each other part two in this series we'll dive deep into the math behind

get them confused with each other part two in this series we'll dive deep into the math behind the gradient boost algorithm for regression walking through it step-by-step and proving that what we cover today is correct part three in this series shows how gradient boost can be used for classification specifically we'll walk through step by step the most common way gradient boost can classify someone is either loving the movie troll 2 or not loving troll 2 part 4 we'll return to the math behind

is either loving the movie troll 2 or not loving troll 2 part 4 we'll return to the math behind gradient boost this time focusing on classification walking through it step-by-step note the gradient boost algorithm looks complicated because it was designed to be configured in a wide variety of ways but the reality is that 99% of the time only one configuration is used to predict continuous values like weight and one configuration is used to classify samples into different categories this stack

like weight and one configuration is used to classify samples into different categories this stack quest focuses on showing you the most common way gradient boost is used to predict a continuous value like weight if you are familiar with adaboost then a lot of gradient boost will seem very similar so let's briefly compare and contrast at a boost and gradient boost if we want to use these measurements to predict weight then adaboost starts by building a very short tree called a stump from the

to predict weight then adaboost starts by building a very short tree called a stump from the training data and then the amount of say that the new stump has on the final output is based on how well it compensated for those previous errors then adaboost builds the next stomp based on errors that the previous stump made in this example the new stump did a poor job compensating for the previous stumps errors and its size reflects its reduced amount of say then adaboost builds another stump based

errors and its size reflects its reduced amount of say then adaboost builds another stump based on the errors made by the previous stump and this stump did a little better than the last stop so it's a little larger then adaboost continues to make stumps in this fashion until it is made the number of stumps you asked for or it has a perfect fit in contrast gradient boost starts by making a single leaf instead of a tree or stump this leaf represents an initial guess for the weights for all of the

instead of a tree or stump this leaf represents an initial guess for the weights for all of the samples when trying to predict a continuous value like weight the first guess is the average value then gradient boost builds a tree like adaboost this tree is based on the errors made by the previous tree but unlike adaboost this tree is usually larger than a stump that said gradient boost still restricts the size of the tree in the simple example that we will go through in this stat quest we will

the size of the tree in the simple example that we will go through in this stat quest we will build trees with up to 4 leaves but no larger however in practice people often set the maximum number of leaves to be between 8 and 32 thus like adaboost gradient boost builds fixed size trees based on the previous trees errors but unlike adaboost each tree can be larger than a stump also like adaboost gradient boost scales the trees however gradient boost scales all trees by the same amount then

gradient boost scales the trees however gradient boost scales all trees by the same amount then gradient boost builds another tree based on the errors made by the previous tree and then it scales the tree and gradient boost continues to build trees in this fashion until it has made the number of trees you asked for or additional trees fail to improve the fit now that we know the main similarities and differences between gradient boost and adaboost let's see how the most common gradient boost

and differences between gradient boost and adaboost let's see how the most common gradient boost configuration would use this training data to predict weight the first thing we do is calculate the average weight this is the first attempt at predicting everyone's weight in other words if we stopped right now we would predict that everyone weighed 70 1.2 kilograms however gradient boost doesn't stop here the next thing we do is build a tree based on the errors from the first tree the errors that

here the next thing we do is build a tree based on the errors from the first tree the errors that the previous tree made are the differences between the observed weights and the predicted weight 70 1.2 so let's start by plugging in seventy one point two for the predicted weight and then plug in the first observed wait and do the math and save the difference which is called a pseudo residual in a new column note the term pseudo residual is based on linear regression where the difference between

new column note the term pseudo residual is based on linear regression where the difference between the observed values and the predicted values results in residuals the pseudo part of pseudo residual is a reminder that we are doing gradient boost not linear regression and is something I'll talk more about in part 2 of this series when we go through the math now we do the same thing for the remaining weights now we will build a tree using height favorite color and gender to predict the

remaining weights now we will build a tree using height favorite color and gender to predict the residuals if it seems strange to predict the residuals instead of the original weights just bear with me and soon all will become clear so setting aside the reason why we are building a tree to predict the residuals for the time being here's the tree remember in this example we are only allowing up to four leaves but when using a larger data set it is common to allow anywhere from 8 to 32 by

up to four leaves but when using a larger data set it is common to allow anywhere from 8 to 32 by restricting the total number of leaves we get fewer leaves than residuals as a result these two rows of data go to the same leaf so we replace these residuals with their average and these two rows of data go to the same leaf so we replace these residuals with their average now we can combine the original leaf with the new tree to make a new prediction of an individual's weight from the training

leaf with the new tree to make a new prediction of an individual's weight from the training data we start with the initial prediction seventy one point two then we run the data down the tree and we get sixteen point eight so the predicted weight equals seventy one point two plus sixteen point eight which equals eighty eight which is the same as the observed weight is this awesome no the model fits the training data too well in other words we have low bias but probably very high variance

fits the training data too well in other words we have low bias but probably very high variance gradient boost deals with this problem by using a learning rate to scale the contribution from the new tree the learning rate is a value between zero and one in this case we'll set the learning rate to 0.1 now the predicted weight equals seventy one point two plus zero point one times sixteen point eight which equals seventy two point nine with the learning rate set to 0.1 the new prediction isn't as

which equals seventy two point nine with the learning rate set to 0.1 the new prediction isn't as good as it was before but it's a little better than the prediction made with just the original leaf which predicted that all samples would weigh seventy one point two in other words scaling the tree by the learning rate results in a small step in the right direction according to the dude that invented gradient boost Jerome Freedman empirical evidence shows that taking lots of small steps in the

gradient boost Jerome Freedman empirical evidence shows that taking lots of small steps in the right direction results in better predictions with a testing data set ie lower variance BAM so let's build another tree so we can take another small step in the right direction just like before we calculate the pseudo residuals the difference between the observed weights and our latest predictions so we plug in the observed weight and the new predicted weight and we get 15.1 and we save that in the

we plug in the observed weight and the new predicted weight and we get 15.1 and we save that in the column for pseudo residuals then we repeat for all of the other individuals in the training data set small BAM note these are the original residuals from when our prediction was simply the average overall weight and these are the residuals after adding the Nutri scaled by the learning rate the new residuals are all smaller than before so we've taken a small step in the right direction double bam

residuals are all smaller than before so we've taken a small step in the right direction double bam now let's build a new tree to predict the new residuals and here's the Nutri note in this simple example the branches are the same as before however in practice the trees can be different each time just like before since multiple samples ended up in these leaves we just replace the residuals with their averages now we combine the new tree with the previous tree and the initial leaf note we scale

averages now we combine the new tree with the previous tree and the initial leaf note we scale all of the trees by the learning rate which we set to 0.1 and add everything together now we're ready to make a new prediction from the training data just like before we start with the initial prediction then add the scaled amount from the first tree in the scaled amount from the second tree that gives us seventy one point two plus zero point one times sixteen point eight plus zero point one times

us seventy one point two plus zero point one times sixteen point eight plus zero point one times fifteen point one which equals seventy four point four which is another small step closer to the observed weight now we use the initial leaf plus the scaled values from the first tree plus the scaled values from the second tree to calculate new residuals remember these were the residuals from when we just use a single leaf to predict weight and these were the residuals after we added the first tree

just use a single leaf to predict weight and these were the residuals after we added the first tree to the prediction and these are the residuals after we added the second tree to the prediction each time we add a tree to the Bur diction the residuals get smaller so we've taken another small step towards making good predictions now we build another tree to predict the new residuals and add it to the chain of trees that we have already created and we keep making trees until we reach the maximum

the chain of trees that we have already created and we keep making trees until we reach the maximum specified or adding additional trees does not significantly reduce the size of the residuals BAM then when we get some new measurements we can predict weight by starting with the initial prediction then adding the scaled value from the first tree and the second tree and the third tree etc etc etc once the math is all done we are left with the predicted weight in this case we predicted that this

once the math is all done we are left with the predicted weight in this case we predicted that this person weighed 70 kilograms triple bomb in summary when gradient boost is used for regression we start with a leaf that is the average value of the variable we want to predict in this case we want it to predict wait then we add a tree based on the residuals the difference between the observed values and the predicted values and we scale the trees contribution to the final prediction with a

values and the predicted values and we scale the trees contribution to the final prediction with a learning rate then we add another tree based on the new residuals adding trees based on the errors made by the previous tree that's all there is to it BAM tune in for part 2 in this series when we dive deep into the math behind the gradient boost algorithm for regression walking through it's step by step and proving that it really is this simple hooray we've made it to the end of another exciting

step and proving that it really is this simple hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest consider buying one of my original songs or buying a stat quest t-shirt or hoodie the links are in the description below alright until next time quest on

gradient boost is awesome gradient boost is cool now we're going to dive into some regression details stack Quest hello I'm Josh starmer and welcome to stack Quest today we're going to continue our series on gradient boost specifically we're going to dive into the algorithmic details of how gradient boost is used for regression note this stat Quest assumes who have already watched the first video in this series gradient boost part one regression main ideas if not check out the quest also

video in this series gradient boost part one regression main ideas if not check out the quest also although not required it might be helpful if you understand gradient descent so check out that Quest if you haven't already in this stat Quest we are going to walk through the original gradient boost algorithm step by step in order to keep the example from getting out of hand and we are going to use gradient boost to fit a model to a super simple training data set which contains height

to use gradient boost to fit a model to a super simple training data set which contains height measurements from three people their favorite color their gender and their weight great now that we know all about this super simple training data set let's walk through the original gradient descent algorithm step by step we'll start from the top this line describes in an abstract way the training data set and the method we will use to evaluate how well the model fits the training data set this first

set and the method we will use to evaluate how well the model fits the training data set this first part is just a fancy way to say that we have some data the x sub I refer to each row of measurements that we will use to predict weight and the Y sub eyes refer to the weights measured for each person in the data set this part just says that the I's in x sub I and Y sub by go from 1 to n where n is the number of people in our data set in this case n equal three since we only have three rows of

is the number of people in our data set in this case n equal three since we only have three rows of data Al together this means that we will refer to this row of measurements as x sub one and we will refer to this weight as y sub one this row of measurements is x sub 2 and this weight is y sub 2 this row of measurements is X sub3 and this weight is y sub3 now we need a differentiable loss function in this case a loss function is just something that evaluates how well we can predict weight the

in this case a loss function is just something that evaluates how well we can predict weight the loss function that is most commonly used doing regression with gradient boost is 12 time the observed value minus the predicted value squared now just for a few minutes humor me and ignore the one/ half in front when we remove the 1/2 we end up with the same loss function we use for linear regression for example if we had height and weight measurements from three people then we could fit a line to

for example if we had height and weight measurements from three people then we could fit a line to the data residuals are the differences between the observed weights and the weights that are predicted by the line we can evaluate how well this greenish line fits the data with the sum of the squared residuals thus the loss function is just a squared residual if we wanted to compare how well this greenish line fit the data to this pink line then we would calculate the residuals the difference

greenish line fit the data to this pink line then we would calculate the residuals the difference between the observed and the predicted values for the greenish line Square them and add them up and get 0.26 for the sum of the squared residuals for the greenish line then we would do the same thing for the pink line and I would see that 0.26 for the greenish line is smaller than 6.43 for the pink line so the greenish line is a better fit because it's some of the squared residuals is smaller note

so the greenish line is a better fit because it's some of the squared residuals is smaller note if I multiplied both sides of the formulas by 1/2 and did the math then we would get smaller numbers but we would still know that the greenish line fits the data better since its number is still relatively smaller in other words it doesn't matter if the loss function is the observed value minus the predicted value squared or if it's 12 * The observed value minus the predicted value squar red since

value squared or if it's 12 * The observed value minus the predicted value squar red since both will tell us that the greenish line has the best fit the reason why people choose this loss function for gradient boost is that when we differentiate it with respect to predicted and use the chain Rule and bring the square down to the front and multiply it by the derivative of minus predicted which is -1 then the 2 / 2 cancels out and that leaves you with the observed minus the predicted multiplied

-1 then the 2 / 2 cancels out and that leaves you with the observed minus the predicted multiplied by -1 in other words we are left with the negative residual and that makes the math easier since gradient boost uses the derivative a lot okay we've got a loss function the Y sub i's are the observed values and F ofx is a function that gives us the predicted values note we'll talk more about F ofx later we also know that the loss function is differentiable since we have already taken the

F ofx later we also know that the loss function is differentiable since we have already taken the derivative bam we figured out what the input is for the gradient boost algorithm we've got data and we've got a differentiable loss function note there are other loss functions to choose from but this is the most popular one for regression hooray now we're ready for step one we start by initializing the model with a constant value and that constant value is determined by this funky looking thing

the model with a constant value and that constant value is determined by this funky looking thing this funky looking thing is easiest to understand if we start on the right side and work our way left this is just the loss function the Y subi refers to the observed values and that funky looking Sy called gamma refers to the predicted values the summation means that we add up one loss function for each observed value and the ARG Min over gamma means we need to find a predicted value that

for each observed value and the ARG Min over gamma means we need to find a predicted value that minimizes this sum in other words if we plot The observed weights on a number line then we want to find the point on the line that minimizes the sum of the squared residuals / 2 here's a plot of 1/2 of the sum of the squared residuals for potential predicted values note we could use gradient descent to find the optimal value for predicted but we can also just solve for it because the math isn't that

find the optimal value for predicted but we can also just solve for it because the math isn't that hard the first thing we do is take the derivative of each term with respect to predicted and since we've already shown how to take the derivative of our loss function we can just plug it in then we set the sum of the derivatives equal to zero and solve and we end up with the average of The observed weights so given this loss function the value for gamma that minimizes this sum is the average of

weights so given this loss function the value for gamma that minimizes this sum is the average of The observed weights we have now created the initial predicted value fb0 of x and it equals 73.3 that means that the initial predicted value fb0 of x is just a leaf the leaf predicts that all samples will weigh 73.3 bam we finished step one we initialized the model with a constant value F sub Sub 0 of X = 73.3 in other words we created a leaf that predicts all samples will weigh 73.3 now we can

0 of X = 73.3 in other words we created a leaf that predicts all samples will weigh 73.3 now we can work on step two step two is huge but we'll take it one step at a time step two is a loop where we make all of the trees in generic terms we will make M trees but in practice most people said M to be 100 and make 100 trees Little M refers to an individual tree so when little m equals 1 then we're talking about the first tree when little m equals Big M then we're talking about the last tree and

talking about the first tree when little m equals Big M then we're talking about the last tree and when Little M is somewhere between one and Big M then we're talking about a tree somewhere between one and Big M since we are just starting step two we will set Little M equal to 1 part A of step two looks nasty but it's not this part is just the derivative of the loss function with respect to the predicted value and we've already calculated this this big minus sign tells us to multiply the

the predicted value and we've already calculated this this big minus sign tells us to multiply the derivative by -1 and that leaves us with the observed value minus the predicted value in other words this nasty looking thing is just a residual now we plug f subm minus1 of x in for predicted and since m equal 1 that means we plug in F Sub 0 ofx for f submus one of X and since F Sub 0 of X is just the leaf set to 73.3 we plug in 73.3 now we can compute R sub I comma M where R is short for

just the leaf set to 73.3 we plug in 73.3 now we can compute R sub I comma M where R is short for residual I is the sample number and M is the tree that we're trying to build this tells us to calculate residuals for all three samples in the data set so we'll start with r sub1 comma 1 the residual for the first sample and the first tree so we plug in the observed weight for the first sample and get 14.7 we'll keep track of R sub 1 comma 1 by adding it to the data set now we calculate R sub2

get 14.7 we'll keep track of R sub 1 comma 1 by adding it to the data set now we calculate R sub2 comma 1 and we calculate R sub3 comma 1 hooray we finished part A of step two by calculating a residual for each sample example note before we move on I just want to point out that this derivative is the gradient that gradient boost is named after little bam I also want to point out that the r subi comma M values are technically called pseudo residuals when we use this loss function we end up

comma M values are technically called pseudo residuals when we use this loss function we end up calculating normal residuals but if we used another LW function this time we're not multiplying by 1/2 then we would end up with something similar to a residual but not quite in other words we'd end up with a pseudo residual and that's why the r sub I comma M's are called pseudo residuals okay now let's do Part B all this is saying is that we will build a regression tree to predict the residuals

let's do Part B all this is saying is that we will build a regression tree to predict the residuals instead of the weights so we will use height favorite color and gender to predict the residuals here's the new tree yes I know this is just a stump and gradient boost almost always uses larger trees however in order to demonstrate the details of the gradient boost algorithm we need at least one leaf with more than one sample in it and when you only have three samples then you can't have more than

with more than one sample in it and when you only have three samples then you can't have more than two leaves so we're stuck using stumps even though they are not typically used with gradient boost the residual for the third sample X sub3 goes to the leaf on the left and the residual for samples x sub1 and x sub2 go to the leaf on the right so we have a regression tree fit to the residuals now we need to create terminal regions R subj comma M this part is super easy because the leaves are the

need to create terminal regions R subj comma M this part is super easy because the leaves are the terminal regions R subj comma M note this little m is the index for the tree we just made since this is the first tree m equal 1 and this little J is the index for each Leaf in the tree since this tree has two leaves J subm equals 2 so in this example we'll let this Leaf be R sub 1 comma 1 and this Leaf be R sub 2 comma 1 note it doesn't matter which Leaf gets which label however once we give a

Leaf be R sub 2 comma 1 note it doesn't matter which Leaf gets which label however once we give a leaf a label we need to keep track of it hooray we finished Part B of step two by fitting a regression tree to the residuals and labeling the leaves now let's do part C in this part we determine the output values for each Leaf specific specifically since two residuals ended up in this Leaf it's unclear what its output value should be so for each Leaf in the new tree we compute an output value gamma

what its output value should be so for each Leaf in the new tree we compute an output value gamma subj comma M the output value for each Leaf is the value for gamma that minimizes this summation note this minimization is like what we did in step one one small difference is that now we are taking the previous prediction into account while before since we were just starting out there was no previous prediction the other difference is that this summation is picky about which samples it includes

prediction the other difference is that this summation is picky about which samples it includes while before the summation included all of the samples specifically the x sub I in R sub I comma J means that since only one sample X sub3 3 goes to Leaf R sub 1A 1 then only X sub3 is used to calculate the output value for R sub 1 comma 1 and since only two samples x sub 1 and xub 2 go to Leaf R sub 1 comma 2 then only x sub1 and x sub2 are used to calculate the output value for R sub1a 2 let's

1 comma 2 then only x sub1 and x sub2 are used to calculate the output value for R sub1a 2 let's start by calculating the output value for the leaf on the left R sub 1A 1 that means Jal 1 since this is the first leaf and m equal 1 since this is the first tree now let's replace the generic loss function with the actual loss function that we decided to use and let's expand the summation into individual terms since only X sub3 goes to R sub 1 comma 1 expanding means we remove the big Sigma and

terms since only X sub3 goes to R sub 1 comma 1 expanding means we remove the big Sigma and swap the eyes with threes now we plug in the value for y sub3 The observed value and the most recent predicted value for x sub3 since m equal 1 the most recent prediction was F Sub 0 of X which predicted that all samples weighed 73.3 so we plug in 73.3 for f subm minus1 of x sub3 and simplify what's inside the parentheses now we need to find the value for gamma that minimizes this equation just like step

the parentheses now we need to find the value for gamma that minimizes this equation just like step one we can try different values for Gamma or Solve IT analytically since the math is easy we'll solve for it first we take the derivative of the loss function with respect to gamma just like we did at the very start we use the chain R and get this now we set the derivative equal to zero and solve the value for gamma that minimizes this equation is -7.3 and that means gamma sub 1A 1 = -7.3 and

the value for gamma that minimizes this equation is -7.3 and that means gamma sub 1A 1 = -7.3 and ultimately the leaf R sub 1A 1 has an output value of -7.3 now let's solve for the output value for R sub 2 comma 1 that means J equal 2 since this is the second leaf and M equals 1 since this is still the first tree now plug in the loss function expand the summation plug in the observed weights and plug in 73.3 for f subm minus1 of x sub 1 and f subn minus1 of x sub 2 now simplify what's inside

plug in 73.3 for f subm minus1 of x sub 1 and f subn minus1 of x sub 2 now simplify what's inside the parentheses and take the derivative with respect to gamma using the chain Rule and that gives us this derivative which we set equal to zero and then we solveo we end up with the average average of the residuals that ended up in leaf R sub 2 comma 1 and that equals 8.7 so the value for gamma that minimizes this equation is 8.7 and that means gamma sub 2 comma 1 = 8.7 and ultimately the leaf R

minimizes this equation is 8.7 and that means gamma sub 2 comma 1 = 8.7 and ultimately the leaf R sub2 comma 1 has an output value of 8.7 one last little observation before we move on we just saw that the output value for this Leaf R sub2 comma 1 is the average of the residuals that ended up here given our choice of loss function the output values are always the average of the residuals that end up in the same Leaf even if only one residual ends up in a leaf the output value is still the

end up in the same Leaf even if only one residual ends up in a leaf the output value is still the average since -7.3 / 1 = -7.3 hooray we finished part C of step two by Computing gamma values or output values for each Leaf now let's do Part D in part D we make a new prediction for each sample since this is our first pass through step two and M equals 1 this new prediction will be called f sub1 of x the new prediction f sub1 of x is based on the last prediction we made F Sub 0 ofx and the tree

x the new prediction f sub1 of x is based on the last prediction we made F Sub 0 ofx and the tree we just finished making note this summation is there just in case a single sample ends up in multiple leaves the summation says we should add up the output values gamma subj comma M's for all the leaves R subj comma M that a sample X can be found in the last thing in this equation is this Greek character new new is the learning rate and is a value between 1 and zero a small learning rate reduces

new new is the learning rate and is a value between 1 and zero a small learning rate reduces the effect each tree has on the final prediction and this improves accuracy in the long run in this example we'll set new to 0.1 hooray we've created f sub1 of x now we will use f sub1 of x to make new predictions for each sample we'll start with the first sample X sub1 the new prediction for X sub1 starts with the last prediction F Sub 0 of X which is 73.3 plus 0.1 times the output value from the new

with the last prediction F Sub 0 of X which is 73.3 plus 0.1 times the output value from the new tree which is 8.7 because xub 1's height is greater than 1.55 now just do the math the new prediction for the first sample is 74.2 which is slightly closer to the observed weight 88 than the first prediction 73.3 bam now let's make a new prediction for the second sample x sub 2 the new prediction for X sub2 is also 74.2 which is an improvement over the first prediction 73. 3 now let's make a new

X sub2 is also 74.2 which is an improvement over the first prediction 73. 3 now let's make a new prediction for the third sample X sub3 the new prediction is 71.6 which is an improvement over 73.3 double bam hooray we made it through one iteration of step two we started by setting M to one then we we solved for the negative gradient Plugged In The observed values plugged in the latest predictions and that gave us residuals then we fit a regression tree to the residuals and computed the output

and that gave us residuals then we fit a regression tree to the residuals and computed the output values gamma subj comma M for each Leaf lastly we made new predictions for each sample F sub one of X based on the previous prediction f F Sub 0 of X the learning rate new and the output values gamma subj comma M from the new tree now we set m equals 2 and do everything over again a calculate new residuals for the new predictions B create a new tree C calculate output values and D make new

new residuals for the new predictions B create a new tree C calculate output values and D make new predictions at the end of the second round m equal 2 and the new predictions f sub2 ofx are based on the predictions made by f sub1 of x and the learning rate times the output values from the newest tree now in the interest of time let's assume Big M equals 2 so that we are done with step two note in practice Big M equals 100 or more more now we are ready for gradient Boost's third and final step

practice Big M equals 100 or more more now we are ready for gradient Boost's third and final step if Big M equals 2 then f sub2 of x is the output from the gradient boost algorithm holy smokes we made it through this whole thing that's crazy now if we receive some new data we could use f sub2 of x to predict the weight the predicted weight equals 73.3 + 0.1 * -7.3 plus 0.1 * -15.6 which equals 70 gradient boost predicts this person weighs 70 kg triple bam note before we go I want to remind you

gradient boost predicts this person weighs 70 kg triple bam note before we go I want to remind you that gradient boost usually uses trees larger than stumps I only use stumps in this tutorial because our training data set was so darn small also be sure to watch part three of this exciting series on gradient boost next time we'll talk about classification hooray we've made it to the end of another exciting stack Quest if you like this stack Quest and want to see more please subscribe and if you

exciting stack Quest if you like this stack Quest and want to see more please subscribe and if you want to support stack Quest well consider getting one or two of my original songs or buying a t-shirt or a hoodie or a onesie or something anyways the links are below all right until next time Quest on

last night ahead a dream about gradient boost and it was crazy I was using it to classify things and my memory is clear and not hazy stant quest hello I'm Josh Dahmer and welcome to stat quest today we're gonna do part 3 in our series on gradient boost this time we'll focus on the main ideas of how gradient boost can be used for classification note this stat quest assumes you have already watched gradient boost part 1 regression main ideas if not check out the quest in addition when gradient

gradient boost part 1 regression main ideas if not check out the quest in addition when gradient boost is used for classification it has a lot in common of logistic regression so if you're not already familiar with logistic regression check out the quests in this stat quest we will use this training data where we have collected popcorn preference from six people their age their favorite color and whether or not they loved the movie troll two and walk through step by step the most common way

and whether or not they loved the movie troll two and walk through step by step the most common way that gradient boost fits a model to this training data just like in part one of this series we start with a leaf that represents an initial prediction for every individual when we use gradient boost for classification the initial prediction for every individual is the log of the odds I like to think of the log of the odds as the logistic regression equivalent of the average so let's calculate the

of the log of the odds as the logistic regression equivalent of the average so let's calculate the overall log of the odds that someone loves troll two since four people in the training dataset love troll two and two people do not then the log of the odds that someone loves troll two is the log of 4 divided by two which equals zero point seven which we will put into our initial leaf so this is the initial prediction how do we use it for classification like with logistic regression the easiest

initial prediction how do we use it for classification like with logistic regression the easiest way to use the log of the odds for classification is to convert it to a probability and we do that with the logistic function probability of loving troll 2 equals e to the log odds divided by 1 plus e to the log odds so we plug in the log of the odds into the logistic function do the math and we get 0.7 as the probability of loving troll 2 and let's save that up here for now note these two numbers

0.7 as the probability of loving troll 2 and let's save that up here for now note these two numbers the log of 4 divided by 2 and the probability are the same only because I'm rounding if I allowed four digits past the decimal place then the log of 4 divided by 2 would equal 0.6931 and the probability would equal zero point 6 6 6 7 since the probability of loving troll 2 is greater than 0.5 we can classify everyone in the training dataset as someone who loves troll 2 note while 0.5 is a very

can classify everyone in the training dataset as someone who loves troll 2 note while 0.5 is a very common threshold for making classification decisions based on probability we could have just as easily used a different value for more details check out the stat quest ROC and AUC clearly explained now classifying everyone in the training dataset as someone who loves troll - is pretty lame because two of the people do not love the movie we can measure how bad the initial prediction is by

because two of the people do not love the movie we can measure how bad the initial prediction is by calculating pseudo residuals the difference between the observed and the predicted values although the math is easy I think it's easier to grasp what's going on if we draw the residuals on a graph the y-axis is the probability of loving troll 2 the predicted probability of loving troll 2 is 0.7 the red dots with the probability of loving troll to equal to zero represent the two people that do not

red dots with the probability of loving troll to equal to zero represent the two people that do not love troll two and the blue dots with the probability of loving troll two equal to one represent the four people that love troll two in other words the red and blue dots are the observed values and the dotted line is the predicted value so for this sample we plug in one for the observed value and 0.7 for the predicted value and we get 0.3 and we save the residual in a new column then we calculate

for the predicted value and we get 0.3 and we save the residual in a new column then we calculate the rest of the residuals but ah buh buh duh buh buh buh duh buh buh duh buh buh duh buh buh duh buh buh duh buh buh buh hooray we've calculated the residuals for the Leafs initial prediction now we build a tree using likes popcorn age and favorite color to predict the residuals and here's the tree note just like when we used gradient boost for regression we are limiting the number of leaves that

note just like when we used gradient boost for regression we are limiting the number of leaves that we will allow in the tree in this simple example we are limiting the number of leaves to three in practice people often set the maximum number of leaves to be between 8 and 32 now let's calculate the output values for the leaves note these three rows of data go to the same leaf these two rows of data go to the same leaf lastly this row of data goes to its own leaf when we used gradient boost for

go to the same leaf lastly this row of data goes to its own leaf when we used gradient boost for regression a leaf with a single residual had an output value equal to that residual in contrast when we use gradient boost for classification the situation is a little more complex this is because the predictions are in terms of the log of the odds and this leaf is derived from a probability so we can't just add them together and get a new log of the odds prediction without some sort of

so we can't just add them together and get a new log of the odds prediction without some sort of transformation when we use gradient boosts for classification the most common transformation is the following formula the numerator is the sum of all the residuals in the leaf and the denominator is the sum of the previously predicted probabilities for each residual times one minus the same predicted probability note the derivation of this formula is quite technical so I'm saving it for part four of

note the derivation of this formula is quite technical so I'm saving it for part four of this series when we get into the nitty-gritty details of gradient boost for classification so for now let's just use the formula to calculate the output value for this leaf since there is only one residual in this leaf we can ignore these summation signs for now so we plug in the residual from the leaf and since we are building the first tree the previous probability refers to the probability from the

since we are building the first tree the previous probability refers to the probability from the initial leaf so we plug that in do the math and we end up with negative three point three as the new output value for this leaf now we need to calculate the output value for this leaf since we have to residuals in the leaf we'll add them together in the numerator in the denominator we just add up the previous probability times 1 minus the previous probability for each residual so we plug in the

the previous probability times 1 minus the previous probability for each residual so we plug in the previous probability for each residual note for now the previous probabilities are the same for all of the residuals but this will change when we build the next tree now do the math and the output value for this leaf is negative one now let's determine the output value for this leaf we plug the residuals into the formula and the previous probabilities and do the math and the output value for this

into the formula and the previous probabilities and do the math and the output value for this leaf is 1.4 hooray we've calculated the output values for all three leaves in the tree now we are ready to update our predictions by combining the initial leaf with the new tree note just like before the new tree is scaled by a learning rate this example uses a relatively large learning rate for illustrative purposes however 0.1 is more common now let's calculate the log of the odds prediction for this

purposes however 0.1 is more common now let's calculate the log of the odds prediction for this person the log of the odds prediction is the previous prediction 0.7 plus the output value from the tree scaled by the learning rate 0.8 times 1.4 and the new log of the odds prediction equals 1.8 now we can convert the new log-odds prediction into a probability and the new predicted probability equals 0.9 so we are taking a small step in the right direction since this person loves troll 2 we save

0.9 so we are taking a small step in the right direction since this person loves troll 2 we save the new predicted probability here we calculate the new log of the odds prediction for the second person the log of the odds prediction is the previous prediction 0.7 plus the output value from the tree scaled by the learning rate 0.8 times negative one which gives us negative 0.1 for the new prediction we can convert the log of the odds prediction into a probability and save the new predicted

we can convert the log of the odds prediction into a probability and save the new predicted probability 0.5 here note this new predicted probability is worse than before and this is one reason why we built a lot of trees and not just one then we calculate the predicted probabilities for the remaining people and now just like before we calculate the new residuals and just like before residuals are the difference between the observed and predicted probabilities and just like before we can plot

the difference between the observed and predicted probabilities and just like before we can plot the observed probabilities on a graph however now everyone has a different predicted probability so to calculate the residual for the first person we plot the predicted probability and the residual is the difference between the observed and predicted probabilities and we save that value here now we calculate the residual for the second person we plot the predicted probability and the residual is the

the residual for the second person we plot the predicted probability and the residual is the difference save that value here we just do the same thing for all the remaining people BAM now that we have the residuals we can build a new tree and then we need to calculate the output values for each leaf let's start with this leaf note only the second person goes to this leaf so we plug in the residual into the formula for the output values then we plug in the last predicted probability do the math

into the formula for the output values then we plug in the last predicted probability do the math and the output value for this leaf is 2 now let's calculate the output value for this leaf note only the third person goes to this leaf so we plug the residual into the formula for the output values then we plug in the last predicted probability do the math and the output value for this leaf is negative 2 lastly let's calculate the output value for this leaf note a bunch of people go to this leaf

2 lastly let's calculate the output value for this leaf note a bunch of people go to this leaf so we plugged the residuals into the formula for the output values and we plug in the predicted probability for each individual in the leaf now do the math and the output value for this leaf is 0.6 BAM now that we've calculated all of the output values for this tree we can combine it with everything else we've done so far we started with just a leaf which made one prediction for every individual then

we've done so far we started with just a leaf which made one prediction for every individual then we built a tree based on the residuals the difference between the observed values and the single value predicted by the leaf then we calculated the output values for each leaf and we scaled it with a learning rate then we built another tree based on the new residuals the difference between the observed values and the values predicted by the leaf and the first tree then we calculated the output

values and the values predicted by the leaf and the first tree then we calculated the output values for each leaf and we scale this new tree with the learning rate as well this process repeats until we have made the maximum number of trees specified or the residuals get super small BAM now for the sake of keeping the example relatively simple imagine that we configured gradient boost to just make these two trees and we needed to classify a new person as someone who loves to roll - or does not

these two trees and we needed to classify a new person as someone who loves to roll - or does not love troll - prediction starts with the leaf then we run the data down the first tree be poo poo poo poo and we add the scaled output value we run the data down the second tree BP poopy poop and then we add the scaled output value now we just do the math and get 2.3 as the log of the odds prediction that this person loves troll 2 now we need to convert this log of the odds into a probability so we

that this person loves troll 2 now we need to convert this log of the odds into a probability so we plug the log of the odds into the logistic function do the math probability that this individual will love troll 2 is 0.9 since we are using 0.5 as our threshold for deciding how to classify people and 0.9 is greater than 0.5 we will classify this person as someone who loves troll 2 triple bam note before we go I want to remind you that gradient boost usually uses trees with between 8 and 32

note before we go I want to remind you that gradient boost usually uses trees with between 8 and 32 leaves we use small trees in this stat quest because our training data set was super small also be sure to watch part four of this exciting series on gradient boost next time we'll dive deep into the math of how gradient boost is used for classification we'll derive the equation used to update the leaves and that will make you feel totally awesome megha bail hooray we've made it to the end of

leaves and that will make you feel totally awesome megha bail hooray we've made it to the end of another exciting stack quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs or buying a t-shirt or a hoodie the links to do this are in the description below alright until next time quest on you

gradient boost for classification seems scary but it's not stat quest hello I'm Josh stormer and welcome to stat quest today we're gonna do gradient boost part 4 we're gonna talk about how gradient boost is used for classification now we're gonna dive deep into the details note this stat quest assumes you've already watched the first three parts in this series if not check out the quests also it's important that you have a pretty good understanding of the roles that the log odds and the log

it's important that you have a pretty good understanding of the roles that the log odds and the log likelihood play in logistic regression so if you haven't already check out these quests in this stat quest we will walk through the original gradient boost algorithm for classification step by step just like in part two of this series we will use an incredibly small training set for the examples the small size will help us focus on the algorithms details but it will mean using stumps instead of

small size will help us focus on the algorithms details but it will mean using stumps instead of trees however by now you know that in practice gradient boost usually uses trees with between 8 and 32 leaves now we'll describe our training data set we have whether or not three people like popcorn their age their favorite color and whether or not they loved the movie troll 2 great now that we know all about the training data set let's go through the algorithm step by step we'll start from the top

about the training data set let's go through the algorithm step by step we'll start from the top from part two in this series we know that this refers to the training data set just to remind you X sub I refers to a row of measurements that we will use to predict if someone loves troll 2 and y sub I refers to whether or not someone loves troll 2 now we need a differentiable loss function that will work for classification I think the easiest way to understand the most commonly used loss function

work for classification I think the easiest way to understand the most commonly used loss function for classification is to show how it works on a graph the y axis is the probability of loving troll to the red dot with the probability of loving troll 2 equal to zero represents the one person that does not love troll 2 and the blue dots with the probability of loving troll 2 equal to 1 represent the two people that love troll 2 in other words the red and blue dots are the observed values and we

two people that love troll 2 in other words the red and blue dots are the observed values and we can draw a dotted line to represent the predicted probability that someone loves troll 2 in this example I've set the predicted probability to 0.67 now just like we do for logistic regression we can calculate the log likelihood of the data given the predicted probability the log likelihood of the observed data given the prediction is this nasty-looking summation the peas refer to the predicted

observed data given the prediction is this nasty-looking summation the peas refer to the predicted probability which is 0.67 in this example and the y sub i's refer to the observed values for loves troll 2 for the two people who love troll 2 y sub I equals 1 which means that this term will be 0 leaving just the log of P in contrast for the one person who does not love troll 2 y sub I equals 0 which means that this term will be 0 leaving just the log of 1 minus P now let's use the summation to

means that this term will be 0 leaving just the log of 1 minus P now let's use the summation to calculate the log likelihood of all 3 observed values we'll start by calculating the log likelihood for the first person because this person loves to roll 2 y sub 1 equals 1 then we plug in 0.67 for the predicted probability P one minus one equals zero and now we do the multiplication the log-likelihood for the first person given the predicted probability is the log of 0.67 now let's calculate the

for the first person given the predicted probability is the log of 0.67 now let's calculate the log likelihood for the second person we plug in the observed value one for y sub two and plug in 0.67 for the predicted probability p1 minus one equals zero and now we do the multiplication log of 0.67 since the predicted probability was the same now let's calculate the log likelihood for the third person we plug in the observed value 0 for y sub 3 since this person does not love the movie plug in

we plug in the observed value 0 for y sub 3 since this person does not love the movie plug in 0.67 for the predicted probability p1 minus 0 equals 1 and now we do the multiplication and we get the log of 1 minus 0.67 note the better the prediction the larger the log-likelihood and this is why when doing logistic regression the goal is to maximize the log likelihood that means that if we want to use the log likelihood as a loss function where smaller values represent better fitting models then

use the log likelihood as a loss function where smaller values represent better fitting models then we need to multiply the log likelihood by negative one so we'll put this subtle but very important minus sign in front of everything and since a loss function sometimes only deals with one sample at a time we can get rid of the summation and to make it easier to read we'll replace Y with observed now we need to transform this equation the negative log likelihood so that it is a function of the

now we need to transform this equation the negative log likelihood so that it is a function of the predicted log odds instead of the predicted probability P and we need to simplify it since this will require a lot of steps we'll move the negative log likelihood to the top left-hand corner to give a space to work the first thing we do is distribute the minus sign through the equation now we multiply the negative 1 minus observed by the log of 1 minus P now we combine this with this and get this

the negative 1 minus observed by the log of 1 minus P now we combine this with this and get this and since the log of P minus the log of 1 minus P equals the log of P divided by the log of 1 minus P and that equals the log of P divided by 1 minus P and that equals the log of the odds so we replace the log of P minus the log of 1 minus P with the log of the odds in other words we converted the log of P minus the log of one minus P into a function of the log of the odds note the relationship

log of P minus the log of one minus P into a function of the log of the odds note the relationship between probability P and the log of the odds is derived in the stack quest on odds and the log of the odds so check that out if you want more details now we need to convert the log of 1 minus P into a function of the log of the odds the log of 1 minus P equals the log of 1 minus e to the log odds divided by 1 plus e to the log odds note this relationship between probability P and the log of the

divided by 1 plus e to the log odds note this relationship between probability P and the log of the odds is derived in the logistic regression stack quest on estimating parameters with maximum likelihood now we replace 1 with this fraction do the subtraction and we get the log of 1 divided by 1 plus e to the log odds now convert the division into subtraction and since the log of 1 equals 0 we can remove it and that leaves us with the negative log of 1 plus e to the log odds thus the log of 1

remove it and that leaves us with the negative log of 1 plus e to the log odds thus the log of 1 minus P which is a function of the predicted probability P can be transformed into a function of the predicted log odds so let's plug that in note this sign changed from negative to positive because we replace the log of 1 minus P with a negative log of 1 plus e to the log odds hooray we converted the negative log likelihood of the data which is a function of the predicted probability P into a

the negative log likelihood of the data which is a function of the predicted probability P into a function of the predicted log odds BAM so this will be the loss function now we just need to show that it is differentiable so let's take the derivative of the loss function with respect to the predicted log odds the derivative of the first part with respect to the predicted log odds is super easy it's just the negative observed value the derivative of the second part is also super easy if you know

just the negative observed value the derivative of the second part is also super easy if you know how to use the chain rule the derivative of the log of something is 1 over that something times the derivative of that something in this multiplication can be re-written as a single fraction note earlier we saw that we can substitute the predicted probability P with this fraction but we can also swap the predicted probability P back in and that means that the derivative of the loss function can be

the predicted probability P back in and that means that the derivative of the loss function can be a function of the predicted log odds or a function of the predicted probability P as we will soon see sometimes it's easier to use the function of the log odds and sometimes it's easier to use the function of the predicted probability P in summary the input data is the training data set in this fairly nasty looking thing which is just a transformation of the negative log likelihood is the

fairly nasty looking thing which is just a transformation of the negative log likelihood is the differentiable loss function and the derivative can be a function of the predicted log odds or a function of the predicted probability P hooray now we're ready for step 1 like when we used gradient boost for regression we need to come up with the initial prediction and just like before we'll use this funky-looking equation to find the optimal initial prediction remember this is just the loss function

equation to find the optimal initial prediction remember this is just the loss function the why I refers to the observed values and that funky simple called gamma refers to a log-odds value in theory we could go ahead and replace the log odds with gamma but it's actually easier to see what's going on if we leave the log odds in and remember that it represents gamma the summation means that we add up 1 loss function for each observed value and the Arg men over gamma means we need to find a log

up 1 loss function for each observed value and the Arg men over gamma means we need to find a log odds value that minimizes this sum the first thing we do is take the derivative of each term with respect to the log odds now to make the next step super-easy let's replace the log odds with the predicted probability P and set the sum of the derivatives equal to zero and solve beep boop beep boop beep boop boop and we end up with 2/3 for the initial predicted probability P because two people love

boop boop and we end up with 2/3 for the initial predicted probability P because two people love troll 2 and there are three people in the training data set now we can convert the predicted probability into the predicted log odds so we plug in the predicted probability and solve p-people dicted log-odds is the log of 2/1 which makes sense because two people love troll two and one person does not so given this loss function the log odds value for gamma that minimizes this sum is the predicted

so given this loss function the log odds value for gamma that minimizes this sum is the predicted log odds of loving troll two based on the observed yes/no values hooray we've created the initial predicted log odds F sub zero of X it equals zero point six nine so this is the initial leaf F sub zero of X BAM we finish step one we initialize the model with a constant value F sub zero of x equals the log of 2 divided by 1 which equals zero point six nine in other words we created a leaf that

the log of 2 divided by 1 which equals zero point six nine in other words we created a leaf that predicts the log odds that someone will love troll two and it equals zero point six nine now we can work on step two just like when we used gradient boost for regression this is when we'll build the trees so we'll start by setting little m equal to one and go from here in Part A we calculate pseudo residuals with this nasty looking thing this is just the derivative of the loss function with respect

with this nasty looking thing this is just the derivative of the loss function with respect to the predicted log odds and we've already calculated this this big minus sign tells us to multiply the derivative by negative one and that leaves us with this equation for calculating pseudo residuals note as we have seen before we can replace this term with the predicted probability P so we can think of the pseudo residuals as the observed probability minus the predicted probability and the observed

the pseudo residuals as the observed probability minus the predicted probability and the observed minus the predicted results in a pseudo residual this part says to plug in the most recent predicted log odds so we plug in F sub zero of X the most recent predicted log odds then do the math to convert the predicted log odds into the predicted probability P now we can compute the pseudo residuals for each sample R sub I comma M where I is the sample number and M is the tree that we're building so

each sample R sub I comma M where I is the sample number and M is the tree that we're building so we'll start with our sub 1 comma 1 the residual for the first sample and the first tree so we plug in the observed weight for the first sample and we get 0.33 we'll keep track of our sub 1 comma 1 by adding it to the data set now we'll calculate the other two residuals pppppp hooray we finished Part A of step 2 by calculating a residual for each sample now we're ready for Part B where we will build

of step 2 by calculating a residual for each sample now we're ready for Part B where we will build a regression tree we will build a regression tree using likes popcorn age and favorite color to predict the residuals here's the new tree so we have a regression tree fit to the residuals now we need to create terminal regions R sub J comma M so in this example we'll name this leaf R sub 1 comma 1 and name this leaf R sub 2 comma 1 hooray we finished part b of step 2 by fitting a regression tree

and name this leaf R sub 2 comma 1 hooray we finished part b of step 2 by fitting a regression tree to the residuals and labeling the leaves now let's do Part C this is when we calculate the output values for the new tree so for each leaf in the new tree we compute an output value gamma sub J comma M the output value for each leaf is the value for gamma that minimizes this summation the X sub I and R sub I comma J means that since only the first row of data X sub 1 goes to leaf R sub 1 comma 1

R sub I comma J means that since only the first row of data X sub 1 goes to leaf R sub 1 comma 1 then only X sub 1 is used to calculate the output value for R sub 1 comma 1 and since only two samples X sub 2 in X sub 3 go to leaf R sub 2 comma 1 then only X sub 2 and X sub 3 are used to calculate the output value for R sub 2 comma 1 let's start by calculating the output value for the leaf on the Left R sub 1 comma 1 that means that J equals one since this is the first leaf and M equals one

the Left R sub 1 comma 1 that means that J equals one since this is the first leaf and M equals one since this is the first tree remember this is just the loss function so we can replace the generic form with the actual loss function that we are using note to keep the length of the formula from getting out of hand I'm returning to using y sub I to refer to the observed values since only X sub one goes to R sub 1 comma 1 we can remove the big Sigma and swap the eyes with ones now let's solve for

goes to R sub 1 comma 1 we can remove the big Sigma and swap the eyes with ones now let's solve for the optimal value for gamma in theory we could take the derivative of this function with respect to gamma and then solve for gamma but that would turn into a huge mess so we will take a different approach than when we used gradient boost for regression let's start by moving the equation up here to give us room to work and even though we want to minimize gamma let's remember that we are working

give us room to work and even though we want to minimize gamma let's remember that we are working with the loss function since taking the derivative of the loss function with respect to gamma and then solving for gamma is hard we can approximate the loss function with a second-order Taylor polynomial why this second-order Taylor polynomial is a good approximation is something we can talk about in a future stat quest for now just take my word for it now we can take the derivative of this

in a future stat quest for now just take my word for it now we can take the derivative of this function with respect to gamma since gamma is not part of this term the derivative with respect to gamma is 0 so we can omit it the derivative of this with respect to gamma is super easy we can treat this the derivative of the loss function with respect to the predicted log-odds as a constant and the derivative of a constant times gamma is the constant similarly the derivative of this with respect to

of a constant times gamma is the constant similarly the derivative of this with respect to gamma is super easy all this stuff one half times the second derivative of the loss function with respect to the predicted log odds can be treated like a constant and we get this because the square on the gamma comes down and cancels the 1/2 using the approximation of the loss function made taking the derivative with respect to gamma super easy now let's move it up to give ourselves a little more room set

with respect to gamma super easy now let's move it up to give ourselves a little more room set it equal to zero and solve for gamma first we'll subtract this term from both sides bip then we'll divide both sides by this term boo BAM we solve for gamma and now just because I'm into moving equations to the top of the screen let's move this one up gamma equals negative 1 times the derivative of the loss function divided by the second derivative of the loss function since we have already solved for

function divided by the second derivative of the loss function since we have already solved for this we can just plug it in and we can replace this with the predicted probability P and the observed value minus the predicted probability P is just the residual now we need to take the second derivative of the loss function to figure out what goes in the denominator the second derivative of the loss function equals the derivative of the first derivative of the loss function so we can plug in the

function equals the derivative of the first derivative of the loss function so we can plug in the first derivative of the loss function now to make taking the derivative a little more obvious let's rewrite this fraction as multiplication now we need to take the derivative of this with respect to the log-odds the derivative of negative observed is zero so we can ignore this part this part however is a little more involved we'll need to use the product rule the product rule says that the

however is a little more involved we'll need to use the product rule the product rule says that the derivative of a times B equals the derivative of a times B plus a times the derivative of B so we start with the derivative of the first part by using the chain and that gives us this derivative then we multiply by the second part then we add the first part times the derivative of the second part BAM this long thing is the second derivative of the loss function technically we could leave this as

this long thing is the second derivative of the loss function technically we could leave this as it is and move on but with a little bit of algebra we can get something way way easier to work with so let's move this to the top of the screen so that we have room to work the first thing we do is rewrite this as a fraction then we rewrite this as a fraction then we multiply the top and bottom of the second term by 1 plus e to the log odds and now we can add these terms together these two parts in

second term by 1 plus e to the log odds and now we can add these terms together these two parts in the numerator cancel each other out and that leaves us with this note I also split the denominator into two terms so that the next steps make more sense now we'll multiply the numerator by wand which seems silly but is the key to reducing the whole thing into two super simple terms by multiplying the numerator by one we can easily see how the single term separates into two terms multiplied

the numerator by one we can easily see how the single term separates into two terms multiplied together at this point you may recognize the first term it converts the predicted log odds to the predicted probability P the second term should also remind you of something we have seen earlier in this stat quest earlier we saw that the log of 1 minus P equals this and that means that 1 minus P equals this which means the second term is just 1 minus the predicted probability P so at long last we see

this which means the second term is just 1 minus the predicted probability P so at long last we see that the second derivative of the loss function is equal to P times 1 minus P and that brings us back to gamma earlier we saw that gamma equals the residual divided by the second derivative of the loss function and now we can replace the second derivative of the loss function with P times 1 minus P BAM I know it seems like a long time ago but remember we were trying to find out the output value

P BAM I know it seems like a long time ago but remember we were trying to find out the output value for this leaf in other words we were trying to find the value for gamma that when added to the most recent predicted log odds minimized the loss function then we did a ton of math and discovered the gamma sub 1 comma 1 is the residual divided by P times 1 minus P now we can plug in the residual and the most recent predicted probability P for this sample in this case the predicted probability for

the most recent predicted probability P for this sample in this case the predicted probability for this sample is derived from F sub 0 of X the most recent log-odds prediction now we just do the math and the output value for leaf R sub 1 comma 1 is 1.5 now let's calculate the output value for the other leaf R sub 2 comma 1 that means we're calculating gamma sub 2 comma 1 since samples x 2 in X 3 go to leaf R sub 2 comma 1 then we will need a loss function for X sub 2 and a loss function for X

go to leaf R sub 2 comma 1 then we will need a loss function for X sub 2 and a loss function for X sub 3 now just like before we can approximate the loss function with second-order Taylor polynomials here's the second-order Taylor polynomial approximation of the loss function for sample X sub 2 and here's the second-order Taylor polynomial approximation of the loss function for X sub 3 if we add these two loss functions together we get this and we can approximate that sum by adding together the

two loss functions together we get this and we can approximate that sum by adding together the two Taylor polynomials we'll start by adding the first terms into Taylor polynomials then add the second terms at the third terms note we can pull these two gammas out of the second terms and we can pull the one halfs and the game of Squared's out of the third terms now let's move everything to the top so we have some space to determine the optimal value for gamma the first step in finding the optimal

we have some space to determine the optimal value for gamma the first step in finding the optimal value for gamma is to take the derivative of the sum of the two approximate loss functions with respect to gamma the derivative of this part is zero since gamma is not involved at all for the second term since everything between the square brackets is like a constant with respect to gamma the derivative is everything between the square brackets and for the third term the derivative of this with

is everything between the square brackets and for the third term the derivative of this with respect to gamma means the square comes down and cancels out the one half and that leaves us with everything between the square brackets times gamma so this is the derivative of the sum of the approximate loss functions with respect to gamma move it to the top so we have some room to work set it equal to zero now solve for gamma first we subtract this square bracket stuff from both sides now we divide

zero now solve for gamma first we subtract this square bracket stuff from both sides now we divide both sides by this square bracket stuff and this is the solution for gamma now all we need to do is simplify it so we move it to the top to give us a little room to work in the numerator we have two separate derivatives of the loss function 1/4 X 2 and 1/4 X 3 and since we already know that the derivative of the loss function is this we can plug it in for X 2 + 4 X 3 and since e to the log odds

of the loss function is this we can plug it in for X 2 + 4 X 3 and since e to the log odds divided by one plus e to the log odds equals P we can plug in P sub to the predicted probability for X sub 2 and we can plug in P sub 3 the predicted probability for X sub 3 now we multiply the negative 1 through the numerator and that leaves us with the observed minus the predicted probabilities for X sub 2 and X sub 3 in other words we are left with the sum of the residuals in the numerator similarly we

and X sub 3 in other words we are left with the sum of the residuals in the numerator similarly we have the sum of two second derivatives in the denominator 1 for X sub 2 and 1 for X sub 3 and since we already know that the second derivative of the loss function equals P times 1 minus P we can plug in P sub 2 for the predicted probability for X sub 2 and we can plug in P sub 3 the predicted probability for X sub 3 now we just tidy everything up Oh BAM last we see that gamma is equal to the sum

for X sub 3 now we just tidy everything up Oh BAM last we see that gamma is equal to the sum of the residuals divided by the sum of P times 1 minus P for each sample in the leaf okay I know it seems like a long time ago but we were trying to find the output value for this leaf so we did a ton of math and discovered that gamma sub 2 comma 1 is the sum of the residuals divided by the sum of P times 1 minus P for each sample that ended up in the leaf now we can plug in the residuals now we need to

1 minus P for each sample that ended up in the leaf now we can plug in the residuals now we need to plug in the most recent predicted probabilities P 2 and P 3 for X 2 and X 3 just like before since we are building the first tree the predicted probability for these samples is derived from F sub 0 of X the most recent log-odds prediction note since we are just starting out the predicted probabilities are the same for all of the samples however after we build the first tree they can be different

are the same for all of the samples however after we build the first tree they can be different now just do the math in the output value for leaf R sub 2 comma 1 is negative 0.77 hooray we made it through step 2 Part C we calculated output values for each leaf in the tree now let's do Part D in Part D we make a new prediction for each sample since this is our first pass through step 2 and M equals 1 this new prediction will be called F sub 1 of X the new prediction F sub 1 of X is based on the

1 this new prediction will be called F sub 1 of X the new prediction F sub 1 of X is based on the last prediction we made F sub 0 of X plus the learning rate new times the output values from the first tree we made note this summation is there just in case a single sample ends up in multiple leaves also note we've set the learning rate new to 0.8 which is relatively large for more details about this check out the stat quest on the main ideas hooray we've created F sub 1 of X now we will use F

this check out the stat quest on the main ideas hooray we've created F sub 1 of X now we will use F sub 1 of X to make new predictions for each sample we'll start with the first sample X sub 1 the new prediction for X sub 1 starts with the last prediction F sub 0 of X which is 0.6 9 plus 0.8 times the output value from the Nutri which is 1.5 because X sub 1 likes popcorn by the way I love popcorn too now just do the math the new log-odds prediction for the first sample is 1 point 8 9 which is a

too now just do the math the new log-odds prediction for the first sample is 1 point 8 9 which is a better prediction than before because the odds are more in favor that this person will love troll 2 now we'll calculate the new predicted log odds for the second sample X sub 2 the new log odds prediction for the second sample is 0.07 which is worse than before but that's also why we build more than one tree now we'll calculate the new predicted log odds for the third sample X sub 3 the new log

one tree now we'll calculate the new predicted log odds for the third sample X sub 3 the new log odds prediction for the third sample is 0.07 which is better than before hooray we made it through one iteration of step two we started by setting little m equal to one then we calculated pseudo residuals by plugging in the observed values and the latest predictions and that gave us residuals then we fit a regression tree to the residuals and computed the output values gamma sub J comma M for each

fit a regression tree to the residuals and computed the output values gamma sub J comma M for each leaf lastly we've made new predictions for each sample F sub 1 of X based on the previous prediction F sub 0 of X the learning rate nu and the output values gamma sub J comma M from the new tree now we set little m equal to two and do everything over again a calculate new residuals for the new predictions B create a new regression tree C calculate output values and D make new predictions at the

B create a new regression tree C calculate output values and D make new predictions at the end of the second round little M equals two and the new predictions F sub two of X are based on the predictions made by F sub 1 of X and the learning rate times the output values from the newest tree now in the interest of time let's assume Big M equals two so that we are done with step two note in practice m equals 100 or more now we are ready for gradient boosts 3 and final step if Big M equals 2 then F

m equals 100 or more now we are ready for gradient boosts 3 and final step if Big M equals 2 then F sub 2 of X is the output from the gradient boost algorithm now if we receive some new data we would use F sub 2 of X to predict whether this person loves troll 2 predicted log-odds that this person will love troll 2 equals the boop-boop boop-boop 3.4 the predicted probability that this person will love troll 2 equals 0.97 if we use a threshold of 0.5 for deciding if someone loves troll 2 then

love troll 2 equals 0.97 if we use a threshold of 0.5 for deciding if someone loves troll 2 then since 0.97 is greater than 0.5 this person loves troll 2 triple bam holy frickin smokes we made it through this whole algorithm I can't believe it we've done it for regression and now we've done it for classification hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest well consider

quest and want to see more please subscribe and if you want to support stat quest well consider buying one or two of my original songs or getting a t-shirt or a hoodie the links to do this are in the description below alright until next time quest on you

troll two i wanna watch you but i am so afraid statquest hello i'm josh starmer and welcome to statquest today we're gonna talk about troll 2 and it's going to be clearly explained this stat quest is sponsored by lightning and grid.ai check them out they are awesome for more details follow the links in the pinned comment below note this stat quest assumes that you are already familiar with bam if not check out the quest the link is in the description below if you've watched enough stat quests

not check out the quest the link is in the description below if you've watched enough stat quests chances are you've seen references to the movie troll 2 for example in the stat quest on expected values statsquatch makes a bet that the next person we meet has heard of the movie troll 2. and references to the movie troll 2 appear in a bunch of other stat quests as well so now it's time for troll 2 to be clearly explained first of all there is no consensus on when troll 2 came out the wikipedia

2 to be clearly explained first of all there is no consensus on when troll 2 came out the wikipedia article says 1990. this streaming platform tubby says it came out in 1991. and rotten tomatoes says it came out in 1992 and while we're on the rotten tomatoes page it's also worth noting that the critic's consensus is just three words oh my god bam another confusing thing about troll 2 is its name depending on the poster sometimes it's troll 2 and sometimes it's troll squared however one thing is

on the poster sometimes it's troll 2 and sometimes it's troll squared however one thing is certain about troll 2 troll squared it is not a sequel i mean sure there's a movie called troll that pretty much everyone agrees came out in 1986 but troll the movie is about a troll and troll 2 troll squared slash whatever you want to call it had nothing to do with the earlier movie and is not about trolls that's right at no point during the 94 minutes spent watching troll 2 will you hear or see a single

that's right at no point during the 94 minutes spent watching troll 2 will you hear or see a single reference to a troll or multiple trolls oh no it's the dreaded terminology alert although troll 2 is called troll 2 the monsters in the movie are all goblins in fact the original title for the movie was goblins however they changed the name when they thought more people would go see a movie called troll 2. double bam troll 2 is all about watching people eat including this love struck man enjoying

2. double bam troll 2 is all about watching people eat including this love struck man enjoying a green pudding a child protecting his family by eating a massive bologna sandwich and someone buried in popcorn we also see a whole lot of this guy who goes by grandpa seth sometimes you see grandpa says face floating in air and sometimes you see an extreme close-up of grandpa seth's mouth anyway i don't want to give away too much of the movie but it involves a happy yet chaotically arranged family

want to give away too much of the movie but it involves a happy yet chaotically arranged family visiting the countryside and they are greeted by a family that stands in order from shortest to tallest to appreciate the differences between these two families it's good to see them both at the same time on the left we have the happy family that has no idea how to pose for a picture and on the right we have a family that can quickly arrange themselves in a photogenic way small bam anyway this kid

we have a family that can quickly arrange themselves in a photogenic way small bam anyway this kid knows there's something funny going on and ends up having to fight this creepy looking woman with lots of jewelry this lady with interesting glasses and this old dude with a wide brimmed hat does the kid win all three fights well you'll just have to watch it to find out but before you do that let me warn you troll 2 is consistently voted the worst movie ever made and that's how it caught my

let me warn you troll 2 is consistently voted the worst movie ever made and that's how it caught my attention when i decided that statquest needed a new example dataset but is troll 2 really that bad i'll let you decide triple bam hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my

consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

XG boost its extreme and its gradient boost stat quest hello I'm Josh stormer and welcome to stat quest today we're gonna talk about XG boost part 1 we're gonna talk about XG boost trees and how they're used for regression note this stat quest assumes that you are already familiar with at least the main ideas of how gradient boost does regression and you should be familiar with at least the main ideas behind regularization if not check out the quests the links are in the description below XG

ideas behind regularization if not check out the quests the links are in the description below XG boost is extreme and that means it's a big machine learning algorithm with lots of parts the good news is that each part is pretty simple and easy to understand and we'll go through them one step at a time actually I'm assuming that you are already familiar with gradient boost and regularization so we'll start by learning about XG boosts unique regression trees because this is a big topic will

so we'll start by learning about XG boosts unique regression trees because this is a big topic will spend three whole stack quests on it in this stack quest part 1 will build our intuition about how XG boost does regression with its unique trees in part two we'll build our intuition about how XG boost does classification and in part three we'll dive into the mathematical details and show you how our aggression and classification are related and why creating unique trees makes so much sense note

aggression and classification are related and why creating unique trees makes so much sense note 'xg boost was designed to be used with large complicated datasets however to keep the examples from getting out of hand we'll use this super simple training data on the x-axis we have different drug dosages and on the y-axis we've measured drug effectiveness these two observations have relatively large positive values for drug effectiveness and that means that the drug was helpful these two

large positive values for drug effectiveness and that means that the drug was helpful these two observations have relatively large negative values for drug effectiveness and that means that the drug did more harm than good the very first step in fitting XG boost to the training data is to make an initial prediction this prediction can be anything but by default it is 0.5 regardless of whether you're using XG boost for regression or classification the prediction 0.5 corresponds to this thick

you're using XG boost for regression or classification the prediction 0.5 corresponds to this thick black horizontal line and the residuals the differences between the observed and predicted values show us how good the initial prediction is now just like unex treem gradient boost XG boosts fits a regression tree to the residuals however unlike unex treem gradient boost which typically uses regular off-the-shelf regression trees XG boost uses a unique regression tree that I call an XG boost tree

off-the-shelf regression trees XG boost uses a unique regression tree that I call an XG boost tree so let's talk about how to build an XG boost tree for regression note there are many ways to build XG boost trees this video focuses on the most common way to build them for regression each tree starts out as a single leaf and all of the residuals go to the leaf now we calculate a quality score or similarity score for the residuals similarity score equals the sum of the residuals squared over the

score for the residuals similarity score equals the sum of the residuals squared over the number of residuals plus lambda note lambda is a regularization parameter and we'll talk more about that later for now let lambda equals zero now we plug the for residuals into the numerator and since there are four residuals in the leaf we put a four in the denominator note because we do not square the residuals before we add them together in the numerator 7.5 and negative 7.5 cancel each other out in

before we add them together in the numerator 7.5 and negative 7.5 cancel each other out in other words when we add this residual to this residual they cancel each other out likewise 6.5 cancels out most of negative 10.5 leaving negative 4 squared in the numerator thus the similarity score for the residuals in the root equals 4 so let's put similarity equals 4 up here so we can keep track of it now the question is whether or not we can do a better job clustering similar residuals if we split

now the question is whether or not we can do a better job clustering similar residuals if we split them into two groups to answer this we first focus on the two observations with the lowest dosages average dosage is 15 and that corresponds to this dotted red line so we split the observations into two groups based on whether or not the dosage is less than 15 the observation on the far left is the only one with dosage less than 15 so it's residual goes to the leaf on the left all of the other

only one with dosage less than 15 so it's residual goes to the leaf on the left all of the other residuals go to the leaf on the right now we calculate the similarity score for the leaf on the left by plugging the 1 residual into the numerator and since only one residual went to the leaf on the Left the number of residuals equals 1 like before we set lambda equal to zero and the similarity score for the leaf on the Left equals 110 0.25 so let's put similarity equals 110 0.25 under the leaf so

for the leaf on the Left equals 110 0.25 so let's put similarity equals 110 0.25 under the leaf so we can keep track of it and calculate the similarity score for the residuals that go to the leaf on the right we plug in the sum of residuals squared into the numerator and since there are three residuals in the leaf on the right we plug 3 into the denominator like before let's let lambda equal zero note like we saw earlier because we do not square the residuals before we add them together 7.5 and

note like we saw earlier because we do not square the residuals before we add them together 7.5 and negative 7.5 cancel each other out leaving only one residual 6.5 in the numerator thus the similarity score for the residuals in the leaf on the right equals 14 point zero eight so let's put similarity equals 14 point zero eight under the leaf so we can keep track of it now that we have calculated similarity scores for each node we see that when the residuals in a node are very different they

similarity scores for each node we see that when the residuals in a node are very different they cancel each other out and the similarity score is relatively small in contrast when the residuals are similar or there is just one of them they do not cancel out and the similarity score is relatively large now we need to quantify how much better the leaves cluster similar residuals than the root we do this by calculating the gain of splitting the residuals into two groups gain is equal to the

we do this by calculating the gain of splitting the residuals into two groups gain is equal to the similarity score for the leaf on the Left plus the similarity score for the leaf on the right minus the similarity score for the root plugging in the numbers eep-eep eep-eep eep-eep eep-eep eep-eep gives us 120 point three three small BAM now that we have calculated the gain for the threshold of dosage less than 15 we can compare it to the gain calculated for other thresholds so we shift the

dosage less than 15 we can compare it to the gain calculated for other thresholds so we shift the threshold over so that it is the average of the next two observations and build a simple tree that divides the observations using the new threshold dosage less than twenty two point five now we calculate the similarity scores for the leaves and calculate the game pppp pppp pppp de boop boop the game for dosage less than twenty two point five is four since the gain for dosage less than twenty two

for dosage less than twenty two point five is four since the gain for dosage less than twenty two point five is less than the game for dosage less than fifteen dosage less than fifteen is better at splitting the residuals into clusters of similar values now we shift the threshold over so that it is the average of the last two observations and build a simple tree that divides the observations using the new threshold dosage less than 30 then we calculate the similarity scores for the leaves and

the new threshold dosage less than 30 then we calculate the similarity scores for the leaves and the gain doot-doot doot-doot doot-doot doot-doot doot-doot doot-doot doot-doot doot-doot the game for dosage less than thirty equals fifty six point three three again since the gain for dosage less than 30 is less than the game for dosage less than 15 dosage less than 15 is better at splitting the observations and since we can't shift the threshold over any further to the right we are done comparing

and since we can't shift the threshold over any further to the right we are done comparing different thresholds and we will use the threshold that gave us the largest gain dosage less than 15 for the first branch in the tree BAM now since there is only one residual in the leaf on the Left we can't split it any further however we can split the three residuals in the leaf on the right so we start with these two observations and their average dosage is twenty-two point five which corresponds to

with these two observations and their average dosage is twenty-two point five which corresponds to this dotted green line so the first threshold that we try is dosage less than twenty two point five now just like before we calculate the similarity scores for the leaves note we calculated the similarity score for this node when we figured out how to split the root so now we calculate the game dududududu dudududududududu and we get gain equals twenty eight point one seven four when the threshold

dudududududududu and we get gain equals twenty eight point one seven four when the threshold is dosage less than twenty two point five now we shift the threshold over so that it is the average of the last two observations calculate the similarity scores for the leaves and the gain doo-doo-doo-doo - and we get gain equals one hundred forty point one seven which is much larger than twenty eight point one seven when the threshold was dosage less than twenty two point five so we will use dosage

point one seven when the threshold was dosage less than twenty two point five so we will use dosage less than 30 as the threshold for this branch note to keep this example from getting out of hand I've limited the tree depth to two levels and this means we will not split this leaf any further and we are done building this tree however the default is to allow up to six levels small BAM now we need to talk about how to prune this tree we prune an XG boost tree based on its gain values we start by

to talk about how to prune this tree we prune an XG boost tree based on its gain values we start by picking a number for example 130 oh no it's the dreaded terminology alert XG Boost calls this number gamma we then calculate the difference between the gain associated with the lowest branch in the tree and the value for gamma difference between the gain and gamma is negative we will remove the branch and if the difference between the gain and gamma is positive we will not remove the branch in

and if the difference between the gain and gamma is positive we will not remove the branch in this case when we plug in the game in the value for gamma 130 we get a positive number so we will not remove this branch and we are done pruning note the gain for the route 120 point three is less than 130 the value for gamma so the difference will be negative however because we did not remove the first branch we will not remove the route in contrast if we set gamma equal to 150 then we would remove

branch we will not remove the route in contrast if we set gamma equal to 150 then we would remove this branch because 140 point 1 7 minus 150 equals a negative number so let's remove this branch now we subtract gamma from the gain for the route since 120 point 3 3 minus 150 equals a negative number we will remove the root and all we would be left with is the original prediction which is pretty extreme pruning so while this wasn't the most nuanced example of how an X G boost tree is pruned I

extreme pruning so while this wasn't the most nuanced example of how an X G boost tree is pruned I hope you get the idea now let's go back to the original residuals and build a tree just like before only this time when we calculate similarity scores we will set lambda equal to one remember lambda is a regularization parameter which means that it is intended to reduce the prediction sensitivity to individual observations now the similarity score for the root is 3.2 which is 8/10 of what we got

individual observations now the similarity score for the root is 3.2 which is 8/10 of what we got when lambda equals 0 when we calculate the similarity score for the leaf on the Left we get fifty five point one two which is half of what we got when lambda equals zero and when we calculate the similarity score for the leaf on the right we get ten point five six which is three-quarters of what we got when lambda equals zero so one thing we see is that when lambda is greater than zero the

we got when lambda equals zero so one thing we see is that when lambda is greater than zero the similarity scores are smaller and the amount of decrease is inversely proportional to the number of residuals in the node in other words the leaf on the Left had only one residual and it had the largest decrease in similarity score 50% in contrast the root had all four residuals in the smallest decrease 20% now when we calculate the gain we get 66 which is a lot less than 120 point 3 3 the value weak

20% now when we calculate the gain we get 66 which is a lot less than 120 point 3 3 the value weak out when lambda equals 0 similarly when lambda equals one the game for the next branch is smaller than before now just for comparison these were the gain values when lambda equals zero when we first talked about pruning trees we set gamma equal to 130 and because for the lowest branch in the first tree gain minus gamma equaled a positive number so we did not prune at all now with lambda equals 1

tree gain minus gamma equaled a positive number so we did not prune at all now with lambda equals 1 the values for gain are both less than 130 so we would prune the whole tree away so when lambda is greater than zero it is easier to prune leaves because the values for gain are smaller note before we move on I want to illustrate one last feature of lambda for this example imagine we split this node into two leaves now let's calculate the similarity scores with lambda equal to one for the branch

into two leaves now let's calculate the similarity scores with lambda equal to one for the branch we get sixty five point three for the left leaf we get twenty one point one two and for the right leaf we get 28.1 to that means the gain is negative sixteen point zero six now when we decide if we should prune this branch we plug in the game and we plug in a value for gamma note if we set gamma equal to zero then we will get a negative number and we will prune this branch even though gamma equals

to zero then we will get a negative number and we will prune this branch even though gamma equals zero in other words setting gamma equal to zero does not turn off pruning - on the other hand by setting lambda equal to 1 lambda did what he was supposed to do it prevented overfitting the training data awesome for now regardless of lambda and gamma let's assume that this is the tree we are working with and determine the output values for the leaves the output value equals the sum of the residuals

and determine the output values for the leaves the output value equals the sum of the residuals divided by the number of residuals plus lambda note the output value equation is like the similarity score except we do not square the sum of the residuals so for this leaf we plug in the residual negative 10.5 the number of residuals in the leaf 1 and the value for the regularization parameter lambda if lambda equals zero then there is no regularization in the output value equals negative 10.5 on

if lambda equals zero then there is no regularization in the output value equals negative 10.5 on the other hand if lambda equals one the output value equals negative five point two five in other words when lambda is greater than zero then it will reduce the amount that this individual observation adds to the overall prediction thus lambda the regularization parameter will reduce the prediction sensitivity to this individual observation for now we'll keep things simple and let lambda equal zero

to this individual observation for now we'll keep things simple and let lambda equal zero because this is the default value and put negative 10.5 under the leaf so we will remember it now let's calculate the output value for this leaf when lambda equals zero the output value is seven in other words when lambda equals zero the output value for a leaf is simply the average of the residuals in that leaf so we'll put the output value under the leaf so we will remember it lastly when lambda equals

leaf so we'll put the output value under the leaf so we will remember it lastly when lambda equals zero the output value for this leaf is negative seven point five now at long last the first tree is complete double BAM since we have built our first tree we can make new predictions and just like on extreme gradient boost XG boost makes new predictions by starting with the initial prediction and adding the output of the tree scaled by a learning rate oh no it's another dreaded terminology alert

the output of the tree scaled by a learning rate oh no it's another dreaded terminology alert XG boost calls the learning rate Etta and the default value is 0.3 so that's what we'll use thus the new predicted value for this observation with dosage equal to 10 is the original prediction 0.5 plus the learning rate Etta 0.3 times the output value negative 10.5 and that gives us negative 2.6 5 so if the original prediction was 0.5 then this was the original residual the new prediction is negative

the original prediction was 0.5 then this was the original residual the new prediction is negative two point six five and we see that the new residual is smaller than before so we've taken a small step in the right direction similarly the new prediction for this observation with dosage equal twenty is beep boop boop boop beep boop beep boop 2.6 and the new residual is smaller than before so we've taken another small step in the right direction likewise the new predictions for the remaining

taken another small step in the right direction likewise the new predictions for the remaining observations have smaller residuals than before suggesting each small step was in the right direction BAM now we build another tree based on the new residuals and make new predictions that give us even smaller residuals and then build another tree based on the newest residuals and we keep building trees until the residuals are super small or we have reached the maximum number triple bam in summary

until the residuals are super small or we have reached the maximum number triple bam in summary when building XG boost trees for regression we calculate similarity scores gain to determine how to split the data prune the tree by calculating the differences between gain values and a user defined a tree complexity parameter gamma if the difference is positive then we do not prune if it's negative then we prune for example if we subtract gam off from this game and get a negative value we will

then we prune for example if we subtract gam off from this game and get a negative value we will prune otherwise were done if we prune then we will subtract gamma from the next game value and work our way up the tree then we calculate the output values for the remaining leaves and lastly lambda is a regularization parameter and when lambda is greater than zero it results in more pruning by shrinking the similarity scores and it results in smaller output values for the leaves BAM tune in next

the similarity scores and it results in smaller output values for the leaves BAM tune in next time for XG boost part 2 when we give an overview of how XG boost trees are built for classification it's going to be totally awesome hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my

classification it's not a vacation it's not a sensation but it's cool step quest hello I'm Josh stormer and welcome to stack quest today we're gonna talk about XG boost part 2 XG Boost trees for classification note this stack quest assumes that you are already familiar with the main ideas of how XG boost does regression and at least the main ideas of how gradient boost is used for classification if not check out the quests the links are in the description below XG boost is extreme and that means

not check out the quests the links are in the description below XG boost is extreme and that means it's a big machine learning algorithm with lots of parts the good news is that each part is pretty simple and easy to understand and we'll go through them one step at a time in part one in this series we provided an overview of how XG boost trees are built for regression in this video part two we'll give an overview of how XG boost trees are built for classification and in part three we'll dive

give an overview of how XG boost trees are built for classification and in part three we'll dive into the mathematical details to show you how regression and classification are related and why creating unique trees makes so much sense note X G boost was designed to be used with large complicated data sets however to keep the examples from getting out of hand we will use this super simple training data consisting of four different drug dosages the green dots indicate the drug was effective and

data consisting of four different drug dosages the green dots indicate the drug was effective and the red dots indicate that the drug was not effective the very first step in fitting XG boosts to training data is to make an initial prediction this prediction can be anything for example the probability of observing an effective dosage in the training data but by default it is 0.5 regardless of whether you are using XG boost for regression or classification in other words regardless of the dosage

you are using XG boost for regression or classification in other words regardless of the dosage the default prediction is that there is a 50% chance the drug is effective we can illustrate the initial prediction by adding a y access to our graph to represent the probability that the drug is effective in drawing a thick black line at 0.5 to represent a 50% chance that the drug is effective since these two green dots represent effective dosages we will move them to the top of the graph where the

two green dots represent effective dosages we will move them to the top of the graph where the probability that the drug is effective is 1 these two red dots represent ineffective dosages so we will leave them at the bottom of the graph where the probability that the drug is effective is zero the residuals the differences between the observed and predicted values show us how good the initial prediction is now just like we did for regression we fit an XG boost tree to the residuals however since

is now just like we did for regression we fit an XG boost tree to the residuals however since we are using XG boost for classification we have a new formula for the similarity scores note even though the numerator looks fancy it's just the sum of the residuals squared in other words the numerator for classification is the same as the numerator for regression and just like for regression the denominator contains lambda the regularization parameter however the rest of the denominator is different

contains lambda the regularization parameter however the rest of the denominator is different the good news is that we already saw something just like this in regular on extreme gradient boost it's just the sum for each observation of the previously predicted probability times 1 minus the previously predicted probability note although this formula is different from what XG boost uses for regression it is very closely related and we will show you why in part 3 when we get into the nitty-gritty

it is very closely related and we will show you why in part 3 when we get into the nitty-gritty details now let's build a tree just like for regression each tree starts out as a single leaf and all of the residuals go to the leaf now we need to calculate a similarity score for the leaf and that means we plug all four residuals into the numerator note because we do not square the residuals before we add them together they will cancel each other out and we will end up with zero in the numerator

we add them together they will cancel each other out and we will end up with zero in the numerator and that makes the similarity score equal to zero and that's a little bit of a bummer since it doesn't give us a chance to talk about the denominator which is the interesting part however don't freak out we'll get to it soon for now let's just put similarity equals zero up here so we can keep track of it now we need to decide if we can do a better job clustering similar residuals if we split them

of it now we need to decide if we can do a better job clustering similar residuals if we split them into two groups we'll start with this threshold dosage less than 15 note we chose the threshold dosage less than 15 because 15 is the average value between the last two observations thus the three residuals with dosage is less than 15 go to the leaf on the left and the one residual with dosage greater than 15 goes to the leaf on the right to calculate the similarity score for the three residuals

than 15 goes to the leaf on the right to calculate the similarity score for the three residuals that ended up in the leaf on the Left we plug the three residuals into the numerator and since we are building the first tree the previous probability refers to the prediction from the initial leaf so we plug in zero point five for each residual that ended up in the leaf now just to keep things simple we'll let lambda equal zero however you know from part one that lambda reduces the similarity score

we'll let lambda equal zero however you know from part one that lambda reduces the similarity score which ultimately makes leaves easier to prune now notice that these two residuals in the numerator cancel each other out leaving us with just one residual in the numerator and when we do the math we get 0.33 so let's put similarity equals 0.33 under this leaf so we can keep track of it the similarity score for the leaf on the right is B to tutitu tutitu tutitu to to one when lambda equals zero so

score for the leaf on the right is B to tutitu tutitu tutitu to to one when lambda equals zero so let's put similarity equals 1 under this leaf to keep track of it now we can calculate the gain just like we did when we used XG boost for regression we plug in the similarity scores pee pee poo pee pee poo poo poo poo and get 1.33 so when we split the observations based on the threshold dosage less than 15 gain equals one point three three since I'm such a nice guy I'm going to tell you that no

than 15 gain equals one point three three since I'm such a nice guy I'm going to tell you that no other threshold gives us a larger gain value and that means dosage less than 15 will be the first branch in our tree now we can focus on splitting these residuals into two leaves note we can tell just by looking at the data that this threshold dosage less than five has a higher gain than this threshold dosage less than ten this is because when the threshold is dosage less than ten these two

threshold dosage less than ten this is because when the threshold is dosage less than ten these two residuals will cancel each other out in the similarity score for this leaf will be zero so when we calculate the gain we get bit it bit bit bit bit bit bit bit bit bit zero point six six now let's compare that to the gain we get when the threshold is dosage less than five these are the similarity scores and when we plug them into the equation for the game bit lip it bit a bit bit but we get two

scores and when we plug them into the equation for the game bit lip it bit a bit bit but we get two point six six and since two point six six is greater than zero point six six we we use dosage less than five as the threshold for this branch now since I'm limiting the trees to two levels we will not split this leaf any further and we are done building this tree BAM note we stopped growing this tree because we limited the number of levels to two however --xg boost also has a threshold for the

tree because we limited the number of levels to two however --xg boost also has a threshold for the minimum number of residuals in each leaf warning it's time for some tedious detail and terminology the minimum number of residuals in each leaf is determined by calculating something called cover cover is defined as the denominator of the similarity score minus lambda in other words when we are using X G boosts for classification cover is equal to the sum of the previous probability times 1 minus

X G boosts for classification cover is equal to the sum of the previous probability times 1 minus the previous probability for each residual that's in the leaf in contrast when XG boost is used for regression and we are using this formula for the similarity score then cover is equal to the number of residuals in a leaf by default the minimum value for cover is one thus by default when we use XG boost for regression we can have as few as one residual per leaf in other words when we use XG boost

for regression we can have as few as one residual per leaf in other words when we use XG boost for regression and use the default minimum value for cover cover has no effect on how we grow the tree contrast things are way more complicated when we use XG boost for classification because cover depends on the previously predicted probability of each residual in a leaf for example the cover for this leaf is the previously predicted probability for this observation which was 0.5 times 1 minus the

leaf is the previously predicted probability for this observation which was 0.5 times 1 minus the previously predicted probability which is 0.25 and since the default value for the minimum cover is 1xg boost would not allow this leaf likewise the cover for this leaf is equal to 0.5 so by default XG boost would not allow this leaf either since these leaves are not allowed let's remove them and go back to this leaf because the previously predicted probability is the same for all three of these

back to this leaf because the previously predicted probability is the same for all three of these residuals cover is just 3 times the cover for one of the residuals and that means cover equals 0.75 so XG boost would not allow this leaf either ultimately if we use the default minimum value for cover 1 then we would be left with the root and XG boost requires trees to be larger than just the root so in order to prevent this from being the worst example ever let's set the minimum value for cover

so in order to prevent this from being the worst example ever let's set the minimum value for cover equal to zero and that means setting the men child weight parameter equal to zero small Bamm now we can talk about how to prune the tree just like we did in part one we prune by calculating the difference between the gain associated with the lowest branch and a number we pick for gamma for example if we plugged in the gain and Set gamma equal to two then we would not prune because the difference

if we plugged in the gain and Set gamma equal to two then we would not prune because the difference is a positive number contrast if we set gamma equal to three then we would prune because the difference is a negative number and we would also prune this branch because 1.3 3 minus 3 equals a negative number and all we would be left with is the original prediction small Bale now going back to the original tree remember from part 1 that lambda the regularization parameter reduces the similarity

original tree remember from part 1 that lambda the regularization parameter reduces the similarity scores and that lower similarity scores result in lower values for gain for example if we set lambda equal to 1 then we would get these lower values for gain and that means a lower value for gamma will result in a negative difference and cause us to prune branches in other words values for lambda greater than zero reduce the sensitivity of the tree to individual observations by pruning and

greater than zero reduce the sensitivity of the tree to individual observations by pruning and combining them with other observations BAM for now regardless of lambda and gamma let's assume that this is the tree we are working with and determine the output values for the leaves for classification the output value for a leaf is the sum of the residuals divided by the sum of the previous probability times 1 minus the previous probability for each residual in the leaf plus lambda note with the

times 1 minus the previous probability for each residual in the leaf plus lambda note with the exception of lambda the regularization parameter this is the same formula we used for unex treem gradient boost so for this leaf we plug in the residual negative 0.5 and the previously predicted probability and the value for the regularization parameter lambda if lambda equals zero then there is no regularization and the output value equals negative two on the other hand if lambda equals 1 then the

and the output value equals negative two on the other hand if lambda equals 1 then the output value equals negative 0.4 which is closer to zero than negative two when lambda equals zero in other words when lambda is greater than zero then it reduces the amount that this single observation adds to the new prediction thus lambda the regularization parameter reduces the prediction sensitivity to isolated observations for now we'll let lambda equal zero because this is the default value and put

isolated observations for now we'll let lambda equal zero because this is the default value and put negative two under the leaf so we will remember it similarly when lambda equals zero the output value for this leaf dudududududu dudududududududududududu boo-boo is to note if lambda equals one then we get 0.67 which is closer to zero but the effect of lambda is smaller this time because there are two observations in this leaf but like I said we'll let lambda equal zero since that is the default

two observations in this leaf but like I said we'll let lambda equal zero since that is the default value and put two under the leaf so we will remember it lastly when lambda equals zero the output value for this leaf is negative two the first tree is complete double BAM now that we have built the first tree we can make new predictions just like other boosting methods as she boosted makes new predictions by starting with the initial prediction however just like with unex treem gradient boost

by starting with the initial prediction however just like with unex treem gradient boost for classification we need to convert this probability to a log odds value so since this is the formula that converts probabilities to odds we can get a formula that converts probabilities to the log odds by taking the log of both sides note if these equations are freaking you out just watch the stat quest on ODS and log odds the link is in the description below in this case we plug in P equals 0.5 do the

ODS and log odds the link is in the description below in this case we plug in P equals 0.5 do the math did it did it and we see that when P equals 0.5 the log of the odds equals zero so let's put that under the initial prediction so we don't forget now just like unex treem gradient boost for classification we add the log odds of the initial prediction to the output of the tree scaled by a learning rate XG boost calls the learning rate Etta and the default value is 0.3 so that's what we'll use

rate XG boost calls the learning rate Etta and the default value is 0.3 so that's what we'll use thus the new predicted value for this observation with dosage equal to is the log of the odds for the original prediction 0 plus the learning rate 0.3 times the output value negative 2 and that gives us a log of the odds value equal to negative 0.6 to convert a log of the odds value into a probability we plug it into the logistic function note if the logistic function makes you feel a little

we plug it into the logistic function note if the logistic function makes you feel a little uncomfortable check out the stat quest logistic regression details part 2 fitting a line with maximum likelihood assuming we're cool with this equation let's plug in the log of the odds do the math and the new predicted probability is 0.35 remember the original prediction was 0.5 and this was the original residual now the new predicted probability is 0.35 and the new residual is smaller than before so we

now the new predicted probability is 0.35 and the new residual is smaller than before so we have taken a small step in the right direction hooray note you may be wondering why we even bothered adding the log of the odds of the initial prediction since it is zero this is always the case if you use the default value 0.5 for the initial prediction however you can change the initial prediction to any probability and any value other than 0.5 will give you something more interesting to add for

to any probability and any value other than 0.5 will give you something more interesting to add for example if 75% of the observations in the training data said that the drug was effective we might set the initial prediction to 0.75 and now the initial log of the odds equals 1.1 so we would plug 1.1 into the equation instead of 0 but since the default initial prediction is 0.5 we will use 0 for the initial log of the odds in the remaining examples now let's make a new prediction for this

for the initial log of the odds in the remaining examples now let's make a new prediction for this observation with dosage equal to eight we start with the original log of the odds prediction zero plus zero point three times the output value two and the predicted log of the odds equals 0.6 now we convert the log of the odds to a probability and we get 0.65 residual is smaller than before so we've taken another small step in the right direction likewise the new predictions for the remaining

taken another small step in the right direction likewise the new predictions for the remaining observations have smaller residuals than before BAM now that we have new residuals we can build a second tree that is fit to the new residuals note when we build the second tree calculating the similarity scores is a little more interesting because the previous probabilities are no longer the same for all of the observations for example since all of the residuals start in the root of the tree we would

of the observations for example since all of the residuals start in the root of the tree we would plug in the previously predicted probabilities for each observation into the denominator and this time they are not all the same similarly if we had to calculate an output value for the root the denominator would also contain a mixture of previously predicted probabilities small BAM now that we have a new tree we add it to all of the previous predictions and make new predictions that give us even

a new tree we add it to all of the previous predictions and make new predictions that give us even smaller residuals then we build another tree based on the new residuals and we keep building trees until the residuals are super small or we have reached the maximum number of trees triple bam in summary when building x/g boost trees for classification we calculate similarity scores and game to determine how to split the data and we prune the tree by calculating the difference between gain values

how to split the data and we prune the tree by calculating the difference between gain values and a user-defined tree complexity parameter gamma for example if we subtract gamma from this game and get a negative value we will prune otherwise we're done if we prune then we will subtract gamma from the next game value etc etc etc then we calculate the output values for the leaves and lastly lambda is a regularization parameter and when lambda is greater than zero it results in more pruning by

is a regularization parameter and when lambda is greater than zero it results in more pruning by shrinking the similarity scores and smaller output values for the leaves oh and I almost forgot when using XG boost for classification we have to be aware that the minimum number of residuals in a leaf is related to a metric called cover which is the denominator of the similarity score minus lambda tune in next time for XG boost part 3 when we dive deep into the nitty gritty details of the math that

in next time for XG boost part 3 when we dive deep into the nitty gritty details of the math that ties XG boost trees for regression and classification into one elegant equation hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate

a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

XG boost math details there's a lot of them watch out staffed quest hello I'm Josh stormer and welcome to stat quest today we're gonna talk about XG boost part 3 mathematical details this stat quest assumes that you already have a general idea of how XG boost builds trees if not check out the quests the links are in the description below this stat quest also assumes that you know the details of how gradient boost works if not check out the quests lastly it assumes that you are familiar with

how gradient boost works if not check out the quests lastly it assumes that you are familiar with Ridge regression if not the link is in the description below in XG boost part 1 we saw how XG boost builds XG boost trees for regression and in XG boost part 2 we saw ha XG boost builds XG boost trees for classification in both cases we build the trees using similarity scores and then calculated the output values for the leaves now we will derive the equations for the similarity scores in the

the output values for the leaves now we will derive the equations for the similarity scores in the output values and show you how the only difference between regression and classification is the loss function to keep the examples manageable we'll start with a simple training data set for regression and this simple training data set for classification for regression we are using drug dosage on the x-axis to predict drug effectiveness on the y-axis for classification we are using drug dosage on

x-axis to predict drug effectiveness on the y-axis for classification we are using drug dosage on the x-axis to predict the probability the drug will be effective for both regression and classification we already know that XG boost starts with an initial prediction that is usually 0.5 and in both cases we can represent this prediction with a thick black line at 0.5 and the residuals the differences between the observed and predicted values show us how good the initial prediction is just like in

between the observed and predicted values show us how good the initial prediction is just like in regular unex treem gradient boost we can quantify how good the prediction is with a loss function in gradient boost part two regression details we learned how to use this loss function 1/2 times the squared residual for regression to review y sub I stands for the Y access value from one of the observed values y sub 1 Y sub 2 and Y sub 3 and P sub I stands for a prediction P sub 1 P sub 2 in P sub 3

values y sub 1 Y sub 2 and Y sub 3 and P sub I stands for a prediction P sub 1 P sub 2 in P sub 3 that corresponds to one of the observations y sub 1 Y sub 2 and Y sub 3 for example if we applied the loss function to the initial prediction then we would add one term for each observation so N equals three the first term in the summation corresponds to the first observation y sub one second term corresponds to the second observation y sub two in the third term corresponds to the third observation

to the second observation y sub two in the third term corresponds to the third observation y sub three so we just plug in the numbers BP boopy boopy boopy boopy boopy boopy boopy and do the math and get 100 4.4 later we can apply the loss function to new predictions and compare the results to this one to determine if our predictions are improving or not note if we had in observations then we would add up in terms no big deal in gradient boost part for classification details we learned how to

add up in terms no big deal in gradient boost part for classification details we learned how to use this loss function the negative log likelihood for classification and just like before whysa by refers to a y-axis value for one of the observed values which is either 0 or 1 and P sub I refers to a predicted value between and including 0 & 1 note if you want more details and examples using this loss function check out the stat quest gradient boost part for classification details now that we have

function check out the stat quest gradient boost part for classification details now that we have one loss function for regression and another loss function for classification XG boost uses those loss functions to build trees by minimizing this equation note the equation in the original manuscript for XG boost contains an extra term that I'm omitting this term gamma times T where T is the number of terminal nodes or leaves in a tree and gamma is a user definable penalty is meant to encourage

of terminal nodes or leaves in a tree and gamma is a user definable penalty is meant to encourage pruning I say that it encourages pruning because as we saw an XG boost part 1 XG boost can prune even when gamma equals 0 I'm omitting this term because as we saw in parts 1 & 2 pruning takes place after the full tree is built and it plays no role in deriving the optimal output values or similarity scores so let's talk about this equation the first part is the loss function which we just talked

scores so let's talk about this equation the first part is the loss function which we just talked about the second part consists of a regularization term the goal is to find an output value for the leaf that minimizes the whole equation and in a way that is very similar to Ridge regression we square the output value from the Nutri and scale it with lambda later on I will show you that just like Ridge regression if lambda is greater than 0 then we will shrink the output value the 1/2 just makes

regression if lambda is greater than 0 then we will shrink the output value the 1/2 just makes the math easier note because we are optimizing the output value from the first tree we can replace the prediction P sub I with the initial prediction P of 0 plus the output value from the new tree now that we understand all of the terms in this equation let's use it to build the first tree we start by putting all of the residuals into a single leaf and now we need to find an output value for this leaf

all of the residuals into a single leaf and now we need to find an output value for this leaf that will minimize this equation but before we dive into the math let's simplify things by setting lambda equal to zero and that means removing the regularization term okay now let's plug in different output values for the leaf and see what happens for example if we set the output value equal to zero then we are left with the loss function for the initial prediction zero point five note we already

then we are left with the loss function for the initial prediction zero point five note we already calculated the loss function for the initial prediction when we demonstrated the regression loss function and we got 100 four point four so let's move the equation up here and plot the result on this graph X access on this graph represents different values for the output value and the y axis represents the sum of the loss functions for each observed value now let's see what happens if we set the

the sum of the loss functions for each observed value now let's see what happens if we set the output value equal to negative one when the output value for the leaf is negative 1 then the new prediction is 0.5 plus negative 1 which equals negative 0.5 and negative 0.5 corresponds to this new thick black line and that shrinks the residual for y sub 1 but it makes the residuals for both y sub 2 and y sub 3 larger when we do the math we get 109 point 4 now we plot the point on the graph and we see

y sub 3 larger when we do the math we get 109 point 4 now we plot the point on the graph and we see that negative one is a worse choice for the output value than zero because it has a larger total loss in contrast if we set the output value to positive one then the new prediction is 0.5 plus 1 which equals 1.5 and that makes the residual for y sub 1 larger but the residuals for y sub 2 and y sub 3 are smaller now when we do the math we get 100 2.4 and we see that we have the lowest totals so

3 are smaller now when we do the math we get 100 2.4 and we see that we have the lowest totals so far and thus positive 1 is the best output value we have picked so far note we can keep plugging in numbers for the output value to see what we get or we can just plot the function as a curve curve shows us that when lambda is zero then the optimal output value is at the bottom of the parabola where the derivative is zero now let's see what happens when we increase lambda to 4 when lambda equals 4

the derivative is zero now let's see what happens when we increase lambda to 4 when lambda equals 4 the lowest point in the parabola shifts closer to 0 and if we increase lambda to 40 then the lowest point in the parabola shifts even closer to 0 in other words the more emphasis we give the regularization penalty by increasing lambda the optimal output value gets closer to zero and this is exactly what regularization is supposed to do so that's super cool BAM now one last thing before we solve

what regularization is supposed to do so that's super cool BAM now one last thing before we solve for the optimal output value you may remember that when regular on extreme gradient boost found the optimal output value for a leaf it solved an equation very similar to the first part without regularization on extreme gradient boost used two techniques to solve this equation one for regression because the math was easy in a different one for classification because the math was not easy

because the math was easy in a different one for classification because the math was not easy specifically for classification on extreme gradient boost use a second-order Taylor approximation to simplify the math when solving for the optimal output value in contrast XG boost uses the second-order Taylor approximation for both regression and classification unfortunately explaining Taylor series approximation x' is out of the scope of this stat quest so you'll just have to take my word for it

approximation x' is out of the scope of this stat quest so you'll just have to take my word for it that the loss function that includes the output value can be approximated by this mess of sums and derivatives the genius of a Taylor approximation is that it's made of relatively simple parts this part is just the loss function for the previous prediction this is the first derivative of that loss function and this is the second derivative of that loss function note since the derivative of a

function and this is the second derivative of that loss function note since the derivative of a function is related to something called a gradient XG boost uses G to represent the derivative of the loss function and since the second derivative of a function is related to something called a hessian XG boost uses h to represent the second derivative of the loss function now let's expand the summation bit bit bit bit the regularization term and plug in the second-order Taylor approximation for

bit bit bit bit the regularization term and plug in the second-order Taylor approximation for each loss function bit bit bit bit bit before we move on let's remember that we want to find an output value that minimizes the loss function plus the regularization and that all we have done so far is approximate the equation we want to minimize with a second-order Taylor polynomial now it's worth noting that these terms do not contain the output value and that means they have no effect on the optimal

that these terms do not contain the output value and that means they have no effect on the optimal output value so we can omit them from the optimization now all that remains are terms associated with the output value so let's combine all of the unsquare output value terms into a single term in combine all of the squared output value terms into a single term and move the formula to give us some space to work now let's do what we usually do when we want a value that minimizes a function one take

to work now let's do what we usually do when we want a value that minimizes a function one take the derivative with respect to the output value to set the derivative equal to zero and three solve for the output value of the first term with respect to the output value is just the sum of the G's when we take the derivative of the second term with respect to the output value the exponent two comes down and cancels out the one-half leaving us with the sum of the H's and lambda times the output

down and cancels out the one-half leaving us with the sum of the H's and lambda times the output value now we set the derivative equal to zero and solve for the output value so we subtract the sum of the g's from both sides and divide both sides by the sum of the HS and lambda hooray we have finally solved for the optimal output value for the leaf now we need to plug in the gradients the G's and the Hessians the H's for the loss function so let's move the equation out of the way so we have some

Hessians the H's for the loss function so let's move the equation out of the way so we have some room if we're using XG boost for regression then this is the most commonly used loss function shameless self-promotion just to remind you this is the exact same loss function that we described in detail in gradient boost part two regression details so if the next few steps move too quickly just check out the quest the link is in the description below the first derivative aka the gradient G sub I

out the quest the link is in the description below the first derivative aka the gradient G sub I with respect to the predicted value P sub I is negative one times the difference between the observed value y sub I and the predicted value P sub I in other words G sub I is the negative residual that means we plug in the negative residual for each G sub I in the numerator note this negative sign cancels out all of these negative signs so the whole numerator is just the sum of the residuals now we

out all of these negative signs so the whole numerator is just the sum of the residuals now we need to figure out what the ages are in the denominator the second derivative aka the Hessian H sub I with respect to the predicted value P sub I is the number one so that means we replace all in H's in the denominator with the number one in other words the denominator is the number of residuals plus lambda so when we are using XG boosts for regression this is the specific formula for the output value

so when we are using XG boosts for regression this is the specific formula for the output value for a leaf to summarize what we've done so far we started out with this data then we made an initial prediction 0.5 then we put all of the residuals in this leaf then we asked ourselves what the output value of this leaf should be given a loss function and regularization we then plotted the equation as a function of the output value and solve for the lowest point where the derivative is zero and this

a function of the output value and solve for the lowest point where the derivative is zero and this is what we got the equation for the output value gives us the X access coordinate for the lowest point in the parabola BAM now if we are using XG boost for classification then this the negative log likelihood is the most commonly used loss function shameless self-promotion this is the exact same loss function that we worked with in gradient boost part for classification details in that stat quest

function that we worked with in gradient boost part for classification details in that stat quest we spent a long time deriving the first and second derivative of this equation calculating the derivatives took a long time because the output values are in terms of the log odds so we converted the probabilities to log-odds one step at a time rather than skipping the fun parts like we are now then we took the derivatives without skipping the fun parts like we're doing here and lastly we converted

took the derivatives without skipping the fun parts like we're doing here and lastly we converted the log-odds back to probabilities without skipping any steps in the math note if you feel like you just missed out on a lot of fun stuff fear not the link to gradient boost part for classification details is in the description below now that we have the first derivative of the loss function aka the gradient G sub I and the second derivative of the loss function aka the Hessian H sub I we can plug

gradient G sub I and the second derivative of the loss function aka the Hessian H sub I we can plug them into the equation for the optimal output value just like for regression G sub I is the negative residual and we know that this negative sign will cancel out this negative sign in the numerator for the output value so we can replace the numerator for the output value with the sum of the residuals in the denominator we can just replace all of the H sub i's with the sum of P sub I times 1 minus

in the denominator we can just replace all of the H sub i's with the sum of P sub I times 1 minus P sub I note in the denominator we're using previous probability to specify the previously predicted probability rather than the previously predicted log odds so when we are using XG boost for classification this is the specific formula for the output value for a leaf BAM now regardless of whether we are using XG boosts for regression or classification we can calculate the optimal output value for

are using XG boosts for regression or classification we can calculate the optimal output value for this leaf and we do it by plugging derivatives of the loss functions into the equation for the output value BAM now we need to derive the equations for the similarity score so we can grow the tree however before we do that remember that we derived the equation for the output value by minimizing the sum of the loss functions plus the regularization and let's also remember that depending on the loss

of the loss functions plus the regularization and let's also remember that depending on the loss function optimizing this part can be hard so we approximated it with a second-order Taylor polynomial so we expanded the summation bit Allah debt debt debt but at debt added the regularization term and swapped in the second-order Taylor approximation of the loss function then removed the constant terms and lastly did a little algebra to simplify everything now because we removed constants went

terms and lastly did a little algebra to simplify everything now because we removed constants went arriving this equation it's not equal to what we started with however if we plotted both equations on a graph we'd see that the same X access coordinate represented by the optimal value tells us the location of the lowest points in both parabolas I mention this because XG Boost uses the simplified equation to determine the similarity score so the first thing XG boost does is multiply everything by

to determine the similarity score so the first thing XG boost does is multiply everything by negative one and that makes each term negative and it flips the parabola over the horizontal line y equals zero now the optimal output value represents the X access coordinate for the highest point on the parabola and this Y access coordinate for the highest point on the parabola is the similarity score at least it's the similarity score described in the original XG boost manuscript however the

score at least it's the similarity score described in the original XG boost manuscript however the similarity score used in the implementations is actually two times that number the reason for this difference will become clear once we do the algebra so let's do the algebra to convert this into the similarity scores we saw an XG boost parts 1 & 2 first let's plug in the solution for the output value now multiply together the sums of the gradients G's on the Left note these negative signs cancel

now multiply together the sums of the gradients G's on the Left note these negative signs cancel out and we get the square of the sum now we square the term on the right this sum cancel out this square now we add these two terms together and we end up with this fraction this is the equation for the similarity score as described in the original XG boost manuscript however in the XG boost implementations this 1/2 is omitted because the similarity score is only a relative measure and as long as

this 1/2 is omitted because the similarity score is only a relative measure and as long as every similarity score is scaled the same amount the results of the comparisons will be the same this is an example of how extreme extreme gradient boost is it will do anything to reduce the amount of computation now if we're using XG boost for regression and we're using this loss function we plug the first derivative G sub I into the numerator and since G sub I is the negative residual the numerator is

derivative G sub I into the numerator and since G sub I is the negative residual the numerator is simply the sum of the residuals squared now we plug the second derivative H sub I into the denominator and since H sub I equals 1 the denominator is just the number of residuals plus lambda thus this equation is the similarity score that we use for regression double bam now we need to derive the similarity score for classification and that just means plugging in the first derivative for the loss

score for classification and that just means plugging in the first derivative for the loss function G sub I and the second derivative H sub I again since G sub I is the negative residual the numerator is simply the sum of the residuals squared and since H sub I is the previously predicted probability times 1 minus the previously predicted probability then the denominator is just the sum of the H sub i's plus lambda thus this equation is the similarity score that we use for classification triple

i's plus lambda thus this equation is the similarity score that we use for classification triple bam now for one little annoying detail in part two of this series we talked about cover cover is related to the minimum number of residuals in a leaf and we said that cover was the denominator of the similarity score minus lambda in other words cover is the sum of the Hessians the h sub i's for regression the hessian AKA the second derivative of the loss function is 1 and since there is one hessian

the hessian AKA the second derivative of the loss function is 1 and since there is one hessian / residual in a leaf cover for regression is simply the number of residuals in a leaf for classification the hessian is P times 1 minus P so cover is equal to the sum of the previously predicted probability times 1 minus the previously predicted probability small bam in summary boost builds trees by finding the output value that minimizes this equation the equation consists of a loss function and a

the output value that minimizes this equation the equation consists of a loss function and a regularization term that is just like Ridge regression we then solve for the optimal output value and once we have the output value we plug it into the simplified equation to get the similarity score we then configure the output value and similarity score equations for regression or classification by plugging in the first derivative G sub I and the second derivative H sub I of the loss function BAM

plugging in the first derivative G sub I and the second derivative H sub I of the loss function BAM [Music] hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

I want to do things fast want to do things faster uh XG booze got crazy optimizations they're gonna blow your mind you better watch out cuz they're so crazy stack west hello I'm Josh Starman welcome to stack West today we're going to talk about XG boost part 4 optimizations note this stack quest assumes that you are already familiar with how XG Boost creates trees for classification and regression if not check out the quests the links are in the description below this stack west also assumes

if not check out the quests the links are in the description below this stack west also assumes that you are familiar with quantiles and percentiles if not check out the quest-x G boost is a big algorithm with a lot of parts and since gradient boost and regularization were covered in other stat quest videos so far this series has focused entirely on XG boosts unique regression trees so now it's time to talk about the other parts these parts are what make XG boost relatively efficient with

time to talk about the other parts these parts are what make XG boost relatively efficient with relatively large training data sets in other words the first three parts give us a conceptual idea of how XG boost is fit to training data and how it makes predictions in the last six parts describe optimizations for large data sets so let's start by talking about the approximate greedy algorithm boost part 1xg boost trees for regression we had a super simple training data set and used different drug

part 1xg boost trees for regression we had a super simple training data set and used different drug dosages to predict drug effectiveness the first thing we did was make an initial prediction which could be anything like the mean drug effectiveness but by default is 0.5 then we calculated the residuals fit a tree to the residuals we did this by calculating similarity scores and the gain for each possible threshold and the threshold with the largest gain is the 1xg boost uses note the decision

possible threshold and the threshold with the largest gain is the 1xg boost uses note the decision to use the threshold that gives the largest gain is made without worrying about how the leaves will be split later and that means XG boost uses a greedy algorithm to build trees in other words since XG boost uses a greedy algorithm it makes a decision without looking ahead to see if it is the absolute best choice in the long term in contrast if XG boost did not use a greedy algorithm it would

best choice in the long term in contrast if XG boost did not use a greedy algorithm it would postpone making a final decision about this threshold until after trying different thresholds in the leaves to see how things played out in the long run and this same process would be repeated for every single possible threshold for the route in other words by using a greedy algorithm XG boost can build a tree relatively quickly said when we have a lot of measurements then the greedy algorithm becomes

a tree relatively quickly said when we have a lot of measurements then the greedy algorithm becomes slow because it still has to look at every possible threshold and if we had a more interesting training data set that used dosage mass favorite number and a bunch of other stuff to predict drug effectiveness then checking every single threshold in every single variable would take forever wah wah this is where the approximate greedy algorithm comes in going back to our example with a lot of

wah this is where the approximate greedy algorithm comes in going back to our example with a lot of observations instead of testing every single threshold we could divide the data into quantiles and only use the quantiles as candidate thresholds to split the observations for example instead of using the smallest two dosages to define the first threshold the approximate greedy algorithm uses the first quantile to define the first threshold in the second quantile is the second threshold that we

first quantile to define the first threshold in the second quantile is the second threshold that we will consider cetera etc etc note if we only used one quantile and split the observations in half then since there are no other options that quantile would be the threshold make finding the best threshold very fast since we would not have to calculate gain or similarity to make the decision but since both sides of the threshold represent a lot of people who have positive drug effectiveness values

both sides of the threshold represent a lot of people who have positive drug effectiveness values and a negative drug effectiveness values then this threshold would not do a good job predicting drug effectiveness in contrast if we had to quantiles then our predictions would improve because we would do a better job separating observations with positive values for drug effectiveness from observations with negative values for drug effectiveness so for this data to quantiles are better than one if

with negative values for drug effectiveness so for this data to quantiles are better than one if we had five quantiles then our predictions would be more accurate since each threshold represents a smaller cluster of observations however the more quantiles we have the more thresholds we will have to test and that means it will take longer to build the tree she boozed the approximate greedy algorithm means that instead of testing all possible thresholds we only test the quantiles and by default

means that instead of testing all possible thresholds we only test the quantiles and by default the approximate greedy algorithm uses about 33 quantiles now the question is why do we say about 33 quantiles instead of exactly 33 quantiles to answer this question we need to talk about parallel learning and the weighted quantile sketch when you have tons and tons of data so much data that you can't fit it all into a computer's memory at one time then things that seem simple like sorting a list of

fit it all into a computer's memory at one time then things that seem simple like sorting a list of numbers and finding quantiles become really slow to get around this problem a class of algorithms called sketches can quickly create approximate solutions unfortunately explaining the details of sketch algorithms is out of the scope of this stat quest but we can discuss the general idea of how XG boost uses them for this example imagine we are just using a ton of dosages to predict drug

how XG boost uses them for this example imagine we are just using a ton of dosages to predict drug effectiveness now let's move this data set to the top of the screen and imagine splitting it into small pieces and putting the pieces on different computers on a network the quantile sketch algorithm combines the values from each computer to make an approximate histogram then the approximate histogram is used to calculate approximate quantiles and the approximate greedy algorithm uses approximate

is used to calculate approximate quantiles and the approximate greedy algorithm uses approximate quantiles BAM no not yet far we have described the quantile sketch algorithm but XG boost uses a weighted quantile sketch so that means that these quantiles are not normal everyday quantiles instead they are weighted quantiles hey what's a weighted quantile usually quantiles are set up so that the same number of observations are in each one in other words if ten observations were in this quantile

number of observations are in each one in other words if ten observations were in this quantile then there would be ten observations in this quantile and ten observations in this quantile etc etc contrast with weighted quantiles each observation has a corresponding weight and the sum of the weights are the same in each quantile for example if the sum of the weights in this quantile was 10 then the sum of the weights in this quantile would also be 10 in the sum of the weights in this quantile

the sum of the weights in this quantile would also be 10 in the sum of the weights in this quantile would be 10 etc etc etc the weights are derived from the cover metric that we discussed in parts two and three in this series specifically the weight for each observation is the second derivative of the loss function what we are referring to as the hessian that means per regression the weights are all equal to one and that means the weighted quantile czar just like the normal quantile and contain

equal to one and that means the weighted quantile czar just like the normal quantile and contain an equal number of observations in contrast for classification the weights are the previous probability times one minus the previous probability so let's see how the equation for weights affects the quantiles in classification and we'll do that with this simple data set in this classification example we are using drug dosage predict the probability that the drug is effective the red dots are dosages

are using drug dosage predict the probability that the drug is effective the red dots are dosages in the training data set that were not effective and the green dots are dosages in the training data set that were effective these red and green X's correspond to the previously predicted probabilities that these dosages are effective and they start out at the initial prediction 0.5 after running the data down the first tree most of the predictions improve and as we add more trees most of the

the data down the first tree most of the predictions improve and as we add more trees most of the predictions get better and better okay cool but what does this have to do with calculating the weights for the weighted quantile sketch when using XG boost for classification the weights for the weighted quantile sketch are calculated from the previously predicted probabilities so let's calculate the weights for each observation note I'm just showing one example of calculating weights in practice

weights for each observation note I'm just showing one example of calculating weights in practice weights are calculated after building each tree these predicted probabilities are very close to zero indicating a high amount of confidence in classifying these dosages as ineffective since the previously predicted probability for these two points is 0.1 the weight is 0.1 times 1 minus 0.1 which equals 0.09 so let's put 0.09 here so we will remember it these predicted probabilities are very close

0.09 so let's put 0.09 here so we will remember it these predicted probabilities are very close to 1 indicating we have high confidence in classifying these dosages as effective since the previously predicted probability for these two points is 0.9 the weight is 0.9 times 1 minus 0.9 which equals 0.09 so let's put 0.09 here so we will remember it these two predicted probabilities are very close to 0.5 and that means that we are not very confident in how to classify these observations since the

0.5 and that means that we are not very confident in how to classify these observations since the previously predicted probability for this point is 0.6 the weight is 0.24 so let's put 0.2 for here lastly since the previously predicted probability for this point is 0.4 the weight is 0.24 so let's put 0.24 here now we see that when the previously predicted probability is close to 0.5 meaning we don't have much confidence in the classification the weights are relatively large in contrast when the

have much confidence in the classification the weights are relatively large in contrast when the previously predicted probability is very close to zero or one meaning we have a lot of confidence in the classification the weights are relatively small now if we split this data into equal quantiles we would put a quantile here and here but remember we are treating each quantile as a unit and lumping the last two observations together as a unit means they will end up in the same leaf together in

the last two observations together as a unit means they will end up in the same leaf together in the tree and since the positive residual will cancel out the negative residual it will be very difficult to improve the predicted probabilities so instead of using equal quantiles XG boost tries to make quantiles that have a similar sum of weights in order to divide the observations into quantiles where the some of the weights are similar we divide them into these quantiles the sum of the weights in

the some of the weights are similar we divide them into these quantiles the sum of the weights in the first quantile is 0.18 some of the weights in the second quantile is 0.18 the third quantile only has one observation in its weight is 0.24 in the last quantile only has a single observation and its weight is 0.24 by dividing the observations into quantiles where the sum of the weights are similar we split the two observations with low confidence predictions in two separate bins in other words

we split the two observations with low confidence predictions in two separate bins in other words the advantage of using the weighted quantile sketch is that we get smaller quantiles when we need them BAM so when we have a huge training data set XG boosts uses an approximate greedy algorithm and that means using parallel learning to split up the data sets so that multiple computers can work on it at the same time and a weighted quantile sketch merges the data into an approximate histogram and

at the same time and a weighted quantile sketch merges the data into an approximate histogram and the histogram is divided into weighted quantile that put observations with low confidence predictions into quantiles with fewer observations note before we move on I want to mention that XG boost only uses the approximate greedy algorithm parallel learning and the weighted quantile sketch when the training data set is huge when the training data sets are small like the ones in my examples XG boost

data set is huge when the training data sets are small like the ones in my examples XG boost just uses a normal everyday greedy algorithm BAM now let's talk about sparsity aware split finding so let's return to the example where we were using dosage to predict drug effectiveness only this time we have a few missing values even though we have missing values we can calculate the residuals the differences between the observed drug effectiveness and the predicted drug effectiveness using the

differences between the observed drug effectiveness and the predicted drug effectiveness using the initial prediction 0.5 and just like we normally do when we build XG boost trees we can put all of the residuals into a single leaf now we need to determine if splitting the residuals into two leaves will do a better job clustering them so just like we always do for continuous data we need to sort the dosages from low to high unfortunately it's unclear how to sort the dosages with missing values

the dosages from low to high unfortunately it's unclear how to sort the dosages with missing values so what we'll do is we'll split the data into two tables one table will contain all of the observations with dosage values and another table will contain all of the observations without dosage values now focusing on the table that has dosage values for every observation we sort rose by dosage from low to high now we test the average of the first two dosages 7.5 as a candidate threshold note if

low to high now we test the average of the first two dosages 7.5 as a candidate threshold note if this was a large data set we would be using the first quantile here in this case we test the threshold by putting the residual for the one observation that has a dosage less than seven point five in the leaf on the left and put the remaining residuals which all have dosages greater than seven point five into the leaf on the right now that we have all of the residuals with known dosages in the tree

into the leaf on the right now that we have all of the residuals with known dosages in the tree we calculate two separate gain values the first gain value which we will call gain left is calculated by putting all of the residuals with missing dosage values into the leaf on the left ii gain value which we will call gain right is calculated by putting all of the residuals with missing dosage values into the leaf on the right now we do the same thing using the average of the next two dosages 15.5

into the leaf on the right now we do the same thing using the average of the next two dosages 15.5 as a candidate threshold we put the residuals with dosages less than 15.5 in the leaf on the left and the residuals with dosages greater than or equal to fifteen point five in the leaf on the right and then we put all of the residuals with missing dosages into the leaf on the left and calculate gain left then we put all of the residuals with missing dosage values into the leaf on the right and

left then we put all of the residuals with missing dosage values into the leaf on the right and calculate gain right lastly we do the same thing using the average of the last two dosages 23 as a candidate threshold we calculate gain left and we calculate gain right we choose the threshold that gave us the largest value for gained overall in this case that meant picking gain left when the threshold was dosage less than fifteen point five note this path going to the left leaf when dosage is less

was dosage less than fifteen point five note this path going to the left leaf when dosage is less than fifteen point five will be the default path for all future observations that are missing dosage values for example if this was the XG boost model and we got a new observation without a value for dosage but we still needed to predict drug effectiveness then we would assume that this observation goes to the leaf on the left thus sparsity aware split finding tells us how to build trees with

goes to the leaf on the left thus sparsity aware split finding tells us how to build trees with missing data and how to deal with new observations when there is missing data double bam now we need to talk about cache aware access this is where XG boo starts to get super nitty-gritty the basic idea is that inside each computer we have a CPU a central processing unit and that CPU has a small amount of cache memory the CPU can use this memory faster than any other memory in the computer the CPU is

of cache memory the CPU can use this memory faster than any other memory in the computer the CPU is also attached to a large amount of main memory while the main memory is larger than the cache it takes longer to use lastly the CPU is also attached to the hard drive the hard drive can store the most stuff but is the slowest of all memory options if you want your program to run really fast the goal is to maximize what you can do with the cache memory so XG boost puts the gradients and Hessians

is to maximize what you can do with the cache memory so XG boost puts the gradients and Hessians in the cache so that it can rapidly calculate similarity scores and output values BAM that was pretty simple lastly we need to talk about blocks four out of core computation back to the super simple computer schematic when the data set is too large for the cache and main memory then at least some of it must be stored on the hard drive because reading and writing data to the hard drive is super slow

must be stored on the hard drive because reading and writing data to the hard drive is super slow XG boost tries to minimize these actions by compressing the data even though the CPU must spend some time decompressing the data that comes from the hard drive it can do this faster than the hard drive can read the data in other words by spending a little bit of CPU time uncompressing the data we can avoid spending a lot of time accessing the hard drive also when there is more than one hard drive

avoid spending a lot of time accessing the hard drive also when there is more than one hard drive available for storage XG Boost uses a database technique called sharding to speed up disk access for example if this is the data set and it is very large then XG boosts splits the data so that each drive gets a unique set of records then when the CPU needs data both drives can be reading data at the same time BAM thus Kasia where access and blocks four out of core computation or optimizations that

same time BAM thus Kasia where access and blocks four out of core computation or optimizations that take the computer hardware into account lastly I need to mention that XG boost can also speed things up by allowing you to build each tree with only a random subset of the data and XG boost can speed up building trees by only looking at a random subset of features when deciding how to split the data BAM summary --xg boost is fast for a lot of reasons some of these reasons like Kasia where access

BAM summary --xg boost is fast for a lot of reasons some of these reasons like Kasia where access are not even vaguely related to statistics and that makes XG boost something more than just an applied statistical technique and that means machine learning is more than just applied statistics triple bam hooray we've made it to the end of another exciting stat quest if you like this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my

to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

I think that the cosine is fine so we'll calculate it between this and that line stat Quest hello I'm Josh starmer and welcome to stat Quest today we're going to talk about the cosine similarity and it's going to be clearly explained when you build them and deploy in awesome stuff and it's really fast you're using light now hoor ay this stat Quest is also brought to you by the letters a b and c a always b b c curious always be curious imagine we saw these sentences about the 1990 hit movie troll

b b c curious always be curious imagine we saw these sentences about the 1990 hit movie troll 2. by I it's pretty easy to see that the first three sentences are similar to each other they all Express a positive feeling towards the movie in contrast this last sentence is from someone who does not like troll 2. so when we don't have many sentences it's pretty easy to see which ones are similar to each other and which ones are different however what would we do if we collected all of the Twitter

each other and which ones are different however what would we do if we collected all of the Twitter traffic for the last month how would we determine similarities and differences in the tweets in this case we can no longer rely on doing things by eye and instead have to get a computer to do it this is where the cosine similarity comes in handy the cosine similarity is a relatively easy to calculate metric that can tell us how similar or different things are bam to get an understanding of how

metric that can tell us how similar or different things are bam to get an understanding of how the cosine similarity Works let's start with a super simple example here we want to know how similar the phrase hello world is to hello so the first thing that we do is make a table for the words that appear in the phrases hello and world in the first phrase hello world we see the word hello wants and we see the word world once in contrast in the second phrase hello we only see the word hello one time

see the word world once in contrast in the second phrase hello we only see the word hello one time and we don't see the word world at all now given this table of counts for each word in each phrase we can create a two-dimensional graph that has the number of times we saw the word hello on the x-axis and the number of times we saw the word world on the y-axis now since the first phrase hello world had one occurrence of each word we can plot a point for it in the center of the graph in contrast

had one occurrence of each word we can plot a point for it in the center of the graph in contrast the point for the second phrase hello is on the x-axis at 1. now if we draw lines from the origin of the graph 0 0 to the points we can see that there is a 45 degree angle between the two lines and the cosine of a 45 degree angle the cosine of 45 degrees is 0.71 and thus the cosine similarity between the phrases hello world and hello is the cosine of 45 degrees which equals 0.71 bam bam note

the phrases hello world and hello is the cosine of 45 degrees which equals 0.71 bam bam note currently the second phrase is hello but what if it were hello hello hello now the table has a three for hello since it's in the phrase three times but we still have a zero for the word world in this case the point on the graph representing hello hello hello would be further out on the x-axis however the angle between the two lines would still be 45 degrees and thus the cosine similarity would be the

angle between the two lines would still be 45 degrees and thus the cosine similarity would be the exact same as what we got before the cosine of 45 degrees equals 0.71 in other words the cosine similarity is determined entirely by the angle between the lines and not by the lengths of the lines bam now if both phrases are hello world then they are exactly the same and we end up plotting the dots that represent the phrases on top of each other creating a kind of Swampy green color and the angle

that represent the phrases on top of each other creating a kind of Swampy green color and the angle between the lines from the origin and the points would be zero degrees and the cosine similarity is the cosine of zero degrees which equals one so when both phrases are exactly the same the angle between them will be zero degrees and the cosine similarity is one in contrast if the phrases don't have any words in common like here where the first phrase is hello and the second phrase is world then

any words in common like here where the first phrase is hello and the second phrase is world then the angle between the two phrases will be 90 degrees and the cosine similarity will be the cosine of 90 degrees which equals zero to summarize when two phrases have absolutely nothing in common the cosine similarity is zero and when the phrases are the exact same the cosine similarity is one and when there is some overlap between the two phrases but they are not exactly the same the cosine

and when there is some overlap between the two phrases but they are not exactly the same the cosine similarity is between 0 and 1. double bam now the way we've been Computing the cosine similarity step one make a table of the word counts step two plot the points step three figure out the angle and lastly step four calculate the cosine of the angle is pretty tedious the good news is that there is a relatively simple formula that can be computed super quickly on a computer to calculate the cosine

relatively simple formula that can be computed super quickly on a computer to calculate the cosine similarity directly from the table of word counts dang that equation looks complicated don't worry Squatch we'll go through it one step at a time thanks these sigmas are shorthand for adding up a bunch of stuff the I is short for index and is used to keep track of the word we are working on I starts out set to one the first word in the table in this case the first word is hello and N is the number

out set to one the first word in the table in this case the first word is hello and N is the number of different words in the phrases in this case n equals 2 because we have two words hello and world lastly A and B refer to the two phrases in this case let's let a be the first phrase hello world and B be the second phrase hello now when I equals 1 we plug in the word counts for the first word hello and when I equals 2 we plug in the word counts for the second word world and when we do the math

and when I equals 2 we plug in the word counts for the second word world and when we do the math we get 0.71 which is the same value we got when we took the cosine of 45 degrees bam note when we only have two different words in our table like we do here then we can easily plot the points on a two-dimensional graph because we can put one word like hello on the x-axis the First Dimension and the other word world on the y-axis the second dimension but when we have phrases with more than two

the other word world on the y-axis the second dimension but when we have phrases with more than two different words then we need more than two Dimensions to plot the points for example if we wanted to calculate the cosine similarity for these two phrases where the first phrase I love Troll 2 is phrase a and the second phrase I love Jim Kata is phrase B then the table will have five different words in it and that means we would need a five dimensional graph to plot the points and I have no idea

in it and that means we would need a five dimensional graph to plot the points and I have no idea how to draw five dimensional graph the good news is that this is another way that having the equation for the cosine similarity can come in handy rather than worry about how to draw a five-dimensional graph we just plug the numbers into the equation then we do the math and we get 0.58 so the cosine similarity between these two phrases is 0.58 triple bam in summary the cosine similarity is a

similarity between these two phrases is 0.58 triple bam in summary the cosine similarity is a relatively easy to calculate metric that can tell us how similar or different things are note if you haven't already seen it Jim Kata is an awesome 1985 movie about a gymnast he uses the parallel bars to defeat his enemies in Mortal Kombat bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the stackquest PDF study guides and my

to review statistics and machine learning offline check out the stackquest PDF study guides and my book The stackquest Illustrated guide to machine learning at stackquest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support stat Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or

patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

support vector machines have a lot of terminology associated with them brace yourself hello I'm Josh stormer and welcome to stat quest today we're going to talk about support vector machines and they're gonna be clearly explained note this stack quest assumes that you are already familiar with the trade-off that plagues all of machine learning the bias-variance tradeoff you should also be familiar with cross-validation if not check out the quests the links are in the description below let's

with cross-validation if not check out the quests the links are in the description below let's start by imagining we measured the mass of a bunch of mice the red dots represent mice that are not obese and the green dots represent mice that are obese based on these observations we can pick a threshold and when we get a new observation that has less mass than the threshold we can classify it as not obese and when we get a new observation with more mass than the threshold we can classify it as

not obese and when we get a new observation with more mass than the threshold we can classify it as obese however what if we get a new observation here because this observation has more mass than the threshold we classify it as obese but that doesn't make sense because it is much closer to the observations that are not obese so this threshold is pretty lame can we do better yes going back to the original training data set we can focus on the observations on the edges of each cluster and use the

training data set we can focus on the observations on the edges of each cluster and use the midpoint between them as the threshold now when a new observation falls on the left side of the threshold it will be closer to the observations that are not obese than it is to the obese observations so it makes sense to classify this new observation as not obese BAM no it's a terminology alert the shortest distance between the observations and the threshold is called the margin since we put the

shortest distance between the observations and the threshold is called the margin since we put the threshold halfway between these two observations the distances between the observations and the threshold are the same and both reflect the margin when the threshold is halfway between the two observations the margin is as large as it can be for example if we move the threshold to the left a little bit then the distance between the threshold and the observation that is not obese would be smaller

bit then the distance between the threshold and the observation that is not obese would be smaller and thus the margin would be smaller than it was before and if we move the threshold to the right a little bit then the distance between the obese observation and the threshold would get smaller and again the margin would be smaller when we use the threshold that gives us the largest margin to make classifications heads up terminology alert we are using a maximal margin classifier BAM no no BAM

classifications heads up terminology alert we are using a maximal margin classifier BAM no no BAM maximal margin classifiers seem pretty cool but what if our training data looked like this and we had an outlier observation that was classified as not obese but was much closer to the obese observations in this case the maximum margin classifier would be super close to the obese observations and really far from the majority of the observations that are not obese now if we got this new observation

far from the majority of the observations that are not obese now if we got this new observation we would classify it as not obese even though most of the not obese observations are much further away than the obese observations so maximum margin classifiers are super sensitive to outliers in the training data and that makes them pretty lame can we do better yes to make a threshold that is not so sensitive to outliers we must allow misclassifications for example if we put the threshold halfway

sensitive to outliers we must allow misclassifications for example if we put the threshold halfway between these two observations then we will miss classify this observation however now when we get a new observation here we will classify it as obese make sense because it is closer to most of the obese observations choosing a threshold that allows misclassifications is an example of the bias-variance tradeoff that plagues all of machine learning in other words before we allowed

of the bias-variance tradeoff that plagues all of machine learning in other words before we allowed misclassifications we picked a threshold that was very sensitive to the training data it had low bias and it performed poorly when we got new data it had high variance contrast when we picked a threshold that was less sensitive to the training data and allowed misclassifications so it had higher bias it performed better when we got new data so it had low variance small BAM oh no it's another

bias it performed better when we got new data so it had low variance small BAM oh no it's another terminology alert when we allow misclassifications the distance between the observations and the threshold is called a soft margin so the question is how do we know that this soft margin is better than this soft margin the answer is simple we use cross-validation to determine how many misclassifications and observations to allow inside of the soft margin to get the best classification for example

and observations to allow inside of the soft margin to get the best classification for example if cross-validation determined that this was the best soft margin then we would allow one miss classification and two observations that are correctly classified to be within the soft margin BAM when we use a soft margin to determine the location of a threshold brace yourself we have another terminology alert then we are using a soft margin classifier aka a support vector classifier to classify

alert then we are using a soft margin classifier aka a support vector classifier to classify observations the names support vector classifier comes from the fact that the observations on the edge and within the soft margin are called support factors super-small bam note if each observation had a mass measurement and a height measurement then the data would be two-dimensional when the data are two-dimensional a support vector classifier is a line and in this case the soft margin is measured from

a support vector classifier is a line and in this case the soft margin is measured from these two points the blue parallel lines give us a sense of where all of the other points are in relation to the soft margin these observations are outside of the soft margin and this observation is inside the soft margin and misclassified just like before we used cross-validation to determine that allowing this miss classification results in better classification in the long run BAM now if each observation

miss classification results in better classification in the long run BAM now if each observation has a mass a height and an age then the data would be three-dimensional note the axis that age is on is supposed to represent depth and these circles are larger in order to appear closer and thus younger and these circles are smaller in order to look further away and thus older when the data are three-dimensional the support vector classifier forms a plane instead of a line and we classify new

three-dimensional the support vector classifier forms a plane instead of a line and we classify new observations by determining which side of the plane they are on for example if this were a new observation we would classify it as not obese since it is above the support vector classifier note if we measured mass height age and blood pressure then the data would be in four dimensions and I don't know how to draw four dimensional graph wah-wah but we know that when the data are one-dimensional

know how to draw four dimensional graph wah-wah but we know that when the data are one-dimensional the support vector classifier is a single point on a one-dimensional number line just in mathematical jargon a point is a flat affin zero dimensional subspace and when the data are in two dimensions the support vector classifier is a one-dimensional line in a two dimensional space in mathematical jargon a line is a flat affin one-dimensional subspace and when the data are three-dimensional the

jargon a line is a flat affin one-dimensional subspace and when the data are three-dimensional the support vector classifier is a two-dimensional plane in a three-dimensional space in mathematical jargon a plane is a flat affin two dimensional subspace and when the data are in four or more dimensions the support vector classifier is a hyperplane in mathematical jargon a hyperplane is a flat Athene subspace note technically speaking all flat Athene subspaces are called hyperplanes so technically

subspace note technically speaking all flat Athene subspaces are called hyperplanes so technically speaking this one-dimensional line is a hyperplane but we generally only use the term when we can't draw it on paper small BAM because this is just more terminology ugh support vector classifier seemed pretty cool because they can handle outliers and because they can allow misclassifications they can handle overlapping classifications but what if this was our training data and we had tons of

can handle overlapping classifications but what if this was our training data and we had tons of overlap in this new example with tons of overlap we are now looking at drug dosages and the red dots represent patients that were not cured and the green dots represent patients that were cured in other words the drug doesn't work if the dosage is too small or too large it only works when the dosage is just right now no matter where we put the classifier we will make a lot of misclassifications so

is just right now no matter where we put the classifier we will make a lot of misclassifications so support vector classifier czar only semi-cool since they don't perform well with this type of data can we do better than maximal margin classifiers and support vector classifier x' yes since maximal margin classifiers and support vector classifier x' can't handle this data it's high time we talked about support vector machines so let's start by getting an intuitive sense of the main ideas behind

about support vector machines so let's start by getting an intuitive sense of the main ideas behind support vector machines we start by adding a y-axis so we can draw a graph the x axis coordinates in this graph will be the dosages that we have already observed and the y axis coordinates will be the square of the dosages so for this observation with dosage equals 0.5 on the x axis the y axis value equals dosage squared which equals 0.5 squared which equals 0.25 now we use dosage squared for

equals dosage squared which equals 0.5 squared which equals 0.25 now we use dosage squared for this y-axis coordinate and then we use dosage squared for the y-axis coordinates for the remaining observations since each observation has X and y-axis coordinates the data are now two-dimensional and now that the data are two-dimensional we can draw a support vector classifier that separates the people who were cured from the people who were not cured and the support vector classifier can be used to

who were cured from the people who were not cured and the support vector classifier can be used to classify new observations for example if a new observation had this dosage then we could calculate the y-axis coordinate by squaring the dosage and classify the observation as not cured because it ended up on this side of the support vector classifier on the other hand if we got a new observation with this dosage then we would square the dosage and get a y-axis coordinate and classify this

with this dosage then we would square the dosage and get a y-axis coordinate and classify this observation as cured because it falls on the other side of the support vector classifier BAM the main ideas behind support vector machines are one start with data in a relatively low dimension in this example the data started in one dimension to move the data into a higher dimension in this example we move the data from one dimension to two dimensions three find a support vector classifier that

we move the data from one dimension to two dimensions three find a support vector classifier that separates the higher dimensional data into two groups that's all there is to it double BAM going back to the original one dimensional data you may be wondering why we decided to create y-axis coordinates with dosage squared why not dosage cubed or pi divided by four times the square root of dosage in other words how do we decide how to transform the data in order to make the mathematics possible

in other words how do we decide how to transform the data in order to make the mathematics possible support vector machines use something called kernel functions to systematically find support vector classifier in higher dimensions so let me show you how a kernel function systematically finds support vector classifier in higher dimensions for this example I use the polynomial kernel which has a parameter D which stands for the degree of the polynomial when D equals 1 the polynomial kernel

a parameter D which stands for the degree of the polynomial when D equals 1 the polynomial kernel computes the relationships between each pair of observations in one dimension chips are used to find a support vector classifier when D equals two we get a second dimension based on dosages squared and the polynomial kernel computes the two-dimensional relationships between each pair of observations and those relationships are used to find a support vector classifier and when we set D equal three

and those relationships are used to find a support vector classifier and when we set D equal three then we would get a third dimension based on dosages cubed and the polynomial kernel computes the three-dimensional relationships between each pair of observations and those relationships are used to find a support vector classifier and when D equals four or more then we get even more dimensions to find a support vector classifier in summary the polynomial kernel systematically increases

to find a support vector classifier in summary the polynomial kernel systematically increases dimensions by setting D the degree of the polynomial and the relationships between each pair of observations are used to find a support vector classifier last but not least we can find a good value for D with cross validation double bam another very commonly used kernel is the radial kernel also known as the radial basis function kernel unfortunately the radio Colonel finds support vector classifier x'

the radial basis function kernel unfortunately the radio Colonel finds support vector classifier x' in infinite dimensions so I can't give you an example of what it does exactly however when using it on a new observation like this the radio kernel behaves like a weighted nearest neighbor model in other words the closest observations aka the nearest neighbors have a lot of influence on how we classify the new observation and observations that are further away have relatively little influence on

the new observation and observations that are further away have relatively little influence on the classification so since these observations are the closest to the new observation the radio kernel uses their classification for the new observation BAM now for the sake of completeness let me mention one last detail about kernels although the examples I've given show the data being transformed from a relatively low dimension to a relatively high dimension kernel functions only calculate the

from a relatively low dimension to a relatively high dimension kernel functions only calculate the relationships between every pair of points as if they are in the higher dimensions they don't actually do the transformation this trick calculating the high-dimensional relationships without actually transforming the data to the higher dimension is called the kernel trick the kernel trick reduces the amount of computation required for support vector machines by avoiding the math that transforms

the amount of computation required for support vector machines by avoiding the math that transforms the data from low to high dimensions and it makes calculating the relationships in the infinite dimensions used by the radial kernel possible however regardless of how the relationships are calculated the concepts are the same when we have two categories but no obvious linear classifier that separates them in a nice way support vector machines work by moving the data into a relatively high

separates them in a nice way support vector machines work by moving the data into a relatively high dimensional space and finding a relatively high dimensional support vector classifier that can effectively classify the observations triple bam hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to supports that quest consider contributing to my patreon campaign becoming a channel member buying one or

that quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or hoodie or just donate the links are in the description below alright until next time quest on

Support Vector Machines Part 2: The Polynomial Kernel (Part 2 of 3)

a once knew a colonel its name was Fred the stat quest isn't about that Colonel stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about support vector machines part two the polynomial kernel specifically we're going to talk about the polynomial kernels parameters and how the polynomial kernel calculates high-dimensional relationships note this stat quest assumes that you are already familiar with support vector machines if not check out the quest the link is

that you are already familiar with support vector machines if not check out the quest the link is in the description below in the stack quest on support vector machines we had a training data set based on drug dosages measured in a bunch of patients the red dots represented patients that were not cured and the green dots represented patients that were cured in other words the drug doesn't work if the dosage is too small or too large it only works when the dosage is just right because this

if the dosage is too small or too large it only works when the dosage is just right because this training data set had so much overlap we were unable to find a satisfying support vector classifier to separate the patients that were cured from the patients that were not cured however when we gave each point a Y access coordinate by squaring the original dosage measurements we could draw a line that separated the two categories of patients so we used a support vector machine with a polynomial

that separated the two categories of patients so we used a support vector machine with a polynomial kernel to compute the relationships between the observations in a higher dimension and then found a good support vector classifier based on the high dimensional relationships the polynomial kernel that I used looks like this a and B refer to two different observations in the dataset are determines the coefficient of the polynomial and like I mentioned in the earlier stat quest D sets the degree

the coefficient of the polynomial and like I mentioned in the earlier stat quest D sets the degree of the polynomial in my example I set R equals 1/2 and D equals 2 since we are squaring the term we can expand it to be the product of two terms now we just do the multiplication b.p boo peepee poo-poo and combine these two terms and just because it will make things look better later let's flip the order of these two terms finally this polynomial is equal to this dot product a dot product sounds

order of these two terms finally this polynomial is equal to this dot product a dot product sounds fancy but all it is is the first terms multiplied together plus the second terms multiplied together plus the third terms multiplied together the dot product gives us the high dimensional coordinates for the data the first terms are the x-axis coordinates and the second terms are the y-axis coordinates the third terms are z axis coordinates but since they are the same for both points we can ignore

the third terms are z axis coordinates but since they are the same for both points we can ignore them thus we have X and y-axis coordinates for the data in the higher dimension BAM alternatively we could have set R equals 1 and D equals 2 now when we do the math we get this polynomial and this dot product we can verify that the dot product is correct by multiplying each term together and then add everything up and the result should be equal to the polynomial using this dot product the new

add everything up and the result should be equal to the polynomial using this dot product the new x-axis coordinates are the square root of two times the original dosage values so we move the points on the x-axis over by a factor of the square root of two the new y-axis coordinates are the same as before the original dosage values squared and just like before we can ignore the Z access coordinate since it is a constant value now just like before we can use the high dimensional relationships to

since it is a constant value now just like before we can use the high dimensional relationships to find a support vector classifier double bam now brace yourself things are about to get a little crazy going back to the polynomial kernel with R equals 1/2 and D equals 2 it turns out that all we need to do to calculate the high-dimensional relationships is calculate the dot products between each pair of points and since this kernel is equal to this dot product all we need to do is plug values

pair of points and since this kernel is equal to this dot product all we need to do is plug values into the kernel to get the high-dimensional relationships for example if we wanted to know the high-dimensional relationships between these two observations then we plug the dosages into the kernel do the math and 16000 2.25 is one of the two dimensional relationships that we need to solve for the support vector classifier even though we didn't actually transform the data to two dimensions triple

vector classifier even though we didn't actually transform the data to two dimensions triple bam fortunately why we only need to compute the dot product is out of the scope of this stat quest wah-wah to review the polynomial kernel computes relationships between pairs of observations a and B refer to the two observations that we want to calculate the high dimensional relationships for our determines the polynomials coefficient and D determines the degree of the polynomial note R and D are

the polynomials coefficient and D determines the degree of the polynomial note R and D are determined using cross-validation once we decide on values for R and D we just plug in the observations and do the math to get the high dimensional relationships hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying

support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Support Vector Machines Part 3: The Radial (RBF) Kernel (Part 3 of 3)

the radio Colonel works in infinite dimensions I know that sounds kind of crazy but it's actually not that bad stat quest hello I'm Josh Armour and welcome to stat quest today we're gonna talk about support vector machines part 3 the radial kernel specifically we're going to talk about the radial kernels parameters how the radio kernel calculates high dimensional relationships and then show you how the radial kernel works in infinite dimensions note this stack quest assumes that you are already

the radial kernel works in infinite dimensions note this stack quest assumes that you are already familiar with support vector machines and the polynomial kernel if not check out the quests the links are in the description below in the stack quest on support vector machines we had a training data set based on drug dosages measured in a bunch of patients the red dots represented patients that were not cured and the green dots represented patients that were cured in other words the drug doesn't

not cured and the green dots represented patients that were cured in other words the drug doesn't work if the dosage is too small or too large it only works when the dosage is just right because this training data set had so much overlap we were unable to find a satisfying support vector classifier to separate the patients that were cured from the patients that were not cured one way to deal with overlapping data is to use a support vector machine with a radial kernel aka the radial basis

with overlapping data is to use a support vector machine with a radial kernel aka the radial basis function RBF because the radio Colonel find support vector classifier z' in infinite dimensions it's not possible to visualize what it does however when using it on a new observation like this the radio kernel behaves like a weighted nearest neighbor model in other words the closest observations aka the nearest neighbors have a lot of influence on how we classify the new observation and the

aka the nearest neighbors have a lot of influence on how we classify the new observation and the observations that are further away have relatively little influence on the classification so since these observations are the closest to the new observation the radio kernel uses their classification for the new observation now let's talk about how the radio Colonel determines how much influence each observation in the training dataset has on classifying new observations just like with the

each observation in the training dataset has on classifying new observations just like with the polynomial kernel a and B refer to two different dosage measurements the difference between the measurements is then squared giving us the squared distance between the two observations thus the amount of influence one observation has on another is a function of the squared distance gamma which is determined by cross-validation scales the squared distance and thus it scales the influence for example

by cross-validation scales the squared distance and thus it scales the influence for example if we set gamma equal to one plug in the dosages from two observations that are relatively close to each other and do the math peepee poopy poop we get 0.11 when gamma equals 1 so let's put 0.11 here now let's set gamma equal to two and plug in the same two dosages as before and do the math beep boop boop when gamma equals 2 we get 0.01 which is less than when gamma equals 1 so we see that by scaling

when gamma equals 2 we get 0.01 which is less than when gamma equals 1 so we see that by scaling the distance gamma scales the amount of influence two points have on each other small BAM now let's at gamma equal to 1 again and determine how much influence two observations have when they are relatively far from each other so we plug in the two dosages do the math are relatively far from each other we get a number very close to zero thus the further two observations are from each other the less

we get a number very close to zero thus the further two observations are from each other the less influence they have on each other note just like with the polynomial kernel when we plug values into the radial kernel we get the high-dimensional relationship thus 0.11 is the high dimensional relationship between these two observations that are relatively close to each other and a number very close to zero is the high dimensional relationship between these two observations that are relatively far

to zero is the high dimensional relationship between these two observations that are relatively far from each other medium Bamm now before we move on I want to simplify the training data set to just two observations and use the polynomial kernel to give us intuition into how the radio kernel works in infinite dimensions when R equals zero the polynomial kernel simplifies to a single term and that gives us a dot product with a single coordinate when D equals 2 we get a squared times B squared

gives us a dot product with a single coordinate when D equals 2 we get a squared times B squared which is equal to the dot product of a squared and B squared since this dot product only has one coordinate the new coordinate is just the square of the original measurement on the original axis for example if we plug these two dosages into the kernel we get this dot product and that means the new XS coordinate for this point is two point five squared which equals six point two five and the new

XS coordinate for this point is two point five squared which equals six point two five and the new x-axis coordinate for this point is four squared which equals 16 in other words when R equals zero and D equals two all the polynomial kernel does is shift the data down the original axis when R equals 0 and D equals 3 we still only have one coordinate in the dot product and we shift the data down the X access further because now we are cubing each value lastly when R equals zero and D equals one

X access further because now we are cubing each value lastly when R equals zero and D equals one we still only have one coordinate in the dot product but now the data just stays in its original location so setting R equals zero seems silly because no matter what values we use for D the dot products leave the data in the original dimension and in this example the data stays on the same one-dimensional line however it turns out that setting R equals zero can result in some pretty awesome stuff

line however it turns out that setting R equals zero can result in some pretty awesome stuff going back to the original training data set let's talk about what happens if we take a polynomial kernel with R equals 0 and D equals 1 and add another polynomial kernel with R equals 0 and D equals 2 this gives us a dot product with coordinates for two dimensions the first coordinate is the original dosage and the second coordinate is dosage squared now we can plot the transform data on XY axes and

and the second coordinate is dosage squared now we can plot the transform data on XY axes and find a support vector classifier to separate the data and by now you know that we don't actually do the transformation we just solve for the dot product to get the high dimensional relationships now if we added another polynomial kernel with R equals zero and D equals three then the dot product has coordinates for three dimensions and we can plot the transform data on XYZ axes and find a support vector

for three dimensions and we can plot the transform data on XYZ axes and find a support vector classifier to separate the data now what if we just kept adding polynomial kernels with our equals zero and increasing D until D equals infinity that would give us a dot product with coordinates for an infinite number of dimensions that would be awesome right well that's exactly what the radio Colonel does so let's talk about it warning this part gets very mathy so feel free to skip to the end if this

so let's talk about it warning this part gets very mathy so feel free to skip to the end if this is not your thing let's start with the radial kernel and multiply out the square beep OOP OOP OOP OOP now because we can set gamma equal to anything let's set it to 1/2 so that this 2 goes away now let's create the Taylor series expansion of this last term wait a minute what's a Taylor series expansion this big thing is a Taylor series although there are exceptions the main idea is that a function f

this big thing is a Taylor series although there are exceptions the main idea is that a function f of X can be split into an infinite sum since this is very abstract let's walk through how to convert e to the X into an infinite sum in other words we are setting f of X equal to e to the X and that means F of a equals e to the a now we plug in the derivative of e to the X evaluated at a divided by 1 factorial and multiplied by X minus a note in case you don't already know the derivative of e to

1 factorial and multiplied by X minus a note in case you don't already know the derivative of e to the X equals e to the X so taking the derivative of e to the X is super easy now we plug in the second derivative of e to the X evaluated at a divided by 2 factorial and multiplied by X minus a squared then we keep adding terms based on higher derivatives until we get to infinity thus this is the Taylor series expansion of e to the X now the question is what is a the definition of the Taylor

Taylor series expansion of e to the X now the question is what is a the definition of the Taylor series says that a can be any value as long as F of a exists and since e to the zero equals one e to the zero exists so we will set a equal to zero and simplify peepee poopy poopy poop thus if we can accept that the Taylor series expansion does what it says it does e to the X is equal to this infinite sum large BAM going back to the radial kernel we can now create the Taylor series expansion of this

sum large BAM going back to the radial kernel we can now create the Taylor series expansion of this last term to create the Taylor series expansion of e to the a B we plug in a B for X now we have the Taylor series expansion of the last part of the radial kernel okay time to take a deep breath we've done a lot but we still have a few more steps before we are done and get to eat snacks before we move on let's remember that when we added up a bunch of polynomial kernels with R equals 0 and D

we move on let's remember that when we added up a bunch of polynomial kernels with R equals 0 and D going from 0 to infinity we got a dot product with coordinates for an infinite number of dimensions now observe that a polynomial kernel with R equals 0 and D equals 0 is equal to 1 and a polynomial kernel with R equals 0 and D equals 1 is equal to a times B and a polynomial kernel with R equals 0 and D equals to is equal to a times B squared etc etc etc thus each term in this Taylor series

0 and D equals to is equal to a times B squared etc etc etc thus each term in this Taylor series expansion contains a polynomial kernel with R equals 0 and D going from 0 to infinity now just to remind you converting this sum to a dot product was easy because the dot product tells us to multiply each term together and then add up all the terms with that in mind the dot product for e to the a B is this we can verify that the dot product is correct by multiplying each term together and add up the

this we can verify that the dot product is correct by multiplying each term together and add up the new terms to get the Taylor series expansion of e to the a B double bam back to the original radial kernel we can plug in the dot product for e to the a B now the radial kernel is equal to this term times the dot product to make the radio Colonel all one dot product instead of something times a dot product we just multiply both parts of the dot product by the square root of this term so we can

product we just multiply both parts of the dot product by the square root of this term so we can fit everything onto the screen let's let s equal the square root of the first term now we multiply the dot product by s be boo boo boo boo boo boo boo boo boo boo and at long last we see that the radial kernel is equal to a dot product that has coordinates for an infinite number of dimensions that means when we plug numbers into the radial kernel and do the math be boo-boo-boo the value we get at

when we plug numbers into the radial kernel and do the math be boo-boo-boo the value we get at the end is the relationship between the two points in infinite dimensions triple bam now we can go eat snacks hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or

patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

support vector machines quest hey yeah alright let's get started first thing I need to do is share my screen with you let's get let's get back going alright here we go oh so welcome hello I'm Josh dormer and welcome to the stack quest on support vector machines in Python from start to finish in this lesson we will build a support vector machine for classification using scikit-learn and the radial basis function our training dataset contains continuous and categorical data from the UCI machine

basis function our training dataset contains continuous and categorical data from the UCI machine learning repository to predict whether or not a person will default on their credit card and note throughout this jupiter notebook all these links are live so if you want to learn more about the UCI machine Rapala scheen learning repository just click on the link and there it is if you want to learn more about the data set that we're gonna be using just click on the link and there it is and you see

about the data set that we're gonna be using just click on the link and there it is and you see we've got attribute information this describes the data and the data set and so so there's lots lots of sort of stuff you can click on and learn more about here is a picture of the decision service that we will create with our support vector machine we'll do this at the end but I just want to give you a sneak preview of what's gonna happen it's kind of a messy figure but it's it's what we're gonna do

sneak preview of what's gonna happen it's kind of a messy figure but it's it's what we're gonna do so let's just let's move on okay so support vector machines why would you want to do them they are one of the best machine learning algorithms out there for when getting the correct answer is a higher priority than actually understanding why you get the correct answer they work really well with relatively small data sets and they tend to work well out of the box in other words they tend to not

small data sets and they tend to work well out of the box in other words they tend to not require much optimization um so in this lesson we're gonna learn about importing data from a file we're gonna learn about missing data down sampling data formatting the data for support vector machines and we're gonna build a preliminary support vector machine then we're gonna optimize it and then we're gonna build evaluate draw and interpret a final support vector from support vector machine and we're

build evaluate draw and interpret a final support vector from support vector machine and we're gonna compare it to that preliminary machine mm-hmm and we're gonna see if it does better or it doesn't doesn't do better um one of the things about support vector machines is because they're great out of the box sometimes optimizing doesn't give you a huge bonus like when you're using classification trees when we did that it was night and day it was like we went from a huge tree to a prune tree and

when we did that it was night and day it was like we went from a huge tree to a prune tree and that prune tree was like infinitely better at doing classification um in contrast support vector machines tend to be pretty good out of the box so let's just see what happens note this tutorial assumes that you already know the basics of Python and are familiar with the theory behind support vector machines the radial basis function regularization cross validation and confusion matrices if not you can

the radial basis function regularization cross validation and confusion matrices if not you can check out those questions by clicking these links and you're good to go also I want to strongly encourage all of you to play around with the code once you get it playing with code is the best way to learn from it there's alternative ways to do what what we want to do in this um in this Jupiter notebook and there are different ways to optimize and there's different ways there's you can even just plug

and there are different ways to optimize and there's different ways there's you can even just plug in different machine learning algorithms for that matter and just see what happens there's a lot of learning that can take place by just playing around and that's when I think that's them that's the exciting part I mean this is pretty fun too so don't get me wrong ok so the very first thing we're gonna do is we're going to import the modules that will do all the work Python itself just gives us a

do is we're going to import the modules that will do all the work Python itself just gives us a basic programming language these modules give us extra function extra functionality to import the data clean it up and format it and then bill evaluate and draw the support vector machine note you're gonna need Python three and I've got instructions on how to install that and make sure all your modules are up to date down here we don't need to go through that because I've already got this set up on

are up to date down here we don't need to go through that because I've already got this set up on my own computer however I do want to say that we're using a jupiter notebook and as you can see jupiter notebooks are a nice way to convey combined text with code and so here is some code this is where we're importing the modules or importing pandas to load and manipulate the data and we're using it for one hot encoding there's also a numpy that we're gonna use for data manipulation we're importing

one hot encoding there's also a numpy that we're gonna use for data manipulation we're importing menthe mat plot Lib for graphs and making things look cool and we're also importing a lot of scikit-learn stuff to do support vector machines and do confusion matrices and whatnot now when you have a jupiter notebook the way you run the code is you click somewhere in that block of code and you can either click on this play button up here to run the code there's a run menu and you can say run

can either click on this play button up here to run the code there's a run menu and you can say run selected cells or on your computer there's a key combination on a Macintosh it's command or command enter or control enter on different computer systems it's different so just click the the run menu and it'll tell you what to do um so what I'm gonna do is I'm gonna click in this block of code and we're gonna run it and when you run it briefly you might have missed it there was a star there before

gonna run it and when you run it briefly you might have missed it there was a star there before it turned into a number one the star means that python is doing something and and at that time it was loading the modules and when it gives you a number that means it's done doing whatever it was doing so it loaded the modules pretty quickly okay now we're ready to import the data now we load the data set from the UCI machine learning repository specifically we are going to use the credit card

data set from the UCI machine learning repository specifically we are going to use the credit card default data set this data set will allow us to predict if someone will default on their credit card payments based on their sex age and a variety of other metrics note when pandas which is what we're going to use to read in the data when it reads in data it returns a data frame which is a lot like a spreadsheet the data are organized in rows and columns and each row can contain a mixture of text

a spreadsheet the data are organized in rows and columns and each row can contain a mixture of text and columns excuse me text and numbers the standard variable name for a data frame is the initials DF and that's what we're gonna use here and I've got two blocks of code here one is to read in the file that we're gonna use this is a file that will be included with a cheaper notebook so you don't have to download it or anything we're gonna be using read underscore Steve CSV to read it in the file

to download it or anything we're gonna be using read underscore Steve CSV to read it in the file has a header row so the very first row actually it's the second second row in the data set has the header information the first row has some other kind of nonsense and I don't actually remember what it was and it's tab delimited so we're setting this separator to the tab escape sequence however you can also read this directly from the UCI machine learning repository directly you don't have to

you can also read this directly from the UCI machine learning repository directly you don't have to download the file first um and this is commented out so we won't be running but when you play around the code later you can feel free to play with it yourself okay so we'll load in the data and there we are we've got a number here that means we ran the code and so now that we've loaded the data into a data frame called DF we're gonna look at the first five rows using the head function um let's

a data frame called DF we're gonna look at the first five rows using the head function um let's just run that so we've got D F dot head and that returns us the first five rows and we see that we have a bunch of columns for the variables collected for each customer the columns are ID that's just an ID number I'll limit balance is the is the is the credit limit for that customer sex is male or female education marriage age payment these these columns tell us whether or not the last payment was on

education marriage age payment these these columns tell us whether or not the last payment was on time or later or how late it was there's there's one column for different months of payments so so we found just one last month's payment its it goes back six months then we have the bill amounts for the last six months last six bills and how much was paid for the last six bills and then lastly we have default payment next month this is the variable that we're going to try to predict and here I've

default payment next month this is the variable that we're going to try to predict and here I've listed the column names as well but note the last column name this one default payment next month that is a mouthful so we're gonna change it to just be default um so did they default or not um and we do that by doing data frame don't rename and we pass in the column name that we want to change and then the name we want to change it to when we set access to columns um so we're specifying that we

then the name we want to change it to when we set access to columns um so we're specifying that we want to change a column name lastly we're saying we want to do it in place meaning we're gonna modify this data frame that we're not gonna I'll make a copy and then save it as a new variable and then what we're gonna do is we're going to print out the next the first five rows and we're going to verify that we rename the column correctly okay so we look over here and we see that the last column

that we rename the column correctly okay so we look over here and we see that the last column name is now default and that's great that's what we wanted the other thing is this is ID column these are just random numbers that were assigned to each customer and they're not informative so we're gonna drop it so we'll do that with D F dot drop and we're specifying the ID column again this is a column and we're gonna do this in place just like we did before and we're gonna print out the first five

and we're gonna do this in place just like we did before and we're gonna print out the first five rows to verify that we were moved the column and there it is like we've got ID up here and now we no longer have the ID so hooray we've cleaned up the columns a bit and now that we have the data in a data frame called DF we are ready to identify and deal with missing data unfortunately the biggest part of any data analysis project is making sure that the data are correctly formatted and fixing it

of any data analysis project is making sure that the data are correctly formatted and fixing it when it is not the first part of this process is identifying and dealing with missing data missing daily data is simply a blank space or a surrogate value like n/a that indicates that we failed to collect data for one of the features for example if you forgot to ask someone's age or forgot to write it down then we would have a blank space in the data set for that person's age there are two main ways

down then we would have a blank space in the data set for that person's age there are two main ways to deal with missing data we can remove the rows that contain missing data from the data set or we can impute the values that are missing and in this context impute is just a fancy way of saying we can make an educated guess about what that value should be so in this section we're gonna focus on identifying missing data in the data set first let's see it what sort of data is in each column to do

missing data in the data set first let's see it what sort of data is in each column to do that we've got our data frame and we're asking for the data type so we're going to check out the data types with the d-types command and when we run that code we see that every column is inte 64 which is good or at least it looks good because it doesn't tell us off the bat that the person mixed letters and numbers um in other words there are no na values and that suggests that maybe things are in good

numbers um in other words there are no na values and that suggests that maybe things are in good hands and because they didn't use character based placeholders for missing data and data frame that's just that said we should still make sure that each column contains acceptable values the list below describes what are allowed in each column and was based on the column descriptions in credit card in the on the credit card default web page so the limit balance of the credit balance or credit limit

the on the credit card default web page so the limit balance of the credit balance or credit limit excuse me is the amount available available credit and that's an integer sex is a category we have one for male and two for female education is also a category we've got four categories for that graduate school is 1/2 equals University 3 is high school and 4 as others marriage is also a category we have one for married to for single and three for other ages and integer pay this is the these are a

have one for married to for single and three for other ages and integer pay this is the these are a series of columns that tell us when the last six bills were paid negative one means on time and then we have how much after that we've got how much it's been delayed we've got bill amount pay amount and default which is a binary column that has zero for did not default and one for defaulted so we're gonna start by making sure sex only contains numbers 1 & 2 and we do that with our data frame and

gonna start by making sure sex only contains numbers 1 & 2 and we do that with our data frame and in square brackets we specify that we want to look at the column named sex and we've got that in single quotes and we're what we want to do is we want to look at the unique values in that column and we do that with the unique function so let's run that and we see that the unique values in this column named sex are 2 & 1 so BAM it does um now we're going to look at education to make sure it only

named sex are 2 & 1 so BAM it does um now we're going to look at education to make sure it only contains 1 & 2 3 & 4 so we do the exact same thing we did before only we swapped sex with education when we run that we see that for reasons unknown in addition to the allowed numbers 1 2 3 & 4 education also contains 0 5 & 6 it is possible that 0 represents missing data and 5 & 6 represent categories not mentioned in the original specification but that's just a guess oh now we're going to look at

not mentioned in the original specification but that's just a guess oh now we're going to look at marriage and make sure it only contains 1 2 & 3 so we do that the exact same code as before only this time we're specifying the column named marriage and like education marriage contains 0 which I'm guessing represents missing data now note this data set is part of an academic publication that is not open access it's owned by a company called Elsevier so in theory I could pay Elsevier a lot of

not open access it's owned by a company called Elsevier so in theory I could pay Elsevier a lot of money to get the article and find out if 0 represents missing data or not there's a good chance that the author's even didn't even mention in the article so there's a good chance that even if I paid a lot of money for the article I still wouldn't know and because this is just a demo I'm not gonna worry too much about being correct and instead we're just gonna see what happens when we treat 0 as

worry too much about being correct and instead we're just gonna see what happens when we treat 0 as missing data and I will give you I will say this I tried it both ways and the support vector classifier performs better when we treat zero as missing data so I at least tried it both ways and and I said well since it works better this way we'll just assume that that means missing data since scikit-learn support vector machines do not support datasets with missing values we need to figure out what

support vector machines do not support datasets with missing values we need to figure out what to do with the zeros and the data set we can either delete these columns from the training data set or impute values for the missing data first let's see how many rows contain missing values we do that by using the Lok or location function that is associated with our data frame and what you do is you specify a sort of a logical statement that if it's true it'll return [Music] of those those specific

a sort of a logical statement that if it's true it'll return [Music] of those those specific rows that were interested and were over what we're interested in if we're interested in finding rows that have zero in the education column or and that's a logical or and an old-school computer language talk we call that a pipe the pipe character but it's a logical or so we want to eat so we want all of them we want we want all the lines in the data set where there's a zero in the education column or or

we want we want all the lines in the data set where there's a zero in the education column or or there's a zero in the marriage column and we wrapped all of this up in the Len function which is short for length and so we're gonna count the number of rows that have zeros in those columns and when we run that we see that there are 68 rows that have missing values so now we're gonna count the total number of rows in the data set and we're gonna use that Len or length function just like we did

number of rows in the data set and we're gonna use that Len or length function just like we did before only this time we're not specifying which rows we want and when we don't specify specific rows we'd get them all and we see that there are 30,000 rows in the data set to begin with and so 68 of the 30,000 rows or less than one percent contain missing values since that still leaves us with more data than we need for a support vector machine we will remove the rows with missing values rather

data than we need for a support vector machine we will remove the rows with missing values rather than try to impute their values and like I said we're gonna try to do imputing imputation in a future webinar hopefully in two months so the way we do this we select all the roads that do not contain zero in either education or marriage and the way I said that was a little awkward because we're actually going to use an and a logical and in this statement so just like before we're getting all the

going to use an and a logical and in this statement so just like before we're getting all the rows we're using this loke function to get the rows that where this logical statement is true and what we want are rows that do not have 0 in education and do not have 0 in marriage and we're gonna save all those rows that don't have zeros in education and ah and they don't have zeros in in marriage we're gonna save all those rows in a new data frame called data frame no missing all so we'll run that

gonna save all those rows in a new data frame called data frame no missing all so we'll run that and since data frame no missing has 68 fewer rows in the original data frame it should only have twenty nine thousand nine hundred thirty-two rows so we're gonna count the number of rows using that length function again and there we got it hooray the math works out however we can also make sure that education no longer contains zeros by printing out the unique values this is exactly what we did

education no longer contains zeros by printing out the unique values this is exactly what we did before however now we're specifying data frame no missing rather than just data frame the original data set and now we see that there's no zero there and when we do the same thing for marriage we print out the unique values for marriage now we just have one two and three so BAM we have verified the data frame no missing does not contain any missing values all right and we're ready to move on to the

frame no missing does not contain any missing values all right and we're ready to move on to the next section where we down sample the data set so like I've said support vector machines are great with small data sets they the the data set that we used for classification trees is relatively small and support vector machines do pretty well with that data set um however uh like I said they can take a long time with large data sets and this is relatively large so we're gonna down sample both

take a long time with large data sets and this is relatively large so we're gonna down sample both categories customers who did not default and customers that did down to a thousand each so first thing we're gonna do is we'll remind ourselves how many rows of data were working with because we remove some of them so we use the length function again and that tells us we've got twenty nine thousand nine hundred and thirty-two samples that's relatively large so we're going to down sock down sample

nine hundred and thirty-two samples that's relatively large so we're going to down sock down sample it to a thousand of each category so the way we do that is we've created this we've already have this data frame called data frame no missing and we're specifying we want all the rows where the someone did not defaults a default is zero and we're gonna store that in a new variable called DF no default and then we're doing the same thing for the people that default it we're storing them in another

and then we're doing the same thing for the people that default it we're storing them in another data frame so we're splitting the data into two variables here one for people that default it and one for people that did not default and now what we're doing is we're down sampling the people that did not default we're using the resampled function and we're passing it the the data frame that consists of people that did not default we're setting replace to false so that means when we pull something

of people that did not default we're setting replace to false so that means when we pull something out of there we don't and we put it in our new data frame we don't put that back in the pool of possible people that we could select again and we're saying that we want a thousand samples and we're setting the random state to 42 that's a random seed and all that does is make sure that you get the same answer that I get all and then what we're gonna do is we're gonna print out the length of this

same answer that I get all and then what we're gonna do is we're gonna print out the length of this new data frame that we're creating data frame no dough no default downsampled so let's run that oh no I got there too early I didn't split the data set and a half so yeah so when you see this pink that means there that means something went wrong and instead of feeling great shame what you got to do is just got a default Deebo debug it and so let's rerun this again because before the first time I

is just got a default Deebo debug it and so let's rerun this again because before the first time I ran it I hadn't run this chunk of code first and so this data frame no default this guy did not exist but now it exists so let's see what happens and it runs and tells us we've got a thousand rows and our new data frame data frame no default downsampled now we're gonna do the exact same thing but this time we're using the people that defaulted and we're going to print out the number of rows there

time we're using the people that defaulted and we're going to print out the number of rows there and there so we've got two new variables each containing a thousand rows each and now what we want to do is we want to merge them back into a single data frame and print out the total number of rows to make sure everything is hunky-dory to merge the two data frames that were created we're using this pandas function called concat which will concatenate the two two things so there we go BAM mm so now

function called concat which will concatenate the two two things so there we go BAM mm so now that we've taken care of the missing data we are ready to start formatting the data for making a support vector machine the first step is to split the data into two parts we're gonna have one part that contains the columns of data that we will use to make classifications and one part is going to be a column of data that contains the things we want to predict so we're gonna use the conventional notation

of data that contains the things we want to predict so we're gonna use the conventional notation of capital X to represent the columns of data that we will use to make classifications and we're gonna use lowercase Y to represent the thing we want to predict in this case we want to predict default whether or not someone defaulted on their payments um so here's how we're going to do that we've got our down sample data set and what we're doing is we're gonna drop the default column and we're going

down sample data set and what we're doing is we're gonna drop the default column and we're going to copy that we're gonna store that into uppercase X and that's gonna be our set of columns that we're going to use to make predictions and then we're gonna print out the first five rows so let's do that BAM okay you'll notice we scroll over to the right we no longer have that column called default so this data set does not contain the thing we want to predict now here or we're going back or going

this data set does not contain the thing we want to predict now here or we're going back or going back to that date data frame that contains the down sampled samples ah and now we're just specifying that one column default and we're making a copy of it and we're storing it in a new variable called Y and then we're gonna print out the first five rows BAM okay now we've created uppercase X which is the data we're going to use to make predictions and lowercase Y which has the data we want to

is the data we're going to use to make predictions and lowercase Y which has the data we want to predict we are ready to continue formatting x over here so that it's suitable for making a support vector machine oh okay so now we're on to one hot encoding now we have to split the data frame into two pieces uppercase X which contains okay we've already done this we've split things up now what we need to do is take a look at the variables in X and this list tells us whether the variables supposed

to do is take a look at the variables in X and this list tells us whether the variables supposed to be an integer or a category so we see limit balance is an integer that's the credit limit sex is a category that's male or one for male two for female education has a bunch of categories 1 2 3 & 4 we've already talked about these okay so it looks like sex education marriage and pay are supposed to be categorical and they need to be modified this is because scikit-learn support vector machine

to be categorical and they need to be modified this is because scikit-learn support vector machine support vector machines while they natively support continuous data like limit balance and age they do not natively support categorical data like marriage which contains three different categories thus in order to use the categorical data with scikit-learn support vector machines we have to use a trick that converts the column of categorical data into multiple columns of binary values and this

trick that converts the column of categorical data into multiple columns of binary values and this trick is called one hot encoding um so at this point you may be wondering what's wrong with treating categorical data like it's continuous so to answer that question let's look at an example for the marriage columns we have three options one married to single and three other if we treated those values one two and three like continuous data then we would assume that three which means other is more

one two and three like continuous data then we would assume that three which means other is more similar to two which means single than it is to 1 which means married and that means the support vector machine would be more likely to cluster people with threes and twos together than people with 3s and ones together and in contrast if we treat these numbers like categorical data then we will treat each one as a separate category that is no more or less similar to any of the other categories thus

each one as a separate category that is no more or less similar to any of the other categories thus the likelihood of clustering people with twos and threes is the same as clustering threes and ones and that approach is more reasonable note I have a huge treatise on different ways to do one hot encoding there's two very common ways to do it there's a there's a function called column transformer from scikit-learn and there's a function called get dummies from pandas because I believe that get

from scikit-learn and there's a function called get dummies from pandas because I believe that get dummies is bed it better for teaching how one hot and coding works we're gonna use it however just know there's alternatives and you should definitely read this description at your leisure to learn about the pros and cons of these two different approaches okay first before we commit to converting columns with one hot and coding I just want to show you what happens when we convert marriage without

with one hot and coding I just want to show you what happens when we convert marriage without saving the results so to make this easy to see we're gonna use get dummies get dummies as a Panda function and so we pass it X capital X that's the columns that we want to transform and we specify the columns that we want to transform for this demonstration we're just gonna transform marriage and then we're gonna print out the first five rows to see what it did okay scroll over here and you'll see that

gonna print out the first five rows to see what it did okay scroll over here and you'll see that on the left side of the data frame are the columns that we did not touch and on the right side we've got three columns for marriage we used to just have one that contained three values now we have three columns and each one contains a 0 and a 1 1 in this column marriage 1 there's a 1 if there was a 1 in the original marriage column there and a 0 otherwise for marriage - there's a 0 if where there's

in the original marriage column there and a 0 otherwise for marriage - there's a 0 if where there's a 1 if they originally had a a 2 in the marriage column and a 0 otherwise and marriage 3 is 1 if they originally had a 3 in the original column zero otherwise so that is how one hot encoding works okay now we're gonna do it for all of the categorical um columns and then we're gonna print out the first five rows just to see what it looks like alright so here is our new data frame we've got a dot

five rows just to see what it looks like alright so here is our new data frame we've got a dot dot dot specifying that some columns are not shown but you see that hey these columns have all been converted into new columns so double bam the last part of formatting the data for a support vector machine is to Center and scale the data um the radial basis function that we're going to use assumes that the data are centered in scale scaled so in other words each column should have a mean of 0 and a

the data are centered in scale scaled so in other words each column should have a mean of 0 and a standard deviation of 1 so what we're gonna do is first what we're gonna do is we're gonna split the data into training and test data sets so we're using train tests split again we're setting the random state so that you could reproduce what I've got we're passing it in X encoded that's the one haunted coded X these columns over here that are that are gonna make the predictions and we're passing em

coded X these columns over here that are that are gonna make the predictions and we're passing em Y that's the thing we want to predict and we're creating X train X test Y train and why test I believe the default setting is for 70% of the data to go into the training data set and 30% to go into testing don't quote me on that I just believe that's the case after we do that we are scaling the data sets using the scale function now right long um now we're gonna talk about building a preliminary

sets using the scale function now right long um now we're gonna talk about building a preliminary support vector machine um we've done a lot of stuff we've almost been a whole hour just formatting data and now we're finally getting to the good part the way we do that is we call SVC for support vector classifier we set the random state to 42 and what this does is it kind of makes an untrained shell of a support vector classifier the next step and we're saving that shell as classifier underscore

of a support vector classifier the next step and we're saving that shell as classifier underscore support vector machine the next step is to call fit using that shell and so what we're doing is we're fitting it or we're training it on the training data so we've got X train scale and y train oh and we know we don't scale y train because that's just 0 on one and my brain was left my head for a second so anyway so that's correct and we run it and it just prints out the support vector classifier

so anyway so that's correct and we run it and it just prints out the support vector classifier plus the default settings that it has and now that we've trained the classifier we can see how it performs with confusion matrix and we're going to use the test data set we're passing in we're using plot confusion matrix for PLAs passing in our trained support vector machine and we're passing in the test X data set and a test Y and below we're just formatting it so it looks pretty so here is our class

X data set and a test Y and below we're just formatting it so it looks pretty so here is our class here's our confusion matrix it did all right it did not do great of the 257 people that did not default 79 percent were correctly classified of the 243 people in this row that defaulted 61% were correctly classified so the support vector machine was not awesome so we're going to try to improve that using cross-validation to optimize the parameters to optimize the parameters we're gonna use grid

using cross-validation to optimize the parameters to optimize the parameters we're gonna use grid search cross-validation or grid search CV and when we optimize a support vector machine it's all about finding the best value for gamma and potentially the regularization parameter C so what we're gonna do is when we use grid search CV we specify the parameters that we want to try in this you know in a matrix um and so we've got this is the parameter C which is the regularization parameter and

in a matrix um and so we've got this is the parameter C which is the regularization parameter and we're gonna try these values um note the regularization parameter Scott to be greater than zero oh and there's gamma and these are the values were specifying for gamma in theory we could try other kernels if we wanted to and specify those as well that ends up taking a long time so we're just gonna stick with the radial basis function typically it gives us the best performance okay so then we run

stick with the radial basis function typically it gives us the best performance okay so then we run grid search C V and we pass in the shell of a support vector classifier we pass in the parameters the C V is the number of folds of Kraft cross-validation we want to do then we pass in the scoring metric that we want to use there are lots of options and I tried a bunch of them and true to its word support vector machines tend to be good out of the box and I was trying to find a metric that would

support vector machines tend to be good out of the box and I was trying to find a metric that would give us huge improvements and I wasn't able to find one but you can uncomment these and try different metrics there's even more I'm using here um anyways um this Wilkin will return something we're saving in a variable called optimal parameters and then what we do is we run the cross-validation on the parameter values by running optimal values fit using the training data set and then we're going

the parameter values by running optimal values fit using the training data set and then we're going to print out the optimal best parameters so we'll do that this is gonna take a little long you'll see this a star here that means a Python is hard at work doing cross-validation for us when that turns into a number it'll print out the output down here and this is one of the reasons why we downscaled the dataset we went from 30,000 rows to just 2,000 and it still took a little bit of time I mean

the dataset we went from 30,000 rows to just 2,000 and it still took a little bit of time I mean we're not talking hours but it still took a little bit of time these are the optimal parameters by the way we're done running we've got a number here oh and we can see that the ideal value for C because that's a literation is 100 which means that we will use regularization and the ideal value for Gamma is 0.001 so now we're ready to build evaluate draw and interpret the final support vector machine

is 0.001 so now we're ready to build evaluate draw and interpret the final support vector machine so now we're doing exactly what we did before however this time we're specifying C equals 100 and gamma equals 0.001 and then we are so that creates the shell and then we train it using the training data so we'll run that BAM and now we're going to print out a new confusion matrix with our new support vector machine and we're going to run that and here is our all put and these are the results the

vector machine and we're going to run that and here is our all put and these are the results the optimized support vector machine and they are just a little bit better than before for more people or correctly classified as not defaulting however one person was incorrectly classified as defaulting so that mean depending on how you want it depending on whether or not it's more important classify these people or these people we may have improved or we may have slightly gotten worse but that just

people or these people we may have improved or we may have slightly gotten worse but that just tells you again that support vector machines are pretty good out of the box optimization didn't help us that much okay now we can actually draw what the decision boundary is um this is a pretty complicated procedure and at best it is an approximation of of what is really going on and we can quantify how good that approximation is various ways that we can quantify how good that approximation is going

good that approximation is various ways that we can quantify how good that approximation is going to be and we'll go over that really quickly the first thing we're gonna do though is we're gonna look at see how many columns in our our data set so we've got 24 columns in our data set and this is a problem because that means it would require a 24 dimensional graph um or maybe even more because we're using the radial basis function and that operates in infinite dimensions and since we can't draw

using the radial basis function and that operates in infinite dimensions and since we can't draw an infinite dimension we have to do data we have to collapse the data into two dimensions so we can draw a picture of that we're gonna use principle component analysis to do that and if you don't know what principal component analysis is right now just know that what we're doing is we're taking those 24 columns and we're gonna shrink them down to two um and then so this is the code for doing that

24 columns and we're gonna shrink them down to two um and then so this is the code for doing that and we're also gonna plot what's called a scree plot and this scree plot tells us how good this approximation of the true classifier is the what we would like is for the first two principal components the first two columns here to be much taller than all the rest and that means that those first two components can be or those those two columns that we're going to use for our new data set would

two components can be or those those two columns that we're going to use for our new data set would accurately reflect the original data in this case we don't see that what we see is that the first principal component the first column is is stands on its own that's good that's what we want however the second one is just barely taller than the others and that's not good and that tells us that this approximation is not going to be great um that said I'm also including in this in the in the email

approximation is not going to be great um that said I'm also including in this in the in the email I'm going to send out you're going to be able to download how to do support vector machines with this different this with this heart date heart disease data set and in that case the image is better and actually classification in general is better so it's so baked sure you run through both of these because you'll get different results and you'll see then that how to decide when it's going to be a

because you'll get different results and you'll see then that how to decide when it's going to be a good sort of collapsing of data and when it's not um the next data is pretty complicated next data code chunk however just know that what we're doing is we're retraining and re optimizing a support vector machine on just those two columns that we collapse the data down to we run that this we're doing cross-validation so this is gonna take a minute or two um and while this is running I will

doing cross-validation so this is gonna take a minute or two um and while this is running I will address this going question yes we are recording this as a video and I'll put it online and you'll be able to access this later on it your leisure and I'll email you the link okay so it's done running we've got optimal grammars notice we've got different optimal parameters and before that's because we're actually using a different data set instead of all 24 columns we're just using two now and

we're actually using a different data set instead of all 24 columns we're just using two now and that's you know like I said we're approximating what we did with the 24 columns here this is when we're actually drawing that decision boundary lots of code but also very well commented so you can go through this at your leisure right right now we're just gonna run it really quickly and we're going to look at our picture and here it is kind of a mess but kind of what we expected because the first

to look at our picture and here it is kind of a mess but kind of what we expected because the first two principal components which form the x and y axis of this graph don't do a great job capturing sort of all the variation that's in the data and we knew that going into this so when we get it kind of a messy thing it's what it is okay so BAM the pink part of this graph represents the decision area where we if someone falls in there would classify them as not defaulted the yellow part is where

where we if someone falls in there would classify them as not defaulted the yellow part is where we'll classify people as defaulted red dots are from the training data set that are known to have defaulted so this person is known to be defaulted they landed there the green dots are people that are Oh red is no default and yes as default anyways that's how to interpret this graph you can read more about it here okay so in conclusion we've loaded data from a data file identified and dealt with

about it here okay so in conclusion we've loaded data from a data file identified and dealt with missing data we down sampled the data we formatted the data for a support vector machine using one hot encoding we built a support vector machine for classification we optimize the support vector machine using cross-validation we mainly built drew interpreted and evaluated the final support vector machine and that gives us a triple BAM hooray we've made it to the end

Neural networks... seem so complicated, but they're not! StatQuest! Hello! I'm Josh Starmer and welcome to StatQuest! Today, we're going to talk about neural networks, part one: inside the black box! Neural networks, one of the most popular algorithms in machine learning, cover a broad range of concepts and techniques. however, people call them a black box because it can be hard to understand what they're doing. the goal of this series is to take a peek into the black box by breaking down each

they're doing. the goal of this series is to take a peek into the black box by breaking down each concept and technique into its components and walking through how they fit together, step by step. in this first part, we will learn about what neural networks do, and how they do it. in part two, we'll talk about how neural networks are fit to data with backpropagation. then, we will talk about variations on the simple neural network presented in this part, including deep learning. note: crazy

on the simple neural network presented in this part, including deep learning. note: crazy awesome news! i have a new way to think about neural networks that will help beginners and seasoned experts alike gain a deep insight into what neural networks do. for example, most tutorials use cool looking, but hard to understand graphs, and fancy mathematical notation to represent neural networks. in contrast, i'm going to label every little thing on the neural network to make it easy to keep track of

i'm going to label every little thing on the neural network to make it easy to keep track of the details. and the math will be as simple as possible, while still being true to the algorithm. these differences will help you develop a deep understanding of what neural networks actually do. so, with that said, let's imagine we tested a drug that was designed to treat an illness and we gave the drug to three different groups of people, with three different dosages: low, medium, and high. the low

to three different groups of people, with three different dosages: low, medium, and high. the low dosages were not effective so we set them to zero on this graph. in contrast, the medium dosages were effective so we set them to one. and the high dosages were not effective, so those are set to zero. now that we have this data, we would like to use it to predict whether or not a future dosage will be effective. however we can't just fit a straight line to the data to make predictions, because no

be effective. however we can't just fit a straight line to the data to make predictions, because no matter how we rotate the straight line, it can only accurately predict two of the three dosages. the good news is that a neural network can fit a squiggle to the data. the green squiggle is close to zero for low dosages, close to one for medium dosages, and close to zero for high dosages. and even if we have a really complicated dataset like this, a neural network can fit a squiggle to it. in

if we have a really complicated dataset like this, a neural network can fit a squiggle to it. in this StatQuest we're going to use this super simple dataset and show how this neural network creates this green squiggle. but first, let's just talk about what a neural network is. a neural network consists of nodes and connections between the nodes. note: the numbers along each connection represent parameter values that were estimated when this neural network was fit to the data. for now, just know

values that were estimated when this neural network was fit to the data. for now, just know that these parameter estimates are analogous to the slope and intercept values that we solve for when we fit a straight line to data. likewise, a neural network starts out with unknown parameter values that are estimated when we fit the neural network to a dataset using a method called backpropagation. and we will talk about how backpropagation estimates these parameters in part 2 in this series. but,

we will talk about how backpropagation estimates these parameters in part 2 in this series. but, for now, just assume that we've already fit this neural network to this specific dataset, and that means we have already estimated these parameters. also, you may have noticed that some of the nodes have curved lines inside of them. these bent or curved lines are the building blocks for fitting a squiggle to data. the goal of this StatQuest is to show you how these identical curves can be reshaped

to data. the goal of this StatQuest is to show you how these identical curves can be reshaped by the parameter values and then added together to get a green squiggle that fits the data. note: there are many common bent or curved lines that we can choose for a neural network. this specific curved line is called soft plus, which sounds like a brand of toilet paper. alternatively, we could use this bent line, called ReLU, which is short for rectified linear unit, and sounds like a robot. or, we

bent line, called ReLU, which is short for rectified linear unit, and sounds like a robot. or, we could use a sigmoid shape, or any other bent or curved line. oh no! it's the dreaded terminology alert! the curved or bent lines are called activation functions. when you build a neural network you have to decide which activation function, or functions, you want to use. when most people teach neural networks they use the sigmoid activation function. however, in practice, it is much more common to

networks they use the sigmoid activation function. however, in practice, it is much more common to use the ReLU activation function, or the soft plus activation function. so we'll use the soft plus activation function in this StatQuest. anyway, we'll talk more about how you choose activation functions later in this series. note: this specific neural network is about as simple as they get. it only has one input node, where we plug in the dosage, only one output node to tell us the predicted

only has one input node, where we plug in the dosage, only one output node to tell us the predicted effectiveness, and only two nodes between the input and output nodes. however, in practice, neural networks are usually much fancier and have more than one input node, more than one output node, different layers of nodes between the input and output nodes, and a spider web of connections between each layer of nodes. oh no! it's another terminology alert! these layers of nodes between the input

each layer of nodes. oh no! it's another terminology alert! these layers of nodes between the input and output nodes are called hidden layers. when you build a neural network one of the first things you do is decide how many hidden layers you want and how many nodes go into each hidden layer. although there are rules of thumb for making decisions about the hidden layers, you essentially make a guess and see how well the neural network performs, adding more layers and nodes if needed. now, even

and see how well the neural network performs, adding more layers and nodes if needed. now, even though this neural network looks fancy, it is still made from the same parts used in this simple neural network, which has only one hidden layer with two nodes. so let's learn how this neural network creates new shapes from the curved or bent lines in the hidden layer, and then adds them together to get a green squiggle that fits the data. note: to keep the math simple, let's assume dosages go from

a green squiggle that fits the data. note: to keep the math simple, let's assume dosages go from zero, for low, to one, for high. the first thing we are going to do is plug the lowest dosage, zero, into the neural network. now, to get from the input node to the top node in the hidden layer, this connection multiplies the dosage by negative 34.4 and then adds 2.14, and the result is an x-axis coordinate for the activation function. for example, the lowest dosage 0 is multiplied by negative 34.4,

for the activation function. for example, the lowest dosage 0 is multiplied by negative 34.4, and then we add 2.14, to get 2.14 as the x-axis coordinate for the activation function. to get the corresponding y-axis value we plug 2.14 into the activation function, which in this case is the soft plus function. note: if we had chosen the sigmoid curve for the activation function then we would plug 2.14 into the equation for the sigmoid curve. and if we had chosen the ReLU bent line for the

plug 2.14 into the equation for the sigmoid curve. and if we had chosen the ReLU bent line for the activation function, then we would plug 2.14 into the ReLU equation. but, since we are using soft plus for the activation function, we plug 2.14 into the soft plus equation. and the log of one plus e raised to the 2.14 power is 2.25. note: in statistics, machine learning, and most programming languages, the log function implies the natural log, or the log base e. anyway, the y-axis coordinate for

the log function implies the natural log, or the log base e. anyway, the y-axis coordinate for the activation function is 2.25, so let's extend this y-axis up a little bit and put a blue dot at 2.25 for when dosage equals zero. now, if we increase the dosage a little bit and plug 0.1 into the input, the x-axis coordinate for the activation function is negative 1.3, and the corresponding y-axis value is 0.24. so, let's put a blue dot at 0.24 for when dosage equals 0.1. and, if we continue to

value is 0.24. so, let's put a blue dot at 0.24 for when dosage equals 0.1. and, if we continue to increase the dosage values all the way to 1, the maximum dosage, we get this blue curve. note: before we move on I want to point out that the full range of dosage values, from 0 to 1, corresponds to this relatively narrow range of values from the activation function. in other words, when we plug dosage values, from 0 to 1, into the neural network, and then multiply them by negative 34.4 and add

values, from 0 to 1, into the neural network, and then multiply them by negative 34.4 and add 2.14, we only get x-axis coordinates that are within the red box. and thus, only the corresponding y-axis values in the red box are used to make this new blue curve. bam! now we scale the y-axis values for the blue curve by negative 1.3. for example, when dosage equals zero the current y-axis coordinate for the blue curve is 2.25, so we multiply 2.25 by negative 1.3 and get negative 2.93. and negative

for the blue curve is 2.25, so we multiply 2.25 by negative 1.3 and get negative 2.93. and negative 2.93 corresponds to this position on the y-axis. likewise, we multiply all of the other y-axis coordinates on the blue curve by negative 1.3 and we end up with a new blue curve. bam! now, let's focus on the connection from the input node, to the bottom node in the hidden layer. however, this time, we multiply the dosage by negative 2.52, instead of negative 34.4, and we add 1.29, instead of 2.14,

multiply the dosage by negative 2.52, instead of negative 34.4, and we add 1.29, instead of 2.14, to get the x-axis coordinate for the activation function. remember, these values come from fitting the neural network to the data with backpropagation, and we'll talk about that in part two in this series. now, if we plug the lowest dosage, zero, into the neural network, then the x-axis coordinate for the activation function is 1.29. now we plug 1.29 into the activation function to get the

for the activation function is 1.29. now we plug 1.29 into the activation function to get the corresponding y-axis value, and get 1.53. and that corresponds to this yellow dot. now, we just plug in dosage values from 0 to 1 to get the corresponding y-axis values, and we get this orange curve. note: just like before, i want to point out that the full range of dosage values, from 0 to 1, corresponds to this narrow range of values from the activation function. in other words, when we plug dosage

to this narrow range of values from the activation function. in other words, when we plug dosage values from 0 to 1 into the neural network we only get x-axis coordinates that are within the red box. and thus, only the corresponding y-axis values in the red box are used to make this new orange curve. so we see that fitting a neural network to data gives us different parameter estimates on the connections and that results in each node in the hidden layer using different portions of the

the connections and that results in each node in the hidden layer using different portions of the activation functions to create these new and exciting shapes. now, just like before, we scale the y-axis coordinates on the orange curve, only this time we scale by a positive number: 2.28. beep boop beep! for every number written on the screen] and that gives us this new orange curve. now the neural network tells us to add the y-axis coordinates from the blue curve to the orange curve, and that

network tells us to add the y-axis coordinates from the blue curve to the orange curve, and that gives us this green squiggle. then, finally, we subtract 0.58 from the y-axis values on the green squiggle, and we have a green squiggle that fits the data. bam! now, if someone comes along and says that they are using dosage equal to 0.5 we can look at the corresponding y-axis coordinate on the green squiggle and see that the dosage will be effective. or, we can solve for the y-axis coordinate by

squiggle and see that the dosage will be effective. or, we can solve for the y-axis coordinate by plugging dosage equals 0.5 into the neural network, and do the math. [Music] and we see that the y-axis coordinate on the green squiggle is 1.03, and since 1.03 is closer to 1 than 0, we will conclude that a dosage equal to 0.5 is effective. double bam! now, if you've made it this far you may be wondering why this is called a neural network. instead of a big fancy squiggle fitting machine. the

wondering why this is called a neural network. instead of a big fancy squiggle fitting machine. the reason is that way back in the 1940s and 50s, when neural networks were invented, they thought the nodes were vaguely like neurons, and the connections between the nodes were sort of like synapses. however, i think they should be called big fancy squiggle fitting machines, because that's what they do. note: whether or not you call it a squiggle fitting machine, the parameters that we multiply are

note: whether or not you call it a squiggle fitting machine, the parameters that we multiply are called weights, and the parameters that we add are called biases. note: this neural network starts with two identical activation functions, but the weights and biases on the connections slice them, flip them, and stretch them into new shapes, which are then added together to get a squiggle that is entirely new. and then the squiggle is shifted to fit the data. now, if we can create this green

is entirely new. and then the squiggle is shifted to fit the data. now, if we can create this green squiggle with just two nodes in a single hidden layer, just imagine what types of green squiggles we could fit with more hidden layers and more nodes in each hidden layer. in theory, neural networks can fit a green squiggle to just about any dataset, no matter how complicated, and i think that's pretty cool. triple bam! now it's time for some shameless self-promotion! if you want to review

pretty cool. triple bam! now it's time for some shameless self-promotion! if you want to review statistics and machine learning offline check out the StatQuest study guides at statquest.org. there's something for everyone. hooray! we've made it to the end of another exciting StatQuest. if you like this StatQuest and want to see more, please subscribe. and if you want to support StatQuest consider contributing to my patreon campaign, becoming a channel member, buying one or two of my original

contributing to my patreon campaign, becoming a channel member, buying one or two of my original songs, or a t-shirt, or a hoodie, or just donate. the links are in the description below. alright, until next time. quest on!

Backpropagation is a really big word, but it's not a really big deal. StatQuest! Hello! I'm Josh Starmer and welcome to StatQuest! Today we're going to talk about Neural Networks, Part 2: Backpropagation Main Ideas. Note: this StatQuest assumes that you are already familiar with neural networks, the chain rule, and gradient descent.  If not, check out the quests.  The links are in the description below. In the StatQuest on Neural Networks Part 1, Inside the Black Box, we started with a simple

below. In the StatQuest on Neural Networks Part 1, Inside the Black Box, we started with a simple dataset that showed whether or not different drug dosages were effective against a virus. The low and high dosages were not effective, but the medium dosage was effective. Then we talked about how a neural network like this one fits a green squiggle to this data set. Remember, the neural network starts with identical activation functions, but, using different weights and biases on the connections,

with identical activation functions, but, using different weights and biases on the connections, it flips and stretches the activation functions into new shapes, which are then added together to get a squiggle that is shifted to fit the data. However, we did not talk about how to estimate the weights and biases. So let's talk about how backpropagation optimizes the weights and biases in this, and other, neural networks. Note: backpropagation is relatively simple, but there are a ton of details,

other, neural networks. Note: backpropagation is relatively simple, but there are a ton of details, so I split it up into bite-sized pieces. In this part we talk about the main ideas of backpropagation. One: using the chain rule to calculate derivatives, and Two: plugging the derivatives into gradient descent to optimize parameters. In the next part we'll talk about how the chain rule and gradient descent apply to multiple parameters simultaneously, and introduce some fancy notation. Then we

descent apply to multiple parameters simultaneously, and introduce some fancy notation. Then we will go completely bonkers with the chain rule and show how to optimize all seven parameters simultaneously in this neural network. Bam! First, so we can be clear about which specific weights we are talking about, let's give each one a name: we have w1, w2, w3, and w4. And let's name each bias: b1, b2, and b3. Note: conceptually, backpropagation starts with the last parameter and works its way

b2, and b3. Note: conceptually, backpropagation starts with the last parameter and works its way backwards to estimate all of the other parameters. However, we can discuss all of the main ideas behind a backpropagation by just estimating the last bias, b3. So, in order to start from the back, let's assume that we already have optimal values for all of the parameters except for the last bias term, b3. Note: throughout this, and the next StatQuests, I'll make the parameter values that have

term, b3. Note: throughout this, and the next StatQuests, I'll make the parameter values that have already been optimized green, and unoptimized parameters will be red. Also, note: to keep the math simple, let's assume dosages go from 0, for low, to 1, for high. Now, if we run dosages from 0 to 1 through the connection to the top node in the hidden layer, then we get the x-axis coordinates for the activation function, that are all inside this red box and when we plug the x-axis coordinates into

activation function, that are all inside this red box and when we plug the x-axis coordinates into the activation function which, in this example, is the soft plus activation function, we get the corresponding y-axis coordinates, and this blue curve. Then we multiply the y-axis coordinates on the blue curve by negative 1.22 and we get the final blue curve. Bam! Now, if we run dosages from zero to one through the connection to the bottom node in the hidden layer, then we get x-axis coordinates

one through the connection to the bottom node in the hidden layer, then we get x-axis coordinates inside this red box. Now we plug those x-axis coordinates into the activation function to get the corresponding y-axis coordinates for this orange curve. Now we multiply the y-axis coordinates on the orange curve by negative 2.3 and we end up with this final orange curve. Bam! Now we add the blue and orange curves together to get this green squiggle. Now we are ready to add the final bias, b3, to

orange curves together to get this green squiggle. Now we are ready to add the final bias, b3, to the green squiggle. Because we don't yet know the optimal value for b3, we have to give it an initial value, and because bias terms are frequently initialized to 0, we will set b3 equal to 0. Now, adding zero to all of the y-axis coordinates on the green squiggle leaves it right where it is. However, that means the green squiggle is pretty far from the data that we observed. We can quantify how

that means the green squiggle is pretty far from the data that we observed. We can quantify how good the green squiggle fits the data by calculating the sum of the squared residuals. A residual is the difference between the observed and predicted values. For example, this residual is the observed value, zero, minus the predicted value from the green squiggle, negative 2.6. This residual is the observed value, one, minus the predicted value from the green squiggle, negative 1.61. Lastly, this

observed value, one, minus the predicted value from the green squiggle, negative 1.61. Lastly, this residual is the observed value, 0, minus the predicted value from the green squiggle, negative 2.61. Now we square each residual and add them all together to get 20.4 for the sum of the squared residuals. So when b3 equals 0, the sum of the squared residuals equals 20.4. And that corresponds to this location on this graph that has the sum of the squared residuals on the y -axis and the bias, b3,

location on this graph that has the sum of the squared residuals on the y -axis and the bias, b3, on the x-axis. Now, if we increase b3 to 1, then we would add one to the y-axis coordinates on the green squiggle and shift the green squiggle up one. And we end up with shorter residuals. When we do the math, the sum of the squared residuals equals 7.8, and that corresponds to this point on our graph. If we increase b3 to 2, then the sum of the squared residuals equals 1.11. And if we increase b3

If we increase b3 to 2, then the sum of the squared residuals equals 1.11. And if we increase b3 to 3, then the sum of the squared residuals equals 0.46. And if we had time to plug in tons of values for b3, we would get this pink curve, and we could find the lowest point, which corresponds to the value for b3 that results in the lowest sum of the squared residuals, here. However, instead of plugging in tons of values to find the lowest point in the pink curve, we use gradient descent to find it

in tons of values to find the lowest point in the pink curve, we use gradient descent to find it relatively quickly. And that means we need to find the derivative of the sum of the squared residuals with respect to b3. Now, remember the sum of the squared residuals equals the first residual squared, plus all of the other squared residuals. Now, because this equation takes up a lot of space, we can make it smaller by using summation notation. The greek symbol sigma tells us to sum things

we can make it smaller by using summation notation. The greek symbol sigma tells us to sum things together, and 'i' is an index for the observed and predicted values that starts at one. And the index goes from one to the number of values, 'n', which in this case is set to 3. So, when 'i' equals one, we're talking about the first residual. When 'i' equals two, we're talking about the second residual. And when 'i' equals three, we are talking about the third residual. Now let's talk a little bit

And when 'i' equals three, we are talking about the third residual. Now let's talk a little bit more about the predicted values. Each predicted value comes from the green squiggle, and the green squiggle comes from the last part of the neural network. In other words, the green squiggle is the sum of the blue and orange curves, plus b3. Now remember, we want to use gradient descent to optimize b3, and that means we need to take the derivative of the sum of the squared residuals with respect to

and that means we need to take the derivative of the sum of the squared residuals with respect to b3. And because the sum of the squared residuals are linked to b3 by the predicted values, we can use the chain rule to solve for the derivative of the sum of the squared residuals with respect to b3. The chain rule says that the derivative of the sum of the squared residuals with respect to b3 is the derivative of the sum of the squared residuals with respect to the predicted values, times the

the derivative of the sum of the squared residuals with respect to the predicted values, times the derivative of the predicted values with respect to b3. Now, before we calculate the derivative of the sum of the squared residuals with respect to the predicted values, let's clean up our workspace and move these equations out of the way. Now we can solve for the derivative of the sum of the squared residuals with respect to the predicted values by first substituting in the equation, and then use

residuals with respect to the predicted values by first substituting in the equation, and then use the chain rule to move the square to the front, and then we multiply that by the derivative of the stuff inside the parentheses with respect to the predicted values, negative one. Now we simplify by multiplying two by negative 1, and we have the derivative of the sum of the squared residuals with respect to the predicted values. So let's move that up here, and now we are done with the first part.

to the predicted values. So let's move that up here, and now we are done with the first part. Now let's solve for the second part: the derivative of the predicted values with respect to b3. We start by plugging in the equation for the predicted values. Remember, the blue and orange curves were created before we got to b3. So the derivative of the blue curve with respect to b3 is 0, because the blue curve is independent of b3. And the derivative of the orange curve with respect to b3 is also 0.

curve is independent of b3. And the derivative of the orange curve with respect to b3 is also 0. Lastly, the derivative of b3, with respect to b3, is 1. Now we just add everything up, and the derivative of the predicted values with respect to b3, is one. So we multiply the derivative of the sum of the squared residuals with respect to the predicted values by 1. Note: this times 1 part in the equation doesn't do anything, but I'm leaving it in to remind us that the derivative of the sum of the

doesn't do anything, but I'm leaving it in to remind us that the derivative of the sum of the squared residuals with respect to b3 consists of two parts: the derivative of the sum of the squared residuals with respect to the predicted values, and the derivative of the predicted values with respect to b3. Bam! And at long last we have the derivative of the sum of the squared residuals with respect to b3. And that means we can plug this derivative into gradient descent to find the optimal value

to b3. And that means we can plug this derivative into gradient descent to find the optimal value for b3. So let's move this equation up and show how we can use this equation with gradient descent. Note: if you're not familiar with gradient descent, check out the quest the link is in the description below. Anyway, first, we expand the summation. Then, we plug in the observed values and the values predicted by the green squiggle. Remember, we get the predicted values on the green squiggle by

predicted by the green squiggle. Remember, we get the predicted values on the green squiggle by running the dosages through the neural network. Now, we just do the math and get negative 15.7. And that corresponds to the slope for when b3 equals zero. Now we plug the slope into the gradient descent equation for step size, and, in this example, we'll set the learning rate to 0.1. And that means the step size is -1.57. Now we use the step size to calculate the new value for b3 by plugging in the

step size is -1.57. Now we use the step size to calculate the new value for b3 by plugging in the current value for b3, zero, and the step size, -1.57. And the new value for b3 is 1.57. Changing b3 to 1.57 shifts the green squiggle up, and that shrinks the residuals. Now, plugging in the new predicted values and doing the math gives us -6.26, which corresponds to the slope when b3 equals 1.57. Then, we calculate the step size and the new value for b3, which is 2.19. Changing b3 to 2.19 shifts

we calculate the step size and the new value for b3, which is 2.19. Changing b3 to 2.19 shifts the green squiggle up further, and that shrinks the residuals even more. Now we just keep taking steps until the step size is close to zero. And because the step size is close to 0 when b3 equals 2.61, we decide that 2.61 is the optimal value for b3. Double bam! So, the main ideas for backpropagation are that, when a parameter is unknown, like b3, we use the chain rule to calculate the derivative of

that, when a parameter is unknown, like b3, we use the chain rule to calculate the derivative of the sum of the squared residuals with respect to the unknown parameter, which in this case was b3. Then we initialize the unknown parameter with a number, and in this case we set b3 equal to zero, and used gradient descent to optimize the unknown parameter. Triple bam! In the next StatQuest we'll show how these ideas can be used to optimize all of the parameters in a neural network. Now it's time

how these ideas can be used to optimize all of the parameters in a neural network. Now it's time for some shameless self-promotion. If you want to review statistics and machine learning offline, check out the StatQuest study guides at statquest.org. There's something for everyone. Hooray! We've made it to the end of another exciting StatQuest. If you like this StatQuest and want to see more, please subscribe.  And if you want to support StatQuest, consider contributing to my patreon campaign,

subscribe.  And if you want to support StatQuest, consider contributing to my patreon campaign, becoming a channel member, buying one or two of my original songs, or a t-shirt or a hoodie, or just donate the links are in the description below.  Alright, until next time.  Quest on!

Backpropagation Details Pt. 1: Optimizing 3 parameters simultaneously.

the sun is out and it's nice outside it's the perfect weather for statquest yeah hello i'm josh starmer and welcome to statquest today we're going to talk about back propagation details part 1. note this stat quest assumes that you have already watched neural networks part 2 back propagation main ideas if not check out the quest the link is in the description below in back propagation main ideas we had this super simple data set that showed whether or not different drug dosages were effective

we had this super simple data set that showed whether or not different drug dosages were effective against a virus then we had this simple neural network that already had optimal values for all of the parameters except for the last bias term b sub 3. then using everything in the neural network except for the last bias b sub 3 we drew this green squiggle then we demonstrated the main ideas behind back propagation by optimizing b sub 3. we first used the chain rule to calculate the derivative of

back propagation by optimizing b sub 3. we first used the chain rule to calculate the derivative of the sum of the squared residuals with respect to the unknown parameter which in this case was b sub 3. then we initialized the unknown parameter with a number and in this case we set b sub 3 equal to 0 and used gradient descent to optimize the unknown parameter hooray we can optimize the last bias term b sub 3. now let's pretend we don't know b sub 3's optimal value and start working our way

term b sub 3. now let's pretend we don't know b sub 3's optimal value and start working our way backwards so that along with b sub 3 we optimize the last two weights w sub 3 and w sub 4. note the goal of this quest is to learn how the chain rule and gradient ascent applies to multiple parameters and to introduce some fancy notation in the next part we'll go completely bonkers with the chain rule and learn how to optimize all seven parameters in this neural network simultaneously bam so let's go

learn how to optimize all seven parameters in this neural network simultaneously bam so let's go back to not knowing the optimal values for w sub 3 w sub 4 and b sub 3 and just like before we'll assume that the other weights and biases are already optimized the first thing we do is initialize the weights w sub 3 and w sub 4 with random starting values and in this example that means we randomly select two values from a standard normal distribution then we initialize the last bias b sub 3 to zero

two values from a standard normal distribution then we initialize the last bias b sub 3 to zero because bias terms frequently start at zero now if we run dosages from 0 to 1 through the connection to the top node in the hidden layer then just like before we get the corresponding y-axis coordinates and this blue curve now we multiply the y-axis coordinates on the blue curve by w sub 3 which starts out with the random value 0.36 and we get this new blue curve now if we run dosages from 0 to 1

out with the random value 0.36 and we get this new blue curve now if we run dosages from 0 to 1 through the connection to the bottom node in the hidden layer then just like before we get the corresponding y-axis coordinates for this orange curve now we multiply the y-axis coordinates on the orange curve by w sub 4 which starts with the random value 0.63 and we get this new orange curve now we add the blue and orange curves together and get this green squiggle lastly since the initial value for

the blue and orange curves together and get this green squiggle lastly since the initial value for b sub 3 is 0 adding it to the y axis values on the green squiggle does not change anything in other words given the current parameters for this neural network some of which are optimal and some of which are not optimal we end up with this green squiggle now just like before we can quantify how well the green squiggle fits the data by calculating the sum of the squared residuals and we get the sum

the green squiggle fits the data by calculating the sum of the squared residuals and we get the sum of the squared residuals equals 1.4 now even though we have not yet optimized w sub 3 and w sub 4 we can still plot the sum of the squared residuals with respect to b sub 3. and just like before if we change b sub 3 then we will change the sum of the squared residuals and that means just like before we can optimize b sub 3 by finding the derivative of the sum of the squared residuals with respect

we can optimize b sub 3 by finding the derivative of the sum of the squared residuals with respect to b sub 3 and plugging the derivative into the gradient descent algorithm to find the optimal value for b sub 3. and just like before because the predicted values in the sum of the squared residuals come from the green squiggle and the green squiggle is the sum of the blue and orange curves plus b sub 3 then the sum of the squared residuals are linked to b sub 3 by the predicted values so by the

sub 3 then the sum of the squared residuals are linked to b sub 3 by the predicted values so by the chain rule the derivative of the sum of the squared residuals with respect to b sub 3 is the derivative of the sum of the squared residuals with respect to the predicted values times the derivative of the predicted values with respect to b sub 3. note this is the exact same derivative that we calculated in back propagation main ideas the point of this is that even though we are now optimizing

in back propagation main ideas the point of this is that even though we are now optimizing more than one parameter the derivatives that we have already calculated with respect to the sum of the squared residuals do not change bam now let's talk about how to calculate the derivatives of the sum of the squared residuals with respect to the weights w sub 3 and w sub 4. unfortunately before we can do that we have to introduce some fancy notation first let's remember that the i in this summation

do that we have to introduce some fancy notation first let's remember that the i in this summation notation is an index for the data in the data set for example when i equals one we are talking about observed sub one which is zero and we are talking about predicted sub 1 which is 0.72 however we can also talk about dosage sub i and when i equals 1 we are talking about dosage sub 1 which is 0. when i equals 2 we're talking about dosage sub 2 which is 0.5 and when i equals 3 we're talking about

i equals 2 we're talking about dosage sub 2 which is 0.5 and when i equals 3 we're talking about dosage sub 3 which is 1 and because dosage sub i is the input value we call it input sub i and that means this connection multiplies input sub i by weight w sub 1 which is 3.34 and it adds bias sub 1 which is negative 1.43 to get an x-axis coordinate for the activation function in the top node in the hidden layer meanwhile the other connection multiplies input sub i by weight w sub 2 which is

the hidden layer meanwhile the other connection multiplies input sub i by weight w sub 2 which is negative 3.53 and adds bias b sub 2 which is 0.57 to get an x-axis coordinate for the activation function in the bottom node in the hidden layer so we have two different x-axis coordinates for input sub i in order to keep track of things let's call this x axis coordinate x sub 1 comma i where the one in one comma i refers to the activation function in the top node and the i in one comma i tells us

in one comma i refers to the activation function in the top node and the i in one comma i tells us that it corresponds to input sub i likewise let's call this x axis coordinate x sub 2 comma i where the 2 in 2 comma i refers to the activation function in the bottom node and the i in 2 comma i tells us that it corresponds to input sub i for example if i equals 3 then we're talking about the third dosage dosage sub 3 and that means we're talking about input sub 3 which is 1 the maximum dosage and

dosage sub 3 and that means we're talking about input sub 3 which is 1 the maximum dosage and that means the x-axis coordinate for the activation function in the top node x sub 1 comma 3 is equal to 1.91 and the x-axis coordinate for the activation function in the bottom node x sub 2 comma 3 is equal to negative 2.96 bam if we plugged in all values for i into dosage sub i we get x sub 1 comma i values in this red box and x sub 2 comma i values in this red box now in order to get the y axis

i values in this red box and x sub 2 comma i values in this red box now in order to get the y axis coordinates for the activation function in the top node we plug x sub 1 comma i into the activation function which in this example is the soft plus function and that gives us y sub 1 comma i just like before the one in one comma i tells us that we are talking about the activation function in the top node and the i tells us which dosage we are talking about likewise in order to get the y-axis

top node and the i tells us which dosage we are talking about likewise in order to get the y-axis coordinates for the activation function in the bottom node we plug x sub 2 comma i into the activation function and that gives us y sub 2 comma i bam now that we understand the fancy notation we can talk about how to calculate the derivatives of the sum of the squared residuals with respect to the weights w sub 3 and w sub 4. first remember that y sub 1 comma i represents the y axis coordinates for

w sub 3 and w sub 4. first remember that y sub 1 comma i represents the y axis coordinates for the top activation function and they form this initial blue curve however we get the final blue curve by multiplying the y axis coordinates y sub 1 comma i by w sub 3. and that means we can plug y sub 1 comma i times w sub 3 into the equation for the predicted values likewise w sub 4 multiplies the y axis coordinates y sub 2 comma i from the bottom activation function to create the final orange curve

coordinates y sub 2 comma i from the bottom activation function to create the final orange curve and that means we can plug y sub 2 comma i times w sub 4 into the equation for the predicted values now since this sum creates the green squiggle and the green squiggle gives us predictions that we evaluate with the sum of the squared residuals then the sum of the squared residuals are linked to w sub 3 and w sub 4 by the predicted values that means we can use the chain rule to determine the

w sub 3 and w sub 4 by the predicted values that means we can use the chain rule to determine the derivative of the sum of the squared residuals with respect to w sub 3 and with respect to w sub 4. the chain rule says that the derivative of the sum of the squared residuals with respect to w sub 3 is the derivative of the sum of the squared residuals with respect to the predicted values times the derivative of the predicted values with respect to w sub 3. likewise the derivative with respect to

derivative of the predicted values with respect to w sub 3. likewise the derivative with respect to w sub 4 is the derivative of the sum of the squared residuals with respect to the predicted values times the derivative of the predicted values with respect to w sub 4. double bam not yet note in both cases the derivative of the sum of the squared residuals with respect to the predicted values is the exact same as the derivative used for b sub 3. just to remind you we start by substituting the

the exact same as the derivative used for b sub 3. just to remind you we start by substituting the sum of the squared residuals with its equation then we use the chain rule to move the square to the front and then we multiply that by the derivative of the stuff inside the parentheses with respect to the predicted values negative one lastly we simplify by multiplying two by negative one and this is the derivative of the sum of the squared residuals with respect to the predicted values so we just

the derivative of the sum of the squared residuals with respect to the predicted values so we just plug it in now to solve for the derivative of the predicted values with respect to w sub 3 we plug in the equation for the predicted values and the derivative of the first term with respect to w sub 3 is y sub 1 comma i and the derivatives of the other terms are both zero since they do not contain w sub 3 and we end up with just y sub 1 comma i so we multiply the derivative of the sum of the

w sub 3 and we end up with just y sub 1 comma i so we multiply the derivative of the sum of the squared residuals with respect to the predicted values by y sub 1 comma i likewise the derivative of the predicted values with respect to w sub 4 is 0 for the first term plus y sub 2 comma i for the second term plus 0 for the third term which is just y sub 2 comma i so we multiply the derivative of the sum of the squared residuals with respect to the predicted values by y sub 2 comma i double bam now

sum of the squared residuals with respect to the predicted values by y sub 2 comma i double bam now that we have the derivatives of the sum of the squared residuals with respect to w sub 3 w sub 4 and b sub 3 we can plug them into gradient descent to optimize w sub 3 w sub 4 and b sub 3. first we initialize w sub 3 and w sub 4 with random values and set b sub 3 equal to 0. now starting with the derivative of the sum of the squared residuals with respect to w sub 3 first we expand the summation

of the sum of the squared residuals with respect to w sub 3 first we expand the summation then we plug in the observed values and plug in the predicted values from the green squiggle remember we get the predicted values on the green squiggle by running the dosages through the neural network now we plug in the y-axis coordinates for the activation function in the top node y sub 1 comma i lastly we do the math and get 2.58 likewise we calculate the derivative of the sum of the squared residuals

do the math and get 2.58 likewise we calculate the derivative of the sum of the squared residuals with respect to w sub 4 and with respect to b sub 3. now we use the derivatives to calculate the new values for w sub 3 w sub 4 [Music] now we repeat that process until the predictions no longer improve very much or we reach a maximum number of steps or we meet some other criteria now let's check out a fancy animation that shows the gradient descent in action these gray dots represent the data that

a fancy animation that shows the gradient descent in action these gray dots represent the data that we are using to train the neural network and the orange and blue curves represent the orange and blue curves and the green squiggle represents the sum of the orange and blue curves plus b sub 3. now watch how the green squiggle fits the data after 175 steps in gradient descent bam so after a bunch of steps we see how gradient descent optimizes the parameters triple bam in the next stack quest

of steps we see how gradient descent optimizes the parameters triple bam in the next stack quest we'll go totally bonkers with the chain rule and show how to optimize all of the parameters in a neural network simultaneously now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stackquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stack quest if you like

something for everyone hooray we've made it to the end of another exciting stack quest if you like this stack quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Backpropagation Details Pt. 2: Going bonkers with The Chain Rule

omg let's do the chain rule with me it's gonna be cool you'll see statquest hello i'm josh starmer and welcome to statquest today we're going to talk about back propagation details part 2. note this stat quest assumes that you have already seen back propagation details part 1. if not check out the quest the link is in the description below since you've already seen back propagation details part 1 you already know that in this stat quest we're going to go totally bonkers with the chain rule and

you already know that in this stat quest we're going to go totally bonkers with the chain rule and gradient radiant descent in order to optimize all of the weights and biases in this neural network so that it can fit a green squiggle to this data bam note the derivatives that we derived in part 1 for bias b sub 3 and weights w sub 3 and w sub 4 do not change so we can just plug these derivatives into the gradient descent algorithm however now we need to derive the derivatives of the sum of the

into the gradient descent algorithm however now we need to derive the derivatives of the sum of the squared residuals with respect to w sub 1 b sub 1 w sub 2 and b sub 2. let's start with the derivative of the sum of the squared residuals with respect to w sub 1. remember the neural network starts by multiplying input sub i by w sub 1. then it adds the bias b sub 1 and that gives us an x axis coordinate for the activation function that we call x sub 1 comma i we then plug x sub 1 comma i into

for the activation function that we call x sub 1 comma i we then plug x sub 1 comma i into the activation function and that means plugging x sub 1 comma i into this equation because we are using the soft plus activation function and that gives us a y-axis value of y sub 1 comma i and remember y sub 1 comma i times w sub 3 gives us the final blue curve which we add to the final orange curve and the bias b sub 3 to get the green squiggle and the predicted values lastly remember that we use the

the bias b sub 3 to get the green squiggle and the predicted values lastly remember that we use the predicted values to calculate the sum of the squared residuals now let's clear the screen and spread out the equations now we can see that the sum of the squared residuals are linked to w sub 1 first by the predicted values then y sub 1 comma i the y axis values that come from the activation function and lastly x sub 1 comma i the x x-axis values that are input for the activation function thus

and lastly x sub 1 comma i the x x-axis values that are input for the activation function thus the chain rule tells us that the derivative of the sum of the squared residuals with respect to w sub 1 is the derivative of the sum of the squared residuals with respect to the predicted values times the derivative of the predicted values with respect to y sub 1 times the derivative of y sub 1 with respect to x sub 1 times the derivative of x sub 1 with respect to w sub 1. as we've seen before the

to x sub 1 times the derivative of x sub 1 with respect to w sub 1. as we've seen before the derivative of the sum of the squared residuals with respect to the predicted values is the sum of negative 2 times the observed minus the predicted values now the derivative of the predicted values with respect to y sub 1 is w sub 3 for the first term and 0 for the other two terms so the derivative of the predicted values with respect to y sub one is w sub three now we need to solve for the derivative

predicted values with respect to y sub one is w sub three now we need to solve for the derivative of y sub one with respect to x sub 1. this requires knowing that the derivative of the log of z is one divided by z and the derivative of e to the x is e to the x the chain rule tells us to take the derivative of the stuff outside of the parentheses the log function times the derivative of the stuff inside the parentheses 1 plus e to the x if we let z equal one plus e to the x then the derivative

inside the parentheses 1 plus e to the x if we let z equal one plus e to the x then the derivative of the stuff outside is one divided by one plus e to the x and the derivative of the stuff inside is zero for the first term since it does not include x plus e to the x for the second term and this whole thing simplifies to e to the x divided by one plus e to the x lastly the derivative of x sub 1 with respect to w sub 1 is the input value for the first term plus 0 for the second term because it

with respect to w sub 1 is the input value for the first term plus 0 for the second term because it does not include w sub 1 which simplifies to just the input values plugging in the derivatives gives us a big fancy equation or bfe for short hooray we solved for the derivative of the sum of the squared residuals with respect to the first weight w sub 1. note keep in mind that the x's in the e to the x terms are the individual x-axis coordinates for the activation function for each input value

the x terms are the individual x-axis coordinates for the activation function for each input value bam now let's find the derivative of the sum of the squared residuals with respect to b sub 1. the good news is that the exact same equations that linked the sum of the squared residuals to w sub 1 also link the sum of the squared residuals to b sub 1. thus the chain rule tells us that the derivative of the sum of the squared residuals with respect to b sub 1 is the derivative of the sum of the

of the sum of the squared residuals with respect to b sub 1 is the derivative of the sum of the squared residuals with respect to the predicted values times the derivative of the predicted values with respect to y sub 1 times the derivative of y sub 1 with respect to x sub 1 times the derivative of x sub 1 with respect to b sub 1. and the derivative of the sum of the squared residuals with respect to the predicted values is the same as before and so is the derivative of the predicted values

to the predicted values is the same as before and so is the derivative of the predicted values with respect to y sub 1 and the derivative of y sub 1 with respect to x sub 1 is also the same as before and the only thing different is the derivative of x sub 1 with respect to b sub 1 which is 0 for the first term since it does not include b sub 1 plus 1 for the second term which simplifies to just one plugging in the derivatives gives us another big fancy equation double bam we've solved for the

one plugging in the derivatives gives us another big fancy equation double bam we've solved for the derivatives of the sum of the squared residuals with respect to w sub 1 and b sub 1. now we need to solve for the derivatives of the sum of the squared residuals with respect to w sub 2 and b sub 2. the good news is that the only difference is that instead of using the top node in the hidden layer we use the bottom node and that means now we multiply input sub i by w sub 2 and add b sub 2 and

we use the bottom node and that means now we multiply input sub i by w sub 2 and add b sub 2 and that gives us x sub 2 comma i which we plug into the activation function to get y sub 2 comma i then we multiply y sub 2 comma i by w sub 4 to get the final orange curve which we add to the final blue curve and b sub 3 to get the green squiggle and the green squiggle gives us the predicted values which gives us the residuals and the sum of the squared residuals thus just like before the sum of the

gives us the residuals and the sum of the squared residuals thus just like before the sum of the squared residuals are linked to w sub 2 and we use the chain rule to derive the derivative of the sum of the squared residuals with respect to w sub 2. now calculating the derivatives is just like before but with slightly different parameter names and plugging in the derivatives gives us another bfe so in the end this is the derivative of the sum of the squared residuals with respect to w sub two

so in the end this is the derivative of the sum of the squared residuals with respect to w sub two similarly we can derive the derivative of the sum of the squared residuals with respect to b sub now we just combine these derivatives with all of the others and use gradient ascent to optimize all of the parameters simultaneously first we initialize the weights and biases in this example we picked numbers from a standard normal distribution for the weights oh no it's a technical detail alert i

numbers from a standard normal distribution for the weights oh no it's a technical detail alert i think this is the first time that's ever happened just so you know using a standard normal distribution is just one of many ways to initialize weights small bam now we initialize the bias terms to zero because bias terms frequently start at zero now starting with the derivative of the sum of the squared residuals with respect to w sub one we expand the summation then we plug in the observed values

residuals with respect to w sub one we expand the summation then we plug in the observed values and the values predicted by the green squiggle remember we get the predicted values on the green squiggle by running the dosages through the neural network now we can plug in the current value for w sub 3 and the x-axis coordinates for the activation function in the top node x sub 1 comma i lastly we plug in the input values then we do the math and get 0.76 then we solve for all of the other

we plug in the input values then we do the math and get 0.76 then we solve for all of the other derivatives and then we use each derivative to calculate a step size and a new value then we update the parameters in the neural network and repeat until the predictions no longer improve very much or meet some other criteria now let's check out a fancy animation that shows the gradient descent in action these gray dots represent the data that we are using to train the neural network and the orange

these gray dots represent the data that we are using to train the neural network and the orange and blue curves represent the orange and blue curves and the green squiggle which fits the data so poorly that it's going off the screen represents the sum of the orange and blue curves plus b sub 3. now watch how gradient descent fits the green squiggle to the data after 450 steps we went totally bonkers with the chain rule and gradient descent and we finally have a neural network that fits a green

with the chain rule and gradient descent and we finally have a neural network that fits a green squiggle to the data triple bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider

this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

[Music] some people say i mispronounce value but that is okay at least it's okay with me stackquest hello i'm josh starmer and welcome to statquest today we're going to do neural networks part 3 the relu activation function in action note this stat quest assumes that you are already familiar with the main ideas behind neural networks if not check out the quest the link is in the description below in neural networks part 1 inside the black box we started with a simple data set that showed whether

neural networks part 1 inside the black box we started with a simple data set that showed whether or not different drug dosages were effective against a virus the low and high dosages were not effective but the medium dosage was effective then we talked about how a neural network like this one that uses the soft plus activation function in the hidden layer can fit a green squiggle to the data set bam now let's see what happens if we swap out the soft plus activation function in the hidden layer

bam now let's see what happens if we swap out the soft plus activation function in the hidden layer with one of the most popular activation functions for deep learning and convolutional neural networks the rel u activation function which is short for rectified linear unit and sounds like a robot and as a bonus because it is common to put an activation function before the final output we'll do that too bam remember to keep the math simple let's assume dosages go from 0 for low to 1 for high so

too bam remember to keep the math simple let's assume dosages go from 0 for low to 1 for high so if we plug in the lowest dosage 0 the connection from the input to the top node in the hidden layer multiplies the dosage by 1.70 and then adds negative 0.85 and the result is an x-axis coordinate for the activation function so if we plug in 0 for dosage then the x-axis coordinate for the activation function is negative 0.85 now we plug negative 0.85 into the relu activation function the relu

function is negative 0.85 now we plug negative 0.85 into the relu activation function the relu activation function outputs whichever value is larger 0 or the input value which in this case is negative 0.85 and because 0 is greater than negative 0.85 the output from the relu activation function is zero and the corresponding y-axis value is zero so let's put a blue dot at zero for when dosage equals zero now if we increase dosage to 0.2 the x-axis coordinate for the activation function is

equals zero now if we increase dosage to 0.2 the x-axis coordinate for the activation function is negative 0.51 and again because 0 is greater than negative 0.51 the output from the relu activation function is 0 and the corresponding y-axis value is 0. so let's put a blue dot at 0 for when dosage equals 0.2 and if we increase the dosage value to 0.4 we get 0 for the y-axis coordinate again however when dosage equals 0.6 the x-axis coordinate is 0.17 now when we plug 0.17 into the rail u

however when dosage equals 0.6 the x-axis coordinate is 0.17 now when we plug 0.17 into the rail u activation function the output is 0.16 because 0.17 is greater than 0 and the corresponding y-axis value is 0.17 and if we continue to increase the dosage values all the way to one the maximum dosage we get this bent blue line then we multiply the y-axis coordinates on the bent blue line by negative forty point eight and the new bent blue line goes off the screen note for those of you drawing this

forty point eight and the new bent blue line goes off the screen note for those of you drawing this at home your final bent blue line will have a steeper slope than mine because for the sake of clarity i am not drawing things perfectly to scale tiny bam now when we run dosages through the connection to the bottom node in the hidden layer we get the corresponding y-axis coordinates that go off the screen for this straight orange line now we multiply the y-axis coordinates on the straight orange

screen for this straight orange line now we multiply the y-axis coordinates on the straight orange line by 2.70 and we end up with this final straight orange line now we add the bent blue line and the straight orange line together to get this green wedge now we add the final bias term negative 16 to the y-axis coordinates on the green wedge lastly because we included the rail u activation function right in front of the output we use the green wedge as its input for example the y-axis coordinate

right in front of the output we use the green wedge as its input for example the y-axis coordinate for this point on the green wedge is negative 16 which corresponds to this x-axis coordinate for the relu activation function and when we plug that into the relu activation function we get 0 because 0 is greater than negative 16. and 0 corresponds to this green dot likewise the y-axis coordinate for this point on the green wedge is negative 9.2 and just like before when we plug that into the rail

this point on the green wedge is negative 9.2 and just like before when we plug that into the rail u activation function we get 0 and 0 corresponds to this green dot now in contrast to the last two points we fed into the rel u activation function this one is positive 0.49 and when we plug it into the relu activation function we get 0.49 and 0.49 corresponds to this green dot likewise the remaining positive y-axis coordinates stay the same and the negative values are set to zero and at long last

positive y-axis coordinates stay the same and the negative values are set to zero and at long last we end up with this green pointy thing double bam thus the relu activation function may seem weird because it's not curvy and the equation is really simple but just like for any other activation function the weights and biases on the connection slice them flip them and stretch them into new shapes which are added together to get an entirely new shape that fits the data triple bam oh no it's

which are added together to get an entirely new shape that fits the data triple bam oh no it's another technical detail alert some of you may have noticed that the relu activation function is bent and not curved this means that the derivative is not defined where the function is bent and that's a problem because gradient descent which we use to estimate the weights and biases requires a derivative for all points however it's not a big problem because we can get around this by simply defining

for all points however it's not a big problem because we can get around this by simply defining the derivative at the bent part to be zero or one it doesn't really matter small bam and now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stack quest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more

made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

way up north there's an island out in the sea and way out there they've got neural networks and they're cool statquest hello i'm josh starmer and welcome to statquest today we're going to talk about neural networks part 4 multiple inputs and outputs note this stack quest was supported in part by ital also i thought i'd mention that the inspiration for this stat quest came from my friend michael in svalbard lastly this stat quest assumes that you already understand the main ideas behind neural

in svalbard lastly this stat quest assumes that you already understand the main ideas behind neural networks and the relu activation function if not check out the quests the links are in the description below so far the neural networks that we've looked at have been super simple and only predict whether or not the dosage of a drug will be effective the neural networks just have one input node and one output node when there is only one input node then the data we are using to make predictions in

one output node when there is only one input node then the data we are using to make predictions in this case dosages can all fit on the x-axis of this graph in other words the input is one-dimensional since it only needs one axis in the graph likewise a single dimension the y-axis represents the output values combined we get a two-dimensional graph with the input dosage on the x-axis and the output drug effectiveness on the y-axis because the input and output combine to form a two-dimensional

drug effectiveness on the y-axis because the input and output combine to form a two-dimensional graph we can see how the weights and biases in this neural network slice flip and stretch the curved or bent activation functions into new shapes that are added together to make a two-dimensional squiggle or shape that fits the data bam now let's look at a more complicated network that has more than one input node and more than one output node now this neural network may look really fancy but all it

input node and more than one output node now this neural network may look really fancy but all it does is take two measurements from an iris flower the width of a petal which is this part of the flower and the width of a sepal which is this part of the flower and with that information it predicts the species either setosa versicolor or virginica now raise your hand if you already knew that this was a sepal and not a petal not me i thought they were all petals anyway to keep things simple at the

a sepal and not a petal not me i thought they were all petals anyway to keep things simple at the start let's begin with both input nodes but just one output node for setosa later on we'll add the other two output nodes but for now let's keep things simple and just use one output node now let's see what happens when we plug values for petal width and sepal width into this simplified neural network since we have two inputs and one output if we're going to draw a graph of what's going on then we

since we have two inputs and one output if we're going to draw a graph of what's going on then we need a three-dimensional graph the inputs petal width and sepal width each get an axis in the output the prediction for setosa gets the y-axis note to keep the math simple i scaled the inputs to be between 0 for the smallest value and one for the largest value so let's start in this corner where petal and sepal width equal zero and plug those values into the neural network first let's determine the

and sepal width equal zero and plug those values into the neural network first let's determine the x-axis coordinate for the top node in the hidden layer we multiply the petal width by the weight associated with the connection to the top node in the hidden layer negative 2.5 and we multiply the sepal width by the weight associated with its connection to the top node in the hidden layer 0.6 then we add the two terms together and add the bias 1.6 and that gives us the x-axis coordinate for the

we add the two terms together and add the bias 1.6 and that gives us the x-axis coordinate for the activation function which is 1.6 now we plug 1.6 into the relu activation function to get the y-axis coordinate 1.6 because 1.6 is greater than 0 and 1.6 corresponds to this blue point on the graph when petal and sepal widths are both zero now let's increase petal width to 0.2 but keep sepal width at 0. now when we do the math we get 1.1 for the x-axis coordinate and 1.1 for the y-axis coordinate

0. now when we do the math we get 1.1 for the x-axis coordinate and 1.1 for the y-axis coordinate and 1.1 corresponds to this blue point on the graph likewise when we increase pedal width to the maximum value 1 but keep sepal width at 0 we get these blue dots now let's increase sepal width to 0.2 and run values for petal width from 0 to 1 through the neural network likewise if we keep increasing sepal width to 1 for different values of petal width we get this blue bent surface the bend

sepal width to 1 for different values of petal width we get this blue bent surface the bend corresponds to the points where the relu activation function set the y-axis values to 0. now we multiply the y-axis value for each point by negative 0.1 for example the original y-axis value for this point when petal and sepal widths are both zero is 1.6 and 1.6 times negative 0.1 equals negative 0.16 so the final point is here likewise when we multiply all of the other y-axis coordinates by negative 0.1

final point is here likewise when we multiply all of the other y-axis coordinates by negative 0.1 we get this final blue bent surface now we do the exact same thing for the connections to the bottom node in the hidden layer and we end up with this orange bent surface where the bend occurs where the relu activation function set the y-axis values to zero then we multiply each y-axis coordinate by 1.5 to get the final orange bent surface now we add the y-axis coordinates on the blue bent surface

1.5 to get the final orange bent surface now we add the y-axis coordinates on the blue bent surface to the y-axis coordinates on the orange-bent surface for example the y-axis coordinate for this blue point is negative 0.16 and we add the y-axis coordinate for this orange point 1.05 to get 0.89 the y-axis coordinate for this green point anyways we do that for every single point and ultimately we end up with this green crinkled surface now the last thing we do is add the final bias 0 to each

we end up with this green crinkled surface now the last thing we do is add the final bias 0 to each y-axis coordinate and since adding 0 doesn't change the green crinkled surface this is the output for setosa bam looking at the green crinkled surface we see that the value for setosa is highest when the petal width is close to zero and the value for setosa is lowest when the petal width is close to one note remember that we scaled the inputs to be between zero and one and thus pedal width equals

one note remember that we scaled the inputs to be between zero and one and thus pedal width equals zero does not imply that the pedal is zero centimeters wide instead 0 refers to the smallest width in the training data set likewise 1 means the largest width in the training data set small bam now to review the concepts so far when we have two inputs the neural network creates curved or bent surfaces that are added together to make a new crinkled surface that in this case we can use to make

that are added together to make a new crinkled surface that in this case we can use to make predictions about whether or not the species of an iris is setosa for example if we found this iris while walking in the woods and the scaled petal width was 0.5 and the scaled sepal width was 0.37 then we can look at the y-axis value on the green crinkled surface that corresponds to these measurements and see that this particular iris is probably not setosa because the y-axis value is closer to zero

and see that this particular iris is probably not setosa because the y-axis value is closer to zero than one and this is confirmed when we run the numbers through the neural network and get 0.09 bam now that we have a green crinkled surface for setosa let's determine the output for the second species fursy color just like before we'll start with the connections to the top node in the hidden layer and because the weights and biases are the same as before we start out with the same blue bent

and because the weights and biases are the same as before we start out with the same blue bent surface however because we will multiply the y-axis coordinates by 2.4 let's change the range of the y-axis from 0 to 2 to negative 6 to 6 bam now multiplying the y-axis coordinates by 2.4 gives us this final blue bent surface now we create the orange pen surface from the bottom node in the hidden layer and multiply the y-axis coordinates on the orange-bent surface by negative 5.2 now we add the

layer and multiply the y-axis coordinates on the orange-bent surface by negative 5.2 now we add the y-axis coordinates from the two bent surfaces together to create this red crinkled surface lastly we add the final bias 0 to the y-axis coordinates on the red crinkled surface and that gives us the final surface for predicting if the iris species is versicolor now i'll admit it's hard to see what values for petal or sepal widths will give versicolor a high score on this red crinkled surface but

values for petal or sepal widths will give versicolor a high score on this red crinkled surface but when we change the y-axis scale from negative 6 to 6 to negative 0.5 to 1 we see that when petal width is close to 0.4 we will get a high value for versicolor double bam now just like we did for setosa and versicolor let's determine the crinkled surface for virginica just like before we start with the blue bent surface from the top node in the hidden layer but now we multiply the y-axis

with the blue bent surface from the top node in the hidden layer but now we multiply the y-axis coordinates by negative 2.2 and just like before we create the orange bent surface from the bottom node in the hidden layer but now we multiply the y-axis coordinates by 3.7 now we add the y-axis coordinates from the two bent surfaces together and get this purple crinkled surface lastly we add the final bias one to the y-axis coordinates on the purple crinkled surface and that gives us the final

final bias one to the y-axis coordinates on the purple crinkled surface and that gives us the final surface for predicting if the iris species is virginica now so we can see what's going on let's change the scale for the y-axis from negative six to six to zero to one now we see that when petal width is close to 1 then we will get a high score for virginica triple bam at long last we have crinkled surfaces for setosa versicolor and virginica now we can plug in the petal and sepal widths from the

surfaces for setosa versicolor and virginica now we can plug in the petal and sepal widths from the iris we found and run the numbers through the neural network and predict that this iris is versicolor because that output value 0.86 is closest to 1. that said usually when there are two or more output nodes the output values are sent to either something called arg max arg or something called softmax before a final decision is made and we'll talk about argmax and softmax in the next stat quest in

before a final decision is made and we'll talk about argmax and softmax in the next stat quest in this series bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to

and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

argh max soft max statquest hello i'm josh starmer and welcome to statquest today we're going to talk about neural networks part 5 arg max and softmax note this stat quest assumes that you already understand the main ideas behind neural networks the main ideas behind back propagation and how neural networks work with multiple input and output nodes if not check out the quests the links are in the description below in the statquest on neural networks with multiple input and output nodes we had a

description below in the statquest on neural networks with multiple input and output nodes we had a fancy neural network that used petal and sepal widths to predict iris species the neural network made predictions with crinkled surfaces for setosa versicolor and virginica then we plugged in the petal and sepal widths from an iris we found in the woods and ran the numbers through the neural network and predicted that this iris is versicolor because that output value 0.86 is closest to 1. bam now

and predicted that this iris is versicolor because that output value 0.86 is closest to 1. bam now let's see what happens when petal width equals 0 and sepal width equals 1. when we run the numbers through the neural network the output values are 1.43 for setosa negative 0.4 for versicolor and 0.23 for virginica so one thing we notice is that the raw output values are not always values between 0 and 1. sometimes a raw output value can be greater than 1 like in the case for setosa with 1.43 and

and 1. sometimes a raw output value can be greater than 1 like in the case for setosa with 1.43 and sometimes a raw output value can be less than zero like the case reversi-color with negative 0.4 this broad range of values makes the raw output harder to interpret than it needs to be and this is one of the reasons that when there is more than one output like we have here the raw output values are sent to either an arg max layer or a soft max layer before a final decision is made argmax which

sent to either an arg max layer or a soft max layer before a final decision is made argmax which sounds like something a pirate might say arg max simply sets the largest value to 1 and all of the other values to 0. in this example setosa has the largest value 1.43 so the arg max function sets the final output value for setosa to 1. and the final output values for versicolor and virginica to zero thus when we use arg max the neural network's prediction is simply the output with a 1 in it and

thus when we use arg max the neural network's prediction is simply the output with a 1 in it and that makes the output super easy to interpret bam the only problem with argmax is that we can't use it to optimize the weights and biases in the neural network this is because the output values from arg max are constants 0 and 1. to see why this is a problem let's plot the second largest output value 0.23 on a graph since this is the second largest value arg max will output 1 for any other output

0.23 on a graph since this is the second largest value arg max will output 1 for any other output value that is greater than 0.23 and it will output 0 for any other output value that is less than 0.23 because the slopes of these two lines are both zero their derivatives are also zero and that means if we wanted to find the optimal value for any of the weights and biases in the neural network then we would end up plugging zero into the chain rule for the derivative of arg max and then the whole

we would end up plugging zero into the chain rule for the derivative of arg max and then the whole derivative would be zero and if we plug zero into gradient descent we won't step towards the optimal parameter values and that means we can't use arg max for back propagation [Music] so that leads us to the soft max function when people want to use arg max for output they often use softmax for training however first let me say that softmax sounds like a brand of toilet paper but since we're

training however first let me say that softmax sounds like a brand of toilet paper but since we're already using a roll of toilet paper to represent the soft plus activation function let's use a picture of a soft teddy bear to represent the soft max function now let's see the soft max function in action first let's solve for the soft max output for setosa we raise e to the raw output value for setosa and divide by the sum of e raised to each raw output value so in this case we plug 1.43 in for

and divide by the sum of e raised to each raw output value so in this case we plug 1.43 in for setosa negative 0.4 for versicolor and 0.23 for virginica and when we do the math we get 0.69 as the soft max output value for setosa so let's put 0.69 here so we don't forget it now let's calculate the softmax output value for versicolor when we calculate the softmax value for versicolor the only thing that changes is the numerator now instead of e raised to the raw output value for setosa we are

that changes is the numerator now instead of e raised to the raw output value for setosa we are using the raw output value for versicolor so let's plug in the raw output values do the math and we get 0.1 as the soft max output value for versicolor lastly let's calculate the soft max output value for virginica just like before the only thing that changes is the numerator now e is raised to the raw output value for virginica so let's plug in the raw output values do the math and we get 0.21 as

output value for virginica so let's plug in the raw output values do the math and we get 0.21 as the softmax output value for virginica bam now let's take a moment to look at the three soft max output values first notice that the largest raw output value 1.43 for setosa is paired with the largest softmax output value 0.69 likewise the second largest raw output value 0.23 for virginica is paired with the second largest softmax output value 0.21 lastly the lowest raw output value negative 0.4 for

the second largest softmax output value 0.21 lastly the lowest raw output value negative 0.4 for versicolor is paired with the lowest softmax output value 0.1 so we see that the softmax function preserves the original order or ranking of the raw output values bam second notice that all three soft max output values are between zero and one this is something that the soft max function ensures regardless of how many raw output values there are the soft max output values will always be between zero

of how many raw output values there are the soft max output values will always be between zero and one double bam third notice that if we add up all of the softmax output values then the total is one that means that as long as the output values are mutually exclusive then the soft max output values can be interpreted as predicted probabilities note i put the word probabilities in quotes because you should not put a lot of trust in their accuracy the reason you should not put a lot of trust in

you should not put a lot of trust in their accuracy the reason you should not put a lot of trust in the accuracy of these predicted probabilities is that they are in part dependent on the weights and biases in the neural network and the weights and biases in turn depend on the randomly selected initial values and if we change the initial values we can end up with different weights and biases that give us a neural network that is just as good at classifying the data but give us different raw

give us a neural network that is just as good at classifying the data but give us different raw output values and different raw output values give us different soft max output values and that means that different randomly selected initial values for the weights and biases result in different predicted probabilities in other words the predicted probabilities don't just depend on the input values but also on the random initial values for the weights and biases so don't put a lot of trust in the

but also on the random initial values for the weights and biases so don't put a lot of trust in the accuracy of these predicted probabilities small bam now let's go back to the original neural network with the original predicted probabilities and look at the general form of the softmax equation this i refers to an individual raw output value for example when i equals 1 then we are talking about the raw output value for setosa and that means we put setosa here and we put the raw output value for

raw output value for setosa and that means we put setosa here and we put the raw output value for setosa in the numerator in the denominator we just have the sum of e raised to each raw output value now remember that we started by talking about arg max which is easy to interpret but cannot be used for back propagation because its derivative is totally lame in contrast soft max has a derivative that can be used for back propagation for example if we have the soft max function for setosa then the

can be used for back propagation for example if we have the soft max function for setosa then the derivative of the predicted probability with respect to the raw output value for setosa is the predicted probability for setosa times 1 minus the predicted probability for setosa where in this case the predicted probability for setosa equals 0.69 and so when we do the math we get 0.21 note some of you may wonder where this derivative came from some of you may not for those who want to know i've

you may wonder where this derivative came from some of you may not for those who want to know i've created a video that walks you through every single step so check it out bam now because the raw output values for versicolor and virginica play a role in the soft max output value for setosa we also need the derivatives of the predicted probability for setosa with respect to versicolor and virginica the derivative of the predicted probability with respect to the raw output value for versicolor is

the derivative of the predicted probability with respect to the raw output value for versicolor is the negative predicted probability for setosa times the predicted probability for versicolor where the predicted probability for setosa equals 0.69 and the predicted probability for versicolor equals 0.10 and when we do the math we get negative 0.07 lastly the derivative with respect to virginica is the negative predicted probability for setosa times the predicted probability for virginica and

is the negative predicted probability for setosa times the predicted probability for virginica and when we do the math we get negative 0.15 thus unlike the arg max function which has a derivative equal to 0 or it's undefined the derivative of the soft max function is not always zero and we can use it for gradient ascent so we see why neural networks with multiple outputs often use softmax for training and use argmax which has super easy to understand output to classify new observations triple

and use argmax which has super easy to understand output to classify new observations triple bam now before we go i need to mention that way back in the stack quest on back propagation main ideas we use the sum of the squared residuals to determine how well the neural network fit the data however when we use the soft max function because the output values are predicted probabilities between 0 and one we often use something called cross entropy to determine how well the neural network fits the

one we often use something called cross entropy to determine how well the neural network fits the data and we'll talk about cross entropy in the next stack quest in this series bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stack quest if you like this stat quest and want to see more please

to the end of another exciting stack quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

if you're watching this then your hardcore stat quest hello i'm josh starmer and welcome to statquest today we're going to talk about the soft max derivative and we're going to go through it step by step note this stack quest assumes that you already understand the main ideas behind soft max if not check out the quest the link is in the description below in the stat quest on soft max we had this fancy neural network that predicted if an iris was setosa versicolor or virginica and since the

fancy neural network that predicted if an iris was setosa versicolor or virginica and since the output values were all over the place we ran them through a soft max layer and i was like here's the derivative of the soft max for setosa with respect to the raw output value for setosa bam now let's solve for that derivative one step at a time well first remember that the soft max for setosa and thus this fraction is equal to the predicted probability for setosa now the derivative of the predicted

this fraction is equal to the predicted probability for setosa now the derivative of the predicted probability requires the quotient rule don't worry i don't expect you to remember the quotient rule i had to google it too since we are taking the derivative with respect to the raw output value for setosa the quotient rule tells us to take the derivative of the numerator with respect to the raw output value for setosa and the derivative of the numerator e raised to the raw output value for setosa

value for setosa and the derivative of the numerator e raised to the raw output value for setosa with respect to the raw output value for setosa is e raised to the raw output value for setosa then we just plug in the denominator then we subtract the derivative of the denominator with respect to the raw output value for setosa which again is just e raised to the raw output value for setosa so we plug that in and then we plug in the numerator lastly we square the original denominator and plug

plug that in and then we plug in the numerator lastly we square the original denominator and plug that in now let's move the equation up a little bit and shorten setosa versicolor and virginica so the equations don't run off the screen and now just do some algebra first since e to the s multiplies the rest of the numerator we can split it out likewise we can split this numerator into two terms now we notice that the first term is equal to the predicted probability for setosa so we can replace

we notice that the first term is equal to the predicted probability for setosa so we can replace the first term with the predicted probability for setosa and this term has the same thing in the numerator and the denominator so it is equal to one and the last term is also equal to the predicted probability for setosa so we plug that in bam so we see that the derivative of the predicted probability for setosa with respect to the raw output value for setosa is the predicted probability for setosa

for setosa with respect to the raw output value for setosa is the predicted probability for setosa times one minus the predicted probability for setosa where in this case the predicted probability for setosa equals 0.69 so when we do the math we get 0.21 now because the raw output values for versicolor and virginica play a role in the soft max output value for setosa we also need the derivatives of the predicted probability for setosa with respect to versicolor and virginica so let's quickly

of the predicted probability for setosa with respect to versicolor and virginica so let's quickly look at how to calculate the derivative with respect to versicolor and we'll leave virginica for homework just like before remember that the soft max value for setosa and thus this fraction is equal to the predicted probability for setosa likewise the soft max value for versicolor and thus this fraction is equal to the predicted probability for versicolor now just like before the derivative of the

is equal to the predicted probability for versicolor now just like before the derivative of the predicted probability for setosa requires the quotient rule the big difference this time is that now we are taking the derivatives with respect to versicolor this difference makes things easier because the derivative of the numerator e raised to the raw value for setosa with respect to versicolor is zero since versicolor is not in the numerator and that means this whole first term is zero then we

zero since versicolor is not in the numerator and that means this whole first term is zero then we subtract the derivative of the denominator with respect to versicolor times the numerator and divide everything by the denominator squared now let's shorten setosa versicolor and virginica so the equations don't run off the screen and now we just do some algebra first we split the numerator into two separate terms and the first term is the same as the negative predicted probability for setosa and

separate terms and the first term is the same as the negative predicted probability for setosa and the second term is the same as the predicted probability for versicolor double bam so we see that the derivative of the predicted probability for setosa with respect to the raw output value for versicolor is the negative predicted probability for setosa times the predicted probability for versicolor where the predicted probability for setosa equals 0.69 and the predicted probability for versicolor

where the predicted probability for setosa equals 0.69 and the predicted probability for versicolor equals 0.1 and when we do the math we get negative 0.07 likewise the derivative with respect to virginica is the negative predicted probability for setosa times the predicted probability for virginica and that gives us negative 0.15 [Music] now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at

you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below

of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

if you made a neural network on the surface of mars you'd be a long long way away from me that's the truth statquest hello i'm josh starmer and welcome to statquest today we're going to talk about neural networks part 6 cross-entropy note this stat quest assumes that you already understand the main ideas behind neural networks the main ideas behind back propagation and softmax and argmax if not check out the quests the links are in the description below now before we get started with cross

check out the quests the links are in the description below now before we get started with cross entropy let me remind you that in the statquest on backpropagation main ideas we had a simple neural network with a single output that in theory could give us any output value in cases like this we commonly use the sum of the squared residuals to determine how well the neural network fits the data bam now when we have a neural network with multiple output values we often run the data through arg max

now when we have a neural network with multiple output values we often run the data through arg max to make the output easy to interpret but because arg max has a terrible derivative we can't use it for back propagation so in order to train the neural network we use the soft max function and the soft max output values are predicted probabilities between 0 and 1 and when the output is restricted to values between 0 and 1 we often use something called cross entropy to determine how well the

to values between 0 and 1 we often use something called cross entropy to determine how well the neural network fits the data cross entropy is one of those things that sounds super fancy and complicated but when it comes to neural networks is super simple to see how super simple it is let's start with this super simple training data set that has pedal and sepal widths for known or observed iris species now let's plug in the petal and sepal widths for the first observed species setosa and run the

now let's plug in the petal and sepal widths for the first observed species setosa and run the numbers through the neural network and run the raw output values through the softmax function now because we know the data are from setosa the cross entropy is the negative log base e of the soft max output value for setosa 0.57 in other words we plug the predicted probability for the observed species into the cross entropy function note if you have seen the cross-entropy function before this version

the cross entropy function note if you have seen the cross-entropy function before this version may look different to you the difference is because neural networks only need a simplified form of this general equation in this summation m is the number of output classes in this case m equals 3 because we have three output classes setosa versicolor and virginica thus if we expanded the summation we would get one term for setosa one term for versicolor and one term for virginica now because we know

get one term for setosa one term for versicolor and one term for virginica now because we know that the data from the first row comes from setosa the observed probability that the data comes from setosa is one and the observed probabilities that the data came from versicolor and virginica are both zero and that means the terms for versicolor and virginica go away poof and we are left with negative one times the log of the predicted probability for setosa anyway going back to where we plugged in

one times the log of the predicted probability for setosa anyway going back to where we plugged in the predicted probability for setosa when we do the math we get 0.56 bam so let's add the predicted probability for setosa to the table and the corresponding cross entropy value now let's plug in the petal and sepal widths for the second observed species virginica and run the numbers through the neural network and run the raw output values through the soft max function now because we know the data

network and run the raw output values through the soft max function now because we know the data are from virginica we plug the predicted probability for virginica 0.58 into the cross entropy equation and the cross entropy value for virginica the second row in the training data is 0.54 likewise we plug in the measurements on the third row run the numbers through the neural network and soft max and because we know the data are from versicolor we plug the predicted probability for versicolor 0.52

because we know the data are from versicolor we plug the predicted probability for versicolor 0.52 into the cross entropy equation and the cross entropy for versicolor is 0.65 now to get the total error for the neural network all we do is add up the cross entropy values in this case we get 1.75 as the total error and we can use back propagation to adjust the weights and biases and hopefully minimize the total error double bam now at this point you might be wondering if i can calculate these

the total error double bam now at this point you might be wondering if i can calculate these probabilities for each observed species then i can calculate residuals the difference between the observed probabilities and the predicted probabilities for example for the first row in the data the observed species is setosa and thus the observed probability that the petal and sepal measurements came from setosa is 1 and the predicted probability is 0.57 thus the residual is 0.43 and if we can

came from setosa is 1 and the predicted probability is 0.57 thus the residual is 0.43 and if we can calculate a residual we can square it and ultimately that means we can calculate the sum of the squared residuals so you may be wondering why we don't just calculate the squared residuals instead of the cross entropy well the first thing we do is remember that the soft max function only gives us values between 0 and one and if the prediction for setosa is really good it will be close to one and

between 0 and one and if the prediction for setosa is really good it will be close to one and if the prediction is really terrible it will be close to zero in this case the prediction for setosa is kind of in the middle however we can just plug in values for the predicted probability from 0 to 1 into the cross-entropy function and plot the output the y-axis is the loss which is a measure of how bad the prediction is when we use cross-entropy as the prediction gets worse and worse the loss kind

the prediction is when we use cross-entropy as the prediction gets worse and worse the loss kind of explodes and gets really really big in contrast if we plug in values for the predicted probability from 0 to 1 into the squared residual then the change in loss between 0 and 1 is not as large as it is for cross entropy and you may remember from neural networks part 2 back propagation main ideas that the step size for back propagation depends in part on the derivatives of these functions and the

the step size for back propagation depends in part on the derivatives of these functions and the derivative or slope of the tangent line for cross entropy for a bad prediction will be relatively large compared to the derivative for the same bad prediction with squared residuals so when the neural network makes a really bad prediction cross entropy will help us take a relatively large step towards a better prediction because the slope of the tangent line will be relatively large triple bam now

a better prediction because the slope of the tangent line will be relatively large triple bam now with all this talk about back propagation you're probably dying to see how it is done with cross entropy my friend the news is good the next stat quest is all about how to use cross entropy with back propagation bam now it's time for some shameless self promotion if you want to review statistics and machine learning offline check out the stackquest study guides at statquest.org there's something

machine learning offline check out the stackquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Neural Networks Part 7: Cross Entropy Derivatives and Backpropagation

cross entropy derivatives and back propagation so cool stat quest hello i'm josh starmer and welcome to statquest today we're going to talk about neural networks part 7 cross-entropy derivatives and back propagation note this stat quest assumes that you already understand the main ideas behind neural networks and back propagation the main ideas behind neural networks with multiple inputs and outputs and soft max and the main ideas behind cross entropy now consider this neural network it takes

and soft max and the main ideas behind cross entropy now consider this neural network it takes petal and sepal width measurements as input and by using a soft max layer at the end outputs predicted probabilities of the species of iris we measured and since we're using the soft max function for training we evaluate how well the neural network fits the data with cross entropy and that means if we want to optimize parameters with back propagation we need to take the derivative of the equation for

to optimize parameters with back propagation we need to take the derivative of the equation for cross entropy with respect to the different weights and biases in the neural network to demonstrate the basic principles behind how we do back propagation with cross entropy we're going to work through an example that optimizes this bias b sub 3. but let's start by reviewing how this neural network makes predictions to begin with first we put values from 0 to 1 into the inputs for petal and sepal

makes predictions to begin with first we put values from 0 to 1 into the inputs for petal and sepal widths and these values are modified by weights and biases and run through an activation function to create this blue bent surface which is scaled by the weight negative 0.1 likewise we create an orange bent surface with the other activation function which is scaled by the weight 1.5 now we add the blue and orange bent surfaces together to get this green crinkled surface lastly we add a final

the blue and orange bent surfaces together to get this green crinkled surface lastly we add a final bias term b sub 3 and that gives us the final green crinkled surface in other words this blue bent surface plus this orange bent surface plus a bias creates a green crinkled surface and the green crinkled surface represents the raw output for setosa likewise to create the raw output values for versicolor we add a blue bent surface to an orange bent surface plus a bias to create a red crinkled

we add a blue bent surface to an orange bent surface plus a bias to create a red crinkled surface finally to create the raw output values for virginica we add a blue bent surface to an orange bent surface plus a bias to get a purple crinkled surface now we run the raw output values through the soft max function to get the final predicted probabilities for setosa versicolor and virginica bam for example if we had this training data with petal and sepal width measurements for setosa then we would

if we had this training data with petal and sepal width measurements for setosa then we would plug the measurements into the neural network and get these raw output values that are converted by the soft max function into these predicted probabilities and thus 0.57 is the predicted probability for setosa now to evaluate how good the prediction is we plug it into the equation for cross entropy and we get 0.56 now that we know how to calculate a cross entropy value let's talk about how changes in

we get 0.56 now that we know how to calculate a cross entropy value let's talk about how changes in this bias b sub 3 can change the cross entropy value first remember that b sub 3 is the bias that finalizes the green crinkled surface and thus b sub 3 finalizes the raw output for setosa and by changing b sub 3 and thus the raw output for setosa we will change the soft max value for setosa because the raw output for setosa appears in the numerator and denominator and it will change the soft max

the raw output for setosa appears in the numerator and denominator and it will change the soft max value for versicolor and virginica because it appears in those denominators now when we finally plug a predicted probability into the equation for cross entropy because the observed species is setosa the corresponding predicted probability is for setosa so we plug this equation into the cross entropy however if we had measurements from virginica then the soft max equation for virginica would give

however if we had measurements from virginica then the soft max equation for virginica would give us the corresponding predicted probability in other words if we have different observed species in the data then we can end up with different ways to calculate the cross entropy and because these equations are all a little different we end up with different derivatives of cross entropy with respect to the bias b sub 3. so in this stag quest we'll derive these different derivatives for cross entropy

the bias b sub 3. so in this stag quest we'll derive these different derivatives for cross entropy however you may have noticed that the bottom two derivatives are the same so i'm actually just going to derive one of these and leave the other for homework so let's get started with the derivative of the cross entropy for setosa with respect to b sub 3. first let's talk a little bit more about the predicted probability for setosa remember the predicted probability for setosa is the output from

predicted probability for setosa remember the predicted probability for setosa is the output from the soft max function and the output from the soft max function comes from the raw output values for setosa versicolor and virginica of these three crinkled surfaces only the green crinkled surface is directly influenced by b sub 3. remember the green crinkled surface is the sum of the blue and orange crinkled surfaces plus b sub 3. now we want to use gradient descent to optimize b sub 3 and that

crinkled surfaces plus b sub 3. now we want to use gradient descent to optimize b sub 3 and that means we need to take the derivative of the cross entropy with respect to b sub 3. and because the cross entropy is linked to b sub 3 by the predicted probability for setosa and the raw output for setosa we can use the chain rule solve for the derivative of the cross entropy with respect to b sub 3 the chain rule says that the derivative of the cross entropy with respect to b sub 3 is the derivative

chain rule says that the derivative of the cross entropy with respect to b sub 3 is the derivative of the cross entropy with respect to the predicted probability for setosa times the derivative of the predicted probability for setosa with respect to the raw output for setosa times the derivative of the raw output for setosa with respect to b sub 3. bam now let's clean our workspace and move these equations out of the way now we can solve for the derivative of the cross entropy with respect to

equations out of the way now we can solve for the derivative of the cross entropy with respect to the predicted probability for setosa by first plugging in the equation for the cross entropy and then just plugging in the derivative of negative one times the natural log and thus the derivative of the cross entropy with respect to the predicted probability for setosa is negative one divided by the predicted probability for setosa now let's solve for the second part the derivative of the predicted

probability for setosa now let's solve for the second part the derivative of the predicted probability for setosa with respect to its raw output value we start by plugging in the softmax equation for the predicted probability and if you remember from neural networks part 5 argmax and softmax or better yet from the soft max derivative step by step this derivative is the predicted probability for setosa times one minus the predicted probability for setosa if you don't remember this derivative you

times one minus the predicted probability for setosa if you don't remember this derivative you can one take my word for it or two check out the quest either way we plug it into the chain rule now let's solve for the final derivative the derivative of the raw output for setosa with respect to b sub 3. we start by plugging in the equation for the raw output for setosa remember that the blue and orange bent surfaces were created before we got to b sub 3. so the derivative of the blue bent surface

bent surfaces were created before we got to b sub 3. so the derivative of the blue bent surface with respect to b sub 3 is 0 because the blue bent surface is independent of b sub 3 and the derivative of the orange bent surface with respect to b sub 3 is also 0. lastly the derivative of b sub 3 with respect to b sub 3 is 1. now we just add everything up and the derivative of the raw output value for setosa with respect to b sub 3 is 1. so we multiply the other derivatives by 1. so technically

for setosa with respect to b sub 3 is 1. so we multiply the other derivatives by 1. so technically when the observed data is for setosa and thus the predicted probability for setosa is used to calculate the cross entropy then this product is the derivative of the cross entropy with respect to b sub 3. however it is usually simplified by multiplying everything by one and all that does is make the times one term go away poof then we cancel out these two predicted probabilities for setosa and

the times one term go away poof then we cancel out these two predicted probabilities for setosa and multiply everything by this negative one and lastly we move the negative 1 to the right so this looks like everyone else's solution and at long last when the predicted probability for setosa is used to calculate the cross entropy the derivative of the cross entropy with respect to b sub three is the predicted probability for setosa minus one bam in summary when the observed data is for setosa and

predicted probability for setosa minus one bam in summary when the observed data is for setosa and we use the predicted probability in other words the soft max output for setosa to calculate the cross entropy then the derivative of the cross entropy with respect to the bias b sub 3 is this the predicted probability for setosa minus 1. now let's see what happens when we calculate the derivative of the cross entropy for virginica with respect to b sub 3. remember the predicted probability for

of the cross entropy for virginica with respect to b sub 3. remember the predicted probability for virginica is the output from the soft max function and the output from the soft max function comes from the raw output values for setosa versicolor and virginica of these three crinkled surfaces only the green crinkled surface is directly influenced by b sub 3. the green crinkled surface represents the raw output for setosa and is one of the inputs to the soft max function and the green crinkled

the raw output for setosa and is one of the inputs to the soft max function and the green crinkled surface is the sum of the blue and orange crinkled surfaces plus b sub 3. now because the cross entropy is linked to b sub 3 by the predicted probability for virginica and the raw output for setosa we can use the chain rule to solve for the derivative of the cross entropy with respect to b sub 3. the chain rule says that the derivative of the cross entropy with respect to b sub 3 is the derivative

chain rule says that the derivative of the cross entropy with respect to b sub 3 is the derivative of the cross entropy with respect to the predicted probability for virginica times the derivative of the predicted probability for virginica with respect to the raw output for setosa times the derivative of the raw output for setosa with respect to b sub 3 bam now just like before we can solve for the derivative of the cross entropy with respect to the predicted probability for virginica by

for the derivative of the cross entropy with respect to the predicted probability for virginica by plugging in the equation for the cross entropy and then just plugging in the derivative of negative one times the natural log the derivative of the predicted probability for virginica with respect to the raw output for setosa is the negative predicted probability for setosa times the predicted probability for virginica if you don't remember that check out the quest now we just plug it into the

for virginica if you don't remember that check out the quest now we just plug it into the chain rule lastly the derivative of the raw output value for setosa with respect to b sub 3 is one just like we got earlier so we multiply the other derivatives by one so technically when the observed data is for virginica and thus the predicted probability for virginica is used to calculate the cross entropy this product is the derivative of the cross entropy with respect to b sub 3. however it is usually

this product is the derivative of the cross entropy with respect to b sub 3. however it is usually simplified by multiplying everything by one poof then we cancel out these two predicted probabilities for virginica and multiply everything by negative one and at long last when the predicted probability for virginica is used to calculate the cross entropy the derivative of the cross entropy with respect to b sub 3 is the predicted probability for setosa double bam in summary when the observed

respect to b sub 3 is the predicted probability for setosa double bam in summary when the observed data is for virginica and we use the predicted probability in other words the soft max output for virginica to calculate the cross entropy then the derivative of the cross entropy with respect to the bias b sub 3 is this the predicted probability for setosa note before we move on i want to mention that this predicted probability for setosa comes from using the measurements for petal and sepal

that this predicted probability for setosa comes from using the measurements for petal and sepal widths in the second row of the training data and this predicted probability for setosa comes from using the measurements for petal and sepal widths in the first row of the training data this difference isn't super important now but will become important later when we do back propagation small bam now when the observed measurements are for versicolor then following the same steps we use for

bam now when the observed measurements are for versicolor then following the same steps we use for virginica the derivative is also the predicted probability for setosa note before we move on i want to remind everyone that b sub 3 the parameter we want to optimize only directly influences the raw output for setosa and that is why these three derivatives are in terms of the predicted probability for setosa in other words if we had taken the derivatives with respect to b sub 4 which only directly

setosa in other words if we had taken the derivatives with respect to b sub 4 which only directly influences the raw output for versicolor then by the same process we went through earlier we would end up with different derivatives and lastly if we had taken the derivatives with respect to b sub 5 which only directly influences the raw output for virginica then by the same process we went through earlier we would end up with these derivatives now going back to the original derivatives with

earlier we would end up with these derivatives now going back to the original derivatives with respect to b sub 3 let's use this training data and use these derivatives to optimize the bias b sub 3 with back propagation first let's set the bias b sub 3 to some starting value in this case we'll use negative two now just so we can make sure back propagation is improving things let's calculate the total cross entropy for the training data by running it through the neural network da in the total

total cross entropy for the training data by running it through the neural network da in the total cross entropy for when b sub 3 equals negative 2 is 2.67 and we can plot that on a graph with values for b sub 3 on the x axis and total cross entropy on the y axis note if we just plugged in a bunch of values for b sub 3 and calculated the total cross entropy then we would get this pink curve now let's optimize the bias b sub 3 with back propagation to find the value for b sub 3 at the low point

optimize the bias b sub 3 with back propagation to find the value for b sub 3 at the low point in the curve in other words let's find the value for b sub 3 that minimizes the total cross entropy and that starts with the derivative of the cross entropy with respect to b sub 3. now since we have three observations and we'll make one prediction per observation we expand the summation so that there is one term per prediction now let's focus on the prediction made for the first observation because

is one term per prediction now let's focus on the prediction made for the first observation because the observed species is setosa we solve for the cross entropy using the predicted probability for setosa and the derivative of the cross entropy for setosa with respect to b sub 3 is the predicted probability for setosa minus one so we plug that in now we plug the petal and sepal measurements into the neural network do the math and plug the predicted probability for setosa 0.15 into the equation

the neural network do the math and plug the predicted probability for setosa 0.15 into the equation bam now let's focus on the prediction for the second observation because the observed species is virginica we solve for the cross entropy using the predicted probability for virginica and the derivative of the cross entropy for virginica with respect to b sub 3 is the predicted probability for setosa so we plug that in now we plug the petal and sepal measurements into the neural network do the

so we plug that in now we plug the petal and sepal measurements into the neural network do the math and plug the predicted probability for setosa 0.04 into the equation double bam now let's focus on the prediction for the third and final observation because the observed species is versicolor we solve for the cross entropy using the predicted probability for versicolor and the derivative of the cross entropy for versicolor with respect to b sub 3 is the predicted probability for setosa so we

cross entropy for versicolor with respect to b sub 3 is the predicted probability for setosa so we plug that in now we plug the petal and sepal measurements into the neural network do the math and plug the predicted probability for setosa 0.04 into the equation now we just add up the derivatives and get negative 0.7 and thus the slope of this tangent line is negative 0.77 now we plug the slope into the gradient descent equation for step size and in this example we'll set the learning rate to 1

the gradient descent equation for step size and in this example we'll set the learning rate to 1 and that means the step size is negative 0.77 now we use the step size to calculate the new value for b sub 3 by plugging in the old value for b sub 3 negative 2 and the step size negative 0.77 and the new value for b sub 3 is negative 1.23 then we just repeat the process each time using the new value for b sub 3 until the predictions no longer improve very much or we reach a maximum number of steps

for b sub 3 until the predictions no longer improve very much or we reach a maximum number of steps or we meet some other criteria in this case the predictions stop improving when b sub 3 equals negative 0.03 so we're done triple bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you

something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Neural Networks Part 8: Image Classification with Convolutional Neural Networks (CNNs)

convolutional neural networks are used for image classification and other stuff statquest hello i'm josh starmer and welcome to statquest today we're going to talk about neural networks part 8 image classification with convolutional neural networks note this stack quest assumes that you are already familiar with the main ideas behind neural networks the main ideas behind back propagation the main ideas behind the relu activation function and you should know about neural networks with multiple

ideas behind the relu activation function and you should know about neural networks with multiple inputs and outputs if not check out the quests the links are in the description below now imagine we have a friend named statsquatch and statsquatch wants to play tic-tac-toe against their computer unfortunately stat squad can't remember if you start with the letter x or the letter o so each time statsquatch plays tic-tac-toe against their computer the computer has to figure out if statsquatch drew

plays tic-tac-toe against their computer the computer has to figure out if statsquatch drew the letter x or the letter o the good news is that the computer can figure out if stat squads drew the letter x or o using a convolutional neural network bam because the letter o and the letter x are drawn on a computer screen we can zoom in on the letter o and the letter x and see that each image is just a bunch of pixels and in this case each pixel is represented by either a zero for a white pixel or a

bunch of pixels and in this case each pixel is represented by either a zero for a white pixel or a one for a black pixel so let's walk through step by step how a computer can classify this image as the letter o and this image as the letter x we will start with the image of the letter o now because this image is so small just 6 pixels by 6 pixels it is possible to make a normal everyday neural network that can correctly classify it we simply convert this 6 by 6 grid of pixels into a single

network that can correctly classify it we simply convert this 6 by 6 grid of pixels into a single column of 36 input nodes and connect the input nodes to a hidden layer so here we have 36 connections from the 36 input nodes to this node in the hidden layer now remember each connection has a weight that we have to estimate with back propagation so that means we need to estimate 36 weights in order to connect to this node however usually the first hidden layer has more than one node and each

to connect to this node however usually the first hidden layer has more than one node and each additional node adds an additional 36 weights that we need to estimate like i said because the original image is small 6x6 and black and white something like this could work however if we had a larger image like 100 pixels by 100 pixels which is still pretty small compared to real world pictures then we would end up having to estimate 10 000 weights per node in the hidden layer so this method doesn't

would end up having to estimate 10 000 weights per node in the hidden layer so this method doesn't scale very well another problem is that it's not clear that this neural network will still perform well if the image is shifted by one pixel for example if this is the image we used for training then it is not clear that the neural network will still recognize this letter o correctly if each pixel is shifted to the right by one lastly even complicated images like this teddy bear tend to have

is shifted to the right by one lastly even complicated images like this teddy bear tend to have correlated pixels for example any brownish pixel in this image tends to be close to other brown pixels and any white pixel tends to be near other white pixels and it might be helpful if we can take advantage of the correlation that exists among each pixel thus classification of large and complicated images is usually done using something called a convolutional neural network convolutional neural

images is usually done using something called a convolutional neural network convolutional neural networks do three things to make image classification practical one they reduce the number of input nodes two they tolerate small shifts in where the pixels are in the image and three take advantage of the correlations that we observe in complex images so let's go back to our tic-tac-toe game and see how a convolutional neural network can recognize this letter o the first thing a convolutional

see how a convolutional neural network can recognize this letter o the first thing a convolutional neural network does is apply a filter to the input image in convolutional neural networks a filter is just a smaller square that is commonly 3 pixels by 3 pixels and the intensity of each pixel in the filter is determined by back propagation in other words before training a convolutional neural network we start with random pixel values and after training with back propagation we end up with

network we start with random pixel values and after training with back propagation we end up with something more useful to apply the filter to the input image we overlay the filter onto the image and then we multiply together each overlapping pixel and then we add each product together to get a final value which in this case is three oh no it's the dreaded terminology alert in fancy math lango we call this sum of products a dot product by computing the dot product between the input and the

we call this sum of products a dot product by computing the dot product between the input and the filter we can say that the filter is convolved with the input and that's what gives convolutional neural networks their name small bam now we add a bias term to the output of the filter and put the final value into something called a feature map now in this example we slide the filter over 1 pixel however other convolutional neural networks might move over two or more pixels but in this example we

other convolutional neural networks might move over two or more pixels but in this example we just move over one pixel and calculate the dot product of the filter and overlapping pixels in the image add the bias term and put the final value into the feature map then we shift the filter over again and repeat until we have filled up the feature map bam we filled up the whole feature map to summarize we started with an input image of the letter o and then applied a filter to it in other words we

we started with an input image of the letter o and then applied a filter to it in other words we can evolved the filter with the input and added a bias term to the values and that gave us a feature map because each cell in the feature map corresponds to a group of neighboring pixels the feature map helps take advantage of any correlations there might be in the image bam now typically we run the feature map through a relu activation function and that means that all of the negative values are set

map through a relu activation function and that means that all of the negative values are set to zero and the positive values are the same as before in this case that means everything gets set to zero except for these two points so let's move this stuff over to make some room for the next step now we apply another filter to the new feature map however unlike before we simply select the maximum value and this filter usually moves in such a way that it does not overlap itself oh no it's another

and this filter usually moves in such a way that it does not overlap itself oh no it's another dreaded terminology alert when we select the maximum value in each region we are applying max pooling to see the effect that max pooling has in this example let's go back to the input image here we see that the upper left hand corner in the input image has an exact match with the filter and this results in the highest possible value in the feature map and then the max pooling step reduce this region

in the highest possible value in the feature map and then the max pooling step reduce this region to the one spot where the filter did the best job matching the input image in other words this region in the input image corresponds to this part of the feature map and the max pooling step selected the spot where the filter did the best job matching the input image likewise this region in the input image corresponds to this part of the feature map and the max pooling steps selected the spot where

image corresponds to this part of the feature map and the max pooling steps selected the spot where the filter did the best job matching the input image so we see that max pooling selects the spots where the filter did the best job matching the input image oh no it's another terminology alert alternatively we could calculate the average value for each region and that would be called average or mean pooling now going back to the max pooled layer let's move and shrink things to give us more room

pooling now going back to the max pooled layer let's move and shrink things to give us more room now let's convert the pooled layer into a column of input nodes lastly let's plug the input nodes into a normal everyday neural network this neural network has four input nodes a single hidden layer with a single node using the relu activation function and two output nodes one for the letter o and one for the letter x so given this image we run it through the filter to create the feature map then we

for the letter x so given this image we run it through the filter to create the feature map then we run the feature map through a relu activation function then we select the maximum value in each area and end up with these values in the input nodes now we multiply the values in the input nodes by their associated weights and add each term together and then add the bias and we end up with 0.34 and thus the x-axis coordinate for the activation function is 0.34 now we plug 0.34 into the relu

and thus the x-axis coordinate for the activation function is 0.34 now we plug 0.34 into the relu activation function and the output is 0.34 because 0.34 is greater than 0. now this connection from the hidden layer to the output for the letter o gives us one for the letter o and the connection from the hidden layer to the output for the letter x gives us 0 for the letter x so when the input is a picture of the letter o this convolutional neural network classifies it as a picture of the letter o

of the letter o this convolutional neural network classifies it as a picture of the letter o bam now let's see what happens when the input is a picture of the letter x note even though we have changed the input the filter is the same as before and we're doing max pooling just like before in the neural network with its weights and biases is the same as before so just like before we run the filter over the input to create the feature map now we run the feature map through the rel u and do max

over the input to create the feature map now we run the feature map through the rel u and do max pooling and the results of max pooling become the values for the input nodes now we run the values in the input nodes through the neural network and the result is 0 for the letter o and 1 for the letter x so when the input is a picture of the letter x this convolutional neural network classifies it as a picture of the letter x double bam now remember that we said convolutional neural networks help

a picture of the letter x double bam now remember that we said convolutional neural networks help reduce the number of inputs in the neural network in this case we started with a 6x6 image or 36 potential inputs and compress those down to just four inputs into the neural network we also said that convolutional neural networks take correlations into account and this is accomplished by the filter which looks at a region of pixels instead of just one at a time lastly we said that convolutional

which looks at a region of pixels instead of just one at a time lastly we said that convolutional neural networks can tolerate small shifts in where the pixels are in the image so let's see what happens when we shift the picture of the letter x one pixel to the right in other words will this convolutional neural network still decide if the input is a picture of the letter x and we see that the output value for the letter x 1.23 is much closer to 1 than the output value for the letter o negative

value for the letter x 1.23 is much closer to 1 than the output value for the letter o negative 0.2 so this convolutional neural network decided that the input image is of the letter x triple bam note if we wanted to we can make the output easier to interpret by running it through the soft max function or the argmax function also note this is about as simple a convolutional neural network as you can get however no matter how fancy the convolutional neural network is it's still based on filters

can get however no matter how fancy the convolutional neural network is it's still based on filters aka convolution applying an activation function to the filter output and pooling the output of the activation function now the next time statsquatch decides to play tic-tac-toe with their computer statsquatch can start with the letter x or the letter o and a convolutional neural network we'll figure it out bam now it's time for some shameless self-promotion if you want to review statistics and

it out bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stack quest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or

Hello, I'm Josh Starmer and welcome to StatQuest. Today we're going to talk about recurrent neural networks, and they're going to be clearly explained! Lightning and Grid are totally cool. Check them out when you've got some time. NOTE: This StatQuest assumes that you are already familiar with the main ideas behind neural networks, backpropagation and the ReLU activation function. If not, check out the 'Quest. ALSO NOTE: Although basic, or vanilla recurrent neural networks are awesome, they are

the 'Quest. ALSO NOTE: Although basic, or vanilla recurrent neural networks are awesome, they are usually thought of as a stepping stone to understanding fancier things like Long Short-Term Memory Networks and Transformers, which we will talk about in future StatQuests. In other words, every Quest worth taking take steps, and this is the first step. So with that said, let's say Hi to StatSquatch. Hi! And StatSquatch says, Hello! The other day I bought stock in a company called Get Rich Quick,

Hi! And StatSquatch says, Hello! The other day I bought stock in a company called Get Rich Quick, but the next day their stock price went down and I lost money. Bummer. So, I was thinking, maybe we could create a neural network to predict stock prices. Wouldn't that be cool? That sure would be cool 'Squatch, unfortunately the actual stock market is crazy complicated and we'd probably both get in a lot of trouble if we offered advice on how to make money with it, but if we go to that mystical

a lot of trouble if we offered advice on how to make money with it, but if we go to that mystical place called StatLand things are much simpler and there are far fewer lawyers. So let's build a neural network that predicts stock prices in StatLand. However, first let's just talk about stock market data in general. When we look at stock prices, they tend to change over time. For example, the price of this stock went up for four days before going down. Also, the longer a company has been traded

of this stock went up for four days before going down. Also, the longer a company has been traded on the stock market, the more data we'll have for it. For example, we have more time points for the company represented by the blue line then we have for the company represented by the red line. What that means is, if we want to use a neural network to predict stock prices, then we need a neural network that works with different amounts of sequential data. In other words, if we want to predict the

that works with different amounts of sequential data. In other words, if we want to predict the stock price for the Blue Line company on day 10, then we might want to use the data from all nine of the preceding days. In contrast, if we wanted to predict the stock price for the Red Line company on day 10, then we would only have data for the preceding five days. So we need the neural network to be flexible in terms of how much sequential data we use to make a prediction. This is a big difference

flexible in terms of how much sequential data we use to make a prediction. This is a big difference compared to the other neural networks we've looked at in this series. For example, in Neural Networks Clearly Explained, we examined a neural network that made predictions using one input value, no more and no less. And if you saw the StatQuest on neural networks with multiple inputs and outputs, you saw this neural network that made predictions using two input values, no more and no less. And in

saw this neural network that made predictions using two input values, no more and no less. And in the StatQuest on Deep Learning Image Classification, you saw a neural network that made a prediction using an image that was six pixels by six pixels, no bigger and no smaller. However, now we need a neural network that can make a prediction using the nine values we have for the blue company and make a prediction using the five values we have for the red company. The good news is that one way to

a prediction using the five values we have for the red company. The good news is that one way to deal with the problem of having different amounts of input values is to use a Recurrent Neural Network. Just like the other neural networks that we've seen before, recurrent neural networks have weights, biases, layers and activation functions. The big difference is that recurrent neural networks also have feedback loops. And, although this neural network may look like it only takes a single input

have feedback loops. And, although this neural network may look like it only takes a single input value, the feedback loop makes it possible to use sequential input values, like stock market prices collected over time, to make predictions. To understand how, exactly, this recurrent neural network can make predictions with sequential input values, let's run some of StatLand's stock market data through it. In StatLand, if the price of a stock is low for two days in a row, then, more often than

it. In StatLand, if the price of a stock is low for two days in a row, then, more often than not, the price remains low on the next day. In other words, if yesterday and today's stock price is low, then tomorrow's price should also be low. In contrast, if yesterday's price was low and today's price is medium, then tomorrow's price should be even higher. And when the price decreases from high to medium, then tomorrow's price will be even lower. Lastly, if the price stays high for two days in a

medium, then tomorrow's price will be even lower. Lastly, if the price stays high for two days in a row, then the price will be high tomorrow. Now that we see the general trends in stock prices in StatLand, we can talk about how to run yesterday and today's data through a recurrent neural network to predict tomorrow's price. The first thing we'll do is scale the prices so that low equals 0, medium equals 0.5, and high equals 1. Now let's run the values for yesterday and today through this

medium equals 0.5, and high equals 1. Now let's run the values for yesterday and today through this recurrent neural network and see if it can correctly predict tomorrow's value. Now, because the recurrent neural network has a feedback loop, we can enter yesterday and today's values into the input sequentially. We'll start by plugging yesterday's value into the input. Now we can do the math just like we would for any other neural network. Beep. Boop. Beep. Boop. Boop. At this point, the output

like we would for any other neural network. Beep. Boop. Beep. Boop. Boop. At this point, the output from the activation function, the y axis coordinate that we will call Y sub 1, can go two places. First Y sub 1 can go towards the output. And if we go that way and do the math beep, boop, boop then the output is the predicted value for today. However, we're not interested in the predicted value for today because we already have the actual value for today. Instead, we want to use both yesterday

today because we already have the actual value for today. Instead, we want to use both yesterday and today's value to predict tomorrow's value. So, for now, we'll ignore this output, and instead, focus on what happens with this feedback loop. The key to understanding how the feedback loop works is this summation. The summation allows us to add Y sub 1 times W sub 2, which is based on yesterday's value, to the value from today times W sub 1. In other words, the feedback loop allows both

value, to the value from today times W sub 1. In other words, the feedback loop allows both yesterday and today's values to influence the prediction. Hey, this feedback loop has got me all turned around. Is there an easier way to see how this works? Yes! There's an easier way to see what's going on. Instead of having to remember which value is in the loop, and which value is in the input, we can unroll the feedback loop by making a copy of the neural network for each input value. Now, instead

unroll the feedback loop by making a copy of the neural network for each input value. Now, instead of pointing the feedback loop to the sum in the first copy, we can point it to the sum in the second copy. By unrolling the recurrent neural network, we end up with a new network that has two inputs and two outputs. The first input is for yesterday's value, and if we do the math straight through to the first output like we did earlier, we get the predicted value for today. However, as we saw

to the first output like we did earlier, we get the predicted value for today. However, as we saw earlier, we can ignore this output. This second input is for today's value and the connection between the first activation function and the  second summation allows both yesterday and today's values to influence the final output, which gives us the predicted value for tomorrow. Now, when we put yesterday's value into the first input and we do the math just like before beep boop beep boop then we

value into the first input and we do the math just like before beep boop beep boop then we follow the connection from the first activation function to the summation in the second copy of the neural network. Now we put today's value into the second input and keep doing the math beep boop beep boop beep boop beep and that gives us the predicted value for tomorrow, zero, which is consistent with the original observation. In other words, the recurrent neural network correctly predicted tomorrow's

original observation. In other words, the recurrent neural network correctly predicted tomorrow's value. Likewise, when we run yesterday and today's values for the other scenarios through the recurrent neural network we predict a correct values for tomorrow. This recurrent neural network performs great with two days worth of data, but what if we have three days of data? When we want to use three days of data to make a prediction about tomorrow's price, like this, then we just keep unrolling the

of data to make a prediction about tomorrow's price, like this, then we just keep unrolling the recurrent neural network until we have an input for each day of data. Then we plug the values into the inputs, always from the oldest to the newest. In this case, that means we start by plugging in the value for the day before yesterday, then we plug in yesterday's value, and then we plug in today's value. And when we do the math, the last output gives us the prediction for tomorrow. NOTE: Regardless

And when we do the math, the last output gives us the prediction for tomorrow. NOTE: Regardless of how many times we unroll a recurrent neural network, the weights and biases are shared across every input. In other words, even though this unrolled network has three inputs the weight, W sub 1, is the same for all three inputs. And the bias, B sub 1, is also the same for all three inputs. Likewise, all of the other weights and biases are shared. So, no matter how many times we unroll a recurrent

all of the other weights and biases are shared. So, no matter how many times we unroll a recurrent neural network, we never increase the number of weights and biases that we have to train. Okay, now that we've talked about what makes basic recurrent neural networks so cool, let's briefly talk about why they are not used very often. One big problem is that the more we unroll a recurrent neural network, the harder it is to train. This problem is called The Vanishing / Exploding Gradient Problem.

the harder it is to train. This problem is called The Vanishing / Exploding Gradient Problem. Which is also known as the "hey wait, where the gradient go?" problem. In our example, The Vanishing / Exploding Gradient Problem has to do with the weight along the squiggle that we copy each time we unroll the network. NOTE: To make it easier to understand the Vanishing / Exploding Gradient Problem, we're going to ignore the other weights and biases in this network and just focus on W sub 2. Also,

we're going to ignore the other weights and biases in this network and just focus on W sub 2. Also, just to remind you when we optimize neural networks with backpropagation, we first find the derivatives, or gradients, for each parameter. We then plug those gradients into the gradient descent algorithm to find the parameter values that minimize a loss function, like the sum of the squared residuals. Bam. Now, even though the Vanishing / Exploding Gradient Problem starts with Vanishing, we're

Bam. Now, even though the Vanishing / Exploding Gradient Problem starts with Vanishing, we're going to start by showing how a gradient can explode. In our example, the gradient will explode when we set W sub 2 to any value larger than one. So let's set W sub 2 equal to 2. Now, the first input value, input sub 1, will be multiplied by 2 on the first squiggle and then multiplied by 2 on the next squiggle and again on the next squiggle and again  on the last squiggle. In other words, since we

squiggle and again on the next squiggle and again  on the last squiggle. In other words, since we unrolled the recurrent neural network four times, we multiply the input value by W sub 2, which is 2, raised to the number of times we unrolled, which is 4. And that means the first input value is amplified 16 times before it gets to the final copy of the network. Now, if we had 50 sequential days of stock market data, which to be honest, really isn't that much data, then we would unroll the

of stock market data, which to be honest, really isn't that much data, then we would unroll the network 50 times, and 2 raised to the 50 power is a huge number. And this huge number is why they call this an Exploding Gradient Problem. If we tried to train this recurrent neural network with backpropagation, this huge number would find its way into some of the gradients, and that would make it hard to take small steps to find the optimal weights and biases. In other words, in order to find the

to take small steps to find the optimal weights and biases. In other words, in order to find the parameter values that give us the lowest value for the loss function, we usually want to take relatively small steps. Bam. However, when the gradient contains a huge number, then we'll end up taking relatively large steps and instead of finding the optimal parameter we will just bounce around a lot. Bummer. One way to prevent the Exploding Gradient Problem would be to limit W Sub 2 to values less

Bummer. One way to prevent the Exploding Gradient Problem would be to limit W Sub 2 to values less than 1. However, this results in the Vanishing Gradient Problem. "Hey, wait, where the gradient go?" To illustrate the Vanishing Gradient Problem, let's set W sub 2 to 0.5. Now, just like before, we multiply the first input by W sub 2 raised to the number of times we unroll the network. So if we have 50 sequential input values, that means multiplying input sub 1 by 0.5 raised to the 50th power and

50 sequential input values, that means multiplying input sub 1 by 0.5 raised to the 50th power and 0.5 raised to the 50th power is a number super close to zero. Because this number is super close to zero. This is called The Vanishing Gradient Problem. Now when optimizing a parameter, instead of taking steps that are too large, we end up taking steps that are too small. And as a result, we end up hitting the maximum number of steps we are allowed to take before we find the optimal value. Hey,

hitting the maximum number of steps we are allowed to take before we find the optimal value. Hey, Josh, these Vanishing / Exploding Gradients are a total bummer. Is there anything we can do about them? Yes, and we'll talk about a popular solution called Long Short-Term Memory Networks in the next StatQuest. Now, it's time for some Shameless Self Promotion. If you want to review statistics and machine learning offline, check out my book. The StatQuest Illustrated Guide to Machine Learning at

machine learning offline, check out my book. The StatQuest Illustrated Guide to Machine Learning at statquest.org. It's over 300 pages of total awesomeness. Hooray! We've made it to the the end of another exciting StatQuest. If you liked this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, consider contributing to my patreon campaign, becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie, or just donate. The links are

buying one or two of my original songs or a t-shirt or a hoodie, or just donate. The links are in the description below. Alright, until next time Quest on!

Long short-term memories. I've got them both and so does this network. Hooray! StatQuest! Hello, i'm Josh Starmer and welcome to StatQuest. Today we're going to talk about a Long Short-Term Memory, LSTM, and it's going to be clearly explained! Lightning, yeah! Gonna deploy your models in just a few days not months. Yeah! This StatQuest is also brought to you by the letters A, B and C. A always. B be. C curious. Always be curious. Note: This StatQuest assumes you are already familiar with

B be. C curious. Always be curious. Note: This StatQuest assumes you are already familiar with recurrent neural networks and the vanishing exploding gradient problem. If not, check out the Quest. Also note: Although Long Short-Term Memory totally awesome. It is also a stepping stone to learning about Transformers which we will talk about in future StatQuests. In other words, today we're taking the second step in our Quest. Now, in the StatQuest on basic, vanilla recurrent neural networks we saw

second step in our Quest. Now, in the StatQuest on basic, vanilla recurrent neural networks we saw how we can use a feedback loop to unroll a network that works well with different amounts of sequential data. However, we also saw that when we plug in the numbers, when the weight on the feedback loop is greater than one, and in this example the weight is 2, then when we do the math we end up multiplying the input by the weight, which in this case is 2, raised to the number of times we unrolled

the input by the weight, which in this case is 2, raised to the number of times we unrolled the network. And thus if we had 50 sequential data points, like 50 days of stock market data, which isn't really that much, then we would raise 2 by 50. And 2 to the 50th power is a huge number. And this  huge number would cause the gradient, which we need for gradient descent, to explode. Kaboom! Alternatively, we saw that if the weight on the feedback loop was less than 1, and now we have it set to

we saw that if the weight on the feedback loop was less than 1, and now we have it set to 0.5, then we'll end up multiplying the input value by 0.5 raised to the 50th power. And 0.5 raised to the 50th power is a number super close to zero. And this number super close to 0 would cause the gradient, which we need for gradient descent to vanish. Poof! In summary, basic vanilla recurrent neural networks are hard to train because the gradients can explode. Kaboom! Or vanish. Poof! The good news is

are hard to train because the gradients can explode. Kaboom! Or vanish. Poof! The good news is that it doesn't take much to extend the basic vanilla recurrent neural network so that we can avoid this problem. So today we're to talk about Long Short-Term Memory,  LSTM, which is a type of recurrent neural network that is designed to avoid the exploding / vanishing gradient problem. Hooray! The main idea behind how Long Short-Term Memory works is that instead of using the same feedback loop

main idea behind how Long Short-Term Memory works is that instead of using the same feedback loop connection for events that happened long ago and events that just happened yesterday to make a prediction about tomorrow, Long Short-Term Memory uses two separate paths to make predictions about tomorrow. One path is for long-term memories, and one is for short-term memories. Bam! Now that we understand the main idea behind Long Short-Term Memory, that it uses different paths for long and

understand the main idea behind Long Short-Term Memory, that it uses different paths for long and short-term memories, let's talk about the details. The bad news is that compared to a basic vanilla recurrent neural network, which unrolls from a relatively simple unit, Long Short-Term Memory is based on a much more complicated unit. Holy smokes, this looks really complicated! Don't worry Squatch, we will go through this one step at a time so that you can easily understand each part. Bam! Note:

we will go through this one step at a time so that you can easily understand each part. Bam! Note: Unlike the network's we've used before in this series, Long Short-Term Memory uses sigmoid activation functions and tan-h activation functions. So let's quickly talk about sigmoid and tan-h activation functions. In a nutshell, the sigmoid activation function takes any x-axis coordinate and turns it into a y-axis coordinate between 0 and 1. For example, when we plug in this x-axis coordinate, 10,

into a y-axis coordinate between 0 and 1. For example, when we plug in this x-axis coordinate, 10, into the equation for the sigmoid activation function, we get 0.99995 as the y-axis coordinate. And if we plug in this x-axis coordinate, -5, then we get 0.01 as the y-axis coordinate. In contrast, the tan-h, or hyperbolic tangent activation function takes any x-axis coordinate and turns it into a y-axis coordinate between -1 and 1. For example, if we plug this x-axis coordinate, 2, into the

a y-axis coordinate between -1 and 1. For example, if we plug this x-axis coordinate, 2, into the equation for the tan-h activation function, we get 0.96 as the y-axis coordinate. And if we plug in this x-axis coordinate, -5, we get -1 as the y-axis coordinate. So, now that we know that the sigmoid activation function turns any input into a number between 0 and 1 and the tan-h activation function turns any input into a number between -1 and 1, let's talk about how the Long Short-Term Memory

turns any input into a number between -1 and 1, let's talk about how the Long Short-Term Memory unit works. First, this green line that runs all the way across the top of the unit is called the cell state and represents the long-term memory. Although the long-term memory can be modified by this multiplication and then later by this addition, you'll  notice that there are no weights and biases that can modify it directly. This lack of weights allows the long-term memories to flow through a

that can modify it directly. This lack of weights allows the long-term memories to flow through a series of unrolled units without causing the gradient to explode or vanish. Now, this pink line, called the hidden state, represents the short-term memories. And as we can see, the short-term memories are directly connected to weights that can modify them. To understand how the long and short-term memories interact and result in predictions, let's run some numbers through this unit. First, for the

interact and result in predictions, let's run some numbers through this unit. First, for the sake of making the math interesting, let's just assume that the previous long-term memory is 2, and the previous short-term memory is 1,  and let's set the input value to 1. Now that we have plugged in some numbers, let's do the math to see what happens in the first stage of a Long Short-Term Memory Unit. We'll start with the short-term memory, 1, times its weight, 2.7. Then we multiply the input, 1, by

We'll start with the short-term memory, 1, times its weight, 2.7. Then we multiply the input, 1, by its weight, 1.63. And then we add those two terms together. And, lastly, we add this bias, 1.62, to get 5.95, an x-axis coordinate for the sigmoid activation function. Now we plug the x-axis coordinate into the equation for the sigmoid activation and function and we get the y-axis coordinate 0.997. Lastly, we multiply the long-term memory, 2, by the y-axis coordinate, 0.997, and the result is

Lastly, we multiply the long-term memory, 2, by the y-axis coordinate, 0.997, and the result is 1.99. So this first stage of the Long Short-Term Memory unit reduced the long-term memory by a little bit. In  contrast, if the input to the LSTM was a relatively large negative number, like -10, then, after calculating the x-axis coordinate, the output from the sigmoid activation function will be 0. And that means the long-term memory would be completely forgotten because anything multiplied by 0 is

that means the long-term memory would be completely forgotten because anything multiplied by 0 is 0. Thus, because the  sigmoid activation function turns any input into a number between 0 and 1, the  output determines what percentage of the long-term memory is remembered. To summarize, the first stage in a Long Short-Term Memory unit determines what percentage of the long-term memory is remembered. Bam! Oh no, it's the dreaded terminology alert. Even though  this part of the Long Short-Term

Bam! Oh no, it's the dreaded terminology alert. Even though  this part of the Long Short-Term Memory unit determines what percentage of the long-term memory will be remembered, it is usually called the Forget Gate. Small bam. Now that we know with the first part of the LSTM unit does, it determines what percentage of the long-term memory will be remembered, let's go back to when the input was 1 and talk about what the second stage does. In a nutshell, the block on the right combines the

was 1 and talk about what the second stage does. In a nutshell, the block on the right combines the short-term memory and the input to create a potential long-term memory. And the block on the left determines what percentage of that potential memory to add to the long-term memory. So let's plug the numbers in and do the math to see how a potential memory is created and how much of it is added to the the long-term memory. Starting with the block furthest to the right, we multiply the short term

the the long-term memory. Starting with the block furthest to the right, we multiply the short term memory and the input by their respective weights. Then we add those values together and add a bias term to get 2.03, the input value for the tan-h activation function. Now we plug 2.03 into the equation for the tan-h activation function and we get the y-axis coordinate, 0.97. Remember the tan-h activation function turns any input into a number between -1 and 1. And in this case, when the input to

function turns any input into a number between -1 and 1. And in this case, when the input to the LSTM is 1, then after calculating the x-axis coordinate, the tan-h activation function gives us an output close to 1. In contrast, if the input to the LSTM was -10, then after calculating the x-axis coordinate, the output from the tan-h activation function would be -1. Going back to when the input to the LSTM was 1, we have a potential memory, 0.97, based on the short-term memory and the input. Now

the LSTM was 1, we have a potential memory, 0.97, based on the short-term memory and the input. Now the LSTM has to decide how much of this potential memory to save. And this is done using the exact same method we used earlier when we determined what percentage of the long-term memory to remember. In other words, after multiplying the short-term memory and the input  by weights and adding those products together and adding a bias, we get 4.27, the x-axis input value for the sigmoid activation

products together and adding a bias, we get 4.27, the x-axis input value for the sigmoid activation function. Now we plug the x-axis coordinate into the equation for the sigmoid activation function and we get the y-axis coordinate 1.0. And that means the entire potential long-term memory is retained, because multiplying it by 1 doesn't change it. Note: If the original input value was -10, then the percentage of the potential memory to remember would be 0, so we would not add anything to the

the percentage of the potential memory to remember would be 0, so we would not add anything to the long-term memory. Now, going back to when the original input value was 1, we add 0.97 to the existing long-term memory and we get a new long-term memory, 2.96. Double bam! Oh no, it's the dreaded terminology alert! Even though this part of the Long Short-Term Memory unit determines how we should update the long-term memory, it's usually called the input gate. Tiny bam. Now that we have a new

update the long-term memory, it's usually called the input gate. Tiny bam. Now that we have a new long-term memory, we're ready to talk about the final stage in the LSTM. This final stage updates the short-term memory. We start with the new long-term memory and use it as input to the tan-h activation function. After plugging 2.96 into the tan-h activation function, we get 0.99. 0.99 represents a potential short-term memory. Now, the LSTM has to decide how much of this potential short-term

a potential short-term memory. Now, the LSTM has to decide how much of this potential short-term memory to pass on. And this is done using the exact same method we used two times earlier: When we determined, what percentage of the original long-term memory to remember and when we determined what percentage of the potential long-term memory to remember. In all three cases, we use a sigmoid activation function to determine what percent the LSTM remembers. In this case when we do the math, we get

function to determine what percent the LSTM remembers. In this case when we do the math, we get 0.99. And we create the new short-term memory by multiplying 0.99 by 0.99 to get 0.98. This new short-term memory, 0.98, is also the output from this entire LSTM unit. Oh no, it's the dreaded  terminology alert again. Because the new short-term memory is the output from this entire  LSTM unit, this stage is called the  Output gate. And at long last, the common terminology seems reasonable to me.

stage is called the  Output gate. And at long last, the common terminology seems reasonable to me. Triple bam! Now that we understand how all three stages in a single LSTM unit work, let's see them in action with real data. Here we have stock prices for two companies Company A and Company B. On the  y-axis we have the stock value and on the x-axis we have the day the value was recorded. Note: If we overlap the data from the two companies, we see that the only differences occur on day 1 and on

we overlap the data from the two companies, we see that the only differences occur on day 1 and on day 5. On day 1, Company A is at 0 and Company B is at 1. And on day five, Company A returns to 0 and Company B returns to 1. On  all of the other days, days 2, 3 and 4, both companies have the exact same values. Given this sequential data, we want the LSTM to remember what happened on day 1 so it can correctly predict what will happen on day 5. In other words, we're going to sequentially run the

correctly predict what will happen on day 5. In other words, we're going to sequentially run the data from days 1 through 4 through an unrolled LSTM and see if it can correctly predict the values for day 5 for both companies. So let's go back to the LSTM and initialize the long and short-term memories to 0. Now, because this single LSTM unit is taking up the whole screen, let's shrink it down to this smaller simplified diagram. Now, if we want to sequentially run Company A's values from

to this smaller simplified diagram. Now, if we want to sequentially run Company A's values from days 1 through 4 through this LSTM, then we'll start by plugging the value for day 1, which is 0, into the  Input. Now, just like before we do the math. Boop be doop boop boop boop boop boop. And after doing the math, we see that the new or updated long-term memory is -0.20 and the new updated short-term memory is -0.13. So we plug in -0.2 for the updated long-term memory and -0.1, rounded, for the

memory is -0.13. So we plug in -0.2 for the updated long-term memory and -0.1, rounded, for the updated short-term memory. Now we unroll the LSTM using the updated memories and plug the  from day 2, 0.5, into the input. Then the LSTM does its math using the exact same weights and biases as before, and we end up with these updated long and short-term memories. Note: If you can't remember the StatQuest on recurrent neural networks very well, the reason the LSTM reuses the exact same weights and

on recurrent neural networks very well, the reason the LSTM reuses the exact same weights and biases is so that it can handle data sequences of different lengths. Small bam. Anyway, we unroll the LSTM again and plug in the value for day 3. Then the LSTM does the math again using the exact same weights and biases and gives us these updated memories. Then we unroll the LSTM one last time and plug in the value for day 4. And the LSTM does the math again using the exact same weights and biases and

the value for day 4. And the LSTM does the math again using the exact same weights and biases and gives us the final memories. And the final short-term memory, 0.0, is the output from the unrolled LSTM. And that means the  Output from the LSTM correctly predicts Company A's value for day 5. Bam! Now that we have shown that the LSTM can correctly predict the value on day 5 for Company A, let's show how the same LSTM, with the same weights and biases can correctly predict the value on day 5 for

how the same LSTM, with the same weights and biases can correctly predict the value on day 5 for Company B. Note:  Remember, on days 1 through 4, the only difference between the companies occurs on day 1, and that means the LSTM has to remember what happened on day 1 in order to correctly predict the different output values on day 5. So let's start by initializing the long and short-term memories to 0. Now, let's plug in the value for day one from Company B, 1. And the LSTM does the math, just

0. Now, let's plug in the value for day one from Company B, 1. And the LSTM does the math, just like before using the exact same weights and biases. Beep boop. After doing the math, we see that the updated long-term memory is 0.5 and the updated short-term memory is 0.28. So we plug in 0.5 for the updated long-term memory and 0.3, rounded, for the updated short-term memory. Now we unroll the LSTM and do the math with the remaining input values. And the final short-term memory, 1.0, is the

LSTM and do the math with the remaining input values. And the final short-term memory, 1.0, is the output from the unrolled LSTM. And that means the output from the LSTM correctly predicts Company B's value for day 5. Double bam! In summary, using separate paths for long-term memories and short-term memories, Long Short-Term Memory networks avoid the exploding/vanishing gradient problem, and that means we can unroll them more times to accommodate longer sequences of input data than a vanilla

means we can unroll them more times to accommodate longer sequences of input data than a vanilla recurrent neural network. At first, i was scared of how complicated the LSTM was, but now I understand. Triple Bam! Now it's time for  some Shameless Self-Promotion. If you want to review statistics and machine learning offline, check out the StatQuest PDF study guides and my book the StatQuest Illustrated Guide to Machine Learning at statquest.org. There's something for everyone! Hooray! We've made

Guide to Machine Learning at statquest.org. There's something for everyone! Hooray! We've made it to the end of another exciting StatQuest. If you liked this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, consider contributing to my Patreon campaign becoming a channel member, buying one or two of my original songs or a t-shirt or a hoodie or just donate, the links are in the description below. Alright, until next time Quest on!

If you want to turn words into numbers... ...and you want those numbers to make sense... ...then use word embeddings and similar words will have similar numbers! Hooray! StatQuest! Hello, I'm Josh Starmer and welcome to StatQuest! Today we're going to talk about Word Embedding and word2vec and they're going to be clearly explained. Lightning makes using the cloud just as easy to use as your laptop and that's cool! This StatQuest is also brought to you by the letters 'A', 'B', and 'C'. 'A'

laptop and that's cool! This StatQuest is also brought to you by the letters 'A', 'B', and 'C'. 'A' always, 'B' be, 'C' curious. Always be curious! Also, I want to give a special thanks to Alex Lavaee and the students at Boston University's Spark! for letting me test this StatQuest out on them. Note: This StatQuest is focused on how neural networks can be used to create word embeddings and assumes that you are already familiar with the basic ideas of neural networks and backpropagation, as well

that you are already familiar with the basic ideas of neural networks and backpropagation, as well as the main ideas about the softmax function and cross entropy. If not, check out the Quests. Words are great. We can use them to communicate all kinds of cool ideas. For example: Hey Norm, isn't StatQuest awesome? It sure is Squatch! Unfortunately, a lot of machine learning algorithms, including neural networks, don't work well with words. Hey, Neural Network, isn't StatQuest awesome! So if we

neural networks, don't work well with words. Hey, Neural Network, isn't StatQuest awesome! So if we want to plug words into a neural network, or some other machine learning algorithm, we need a way to turn the words into numbers. 24. 0.3 5.1 Yes, StatQuest is awesome! Bam! One super easy way to convert words into numbers is to just assign each word to a random number. For example, if someone just saw the hit movie Troll 2 and said, "Troll 2 is great!", we can just give each word a random

just saw the hit movie Troll 2 and said, "Troll 2 is great!", we can just give each word a random number. Note: For the purposes of this StatQuest, were going to treat "Troll 2" as a single word. Anyway, if the next person said, "Troll 2 is awesome!", then we could reuse the random numbers that we already selected for "Troll 2" and "is", and assign a new random number to the new word, "awesome!". In theory, this is fine, but it means that even though "great!" and "awesome!" mean similar things

In theory, this is fine, but it means that even though "great!" and "awesome!" mean similar things and are used in similar ways, they have very different numbers associated with them, 4.2 and - 32.1, and that means the neural network will probably need a lot more complexity and training because learning how to correctly process the word "great!", won't help the neural network correctly use the word "awesome!". So it would be nice if similar words that are used in similar ways could be given

word "awesome!". So it would be nice if similar words that are used in similar ways could be given similar numbers so that learning how to use one word will help learn how to use the other at the same time. And because the same words can be used in different contexts, or made plural, or used in some other way, it might be nice to assign each word more than one number, so that the neural network can more easily adjust to different contexts. For example, the word "great" can be used in a positive

more easily adjust to different contexts. For example, the word "great" can be used in a positive way, like "StatQuest is great!", and it can also be used in a sarcastic, negative way, like "My cell phone is broken, great", and it would be nice if we had one number that could keep track of the positive ways that "great" is used and a different number to keep track of the negative ways. Hey Josh, deciding what words are similar and used in similar contexts sounds like a lot of work. And using

deciding what words are similar and used in similar contexts sounds like a lot of work. And using more than one number per word to account for different contexts sounds like even more work. Don't worry Squatch. The good news is that we can get a super simple neural network to do all of the work for us. Bam! To show how we can get a super simple neural network to figure out what numbers should go with different words. Let's imagine we have two phrases: "Troll 2 is great!" and "Gymkata is

go with different words. Let's imagine we have two phrases: "Troll 2 is great!" and "Gymkata is great!". Anyway, both phrases have two words, "Troll 2" and "Gymkata", in similar contexts, because someone, and I'm not going to name names, thinks that these two terrible movies are great! So, in order to create a neural network to figure out what numbers we should associate with each word, the first thing we do is create inputs for each unique word. In this case, we have four unique words in the

thing we do is create inputs for each unique word. In this case, we have four unique words in the training data, so we have four inputs. Now we connect each input to at least one activation function. Note: This activation function uses the identity function, and thus, the input value is the same as the output value. In other words, this activation function doesn't do anything except give us a place to do addition. The number of activation functions corresponds to how many numbers we want to

place to do addition. The number of activation functions corresponds to how many numbers we want to associate with each word. And the weights on those connections will ultimately be the numbers that we associate with each word. Now, in this example, we want to associate two numbers with each word. So that means we'll use two activation functions. And the weights on the connections to the second activation function will be another number associated with each word. However, like always, these

activation function will be another number associated with each word. However, like always, these weights start out with random values that we will optimize with backpropagation. Now, in order to do backpropagation, we have to make predictions. So we'll use the input word to predict the next word in the phrase. So if the phrase is "Troll 2 is great", then we can use the word "Troll 2" to predict the word "is". In other words, if the input word is "Troll 2", and we indicate that by putting a 1

the word "is". In other words, if the input word is "Troll 2", and we indicate that by putting a 1 into the "Troll 2" input and 0s into all of the other inputs, then we want the output for the word, "is", to have the largest value. And if the input word is "is", which means that the input for "is" is is 1 and all of the other inputs are 0, then we want the output for the next word, "great!", to have the largest value. Lastly, if the input word is "Gymkata", which means that the input for

to have the largest value. Lastly, if the input word is "Gymkata", which means that the input for "Gymkata" is 1 and all of the other inputs are 0, then we want the output for the next word, "is", to have the largest value. In order to make these predictions, we connect the activation functions to outputs and we add weights to those connections with random initialization values. And then we run the outputs through the softmax function because we have multiple outputs for classification. And

the outputs through the softmax function because we have multiple outputs for classification. And that means we can use the cross entropy loss function for backpropagation. Again, the goal is to train this neural network so that it correctly predicts the next word in a phrase. And now, before training, if we plug the word "Troll 2" into the input and do the math, we get lucky and correctly predict the next word, "is", but just barely. However, when we plug the word "is" into the input and do

the next word, "is", but just barely. However, when we plug the word "is" into the input and do the math, then we fail to correctly predict the next word "great!" and instead predict "is". So we need to train this neural network. However, before we optimize all of the weights, remember that I said that these weights would be the numbers associated with each word. And since, in this example, we have two weights for each word, we can plot each word on a graph that has the weight values to the top

two weights for each word, we can plot each word on a graph that has the weight values to the top activation function on the x axis and the weight values the bottom activation function on the y-axis. For example, the word "Troll 2" goes here, because it's top weight is 0.38 and its bottom weight is 0.42. Likewise, the word "is" goes here, and the word "great" goes here, and "Gymkata" goes here. Now, with this graph, we see that the words "Troll 2" and "Gymkata" are currently no more similar to

with this graph, we see that the words "Troll 2" and "Gymkata" are currently no more similar to each other as they are to any of the other words. However, because both words appear in the same context in the training data, we hope that backpropagation will make their weights more similar. So we start with these weights and we end up with these new weights. The new weights on the connections from the inputs to the activation functions are the word embeddings. And when we plot the words using the

inputs to the activation functions are the word embeddings. And when we plot the words using the new weights, which are now the embeddings, we see that "Troll 2" and "Gymkata" are now relatively close to each other compared to the other words in the training data. Bam! Now that we've trained the neural network, we can see how well it predicts the next word. For example, if we plug the word "Troll 2" into the input and do the math, then the output for the next word, "is", is 1 and everything

2" into the input and do the math, then the output for the next word, "is", is 1 and everything else is 0, and that is exactly what we wanted. And when we plug the word "is" into the input and do the math, then the output for the next word in both phrases "great!" is 1 and everything else is 0. Lastly, when we plug the word "Gymkata" into the input and do the math, then the output for the next word, "is", is 1 and everything else is 0. Bam! Now, before we talk about a popular word embedding

word, "is", is 1 and everything else is 0. Bam! Now, before we talk about a popular word embedding tool, word2vec, let's summarize what we've learned so far. First, rather than just assign random numbers to words, we can train a relatively simple neural network to assign numbers for us. The advantage of using a neural network is that it can use the context of words in the training data set to optimize weights that can be used for the embeddings. And this can result in similar words ending up

weights that can be used for the embeddings. And this can result in similar words ending up with similar embeddings. Lastly, having similar words with similar embeddings means training a neural network to process language is easier because learning how one word is used helps learn how similar words are used. Double bam! Now, so far, we've shown we can train a neural network to predict the next word in each phrase. But just predicting the next word doesn't give us a lot of context to understand

in each phrase. But just predicting the next word doesn't give us a lot of context to understand each one. So now let's learn about the two strategies that word2vec, a popular method for creating word embeddings, uses to include more context. The first method, called "continuous bag-of-words", increases the context by using the surrounding words to predict what occurs in the middle. For example, the continuous bag-of-words method could use the words "Troll 2" and "great!" to predict the word

the continuous bag-of-words method could use the words "Troll 2" and "great!" to predict the word that occurs between them, "is". The second method, called "skip-gram", increases the context by using the word in the middle to predict the surrounding words. For example, the skip-gram method could use the word "is" to predict the surrounding words "Troll 2", "great!" and "Gymkata". Lastly, before we're done, just know that in practice, instead of using just 2 activation functions to create 2

we're done, just know that in practice, instead of using just 2 activation functions to create 2 embeddings per word, people often use 100 or more activation functions to create a lot of embeddings per word. And instead of using 2 sentences for training, they use the entire wikipedia. Thus, instead of just having a vocabulary of 4 words and phrases, word2vec might have a vocabulary of about 3 million words and phrases. Thus, the total number of weights in this neural network that we need to

million words and phrases. Thus, the total number of weights in this neural network that we need to optimize is 3 million words and phrases times at least 100, the number of weights each word has going to the activation functions, x 2, for the weights that get us from the activation functions to the outputs, for a total of 600 million weights. So training can be slow. However, one way that word2vec speeds things up is to use something called Negative Sampling. Negative sampling works by

word2vec speeds things up is to use something called Negative Sampling. Negative sampling works by randomly selecting a subset of words we don't want to predict for optimization. For example, say like we wanted the word "aardvark" to predict the word "a". That means that only the word "aardvark" has a 1 in it and all of the other words have zeros, and that means we can ignore the weights coming from every word but "aardvark", because the other words multiply their weights by zero. That alone

from every word but "aardvark", because the other words multiply their weights by zero. That alone removes close to 300 million weights from this optimization step. However, we still have 300 million weights after the activation functions. So, because we want to predict the word "a", then we don't want to predict "aardvark", "abandon", and all of the other words. So for this example, let's imagine word2vec randomly selects "abandon" as a word we don't want to predict. Note: In practice,

imagine word2vec randomly selects "abandon" as a word we don't want to predict. Note: In practice, word2vec would select between 2 and 20 words that we don't want to predict. However, in this example, we just select one, "abandon". So now word2vec only uses the output values for "a" and "abandon", and that means for this round of backpropagation, we can ignore the weights that lead to all of the other possible outputs. So, in the end, out of the 600 million total weights in this neural network,

possible outputs. So, in the end, out of the 600 million total weights in this neural network, we only optimize 300 per step. And this is one way that word2vec can efficiently create lots of word embeddings for each word in a large vocabulary. Triple bam! Now it's time for some shameless self-promotion. If you want to review statistics and machine learning offline, check out the StatQuest PDF study guides and my book, The StatQuest Illustrated Guide to Machine Learning at statquest.org. There's

guides and my book, The StatQuest Illustrated Guide to Machine Learning at statquest.org. There's something for everyone. Hooray! We've made it to the end of another exciting StatQuest. If you liked this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, consider contributing to my patreon campaign, becoming a channel member, buying one or two of my original songs, or a t-shirt, or a hoodie, or just donate, the links are in the description below. All right

songs, or a t-shirt, or a hoodie, or just donate, the links are in the description below. All right until next time Quest on!

Sequence-to-Sequence (seq2seq) Encoder-Decoder Neural Networks, Clearly Explained!!!

to encode you unroll to decode you unroll stat Quest hello I'm Josh Darman welcome to statquest today we're going to talk about seek to seek and encoder decoder neural networks and they're going to be clearly explained it's the easiest way to scale your work up in the cloud lightning this stat Quest is also brought to you by the letters a b and c a always b b c curious always be curious note this stat Quest assumes that you are already familiar with long short-term memory neural networks and

stat Quest assumes that you are already familiar with long short-term memory neural networks and word embedding if not check out the quests also I want to give a special triple bam thanks to Ben Trevitt his awesome tutorials on GitHub the links are in the description below made it possible for me to create this Quest Hey look it's stat Squatch and the normal saurus hey Josh I want to tell my friend in Spain let's go but I don't know Spanish can you help sure thanks Squatch I've got a sequence

in Spain let's go but I don't know Spanish can you help sure thanks Squatch I've got a sequence of amino acids that I want translated into 3D structures like Alpha helices what I've got a sequence of amino acid that I want translated don't worry Norm I can help both of you have sequences of one type of thing that need to be translated into sequences of another type of thing both of these problems and many others are called sequence to sequence or seek to seek problems one way to solve seek to

and many others are called sequence to sequence or seek to seek problems one way to solve seek to seek problems is with something called an encoder decoder model which we'll talk about in this stack Quest damn note the basic seek to seek encoder decoder models that we're going to talk about today are totally awesome but they are also a stepping stone to learning about Transformers which we'll talk about in future stat quests in other words today we're taking another step in our quest to

talk about in future stat quests in other words today we're taking another step in our quest to understand Transformers which form the basis of big fancy large language models like Chachi BT anyway to illustrate how to solve a sequence to sequence problem using a seek to seek encoder decoder model let's create one that translates English sentences into Spanish specifically Squatch wants to tell his Spanish friend let's go so we'll create an encoder decoder model that can do this first however

his Spanish friend let's go so we'll create an encoder decoder model that can do this first however let's talk a little bit more about the problem we want to solve the first thing which is pretty obvious is that not all sentences in the English language are the same length for example someone might say let's go or they might say my name is statsquatch so we need something that can take different length sentences as input likewise not all Spanish sentences are the same length so we need

length sentences as input likewise not all Spanish sentences are the same length so we need something that can generate different length sentences as output lastly this Spanish translation of an English sentence can have a different length than the original for example the two-word English sentence let's go translates to the one word Spanish sentence vamos so we need our seek to seek encoder decoder model to be able to handle variable input and variable output lengths the good news is that we

model to be able to handle variable input and variable output lengths the good news is that we already know how to use long short-term memory units to deal with variable length inputs and outputs for example if the input sentence is let's go then we put lets into the input for the lstm and then unroll the lstm and then plug go into the second input however we're getting ahead of ourselves if you remember from the word embedding stack Quest we can't just Jam words into a neural network instead

remember from the word embedding stack Quest we can't just Jam words into a neural network instead we use an embedding layer to convert the words into numbers note to keep the example relatively simple the English vocabulary for our encoder decoder only has three words let's to and go and this symbol EOS which stands for end of sentence oh no it's the dreaded terminology alert because the vocabulary contains a mix of words and symbols we refer to the individual elements in the vocabulary as

contains a mix of words and symbols we refer to the individual elements in the vocabulary as tokens also note in this example we're just creating two embedding values per token instead of hundreds or thousands okay now that we have an embedding layer for our input vocabulary we can put it in front of the input for the lstm now when we have the input sentence let's go we put a 1 in the input for lets and a zero for everything else and then we unroll the lstm and the embedding layer and put a 1

lets and a zero for everything else and then we unroll the lstm and the embedding layer and put a 1 in the input for go and a 0 for everything else note to be clear when we unroll the lstm and the embedding layer we reuse the exact same weights and biases no matter how many times we unroll them in other words the weights and biases in the lstm cell and embedding layer that we use for the word let's are the exact same weights and biases that we use for the word go now in theory this is all we

are the exact same weights and biases that we use for the word go now in theory this is all we need to do to encode the input sentence let's go bam however in practice in order to have more weights and biases to fit the model to our data people often add additional lstm cells to the input to keep things simple we'll just add one additional lstm cell to this stage this means that the two embedding values for the word let's are used as the input values for two different lstm cells and these two

values for the word let's are used as the input values for two different lstm cells and these two lstm cells have their own separate sets of weights and biases and when we unroll them for the word go the original lstm cell reuses its set of weights and biases and the new lstm cell reuses its separate set of weights and biases now to add even more weights and biases to fit the model to our data people often add additional layers of lstms to illustrate how this works we'll add one more lstm layer

often add additional layers of lstms to illustrate how this works we'll add one more lstm layer to the encoder what that means is that the output values the short-term memories or the hidden States from the unrolled lstm units in the first layer are used as the inputs to the unrolled lstm units in the second layer note just like how both embedding values are used as inputs to both lstm cells in the first layer both outputs the short-term memories or hidden States from each cell in the first

the first layer both outputs the short-term memories or hidden States from each cell in the first layer are used as inputs to both lstm cells in the second layer lastly the only thing left to do is to initialize the long and short-term memories the cell and hidden States and now we're done creating the encoder part of the encoder decoder model in this example we have two layers of lstms with two lstm cells per layer in essence the encoder encodes the input sentence let's go into a collection of

cells per layer in essence the encoder encodes the input sentence let's go into a collection of long and short-term memories also known as cell and hidden States bam oh no it's the dreaded terminology alert again the last long and short-term memories the cell and hidden States from both layers of the lstm cells in the encoder are called the context vector thus the encoder encodes the input sentence let's go into the context vector now we need to decode the context vector so the first thing we

let's go into the context vector now we need to decode the context vector so the first thing we do is connect the long and short term Memories the cell in Hidden states that form the context Vector to a new set of lstms that just like the encoder have two layers and each layer has two cells note to be clear the lstms in the decoder are different from the ones in the encoder and have their own separate weights and biases anyway the context Vector is used to initialize the long and short-term

separate weights and biases anyway the context Vector is used to initialize the long and short-term memories the cell in Hidden states in the lstms in the decoder and the ultimate goal of the decoder is to decode the context factor into the output sentence so just like in the encoder the input to the lstm cells in the first layer comes from an embedding layer however now the embedding layer creates embedding values for the Spanish words ear vamos and E and the EOS end of sentence symbol in

embedding values for the Spanish words ear vamos and E and the EOS end of sentence symbol in other words this is the embedding layer that we use in the encoder and this is the embedding layer that we use in the decoder as you can see they have different input words and symbols or tokens and different weights which result in different embedding values for each token now because we just finished encoding the English sentence let's go the decoder starts with the embedding values for the EOS end of

the English sentence let's go the decoder starts with the embedding values for the EOS end of sentence token in this case we're using the EOS token to start the decoding because that is what they used in the original manuscript however sometimes you'll see people use SOS for start of sentence anyway the decoder does the math with the two layers of lstms each with two lstm cells and the output values from the top layer of lstm cells are transformed by additional weights and biases in what is

values from the top layer of lstm cells are transformed by additional weights and biases in what is called a fully connected layer a fully connected layer is just another name for a basic vanilla neural network this fully connected layer has two inputs for the two values that come from the lstm cells in the top layer and four outputs one for each token in the Spanish vocabulary and in between we have connections between each input and output with weights and biases then we run the output of the

connections between each input and output with weights and biases then we run the output of the fully connected layer through a soft Max function to pick out the output word now going back to the full encoder decoder model we see that the output from the softmax function is vamos the Spanish translation for Let's go double bam not yet so far the translation is correct but the decoder doesn't stop until it outputs an EOS token so we plug the word vamos into the decoder's unrolled embedding layer

until it outputs an EOS token so we plug the word vamos into the decoder's unrolled embedding layer and unroll the two lstm cells in each layer and then run the output values into the same fully connected layer and the next predicted token is eos and that means we translated the English sentence let's go into the correct Spanish sentence vamos double bam to summarize the decoder stage the context Vector created by both layers of the encoder's unrolled lstm cells are used to initialize the lstms

Vector created by both layers of the encoder's unrolled lstm cells are used to initialize the lstms in the decoder and the input to the lstms comes from the output word embedding layer that starts with EOS but subsequently uses whatever word was predicted by the output layer in practice the decoder will keep predicting words until it predicts the EOS token or it hits some Maximum output length note by decoupling the encoder from the decoder the input text and the translated output text can be

by decoupling the encoder from the decoder the input text and the translated output text can be different lengths in this case we translated the two word English sentence let's go to a one word Spanish sentence vamos bam note just like for all neural networks all of these weights and biases are trained using back propagation and if you're not already familiar with back propagation check out the quests that said encoder decoder models have two special things that happen during training in this

quests that said encoder decoder models have two special things that happen during training in this example we use the predicted token vamos as the input to the unrolled lstms in contrast when training an encoder decoder instead of using the predicted token as input to the decoder lstms we use the known correct token in other words if the first predicted token was the Spanish word e which translates to and in English and thus is the wrong word then during training we'll still use vamos the

to and in English and thus is the wrong word then during training we'll still use vamos the correct Spanish word as input to the unrolled lstms also during training instead of just predicting tokens until the decoder predicts the EOS token each output phrase ends where the known phrase ends in other words even if the second predicted token was the Spanish word ear instead of the correct token EOS then during training will still stop predicting additional tokens plugging in the known words and

then during training will still stop predicting additional tokens plugging in the known words and stopping at the known phrase length rather than using the predicted tokens for everything is called teacher forcing which sounds vaguely like what happened when I took introduction to statistics in school lastly let's talk about the differences between this super simple encoder decoder model and the model used in the original sequence to sequence manuscript first instead of just using three words

model used in the original sequence to sequence manuscript first instead of just using three words and one symbol or a total of four tokens in each input and output vocabulary the original manuscript had an input vocabulary with 160 000 tokens and an output vocabulary with eighty thousand tokens also instead of just two embedding values per token the original manuscript created one thousand and instead of two layers of lstms with two lstm cells in each layer the original manuscript used four

instead of two layers of lstms with two lstm cells in each layer the original manuscript used four layers with one thousand lstm cells per layer also the output layer had one thousand inputs from the 1000 lstm cells in the fourth layer and eighty thousand outputs to match the size of the output vocabulary lastly my simple model which I coded in pi torch lightning only has 220 weights and biases to train but the model in the original manuscript had 384 million weights and biases to train and

to train but the model in the original manuscript had 384 million weights and biases to train and that gives you a sense of the scale that these models can have triple bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the statquest PDF study guides and my book The stackquest Illustrated guide to machine learning at stackquest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest

there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

it'll help if you pay attention when we add it to an encoded decoder model hooray stat Quest hello I'm Josh starmer and welcome to statquest today we're going to talk about attention and it's going to be clearly explained light down it makes it easy to start with nothing and then scale it up in the cloud this stat Quest is also brought to you by the letters a b and c a always b b c curious always be curious note this stat Quest assumes that you are already familiar with basic seek to seek and

be curious note this stat Quest assumes that you are already familiar with basic seek to seek and encoder decoder neural networks if not check out the quest I also want to give a special triple bam shout out to Lena voita and her GitHub tutorials NLP course for you because it helped me a lot with this stat Quest Hey look it's stat Squatch in the normal saurus hey Josh last time we used a basic encoder decoder model to translate let's go into Spanish and it worked great bam but now I want to

encoder decoder model to translate let's go into Spanish and it worked great bam but now I want to translate my favorite book The statquest Illustrated guide to machine learning into Spanish and our basic encoder decoder model isn't doing a good job I'm sorry you're having trouble with translating Squatch the problem is that in the encoder in a basic encoder decoder unrolling the lstms compresses the entire input sentence into a single context vector this works fine for short phrases like let's

the entire input sentence into a single context vector this works fine for short phrases like let's go but if we had a bigger input vocabulary with thousands of words then we could input longer and more complicated sentences like this don't eat the delicious looking and smelling Pizza but for longer phrases even with lstms words that are input early on can be forgotten and in this case if we forget the first word don't then don't eat the delicious looking and smelling Pizza turns into eat the

the first word don't then don't eat the delicious looking and smelling Pizza turns into eat the delicious looking and smelling pizza and these two sentences have completely opposite meanings so sometimes it's super important to remember the first word so what are we going to do well you might remember that basic recurrent neural networks had problems with long-term memories because they ran both the long and short-term memories through a single path and that the main idea of long short-term

the long and short-term memories through a single path and that the main idea of long short-term memory units is that they solve this problem by providing separate paths for long and short-term memories well even with separate paths if we have a lot of data both paths have to carry a lot of information and that means that a word at the start of a long phrase like don't can still get lost so the main idea of attention is to add a bunch of New Paths from the encoder to the decoder one per input

main idea of attention is to add a bunch of New Paths from the encoder to the decoder one per input value so that each step of the decoder can directly access input values bam note the basic encoder decoder plus attention models that we're going to talk about today are totally awesome but they are also a stepping stone to learning about Transformers which we'll talk about in future stack quests in other words today we're taking another step in our quest to understand Transformers which form the

other words today we're taking another step in our quest to understand Transformers which form the basis of big fancy large language models like Chad GPT now if you remember from the stack Quest on encoder decoder models an encoder decoder model can be as simple as an embedding layer attached to a single long short-term memory unit but if we want a slightly more fancy encoder we can add additional lstm cells now we'll initialize the long and short-term memories the cell and hidden states in the

lstm cells now we'll initialize the long and short-term memories the cell and hidden states in the lstms in the encoder with zeros and if our input sentence which we want to translate into Spanish is let's go then we can plug in a 1 for let's into the embedding layer unroll and plug a 1 for go into the embedding layer and that can create a context vector that we use to initialize a separate set of lstm cells in the decoder note all of the input is jammed into the context vector however the idea

lstm cells in the decoder note all of the input is jammed into the context vector however the idea of attention is for each step in the decoder to have direct access to the inputs so let's talk about how attention connects the inputs to each step of the decoder unfortunately just like adding the extra path for long-term memories to lstms isn't super simple adding the extra paths for attention to an encoder decoder model isn't super simple either ugh don't worry Squatch we'll go through it one

an encoder decoder model isn't super simple either ugh don't worry Squatch we'll go through it one step at a time bam first before we start talking about how this big mess of stuff works let's start by plugging in a 1 for the EOS end of sentence token into the embedding layer remember we do this because we just finished encoding the sentence let's go and because some of the original encoder decoder plus attention manuscripts do it that way however some people also start out with SOS or start of

plus attention manuscripts do it that way however some people also start out with SOS or start of sentence now let's talk about how to add attention to our model note although there are conventions there are no rules for how attention should be added to an encoder decoder model and each manuscript has a slightly different way of doing it so what follows is just one example of how attention can be added to an encoder decoder model that said the main idea of attention adding an additional path

be added to an encoder decoder model that said the main idea of attention adding an additional path for each input value so that each step of the decoder can directly access those values is consistent for all encoder decoder models with attention bam so in this example the first thing that attention does is determine how similar the outputs from the encoder lstms are at each step to the outputs from the decoder lstms in other words we want a similarity score between the lstm outputs the

from the decoder lstms in other words we want a similarity score between the lstm outputs the short-term memories or hidden States from the first step in the encoder and the lstm outputs from the first step in the decoder and we also want to calculate a similarity score between the lstm outputs from the second step in the encoder and the lstm outputs from the first step in the decoder there are a lot of ways to calculate the similarity of words or more precisely sequences of numbers that

are a lot of ways to calculate the similarity of words or more precisely sequences of numbers that represent words and different attention algorithms use different ways to compare these sequences however one simple way to determine the similarity of two sequences of numbers that represent words is with the cosine similarity there's a lot to be said about the cosine similarity so if you don't already know about it check out the quest however for the purposes of this stat Quest all we need to

know about it check out the quest however for the purposes of this stat Quest all we need to know is that the cosine similarity is calculated with this equation and that the numerator is what calculates the similarity between two sequences of numbers and that the denominator scales that value to be between negative one and one Josh this equation looks complicated don't worry Squatch we'll plug some numbers into it one step at a time to illustrate how the cosine similarity would work in this

some numbers into it one step at a time to illustrate how the cosine similarity would work in this context let's calculate the cosine similarity between the output values from the first pair of lstm cells in the encoder for the word let's and the output values from the first pair of lstm cells in the decoder for the EOS token the output values from the two lstm cells in the encoder for the word let's are negative 0.76 and 0.75 and the output values from the two lstm cells in the decoder for the

are negative 0.76 and 0.75 and the output values from the two lstm cells in the decoder for the EOS token are 0.91 and 0.38 and now we just plug the numbers into the equation for the cosine similarity and we get Negative 0.39 thus the cosine similarity between the output values from the two lstm cells in the encoder for the word let's and the output values from the two lstm cells in the decoder for the EOS token is negative 0.39 that being said a more common way to calculate similarity for

for the EOS token is negative 0.39 that being said a more common way to calculate similarity for attention is to just calculate the numerator for the cosine similarity this is because the denominator simply scales the magnitude of the similarity score to be between negative 1 and 1. this scaling could be useful if we wanted to compare a similarity score for two lstm cells like we did before to a similarity score calculated with three or more lstm cells because the scaling would ensure that no

similarity score calculated with three or more lstm cells because the scaling would ensure that no matter how many lstm cells we use to calculate the similarities the similarities would be between negative 1 and 1 and easily comparable in other words the denominator removes the magnitude of the similarity however in this case we'll always use the same number of lstm cells and in practice using just the numerator works well so we can save ourselves the trouble of doing extra math by just

just the numerator works well so we can save ourselves the trouble of doing extra math by just calculating the numerator which is also called The Dot product Josh this equation looks way easier bam so in this case when we do the math for the dot product we get Negative 0.41 anyway calculating the dot product is more common than the cosine similarity for attention because it's super easy to calculate and roughly speaking large positive numbers mean things are more similar than small positive

and roughly speaking large positive numbers mean things are more similar than small positive numbers and large negative numbers mean things are more completely backwards than small negative numbers the other nice thing about the dot product is that it's easy to add to our diagram we simply multiply each pair of output values together and then add them all together and we get Negative 0.41 likewise we can compute a similarity score with the dot product between the second input word go and the

we can compute a similarity score with the dot product between the second input word go and the EOS token and we get 0.01 and now we've got similarity scores for both input words let's and go relative to the EOS token in the decoder bam hey Josh it's great that we have scores but how do we use them well we can see that the similarity score between go and the EOS token 0.01 is higher than the score between let's and the EOS token negative 0.41 and since the score for go is higher we want the

between let's and the EOS token negative 0.41 and since the score for go is higher we want the encoding for go to have more influence on the first word that comes out of the decoder and we do that by first running the scores through a soft Max function remember the softmax function gives us numbers between 0 and 1 that add up to one so we can think of the output of the softmax function as a way to determine what percentage of each encoded input word we should use when decoding in this case

to determine what percentage of each encoded input word we should use when decoding in this case we'll use 40 of the first encoded word let's and sixty percent of the second encoded word go when the decoder determines what should be the first translated word so we scale the values for the first encoded word let's by 0.4 and we scale the values for the second encoded word go by 0.6 and lastly we add the scaled values together these sums which combine the separate encodings for both input words

add the scaled values together these sums which combine the separate encodings for both input words let's and go relative to their similarity to EOS are the attention values for Eos bam now all we need to do to determine the first output word is plug the attention values into a fully connected layer and plug the encodings for Eos into the same fully connected layer and do the math and run the output values through a softmax function to select the first output word vamos bam now because the

output values through a softmax function to select the first output word vamos bam now because the output was not the EOS token we need to unroll the embedding layer and the lstms in the decoder and plug the translated word vamos into the decoder's unrolled embedding layer and then we just do the math except this time we use the encoded values for vamos and the second output from the decoder is eos so we're done decoding triple bam in summary when we add attention to a basic encoder decoder

eos so we're done decoding triple bam in summary when we add attention to a basic encoder decoder model the encoder pretty much stays the same but now each step of decoding has access to the individual encodings for each input word and we use similarity scores and the soft Max function to determine what percentage of each encoded input word should be used to help predict the next output word note now that we have a tension added to the model you might wonder if we still need the lstms well it

now that we have a tension added to the model you might wonder if we still need the lstms well it turns out we don't need them and we'll talk more about that when we learn about Transformers bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the statquest PDF study guides in my book The statquest Illustrated guide to machine learning at stackquest.org there's something for everyone hooray we've made it to the end of

learning at stackquest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support stack Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

Transformer Neural Networks, ChatGPT's foundation, Clearly Explained!!!

[Music] translation it's done with a transform ER stat Quest hello I'm Josh starmer and welcome to statquest today we're going to talk about Transformer neural networks and they're going to be clearly explained Transformers are more fun when you build them in the cloud with lightning bam right now people are going bonkers about something called chat GPT for example our friend statsquatch might type something into chat GPT like right and awesome song in the style of statquest translation it's

type something into chat GPT like right and awesome song in the style of statquest translation it's done with a transform ER anyway there's a lot to be said about how chat GPT works but fundamentally it is based on something called a Transformer so in this stat Quest we're going to show you how a Transformer works one step at a time specifically we're going to focus on how a Transformer neural network can translate a simple English sentence let's go into Spanish vamos now since a Transformer is

can translate a simple English sentence let's go into Spanish vamos now since a Transformer is a type of neural network and neural networks usually only have numbers for input values the first thing we need to do is find a way to turn the input and output words into numbers there are a lot of ways to convert words into numbers but for neural networks one of the most commonly used methods is called word embedding the main idea of word embedding is to use a relatively simple neural network that

word embedding the main idea of word embedding is to use a relatively simple neural network that has one input for every word and symbol in the vocabulary that you want to use in this case we have a super simple vocabulary that allows us to input short phrases like let's go and to go and we have an input for this symbol EOS which stands for end of sentence or end of sequence because the vocabulary can be a mix of words word fragments and symbols we call each input a token the inputs are then

can be a mix of words word fragments and symbols we call each input a token the inputs are then connected to something called an activation function and in this example we have two activation functions and each connection multiplies the input value by something called a weight hey Josh where do these numbers come from great question Squatch and we'll answer it in just a bit for now let's just see how we convert the word let's into numbers first we put a 1 into the input for let's and then put

how we convert the word let's into numbers first we put a 1 into the input for let's and then put zeros into all of the other inputs now we multiply the inputs by their weights on the connections to the activation functions for example the input for let's is one so we multiply 1.87 by 1 to get 1.87 going to the activation function on the left and we multiply 0.09 by 1 to get 0.09 going to the activation function on the right in contrast if the input value for the word 2 is 0 then we multiply

function on the right in contrast if the input value for the word 2 is 0 then we multiply negative 1.45 by 0 to get 0 going to the activation function on the left and we multiply 1.50 by 0 to get 0 going to the activation function on the right in other words when an input value is 0 then it only sends zeros to the activation functions and that means to go and the EOS symbol all just send zeros to the activation functions and only the weight values for let's end up at the activation functions

to the activation functions and only the weight values for let's end up at the activation functions because its input value is 1. so in this case 1.87 goes to the activation function on the left and 0.09 goes to the activation function on the right in this example the activation functions themselves are just identity functions meaning the output values are the same as the input values in other words if the input value or x-axis coordinate for the activation function on the left is 1.87 then the

if the input value or x-axis coordinate for the activation function on the left is 1.87 then the output value the y-axis coordinate will also be 1.87 likewise because the input to the activation function on the right is 0.09 the output is also 0.09 thus these output values 1.87 and 0.09 are the numbers that represent the word leads bam likewise if we want to convert the word go into numbers we set the input value for go to 1. and all of the other inputs to zero and we end up with negative 0.78

the input value for go to 1. and all of the other inputs to zero and we end up with negative 0.78 and 0.27 as the numbers that represent the word go and that is how we use word embedding to convert our input phrase let's go into numbers bam note there is a lot more to say about word embedding so if you're interested check out the quest also note before we move on I want to point out two things first we reuse the same word embedding Network for each input word or symbol in other words the

first we reuse the same word embedding Network for each input word or symbol in other words the weights in the network for let's are the exact same as the weights in the network for go this means that regardless of how long the input sentence is we just copy and use the exact same word embedding Network for each word or symbol and this gives us flexibility to handle input sentences with different lengths the second thing I want to mention is that all of these weights and all of the other

lengths the second thing I want to mention is that all of these weights and all of the other weights we're going to talk about in this Quest are determined using something called back propagation to get a sense of what back propagation does let's imagine we had this data and we wanted to fit a line to it back propagation would start with a line that has a random value for the y-axis intercept and a random value for the slope and then using an iterative process back propagation would change the

a random value for the slope and then using an iterative process back propagation would change the y-axis intercept and slope one step at a time until it found the optimal values likewise in the context of neural networks each weight starts out as a random number but when we train the Transformer with English phrases and known Spanish translations back propagation optimizes these values one step at a time and results in these final weights also just to be clear the process of optimizing the

at a time and results in these final weights also just to be clear the process of optimizing the weights is also called training bam note there is a lot more to be said about training and back propagation so if you're interested check out the quests now because the word embedding networks are taking up the whole screen let's shrink them down and put them in the corner okay and now that we know how to convert words into numbers let's talk about word order for example if Norm said Squatch eats

how to convert words into numbers let's talk about word order for example if Norm said Squatch eats pizza then squash might say yum in contrast if Norm said Pizza eats squash then squash might say yikes so these two phrases Squatch eats Pizza and pizza eats squash use the exact same words but have very different meanings so keeping track of word order is super important so let's talk about positional encoding which is a technique that Transformers use to keep track of word order we'll start by

encoding which is a technique that Transformers use to keep track of word order we'll start by showing how to add positional encoding to the first phrase Squatch eats Pizza note there are a bunch of ways to do positional encoding but we're just going to talk about one popular method that said the first thing we do is convert the words squash eats pizza into numbers using word embedding in this example we've got a new vocabulary and we're creating four word embedding values per word however in

we've got a new vocabulary and we're creating four word embedding values per word however in practice people often create hundreds or even thousands of embedding values per word now we add a set of numbers that correspond to word order to the embedding values for each word hey Josh where do the numbers that correspond to word order come from in this case the numbers that represent the word order come from a sequence of alternating sine and cosine squiggles each squiggle gives a specific

order come from a sequence of alternating sine and cosine squiggles each squiggle gives a specific position values for each word's embeddings for example the y-axis values on the green squiggle give us position encoding values for the first embeddings for each word specifically for the first word which has an x-axis coordinate all the way to the left of the green squiggle the position value for the first embedding is the y-axis coordinate zero the position value for the second embedding comes

the first embedding is the y-axis coordinate zero the position value for the second embedding comes from the orange squiggle and the y-axis coordinate on the orange squiggle that corresponds to the first word is one likewise the blue squiggle which is more spread out than the first two squiggles gives us the position value for the third embedding value which for the first word is zero lastly the red squiggle gives us the position value for the fourth embedding which for the first word is one

red squiggle gives us the position value for the fourth embedding which for the first word is one thus the position values for the first word come from the corresponding y-axis coordinates on the squiggles now to get the position values for the second word we simply use the y-axis coordinates on the squiggles that correspond to the x-axis coordinate for the second word lastly to get the position values for the third word we use the y-axis coordinates on the squiggles that correspond to the

values for the third word we use the y-axis coordinates on the squiggles that correspond to the x-axis coordinate for the third word note because the sine and cosine squiggles are repetitive it's possible that two words might get the same position or y-axis values for example the second and third words both got negative 0.9 for the first position value however because the squiggles get wider for larger embedding positions and the more embedding values we have then the wider the squiggles get

larger embedding positions and the more embedding values we have then the wider the squiggles get then even with a repeat value here and there we end up with a unique sequence of position values for each word thus each input word ends up with a unique sequence of position values now all we have to do is add the position values to the embedding values and we end up with the word embeddings plus positional encoding for the whole sentence Squatch eats Pizza yum note if we reverse the order of the

encoding for the whole sentence Squatch eats Pizza yum note if we reverse the order of the input words to be Pizza eats squash then the embeddings for the first and third words get swapped but the positional values for the first second and third word stay the same and when we add the positional values to the embeddings we end up with new positional encoding for the first and third words and the second word since it didn't move stays the same thus positional encoding allows a Transformer to keep

word since it didn't move stays the same thus positional encoding allows a Transformer to keep track of word order bam now let's go back to our simple example where we are just trying to translate the English sentence let's go and add position values to the word embeddings the first embedding for the first word Let's gets zero and the second embedding gets one and the first embedding for the second word go gets a negative 0.9 and the second embedding gets 0.4 and now we just do the math to get

word go gets a negative 0.9 and the second embedding gets 0.4 and now we just do the math to get the positional encoding for both words bam now because we're going to need all the space we can get let's consolidate the math in the diagram and let the sine and cosine and plus symbols represent the positional encoding now that we know how to keep track of each word's position let's talk about how a Transformer keeps track of the relationships among words for example if the input sentence was this

Transformer keeps track of the relationships among words for example if the input sentence was this the pizza came out of the oven and it tasted good then this word it could refer to pizza or potentially it could refer to the word oven Josh I've heard of good tasting pizza but never a good tasting oven I know Squatch that's why it's important that the Transformer correctly Associates the word it with pizza the good news is that Transformers have something called self-attention which is a

it with pizza the good news is that Transformers have something called self-attention which is a mechanism to correctly associate the word ID with the word Pizza in general terms self-attention works by seeing how similar each word is to all of the words in the sentence including itself for example self-attention calculates the similarity between the first word the and all of the words in the sentence including itself and self-attention calculates these similarities for every word in the

sentence including itself and self-attention calculates these similarities for every word in the sentence once the similarities are calculated they are used to determine how the Transformer encodes each word for example if you looked at a lot of sentences about pizza and the word ID was more commonly associated with pizza than oven then the similarity score for pizza will cause it to have a larger impact on how the word ID is encoded by the Transformer bam and now that we know the main ideas of

impact on how the word ID is encoded by the Transformer bam and now that we know the main ideas of how self-attention Works let's look at the details so let's go back to our simple example where we had just added positional encoding to the words let's and go the first thing we do is multiply the position encoded values for the word let's by a pair of weights and we add those products together to get Negative 1.0 then we do the same thing with a different pair of weights to get 3.7 we do this

get Negative 1.0 then we do the same thing with a different pair of weights to get 3.7 we do this twice because we started out with two position encoded values that represent the word leads and after doing the math two times we still have two values representing the word leads Josh I don't get it if we want two values to represent let's why don't we just use the two values we started with that's a great question Squatch and we'll answer it in a little bit grr anyway for now just know that we

a great question Squatch and we'll answer it in a little bit grr anyway for now just know that we have these two new values to represent the word let's and in Transformer terminology we call them query values and now that we have query values for the word let's use them to calculate the similarity between itself and the word go and we do this by creating two new values just like we did for the query to represent the word let's and we create two new values to represent the word go both sets of

to represent the word let's and we create two new values to represent the word go both sets of new values are called key values and we use them to calculate similarities with the query for let's one way to calculate similarities between the query and the keys is to calculate something called a DOT product for example in order to calculate the dot product similarity between the query and key for let's we simply multiply each pair of numbers together and then add the products to get 11.7 likewise

we simply multiply each pair of numbers together and then add the products to get 11.7 likewise we can calculate the dot product similarity between the query for let's and the key for go by multiplying the pairs of numbers together and adding the products to get negative 2.6 the relatively large similarity value for let's relative to itself 11.7 compared to the relatively small value for lets relative to the word go negative 2.6 tells us that let's is much more similar to itself than it is to

to the word go negative 2.6 tells us that let's is much more similar to itself than it is to the word go that said if you remember the example where the word it could relate to pizza or oven the word it should have a relatively large similarity value with respect to the word Pizza since it refers to pizza and not oven note there's a lot to be said about calculating similarities in this context and the dot product so if you're interested check out the quests anyway since let's is much more

and the dot product so if you're interested check out the quests anyway since let's is much more similar to itself than it is to the word go then we want let's to have more influence on its encoding than the word go and we do this by first running the similarities course through something called a soft Max function the main idea of a soft Max function is that it preserves the order of the input values from low to high and translates them into numbers between 0 and 1 that add up to one so we can

from low to high and translates them into numbers between 0 and 1 that add up to one so we can think of the output of the softmax function as a way to determine what percentage of each input word we should use to encode the word let's in this case because let's is so much more similar to itself than the word go we'll use one hundred percent of the word let's to encode less and zero percent of the word go to encode the word let's note there's a lot more to be said about the soft Max function so

word go to encode the word let's note there's a lot more to be said about the soft Max function so if you're interested check out the quest anyway because we want 100 of the word let's to encode let's we create two more values that will cleverly call values to represent the word let's and scale the values that represent let's by 1.0 then we create two values to represent the word go and scale those values by 0.0 lastly we add the scaled values together and these sums which combine separate

those values by 0.0 lastly we add the scaled values together and these sums which combine separate encodings for both input words let's and go relative to their similarity to Let's are the self-attention values for leads bam now that we have self-attention values for the word let's it's time to calculate them for the word go the good news is that we don't need to recalculate the keys and values instead all we need to do is create the query that represents the word go and do the math by first

instead all we need to do is create the query that represents the word go and do the math by first calculating the similarity scores between the new query and the keys and then run the similarity scores through a softmax and then scale the values and then add them together and we end up with the self-attention values for go note before we move on I want to point out a few details about self-attention first the weights that we use to calculate the self-attention queries are the exact same for

first the weights that we use to calculate the self-attention queries are the exact same for let's and go in other words this example uses one set of weights for calculating self-attention queries regardless of how many words are in the input likewise we reuse the sets of weights for calculating self-attention keys and values for each input word this means that no matter how many words are input into the Transformer we just reuse the same sets of weights for self-attention queries keys and

into the Transformer we just reuse the same sets of weights for self-attention queries keys and values the other thing I want to point out is that we can calculate the queries keys and values for each word at the same time in other words we don't have to calculate the query key and value for the first word first before moving on to the second word and because we can do all of the computation at the same time Transformers can take advantage of parallel Computing and run fast now that we

at the same time Transformers can take advantage of parallel Computing and run fast now that we understand the details of how self-attention Works let's shrink it down so we can keep building our Transformer bam Josh you forgot something if we want two values to represent let's why don't we just use the two position encoded values we started with first the new self-attention values for each word contain input from all of the other words and this helps give each word context and this can help

contain input from all of the other words and this helps give each word context and this can help establish how each word in the input is related to the others also if we think of this unit with its weights for calculating queries keys and values as a self-attention cell then in order to correctly establish how words are related in complicated sentences and paragraphs we can create a stack of self-attention cells each with its own sets of Weights that we apply to the position encoded values for

cells each with its own sets of Weights that we apply to the position encoded values for each word to capture different relationships among the words in the manuscript that first describes Transformers they stacked eight self-attention cells and they called this multi-head attention why eight instead of 12 or 16 I have no idea bam okay going back to our simple example with only one self-attention cell there's one more thing we need to do to encode the input we take the position encoded values

cell there's one more thing we need to do to encode the input we take the position encoded values and add them to the self-attention values these bypasses are called residual connections and they make it easier to train complex neural networks by allowing the self-attention layer to establish relationships among the input words without having to also preserve the word embedding and positioning coding information bam and that's all we need to do to encode the input for this simple Transformer

coding information bam and that's all we need to do to encode the input for this simple Transformer double bam note this simple Transformer only contains the parts required for encoding the input word embedding positional encoding self-attention and residual connections these four features allow the Transformer to encode words into numbers encode the positions of the words encode the relationships among the words and relatively easily and quickly train in parallel that said there are lots of

among the words and relatively easily and quickly train in parallel that said there are lots of extra things we can add to a Transformer and we'll talk about those at the end of this Quest bam so now that we've encoded the English input phrase let's go it's time to decode it into Spanish in other words the first part of a transformer is called an encoder and now it's time to create the second part A decoder the decoder just like the encoder starts with word embedding however this time we create

A decoder the decoder just like the encoder starts with word embedding however this time we create embedding values for the output vocabulary which consists of the Spanish words ear vamos e and the EOS end of sequence token now because we just finished encoding the English sentence let's go the decoder starts with embedding values for the EOS token in this case we're using the EOS token to start the decoding because that is a common way to initialize the process of decoding the encoded input

the decoding because that is a common way to initialize the process of decoding the encoded input sentence however sometimes you'll see people use SOS for startup sentence or start of sequence to initialize the process Josh starting with SOS makes more sense to me then you can do it that way Squatch I'm just saying a lot of people start with EOS anyway we plug in 1 for Eos and zero for everything else and do the math and we end up with 2.70 and negative 1.34 as the numbers that represent the

else and do the math and we end up with 2.70 and negative 1.34 as the numbers that represent the EOS token bam now let's shrink the word embedding down to make more space so that we can add the positional encoding note these are the exact same sine and cosine squiggles that we used when we encoded the input and since the EOS token is in the first position with two embeddings we just add those two position values and we get 2.70 and negative 0.34 as the position and word embedding values

two position values and we get 2.70 and negative 0.34 as the position and word embedding values representing the EOS token bam now let's consolidate the math in the diagram and before we move on to the next step let's review a key concept from when we encoded the input one key concept from earlier was that we created a single unit to process an input word and then we just copied that unit for each word in the input and if we had more words we just make more copies of the same unit by creating a

word in the input and if we had more words we just make more copies of the same unit by creating a single unit that can be copied for each input word the Transformer can do all of the computation for each word in the input at the same time for example we can calculate the word embeddings on different processors at the same time and then add the positional encoding at the same time and then calculate the queries keys and values at the same time and once that is done we can calculate the

calculate the queries keys and values at the same time and once that is done we can calculate the self-attention values at the same time and lastly we can calculate the residual connections at the same time doing all of the computations at the same time rather than doing them sequentially for each word means we can process a lot of words relatively quickly on a chip with a lot of computing cores like a GPU Graphics Processing Unit or multiple chips in the cloud well likewise when we decode and

like a GPU Graphics Processing Unit or multiple chips in the cloud well likewise when we decode and translate the input we want a single unit that we can copy for each translated word for the same reasons we want to do the math quickly so even though we're only processing the EOS token so far we add a self-attention layer so that ultimately we can keep track of related words in the output now that we have the query key and value numbers for the EOS token we calculate itself attention values

that we have the query key and value numbers for the EOS token we calculate itself attention values just like before and the self-attention values for the EOS token are negative 2.8 and negative 2.3 note the sets of Weights we used to calculate the decoder self-attention query key and value are different from the sets we used in the encoder now let's consolidate the math and add residual connections just like before bam now so far we've talked about how self-attention helps the Transformer keep

just like before bam now so far we've talked about how self-attention helps the Transformer keep track of how words are related within a sentence however since We're translating a sentence we also need to keep track of the relationships between the input sentence and the output for example if the input sentence was don't eat the delicious looking and smelling pizza then when translating it's super important to keep track of the very first word don't if the translation focuses on other parts of

important to keep track of the very first word don't if the translation focuses on other parts of the sentence and omits the don't then we'll end up with eat the delicious looking and smelling Pizza and these two sentences have completely opposite meanings so it's super important for the decoder to keep track of the significant words in the input so the main idea of encoder decoder attention is to allow the decoder to keep track of the significant words in the input now that we know the main

to allow the decoder to keep track of the significant words in the input now that we know the main idea behind encoder decoder attention here are the details first to give us a little more room let's consolidate the math and the diagrams now just like we did for self-attention we create two new values to represent the query for the EOS token in the decoder then we create keys for each word in the encoder and we calculate the similarities between the EOS token in the decoder and each word in the

encoder and we calculate the similarities between the EOS token in the decoder and each word in the encoder by calculating the dot products just like before then we run the similarities through a softmax function and this tells us to use one hundred percent of the first input word and zero percent of the second when the decoder determines what should be the first translated word now that we know what percentage of each input word to use when determining what should be the first translated word

what percentage of each input word to use when determining what should be the first translated word we calculate values for each input word and then scale those values by the soft Max percentages and then add the pairs of scaled values together to get the encoder decoder attention values bam now to make room for the next step let's consolidate the encoder decoder attention in our diagram note the sets of Weights that we use to calculate the queries keys and values for encoder decoder attention

sets of Weights that we use to calculate the queries keys and values for encoder decoder attention are different from the sets of Weights we use for self-attention however just like for self-attention the sets of Weights are copied and reused for each word this allows the Transformer to be flexible with the length of the inputs and outputs and also we can stack encode or decoder attention just like we can stack self-attention to keep track of words in complicated phrases bam now we add another

we can stack self-attention to keep track of words in complicated phrases bam now we add another set of residual connections that allow the encoder decoder attention to focus on the relationships between the output words and the input words without having to preserve the self-attention or word and position encoding that happened earlier then we consolidate the math and the diagram lastly we need a way to take these two values that represent the EOS token in the decoder and select one of the

a way to take these two values that represent the EOS token in the decoder and select one of the four output tokens ear vamos e or EOS so we run these two values through a fully connected layer that has one input for each value that represents the current token so in this case we have two inputs and one output for each token in the output vocabulary which in this case means four outputs note a fully connected layer is just a simple neural network with weights numbers we multiply the inputs by

connected layer is just a simple neural network with weights numbers we multiply the inputs by and biases numbers we add to the sums of the products and when we do the math we get four output values which we run through a final soft Max function to select the first output word vamos bam note vamos is the Spanish translation for Let's Go triple boom no not yet so far the translation is correct but the decoder doesn't stop until it outputs an EOS token so let's consolidate our diagrams and plug

the decoder doesn't stop until it outputs an EOS token so let's consolidate our diagrams and plug the translated word vamos into a copy of the decoder's embedding layer and do the math first we get the word embeddings for vamos then we add the positional encoding now we calculate self-attention values for vamos using the exact same weights that we used for the EOS token now add the residual connections and calculate the encoder decoder attention using the same sets of Weights that we used for

and calculate the encoder decoder attention using the same sets of Weights that we used for the EOS token now we add more residual connections lastly we run the values that represent vamos through the same fully connected layer and softmax that we used for the EOS token and the second output from the decoder is eos so we are done decoding triple bam at long last we've shown how a Transformer can encode a simple input phrase let's go and decode the encoding into the translated phrase of vamos in

a simple input phrase let's go and decode the encoding into the translated phrase of vamos in summary Transformers use word embedding to convert words into numbers positional encoding to keep track of word order self-attention to keep track of word relationships within the input and output phrases encoder decoder attention to keep track of things between the input and output phrases to make sure that important words in the input are not lost in the translation and residual connections to allow

that important words in the input are not lost in the translation and residual connections to allow each subunit like self-attention to focus on solving just one part of the problem now that we understand the main ideas of how Transformers work let's talk about a few extra things we can add to them in this example we kept things super simple however if we had larger vocabularies and the original Transformer had 37 000 tokens and longer input and output phrases then in order to get their model

Transformer had 37 000 tokens and longer input and output phrases then in order to get their model to work they had to normalize the values after every step for example they normalize the values after positional encoding and after self-attention in both the encoder and the decoder also when we calculated attention values we used the dot product to calculate the similarities but you can use whatever similarity function you want in the original Transformer manuscript they calculated the

whatever similarity function you want in the original Transformer manuscript they calculated the similarities with a DOT product divided by the square root of the number of embedding values per token just like with scaling the values after each step they found that scaling the dot product helped encode and decode long and complicated phrases lastly to give a Transformer more weights and biases to fit to complicated data you can add additional neural networks with hidden layers to both the

to fit to complicated data you can add additional neural networks with hidden layers to both the encoder and decoder bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the statquest PDF study guides in my book the stat Quest Illustrated guide to machine learning at stackwest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stack Quest and want to see more

made it to the end of another exciting stat Quest if you like this stack Quest and want to see more please subscribe and if you want to support stackquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

Decoder-Only Transformers, ChatGPTs specific Transformer, Clearly Explained!!!

decoding is all that you need stat Quest hello I'm Josh starmer and welcome to stat Quest today we're going to talk about decoder only Transformers and they're going to be clearly explained trust me whatever Transformer you want to use it's better with lightning bam [Music] right now people are going totally bananas about chat GPT for example stat Squatch might type something into chat gbt like what is statquest stat Quest is awesome bam now in order to learn more about how chat GPT Works let's

is statquest stat Quest is awesome bam now in order to learn more about how chat GPT Works let's learn about decoder only Transformers which is the specific type of Transformer used for chat GPT note if you're not already familiar with basic Transformers don't worry we'll go through each Concept in a decoder only Transformer one step at a time that said if you are familiar with basic Transformers then you might want to just skip to the last chapter normal Transformers versus decoder only

then you might want to just skip to the last chapter normal Transformers versus decoder only Transformers anyway in this stat Quest we're going to show how a decoder only Transformer can take a simple input prompt what is statquest and generate a simple response awesome now since a Transformer is a type of neural network and neural networks usually only have numbers for input values the first thing we need to do is find a way to turn the input and output words into numbers there are a lot of

we need to do is find a way to turn the input and output words into numbers there are a lot of ways to convert words into numbers but for neural networks one of the most commonly used methods is called word embedding the main idea of word embedding is to use a relatively simple neural network that has one input for every word and symbol in the vocabulary that we want to use in this case we have a super simple vocabulary that allows us to input a short phrase like what is statquest and we also

a super simple vocabulary that allows us to input a short phrase like what is statquest and we also have an input for a potential response awesome lastly we have an input for the EOS symbol which stands for end of sentence or end of sequence because the vocabulary can be a mix of words word fragments and symbols we call each input a token the inputs are then connected to something called an activation function and in this example we have two activation functions and each connection multiplies

function and in this example we have two activation functions and each connection multiplies the input value by something called a weight hey Josh where do these numbers come from great question Squatch and we'll answer it in just a bit for now let's just see how we convert the word what into numbers first we put a 1 into the input for what and then zeros into all of the other inputs now we multiply the inputs by the weights on the connections to the activation functions for example the input

the inputs by the weights on the connections to the activation functions for example the input for what is 1 so we multiply negative 2.38 by 1 to get Negative 2.38 going to the activation function on the left and we multiply 0.10 by 1 to get 0.10 going to the activation function on the right in contrast if the input value for the word is is zero then we multiply 0.61 by 0 to get 0 going to the activation function on the left and we multiply 0.17 by 0 to get 0 going to the activation function on

function on the left and we multiply 0.17 by 0 to get 0 going to the activation function on the right in other words when an input value is 0 then it only sends zeros to the activation functions and that means is statquest awesome and the EOS symbol all just send zeros to the activation functions and only the weight values for what end up at the activation functions because its input value is 1. so in this case negative 2.38 goes to the activation function on the left and 0.10 goes to the

1. so in this case negative 2.38 goes to the activation function on the left and 0.10 goes to the activation function on the right in this example the activation functions themselves are just identity functions meaning the output values are the same as the input values in other words if the input value or x-axis coordinate for the activation function on the left is negative 2.38 then the output value the y-axis coordinate will also be negative 2.38 likewise because the input to the activation

value the y-axis coordinate will also be negative 2.38 likewise because the input to the activation function on the right is 0.10 the output is also 0.10 thus these output values negative 2.38 and 0.10 are the numbers that represent the word what now before we move on I want to mention that all of these weights and all of the other weights we're going to talk about in this Quest are determined using something called back propagation to get a sense of what back propagation does let's imagine we

something called back propagation to get a sense of what back propagation does let's imagine we had this data and we wanted to fit a line to it back propagation would start with a line that has a random value for the y-axis intercept and a random value for the slope and then using an iterative process back propagation would change the y-axis intercept and slope one step at a time until it found the optimal values likewise in the context of neural networks each weight starts out as a random

the optimal values likewise in the context of neural networks each weight starts out as a random number but when we train the Transformer by getting it to predict words in known documents back propagation optimizes these values one step at a time and results in these final weights also just to be clear the process of optimizing the weights is also called training bam note there's a lot more to be said about training and back propagation so if you're interested check out the quests anyway we now

said about training and back propagation so if you're interested check out the quests anyway we now know how to calculate the word embedding values for the first word in our phrase what so we'll keep track of those values with this diagram in the upper right hand corner now we reuse the exact same word embedding Network to convert the remaining words in the prompt what is statquest into numbers thus the word embedding values for is are 0.61 and 0.17 and the word embedding values for statquest

thus the word embedding values for is are 0.61 and 0.17 and the word embedding values for statquest are negative 2.38 and 0.10 and now we have converted all of the words in the prompt what is stackquest into word embedding values note reusing the exact same word embedding Network for each word in the prompt allows the decoder only Transformer to handle prompts that have different lengths because we can just copy the network as many times as we need to convert all the words in the prompt into

we can just copy the network as many times as we need to convert all the words in the prompt into numbers also note there's a lot more to say about word embedding so if you're interested check out the quest anyway now that we know how to convert words into numbers let's talk about word order for example if Norm said Squatch eats Pizza then squash might say yum in contrast if Norm said Pizza eats squash then Squatch might say yikes so these two phrases Squatch eats Pizza and pizza eats squash

squash then Squatch might say yikes so these two phrases Squatch eats Pizza and pizza eats squash use the exact same words but have very different meanings so keeping track of word order is super important so let's talk about positional encoding which is a technique that Transformers use to keep track of word order although there are several ways to keep track of word order with positional encoding one of the most commonly used methods uses a sequence of alternating sine and cosine squiggles

one of the most commonly used methods uses a sequence of alternating sine and cosine squiggles each squiggle gives a specific position values for each word's embeddings so now let's see how we can add positional encoding values to the word embeddings we created for the prompt what is statquest the first word which in this case is what has an x-axis coordinate all the way to the left on the green squiggle and the position value for its first embedding is the y-axis coordinate zero the position

squiggle and the position value for its first embedding is the y-axis coordinate zero the position value for the second embedding comes from the orange squiggle and the y-axis coordinate on the orange squiggle that corresponds to the first word is one now to get the position values for the second word is we simply use the y-axis coordinates on the squiggles that correspond to the x-axis coordinate for the second word likewise we use the corresponding y-axis coordinates for the third word

for the second word likewise we use the corresponding y-axis coordinates for the third word statquest note because the sine and cosine squiggles are repetitive it's possible that two words might get the same position or y-axis values however because the squiggles get wider for larger embedding positions and the more embedding values we have then the wider the squiggles get then even with a repeat value here and there we end up with a unique sequence of position values for each word anyway now

value here and there we end up with a unique sequence of position values for each word anyway now we just do the math to get the positional and coding for all three input words and we end up with the word embeddings plus positional encoding for the prompt what is statquest now because we're going to need all the space we can get let's consolidate the math and the diagrams and let the sine and cosine and plus symbols represent the positional encoding now that we know how to keep track of each

and plus symbols represent the positional encoding now that we know how to keep track of each word's position let's talk about how a decoder only Transformer keeps track of the relationships among words for example if the prompt was the pizza came out of the oven and it tasted good then this word it could refer to Pizza or potentially it could refer to the word oven Josh I've heard of good tasting pizza but never a good tasting oven I know Squatch that's why it's super important that the

tasting pizza but never a good tasting oven I know Squatch that's why it's super important that the decoder only Transformer correctly Associates the word it with pizza the good news is that decoder only Transformers have something called masked self-attention which can help correctly associate the word ID with the word Pizza in general terms mask self-attention works by seeing how similar each word is to itself and all of the preceding words in the sentence for example mask self-attention

word is to itself and all of the preceding words in the sentence for example mask self-attention starts by calculating the similarity between the first word the and itself then masked self-attention calculates the similarity between pizza and itself and the preceding word the and then masked self-attention just keeps calculating similarities like this allowing each word to look at itself and the words that came before it but not after until it gets to the end of the input once the similarities

words that came before it but not after until it gets to the end of the input once the similarities are calculated they are used to determine how the decoder only Transformer encodes each word for example if you looked at a lot of sentences about pizza and the word it was more commonly associated with pizza than oven then the similarity score for pizza will cause it to have a larger impact on how the word ID is encoded by the decoder only Transformer oh no it's the dreaded terminology alert

how the word ID is encoded by the decoder only Transformer oh no it's the dreaded terminology alert because masked self-attention only allows access to the words that come before it and not the words that come after it is sometimes called an auto regressive method anyway now that we know the main ideas of how masked self-attention Works let's look at the details so let's go back to our simple example where we had just added positional encoding to The Prompt what is statquest now since what is

where we had just added positional encoding to The Prompt what is statquest now since what is the first word in the prompt it's masked self-attention values will only reflect its similarity to itself and ignore everything else in contrast the masked self-attention values for the second word is reflect the similarity to itself as well as a similarity with the first word what and the last word stat Quest takes into account its similarity with itself and everything that came before it now I know

Quest takes into account its similarity with itself and everything that came before it now I know that what is the first word in the input but it will make it easier to understand how masked self-attention works if we start with the second word is so let's move the position encoded is over a little bit to give us some room the first thing we do to calculate the masked self-attention for the word is is multiply its position and coded values by a pair of weights and then add those products

word is is multiply its position and coded values by a pair of weights and then add those products together to get Negative 2.4 then we do the same thing with a different pair of weights to get 2.6 we do this twice because we started out with two position encoded values that represent the word is and after doing the math two times we still have two values representing the word is Josh I don't get it if we want two values to represent is why don't we just use the two values we started with

get it if we want two values to represent is why don't we just use the two values we started with that's a great question Squatch and we'll answer it in a little bit grr anyway for now just know that we have two new values to represent the word is and in Transformer terminology we call them query numbers and now we're going to use the query numbers for is to calculate the similarities with itself and the first word what and we do that by creating two new numbers like we did before to represent

and the first word what and we do that by creating two new numbers like we did before to represent the word is and creating two new numbers to represent the word what in Transformer terminology both sets of new numbers are called key values and we use them to calculate similarities with the query for is one way to calculate similarities between the query and the keys is to calculate something called a DOT product for example in order to calculate the dot product similarity between the query and

a DOT product for example in order to calculate the dot product similarity between the query and key for is we simply multiply each pair of numbers together and add the products to get 5.9 likewise we can calculate the dot product similarity between the query for is and the key for what by multiplying the pairs of numbers together and adding the products to get Negative 25.7 the small similarity value for what relative to is a negative 25.7 compared to the large similarity value for is relative

for what relative to is a negative 25.7 compared to the large similarity value for is relative to itself 5.9 tells us that is is much more similar to itself than it is to the word what that said if you remember the example where the word it could relate to pizza or oven then the word ID should have a relatively large similarity value with respect to the word Pizza since it refers to pizza and not oven note there's a lot to be said about calculating similarities in this context and the dot

not oven note there's a lot to be said about calculating similarities in this context and the dot product so if you're interested check out the quests anyway since is is much more similar to itself than it is to the word what then we want is to have more influence on its encoding than the word what and we do this by first running the similarities course through something called a soft Max function the main idea of a softmax function is that it preserves the order of the input values from low to

the main idea of a softmax function is that it preserves the order of the input values from low to high and translates them into numbers between 0 and 1 that add up to one so we can think of the output of the softmax function as a way to determine what percentage of each input word we should use to encode the word is in this case because is is so much more similar to itself than the word what we'll use 100 of the word is to encode is and zero percent of the word what to encode the word is note

use 100 of the word is to encode is and zero percent of the word what to encode the word is note there's a lot more to be said about the soft Max function so if you're interested check out the quest anyway because we want 100 of the word is to encode is and zero percent of the word what to encode is we create two more numbers that will cleverly call values to represent the word what and scale them by 0.0 then we create two value numbers to represent the word is and scale them by 1.0 lastly we

by 0.0 then we create two value numbers to represent the word is and scale them by 1.0 lastly we add the scaled values together and these sums which combine separate encodings for both input words what and is relative to their similarity to is are the masked self-attention values for is bam now that we have the masked self-attention values for is we can go back and calculate them for the first word what remember because what is the first word it only needs to know how similar it is to itself so

what remember because what is the first word it only needs to know how similar it is to itself so we can get rid of most of what we did for the word is but keep the key and value numbers that we calculated for the word what now so we have a little more room to work let's move everything over a bit and just like we did before we create a query for the word what now we use the query and key for what to calculate the similarity with itself and we get Negative 12.4 so we plug negative 12.4 into the

to calculate the similarity with itself and we get Negative 12.4 so we plug negative 12.4 into the soft Max function and we get 1.0 lastly we scale the value numbers for what by 1.0 and negative 2.9 and negative 1.3 are the masked self-attention values for the first word what it might seem a little silly to do all this math just to end up using the value numbers for what as the masked self-attention numbers for what however doing it this way gives us a unified method for calculating masked

numbers for what however doing it this way gives us a unified method for calculating masked self-attention so so far we've calculated the masked self-attention values for what which only required taking its own value numbers into account and we calculated the massed self-attention for is which required taking the value numbers from what and is into account now we need to calculate the masked self-attention for the third word statquest and that means we need to take the value numbers for

self-attention for the third word statquest and that means we need to take the value numbers for statquest into account which we calculate like before and we need to take the value numbers for what and is into account so the first thing we do is calculate the query numbers for the word statquest and then calculate its key numbers and then we bring back the keys for what and is and calculate the similarities between the query for statquest and the keys for statquest is and what now we run all

similarities between the query for statquest and the keys for statquest is and what now we run all three similarities into the soft Max function and the output from the softmax tells us what percentage of each word's value numbers to use when calculating the massed self-attention for statquest now we bring back the value numbers that we calculated earlier for what is and statquest and scale them based on the similarity scores lastly we add the pairs of scaled values together to get the masked

based on the similarity scores lastly we add the pairs of scaled values together to get the masked self-attention numbers for the word stat Quest bam note before we move on I want to point out that we reuse one set of weights to create query numbers for each word in other words the set of Weights we use to create the query numbers for what is the same set of Weights we use for the query numbers for is in statquest likewise the key numbers are calculated with a different set of Weights that are

is in statquest likewise the key numbers are calculated with a different set of Weights that are shared for each word and the value numbers are also calculated with another set of Weights that are reused for each word reusing the sets of weights for the query key and value numbers lets the decoder only Transformer handle prompts that have different lengths because we can just keep reusing the weights as many times as we need now that we understand the details of how masked self-attention Works

as many times as we need now that we understand the details of how masked self-attention Works let's shrink the diagram so that we can keep building our decoder only Transformer bam Josh you forgot something if we want two values to represent what why don't we just use the two position encoded values we started with first the new masked self-attention values for each word contain input from all of the other words that came earlier and this helps give each word context and this can help

all of the other words that came earlier and this helps give each word context and this can help establish how each word in the input prompt is related to the others also if we can think of this unit with its three sets of weights for calculating queries keys and values as a masked self-attention cell then in order to correctly establish how words are related in complicated sentences and paragraphs we can create a stack of masked self-attention cells each with its own sets of Weights that we

we can create a stack of masked self-attention cells each with its own sets of Weights that we apply to the position encoded values for each word to capture different relationships among the words in the manuscript that first described the original GPT they stacked 12 masked self-attention cells damn okay going back to our simple example with only one masked self-attention cell there are a few more things we need to do before we start generating a response to the prompt what is statquest First

things we need to do before we start generating a response to the prompt what is statquest First We Take the position encoded values and add them to the self-attention values these bypasses are called residual connections and they make it easier to train complex neural networks by allowing the masked self-attention layer to establish relationships among the input words without having to also preserve the word embedding and position encoding information bam lastly we need a way to use the

preserve the word embedding and position encoding information bam lastly we need a way to use the encodings we have for each word in the prompt to generate the word that follows it and then generate a response in other words we want to use these two numbers that represent the word what to generate the word that comes after what and we want these two numbers that represent the word is to generate the word that comes after is lastly we want these two numbers that represent the word stat quest to

the word that comes after is lastly we want these two numbers that represent the word stat quest to generate the word that comes after statquest hey Josh I don't get it why do we want to generate the word that comes after what when we already know the next word is because this is a decoder only Transformer we need one thing that can both encode The Prompt and generate the output thus even though we are not yet generating a response we need to include the parts that will do it also we can

we are not yet generating a response we need to include the parts that will do it also we can compare the known input to what the model generates when we train the model so now let's see what the model generates given the first word in the prompt what and that means taking these two values and negative 5.28 and negative 0.2 and plugging them into something called a fully connected layer this fully connected layer has one input for each value that represents the current token so in this case we

connected layer has one input for each value that represents the current token so in this case we have two inputs and one output for each token in the vocabulary which in this case means five outputs note a fully connected layer is just a simple neural network with weights numbers we multiply the inputs by and biases numbers we add to the sums of the products also note in the original GPT manuscript instead of a new fully connected layer they use the word embedding Network that we started with

instead of a new fully connected layer they use the word embedding Network that we started with but in reverse in other words they just reuse the same set of Weights that we use to encode the words into numbers and then flip them to help decode the numbers however not all decoder only Transformers do it this way in a very common alternative is a fully connected layer small bam now when we do the math we get five output values which we run through a final soft Max function to generate the next

math we get five output values which we run through a final soft Max function to generate the next word is and since the prompt was what is statquest the model generated the correct word bam the second word in the prompt is is and it generates the word what which is not correct however the correct word stat Quest was almost correctly generated so we hope our model doesn't feel too much shame note if we were training the decoder only Transformer then we would use the fact that we made a mistake

if we were training the decoder only Transformer then we would use the fact that we made a mistake to modify the weights and biases in contrast when we are just using the model to generate responses then it really doesn't matter what words come out right now so in this case we'll just note that we made a mistake and move on lastly the word stat Quest generates the EOS token which is correct since we are at the end of The Prompt bam now let's review what we've done so far we started with an

we are at the end of The Prompt bam now let's review what we've done so far we started with an input prompt what is stackquest and we used word embedding to convert each word into numbers and we used positional encoding to keep track of word order in the prompt then we added masked self-attention to determine the relationships among the words in the prompt then we added residual connections to make it easier to train the model lastly we added a fully connected layer and a soft Max to generate

it easier to train the model lastly we added a fully connected layer and a soft Max to generate the next word each part of the decoder only Transformer is reused so that it can handle prompts of different lengths and the encoding for each word in the prompt can happen at the same time rather than sequentially and thus can be done quickly when multiple Computing cores are available lastly generating the output uses the exact same steps that we use to encode the prompt thus generating the output

the output uses the exact same steps that we use to encode the prompt thus generating the output starts with word embedding and it uses the exact same word embedding Network that we use to encode The Prompt and because we just finished encoding The Prompt we start generating the output from the EOS token in this case we're using the EOS token to start generating the output because that is a common way to initialize this process however sometimes you'll see people use SOS for startup sentence or

way to initialize this process however sometimes you'll see people use SOS for startup sentence or start of sequence to initialize the process Josh starting with SOS makes more sense to me then you can do it that way Squatch I'm just saying that a lot of people start with EOS also note we will start with the EOS token regardless of whether or not it was the last token generated when we encoded The Prompt anyway we plug in 1 for Eos and zero for everything else and we end up with the numbers

The Prompt anyway we plug in 1 for Eos and zero for everything else and we end up with the numbers that represent the EOS token now let's shrink the word embedding down to make more space so that we can add positional encoding note the EOS token comes after the three tokens that represent the input so it's in the fourth position and since the EOS token is in the fourth position with two embeddings we just add those two position values and before we move on we need to say a few more words about

we just add those two position values and before we move on we need to say a few more words about masked self-attention so far we've talked about how masked self-attention helps the decoder only Transformer keep track of how words are related within the input however it's also important to keep track of the relationships between the input sentence and the output for example if the input sentence was don't eat the delicious looking and smelling Pizza then when generating new output it is super

was don't eat the delicious looking and smelling Pizza then when generating new output it is super important to keep track of the very first word don't if we focus on other parts of the sentence and omit the don't then we'll end up with eat the delicious looking and smelling Pizza and these two sentences have completely opposite meanings so it's super important that when generating the output we keep track of the significant words in the input the nice thing is that all we have to do to add

we keep track of the significant words in the input the nice thing is that all we have to do to add this ability to our decoder only Transformer is just include the prompt when we do Mass self-attention while generating the output so the first thing we do is calculate the query numbers for the EOS token and then we calculate the key numbers using the same sets of Weights we used for the prompt and then we bring back the key values for the prompt what is statquest then we calculate the

prompt and then we bring back the key values for the prompt what is statquest then we calculate the similarities between the query and the keys and run everything through the softmax function now we calculate the value numbers for the EOS token and bring back all of the value numbers we calculated earlier and scale all of them based on the similarity scores lastly we add the pairs of scaled values together to get the masked self-attention values for the EOS token bam anyway now that we have the

together to get the masked self-attention values for the EOS token bam anyway now that we have the masked self-attention values for the EOS token we add the residual connections Now we move the diagram to the left and run the numbers that represent the EOS token through the same fully connected layer we used earlier and the same soft Max function we used before and the first word generated by our decoder only Transformer is awesome which is totally awesome however even though the output is

our decoder only Transformer is awesome which is totally awesome however even though the output is awesome we're not done yet because the decoder only Transformer will keep generating output until it generates the EOS token so we plug the word we just generated awesome into another copy of the word embedding layer then we add the position on encoding using the values for the fifth position because now the sequence is what is statquest eos awesome now we calculate the masked self-attention

now the sequence is what is statquest eos awesome now we calculate the masked self-attention values [Music] now that we have the masked self-attention values for awesome we add the residual connections Now we move the diagram to the left and run the numbers that represent awesome through the same fully connected layer we used earlier and the same soft Max function we used before and our decoder only Transformer generates the EOS token which means we are done generating output double bam now

only Transformer generates the EOS token which means we are done generating output double bam now let's talk about the differences between the decoder only Transformer that we just learned about in a basic Transformer as we just saw a decoder only Transformer uses the exact same components to encode The Prompt that it uses to generate the output and it uses masked self-attention which is calculated with only the current word in everything that preceded it and the masked self-attention is

with only the current word in everything that preceded it and the masked self-attention is applied equally to the input prompt and to the output that is generated masked self-attention allows a decoder-only Transformer to determine how words in the prompt are related and make sure that it keeps track of important input words when generating the output in contrast a regular Transformer uses one type of unit called the encoder to encode The Prompt in a different type of unit called the decoder to

of unit called the encoder to encode The Prompt in a different type of unit called the decoder to generate the output when encoding the input prompt instead of using masked self-attention a normal Transformer uses self-attention which includes all of the words in the input not just the ones that came before to determine how the words are related to each other and a normal Transformer uses encoder decoder attention to let the decoder keep track of important words in the input encoder decoder

decoder attention to let the decoder keep track of important words in the input encoder decoder attention uses queries from the decoder but only keys and values from the encoder now so far we've only talked about how attention is used in a normal Transformer during inference when it encodes the input and generates new output however during training a normal Transformer uses mask self-attention in the decoder for example during training we know the output should be awesome EOS which means we

in the decoder for example during training we know the output should be awesome EOS which means we don't have to decode the initial EOS before we decode awesome like we do when we are generating new output instead since we know we will be decoding awesome we can do its math at the same time we do the math for the EOS token doing the math at the same time means we can train faster and thus during training a normal Transformer will use masked self-attention on the tokens in the known output this

training a normal Transformer will use masked self-attention on the tokens in the known output this allows the Transformer to learn how to generate the correct output without cheating and looking ahead note when we are training a normal Transformer the Mast self-attention only includes the output tokens in contrast a decoder-only Transformer uses massed self-attention all of the time not just during training and it includes the input and the output bam so the three big differences between a

during training and it includes the input and the output bam so the three big differences between a normal Transformer and a decoder only Transformer are a normal Transformer uses one unit to encode the input called the encoder and a separate unit to generate the output called the decoder and a normal Transformer uses two types of attention during inference self-attention and encoder decoder attention lastly during training a normal Transformer uses massed self-attention but only on the output

lastly during training a normal Transformer uses massed self-attention but only on the output in contrast a decoder only Transformer has a single unit for both encoding the input and generating the output and a decoder only Transformer uses a single type of attention masked self-attention and a decoder only Transformer uses mask self-attention all the time on everything the input and the output triple bam note there's a lot more to say about normal encoder decoder Transformers so if you're

triple bam note there's a lot more to say about normal encoder decoder Transformers so if you're interested check out the quest now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the statquest PDF study guides in my book The stackquest Illustrated guide to machine learning at stackquest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see

we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support stackquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

tensors do it for the data tensors do it for the speed tensors do it whenever you feel the need steadquest hello i'm josh starmer and welcome to statquest today we're going to talk about tensors for neural networks and they're going to be clearly explained this stack quest is sponsored by lightning and grid.ai with lightning you can design build and scale models with ease focus on the business and research problems that matter to you lightning takes care of everything else and with grid you can

research problems that matter to you lightning takes care of everything else and with grid you can use the cloud to seamlessly train hundreds of models from your laptop with a single command no code change is necessary for more details follow the links in the pinned comment below note one thing that makes tensors a little confusing is that different people use the word tensor differently people in the math and physics community define tensor one way and people in the machine learning community

the math and physics community define tensor one way and people in the machine learning community define tensor a different way in this stat quest we're going to focus on the way tensor is used in the machine learning community within the machine learning community tensors are used in conjunction with neural networks so we need to talk about neural networks note if you're not already familiar with neural networks feel free to check out the quests the links are in the description below anyway

neural networks feel free to check out the quests the links are in the description below anyway neural networks can do a lot of things for example in the statquest neural networks part 1 inside the black box we had a simple neural network that had a single input drug dosage and used that single value to predict a single output the efficacy of the dosage then in the stat quests on back propagation we saw that even with this super simple neural network and this super simple training data with

we saw that even with this super simple neural network and this super simple training data with only three data points we still had to do a lot of math for the neural network to fit this squiggle to the data ugg math then in the stat quest neural network's part 4 multiple inputs and outputs we had a fancier neural network that had two inputs that corresponded to two different flower measurements and had three outputs that predicted which irish species these two measurements came from and then

and had three outputs that predicted which irish species these two measurements came from and then we saw how the neural network does a lot of math to make those predictions double ugh more math then in the statquest neural networks part 8 image classification with convolutional neural networks we had a super fancy neural network that had a 6 pixel by 6 pixel image so 36 pixels in all as the input and two outputs that predicted whether the image was of an x or an o and we walked through a whole

and two outputs that predicted whether the image was of an x or an o and we walked through a whole lot of math that we needed to do in order to make those predictions triple ugg so much math note even though this neural network needs to do a whole lot of math it's still relatively simple compared to the types of neural networks that are used in practice for example the input to this convolutional neural network is a relatively small 6 pixels by 6 pixels black and white image however in practice

neural network is a relatively small 6 pixels by 6 pixels black and white image however in practice usually the input image is much larger like 256 by 256 and that means the input has 65 536 pixels and usually the image is color instead of black and white and color images are usually split into three color channels red green and blue and since the neural network treats each channel separately that basically triples the number of pixels we have to do math on so now we're up to three times sixty

basically triples the number of pixels we have to do math on so now we're up to three times sixty five thousand five hundred thirty six which equals one hundred ninety six thousand six hundred eight pixels that we have to do a lot of math on and this is just one image and usually we need to do a ton of images to train the neural network so that means we have to do a ton of math on a ton of images and if we want to apply a neural network to video which is basically a series of images then we

and if we want to apply a neural network to video which is basically a series of images then we have even more math the good news is is that all this math is what tensors were designed for bam now let's talk about what tensors are from the perspective of someone who is creating a neural network tensors are ways to store the input data which in this example consists of three color channels for every single frame but as we saw earlier the input can also be super simple and consist of a single

every single frame but as we saw earlier the input can also be super simple and consist of a single value and tensors also store the weights and biases that make up the neural network so from the perspective of someone creating a neural network tensors can seem really boring for example the input value for this neural network is just a single value which in most programming languages we'd call a scalar however to make things seem more exciting we can use fancy terminology and call the input

a scalar however to make things seem more exciting we can use fancy terminology and call the input which is just a single value a zero dimensional tensor when a neural network takes two input values like this one then in most programming languages we would say we store the inputs in an array however using tensor talk we will call this a one-dimensional tensor likewise when the input is a single image most programming languages would call it a matrix but we'll call it a two-dimensional tensor

image most programming languages would call it a matrix but we'll call it a two-dimensional tensor and when the input is video most programming languages would call this a multi-dimensional matrix or a multi-dimensional array or for you python people an nd array however using tensor talk we will call it an n-dimensional tensor so just like i said earlier from the perspective of someone creating a neural network tensors can seem really boring because all we have done is rename things that

a neural network tensors can seem really boring because all we have done is rename things that already exist so what's the big deal well unlike normal scalars arrays matrices and n-dimensional matrices tensors were designed to take advantage of hardware acceleration in other words tensors don't just hold data in various shapes like these but they also allow for all the math that we have to do with the data to be done relatively quickly usually tensors and the math they do are sped up with

with the data to be done relatively quickly usually tensors and the math they do are sped up with special chips called graphics processing units gpus but there are also tensor processing units tpus that are specifically designed to work with tensors and make neural networks run relatively quickly double bam note one thing i hinted at early on but didn't dive into the details about is that one of the things we do with neural networks is estimate the optimal weights and biases with back

one of the things we do with neural networks is estimate the optimal weights and biases with back propagation and if you saw the stat quest on back propagation you'll know that we have to derive a bunch of derivatives and do a whole lot of the chain rule well one more cool thing about tensors is that they take care of back propagation for you with automatic differentiation this means you can pretty much create the fanciest neural network ever and the hard part figuring out the derivatives will

much create the fanciest neural network ever and the hard part figuring out the derivatives will be taken care of by the tensors triple bam in summary there are two types of tensors one type is used by mathematicians and physicists we did not talk about these today the other type of tensor is used in neural networks this is the type we talked about tensors for neural networks hold the data and the weights and biases and are designed for hardware acceleration so that neural networks can do all

weights and biases and are designed for hardware acceleration so that neural networks can do all the math they need to do in a relatively short period of time and they take care of back propagation with automatic differentiation bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stack quest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stack quest if

there's something for everyone hooray we've made it to the end of another exciting stack quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Essential Matrix Algebra for Neural Networks, Clearly Explained!!!

If you can add and multiply, then you can do matrix stuff! Hooray! StatQuest. Hello, I'm Josh Starmer and welcome to StatQuest. Today we're going to talk about essential matrix algebra for neural networks and it's going to be clearly explained. Start small but then build as big as you want. Lightning! Bam! This StatQuest is also brought to you by the letters 'A', 'B', and 'C'. 'A' always, 'B' be, 'C', curious. Always be curious. Not that you need to, but if you watched any of the StatQuest of

'C', curious. Always be curious. Not that you need to, but if you watched any of the StatQuest of videos on neural networks, then you already know that even the most state-of-the-art models, like transformers, can be explained with relatively simple diagrams and flowcharts. However, if you try to code neural networks using any of the tools that make the job easier, like PyTorch and PyTorch Lightning, then it won't be long before you need to look at the documentation and you'll see something

then it won't be long before you need to look at the documentation and you'll see something like this. Ugh! Or you'll have a small bug in your code and you'll see an error like this. Double ugh! Or you might just want to read up on the latest trends and neural networks and not wait for StatQuest to explain it, and you'll see stuff like this. Triple ugh! All this math looks complicated and hard to understand. Don't worry, 'Squatch. We're going to learn how to read all of this gobbledygook one

to understand. Don't worry, 'Squatch. We're going to learn how to read all of this gobbledygook one step at a time. Bam! All of these things are based on matrix equations, which provide a very compact way to describe neural networks. So if you want to understand the documentation, debug your code, or just read the latest manuscripts about neural networks, you need to know how to work with matrix equations. So in order to understand how matrix equations apply to neural networks, we're going to

equations. So in order to understand how matrix equations apply to neural networks, we're going to show how this specific neural network translates into this compact matrix equation. Ugh, that equation looks weird. Are you sure I'm going to understand it? Don't worry 'Squatch. We will go through it one step at a time. Okay. However, we'll start by learning some basic terminology and build up an understanding of the strangest part of matrix equations, matrix multiplication. And in order to do

understanding of the strangest part of matrix equations, matrix multiplication. And in order to do that, imagine StatSquatch just got a ticket to see Taylor Swift at the Friends Arena in Stockholm, Sweden. 'Squatch, are you ready for it? Yes. Where is your seat? My seat is close to the front on stage left. Now, if we put an x and y axis centered on the stage, then in terms of those axes, the coordinates for 'Squatch's seat are 2, 1. Now, for reasons that we will never, ever, ever understand,

for 'Squatch's seat are 2, 1. Now, for reasons that we will never, ever, ever understand, Taylor decides to flip the direction of her stage 180 degrees. I knew she was trouble. Anyway, rotating the stage means 'Squatch's seat and everyone else's needs to rotate as well. To determine the new x and y coordinates of 'Squatch's seat, we can use these equations. For example, if we plug in the original coordinates, x = 2 and y = 1, then the new x and y coordinates are -2, -1. In other words, these

coordinates, x = 2 and y = 1, then the new x and y coordinates are -2, -1. In other words, these two equations transform the point 2, 1 into the point -2, -1. Oh no! It's the dreaded terminology alert. Because these equations, which transform the original x and y coordinates into new x and y coordinates, only multiply and add stuff to the original x and y coordinates, this transformation is called a linear transformation. For example, if we focus on the first equation and plug in x = 2 and y =

a linear transformation. For example, if we focus on the first equation and plug in x = 2 and y = 1, then we get -2. If we then increase x to 3, then we get -3. Likewise, increasing x to 4 gives us -4. Thus, each time we increase the value for x by 1, we decrease the output by -1. In other words, a constant change in the value for x results in a constant change in the output. Because the amount of change in the output is always the same, just like the slope, or the amount of change in the y

of change in the output is always the same, just like the slope, or the amount of change in the y axis, of a straight line is always the same, this transformation is called a linear transformation. In contrast, if the transformation was 2 to the x, then plugging in x = 2 would give us 4. Plugging in x = 3 would give us 8. And plugging in x = 4 would give us 16. And we see that each time we increase the value for x by 1, the output increases by a different amount. Because the amount of change in

the value for x by 1, the output increases by a different amount. Because the amount of change in the output changes. Just like the slope of a curve changes, this transformation is called a nonlinear transformation. Anyway, going back to our original linear transformations, the reason I'm making big deal about linear versus nonlinear transformations is that matrix algebra is especially useful for linear transformations. Thus, using matrix notation, we can write out our linear transformation

for linear transformations. Thus, using matrix notation, we can write out our linear transformation like this. In this example, we've put the old x and y coordinates into something called a row matrix or row vector. We can also call this row matrix a 1 by 2 matrix because it has one row and two numbers in that row. So we say it has two columns. We can also say that this matrix is one-dimensional because everything is on a single row. The coefficients, the numbers we multiply x and y by and

because everything is on a single row. The coefficients, the numbers we multiply x and y by and define the transformation, go into a matrix. And we can call this a 2 by 2 matrix because it has two rows and two columns. Or we can call this a two dimensional matrix because it has multiple rows and columns. The coefficients in the first equation go into the first column in the matrix and the coefficients in the second equation go into the second column in the matrix. Josh, this seems really weird

in the second equation go into the second column in the matrix. Josh, this seems really weird and I have no idea how I will remember this. Don't worry 'Squatch. We will explain exactly why we're doing all this in just a second. And knowing why we do this will help you derive it on your own. Bam! Anyway, if, just like before, we let x = 2 and y = 1, then we can multiply the row matrix that contains the original coordinates by the transformation matrix with the coefficients. Hey Josh, I know how

the original coordinates by the transformation matrix with the coefficients. Hey Josh, I know how to multiply numbers, but how do I multiply matrices? We start by multiplying the row of x and y coordinates by the numbers in the first column in the transformation matrix. So, in this case, we start by multiplying 2 by -1, then we multiply 1 by 0. And lastly, we add the terms together. And this gives us the original transformation for the new x coordinate that we started with, which tells us that

us the original transformation for the new x coordinate that we started with, which tells us that the new x coordinate is -2. Then we multiply the same row of x and y coordinates by the numbers in the second column in the transformation matrix. So that means we multiply 2 by 0 and 1 by -1. And lastly, add the products together. And that gives us the original transformation for the new y coordinate that we started with, which tells us that the new y coordinate is -1. Combined, the matrix

that we started with, which tells us that the new y coordinate is -1. Combined, the matrix multiplication transforms the old x and y coordinates to the new x and y coordinates. Bam? It seems like a lot of trouble to do the same thing as before. Well, what if Taylor rotated the stage 90 degrees clockwise from where it was before? Oops, she did it again? No 'Squatch, that's Britney Spears. Anyway, where should 'Squatch sit? To determine the newest x and y coordinates for 'Squatch's seat, we can

where should 'Squatch sit? To determine the newest x and y coordinates for 'Squatch's seat, we can plug the coordinates we just calculated into these equations. And just like before, we can convert them into matrix notation by putting the x and y coordinates we just calculated in a one-dimensional row matrix with one row and two columns, and putting the coefficients into a two dimensional transformation matrix with 2 rows and 2 columns. The coefficients in the first equation go into the first

matrix with 2 rows and 2 columns. The coefficients in the first equation go into the first column in the transformation matrix, and the coefficients in the second equation go into the second column in the transformation matrix. Now we plug in the x and y coordinates we calculated earlier, -2 and -1, and do the matrix multiplication just like before, row by column. We start by multiplying the row of x and y coordinates by the numbers in the first column in the transformation matrix. So we

row of x and y coordinates by the numbers in the first column in the transformation matrix. So we multiply -2 by 0, and we multiply -1 by 1, and then we add the terms together. And that gives us the newest x coordinate, -1. Then we multiply the same row of x and y coordinates by the numbers in the second column in the transformation matrix. So we multiply -2 by -1 and multiply -1 by 0, and then add the terms together. That gives us the newest y coordinate 2. Thus, 'Squatch moves from -2 , -1 to

the terms together. That gives us the newest y coordinate 2. Thus, 'Squatch moves from -2 , -1 to -1, 2. Josh, I still don't get why we multiply matrices in such a strange way. Well, the reason why we multiply the numbers in a row by the numbers in a column and then add the products together, is that when we use matrix multiplication to multiply the first transformation by the second transformation, which means we multiply the first row by the first column and add the products, and we multiply

which means we multiply the first row by the first column and add the products, and we multiply the first row by the second column and add the products, and then we multiply the second row by the first column and add the products. Note, because we are now using this second row of the first matrix, we put the result in the second row in the output. In other words, when we use a new row to do multiplication, we start a new row in the output matrix. Anyway, then we multiply the second row by the

we start a new row in the output matrix. Anyway, then we multiply the second row by the second column and add the products. And we end up with a new two-by-two transformation that combines the effects of both transformations. The new combined transformation transforms the original point directly to the newest point without having to take the intermediate steps. In other words, matrix multiplication is funky so that we can easily combine a sequence of transformations into a single

multiplication is funky so that we can easily combine a sequence of transformations into a single transformation. To convince ourselves that we can use the combined transformation to transform the original point to the newest point without having to do the intermediate steps. Let's multiply the original coordinates by the combined transformation. So we start by plugging in the original coordinates 2 and 1. Then we just do the row by column math. Beep boop boop boop boop beep boop boop boop

2 and 1. Then we just do the row by column math. Beep boop boop boop boop beep boop boop boop boop, beep boop boop! And we see that the combined transformation transforms the original coordinates, 2, 1, to the newest coordinates, -1, 2. Bam! Note, matrix multiplication is such that no matter how many times Taylor Swift changes her mind about which direction the stage should face, we can just multiply the individual transformations together to get a combined transformation. And that combined

the individual transformations together to get a combined transformation. And that combined transformation allows us to go directly from the original location to the final location without having to do the intermediate steps. Bam. Okay, now that we understand why matrix multiplication is so funky, let's talk about another confusing thing about matrix multiplication. Because matrix multiplication is applied row by column, we can't just reverse the order of the matrices and expect things to work

is applied row by column, we can't just reverse the order of the matrices and expect things to work out the same. In fact, we can't even multiply these two matrices together because each row in the first matrix has two numbers and each column in the second matrix only has one number. For example, if we try to multiply the first row of numbers in the first matrix by the first column of numbers in the second matrix, then we can multiply 0 by 2, but there is nothing to multiply this 1 by. In

in the second matrix, then we can multiply 0 by 2, but there is nothing to multiply this 1 by. In contrast, it's possible to multiply these two matrices because we have the same number of values in this row that we have in these columns. In general, the number of columns in the first matrix has to match the number of rows in the second matrix. If, for some reason, we want to switch the order of these matrices, then we need to change each row into a corresponding column. Now we can do the

of these matrices, then we need to change each row into a corresponding column. Now we can do the multiplication correctly, row by column. Beep, beep, boop, beep, boop, beep, boop, boop. And after turning each row into a corresponding column, the math works out just like it did before. Note, because we turned the rows in the original matrices into columns, the output is now a column instead of a row. Oh no, it's the dreaded terminology alert. Changing the rows in a matrix into corresponding

a row. Oh no, it's the dreaded terminology alert. Changing the rows in a matrix into corresponding columns is called transposing a matrix, and we notate the transpose function with a superscript 't'. So this matrix is the transpose of the original coordinates. This is the transpose of the combined transformation matrix, and this is the transpose of the newest coordinates. As we saw earlier, the original coordinates were in a one row by two column row matrix, which is also called a 1 by 2

the original coordinates were in a one row by two column row matrix, which is also called a 1 by 2 matrix. But after we transpose the original matrix, we end up with a 2 row by 1 column column matrix, which is also called a 2 by 1 matrix. Likewise, the transformed coordinates were also in a 1 row by 2 column row matrix, or a 1 by 2 matrix, and the transposed matrix is a 2 row by 1 column column matrix, or a 2 by 1 matrix. In contrast, the combined transformation has 2 rows and 2 columns, and

matrix, or a 2 by 1 matrix. In contrast, the combined transformation has 2 rows and 2 columns, and thus is a 2 by 2 matrix, and the transposed matrix also has 2 rows and 2 columns, and is also called a 2 by 2 matrix. Now, because writing out matrices can be cumbersome, people often replace them with variable names. Matrices with only one row or column are usually referred to with lowercase letters that are sometimes italicized and sometimes not. And matrices with more than one row and column

that are sometimes italicized and sometimes not. And matrices with more than one row and column are usually referred to with uppercase letters that are also sometimes italicized and sometimes not. Out in the wild, you'll find additional notation styles, so just be prepared to be flexible. Anyway, given these variable names, we can rewrite the matrix equation like this 'a' times 'W' equals 'b'. Or we can refer to the transposed matrices by simply adding a superscript 't' to each variable name

Or we can refer to the transposed matrices by simply adding a superscript 't' to each variable name and rewrite the matrix equation like this: the transpose of 'W' times the transpose of 'a' equals the transpose of 'b'. Either way we do it, we will get the same transformed coordinates. Note, we could have just as easily called this column matrix 'a' and called this row matrix the transpose of 'a'. Likewise, we could call this matrix 'W' and this matrix the transpose of 'W'. Lastly, this column

Likewise, we could call this matrix 'W' and this matrix the transpose of 'W'. Lastly, this column matrix could be called 'b', and this could be called the transpose of 'b'. Thus, we could also write the matrix equations like these: the transpose of 'a' times the transpose of 'W' equals the transpose of 'b', or 'W' times 'a' equals 'b'. I mention these alternative ways to write the equations because out in the wild, you'll see all kinds of notation, so just be prepared to be flexible. Lastly, if

out in the wild, you'll see all kinds of notation, so just be prepared to be flexible. Lastly, if we want to refer to an individual value in a matrix, like this -1 in the bottom left-hand corner of the matrix we originally named 'W', then, if the variable is uppercase, we convert it to lowercase and add subscript row and column indices like this. Bam! Now let's talk about how all this applies to a neural network. This neural network may look really fancy, but all it does is take two

applies to a neural network. This neural network may look really fancy, but all it does is take two measurements from an iris flower, the width of a petal, which is this part of the flower, and the width of a sepal, which is this part of the flower. And with that information, it predicts the species either Setosa, Versicolor, or Virginica. Anyway, let's start with a petal that is 0.5 units wide and a sepal that is 0.4 units wide. The first thing this neural network does is multiply the petal

and a sepal that is 0.4 units wide. The first thing this neural network does is multiply the petal width by -2.5. Hey, wait a minute. Where did that -2.5 come from? All of the numbers in this and pretty much every neural network come from something called backpropagation. And there's a lot to be said about backpropagation, so if you want to learn about it, check out the Quests. Anyway, then we add that term to the sepal width multiplied by 0.6. And at the same time, this neural network also

add that term to the sepal width multiplied by 0.6. And at the same time, this neural network also multiplies the petal width by -1.5. Then we add that term to the sepal width multiplied by 0.4. Now, even though we are looking at these equations for the first time, they may remind you of the equations used to transform 'Squatch's ticket to see Taylor Swift. Those memories follow me around. In both cases we have two variables multiplied by numbers, and then the terms are added together. And just

cases we have two variables multiplied by numbers, and then the terms are added together. And just like how we converted the ticket transformation equations into a matrix equation, we can convert the neural networks transformation into a matrix equation, where we put the petal and sepal width into a row matrix and multiply them by a matrix containing the coefficients, or the weights, in a neural network. Now we just plug in the petal and sepal widths, 0.5 and 0.4, and do the math by multiplying

Now we just plug in the petal and sepal widths, 0.5 and 0.4, and do the math by multiplying the row of input values by the coefficients, or weights, in the first column and then adding the terms, and then multiplying the row of input values by the weights in the second column and then adding the terms. And that gives us a 1 by 2 row matrix of transformed values, -1.0 and -0.6. So this first part of the neural network transforms the input values. The next thing the neural network does is add

of the neural network transforms the input values. The next thing the neural network does is add bias values to each transformed value. So that means we add 1.6 to the first transformed value and we add 0.7 to the second transformed value. And when we do the addition, we end up with a row matrix with 0.6 in the first column and 0.1 in the second column. Now we are ready to use 0.6 as the x axis coordinate for the activation function on top and 0.1 as the x axis coordinate for the activation

coordinate for the activation function on top and 0.1 as the x axis coordinate for the activation function on the bottom. Now we run both values through the ReLU activation functions. Note, there's a lot to be said about the ReLU activation function, so if you're interested, check out the Quest. Otherwise, just know that the ReLU activation function outputs zero or the input value, whichever is larger. Thus, because the input for the top ReLU is 0.6, which is greater than 0, the output is 0.6.

Thus, because the input for the top ReLU is 0.6, which is greater than 0, the output is 0.6. And because the input for the bottom ReLU is 0.1, which is also greater than 0, the output is 0.1. Now the network has three transformations that it applies to the ReLU output. And doing the row by column multiplication and summation gives us this one-dimensional 1 by 3 row matrix. Then we add bias terms to each transformed value and we end up with the output values for Setosa, Versicolor, and

terms to each transformed value and we end up with the output values for Setosa, Versicolor, and Virginica. Bam! Thus, when the petal with is 0.5 and the sepal width is 0.4, this neural network predicts that the measurements came from Versicolor, since its output value is closest to one. So, now we've seen how this neural network can be written out as a sequence of matrix multiplication and addition. Bip bip bip bip bip bip bip. Now, if we call the row matrix, that contains the input values

Bip bip bip bip bip bip bip. Now, if we call the row matrix, that contains the input values 'a', and call the first transformation matrix, which contains weights, w1, and the first row matrix of bias terms b1, then we can use 'a' times w1 + b1 as the input for the ReLU activation function. We can then multiply the output of the ReLU by the next transformation matrix, which will call w2, because it also contains weights. And then we add the final bias values, b2, to get the predicted species.

it also contains weights. And then we add the final bias values, b2, to get the predicted species. And at long last, we've seen how to transform a neural network into a super compact matrix equation. Double bam! Now to review, let's go back to the matrix equations we started with and see if we can make sense of them. This first bit comes from the PyTorch documentation for the nn.linear class. And we just saw that an equation like this corresponds to a part of a neural network that looks like

we just saw that an equation like this corresponds to a part of a neural network that looks like this. This 'x' corresponds to the input values, and like we saw before, the input values can be put in a one-dimensional row matrix like this. This transpose of 'A' corresponds to the multiplication of the inputs by the weights and the sums of the terms. And all that math, the multiplication by the weights and the summation of the terms, can be accomplished by multiplying the inputs by a

by the weights and the summation of the terms, can be accomplished by multiplying the inputs by a transformation matrix containing the weights. Note, the transpose 't' of matrix 'a' just means that nn.linear assumes the weights are in rows. But in order for this math to work out, they need to be in columns. Lastly, this 'b' corresponds to the addition of the bias terms to the result of the matrix multiplication, and that just means that we put the bias terms in a one-dimensional row matrix and

multiplication, and that just means that we put the bias terms in a one-dimensional row matrix and add those values to the transformed values. Thus, this simple neural network multiplies and adds these matrices, and that corresponds to this matrix equation. Thus, the nn.linear class builds a very common part of a neural network. And do you remember how early on in this StatQuest we made a big deal about linear versus nonlinear transformations and how a linear transformation means a constant

deal about linear versus nonlinear transformations and how a linear transformation means a constant change in the input results in a constant change in the output? Well, this part of a neural network and its corresponding matrix equation is a linear transformation. And now we also know that the nn.linear class gets its name from the fact that it performs a linear transformation. Now, let's talk about this error message. Although there are some technical differences between tensors and matrices,

this error message. Although there are some technical differences between tensors and matrices, they have a lot in common and we know that a 1D, or one dimensional matrix, is just a single row or a single column, but the function that generated the error was expecting something with at least two dimensions like this matrix. So the error just means we need to think a little bit more about the data we are giving the function. Note, there's a lot more to be said about tensors in the context of

we are giving the function. Note, there's a lot more to be said about tensors in the context of neural networks. So if you want to learn more, check out the Quest. Lastly, this is the equation for attention, which is used by transformers, the neural network architecture behind ChatGPT. Attention requires three matrices, 'Q', 'K', and 'V'. For example, given these three matrices, the first thing we do is multiply 'Q' by the transpose of 'K'. And given these example matrices that gives us 11.7.

we do is multiply 'Q' by the transpose of 'K'. And given these example matrices that gives us 11.7. Then we divide by the square root root of d sub k. And for the sake of this example, let's assume d sub k equals 2. So we divide 11.7 by the square root of 2, and that gives us 8.3. Note, if we had started out with matrices that had more rows and columns, we'd end up with a larger matrix at this point. And to be clear, attention is expecting larger matrices, and that is why these variable names

And to be clear, attention is expecting larger matrices, and that is why these variable names are capitalized. However, we're just using row matrices because they keep the example as simple as possible and they work. Anyway, now we take the SoftMax of our little tiny matrix and we get 1.0. Note, this is probably the world's lamest example of the SoftMax function in action, but if you want to learn more about it, check out the Quest. Anyway. The last thing we do is multiply our tiny 1 row by 1

more about it, check out the Quest. Anyway. The last thing we do is multiply our tiny 1 row by 1 column matrix by 'V'. And that gives us these two values. And those are the attention values for the example matrices. So given these matrices, we might not know what attention means, but at least we can do the math. Bam? Well, if you want to know more about what attention does and means, check out the Quest. Triple Bam! Now it's time for some shameless self-promotion. If you want to review

out the Quest. Triple Bam! Now it's time for some shameless self-promotion. If you want to review statistics and machine learning offline, check out the StatQuest PDF study guides and my book, the StatQuest Illustrated Guide to Machine Learning at statquest.org. There's something for everyone! Hooray! We've made it to the end of another exciting StatQuest. If you liked this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, consider contributing to my

to see more, please subscribe. And if you want to support StatQuest, consider contributing to my patreon campaign, becoming a channel member, buying one or two of my original songs, or a t-shirt, or a hoodie, or just donate. The links are in the description below. All right, until next time, Quest on.

The matrix math behind transformer neural networks, one step at a time!!!

we're going to do a lot of math row by column aray stat Quest hello I'm Josh starmer and welcome to stat Quest today we're going to talk about the Matrix math behind Transformer neural networks and we're going to go through it one step at a time this stat Quest is brought to you by the letters a b and c a always b b c be curious always be curious note this stack Quest assumes that you already understand the basics of how a Transformer neural network works and that you are already familiar with

the basics of how a Transformer neural network works and that you are already familiar with the essential Matrix algebra that is used with neural networks if not check out the quests in this stack Quest we're going to learn how the math associated with an encoder decoder Transformer can be written in Matrix notation hey Josh why would we want to learn this Matrix notation because understanding The Matrix notation will make it infinitely easier to understand how to code Transformers and neural

Matrix notation will make it infinitely easier to understand how to code Transformers and neural networks in general bam specifically we're going to walk through the Matrix arithmetic used by a Transformer neural network that can translate a simple English sentence let's go into Spanish vamos note we're specifically going through an in encoder decoder Transformer and not an encoder only or decoder only Transformer because encoder decoder Transformers cover everything we'll need for any type of

only Transformer because encoder decoder Transformers cover everything we'll need for any type of Transformer so the first thing we need to do is convert the input phrase let's go into word embeddings actually in this example we're going to start our input phrase with the SOS or start of sequence token so that means we need to determine the word embedding value for SOS lets and go for all three tokens we use the exact same word embedding Network that looks like this where each input has two

tokens we use the exact same word embedding Network that looks like this where each input has two separate connections to each activation function and each connection has a weight a value we multiply the input by and then we add those products up before using the sums as inputs to the activation functions in Matrix notation the word embedding Network starts with a matrix that corresponds to the input values multiplied by a matrix that contains the weights associated with each input the first

input values multiplied by a matrix that contains the weights associated with each input the first row in this Matrix corresponds to the weights associated with the input for the SOS token the second row corresponds to the two weights associated with lets the third row is for two and the last row is for go so when the input tokens are so s lets and go then the first row in the input Matrix has a one for SOS and Zer for everything else the second row has a one for lets and zeros for everything

one for SOS and Zer for everything else the second row has a one for lets and zeros for everything else and the third row has a one for go and zeros for everything else now we just do the matrix multiplication row by column boop boop and we end up with the word embeddings for the input tokens bam now let's move the W embeddings for SOS lets and go over to the left and add the position en coding for the SOS token which is the first token in the input we add the corresponding y- AIS cordinates

for the SOS token which is the first token in the input we add the corresponding y- AIS cordinates from the S and cosine curves then we add the corresponding y-axis coordinates for the second token lets and then we add the corresponding y- AIS coordinates for the third token go note in practice these y-axis coordinates are precomputed and stored in a lookup table so figuring out what values to add doesn't take any time also note we'll talk about how the S and cosine curves are calculated in a

doesn't take any time also note we'll talk about how the S and cosine curves are calculated in a follow-up video on how to code Transformers anyway and now we just do the element by element addition to get the word embeddings plus positional encodings for each token now we have encoded values for the inp put tokens and that means we now need to calculate self attention specifically that means we need to calculate the queries keys and values using the encoded values for each of the input tokens

need to calculate the queries keys and values using the encoded values for each of the input tokens for example to calculate the query values for the SOS token we multiply the first encoded value 1.16 by 2.22 and we multiply the second encoded value 0.23 by 0.17 before adding those two products together using Matrix notation we can accomplish the same thing by multiplying the row of encoded values for the SOS token by a column that contains the query weights likewise calculating the second

for the SOS token by a column that contains the query weights likewise calculating the second query value for the SOS token corresponds to this equation which corresponds to multiplying the encoded values by a second column containing 0.41 and 0.51 in other words we can calculate the query values for the SOS token by multiplying them by a matrix of query weights and when we do the math we get 2.61 and 0.36 likewise we can calculate the query values for all of the tokens by multiplying them by

and 0.36 likewise we can calculate the query values for all of the tokens by multiplying them by The Matrix of query weights bam now we've calculated all of the query values for the input tokens note before we move on I want to point out that I labeled the query weights Matrix with the transpose symbol this is because Pi torch prints out the weights in a way that requires them to be transposed before we can get the math to work out correctly small bam anyway we can use the same type of matrix

we can get the math to work out correctly small bam anyway we can use the same type of matrix multiplication to calculate the key values for each token and the values now that we have the query key and values for each token we can use them to calculate attention we'll start by multiplying the query Matrix Q by the transpose of the key Matrix K Josh why do we need to transpose K when we do this multiplication well in this specific case the obvious thing is that the multiplication wouldn't work

well in this specific case the obvious thing is that the multiplication wouldn't work if we didn't transpose k then the two numbers in the first row of Q could multiply the top two numbers in the first column in K but then the bottom number would be left out of the fun so in this case multiplying by K without transposing it is a bad idea for technical reasons however there's actually a much more important reason to transpose K and to understand it let's go through the multiplication one step at

reason to transpose K and to understand it let's go through the multiplication one step at a time we start with the first Row in Q the query for the SOS token and the first column in the transpose of K the key for the SOS token the matrix multiplication gives us the sum of these products which is -4.4 n this process of multiplying pairs of corresponding numbers together and adding them up like we did here is called calculating a DOT product so - 4.49 is the dotproduct of the query and the key

did here is called calculating a DOT product so - 4.49 is the dotproduct of the query and the key for the SOS token dot products can be used as an unscaled measure of similarity between two things and this metric is closely related to something called the cosine similarity the big difference is that the cosine similarity scales the dotproduct to be between -1 and 1 in contrast the dot product similarity isn't scaled so that makes - 4.49 an unscaled similarity between the query and the key for

isn't scaled so that makes - 4.49 an unscaled similarity between the query and the key for the SOS token likewise the unscaled dot product similarity between the query for SOS and the key for lets is 2.05 and the unscaled do product similarity between the query for SOS and the key for go is - 27.4 likewise we calculate the unscaled dotproduct similarities between the query for lets and all of the keys and the unscaled dotproduct similarities between the query for go and all of the keys thus by

keys and the unscaled dotproduct similarities between the query for go and all of the keys thus by multiplying Q by the transpose of K we end up with the unscaled dot product similarities between all possible combinations of queries and keys for each token bam now the next thing we do is scale the dotproduct similarities by the square root of d sub k d subk is the dimension of the key Matrix and in this case Dimension refers to the number of values we have for each token which is two so we

and in this case Dimension refers to the number of values we have for each token which is two so we scale each dotproduct similarity by the square root of two and that gives us a matrix of scaled dotproduct similarities note scaling by just the square root of the number of values per token doesn't scale the dot product similarities in any kind of systematic way as a result our scaled dotproduct similarities still have a really wide range of values between 5.01 and - 66.2 that said even with

similarities still have a really wide range of values between 5.01 and - 66.2 that said even with this limited scaling the original authors of the Transformer said it improved Performance Small bam the next thing we do is take the soft Max of each row in The Matrix of scaled dotproduct similarities and taking the soft Max of each row gives us these new rows note the soft Max function makes it so that the sum of each row is one so we can think of these values as a summary of the relationships

that the sum of each row is one so we can think of these values as a summary of the relationships among the tokens for example the SOS token is 1% similar to itself and 99% similar to lets and 0% similar to go now let's put these new rows back together to form a matrix the last thing we need to do to calculate attention is multiply the percentages by the values in Matrix V to understand exactly why we do this multiplication let's go through it step by step when we multiply the first row of

why we do this multiplication let's go through it step by step when we multiply the first row of percentages by the first column in V we calculate 1% of the first value for the SOS token and add to it 99% of the first value for lets and then add 0% of the first value for go and that gives us 1.54 the first attention score for the SOS token likewise we scale the second column of values to get the second attention score for the SOS token then we scale the values by the percentages for lets to get

attention score for the SOS token then we scale the values by the percentages for lets to get the attention scores for lets lastly we scale the values by the percentages for go to get the attention scores for go go and at long last we have calculated the self attention scores for each input token bam now that we have the self attention scores for the three tokens we add the residual connections and that just means that we add the values we had right after positioning coding and this last Matrix

that just means that we add the values we had right after positioning coding and this last Matrix contains the output from the encoder double bam now that we have finished doing the Matrix math in the encoder we can start doing the Matrix math associated with the decoder note to make this example more complete and interesting we'll go through the math used during training specifically we want to train the model so that the input tokens SOS lets and go are translated into the output tokens Vos

train the model so that the input tokens SOS lets and go are translated into the output tokens Vos followed by EOS where EOS which stands for end of sequence or end of sentence is the token that tells the decoder to stop generating output first just like for the encoder the decoder starts with a word embedding layer however in this example because we want the output to be in Spanish the decoder uses a different set of tokens specifically the decoder uses these tokens SOS which is what we will

uses a different set of tokens specifically the decoder uses these tokens SOS which is what we will use to initial ize the decoder ear the Spanish word for to go vamos one way to say let's go in Spanish e the Spanish word for and and EOS which tells the decoder it's done generating output also just like the encoder our decoder uses two embedding values per token now because we want the output from the decoder to be vamos followed by EOS then that means we want the first decoder unit to Output

the decoder to be vamos followed by EOS then that means we want the first decoder unit to Output Vos however in order for the first decoder unit to Output anything at all we need to initialize it with something so we'll use the SOS token to initialize the decoder now like we said ideally we want the first decoder to Output vamos however because we are training this Transformer regardless of what the output of the first first decoder is the second decoder will be initialized with the vamos token

output of the first first decoder is the second decoder will be initialized with the vamos token initializing the decoders with known output values during training is called teacher forcing and it makes training go faster anyway once we initialize the second decoder with the vamos token we want it to Output the EOS token which tells the decoder that it is done generating output thus our decoder has two input token tokens SOS and Vos and that means we multiply the weights in the word embedding

has two input token tokens SOS and Vos and that means we multiply the weights in the word embedding matrix by a matrix with five columns one for each token in the decoder's vocabulary and two rows one for each token and doing the math extracts the word embedding values for the SOS token and Vos now let's move the word embeddings for SOS and vamos over to the left and add the position en coding just like before bam now that we have the encoded tokens we can calculate the self attention scores

just like before bam now that we have the encoded tokens we can calculate the self attention scores during training calculating the self attention scores in the decoder starts out exactly like it does in the incoder using weights that are specific to the decoder we calculate the queries keys and values then using the Q K and V matrices we calculate the unscaled dotproduct similarities between the queries and the keys for each combination of tokens then we scale the dot product similarities now

queries and the keys for each combination of tokens then we scale the dot product similarities now before we move on I want to emphasize one specific detail when we multiply the query for SOS by the key for Vos we get 0.12 as the unscaled similarity and ultimately 0.08 as the scaled similarity between the query for SOS and the key for vamos this detail that we calculated the scaled similarity between the query for SOS and the key for vamos will be very important in just a bit so let's label it

the query for SOS and the key for vamos will be very important in just a bit so let's label it so it is easy to keep track of okay going back to the scaled dotproduct similarities now we do something we didn't do in the encoder this has to do with the fact that during training meing the input let's go should translate to vamos and we know that vamos should come after the SOS token and rather than doing all the math for SOS first and then sequentially doing the math for vamos our knowledge that

doing all the math for SOS first and then sequentially doing the math for vamos our knowledge that vamos follows SOS lets us do it at the same time so we can calculate the word embeddings for both tokens at the same time and then we can add the position and coding value values to each token at the same time and we can also calculate the Q V and K matrices at the same time doing all this math at the same time rather than sequentially one token at a time means we can train relatively quickly on

the same time rather than sequentially one token at a time means we can train relatively quickly on Hardware that allows for parallel computation however after training when we want the Transformer to translate something all we know is that we start with the SOS token and that that means when we calculate the self attention scores for the SOS token it only knows about itself and nothing that comes after it as a result during training even though we calculated all of the scale dot product

comes after it as a result during training even though we calculated all of the scale dot product similarities for both tokens we don't want to use the similarity between the SOS token and vamos when calculating the self attention score for the SOS token so during training we only use the similarity between s OS and itself at the start of decoding and then the decoder does the rest of the math not having any idea of what might come next until it gets to the output in contrast because Vos is the

having any idea of what might come next until it gets to the output in contrast because Vos is the second token it will incorporate what came before it when calculating the self attention scores and that means using both similarities that we calculated when we determined the self attention scores for Vos in other words we don't want tokens to cheat and Peak at what comes next when calculating self attention but it is okay for a token to look at what came before it the way that Transformers keep

attention but it is okay for a token to look at what came before it the way that Transformers keep track of what values should and shouldn't be used to calculate self attention for each token is to take the scaled similarity Matrix and add a mask to it the mask Matrix adds zeros to the values we want to include in the attention calculat ations and negative Infinity to any value that we need to ignore what that means is that when we apply the soft Max function to each row the first token SOS has

what that means is that when we apply the soft Max function to each row the first token SOS has 100% similarity to itself and 0% similarity to anything that came after it and thus when we finally multiply the percentages by the value Matrix the self attention scores for the SOS token do not include anything that came after it now that we have the masked self attention scores for SOS and vamos we need to add the residual connections so we take the self attention scores and add the original word

need to add the residual connections so we take the self attention scores and add the original word and position encodings to each token now we calculate encoder decoder attention the good news is that incoder decoder attention is the same as calculating standard self attention except that the V and K matrices are created with the encoder's output Matrix and the Q Matrix is created with the values from the decoder so we start with the decoder values we just calculated and multiply them by an

from the decoder so we start with the decoder values we just calculated and multiply them by an incoder decoder attention specific Matrix of query weights to get the Matrix Q then we take the output values from the encoder and multiply them by encoder decoder attention specific weight matrices to create K and V and now we have q calculated from the decoder values and K and V calculated from the encoder values then we just calculate the attention scores just like we did when we first calculated

values then we just calculate the attention scores just like we did when we first calculated attention in the encoder and now we have the encoder decoder attention scores bam the next step is to add the next set of residual connections then we run those values through a fully connected layer in this example the fully connected layer looks like this it has two inputs for the two values we have calculated for each token and five outputs one for each token in the output vocabulary as we saw with

for each token and five outputs one for each token in the output vocabulary as we saw with word embedding the multiplication and summations that take place in this fully connected layer can be done for both token at the same time using matrix multiplication and doing that math gives us this new Matrix we then add the bias terms to each column in the new Matrix and that gives us the outputs from the fully connected layer now we run the output from the fully connected layer through a softmax

the fully connected layer now we run the output from the fully connected layer through a softmax function and we end up with a matrix that has the outputs from both copies of the decoder the first row contains the outputs from the first decoder and because the output for vamos is one and everything else is zero vamos is the first token generated by the Transformer the second row contains the outputs from the second decoder and the EOS token has the highest value so it is the second token

outputs from the second decoder and the EOS token has the highest value so it is the second token generated by the Transformer indicating that it is done with its work triple bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the stack Quest PDF study guides in my book the stack Quest Illustrated guide to machine learning at stack quest.org there's something for everyone hooray we've made it to the end of another exciting

stack quest.org there's something for everyone hooray we've made it to the end of another exciting stack Quest if you like this stack Quest and want to see more please subscribe and if you want to support stack Quest consider contributing to my Pat Pon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below all right until next time Quest on

the statquest introduction to pi torch is here statquest hello i'm josh starmer and welcome to statquest today we're going to talk about the stat quest introduction to pi torch this stat quest is sponsored by lightning and grid.ai lightning and grid are awesome you can do cool stuff in the cloud hooray note this stat quest assumes that you already understand the main ideas behind neural networks the main ideas behind how neural networks are fit to data with back propagation the main ideas behind

main ideas behind how neural networks are fit to data with back propagation the main ideas behind the relu activation function and how tensors are used in neural networks if not check out the quests lastly you can download all of the code in this stat quest for free the details are in the pinned comment below in neural networks part 3 the rel u activation function in action we started with a simple data set that showed whether or not different drug doses were effective against a virus the low

data set that showed whether or not different drug doses were effective against a virus the low and high doses were not effective but the medium dose was effective then we talked about how this neural network used weights and biases to slice flip and stretch the relu activation functions into new and exciting shapes to fit this pointy thing to the data set bam hey look it's statsquatch hey josh this neural network is awesome can we code it in pi torch yes however before we start coding let's

this neural network is awesome can we code it in pi torch yes however before we start coding let's label the weights and the biases now we need to make sure we have the necessary python modules installed in this tutorial we will be using pi torch to create the neural network and matplotlib and seaborn to draw awesome graphs if you need help installing any of these check the pinned comment below now that we have installed everything that we'll need to implement this neural network let's get

now that we have installed everything that we'll need to implement this neural network let's get coding the first thing we do is import the python modules that we will use first we'll import pi torch which is actually called torch because that is what it was originally called before it was ported to python we'll use torch to create tensors to store all of the numerical values including the raw data and the values for each weight and bias then we will import torch.nn which we will use to make

data and the values for each weight and bias then we will import torch.nn which we will use to make the weight and bias tensors part of the neural network then we import torch.nn.functional which gives us the activation functions then we import sgd which is short for stochastic gradient descent to fit the neural network to the data the next two things we import matplotlib and seaborn are all just to draw nice looking graphs note the seaborn package is traditionally imported as sns which stands

to draw nice looking graphs note the seaborn package is traditionally imported as sns which stands for samuel norman seabourn a fictional character in the drama the west wing the dude that wrote seabourn is just a big fan of the west wing and names his stuff after it strange but true bam now let's build this neural network with pi torch creating a new neural network means creating a new class so we start by creating a new class that in this example we call basic nnn and basic nnn will inherit

we start by creating a new class that in this example we call basic nnn and basic nnn will inherit from a pi torch class called module now we create an initialization method for the new class and the first thing we do is call the initialization method for the parent class nnn.module then we initialize the weights and biases in our neural network we'll start with weight w sub 0 0 which is set to 1.70 so we create a new variable called w00 and make it a neural network parameter making this weight

so we create a new variable called w00 and make it a neural network parameter making this weight a parameter for the neural network gives us the option to optimize it now since weight w sub 0 0 is 1.70 we initialize the new parameter with a tensor set to 1.7 note since this is a tensor the neural network can take advantage of the accelerated arithmetic and automatic differentiation that it provides lastly because we don't need to optimize this weight we'll set requires underscore grad which is

lastly because we don't need to optimize this weight we'll set requires underscore grad which is short for requires gradient to false likewise we create new variables for the bias b sub 0 0 and the weight w sub 0 1 and then we create variables for the remaining weights and biases bam we have created neural network parameters for each weight and bias now we need to connect them to the input the activation functions and ultimately to the output in other words we need a way to make a forward pass

functions and ultimately to the output in other words we need a way to make a forward pass through the neural network that uses the weights and biases that we just initialized so we do that by creating a second method inside basic nnn called forward so we can see what's going on let's move the code for forward to the top of the screen now the first thing we want to do is connect the input to the activation function on top so we create a new variable input to top rail u that is equal to the

the activation function on top so we create a new variable input to top rail u that is equal to the input times the weight w sub 0 0 plus the bias b sub 0 0. then we pass input to top rail u to the rail u activation function with f dot rail u remember earlier we imported torch.nn.functional as f so that is where the relu function comes from then we save the output of the rail u in top rail u output now we scale top rail u output by the weight w sub 0 1 and save the result in scaled top rail u

now we scale top rail u output by the weight w sub 0 1 and save the result in scaled top rail u output we connect the input to the bottom rail u and scale the activation function's output then we add the top and bottom scaled values to the final bias and use the sum as the input to the final rail u to get the output value lastly the forward function returns the output thus given an input value the forward function does a forward pass through the neural network to calculate and return the output

forward function does a forward pass through the neural network to calculate and return the output value bam now if we look at the entire class that we created basic nnn we see two methods init and forward init creates and initializes the weights and biases and forward does a forward pass through the neural network by taking an input value and calculating the output value with the weights biases and activation functions wow this is a lot of code how do we know it works and doesn't have any bugs

activation functions wow this is a lot of code how do we know it works and doesn't have any bugs good question squatch we can verify that the code works by plugging in a bunch of values between 0 and 1 that represent different doses and see if the output from forward results in this bent shape that fits the training data so the first thing we need to do is create a sequence of input doses and we do that with this command here we use the pi torch function linspace to create a tensor with a

we do that with this command here we use the pi torch function linspace to create a tensor with a sequence of 11 values between and including 0 and 1 and we store the tensor in a variable called input doses note we can print out and admire the input doses by just typing the variable name input doses now the idea is to run these input values through our neural network so we'll make a neural network that we'll call model from the class we just created basic nnn note we are naming the actual

that we'll call model from the class we just created basic nnn note we are naming the actual neural network model because that is the standard variable name used when coding with pi torch thus from here on out i'm going to use the term model and neural network interchangeably if this freaks you out check out the statquest on models anyway now we can pass the input doses to the model which by default calls the forward method that we wrote earlier and we save the output from the neural network in

calls the forward method that we wrote earlier and we save the output from the neural network in a variable we cleverly named output values and now that we have both the input values to the neural network and the output values we can use them to draw this graph that has different drug doses on the x-axis and their predicted effectiveness on the y-axis first we set the seabourn style to white grid so the graph looks cool and then we use line plot to draw a graph of the data on the x-axis we put

so the graph looks cool and then we use line plot to draw a graph of the data on the x-axis we put the original input doses and on the y-axis we put the corresponding output values and then we make the line green and wide enough to easily see lastly we set the y and x-axis labels and that code gives us this graph the graph tells us that the neural network we created earlier basic nnn does exactly what we expected in other words earlier we showed that when we put input values between 0 and 1

what we expected in other words earlier we showed that when we put input values between 0 and 1 into this neural network the output was this bent shape which is the same as the graph we drew with our code double bam now that we can create a neural network in pi torch and graph what it can do can we pretend that we don't already know the optimal value for b sub final is negative 16 sure thanks squatch we'll just set b sub final to zero and we can now use pi torch to optimize b subfinal with back

we'll just set b sub final to zero and we can now use pi torch to optimize b subfinal with back propagation the first thing we'll do is make a copy of the original class we created basic nnn and change the name of the copy from basic nnn to basic nn underscore train because we want to train this neural network then we change the initial value for final bias to 0.0 and we set requires underscore grad which remember is short for requires gradient to true setting requires grad to true is what

grad which remember is short for requires gradient to true setting requires grad to true is what tells pi torch that this parameter should be optimized we can verify that setting b subfinal to zero results in a neural network that no longer fits the training data by drawing a graph of the neural network's output like we did before only this time we create the model from basic nnn underscore train instead of basic n n and because final underscore bias now has a gradient we call detach on the

instead of basic n n and because final underscore bias now has a gradient we call detach on the output values to create a new tensor that only has the values in other words because seaborn doesn't know what to do with the gradient we strip it off with detach the original graph we drew for basic nnn shows effectiveness equals 1 when the dose equals 0.5 which is correct in contrast the graph for basic nn underscore train shows effectiveness equals 17 when dose equals 0.5 which is way too high and

nn underscore train shows effectiveness equals 17 when dose equals 0.5 which is way too high and that means we need to train the neural network to optimize b sub final which means we need to create this training data all we have to do to create training data is create one tensor called inputs with the three input doses 0 0.5 and 1. and another tensor called labels that has the observed output values 0 1 and 0. now we are ready to optimize the last bias b sub final unfortunately this next step

0 1 and 0. now we are ready to optimize the last bias b sub final unfortunately this next step requires a lot of code but don't worry we'll go through it one step at a time also spoiler alert later in this series on how to implement neural networks we'll see how pi torch lightning makes this code a lot simpler anyway the first thing we do is create an optimizer object that will use stochastic gradient descent sgd to optimize b sub final remember we imported the sgd class from the torch.optin

descent sgd to optimize b sub final remember we imported the sgd class from the torch.optin package way back at the start so in order to optimize b sub final we pass model.parameters to sgd which will optimize every parameter that we set requires grad equal to true we also set the learning rate to 0.1 in a bid we're going to use our new optimizer to optimize final bias but first just so we can see how gradient descent improves the value for final bias will print the current value the stir

see how gradient descent improves the value for final bias will print the current value the stir function converts the tensor value into a string so we can print it with other text and now we are ready to code the for loop that does gradient descent note if you're not already familiar with gradient descent and stochastic gradient descent check out the quests oh no it's the dreaded terminology alert each time our optimization code sees all of the training data is called an epoch so in this

alert each time our optimization code sees all of the training data is called an epoch so in this example every time we run all three points from our training data through the model we call that an epoch thus we start our optimization code with a for loop that counts the number of epochs and we set it so that we will run all three data points from the training data through the model up to 100 times now we create and initialize a variable called total loss that will store the loss which is a

times now we create and initialize a variable called total loss that will store the loss which is a measure of how well the model fits the data for example if our unoptimized model fit the training data really poorly like this and we had this really large residual the difference between what the model predicts and what we know is true then the loss would be relatively large in contrast if the model fit the training data a little better and we had a smaller residual then the loss would be

model fit the training data a little better and we had a smaller residual then the loss would be relatively small thus for each epoch we will use total loss to keep track of how well the model fits the data now we start a nested for loop that runs each data point from the training data through the model and calculates the total loss in this case that means the for loop starts with the first point in the training data and determines its input or dose and its known label or effectiveness then it

in the training data and determines its input or dose and its known label or effectiveness then it runs that dose through the model to get a predicted output and then we calculate the loss between the predicted value and the known label with a loss function in this case we are calculating the squared residual where the residual is the difference between the output and the known value that said you can code any loss function that you want to use like the absolute value loss or you can choose

you can code any loss function that you want to use like the absolute value loss or you can choose from among the many loss functions like mse loss or cross entropy loss that come with pi torch anyways in this example the predicted and known value for the first point is zero so the squared residual is zero minus zero squared which equals zero now we use loss dot backward to calculate the derivative of the loss function with respect to the parameter or parameters we want to optimize in this

of the loss function with respect to the parameter or parameters we want to optimize in this example that means calculating the derivative of the squared residual with respect to b sub final and plugging in the predicted and known values note if any of this part is freaking you out check out the stack quest on back propagation lastly we add the squared residual to total loss so we can keep track of how well the model fits all of the data now we go back to the start of the nested for loop and

of how well the model fits all of the data now we go back to the start of the nested for loop and select the input and label for the second point in the training data set and then we run the second point through the model to get a predicted output and then we calculate the loss the squared residual between the predicted and observed values next we use loss.backward to calculate the derivative of the loss function with respect to b sub final and and this is really important loss dot backward

of the loss function with respect to b sub final and and this is really important loss dot backward adds that to the previous derivative in other words loss dot backward remembers the derivative that we calculated for the first point and adds the new derivative that we calculated for the second point thus lost dot backwards accumulates the derivatives each time we go through the nested loop to be honest the first time i saw this it blew my mind this is because every time we go through the

to be honest the first time i saw this it blew my mind this is because every time we go through the nested loop we create a brand new loss variable here and i couldn't figure out how the new loss could add to what the last one computed however it turns out that we create loss from the output value which in turn comes from the model and the model keeps track of the derivatives anyway the main point is that loss.backward accumulates the derivatives each time we go through the nested loop and we

is that loss.backward accumulates the derivatives each time we go through the nested loop and we need to keep this in mind in contrast total loss does not automatically accumulate so we add the new squared residual to total loss then we go through the loop one last time for the last point in the training data set and that means we calculate the squared residual for the last point and when we call loss.backward we add the derivative for the last point to the other two derivatives and lastly we

loss.backward we add the derivative for the last point to the other two derivatives and lastly we add the squared residual to total loss bam we made it through the nested loop and now that we're done with the nested loop we check to see if total loss is really small if so that means the model fits the training data really well and we can stop training so if total loss is really small we print out the number of epochs we've gone through so far and break out of the optimization loop to stop

out the number of epochs we've gone through so far and break out of the optimization loop to stop training otherwise if total loss is not small then we take a small step towards a better value for b sub final using optimizer.step note just like loss has access to the derivatives in the model when we call loss.backward optimizer.step also has access to the derivative stored in model and can use them to step in the correct direction now we need to zero out the derivatives that we're storing in

them to step in the correct direction now we need to zero out the derivatives that we're storing in model and we do that with optimizer.0grad note if we don't zero out the derivatives then the next time we enter this nested loop and call loss dot backward we'll add the new derivatives to the old derivatives from the previous step and that would be bad lastly we print out the current epoch and the current value for final bias so we can see how final bias changes each time through the loop now

current value for final bias so we can see how final bias changes each time through the loop now we've made it through the entire optimization loop and we just repeat it until total loss is small or we go through 100 epochs anyway now that we have gone through the optimization loop we print out the final value for the final bias bam now when we run this block of code we see the value for final bias before we optimize 0 and that value as we saw before gives us this graph of the output then we

bias before we optimize 0 and that value as we saw before gives us this graph of the output then we see the values that final bias takes on during each step of gradient descent and after 34 steps the total loss is tiny and the optimal value for final bias is negative 16.0019 which is pretty close to negative 16 the optimal value we used originally hey can we draw one last graph to verify that the optimized model fits the training data sure thing squatch we can verify that the optimized model

optimized model fits the training data sure thing squatch we can verify that the optimized model fits the training data by graphing it with this code which is the same as what we used before except now we don't create a new model instead we just use the one we optimized and this is what we get which shows that the neural network does exactly what we expect triple bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stack

self-promotion if you want to review statistics and machine learning offline check out the stack quest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in

Introduction to Coding Neural Networks with PyTorch and Lightning

PyTorch plus Lightning is the coolest thing around. StatQuest! Hello! I'm Josh Starmer and welcome to StatQuest. Today we're going to talk about an introduction to coding neural networks with PyTorch and Lightning. Lightning lets you do awesome stuff with neural networks. Yeah! This StatQuest is also brought to you by the letters 'A', 'B' and 'C'. 'A' always, 'B' be, 'C' curious. Always be curious. Also, I want to give a special bam to one of my co-workers at Lightning, Adrian and Wälchli, who

Also, I want to give a special bam to one of my co-workers at Lightning, Adrian and Wälchli, who helped me create this tutorial. Note this StatQuest assumes that you have already seen the StatQuest Introduction to PyTorch. If not, check out the 'Quest. Lastly, you can download all of the code in this StatQuest for free. The details are in the pinned comment below. In the StatQuest Introduction to PyTorch, we started with this super simple dataset and then we coded this super simple neural

to PyTorch, we started with this super simple dataset and then we coded this super simple neural network to fit a pointy thing to the data. To do this, we created a class that contained code for the weights and biases, and for running data through the neural network. And then, completely separate from that class, we wrote code to optimize the neural network with backpropagation. Bam? Well, even though the code worked like we expected, we had to come up with our own learning rate for gradient

though the code worked like we expected, we had to come up with our own learning rate for gradient descent and, generally speaking, figuring out a good learning rate isn't always easy. So it would be nice if there was a tool that could find a good learning rate for us. Also, it would be nice if the code for training the neural network were easier to read and write. Lastly, we would have to make significant changes to this code if we had GPUs or TPUs to accelerate learning. For example, this

significant changes to this code if we had GPUs or TPUs to accelerate learning. For example, this code runs fine on my laptop, but if we wanted to accelerate it with one or more GPUs, we'd have to make a lot of changes. The good news is that we can do all of these things and more when we combine PyTorch with Lightning. So let's go back through the code and show how we can do things easier and improve it with Lightning. Bam! First, just like, before we import torch to create tensors to store all

it with Lightning. Bam! First, just like, before we import torch to create tensors to store all of the numerical values, including the raw data and the values for each weight and bias. Then we import torch dot nn to make the weight and bias tensors, part of the neural network. And torch dot nn dot functional for the activation functions. Then we import SGD so we can use Stochastic Gradient Descent to fit the neural network to the data. So far, everything is the same as when we used PyTorch

to fit the neural network to the data. So far, everything is the same as when we used PyTorch without Lightning, but now we import Lightning as L to make training easier to code. And now we need TensorDataset and DataLoader from torch dot utils dot data, which will ultimately make our lives easier when we start working with larger data sets. And just like before, we'll graph our output with matplotlib and Seaborn. Now let's build this neural network. Note: If all we want to do is create a

matplotlib and Seaborn. Now let's build this neural network. Note: If all we want to do is create a pre-trained neural network and run data through it, then everything is the exact same as before, except now when we create the class we will name it BasicLightning and we will inherit from LightningModule instead of nn dot module, which is what we did when we used PyTorch without Lightning. Other than that creating this pre-trained neural network and running data through it is just like before.

than that creating this pre-trained neural network and running data through it is just like before. In other words, just like before we create an initialization method for the new class and the first thing we do is call the initialization method for the parent class LightningModule. And just like before we create the weights and biases for the network by creating a new parameter initialized with a tensor set to the value for the weight or bias. And we do that for each weight and bias in the

a tensor set to the value for the weight or bias. And we do that for each weight and bias in the  network. Bam. Now, just like before, we need a way to make a forward pass through the neural network that uses the weights and biases that we just  initialized. So, we create a second method inside the class called forward, so we can see what's going on. Let's move the code for forward to the top of the screen. Again, just like we did when we used PyTorch without Lightning, we create a new

top of the screen. Again, just like we did when we used PyTorch without Lightning, we create a new variable, Input to Top ReLU, that is equal to the input times the weight w sub 0 0, plus the bias b sub 0 0. Then we pass Input to Top ReLU to the ReLU activation function with f dot ReLU and scale the ReLU output by the weight w sub 0 1. Likewise, we connect the input to the bottom ReLU and scale the activation function's output. Then we add the top and bottom scale values to the final bias and

the activation function's output. Then we add the top and bottom scale values to the final bias and use the sum as the input to the final ReLU to get the output value. Lastly, the forward function. Returns the output. So just like before we have created a new class that initialized the weights and biases and does a forward pass through the neural network. Now, I don't know about you, but every time I write a block of code, even when it's mostly the same as something I wrote before, I like to

time I write a block of code, even when it's mostly the same as something I wrote before, I like to test it to make sure it works as expected. So let's test the code by plugging in a bunch of values between 0 and 1 that represent different doses and see if the output from forward results in this bent shape that fits the training data. Again, just like before, we can create a sequence of numbers between 0 and 1 using the linspace function from PyTorch. We store the tensor in a variable called

between 0 and 1 using the linspace function from PyTorch. We store the tensor in a variable called Input Doses and we can print out and admire the input doses by just typing the variable name Input Doses. Now, in order to run these input values through our neural network, we make a neural network that we'll call model from the class we just created, BasicLightning. Then we pass the input doses to the model, which, by default, calls the forward method that we wrote earlier and we save the output

the model, which, by default, calls the forward method that we wrote earlier and we save the output from the neural network in a variable that we cleverly named Output Values. And now that we have both the input values to the neural network and the output values we can use them to draw this graph. So we set the Seabourn style to whitegrid so the graph looks cool. And then we use lineplot to draw a graph of the data. Lastly, we set the y and x axis labels. And that code gives us this graph. The

a graph of the data. Lastly, we set the y and x axis labels. And that code gives us this graph. The graph tells us that the neural network we created earlier, BasicLightning, does exactly what we expected. Hey so far, pretty much everything has been a review of basic PyTorch. When will we start doing cool stuff with Lightning? Right now Squatch. So we can demonstrate how Lightning makes it easier to train a model we'll set  bsub final to 0 and make a copy of the original class we created,

to train a model we'll set  bsub final to 0 and make a copy of the original class we created, BasicLightning, and change the name of the copy to BasicLightningTrain, because we want to train this neural network. Then we change the initial value for final bias to 0.0, and we set requires grad, which remember is short for requires gradient, to True. And, because we will use a Lightning function to improve the learning rate for us, we add a new variable learning rate to store the value. Note: For

improve the learning rate for us, we add a new variable learning rate to store the value. Note: For now, we set learning rate equal to 0.01, but this is just a placeholder value and the actual value does not matter right now. Now, just like we did before, we can verify that this neural network no longer fits the training data by drawing a graph of the neural network's output. Only this time, we are using BasicLightningTrain instead of BasicLightning. And, because final bias now has a gradient,

using BasicLightningTrain instead of BasicLightning. And, because final bias now has a gradient, we called detach on the output values to create a new tensor that only has the values. The graph shows Effectiveness equals 17 when Dose equals 0.5, which is way too high and that means we need to optimize b sub final. So we create the training data by creating a tensor called inputs with three input doses, 0, 0.5 and 1, and another tensor called labels that has the known values 0, 1 and 0. However,

0, 0.5 and 1, and another tensor called labels that has the known values 0, 1 and 0. However, now that we are using Lightning, we need to wrap the training data in a DataLoader. So we  combine the inputs and the labels into a TensorDataset called dataset, and then we use the TensorDataset to create a DataLoader called DataLoader. DataLoaders are super useful when we have a lot of data because:  1. They make it easy to access the data in batches. This is super useful when we have more data than

They make it easy to access the data in batches. This is super useful when we have more data than memory to store it. 2. They make it easy to shuffle the data each epoch and 3. They make it easy to use a relatively small fraction of the data if we want to do a quick and dirty training for debugging. Okay, now that we have our training data wrapped up in a DataLoader, we are ready to optimize b sub final. Now, if you remember last time, when we use PyTorch without Lightning, we optimized b

b sub final. Now, if you remember last time, when we use PyTorch without Lightning, we optimized b sub final with a whole lot of code. The first thing we did was create an optimizer object that used Stochastic Gradient Descent, SGD, to optimize b sub final. Then we coded for loops to calculate the derivatives needed for stochastic gradient descent. Specifically, we coded a loop that went through the full training dataset 100 times, or epochs, then for each element in the training data we

the full training dataset 100 times, or epochs, then for each element in the training data we calculated the value predicted by the neural network, then we calculated the loss, which in this case was the square difference between the predicted value and the known value. Then we called loss dot backward to calculate the derivative of the loss function with respect to the parameter we wanted to optimize. Lastly, after we calculated the derivatives for all three points in the training data, we

optimize. Lastly, after we calculated the derivatives for all three points in the training data, we took a small step towards an optimal value for  bsub final with optimizer dot step and zeroed out the gradients with optimizer dot zero grad, so that we could start another epoch. All in all, we had to write quite a bit of code to train the neural network. Now let's combine PyTorch with Lightning to simplify this code a whole bunch. Well, wait, hold on a second. There's one more thing I need to

to simplify this code a whole bunch. Well, wait, hold on a second. There's one more thing I need to review about the PyTorch code. When we only use PyTorch, before we wrote this code to optimize b sub final, we created a class to keep track of the weights and biases and a forward function to run data through the neural network. And then, separately, we wrote the code to optimize b sub final. In contrast when we add Lightning, we put all of the code relating to the neural network in the same

contrast when we add Lightning, we put all of the code relating to the neural network in the same place. So, when we create the class BasicLightningTrain from LightningModule, we create the init method that contains the weights and biases for the neural network and the learning rate, the forward method to run data through the neural network, and a new method called configure optimizers that sets up the method we want to use to optimize the neural network. And just like before we'll use

sets up the method we want to use to optimize the neural network. And just like before we'll use stochastic gradient descent. However, this time we're setting the learning rate to a variable that we will improve in just a bit. Then we create another new method called training step, which takes a batch of training data from the DataLoader that we created and the index for that batch. The training step function calculates the loss, which, just like before, is the sum of the squared residuals. Now

function calculates the loss, which, just like before, is the sum of the squared residuals. Now that we've added configure optimizers and training step to our class, we're ready to optimize the neural network. So, since we just modified the class by adding two new methods, the first thing we do is make a new model. Then we create a Lightning Trainer, which we will first use to find a good value for the learning rate and then we will use it to optimize, or train the model. Here we are setting

for the learning rate and then we will use it to optimize, or train the model. Here we are setting the maximum number of epochs to 34 because we know from before that 34 epochs is enough to fit the model to the data, but if it were not, the good news is that we don't have to start from zero and try again. Because Lightning lets us add additional epochs right where we left off. Now that we have the trainer, we will use it to find an improved learning rate by calling tuner dot lr find. In this

the trainer, we will use it to find an improved learning rate by calling tuner dot lr find. In this case, we're passing lr find the model, the training data, dataloader, the minimum learning rate, 0.001, the maximum learning rate, 1, and we're telling it to not stop early. In other words, by default lr find will create 100 candidate learning rates between the minimum and maximum values, and, by setting early stop threshold to "None", we will test all of them. Anyway, we store the output

by setting early stop threshold to "None", we will test all of them. Anyway, we store the output from lr find in lr find results. And we can access an improved learning rate by calling suggestion on the results. Now, just for fun, we can print out the new learning rate that we stored in new lr to see what it is, and we see that the new learning rate is 0.00214, and, lastly, we can set the learning rate variable in our model to the new learning rate. Now that we have found an improved learning

rate variable in our model to the new learning rate. Now that we have found an improved learning rate for stochastic gradient descent, let's train the model. To train the model and optimize b sub final, we simply use the trainer to call the fit function. Fit requires the model and the training data, which we named dataloader. When we call the fit function with our model and training data, the trainer will then call our model's configure optimizers function, and in this case, that means

the trainer will then call our model's configure optimizers function, and in this case, that means configuring a stochastic gradient descent optimizer using the new learning rate that we just set. Then the trainer calls our models training step function to calculate the loss. Then, without us having to do anything, the trainer will call optimizer dot zero grad, so that each epoch starts with a fresh gradient; loss dot backward, to calculate the new gradient; and optimizer dot step, to take a

fresh gradient; loss dot backward, to calculate the new gradient; and optimizer dot step, to take a step towards the optimal values for the  parameters. And then it calls training step again and repeats for each epoch that we requested. In other words, the big training loop that we had to code when we used PyTorch without Lightning is reduced to just coding the loss in the training step function when we use PyTorch with Lightning. Bam! Now, to verify that we correctly optimized b sub final, we

when we use PyTorch with Lightning. Bam! Now, to verify that we correctly optimized b sub final, we can print out its new value, and we get -16.0098. Hey, can we draw one last graph to verify that the optimized model fits the training data? Yes. We can verify that the optimized model fits the training data by graphing it with this code, which is the same as what we use before, except now we don't create a new model, and instead just use the one we optimized. And this is what we get, which shows

create a new model, and instead just use the one we optimized. And this is what we get, which shows that the neural network does exactly what we expect. Double Bam! What if we want to train our neural network on GPUs or use some other fancy accelerator? On a very basic computer like a laptop, you might only have a single processor that does all of the work called a central processing unit, or CPU. In this case, our neural network and, specifically, the tensors that represent the weights and

CPU. In this case, our neural network and, specifically, the tensors that represent the weights and biases, would be on the CPU, as well as the tensors that represent the training data. And when all of the tensors, the ones for the weights and biases and the ones for the data, are in the same place on the CPU, then we just do the math for backpropagation to train the neural  network. However, training a neural network on a single CPU, which might only have a few computing cores, is usually

training a neural network on a single CPU, which might only have a few computing cores, is usually relatively slow. With this simple neural network and this simple dataset, the speed really doesn't matter, but if we had a fancier neural network with tons of weights and biases and a ton of data, then running everything on a single CPU might be too slow to train in a reasonable amount of time. So when we need speed, we often train neural networks on one or more Graphics Processing Units, or GPUs,

we need speed, we often train neural networks on one or more Graphics Processing Units, or GPUs, which can have 10 times or even 100 times more Computing  cores. And when we use PyTorch without Lightning, then we have to manually move the tensors to the GPUs, and keeping track of what tensors are where can get pretty complicated. And that means we can't easily test our code on our laptop with a single CPU and then ported to a system with a lot of GPUs without having to change the code a bunch.

CPU and then ported to a system with a lot of GPUs without having to change the code a bunch. In contrast, when we use PyTorch with Lightning, we can let Lightning automatically detect if GPUs are available by setting accelerator to "auto", when we create the trainer object. And we can let Lightning determine how many GPUs are available by setting devices to "auto". Now, with Lightning, we can test our code on our laptop with a single CPU and then move it to a fancy computing environment with a

our code on our laptop with a single CPU and then move it to a fancy computing environment with a bunch of GPUs without having to change the code. Triple Bam! And don't forget, you can download all of the code in this StatQuest for free! The details are in the pinned, comment below. Now it's time for some shameless self-promotion. If you want to review statistics and machine learning offline, check out the StatQuest PDF study guides and my book The StatQuest Illustrated guide to Machine

out the StatQuest PDF study guides and my book The StatQuest Illustrated guide to Machine Learning at StatQuest dot org. There's something for everyone! Hooray! We've made it to the end of another exciting StatQuest. If you liked this StatQuest and want to see more, please subscribe. And if you want to support StatQuest, consider contributing to my patreon campaign, becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie, or just donate. The links are in the

one or two of my original songs or a t-shirt or a hoodie, or just donate. The links are in the description below. All right, until next time quest on!

long short term memory with pie torch plus lightning is cool stat Quest hello I'm Josh starmer and welcome to statquest today we're going to talk about long short-term memory with pi torch plus lightning raise yourself for awesomeness and everything being just a little bit easier Lighting in yeah this stack quiz is also brought to you by the letters a b and c a always b b c curious always be curious also I want to give a special bam to one of my co-workers at lightning Adrian vouchley who helped

also I want to give a special bam to one of my co-workers at lightning Adrian vouchley who helped me create this tutorial note this stack Quest assumes that you were already familiar with long short-term memory if not check out the quest this stack Quest also assumes that you have already seen the stat Quest introduction to coding neural networks with pi torch plus lighting if not check out the quest lastly you can download all of the code in this statquest for free the details are in the

the quest lastly you can download all of the code in this statquest for free the details are in the pinned comment below in a stat Quest on Long short-term memory we had stock prices from two different companies company a and Company B on the y-axis we had the stock value and on the x-axis we had the day the value was recorded note if we overlap the data from the two companies we see that the only differences occur on day one and on day five on day one company a is at zero and Company B is at

differences occur on day one and on day five on day one company a is at zero and Company B is at one and on day five company a returns to zero and Company B returns to 1. on all of the other days Days 2 3 and 4 both companies have the exact same values given this sequential data we wanted an lstm to remember what happened on day one in order to correctly predict what will happen on day five in other words we ran the sequential data from Days 1 through day four through an unrolled lstm to

in other words we ran the sequential data from Days 1 through day four through an unrolled lstm to predict the values for day 5 for both companies so for company a we initialize the long and short-term memories on a pre-trained lstm unit and then unrolled the lstm unit to accommodate the sequential data from the first four days and the final short-term memory is 0.0 was the output from the unrolled lstl and that meant that the output from the lstm correctly predicted company A's value for day

lstl and that meant that the output from the lstm correctly predicted company A's value for day 5. likewise we unrolled the lstm unit to accommodate the sequential data from the first four days of data from Company B and the final short-term memory 1.0 was the output from the unrolled lstm and that meant that the output from the lstm correctly predicted company B's value for day 5. now that we've seen how an lstm unit Works in theory let's code it with pi torch plus lightning in this stack

seen how an lstm unit Works in theory let's code it with pi torch plus lightning in this stack Quest we're going to code this lstm unit from scratch that means we'll make the tensors for all of the weights and biases and then we'll code the first stage that determines what percentage of the long-term memory the lstm should remember and then we'll code the second stage that creates a new potential long-term memory and determines what percentage should be remembered and then we'll code the third

long-term memory and determines what percentage should be remembered and then we'll code the third stage that creates a new short-term memory and determines what percentage should be remembered then we'll use the data from company a and Company B to train every single weight and bias and along the way we'll learn some cool tricks that lightning gives us to make training easy and fun lastly we'll replace our homemade lstm with the nn.lstm function from PI torch and we'll use what we learned the

replace our homemade lstm with the nn.lstm function from PI torch and we'll use what we learned the first time to quickly and easily train the lstm bam first just like always we import torch to create tensors to store all of the numerical values including the raw data and the weights and biases then we import torch.nn to make the weight and bias tensors part of the neural network and after we learn how to build an lstm by hand we'll also use it to try Pi torch's lstm function and we also need

how to build an lstm by hand we'll also use it to try Pi torch's lstm function and we also need torch.nn.functional for the activation functions then we import atom to fit the neural network to the data note in the previous Pi torch statquest tutorials we've used stochastic gradient descent SGD atom is a lot like SGD but not quite as stochastic as a result atom tends to find the optimal values faster than SGD now we import lightning as L to make training easier to code and that means we need

faster than SGD now we import lightning as L to make training easier to code and that means we need tensor data set and data loader from torch.utils.data bam now let's build train and use this long short-term memory unit when we create a neural network in pi torch we always start by defining a new class now because we're coding our own lstm by hand we'll call this lstm by hand and in order to make training super easy We'll Inherit from lightning module then just like we always do we create an

training super easy We'll Inherit from lightning module then just like we always do we create an initialization method for the new class this class will create and initialize all of the weight and bias tensors that we need to implement an lstm unit then we will create a method called lstm underscore unit that does the lstm math then we create a new method called forward that makes a forward pass through the unrolled lstm unit then we'll create a method to configure the optimizer we want to use

through the unrolled lstm unit then we'll create a method to configure the optimizer we want to use lastly we'll need a method called training underscore step to calculate the loss which like before will be the sum of the squared residuals we'll also use training underscore step to log the progress we're making during training this will help us determine if we have done enough training and can stop let's start by coding the init method the first thing we do is call the initialization method for

let's start by coding the init method the first thing we do is call the initialization method for the parent class lightning module this gives us access to some methods that we'll use later now we need to create and initialize the weights and biases for the network however unlike the previous tutorials we've done this time we're going to use a normal distribution to randomly select an initialization value for each weight for example given this normal distribution with mean equal to zero and

value for each weight for example given this normal distribution with mean equal to zero and standard deviation equal to one will use it to Generate random numbers for the weights the shape of this curve shows that there is a relatively High likelihood of generating random numbers close to zero and a relatively low likelihood of generating random numbers far from zero now in order to use this normal distribution to Generate random numbers for us we create a new tensor called Main and set it to

distribution to Generate random numbers for us we create a new tensor called Main and set it to 0.0 the mean of the normal distribution and we create a tensor called STD and set it to 1.0 the normal distributions standard deviation now we create a parameter for the first weight in the lstm and use torch.normal to initialize it to a number randomly generated from a normal distribution with mean equal to zero and standard deviation equal to 1. when I did this my first weight was randomly set to

to zero and standard deviation equal to 1. when I did this my first weight was randomly set to 0.34 then the second weight was randomly set to 0.13 note for both weights we set requires underscore grad to true because we want to optimize them now we create a parameter for the first bias and we'll initialize the bias to zero instead of a random number however we still want to optimize it so we set requires underscore grad equal to true likewise we create and initialize parameters for all of the

requires underscore grad equal to true likewise we create and initialize parameters for all of the other weights and biases in the lstm bam now that we have all of the parameters initialized we're ready to use them to do the math inside the lstm unit we'll start by defining a method called lstm underscore unit which takes an input value the current long-term memory value and the current short-term memory value now we can use the parameters we defined in the init method to determine what percent

memory value now we can use the parameters we defined in the init method to determine what percent of the long-term memory should be remembered in the first stage of the lstm so we create a variable called long remember percent and then we multiply the short-term memory by its Associated weight and then add that to the input value multiplied by its Associated weight and then we add that to the bias and finally run the whole sum through a sigmoid activation function now let's code the second

bias and finally run the whole sum through a sigmoid activation function now let's code the second stage in the lstm where we create a potential long-term memory and determine what percentage should be remembered first let's calculate the percent of the potential long-term memory that we want to remember just like before we multiply the short-term memory and the input by their corresponding weights and then add both terms to the bias and then run everything through a sigmoid activation function

and then add both terms to the bias and then run everything through a sigmoid activation function likewise we calculate the potential long-term memory except this time we run everything through a tan H activation function now we can update the long-term memory by first scaling it to the percentage that we are supposed to remember and then adding a percentage of the potential long-term memory and that gives us a new or updated long-term memory that we save in updated long memory now let's code

that gives us a new or updated long-term memory that we save in updated long memory now let's code the third stage of the lstm where we create a new short-term memory and determine what percentage is sent to the output just like before we calculate the percentage to remember and we use that percentage to scale a potential short-term memory the tan h of the updated long-term memory to create a new short-term memory lastly we return the updated long and short-term memories in summary lstm

a new short-term memory lastly we return the updated long and short-term memories in summary lstm underscore unit contains the code to do all this the first stage calculates the percentage of the long-term memory to remember the second stage creates a new potential long-term memory and determines what percentage of it to remember then we update the long-term memory then in the third stage we create a new short-term memory and determine what percentage to remember and lastly we return the

create a new short-term memory and determine what percentage to remember and lastly we return the updated long and short-term memories bam now that we're done writing lstm underscore unit which does the lstm math we can create the forward method to make a forward pass through the unrolled lstm for the forward method the input is an array that contains the first four days of stock market values from either company a or Company B we start by initializing the long and short-term memories to zero

either company a or Company B we start by initializing the long and short-term memories to zero then we put the four days worth of stock market values into individual variables one per day now given the value for day 1 we can pass the variables day one long underscore memory and short underscore memory to lstm underscore unit to do the math and lstm underscore unit will return the updated long and short-term memories now with the stock value from Day 2 and the updated long and short-term

and short-term memories now with the stock value from Day 2 and the updated long and short-term memories we call lstm underscore unit again and lstm underscore unit will return the updated long and short-term memories then we call lstm unit with a value from day 3 and the updated long and short-term memories and then we call lstm unit with the value from day 4 and the updated long and short-term memories lastly we return the final short-term memory as the output now that we have the forward

memories lastly we return the final short-term memory as the output now that we have the forward method which can make a forward pass through an unrolled lstm we're ready to configure the optimizer and configuring the optimizer in this case atom is so easy we can just replace the pseudo code with the real code now let's talk about the training underscore step function which we'll use to calculate the loss and log the training progress the training step method starts out exactly like what we

the loss and log the training progress the training step method starts out exactly like what we used in the statquest introduction to coding neural networks with pi torch plus lightning it takes a batch of training data for one of the two companies and the index for that batch and then uses the forward method to make a prediction with the training data and then calculates the loss which in this case is the sum of the squared residuals the big difference now however is that we are logging the

case is the sum of the squared residuals the big difference now however is that we are logging the loss so that we can review it later when we call the log method which is part of the lightning module that we are inheriting from then lightning will create a new file in a directory called lightning underscore logs and store whatever we want to keep track of in it in this case we're storing the loss using the label train underscore loss now that we know how to keep track of the loss after each

using the label train underscore loss now that we know how to keep track of the loss after each training step it might be cool if we can also keep track of the predictions for company a and Company B first we can use label underscore I to figure out which company we just made a prediction for if label underscore I is 0 then we just made a prediction for company a and we can keep track of that predicted value output underscore I by logging under the label out underscore zero and if label

predicted value output underscore I by logging under the label out underscore zero and if label underscore I is not zero then we just made a prediction for Company B and we can keep track of that predicted value output underscore I by logging under the label out underscore one now that we've logged everything we want to keep track of we can have training underscore step return The Laws bam now at long last we've made it through all of the code needed to create an lstm by hand we created and

at long last we've made it through all of the code needed to create an lstm by hand we created and initialized the weight and bias tensors in the init method we did the lstm math in lstm underscore unit we then wrote the forward method to make a forward pass through the unrolled lstm configured the atom Optimizer with configure underscore optimizers and last but not least calculated the loss and logged our progress with training underscore step bam now let's use the new class we just wrote to

logged our progress with training underscore step bam now let's use the new class we just wrote to create a new lstm that we'll call model and just for fun let's look at the initial predictions made with random weight values so we start by just printing out a nice little note that says what we want to do and then we use the model to make and print a prediction for company a by passing it a tensor containing the values from days one through four and remember just like we saw in the previous

containing the values from days one through four and remember just like we saw in the previous tutorials the model will return a tensor that contains the value we want the prediction as well as a gradient so we have to call detach to strip off the gradient and we see the prediction for company a negative 0.04 isn't horrible and is relatively close to the observed value zero hooray now we make and print out the prediction for Company B by plugging in its data for days one through four and in

and print out the prediction for Company B by plugging in its data for days one through four and in contrast to what we saw for company a the prediction for Company B negative 0.04 is horrible compared to the observed value 1. so given that the prediction for Company B was horrible we need to train the model so we start out by creating the training data called inputs from the values from days one through four from both companies in this case the training data consists of two arrays the first

through four from both companies in this case the training data consists of two arrays the first array contains the values from Days 1 through 4 from company a and the second array contains the values from days one through four from Company B then we wrap the arrays in a tensor and save it then we create a tensor called labels and the labels are what we want the lstm to predict for each company in this case we want the lstm to predict zero for company a and one for Company B now we combine the

this case we want the lstm to predict zero for company a and one for Company B now we combine the inputs and the labels into a tensor data set called data set and then we use the tensor data set to create a data loader called Data loader remember data loaders are super useful when we have a lot of data because one they make it easy to access the data in batches two they make it easy to shuffle the data each epoch and three they make it easy to use a relatively small fraction of the data if we

data each epoch and three they make it easy to use a relatively small fraction of the data if we want to do a quick and dirty training for debugging okay now that we have our training data wrapped up in a data loader we are ready to optimize the weights and biases we start by creating a lightning trainer called trainer and tell it to train for at most 2000 epochs which means we will do back propagation for every weight and bias using the data from both companies for two thousand times at most

for every weight and bias using the data from both companies for two thousand times at most now we call the trainer's fit method and pass it the lstm called model and the training data called Data loader hey Squatch this might take a minute to run so if you need a snack now would be a good time to get one good idea Norm anyway once it's done we can print out the predictions just like we did before and the prediction for company a 0.43 is pretty bad since it should be zero this prediction is

and the prediction for company a 0.43 is pretty bad since it should be zero this prediction is actually worse than what we started with [Music] the good news is that the prediction for Company B is while not awesome a little better than before so it seems like we need to do more training however since company A's prediction got worse it would be nice if we could be confident that more training will actually improve both predictions the good news is that we wrote the loss and the predictions to

actually improve both predictions the good news is that we wrote the loss and the predictions to log files in training underscore step and that means we can use tensorboard to draw cool graphs that tell us what happened during training and give us a sense of whether or not we should try to train more to launch tensorboard to draw graphs from the log files go to the file menu and select new and from the sub menu select terminal Now navigate to the directory that contains lightning underscore

from the sub menu select terminal Now navigate to the directory that contains lightning underscore logs once there copy this command tensorboard dash dash logder equals lightning underscore logs and paste it into the terminal after you hit return tensorboard will start and print a URL at the bottom copy this URL click to open up a new tab and paste the URL and after you hit return you'll see the graphs that tensorboard Drew note in order to see all of the graphs you have to click on the tabs

graphs that tensorboard Drew note in order to see all of the graphs you have to click on the tabs anyway the graph on the left shows the loss values on the y-axis for each step in training on the x-axis note each Epoch consists of two steps one for the data from company a and another for the data from Company B as we can see the loss went down a lot at the start and then kept going down for the rest of training but at a lower rate now at the end of training the loss hasn't flattened out and

rest of training but at a lower rate now at the end of training the loss hasn't flattened out and looks like it is still going down and that suggests that maybe we should do more training the graph in the middle tells us about how the predictions the output values for company a changed during training the goal for company a is to predict zero and we started out with an okay prediction but then the prediction got really bad after about 1 000 steps but it looks like the prediction for company a

prediction got really bad after about 1 000 steps but it looks like the prediction for company a has been improving ever since and at the end of training the prediction hadn't flattened and looks like it could keep going down and that suggests that maybe we should do more training likewise the graph on the right the prediction for Company B suggests we should keep training because it looks like it could get closer to the goal value one so let's do one thousand more epochs and see if things get

could get closer to the goal value one so let's do one thousand more epochs and see if things get better one cool thing about using lightning is that we can add more training epochs without having to start over this is because lightning saves checkpoints and they allow us to add additional epochs at any point during training since we want to add additional training epochs to where we left off we first get the path to the most recent checkpoints from the lightning trainer we named trainer where

first get the path to the most recent checkpoints from the lightning trainer we named trainer where best underscore model underscore path refers to the most recent checkpoints and we save that path in a new variable called path to best checkpoint now we create a new lightning trainer which we will call trainer just like the old one however unlike the old one we set max epochs to 3000 because we want to add 1 000 more epochs to the 2000 we have already done and now we call the trainer's fit

we want to add 1 000 more epochs to the 2000 we have already done and now we call the trainer's fit method and just like before we pass in the lstm called model and the training data called Data loader however now we also set checkpoint path to the last checkpoint so we can start training right where we left off and that's all we need to do to add more epochs to training bam once training is over we can print out the new predictions just like before and we see the prediction for company a is

we can print out the new predictions just like before and we see the prediction for company a is getting closer to zero which is good and the prediction for Company B is getting closer to one which is also good we can also reload the tensorboard browser page to see the updated graphs of the log files and we see that the loss is still going down which is good the prediction for company a is getting closer to zero and the prediction for Company B is getting closer to one lastly none of these

closer to zero and the prediction for Company B is getting closer to one lastly none of these graphs have flattened out suggesting that the predictions might improve if we do more training so let's train for 2 000 more epochs first we get the path to the most recent checkpoint and then we create a new lightning trainer and set max epochs to 5000 because we want to add 2 000 more epochs to the 3000 we have already done and then we call the fit method with the lstm the training data and the path

we have already done and then we call the fit method with the lstm the training data and the path to the most recent checkpoint and when we print out the new predictions we see that the prediction for company a is really close to zero and the prediction for Company B is really close to one bam now we reload the browser page with tensorboard and we see that each curve has flattened out suggesting we've done enough training so we're all done training double bam now that we know how to create an

we've done enough training so we're all done training double bam now that we know how to create an lstm from scratch and then train it until it makes good predictions let's learn how to make our lives a lot easier by just using the pi torch function nn.lstm so let's create a new class called lightning lstm that inherits from lightning module now just like always we Define the init method and just like always let's call the parents init function however this time all we have to do to create an

like always let's call the parents init function however this time all we have to do to create an lstm is called nn.lstm input size refers to the number of features or variables we have in the training data in this example we only have one feature the value for each company so we set input size equal to 1. hidden size refers to the number of output values we want and in this example we just want one output value the prediction for day five note although we are using the output from the lstm to

one output value the prediction for day five note although we are using the output from the lstm to make the predictions it is common to feed the output from the lstm into the inputs of another neural network like this one in this case the neural network has three inputs so if we wanted to connect an lstm's output to it we would need three output values so in this case we would set hidden size equal to 3. and nn.lstm would add extra weights and biases to the lstm so that it could create three

to 3. and nn.lstm would add extra weights and biases to the lstm so that it could create three outputs anyways this is all we need to do in the init method the forward method is also a little bit simpler we start by transposing the input the values from one of the companies for days one through four from being a single row to being a single column with View we start by specifying how many rows we want and in order to create a single column with four values we want one row per value however

we want and in order to create a single column with four values we want one row per value however instead of just putting a 4 here which would work just fine with our data we can put Len input instead which will create one row per data point regardless of how many there are then we specify how many columns we want and since we only have one feature and only want one column we set that to one then we pass the transpose data to the lstm and save the output values as lstm underscore out note lstm

we pass the transpose data to the lstm and save the output values as lstm underscore out note lstm out contains the short-term memory values from each lstm unit that we unrolled in this case that means it has four values because we needed to unroll the lstm four times for each of the four input values so we extract the prediction from the last lstm unit which is the last element in the array by using negative 1 as the index lastly we return the prediction now in theory we could leave configure

negative 1 as the index lastly we return the prediction now in theory we could leave configure underscore optimizers exactly the way it was before however in order to demonstrate how quickly atom can Converge on optimal weights and biases we've set the learning rate to 0.1 which is much larger than the default value we used before 0.001 lastly the training step method is the exact same as what we had before it calculates the loss and logs our progress now we've made it through all the code

we had before it calculates the loss and logs our progress now we've made it through all the code needed to create an lstm using nn.lstm we created and initialized the lstm unit in the init method with nn.lstm made a forward pass through the unrolled lstm with forward configured atom by setting the learning rate to 0.1 in configure underscore optimizers and last but not least calculated the loss and logged our progress with training underscore step now we're ready to create the model and print

and logged our progress with training underscore step now we're ready to create the model and print out the predictions using the initialized weights and biases because you never know you might get lucky and because both of the predictions are pretty far from ideal let's train the model so we create our lightning trainer with ldot trainer only this time because we increase the learning rate which means we take bigger steps towards the optimal weights and biases each Epoch we set it to only do

means we take bigger steps towards the optimal weights and biases each Epoch we set it to only do 300 epochs also by default lightning updates the log files every 50 steps however since we're only doing 300 epochs we'd only update the log files 12 times and with just 12 points on our graphs and tensorboard they would look lame so in order to update the log files more often and draw graphs that are awesome we tell the trainer to update the log files every two steps or every epoch now just like

awesome we tell the trainer to update the log files every two steps or every epoch now just like before we just call the fit method and pass it the model and the training data and print out the predictions using the optimize weights and biases and now after training we see that the predictions for both companies are really good the prediction for company a is super close to zero and the prediction for Company B is close to one lastly we can view the log files with tensorboard by refreshing the

for Company B is close to one lastly we can view the log files with tensorboard by refreshing the browser however because we trained our handmade lstm for 5000 epochs but we only train the nn.lstm for 300 epochs will make sure that only version 3 log files the most recent log files are displayed so that the x-axis epochs is scaled properly anyway these are the graphs we end up with each graph shows that the results have stabilized because each curve has flattened out and that suggests that even

that the results have stabilized because each curve has flattened out and that suggests that even though we only did 300 epochs we're done training triple bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the stackquest PDF study guides and my book the stack West Illustrated guide to machine learning at stackquest.org there's something for everyone hooray we've made it to the end of another exciting stat Quest if you like

something for everyone hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more please subscribe and if you want to support stack Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time Quest on

[Music] wood edding with po torch and lightning hooray stack Quest hello I'm Josh starmer and welcome to stack Quest today we're going to talk about word embedding in pie torch plus lightning don't stress out about the cloud use lightning bam this stack Quest has also brought to by the letters a b and c a always b b c curious always B curious note this stack Quest assumes you are already familiar with word embedding if not check out the quest also note you can download all of the code in this

with word embedding if not check out the quest also note you can download all of the code in this stack quest for free the details are in the pinned comment below in the stack Quest on word embedding we created a simple neural network that converted the word or input tokens Troll 2 is great and Jim cata into numbers which we call word embeddings we also showed that these word embeddings allow words that are used in similar contexts like Troll 2 and Jim Kata to appear close to each other when we

that are used in similar contexts like Troll 2 and Jim Kata to appear close to each other when we use the embedding values to plot each word on a graph bam now in this stack Quest we'll learn how to build and train this simple word embedding network with P torch plus lightning first we'll do it from scratch using just tensors and some basic math and then we'll simplify our code using the pi torch linear function lastly we'll learn how to use the pytorch embedding function to load and use

torch linear function lastly we'll learn how to use the pytorch embedding function to load and use pre-trained word embeddings the first thing we do is import torch to create the tensors we will use to store the raw data and to provide a few helper functions then we import torch.nn to create the weights we will use in the network and to bring in some other helper functions then we import atom to fit the neural network to the data with back propagation then we import uniform to initialize the

fit the neural network to the data with back propagation then we import uniform to initialize the weights in the network and to give us the tools to create a large scale embedding network with lots of training data we'll import tensor data set and data loader from torch. ts. data now we import lightning as L to make it way easier to write our code and for automatic code optimization and scaling in the cloud lastly we import pandas matte plot lib and Seaborn so that we can draw some pretty

in the cloud lastly we import pandas matte plot lib and Seaborn so that we can draw some pretty graphs now we will create word embeddings for these two simple sentences Troll 2 is great and Jim Kata is great so we will need to create an input for for each unique token in the training data and these inputs will eventually connect to this word embedding Network now if we wanted to run Troll 2 through the network we would put a one in the input for Troll 2 and a zero in all of the other inputs oh

the network we would put a one in the input for Troll 2 and a zero in all of the other inputs oh no it's the dreaded terminology alert when we specify the inputs like this where one input gets a one and everything else gets a zero it's called one hot encoding so if we want to run the word is through the network we specify the one hot en coding with a one for is and a zero for everything else likewise this is the one hot en coding for great and this is the one hot en coding for Jim cata now

likewise this is the one hot en coding for great and this is the one hot en coding for Jim cata now going back to the one hot en coding for trol 2 in pi torch we can create a Four Element list with one in the the first position for Troll 2 and zeros in all of the other positions to recreate the one hot encoding for Troll 2 likewise we can create similar one hot encoding lists for is great and Jim Kata and once we have a list for each possible input we make a list of these lists and because

Jim Kata and once we have a list for each possible input we make a list of these lists and because we're using pi torch we convert the input lists into tensors with torch. tensor and save the tensors in a variable called inputs now the goal is to create a simple Network that can predict the token that follows a specific input for example if the input token is Troll 2 then we want to predict the word is and that means we want the output for is to be one and the outputs for all of the other

the word is and that means we want the output for is to be one and the outputs for all of the other tokens to be zero in pi torch that means we want to predict the one hot encoding for is likewise when the input is is then we want to predict great and thus we want to predict the one hot encoding for great great is at the end of each phrase and nothing comes after it so in theory it shouldn't predict anything but if we had a larger training data set it probably would predict something so in this

anything but if we had a larger training data set it probably would predict something so in this example will just pretend that it predicts Jim Kata lastly Jim Kata just like Troll 2 predicts is now let's combine the output lists in a list and convert the output lists into tensors and save them in a variable called labels because in machine learning that is what we call the known or ideal output values and now we are done encoding the training data now that we have the inputs and label we can

values and now we are done encoding the training data now that we have the inputs and label we can combine them into a tensor data set that we'll call data set and then use data set to create a data loader called Data loader data loaders are super useful when we have a lot of data because one they make it easy to access the data in batches two they make it easy to shuffle the data each Epoch and three they make it easy to use a relatively small fraction of the data if we want to do a quick

and three they make it easy to use a relatively small fraction of the data if we want to do a quick dirty training for debugging but Josh we don't have a lot of data why are we using a data loader you're right Squatch we don't have a lot of data but in a more realistic setting we would so we might as well do it now okay anyway now that we have the data taken care of let's write the code for this simple word embedding Network when we create a neural network in pi torch we always start by

this simple word embedding Network when we create a neural network in pi torch we always start by defining a new new class now because we're coding our first word embedding network from scratch we'll call this word embedding from scratch and in order to make coding super easy We'll Inherit from lightning module then just like we always do we create an initialization method for the new class this method will create and initialize all of the weight tensors that we need to implement the embedding

method will create and initialize all of the weight tensors that we need to implement the embedding Network and it will also create the LW function that we'll use during training then we'll create a method called forward that makes a forward pass through the embedding Network then we'll create a method to configure the atom Optimizer and lastly we'll create a method called training step to calculate the loss which in this case will be the cross entropy loss the cross entropy loss function will

the loss which in this case will be the cross entropy loss the cross entropy loss function will quantify the difference between what we want the out output to be and what we actually get for the output note there's a lot more to be said about the cross entropy loss function so if you're curious check out the quest now let's start by coding the anit method the first thing we do is call the initialization method for the parent class lightning module this is simply required whenever we inherit

method for the parent class lightning module this is simply required whenever we inherit from a class in Python in this case this will allow us to take advantage of all the features that lightning offers now we need to create and initialize the weights for the network and we're going to do this by using a uniform distribution to randomly select an initialization value for each weight specifically we're going to use this uniform distribution that goes from 0.5 to 0.5 to Generate random numbers

we're going to use this uniform distribution that goes from 0.5 to 0.5 to Generate random numbers for the weights the shape of this distribution shows the that all values between 0.5 and 0.5 have the same likelihood of getting randomly selected hey Josh why are we using values between 0.5 and 0.5 to initialize the weights good question Squatch we're using this specific range of values in order to match up with what we will do in the second part of this tutorial when we use the pi torch linear

match up with what we will do in the second part of this tutorial when we use the pi torch linear function to do the math and the L linear function selects a range of values based on the number of inputs okay anyway in order to use this uniform distribution to Generate random numbers for us we create a variable called Min value and set it to 0.5 the minimum value we want to randomly select and we create a variable called max value and set it to 0.5 the maximum value we want to randomly select

create a variable called max value and set it to 0.5 the maximum value we want to randomly select now we create a parameter for the first weight associated with the first input and use uniform. sample which we imported earlier to initialize it with a random number when I did this the first weight associated with Troll 2 was randomly set to 0.38 then the second weight associated with Troll 2 was randomly set to 0.42 now we just create an initialize parameters for all of the other weights

2 was randomly set to 0.42 now we just create an initialize parameters for all of the other weights associated with each input bam now we've created and initialized all of the weights associated with the inputs likewise we create and initialize parameters for all of the weights associated with each output now we have all of the weights initialized for our word embedding Network bam now the last thing we need to do in our anit method is give our class access access to the Cross entropy loss

thing we need to do in our anit method is give our class access access to the Cross entropy loss function and we do this by calling nn. cross entropy loss and saving it in a variable called loss now that we're done coding the anit method we can use those weights to code the forward method to make a forward pass through the embedding Network for the forward method the input is a list that contains the one hot encoding for one of the input tokens for example the input might be the one hot

the one hot encoding for one of the input tokens for example the input might be the one hot encoding for Troll 2 however when it is passed to the forward method it comes wrapped up in an extra set of brackets so the first thing we do is remove those brackets by setting input to be the first element now we multiply each input value by its corresponding weight that goes to the activation function on top and add the products together and we save that s in a variable called inputs to top hidden

on top and add the products together and we save that s in a variable called inputs to top hidden then we multiply the inputs by the weights to the activation function on the bottom and add the products together and save the sum in a variable called inputs to bottom hidden so now we have the code for the first part of the word embedding Network and since the activation functions are identity functions which means the input is the same as the output we can multiply inputs to top hidden and

functions which means the input is the same as the output we can multiply inputs to top hidden and inputs to bottom hidden by the next set of Weights directly for example we can multiply inputs to top hidden by the first weight going to the top output and then multiply inputs to bottom hidden by the second weight going to the top output and then add those two products together and save the result in a variable called output one then we do the same same thing for the other outputs bam now we've

in a variable called output one then we do the same same thing for the other outputs bam now we've done all the math up to the softmax function and that actually means we are done making a forward pass through the embedding Network because the loss function that we're using for back propagation nn. crossentropy loss does the soft Max for us so the last thing we need to do is package up the output values using torch. stack and save everything in a variable called output pre- soft Max note if

values using torch. stack and save everything in a variable called output pre- soft Max note if instead of using torch. stack we just returned a list of the output values by wrapping them up in square brackets then the gradients would get stripped off and we would not be able to do back propagation so by using torch. stack we can return a list that preserves the gradients anyway the last thing we do in the forward method is return output pre- soft Max now that we have the forward method we are

do in the forward method is return output pre- soft Max now that we have the forward method we are ready to configure the optimizer and configuring the optimizer in this case atom is so easy we can just replace the pseudo code with the real code we pass atom the parameters we want to optimize and we set the learning rate LR to 0.1 hey Josh why did you set the learning rate to 0.1 because our example is pretty simple and I wanted to train relatively quickly I tested out a relatively large

example is pretty simple and I wanted to train relatively quickly I tested out a relatively large learning rate 0.1 and it worked okay now let's talk about the training step method which we'll use to calculate the loss the training step method takes a batch of training data and the index for that batch and the first thing we do is split the batch of training data into the input and the labels which are the ideal output values then we run the input through the network up to the softmax function

are the ideal output values then we run the input through the network up to the softmax function by passing it to the forward method for example if we run the one hot encoding for Troll 2 through the untrained Network these are the values that the forward method will return we then run those values along with the ideal values through the loss function nn. cross loss then runs the output values through a soft Max function and quantifies the difference between the soft Max output in the ideal

through a soft Max function and quantifies the difference between the soft Max output in the ideal values and we save that difference in a variable called loss and then return the loss now at long last we've made it through all the code needed to create word embeddings from scratch we create and initialize the weight tensors and create the loss function in the init method we make a forward pass through the embedding network with the forward method configure the atom Optimizer with configure

through the embedding network with the forward method configure the atom Optimizer with configure uncore optimizers and last but not least calculate the loss with training step bam now let's use the new class we just wrote to create a new word embedding Network that we'll call model from scratch and let's print out the randomly selected weight values that it starts out with here we just have a for Loop that iterates over all the named parameters in the network and for each parameter it prints

Loop that iterates over all the named parameters in the network and for each parameter it prints out its name and value and here's the output now to be honest this list of numbers is kind of hard to read so let's organize it into an easyto read data frame so the first thing we do is put the weight values into a dictionary the first first part label W1 contains the weight values for each input that goes to the activation function on top note we're using the item method to get the weights because

goes to the activation function on top note we're using the item method to get the weights because it Returns the tensor values as python numbers the second part label W2 contains the weight values for each input that goes to the activation function on the bottom then we just label the tokens and inputs and save the dictionary in the very aable called data and then transform data into a pandis data frame called DF and print out DF and this is what the data frame looks like now we can easily see

frame called DF and print out DF and this is what the data frame looks like now we can easily see that the weights for Troll 2 and Jim Kata are relatively different even though they both represent movie titles that are used in the same context this table is pretty helpful for making the embedding values easy to look at but a graph would make them even easier to look at this graph has the weight values to the top activation function W1 on the x axis and the weight values to the bottom activation

to the top activation function W1 on the x axis and the weight values to the bottom activation function W2 on the Y AIS with a graph it's super easy to see that the embedding values for troll two are very different from the values for Jim Kata to create the graph the the first thing we do is call the caborn function scatter plot and we pass scatter plot the data frame DF that we just created and we tell scatter plot that we want to use the weights that go to the top activation function W1 on

we tell scatter plot that we want to use the weights that go to the top activation function W1 on the X AIS and the weights that go to the bottom activation function W2 on the Y AIS now if all we did was call scatter plot then we'd end up with this scatter plot and while this scatter plot is super cool it would be much cooler if each dot were labeled with the word or token that it represented like this so in order to add the tokens as labels to each point we call the Matt plot lib text function

this so in order to add the tokens as labels to each point we call the Matt plot lib text function and we pass in the X and Y AIS coordinates for the point in the first row in the data frame and the value for the token then then we specify how we want the text aligned the font size the font color and lastly the font weight then we do the same thing for each row in the data frame and then we call PLT doow and we get this super cool looking scatter plot like we mentioned earlier we can now see

PLT doow and we get this super cool looking scatter plot like we mentioned earlier we can now see that the embedding values for Troll 2 and Jim cata are pretty different and that means we need to train our embedding Network we start training by creating a lightning trainer called trainer and tell it to train for at most 100 Epoch which means we will do back propagation for every weight using the training data at most 100 times now we call the trainers fit method and pass it the embedding

the training data at most 100 times now we call the trainers fit method and pass it the embedding Network called model from scratch and the training data called Data loader in theory it should only take a few seconds to train our simple embedding Network and when it's done we recreate the data frame that has the weights or embedding values for each token and we can either stare at the embedding values in the data frame or we can draw a scatter plot of the tokens just like before note because

values in the data frame or we can draw a scatter plot of the tokens just like before note because the labels for Troll 2 and Jim cata are overlapping and hard to read I then added little offsets to where Troll 2 and Jim cata were printed and now we can see that after training the embedding Network the embedding values for Troll 2 and Jim cata are very similar which is great since they are used in similar contexts bam now that we have trained our embedding Network we can see what it predicts

in similar contexts bam now that we have trained our embedding Network we can see what it predicts when we use Troll 2 as the input remember from when we created the training data that we want Troll 2 to predict is so the first thing we need to do is create a soft Max function because we didn't have to explicitly use it in our model note we set dim equal to zero so that we can apply it to rows of output values if we set dim equal to one then we would apply it to Columns of values now we pass

of output values if we set dim equal to one then we would apply it to Columns of values now we pass Troll 2 as a one hot encoded tensor into model from scratch and we run the output values through the the soft Max and then round the output of the soft Max to two decimal places and finally print out the result and we get the one hot encoded tensor for is which is correct bam likewise we can verify that all of the other inputs to our embedding Network create the correct outputs okay now that we

that all of the other inputs to our embedding Network create the correct outputs okay now that we know how to create and train a simple word embedding Network from scratch let's make our lives a little easier by using the P torch linear function to create the same network so let's create a new class called word embedding with linear and again in order to make training super easy will inherit from lightning module then create the anit method that we use to create and initialize the weights and

lightning module then create the anit method that we use to create and initialize the weights and like always we'll call the anit method from the parent class now comes the interesting part instead of calling nn. parameter to create and initialize each weight in the network we only have to make two calls to nn. linear the first call creates the weights between the inputs and the hidden layer in features equals 4 means we are connecting four inputs to two nodes specified with features equals 2

features equals 4 means we are connecting four inputs to two nodes specified with features equals 2 in the hidden layer in other words this call to nn. linear will make four weights for each of the two nodes in the hidden layer and since we don't need any bias terms we set bias equal to false the second call to nn. linear creates the weights between the hidden layer and the outputs it creates two weights within features equal to two for each of the four outputs without features equal to 4 and

weights within features equal to two for each of the four outputs without features equal to 4 and again since we don't need any bias terms we set bias equal to false now the last thing we need to do in our anit method is give our class access to the Cross entropy loss function now we need to code the forward method that makes a forward pass through the network the cool thing is that all we have to do to calculate the sums before the activation functions is pass the input to the linear object

to do to calculate the sums before the activation functions is pass the input to the linear object input to Hidden that we created in the anit method and save the sums in a variable called hidden the linear object input to Hidden does all of the multiplication and addition for us bam note now that we are using linear to do the math we no longer have to strip off the extra brackets from input like we did before anyway because the input to these activation functions is the the same as the output

we did before anyway because the input to these activation functions is the the same as the output we can just ignore them and pass hidden to the second linear object we created hidden to Output hidden to Output calculates the output sums from the activation functions and we save those output values in output values now remember that we don't need to calculate the soft Max because the loss function nn. crossentropy loss does it for us so all we have to do is return the output values bam the

nn. crossentropy loss does it for us so all we have to do is return the output values bam the next thing we do is create the configure optimizers method and just like before we use the atom Optimizer and pass it the parameters we want to optimize and set the learning rate to 0.1 the training step method is also similar to what we did earlier and that means that this embedding network is contained in this class definition by using inn. linear we significantly reduced the amount of code we need

in this class definition by using inn. linear we significantly reduced the amount of code we need compared to when we did everything from scratch we can see the difference when we shrink the original code for the word embedding from scratch class down so that we can fit it on a single screen and compare it to the size of the word embedding with linear class on the same hardto read scale bam now we can create a new model model linear with our new class word embedding with linear and just like

we can create a new model model linear with our new class word embedding with linear and just like before put the pre-trained word embedding values into a data frame called DF note because we used nn. linear to create the weights we access them with weight and we call detach to remove the gradient from the tensors and we use zero and one to index the weights that go to the top and bottom activation functions and lastly convert the tensor to a num Pi array with num Pi now when we print out our

functions and lastly convert the tensor to a num Pi array with num Pi now when we print out our data frame DF we get this nicely formatted table and we can draw a scatter plot of the tokens just like before and that gives us a scatter plot that looks like this and the graph suggests that the embedding values or weights are not yet optimal because Troll 2 and Jim are so far from each other so just like before we can train the model for 100 Epoch and after training we end up with these weights

like before we can train the model for 100 Epoch and after training we end up with these weights and the weights going from the inputs to the hidden layer are the new embedding values and when we redraw the scatter plot with the new embedding values we see that the values for Troll 2 and Jim cata are similar double bam now that we we know how to create word embedding networks from scratch and within in. linear and we can create word embeddings that put words and tokens used in similar context

in. linear and we can create word embeddings that put words and tokens used in similar context near each other let's learn how we can load and use pre-trained word embedding values with nn. edding Note in this example we're just going to load and access the embedding values we created but in practice we might want to load and use the word Tove embedding values which have 100 values per token and millions of tokens or the embedding values created by a Transformer like chat GPT however before we

millions of tokens or the embedding values created by a Transformer like chat GPT however before we get started let's just print out the embedding values from the last Model we trained model linear we access the embedding values in model linear just like we did when we created the data frame except now we don't have to worry about the gradient an and we get two lists of embedding values specifically the weights are arranged in two rows the first row corresponds to the weights that go to the top

the weights are arranged in two rows the first row corresponds to the weights that go to the top activation function and the second row corresponds to the weights that go to the bottom activation function now the problem with this is that nn. embedding expects the weights to be in columns just like in the data frames we created the good news is that converting rows into columns is super easy so with that said let's load and use these pre-trained word embedding values with nn. edding we start by

that said let's load and use these pre-trained word embedding values with nn. edding we start by creating an nn. embedding object and we pass the pre-trained weights in with from pre-trained and we use T to transpose the rows of Weights into columns lastly we save the the new embedding object in word embeddings we can then verify that we did things correctly by printing out the weights and we see that the weights are now arranged in two columns now we can print out the embedding values for the

that the weights are now arranged in two columns now we can print out the embedding values for the first input Troll 2 by passing in a tensor with the first index value zero and the embedding values match what we expect so we know we did things correctly accessing the embedding values by index is fine but we can also make our lives Easier by creating a dictionary that maps The Tokens to their indices and now we can more easily access the embeddings with the token itself rather than the index

and now we can more easily access the embeddings with the token itself rather than the index and that's all there is to loading and accessing pre-trained weights into an nn. embedding object we can now use our embedding object word embeddings and connect it to a larger neural network like a Transformer also before we go I just want to remind you that you don't have to type this code yourself instead you can download it and I wrote tons of comments that explain every little detail just like this

you can download it and I wrote tons of comments that explain every little detail just like this stack Quest the link is an app pinned comment below triple bam now it's time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the stack Quest PDF study guides and my book the stat Quest Illustrated guide to machine learning at stat quest.org there's something for everyone hooray we've made it to the end of another exciting stack Quest if you

something for everyone hooray we've made it to the end of another exciting stack Quest if you like this stack Quest and want to see more please subscribe and if you want to support stack Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below all right until next time Quest on

we're going to code a Transformer from scratch hooray stat Quest hello I'm Josh ster and welcome to stat Quest today we're going to talk about coding Transformers from scratch in pi torch this stack Quest is brought to you by the letters a b and c a always BB C curious always be curious I also want to use this opportunity to increase awareness of an awesome charity called give internet.org a platform that makes it simple and transparent for anyone to sponsor internet access laptops and education

that makes it simple and transparent for anyone to sponsor internet access laptops and education for underprivileged students note the code in this stack list is available for free so use the link and the pinned comment below to get your own copy and follow along lastly in this stack Quest we will be building a DE coder only Transformer which is the foundation for chat GPT thus if you are not already familiar with the concepts and Matrix math behind decoder only Transformers check out the

already familiar with the concepts and Matrix math behind decoder only Transformers check out the quests the first thing we do is import torch to create the tensors we will use to store the raw data and to provide a few helper functions then we import torch.nn for the module linear and embedding classes and a bunch of other helper functions then we import torch. nn. functional to access the softmax function that we will use when calculating attention then we import atom to fit the neural

softmax function that we will use when calculating attention then we import atom to fit the neural network to the data with back propagation and to give us the tools to create a large scale Transformer network with lots of training data we import tensor data set and data loader from torch. yous. data lastly we'll import lightning as L to make it way easier to write our code and for Auto automatic code optimization and scaling in the cloud bam now let's create the training data set that we will

code optimization and scaling in the cloud bam now let's create the training data set that we will use to train our transformer for this example all we want is for the Transformer to respond to two different prompts what is stat Quest and Stat Quest is what and in both cases we want the answer to be awesome thus the vocabulary consists of the following tokens what is stack Quest awesome and EOS and we map the tokens to ID numbers because the p torch word embedding function that we will use in

and we map the tokens to ID numbers because the p torch word embedding function that we will use in in. embedding only accepts numbers as input and we save everything in a dictionary called token to ID we then make a dictionary ID to token that can go from ID numbers back to the original tokens these dictionaries will make it easy to format the input to the Transformer and interpret the output from the Transformer now let's talk about how to convert the prompts and the responses into a data set

the Transformer now let's talk about how to convert the prompts and the responses into a data set for example if the prompt is what is stat Quest and the response is awesome then what will be the first input token and ideally since we want each token to generate what comes next the first output token will be is then we want to use is as the next input token and we want that to Output stack Quest then we want stack quest to Output EOS to signify that we are done processing the input so these

then we want stack quest to Output EOS to signify that we are done processing the input so these three steps process the prompt however we're not yet done determining what the inputs and outputs should be for the Transformer because we want the EOS token to Output awesome and we want awesome to generate a second EOS to indicate that we are done generating output thus the tokens to use as input during training come from processing The Prompt as well as from generating the output likewise the

during training come from processing The Prompt as well as from generating the output likewise the outputs that we use during training come from both stages thus if these are our inputs for training then we can code an input tensor using token to ID like this what is stack Quest EOS awesome likewise if the prompt is stack Quest is what then we can code an input tensor using token to ID like this stack Quest is what EOS awesome now going back to the first prompt what is stack Quest when we

this stack Quest is what EOS awesome now going back to the first prompt what is stack Quest when we generate the output from each decoder unit is stack Quest EOS awesome EOS we see we should code the label for the first prompt like this is stat Quest EOS awesome EOS and we see we should code the label for the second prompt like this is what EOS awesome EOS s ultimately we have the input and label for the first prompt and response what is stack Quest awesome and the input and label for the

label for the first prompt and response what is stack Quest awesome and the input and label for the second prompt and response stack Quest is what awesome now we just pass inputs and labels to tensor data set to create a tensor data set object called data set and lastly we pass data set to data load to create a data loader object called Data loader bam now we know how to create the inputs and labels for the training data set the next part is word embedding and we're just going to let nn. edding

for the training data set the next part is word embedding and we're just going to let nn. edding take care of that for us so the next thing we need to talk about is positioning coding position en coding commonly uses a sequence of alternating s and cosine squiggles to calculate values for each token and embedding value this is the equation for the first sign squiggle pause refers to the position or x-axis coordinate of the token in the input this is the equation for the first cosine squiggle

or x-axis coordinate of the token in the input this is the equation for the first cosine squiggle this is the equation for the second s squiggle the two indicates that this is the second sign squiggle and D model refers to the number of values we are using per token this is the equation for the second cosine squiggle in general these are the equations we can use for as many tokens as we want with each token specified with pause and each embedding position specified with I note this + one simply

each token specified with pause and each embedding position specified with I note this + one simply means that the cosine comes after the sign and doesn't change the formula within the cosine function in in other words the formula inside the S function is identical to the formula inside the cosine function now let's work through an example so that we can see these equations in action if we had two tokens then for the first token pause equals zero and for the second token pause equals 1 now if

tokens then for the first token pause equals zero and for the second token pause equals 1 now if each token had four word embeddings then D model = 4 then for the first token we calculate the position and coding values by starting with I equal 0 so we plug pause equals 0 and I equals 0 into the two equations we'll start with the sign function and we get zero so zero is the first position encoding value now let's evaluate the cosine function Bing and we get one so one is the second position

value now let's evaluate the cosine function Bing and we get one so one is the second position encoding value now because we still have two more word embedding values to add positional encoding to we increment I the word embedding index by one and then plug pause equal 0 and I = 1 into the sign function and 0 is the third position encoding value then we plug pause equals 0 and I = 1 into the cosine function and one is the fourth position encoding value so I equals 0 is used for the first two

function and one is the fourth position encoding value so I equals 0 is used for the first two position encoding values since we have two functions s and cosine and I equal 1 is used for the second two position encoding values for the next token we increment Pause by one and reset I so that I equals z and and then calculate the first two position en coding values just like before bam now that we have the first two position encoding values for the second token we increment I by one and then

we have the first two position encoding values for the second token we increment I by one and then calculate the second two position encoding values beoop boop boop bam and anyway rather than use these equations each time we want to add positional encoding to a token we precompute the y-axis values and store them in a matrix this makes adding position and coding values super fast here's the code that we'll use to precompute and add position and coding values to the tokens we start by defining a

we'll use to precompute and add position and coding values to the tokens we start by defining a new class position and coding that inherence from inn. module then like all always we Define an init method D model which is short for dimension of the model is the number of word embedding values per token and Max Len is the maximum number of tokens our Transformer can process input and output combined note for this super simple example we're setting D model to two and Max Len to six but in practice

note for this super simple example we're setting D model to two and Max Len to six but in practice you would set them to much larger values then we call nn. modules andit method and now we start the code that will create a matrix of position encoding values we start by creating a matrix that we call PE for position en codings that is full of zeros PE will have Max Len rows and D model columns for example if Max Len equals 3 and D model equals 2 PE will start out looking like this now we create

example if Max Len equals 3 and D model equals 2 PE will start out looking like this now we create a column Matrix position that represents the positions pause for each token we're using torch. a range to create a sequence of numbers between zero and Max Len and Float ensures that the numbers are floats and UNS squeeze one turns the sequence of numbers into a column Matrix for example if Max Len equals 3 then we will get this column Matrix now we create a row Matrix embedding position that

Len equals 3 then we will get this column Matrix now we create a row Matrix embedding position that represents the index I * 2 for each word embedding just like before we use torch. a range to create a sequence of numbers but this time they are between zero and D model note setting step equals to two results in the same sequence of numbers that we would get if we multiplied I by two so by setting step equal to two we save ourselves a little math and just like before we use float to ensure that

step equal to two we save ourselves a little math and just like before we use float to ensure that the numbers are floats thus when D model equals 2 then embedding index is just a single value zero but when D model equals 6 then we end up with three values now each value in position is divided by this term so we create div term to represent the divisor now we just do the math the first line assigns values from the sign function to The Matrix P starting with the First Column column zero and then

values from the sign function to The Matrix P starting with the First Column column zero and then this two means every other column after that the second line assigns values from the cosine function to The Matrix PE starting with the second column column one and then this two means every other column after that ultimately if we use the default values Max Len equals 3 and D models equals 2 PE will end up looking like this where the First Column has values from the sign function and the second

end up looking like this where the First Column has values from the sign function and the second column has values from the cosine function lastly we use register buffer to ensure that PE gets moved to a GPU if we use one now we create a forward method that takes in word embedding values and adds the position and coding values to the word embedding values and that's all we have to do to code positional encoding bam now that we have the position encoding taken care of let's talk about masked

encoding bam now that we have the position encoding taken care of let's talk about masked self attention the first thing we need to do is calculate the query key and values for each token and that means we need to code all of this math and in pi torch that means we need to use Matrix notation for example if we have the word embeddings plus position and coding values for what is and EOS then we can do all of the math required to create query values the multiplication by these weights and the

can do all of the math required to create query values the multiplication by these weights and the summations by multiplying the encoded values for the tokens by a matrix that contains the weights associated with creating the queries that that matrix multiplication will give us a matrix of query values that we'll call Q that has one row per encoded token likewise we can multiply the encoded tokens by a matrix containing the weights associated with creating key values to create a matrix called K

by a matrix containing the weights associated with creating key values to create a matrix called K that contains key values for each token lastly we can multiply the encoded tokens by a matrix containing the weights associated with creating value numbers to create a matrix of values that we will call V thus when we code an attention class in pi torch we replace this treel likee diagram with matrix multiplication that creates the queries keys and values so we start by defining a class called

multiplication that creates the queries keys and values so we start by defining a class called attention that inherits from inn. module then just like always we create an init method in this case we're passing the init method D model the dimension of the model or the number of word embedding values per token we need to know the number of word embedding values per token because that defines how large the weight matrices are that we use to create the queries keys and values in this specific

large the weight matrices are that we use to create the queries keys and values in this specific example we're using two word embedding values for each token so D model equals 2 and that means each weight Matrix needs D model equal to 2 rows and D model equal to 2 columns so that we end up with D model equals to two query numbers per token bam the next thing we do is call the parents AIT method now in order to create the weight Matrix that we will use to calculate the query values Q we will use

in order to create the weight Matrix that we will use to calculate the query values Q we will use nn. linear which will create the weight Matrix and do the math for us n features defines how many rows are in the weight Matrix so we set it to D model and out features defines the number of columns in the weight Matrix so we set it to D model as well lastly in the original Transformers manuscript they don't add additional bias terms when calculating attention so we won't either by setting bias

they don't add additional bias terms when calculating attention so we won't either by setting bias equal to false as a result we end up with an object we're calling WQ with the currently UNT trained weights needed to calculate query values and because WQ is a linear object it doesn't just store the weights but it will also do the math for us when the time comes then we do the exact same thing to create a linear object WK that contains the weights needed to calculate the keys lastly we create a

create a linear object WK that contains the weights needed to calculate the keys lastly we create a linear object WV to calculate the values and just to give us flexibility to input put training data in sequentially or in batches we create some variables to keep track of which indices are for rows and columns the forward method is where we actually calculate the masked self attention values for each token and another thing we're doing for the sake of flexibility is allowing the query key and

each token and another thing we're doing for the sake of flexibility is allowing the query key and values to be calculated from different token encodings for example encoder decoder Transformers have something called encoder decoder attention where the keys and values are calculated from the encoded tokens in the encoder and the queries are calculated from the encoded tokens in the decoder so allowing the encodings to come from different sources gives us the flexibility to do encoder decoder

the encodings to come from different sources gives us the flexibility to do encoder decoder attention if we want to also since we want to be able to do masked self attention we can pass in a mask now we calculate the query key and values for each token by passing the encodings to each linear object and now we are ready to calculate a tension we start by using torch. matat mole to multiply Q by the transpose of K this calculates the similarities between the queries and the keys which we save in

transpose of K this calculates the similarities between the queries and the keys which we save in Sims then we scale the similarities by the square root of the number of values used in each key note this scaling is something that has been standard practice since the original Transformer manuscript in 2017 however it's not required and really only helps out when the model is relatively large the next thing we do is add the mask if we're using one to the scaled similarities masking is used to

next thing we do is add the mask if we're using one to the scaled similarities masking is used to prevent early tokens from cheating and looking ahead at later tokens to understand how we add a mask using the mask fill method let's imagine that the mask is a matrix of trues and falses and the trues correspond to attention values that we want to ignore so the masted fill method replaces the TRS with -1 * 10 to 9th which represents 1 billion an approximation of negative infinity and it replaces

-1 * 10 to 9th which represents 1 billion an approximation of negative infinity and it replaces the falses with zero to create the final mask that is added to the scaled similarities in scaled Sims the next thing we do to calculate attention is run the scaled similarities through a softmax function applying the softmax function to the scaled similarities determines the percentages of influence that each token should have on the others which is why we store the results in a variable called

that each token should have on the others which is why we store the results in a variable called attention percents lastly we use torch. matat Mo to multiply the attention percentages by the values in v and that gives us the fin final attention scores stored in attention scores which we return bam now that we have coded the attention class we can create a class that puts the first three steps together and then adds the residual connections and then runs those values through a fully connected

and then adds the residual connections and then runs those values through a fully connected layer and then runs them through a softmax to get the outputs and we do that by creating a class called decoder only Transformer note unlike the position encoding and attention classes we created earlier this one inherits from lightning module doing it this way rather than having every class inherit from lightning module allows us to take advantage of everything lightning offers without the overhead of

lightning module allows us to take advantage of everything lightning offers without the overhead of inheriting it multiple times anyway a first recreate the init method which allows us to specify numb tokens the number of tokens in the vocabulary D model the number of values we want to represent each token and Max Len the maximum length of the input plus output then as always we call the parents a nit method then we create an embedding object and we name it we for word embedding embedding needs

nit method then we create an embedding object and we name it we for word embedding embedding needs to know how many tokens are in the vocabulary and the number of values we want to represent each token token then we create a position en coding object using the class we created earlier and name it PE and then we create an attention object then we create the fully connected layer with nn. linear inn. linear needs to know how many inputs there are and how many outputs there are then we create the

linear needs to know how many inputs there are and how many outputs there are then we create the loss function to quantify how well the model performs in this case we're using cross entropy loss because our model has multiple outputs and cross entropy loss will apply the softmax function for us now we put all the pieces together in the forward method forward takes an array of token ID numbers that will be used as inputs to the Transformer first we convert the tokens into word embedding values

will be used as inputs to the Transformer first we convert the tokens into word embedding values then we add the position encoding and then we create the mask that will prevent early tokens from looking at late tokens when we calculate attention we start by creating a matrix of ones with torch. ons for example if we pass four token IDs into this method then the call to torch. On's will make a matrix with four rows and four columns full of ones that Matrix of ones is then passed to torch. TRL

with four rows and four columns full of ones that Matrix of ones is then passed to torch. TRL and I believe that Tri L is pronounced Tri L where L stands for lower triangle because torch. Tri L leaves the values in the lower triangle as they are and turns everything else into zeros ultimately we save a matrix with ones in the lower triangle and Zer in the upper triangle in a variable called mask then we use mask equal equal 0 to convert the Zer into truus and the ones into falses and in the end

we use mask equal equal 0 to convert the Zer into truus and the ones into falses and in the end if we pass in four token IDs this is the mask we will use for masked self attention once we have the mask we calculate attention note because the query key and value matrices will all be calculated from the same token encodings we pass in the same set of position encoded values three times for the queries keys and values we also pass in The Mask so that early tokens can't cheat and look ahead at

queries keys and values we also pass in The Mask so that early tokens can't cheat and look ahead at later tokens and then we add the residual connections and lastly run everything through a fully connected layer remember the loss function we are using cross entropy loss does the soft Max for us so all we have to do is return the output from the fully connected layer bam now that we have coded a decoder only Transformer we need to write the code required to train it so the next thing we do is

decoder only Transformer we need to write the code required to train it so the next thing we do is create a method to configure the optimizer we're using in this case we're using atom which is like stochastic gradient descent but a little less stochastic and we're passing all the weights and biases in the model that we want to train which is all of them to atom and in this example we're setting the learning rate to 0.1 because it makes training this specific model very fast however the default

learning rate to 0.1 because it makes training this specific model very fast however the default value 0.001 is probably more commonly used then we code a training step method which takes a batch of training data and an index for that batch we then split the training data into inputs and labels and then pass the input tokens into the forward method that we just wrote to compute the output and then we compare the output from the Transformer to the known labels using the loss function and

and then we compare the output from the Transformer to the known labels using the loss function and remember the loss function does the soft Max for us lastly we return the loss bam now let's run the model before training it just to see what it does so the first thing we do is create a model from the decoder only Transformer class that we just created then we create an input prompt in this case we're using what is stat Quest EOS then we figure out how many tokens we are using as input we do

we're using what is stat Quest EOS then we figure out how many tokens we are using as input we do this because our super simple model can only handle a total of six tokens so keeping track of how many tokens are in the input will tell us how many we can create as output then we run that through the Transformer which generates predictions for each token in the input this means that the model generates a prediction for what should come after the first token what and for all of the other input

a prediction for what should come after the first token what and for all of the other input tokens however we're really just interested in what the model predicts will come after the EOS token so we use -1 to index the outputs generated by the EOS token the outputs generated by the EOS token are an array of output values one per possible output token so we use the ARG Max function to identif the output token with the largest value thus the token with the largest output value will be the first

output token with the largest value thus the token with the largest output value will be the first token generated as a response to the input note we don't have to take the token with the largest value if we don't want and this is something that is often configured in more complicated models anyway we save that token so that we can print it out later then we use a loop to keep generating output tokens until we reach the maximum number of tokens that our model can generate or the model generates

until we reach the maximum number of tokens that our model can generate or the model generates the EOS token note each time we generate a new output token we add it to the input so that each prediction is made with the full context and then the model predicts the next output token using the full context which is the input plus the output token so far lastly we print out the generated tokens after converting them from ID numbers to text now when we run this code the response to the input what is

converting them from ID numbers to text now when we run this code the response to the input what is stack Quest EOS is eos and that is not what we wanted ideally we would have gotten awesome EOS so that means we need to train the model the good news is that the code for training is super simple first we create a lightning trainer and tell it to only do 30 Epoch which is enough for our simple model and data set and then we pass our model and the data loader we created earlier to the trainer

model and data set and then we pass our model and the data loader we created earlier to the trainer using the fit method and after we train the model we rerun the code we wrote earlier that generates a response to the prompt what is stack Quest EOS however this time we don't create a new model at the start we use the one that we just trained anyway the output is awesome EOS bam and now let's see what happens when the input prompt is stat Quest is what EOS using the same code we used earlier and

happens when the input prompt is stat Quest is what EOS using the same code we used earlier and the output is awesome EOS and that means our decoder only Transformer works exactly as expected triple bam now with time for some Shameless self-promotion if you want to review statistics and machine learning offline check out the stat Quest PDF study guides and my book the stat Quest Illustrated guide to machine learning at stack quest.org there's something for everyone hooray we've made it to the

to machine learning at stack quest.org there's something for everyone hooray we've made it to the end of another exciting stack Quest if you like this stack Quest and want to see more please subscribe and if you want to support stack Quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below all right until next time Quest on

don't be afraid of neural networks they're not scary even when a neural network says boo hello I'm Josh starmer host of the stat quest with Josh starmer YouTube channel and I'm here to say that neural networks are not scary now the term neural network may sound really fancy and complicated but all a neural network does is fit a squiggle or a bent shape to data for example if you've got a data set like this then a neural network can fit a squiggle to that data bam and if you've got a fancier data

this then a neural network can fit a squiggle to that data bam and if you've got a fancier data set like this then a neural network can fit a big shape to that data double bam and if you've got a crazy complicated data set like this well a neural network can still fit a squiggle or a bent shape to that data triple bam hooray [Music]

My cat does stats  when she sleeps   I like to do stats how bout you when I'm awake StatQuest Hello and welcome to StatQuest!!! StatQuest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill Today we're going to be talking front histograms, and they're going to be clearly explained Imagine we went out and measured someone and they were this tall. And then we measured someone else And then we measured a whole bunch of people We've

this tall. And then we measured someone else And then we measured a whole bunch of people We've measured so many people that the dots overlap; some dots are completely hidden. We could try to make it easier to see the hidden measurements by stacking any that are exactly the same But measurements that are the exact same are rare and a lot of the hidden measurements are still hidden. So, instead of stacking measurements that are the exact same we divide the range of values into bins And stack the

stacking measurements that are the exact same we divide the range of values into bins And stack the measurements that fall in the same bin This, my friends, is a histogram Bam The taller the stack within a bin the more measurements we made that fall into that bin. Duh We can use the histogram to predict the probability of getting future measurements. I would be willing to bet that the next measurement we make is somewhere in this range. Measurements out here are rarer and less likely to happen

we make is somewhere in this range. Measurements out here are rarer and less likely to happen in the future. If you want to use a distribution to approximate your data or future measurements, histograms are a good way to justify your decision. By the way, if you don't know what a distribution is, there's a StatQuest for that. In this case we might use a normal distribution to approximate the data and future measurements. If the data look like this we might use an exponential distribution to

and future measurements. If the data look like this we might use an exponential distribution to approximate this data and future measurements Note: Figuring out how wide to make the bins is tricky If the bins are too narrow, then they are not much help In this case the bins are so narrow that pretty much every measurement gets its own bin This doesn't give us much more insight than what we had before so it's not very useful And if the bins are too wide they are not much help In this case the

before so it's not very useful And if the bins are too wide they are not much help In this case the bins are so wide that the measurements are split 50/50 All this tells us this how many measurements are above the average and how many are below this is more insight than before, but we can do better Sometimes you have to try a bunch of different bin widths before you get a clear picture In other words don't rely on the default setting of whatever program you're using to draw the histogram You've

don't rely on the default setting of whatever program you're using to draw the histogram You've got to try a bunch of different settings before you're sure that you've got the best histogram you can draw Hooray, we've made it to the end of another exciting StatQuest!!! If you like this StatQuest and want to see more like it Please subscribe It's really easy, and if you have any suggestions for future StatQuests Just let me know in the comments below. Until next time... Quest On!!!

Stat Quest, Stat Quest, Stat Quest, Stat Quest, StatQuest! Hello, and welcome to StatQuest! StatQuest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill Today, we're going to be talking about what a distribution is. Imagine you're at a wild and crazy dance party and you overhear someone talking about statistics. Chances are, they're going to be talking about distributions... Dag! What is a statistical distribution? Imagine we

going to be talking about distributions... Dag! What is a statistical distribution? Imagine we measured the height of a lot of people The first person we measured was 5.2 feet tall So we put that measurement in a bin that spans from 5 feet to 5.5 feet The second person we measured was 5.8  feet tall The third person we measured was 5.6 feet tall The fourth person we measured was 5.9. feet tall The fifth person we measured was only 5.1 feet tall And the sixth person we measured was 6.3 feet tall

fifth person we measured was only 5.1 feet tall And the sixth person we measured was 6.3 feet tall OK, you get the idea - we measure a bunch of people and put the measurements in bins. When you stack a bunch of measurements into bins like this, you get a histogram Most of the measurements come from people between 5 and 6 feet tall People smaller than 5 feet tall were relatively rare People taller than 6 feet tall were also relatively rare In other words, if you picked one measurement at random,

than 6 feet tall were also relatively rare In other words, if you picked one measurement at random, there's a good chance it would be between 5 and 6 feet tall The histogram gives us a sense of how likely we'll measure someone really tall or really short or closer to the average What if we use smaller bin sizes for our measurements? Now the bins are half as wide as before And here's how our data stacks up in the smaller bins Again, most measurements are between 5 and 6 feet tall, but we can be

stacks up in the smaller bins Again, most measurements are between 5 and 6 feet tall, but we can be more precise, and say half the people are between 5.25 feet tall and 5.75 feet tall By measuring more people and using smaller bins we get a more accurate and more precise estimate of how heights are distributed. We can use a curve to approximate the histogram. The curve tells us the same thing that the histogram tells us: There's a low probability that we will measure someone shorter than 5 feet

the histogram tells us: There's a low probability that we will measure someone shorter than 5 feet tall. There's a low probability that we will measure someone taller than 6 feet. Lastly, there's a relatively high probability we'll measure someone between 5 and 6 feet tall. However, the curve has a few advantages over the histogram: First, even though we measured a bunch of people, we didn't get a value for this bin. Since we can't calculate that probability with the histogram, does that mean

a value for this bin. Since we can't calculate that probability with the histogram, does that mean we will never get a measurement that fits into that bin? No. Instead, we can use the curve to calculate the probability. Another advantage is that the curve is not limited by the width of the bins. If we wanted to know the probability of measuring someone between 5.021 and 5.317 we could use calculus, or a computer to calculate this, without having to round to the nearest bin size. Lastly, if we

or a computer to calculate this, without having to round to the nearest bin size. Lastly, if we don't have enough time or money to get a ton of measurements, the approximate curve based on the mean and standard deviation of the data that we were able to collect is usually good enough. Thus, using the curve can save us a lot of time and money. Both the histogram and the curve are distributions. They show us how the probabilities of measurements are distributed. The tallest part of the histogram,

show us how the probabilities of measurements are distributed. The tallest part of the histogram, or curve, shows the region where measurements are most likely. The low parts of the histogram, or curve, show where measurements are less likely. We've been talking about how height measurements are distributed, but there are all kinds of distributions with all kinds of interesting shapes. We'll talk about these in future StatQuests. The end! Tune in next time for another exciting StatQuest

static which makes me crazy when it's upside-down stack which makes me bonkers when it's upside-down stack West hello and welcome to stack quest stack quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about the normal distribution this is part one of a handful of stack quests on this distribution because it's so darn important today let's just start with the basics chances are you've seen a

because it's so darn important today let's just start with the basics chances are you've seen a normal or Gaussian distribution before it's also called a bell-shaped curve because it's a symmetrical curve that wait for it looks like a bell in this example the curve represents human height measurements people can be short average or tall or anywhere in between the y-axis represents the relative probability of observing someone who is really short or really tall or who has an average height for

of observing someone who is really short or really tall or who has an average height for example it's relatively rare to see someone who is super short so the bell-shaped curve is relatively low in this part of the graph but it's quite common to see someone who is close to the average height so the bell-shaped curve is very tall in this region and it's relatively rare to see someone who is really tall so again the bell-shaped curve is relatively low in this region here are two normal

is really tall so again the bell-shaped curve is relatively low in this region here are two normal distributions of the height of male humans when born and as adults this is the distribution for the babies and this is the distribution for the adults the average baby height is 20 inches the average adult height is 70 inches normal distributions are always centered on the average value just by looking at the graph we can tell there is a high probability that a newborn baby will be between 19 and

at the graph we can tell there is a high probability that a newborn baby will be between 19 and 21 inches tall in contrast adults are between 60 and 80 inches tall you may have noticed that the curve for babies is way tall compared to the curve for adults this is because there are many more possibilities for adult height than for babies the more options there are for height the less likely any specific measurement will be one of them the width of the curve is defined by the standard deviation

measurement will be one of them the width of the curve is defined by the standard deviation we can tell just by looking at the curves that babies have a relatively small standard deviation compared to adults the standard deviation for babies is 0.6 the standard deviation for adults is 4 knowing the standard deviation is helpful because normal curves are drawn such that 95% of the measurements fall between plus or minus two standard deviations around the mean this means that 95% of the baby

fall between plus or minus two standard deviations around the mean this means that 95% of the baby measurements fall between 20 plus or minus 1.2 inches and 95% of the adult measurements fall between 70 plus or minus 8 inches to draw a normal distribution you need to know one the average measurement this tells you where the center of the curve goes to the standard deviation of the measurements this tells you how wide the curve should be and the width of the curve determines how tall it is the

tells you how wide the curve should be and the width of the curve determines how tall it is the wider the curve the shorter the narrower the curve the taller the curves then tell us that there is a high probability of measuring a newborn baby boy within plus or minus 1.2 inches of the mean and there's a low probability of measuring a man within plus or minus 1.2 inches of the mean lots of things are normally distributed we've been talking about height but there's also weight commuting times and

normally distributed we've been talking about height but there's also weight commuting times and many many many many many many many more things the normal distribution is kind of magical in that we see it a lot in nature but there's a reason for that and that reason makes it super useful for statistics as well spoiler alert it's called the central limit theorem I'm already working on a whole stack quest on the central limit theorem so that's something we can all look forward to hooray we've

quest on the central limit theorem so that's something we can all look forward to hooray we've made it to the end of another exciting stat quest if you like this stat quest and would like to see more of them please subscribe and if you have any suggestions for stat quests you'd like me to do put them in the comments below until next time quest on

the mean the median and the mode when it's normal they're the same stat quest

the exponential distribution is useful when you're estimating time between two events like the amount of time that passes between two stack quest videos stat quests

even if your ukulele is out of tune don't sweat it you can still watch stat quest all day long hooray hooray stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about some statistics fundamentals specifically we're gonna talk about population parameters note this stat quest assumes you already know about histograms statistical distributions and specifically the normal distribution if not check out the quests the links are in the description below now imagine we

distribution if not check out the quests the links are in the description below now imagine we counted the number of mRNA transcripts from gene X in five different liver cells note if mRNA transcripts in liver cells doesn't mean anything to you instead imagine we counted the number of green apples in five different grocery stores or you could imagine counting green t-shirts in five different clothing stores or imagine whatever you want to measure in five different units since I work in a

clothing stores or imagine whatever you want to measure in five different units since I work in a genetics lab I'll stick with mRNA transcripts and liver cells this green dot represents a liver cell that had three mRNA transcripts for gene X and this green dot represents a liver cell that had 13 mRNA transcripts 19 transcripts 24 and 29 now if we had a lot of time and money on our hands we could count the number of mRNA transcripts for gene X in every single liver cell however for the sake of

count the number of mRNA transcripts for gene X in every single liver cell however for the sake of this example you'll just have to imagine 240 billion green dots on this line representing the 240 billion cells in a human liver because I don't have time to draw them all wah wah now we can draw a histogram of the measurements the histogram tells us that most of the cells had between 20 and 30 mRNA transcripts and relatively few cells had less than 10 transcripts and relatively few cells had more

transcripts and relatively few cells had less than 10 transcripts and relatively few cells had more than 30 transcripts we can use the histogram to calculate probabilities and statistics for example if we wanted to know the probability of observing a liver cell with 30 or more mRNA transcripts for gene X then we would figure out how many liver cells had 30 or more mRNA transcripts for gene X and divided by the total number of liver cells in this case there are 38 billion cells with 30 or more

divided by the total number of liver cells in this case there are 38 billion cells with 30 or more transcripts and we divide that by 240 billion do the math and the probability of observing a cell with 30 or more transcripts is 0.16 BAM note this histogram made from mRNA counts in all 240 billion liver cells corresponds to a normal distribution with mean equals 20 and standard deviation equals 10 the mean 20 is right in the middle and the standard deviation 10 corresponds to how wide the curve

the mean 20 is right in the middle and the standard deviation 10 corresponds to how wide the curve is around the mean in other words the standard deviation tells us how the data are spread around the mean just like with the histogram we can use the distribution to calculate probabilities and statistics for example if we wanted to know the probability of observing a liver cell with 30 or more mRNA transcripts for gene X then we would calculate the area under the curve for all values equal to or

transcripts for gene X then we would calculate the area under the curve for all values equal to or greater than 30 and divide by the total area under the curve in this case the area under the curve greater than 30 equals 0.16 and the total area is 1 now we do the math and that tells us that the probability of observing a cell with 30 or more transcripts is 0.16 since we got the same value with the histogram it means the normal curve is a good approximation of the real data BAM note if we had

the histogram it means the normal curve is a good approximation of the real data BAM note if we had counted green apples in a single chain of grocery stores then the distribution would represent the number of green apples in every single store in that chain and that means we could use the distribution to calculate statistics about apples in that grocery store chain BAM oh no it's a terminology alert watch out because this histogram represents every liver cell or all the grocery stores in a

alert watch out because this histogram represents every liver cell or all the grocery stores in a specific chain a statistician would say that it represents a population thus the mean and standard deviation of the normal curve which represents the population are called population parameters and we call the mean the population mean and we call the standard deviation the population standard deviation or the population SD for short note if the histogram had looked like this then we could fit an

or the population SD for short note if the histogram had looked like this then we could fit an exponential distribution to the data the shape of an exponential distribution is determined by the rate which in this case equals 0.1 and even though the exponential distribution looks different from the normal distribution it would still represent the population of liver cells and that makes the rate the population rate and we could use the exponential distribution to calculate probabilities and

the population rate and we could use the exponential distribution to calculate probabilities and statistics just like when we had a normal distribution alternatively if the shape of the histogram had looked like this then we would fit a gamma distribution to the data and since the shape of the gamma distribution is determined by two parameters shape and rate then shape and rate or population parameters note the concepts that we discuss in the rest of the stack quest apply to almost every

parameters note the concepts that we discuss in the rest of the stack quest apply to almost every statistical distribution however we'll just focus on the normal distribution in these examples so returning to the original normal curve since we rarely if ever have enough time and money to measure every single thing in a population we almost always estimate the population parameters using a relatively small sample in this case we have measurements from only five of the 240 billion cells so we

small sample in this case we have measurements from only five of the 240 billion cells so we will use these five measurements to estimate the population parameters the reason why we want to know the population parameters is to ensure that the results drawn from our experiment are reproducible in other words if someone else measured gene X in five different liver cells then they would get five different measurements however the new measurements will come from the same population and insights

different measurements however the new measurements will come from the same population and insights derived from the population like the probability of observing more than 30 mRNA transcripts in a single cell will apply to both experiments and future experiments so instead of just describing the five measurements that we made we want to estimate the population parameters and use those as the basis for the results double bam note if you're coming from a machine-learning background it might be

for the results double bam note if you're coming from a machine-learning background it might be helpful to think of these five measurements as the training data set in the curve that represents the population is what we want to predict with our machine learning method BAM going back to our five measurements I can tell you that the estimated population mean is seventeen point six and the estimated population standard deviation is ten point one note we'll talk about how to estimate the population

population standard deviation is ten point one note we'll talk about how to estimate the population mean and standard deviation in a follow-up stat quest for now just know that it's not hard now when we repeat the experiment the estimated population mean is nineteen point two and the estimated population standard deviation is twelve point seven thus each time we do the experiment we get different estimates of the population parameters and both sets of estimates are different from the true

estimates of the population parameters and both sets of estimates are different from the true population values now if you've been paying attention what I just said should be a little disturbing earlier we said the whole idea behind population parameters was to give us reproducible results so how does getting different estimates each time give us reproducible results to answer this question let's start by assuming we only have two measurements when we just have these two measurements the

let's start by assuming we only have two measurements when we just have these two measurements the estimated population mean equals 11 and the estimated population standard deviation equals eleven point three compared to the actual values the estimated mean 11 is way off from the true population mean 20 and the estimated standard deviation eleven point three is a little larger than the actual standard deviation 10 however if we had three measurements then the estimated mean equals fifteen point

deviation 10 however if we had three measurements then the estimated mean equals fifteen point three which is closer to the true value than before and the estimated standard deviation equals 11 which is slightly closer to the true value than before however like we saw earlier when we have all five measurements then the estimated mean equals seventeen point six which is even closer to the true value and the estimated standard deviation equals ten point one which is even closer to the true value

and the estimated standard deviation equals ten point one which is even closer to the true value than before and if we had ten measurements then our estimates would be even better that means that the more data that we have the more confidence we can have in the accuracy of the estimates one of the main goals and statistics is quantifying how much confidence we can have in population estimates specifically statisticians often calculate p-values and confidence intervals to quantify the confidence

statisticians often calculate p-values and confidence intervals to quantify the confidence in estimated parameters and like we just saw generally speaking the more data the more confidence we have in the estimates going back to the to replicate experiments even though these experiments resulted in different estimates for the population mean and standard deviation we can use statistics to quantify our confidence in how different they are in this case a p-value or alternatively a confidence

our confidence in how different they are in this case a p-value or alternatively a confidence interval would tell us that while the estimates are different they are not significantly different and that means the results generated from the first experiment should not be significantly different from the results generated from the second experiment and that means we should be able to replicate the results triple bam in summary a population represents every single liver cell or every grocery store

triple bam in summary a population represents every single liver cell or every grocery store in a chain of grocery stores or whatever unit it is you are measuring something awesome and the parameters that determine how a distribution fits the population data are called population parameters we rarely if ever have population data so we always estimate population parameters along with that we also calculate how much confidence we should have in those estimates generally speaking the more data we

calculate how much confidence we should have in those estimates generally speaking the more data we have the more confidence we have in the estimates by estimating the population parameters and quantifying our confidence in them we can generate results that are reproducible in future experiments PS if you'd like to learn more about how we can quantify our confidence in estimated population parameters check out the quest on confidence intervals the link is in the description below hooray we've

check out the quest on confidence intervals the link is in the description below hooray we've made it to the end of another exciting stat quest if you liked this stack quest please subscribe and if you want to support stack quest well consider buying one or two of my original songs or buying a t-shirt or a hoodie or something like that alright until next time quest on

Calculating the Mean, Variance and Standard Deviation, Clearly Explained!!!

I was home last night barians of standard deviation so I estimated them and its goal that quest [Music] hello I'm Josh stormer and welcome to stat quest today we're gonna continue our series on statistics fundamentals this time we're gonna talk about estimating the mean variance and standard deviation note this stat quest assumes you already know about histograms statistical distributions and specifically the normal distribution if not check out the quests the links are in the description below

the normal distribution if not check out the quests the links are in the description below also this stat quest assumes you already understand why we want to estimate population parameters if not check out the quest the stat quest on population parameters we counted the number of mRNA transcripts from gene X in five different liver cells alternatively if mRNA transcripts and liver cells didn't mean anything to you we counted the number of green apples in five different grocery stores or green

anything to you we counted the number of green apples in five different grocery stores or green t-shirts and five different clothing stores or whatever you want to measure in five different units this green dot represented a liver cell that had three mRNA transcripts for gene X and this green dot represented a liver cell that had 13 mRNA transcripts 1924 and 29 now if we had a lot of time and money on our hands we could count the number of mRNA transcripts for gene X in all 240 billion liver

on our hands we could count the number of mRNA transcripts for gene X in all 240 billion liver cells now we can draw a histogram of the measurements if we wanted to fit a normal curve to this histogram like this then we need to calculate the population mean in the population variance or population standard deviation calculating the population mean is easy we take the average of all 240 billion measurements BP booty P due to baby boo doo bee doo doo boo boo and we get 24 the population mean and

BP booty P due to baby boo doo bee doo doo boo boo and we get 24 the population mean and we Center the normal curve on the population mean note because we calculated the mean with all 240 billion measurements in the population this is not an estimate of the population mean it is the population mean however since we rarely if ever have enough time and money to measure every single thing in a population we almost always estimate the population mean using a relatively small sample in this example

we almost always estimate the population mean using a relatively small sample in this example we have the measurements from only five of the 240 billion cells estimating the population mean is super easy we just calculate the average of the measurements we collected doodoo booty boot boot boot boot and in this case the estimated population mean is seventeen point six oh no it's the dreaded terminology alert statisticians often use the symbol x-bar to refer to the estimated mean which is also

alert statisticians often use the symbol x-bar to refer to the estimated mean which is also called the sample mean and they use the Greek symbol mu to refer to the population mean the estimated mean x-bar is different from the population mean mu but with more and more data x-bar should get closer and closer going back to the full set of population data we will now determine how wide to make the curve by calculating not estimating the variance and standard deviation in other words we want to

curve by calculating not estimating the variance and standard deviation in other words we want to calculate how the data are spread around the population mean this is the formula we use to calculate not estimate the population variance note I'm making a big deal about calculating versus estimating variance because it makes a big difference that we'll talk about later this part X minus mu means we subtract the population mean mu from each measurement X boo-boo-boo-boo-boo the square tells us to

subtract the population mean mu from each measurement X boo-boo-boo-boo-boo the square tells us to square each term character Sigma tells us to add up all the terms lastly we want the average of the squared differences so we divide by the number of measurements n which in this case is 240 billion thus we're just calculating the average of the squared differences between the data and the population mean note squaring each term ensures that each difference is positive otherwise the measurements

mean note squaring each term ensures that each difference is positive otherwise the measurements on the left side of the mean would give negative differences which would cancel out the positive differences from the measurements on the right side of the mean note if you are wondering why we don't take the absolute value of each term great we'll talk about that in the follow-up video that dives deep into these details anyway and now we just do the math and we get 100 for the population variance

into these details anyway and now we just do the math and we get 100 for the population variance BAM okay we calculated the population variance and we're all proud of ourselves however there is one thing that is annoying about it because each term is squared the units for the result 100 are mRNA transcripts squared note if the data have been the number of apples and grocery stores then the variance would be 100 apples squared either way we can't plot the variance on the graph since the units on

would be 100 apples squared either way we can't plot the variance on the graph since the units on the x axis are not squared to solve this problem we can take the square root of everything and that gives us the population standard deviation so the population standard deviation is the square root of 100 the population variance which is 10 and we can plot that on the graph this shows the main 20 plus and minus the standard deviation 10 mRNA transcripts um note before we move on I want to

20 plus and minus the standard deviation 10 mRNA transcripts um note before we move on I want to emphasize the point that we almost never have the population data so we almost never calculate the population mean and population variance in standard deviation instead we estimate the population variance and population standard deviation from the relatively small number of measurements that we have remember the population variance and standard deviation determines how much the curve spreads out and

the population variance and standard deviation determines how much the curve spreads out and that means the estimated variance and the estimated standard deviation should reflect how the data are spread around the population mean however when we do an experiment we don't see the curve or the population mean we only see the data so we have to use the estimated mean x-bar instead this is the formula we use to estimate the population variance because we almost always work with a relatively small

we use to estimate the population variance because we almost always work with a relatively small sample and not the entire population this is the formula we will use most of the time the differences between this formula and the one for the calculated population variance are subtle but important first since we don't know the population mean mu we use the sample mean x-bar second we are dividing by n minus 1 instead of n dividing by n minus one compensates for the fact that we are calculating the

n minus 1 instead of n dividing by n minus one compensates for the fact that we are calculating the differences from the sample mean instead of the population mean otherwise we would consistently underestimate the variance around the population mean this is because the differences between the data and the sample mean tend to be smaller than the differences between the data and the population mean thus the differences around the population mean or result in a larger average and the larger

mean thus the differences around the population mean or result in a larger average and the larger average is what we are trying to estimate note if you're like me and want to know more details about why we need to compensate for calculating differences from the sample mean check out the follow-up stat quest the link is in the description below now let's do the math before we calculate the differences between the mean and the data doopa doopa doopa doopa - then we square each term add up each

between the mean and the data doopa doopa doopa doopa - then we square each term add up each term but now we divide by n minus 1 and the estimated population variance is 100 1.8 now we just take the square root of the estimated variance to get the estimated standard deviation and we get 10.1 we can draw the mean plus and minus the standard deviation on the graph double BAM the estimated population parameters correspond to this purple curve with mean equals seventeen point six and standard

parameters correspond to this purple curve with mean equals seventeen point six and standard deviation equals ten point one which isn't too far off from the true distribution with mean equals 20 and standard deviation equals 10 with more data the estimated parameters would be more accurate and we would have more confidence in them however with just five measurements we still did pretty well and that saved us a ton of time and money hooray in summary if we have all of the data from a population

saved us a ton of time and money hooray in summary if we have all of the data from a population we can calculate the population mean the population mean equals the sum of the measurements divided by the number of measurements and that equals the average measurement mu when we don't have the population data we can estimate the population mean with the same formula the estimated population mean equals the sum of the measurements divided by the number of measurements which equals the average

equals the sum of the measurements divided by the number of measurements which equals the average measurement x-bar when we have the population data we can calculate the population variance and standard deviation the population variance is the average of the squared differences between the data and the population mean mu in other words we square these differences to prevent the ones on the left from canceling the ones on the right and then take the average and the population standard deviation

canceling the ones on the right and then take the average and the population standard deviation is just the square root of the population variance and since the standard deviation is in the original units that we measured we can draw it on the graph however we almost never have the population data so chances are you should not use these formulas said we almost always estimate the variance and standard deviation when we estimate the population variance we divide by n minus one to compensate for

deviation when we estimate the population variance we divide by n minus one to compensate for measuring distances from the sample mean instead of the population mean and the estimated standard deviation is just the square root of the estimated population variance and since the standard deviation is in the same units that we measured the data we can draw it on the graph and one last shameless plug for the follow up stat quest if you want to know why dividing by n underestimates the variance

plug for the follow up stat quest if you want to know why dividing by n underestimates the variance check out the quest the link is in the description below triple bell [Music] is in this stat quest I made a big deal about how we rarely have the population data and we almost always estimate the population parameters one reason I did this was because while many software packages estimate the variance and standard deviation by default Microsoft Excel does not instead it gives two choices one

and standard deviation by default Microsoft Excel does not instead it gives two choices one function VAR p calculates the population variance the other VAR s estimates it since we almost always have a relatively small sample rather than the population data we should almost always use far s hooray we've made it to the end of another exciting stat quest if you like this that quest and want to see more please subscribe and if you want to support stack quest well consider buying an original song or

please subscribe and if you want to support stack quest well consider buying an original song or a t-shirt or a hoodie or just donating the links are all in the description below alright until next time quest on you

it's our boss that quest gray hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about what is a model the word model is used in a lot of contexts when I was a kid a model was a toy that I glued together when I was a little older a model with someone who wore fancy clothes now that I'm an adult the term model has more to do with math and statistics for

wore fancy clothes now that I'm an adult the term model has more to do with math and statistics for example I might model mouth size with Mouse wait what does this mean and why would I want to do this in this context model refers to a relationship the model is a way to explore the relationship between weight and size in this case the relationship is pretty obvious the heavier the mouse the bigger the mouse and the lighter the mouse the smaller the mouse a model can also be an equation here we

the mouse and the lighter the mouse the smaller the mouse a model can also be an equation here we have the equation for the line that we have fit to the data the equation is a mathematical model the model or equation can tell us about mice we haven't measured yet someone might want to know how large a mouse might be if it weighs 4 units so we plug that value into our equation and we get Mouse size equals 3.3 the model predicts that a mouse that weighs 4 units will be 3.3 units big the model or

equals 3.3 the model predicts that a mouse that weighs 4 units will be 3.3 units big the model or equation is an approximation of the real data here the dotted lines show the distance from the model to the actual data points a lot of Statistics is dedicated to determining if a MA makes a good or bad approximation of the data right now I'm working on a bunch of new stat quests to cover these subjects specifically this includes linear regression general linear models t-tests ANOVA's and F tests

specifically this includes linear regression general linear models t-tests ANOVA's and F tests and all kinds of really exciting things that I can't wait to cover sometimes a model isn't a straight line in this case the model helps us understand the relationship between a drug and hair growth for aging men we see that after a point increasing the dosage doesn't help grow any more hair models can be simple or complex here we are using two genes x and z to model mouth size in summary we use models

simple or complex here we are using two genes x and z to model mouth size in summary we use models to explore relationships for example I might be interested in the relationship between gene X and a mouth size we then use statistics to determine how useful and how reliable our model is hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you have any static quest ideas of your own that you'd like me to

of them please subscribe and if you have any static quest ideas of your own that you'd like me to cover just write them down in the comments below alright tune in next time for another really exciting static quest

the state quest hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department in the University of North Carolina at Chapel Hill today we're going to be talking about sampling a distribution or getting samples from a distribution this is something that we do all the time and stack quest so I wanted to make a video that we could reference rather than covering the same material over and over and over again so let's get down to it here we have a

than covering the same material over and over and over again so let's get down to it here we have a histogram of height measurements each red dot represents a different person that we measured the tallest part of the histogram shows the region where measurements are most likely in this case most of the people we measured were between 5 foot 7 inches and 6 feet tall the low parts of the histogram show where measurements are less likely in this case we didn't measure many people that were shorter

where measurements are less likely in this case we didn't measure many people that were shorter than four and a half feet were taller than six-and-a-half feet we can approximate the histogram with a smooth curve you guys already know all this from the stat quest on statistical distributions what we want to know today is what it means to take a sample from a distribution all that means is that we use a computer to pick a random number based on the probabilities described by the histogram or the

use a computer to pick a random number based on the probabilities described by the histogram or the curve for example if we wanted to take one sample from this distribution there's a good chance the computer will pick a value near the middle where the histogram and curve are tallest however every now and then the computer will return a value from the edges where the histogram and curve are the shortest why would you want to take a sample from a distribution we do this to explore statistics the

why would you want to take a sample from a distribution we do this to explore statistics the computer can generate lots of samples and we can plug them into statistical tests to see what happens since we know what the original distribution is we can compare our expectations of what will happen to reality for example I could take two samples where N equals three from a single distribution and do T tests on the samples in this case N equals the number of measurements we take within each sample

T tests on the samples in this case N equals the number of measurements we take within each sample since the distribution is the same the t-test should give me a large p-value doing lots of tests will give me a sense of how frequently the T test successfully gives me a large p-value if I had two separate distributions a t-test is supposed to give me a small p-value if I took lots of samples I could do lots of T tests and see how frequently the t-test worked and gave me a small p-value this

could do lots of T tests and see how frequently the t-test worked and gave me a small p-value this would tell me if I needed to increase my sample size or not taking samples from a distribution or multiple distributions ie getting a computer to generate a bunch of random numbers that reflect the probabilities of a distribution lets us determine what a statistical test is capable of doing without doing much real work for a we've made it to the end tune in next time for another exciting stat

doing much real work for a we've made it to the end tune in next time for another exciting stat quest

Hypothesis Testing and The Null Hypothesis, Clearly Explained!!!

stat question the mornin stat quest at night stat quest in the afternoon it's alright stat quest hello I'm Josh stormer and welcome to stat quest today we're gonna talk about hypothesis testing and the null hypothesis I'm not going to name names but imagine there was a virus and we had two drugs we could use to treat it so we give drug a to three people and measure how long it takes each person to recover from the virus the first thing we notice is that not everyone recovered in the exact same

recover from the virus the first thing we notice is that not everyone recovered in the exact same amount of time person number one recovered the fastest in person number two recovered the slowest it's possible that person number one eats healthy food and exercises and already has a strong immune system and that helped them recover quickly and maybe person number two doesn't get as much exercise or maybe person number two has a stressful job or lives where there is a lot of air pollution the

or maybe person number two has a stressful job or lives where there is a lot of air pollution the point is is that even though all three people had the same virus and took the same drug they did not all recover in the exact same amount of time and that might be due to a lot of random things like exercise or job stress that we cannot control now let's give drug b to three different people that have the virus and measure how long it takes them to recover again we see that even though three people

the virus and measure how long it takes them to recover again we see that even though three people had the same virus and took the same drug they did not all recover in the exact same amount of time and this is probably due to random stuff that we can't control like how much exercise each person gets or how much candy they eat overall it looks like people taking drug a took less time to recover than people taking drug B and when we calculate the mean or average value for drug a and the mean

than people taking drug B and when we calculate the mean or average value for drug a and the mean value for drug B we see that on average there is a 15-hour difference between drug a and drug B so after seeing this preliminary data it might seem reasonable to form the following hypothesis people taking drug a need on average 15 fewer hours to recover than people taking drug B and now that we have this hypothesis we can test it by repeating the experiment now when we calculate the means we see

this hypothesis we can test it by repeating the experiment now when we calculate the means we see that on average people taking drug a need 35 more hours than people taking drug be compared to our preliminary data this result is very unexpected in fact it is the opposite of the original hypothesis but it is also possible that all three people that took drug a in the second experiment have super stressful jobs and unhealthy lifestyles and maybe that's why it took them so long to recover and

stressful jobs and unhealthy lifestyles and maybe that's why it took them so long to recover and maybe everyone taking drug be was well rested and super healthy to begin with and maybe that's why they recovered so quickly but it is also possible that we mislabeled drug a and drug B and did the wrong experiment so we repeat the experiment and again the results are totally backwards from the preliminary experiment and totally backwards from the hypothesis that we made so again just to make sure

experiment and totally backwards from the hypothesis that we made so again just to make sure we didn't miss label things we redo the experiment and again these results are the opposite of the original hypothesis so we just keep repeating the experiment each time double-checking every little detail and every time we do the experiment we get the opposite result of the original hypothesis so after doing all of these repeated experiments where we double-checked every little step we can confidently

all of these repeated experiments where we double-checked every little step we can confidently reject this hypothesis that we came up with after doing the preliminary experiment BAM now let's imagine we had two more drugs C and D just like before we gave drug C to three people and measured how long it took each person to recover from the virus then we gave drug D to three different people and measured how long it took them to recover from the virus and based on this data we can create a

and measured how long it took them to recover from the virus and based on this data we can create a hypothesis about drug C and drug D people taking drugs C need on average 13 fewer hours to recover than people taking drug D now just like before we decide to test this hypothesis by repeating the experiment only this time instead of getting something that's the exact opposite of what we expected we get something that is only slightly different in this case the difference is in the same direction

get something that is only slightly different in this case the difference is in the same direction but it is only 12 hours then we repeat the experiment again and again we get something slightly different from the preliminary experiment and hypothesis the difference is in the same direction but this time it is 13.5 hours the good news is that we probably didn't mislabel the drug like we did last time in the differences between the three experiments might be due to random things we cannot

last time in the differences between the three experiments might be due to random things we cannot control like maybe these people exercised a lot and had relatively healthy diets compared to these people who took longer to recover but regardless the hypothesis says that people taking drug C needed 13 fewer hours to recover but when we repeated the experiment the first replicate said the difference between averages was 12 which is different from the hypothesis and the second replicate said the

between averages was 12 which is different from the hypothesis and the second replicate said the difference was 13.5 which is also different from the hypothesis and let's be honest the only reason the hypothesis says 13 fewer hours is because that was the result from the first experiment however we could have just as easily put 12 fewer hours in the hypothesis because that's what we got the second time or we could have put 13.5 fewer hours in the hypothesis because that's what we got the third

time or we could have put 13.5 fewer hours in the hypothesis because that's what we got the third time so if we just pick one experiment like the first one and use that to define the hypothesis then we have two experiments that are not different enough to give us confidence to reject the hypothesis but because there is just as much data suggesting that the difference is 12 hours and there is just as much data suggesting that the difference is 13.5 hours these experiments don't make a super

just as much data suggesting that the difference is 13.5 hours these experiments don't make a super confident that the hypothesis of 13 fewer hours is correct again maybe drug a reduces recovery by 13 fewer hours but maybe it reduces recovery by 12 hours or 13.5 because the results from the repeated experiments are not different enough to cause us to reject the hypothesis and because they don't convince us that the hypothesis is correct either the best we can do is fail to reject the hypothesis

us that the hypothesis is correct either the best we can do is fail to reject the hypothesis small BAM to summarize what we've covered so far we can create a hypothesis and if data gives us strong evidence that the hypothesis is wrong then we can reject the hypothesis but when we have data that is similar to the hypothesis but not exactly the same then the best we can do is fail to reject the hypothesis because it's unclear if the hypothesis should be based on this result or this other slightly

because it's unclear if the hypothesis should be based on this result or this other slightly different result or this result or any other possible outcome double bam now let's take a closer look at the hypothesis itself you may remember that the only reason the hypothesis is 13 fewer hours is that it was the first result but we could have just as easily gotten a 12 hour difference or a 13.5 hour difference and ended up with a different hypothesis and if 12 and 13.5 are reasonable hypotheses

difference and ended up with a different hypothesis and if 12 and 13.5 are reasonable hypotheses then so is 12.25 or 13.1 in other words there are a lot of reasonable hypotheses how do we know which one to test since the goal is to see if drug C is different from drug D we simply test to see if there is no difference between the drugs oh no it's the dreaded terminology alert the hypothesis that there is no difference between things is called the null hypothesis so let's take a look at two

there is no difference between things is called the null hypothesis so let's take a look at two examples of the null hypothesis in action now imagine we are testing two new drugs E and F and this time we only get a 0.5 hour difference this person recovered the fastest but it is easy to imagine that if they had exercised a little less or had a slightly worse diet then they might have taken a little longer to recover likewise if this person was just a little healthier to begin with then they

longer to recover likewise if this person was just a little healthier to begin with then they might have recovered a little more quickly these small random differences give us a slightly different result now instead of drug f being slightly better by 0.5 hours drug ii is slightly better by 0.25 hours because these small random differences give us slightly different results we can use the null hypothesis so we don't have to worry about whether or not the difference is exactly 0.25 or 0.5 hours

so we don't have to worry about whether or not the difference is exactly 0.25 or 0.5 hours instead we simply see if the data convinces us to reject the hypothesis that there is no difference between drug II and drug f in this case the original result was zero point five hours in favor of drug f but small random things could have easily changed the result to be a 0.25 hour difference in favor of drug II and thus the data does not overwhelmingly convince us to reject the null hypothesis so we

drug II and thus the data does not overwhelmingly convince us to reject the null hypothesis so we fail to reject the null hypothesis that there is no difference between the drugs in contrast if we tested the drugs on a lot of people and little random things would not change the results very much then we could confidently reject the null hypothesis that there is no difference between drug II and drug f BAM note without the null hypothesis we need preliminary data in order to make a statement

drug f BAM note without the null hypothesis we need preliminary data in order to make a statement that we can test and follow-up experiments this is because we don't know if we should test if the difference is 13 hours or 13,000 hours until we get some data in contrast the null hypothesis does not require preliminary data because the only value that represents no difference is zero triple bam in summary rather than get stressed out over a large number of possible hypotheses that we could test

summary rather than get stressed out over a large number of possible hypotheses that we could test to see if drug C is different from drug D we use the null hypothesis to determine if there is a difference if we do an experiment with a bunch of people and a lot more people taking drug C had shorter recovery times than people taking drug D so many that it would be hard to imagine that the results were due to random things like everyone taking drug C had better diets or got more exercise than the

due to random things like everyone taking drug C had better diets or got more exercise than the people taking drug D then we could reject the null hypothesis and then we know that there is a difference between drug C and drug D alternatively if little random things could easily shift the result from one drug to the other and then back again then we would fail to reject the null hypothesis BAM but wait what about the alternative hypothesis because the alternative hypothesis is super important it

wait what about the alternative hypothesis because the alternative hypothesis is super important it has its own quest so check it out and if you don't already know about p-values they would make a wonderful follow-up lastly if you want to review statistics and machine learning offline check out the stat quest study guides at stat questo RG there's something for everyone hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please

to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of the stack quest study guides or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

if it's raining outside stay inside and watch stat quest if it's sunny outside go outside and watched a quest on a mobile device stat quests hello I'm Josh stormer and welcome to stat quest today we're going to talk about alternative hypotheses so that you understand the main ideas note this stat quest follows up on the stat quest on hypothesis testing and the null hypothesis if you haven't already seen that one check out the quest the link is in the description below either way let's do a super

seen that one check out the quest the link is in the description below either way let's do a super quick review in the stat quest on hypothesis testing we learn that rather than get stressed out over a large number of possible hypotheses that we could test to see if two drugs are different we simply use the null hypothesis to determine if there is a difference we learn that if we do an experiment with a bunch of people and a lot more people taking drugs see had shorter recovery times than

with a bunch of people and a lot more people taking drugs see had shorter recovery times than people taking drug D so many that it would be hard to imagine that the results were due to random things like everyone taking drug C had better diets or got more exercise than the people taking drug D then we can reject the null hypothesis and then we would know that there is a difference between drug C and drug D alternatively we learn that of little random things could easily shift the result from

C and drug D alternatively we learn that of little random things could easily shift the result from being in favor of one drug to another then we would fail to reject the null hypothesis and then we said triple BAM now that we're done with our review let's talk about the alternative hypothesis first here's some data that shows how quickly people taking drugs C and D recovered from a virus the goal of collecting all of this data is to determine if we should reject or fail to reject the null

goal of collecting all of this data is to determine if we should reject or fail to reject the null hypothesis in order to decide if we should reject or fail to reject the null hypothesis we run the data through something called a statistical test and the output of the statistical test is a decision to reject or fail to reject the null hypothesis a statistical test needs three things one it needs data - it needs a null or primary hypothesis ie it needs something to reject or fail to reject and

data - it needs a null or primary hypothesis ie it needs something to reject or fail to reject and three it needs an alternative hypothesis in this case the alternative hypothesis is simply the opposite of the null hypothesis warning things are about to get a little hand wavey the idea is to give you a general sense of why the alternative hypothesis is important and is used in statistical tests not to give you all the details of how those tests work that said if you want the details there's a

not to give you all the details of how those tests work that said if you want the details there's a stat quest playlist that goes through examples step by step the link is in the description below now one way to test the null hypothesis that there is no difference between drug C and D is to calculate a mean value for all the data from both drugs and calculate the distances between each observation and the mean and compare those two distances calculated from individual means for drug C and drug

and the mean and compare those two distances calculated from individual means for drug C and drug D the distances around the single mean represent the null hypothesis that there is no difference in the distances around the two separate means represent the alternative hypothesis if the distances around two means are much shorter than the distances around the single mean then that suggests that using two means to summarize the data makes more sense than using one so we reject the null hypothesis

two means to summarize the data makes more sense than using one so we reject the null hypothesis alternatively if the data looked like this and the distances from the single mean were not dramatically different from the distances around the separate means then that would suggest that the difference between two means only reflects little random things that we can't account for for example it could be that the subtle difference in the means is due to this one guy getting less exercise than

could be that the subtle difference in the means is due to this one guy getting less exercise than everyone else if he had exercised just a little bit more he might have recovered from the illness a little faster and then we would no longer see a difference between the two means so in this case we would fail to reject the null hypothesis just if you're familiar with machine learning lingo failing to reject the null hypothesis it's the same thing as realizing that using two averages means that

to reject the null hypothesis it's the same thing as realizing that using two averages means that you have overfit the data if you're not familiar with machine learning lingo ignore what I just said or better yet check out the machine learning stack Quest's note when we only have two groups of data the alternative hypothesis is pretty obvious because it is simply the opposite of the null hypothesis however when we have three or more groups the alternative hypothesis becomes more interesting in

however when we have three or more groups the alternative hypothesis becomes more interesting in this case the null hypothesis is that there is no difference between drug C D and E and like before we can represent the null hypothesis by measuring the distances from the data to a single mean value however now we have choices for the alternative hypothesis one alternative hypothesis could be that all three drugs are different and in this case we would measure the distances from a separate mean

all three drugs are different and in this case we would measure the distances from a separate mean for each drug or the alternative hypothesis could be that there is no difference between drug C and D but drug E is doing its own thing in this case we would calculate the distances from a single mean value for drug C and D and a separate mean for drug E so far we have two different alternative hypotheses in depending on which one we use in the statistical test we can end up making a different

in depending on which one we use in the statistical test we can end up making a different decision about the null hypothesis and that is why it is important to clearly state which alternative hypothesis we want to use however regardless of the alternative hypothesis we used in the test we only reject or fail to reject the primary or null hypothesis if we tested the null hypothesis using this alternative hypothesis and we rejected the null hypothesis we might say that we rejected it in favor of

hypothesis and we rejected the null hypothesis we might say that we rejected it in favor of this alternative hypothesis however we would still not say we accept the alternative hypothesis because just like we saw in the stat quest on hypothesis testing other alternatives might be better in other words there are too many possibilities to test to know if we have accepted the correct one and this is why we only reject or fail to reject the null or primary hypothesis BAM in summary a statistical

is why we only reject or fail to reject the null or primary hypothesis BAM in summary a statistical test needs three things one it needs data - it needs a null or primary hypothesis and three it needs an alternative hypothesis when we only have two groups of data the alternative hypothesis is super obvious because it is just the opposite of the null hypothesis but when we have three or more groups we have options for the alternative hypothesis and depending on which one we use in the

more groups we have options for the alternative hypothesis and depending on which one we use in the statistical test we can end up making a different decision about the null double bam note if you're not already familiar with p-values these stat quests would be an awesome follow-up to this one and if you want to learn more about statistical testing check out the playlist on linear models it sounds fancy but if you've made it this far it will be a snap now it's time for some shameless

it sounds fancy but if you've made it this far it will be a snap now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stack West study guides at stat quest RG there's something for everyone hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel

if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of the stack quest study guides or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

[Music] gonna talk about p values yeah statquest hello i'm josh starmer and welcome to statquest today we're going to talk about what p-values are and how to interpret them imagine i have two drugs drug a and drug b and i want to know if drug a is different from drug b so i give one person drug a and i give one other person drug b the one person using drug a is cured hooray the one person using drug b is not cured bummer can we conclude that drug a is better than drug b nope drug b may have

drug b is not cured bummer can we conclude that drug a is better than drug b nope drug b may have failed for a lot of different reasons maybe this guy is taking a medication that has a bad interaction with drug b or maybe this guy has a rare allergy to drug b or maybe this guy didn't take drug b properly and missed a dose or maybe drug a doesn't actually work and the placebo effect deserves all of the credit there are a lot of weird random things that can happen when doing a test and this means

the credit there are a lot of weird random things that can happen when doing a test and this means that we need to try each drug on more than just one person each so we redo the experiment but this time we give each drug to two different people this time both people taking drug a are cured hooray and one person taking drug b is cured and one person is not cured hooray and bummer is drug a better are both drugs the same we can't answer either of those questions because maybe something weird

are both drugs the same we can't answer either of those questions because maybe something weird happened to this guy that caused drug b to fail or maybe something weird happened to this guy like maybe the drug was mislabeled and he actually took drug a and that's why he was cured so now we test the drugs on a lot of different people and these are the results drug a cured a whole lot of people 1043 compared to the number of people it didn't cure 3. in other words 99.7 of the 1046 people using

compared to the number of people it didn't cure 3. in other words 99.7 of the 1046 people using drug a were cured in contrast drug b only cured a few people two compared to the number of people it didn't cure one thousand four hundred thirty two in other words only 0.1 percent of the 1434 people using drug b were cured if these were the results then it would be pretty obvious that drug a was better than drug b in other words it would seem unrealistic to suppose that these results were just

better than drug b in other words it would seem unrealistic to suppose that these results were just random chance and that there is no real difference between drug a and drug b it's possible that some of these people were cured by placebo and some of these people were not cured because of some rare allergy but they are just too many people cured by drug a and too few cured by drug b for us to seriously think that these results are just random and that drug a is no better or worse than drug b in

think that these results are just random and that drug a is no better or worse than drug b in contrast what if these were the results now only 37 percent of the people that took drug a were cured compared to 31 percent that took drug b so drug a cured a larger percentage of people but given that no study is perfect and there are always a few random things that happen how confident can we be that drug a is superior that's where the p-value comes in p-values are numbers between 0 and 1 that in

drug a is superior that's where the p-value comes in p-values are numbers between 0 and 1 that in this example quantify how confident we should be that drug a is different from drug b the closer a p-value is to zero the more confidence we have that drug a and drug b are different so the question is how small does a p-value have to be before we are sufficiently confident that drug a is different from drug b in other words what threshold can we use to make a good decision in practice a commonly

from drug b in other words what threshold can we use to make a good decision in practice a commonly used threshold is 0.05 it means that if there is no difference between drug a and drug b and if we did this exact same experiment a bunch of times then only 5 of those experiments would result in the wrong decision yes this is an awkward sentence so let's go through an example and work this out one step at a time imagine i gave the same drug drug a to two different groups now any differences in

step at a time imagine i gave the same drug drug a to two different groups now any differences in the results are 100 percent attributable to weird random things like a rare allergy in one person or a strong placebo effect in another in this case the p-value would be 0.9 which is way larger than 0.05 thus we would say that we fail to see a difference between the two groups if we repeated this same experiment a lot of times most of the time we would get similarly large p values however every

same experiment a lot of times most of the time we would get similarly large p values however every once in a while all of the people with rare allergies might end up in the group on the left and all of the people with the strong placebo reactions might end up in the group on the right as a result the p-value for this specific run of the experiment is 0.01 since the results are pretty different thus in this case we would say that the two groups are different even though they both took the same

in this case we would say that the two groups are different even though they both took the same drug oh no it's the dreaded terminology alert getting a small p value when there is no difference is called a false positive a 0.05 threshold for p values means that 5 of the experiments where the only differences come from weird random things we'll generate a p-value smaller than 0.05 in other words if there's no difference between drug a and drug b 5 percent of the time we do the experiment we will

there's no difference between drug a and drug b 5 percent of the time we do the experiment we will get a p-value less than 0.05 aka a false positive note if it is extremely important that we are correct when we say the drugs are different then we can use a smaller threshold like 0.00001 using a threshold of 0.00001 means we would only get a false positive once every 100 000 experiments likewise if it's not that important for example if we're trying to decide if the ice cream truck will arrive

if it's not that important for example if we're trying to decide if the ice cream truck will arrive on time then we can use a larger threshold like 0.2 using a threshold of 0.2 means we are willing to get a false positive two times out of 10. that said the most common threshold is 0.05 because trying to reduce the number of false positives below 5 often costs more than it's worth so if we calculate a p-value for this experiment and the p-value is less than 0.05 then we will decide that drug a

a p-value for this experiment and the p-value is less than 0.05 then we will decide that drug a is different from drug b that said the p-value is actually 0.24 so we are not confident that drug a is different from drug b bam okay before we're done let me say two more things about p-values unfortunately the first thing i want to say is just more terminology in fancy statistical lingo the idea of trying to determine if these drugs are the same or not is called hypothesis testing the null

of trying to determine if these drugs are the same or not is called hypothesis testing the null hypothesis is that the drugs are the same and the p-value helps us decide if we should reject the null hypothesis or not small bam okay now that we have that fancy terminology out of the way the second thing i want to say is way more interesting while a small p-value helps us decide if drug a is different from drug b it does not tell us how different they are in other words you can have a small

from drug b it does not tell us how different they are in other words you can have a small p-value regardless of the size of difference between drug a and drug b the difference can be tiny or huge for example this experiment gives us a relatively large p-value 0.24 even though there is a six-point difference between drug a and drug b in contrast this experiment which involves a lot more people gives us a smaller p-value 0.04 even though given the new data there is a one point difference between

us a smaller p-value 0.04 even though given the new data there is a one point difference between drug a and drug b in summary a small p-value does not imply that the effect size or difference between drug a and drug b is large double bam hooray we've made it to the end of another exciting stat quest if you liked this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my

calculating p-values is kind of fun and not just when you're done stat quest hello I'm Josh Starman welcome to stat quest today we're gonna talk about how to calculate p-values note this stat quest assumes that you are already familiar with what p-values are and how to interpret them if not check out the quest also note before we get started I want to mention that there are two types of P values one sided and two sided two-sided p-values are the most common and this quest focuses on calculating

sided and two sided two-sided p-values are the most common and this quest focuses on calculating them in contrast one-sided p-values are rarely used and to be honest potentially dangerous I won't mention them again until the very end when I give an example of why they should be avoided with that said let's imagine I had a coin and I flipped it once and got heads then I flipped it again and got heads a second time now at this point I might be tempted to think wow my coin is super special because

a second time now at this point I might be tempted to think wow my coin is super special because it landed on heads twice in a row this is a hypothesis however in statistics lingo the hypothesis is even though I got two heads in a row my coin is no different from a normal coin note although we want to know if our coin is special statistics lingo version says the opposite that our coin is the same as a normal coin statisticians call this the null hypothesis and a small p-value will tell us to

as a normal coin statisticians call this the null hypothesis and a small p-value will tell us to reject it and if we reject this null hypothesis we will know that our coin is special so let's test this hypothesis by calculating a p-value p-values are determined by adding up probabilities so let's start by figuring out the probability of getting two heads in a row when we flip a normal everyday coin there's a 50% chance we'll get heads and a 50% chance we'll get tails now if we got heads on the

there's a 50% chance we'll get heads and a 50% chance we'll get tails now if we got heads on the first flip and flip the coin a second time then just like before there's a 50% chance we'll get heads and a 50% chance we'll get tails likewise if we got tails on the first flip and flip the coin again then just like before there's a 50% chance we'll get heads and a 50% chance we'll get tails ultimately these are the four possible outcomes after flipping a coin two times because each outcome is

these are the four possible outcomes after flipping a coin two times because each outcome is equally probable we can calculate the probability of getting two heads with the following formula the number of times we got two heads divided by the total number of outcomes in this case we only got two heads one time so we put a 1 in the numerator and since there were four possible outcomes we put a four in the denominator thus the probability of getting two heads is 0.25 likewise the probability of

in the denominator thus the probability of getting two heads is 0.25 likewise the probability of getting two tails is 0.25 finally the probability of getting one heads and one tails regardless of the order is 0.5 now you may be wondering why we don't care about the order of the heads and tails and treat these outcomes as the same in this case the order doesn't matter because getting a heads on the first flip doesn't change the probabilities of getting heads or tails on the second flip likewise

first flip doesn't change the probabilities of getting heads or tails on the second flip likewise getting tails on the first flip doesn't change the probabilities of getting heads or tails on the second flip because order does not affect the probabilities of getting heads and tails we treat these outcomes as the same now let's move the outcomes over to the left unless the probability of each outcome and calculate the p-value for getting two heads a p-value is composed of three parts the first

and calculate the p-value for getting two heads a p-value is composed of three parts the first part is the probability random chance would result in the observation in this case the first part is just the probability that a normal coin would give us two heads which is 0.25 the second part is the probability of observing something else that is equally rare in this case getting two tails is as rare as two heads so we add 0.25 the third part is the probability of observing something rare or more

as two heads so we add 0.25 the third part is the probability of observing something rare or more extreme in this case the third part is zero because no other outcomes are rarer than two heads or two tails now we just add everything together and the p-value for getting two heads equals 0.5 now remember the reason we calculated the p-value was to test this hypothesis even though I got two heads in a row my coin is no different from a normal coin typically we only reject a hypothesis if the

in a row my coin is no different from a normal coin typically we only reject a hypothesis if the p-value is less than 0.05 and since 0.5 is greater than 0.05 we fail to reject the hypothesis in other words the data getting two heads in a row fail to convince us that our coin is special note the probability of getting two heads 0.25 is different from the p-value for getting two heads 0.5 this is because the p-value is the sum of three parts the first part is the probability random chance would

because the p-value is the sum of three parts the first part is the probability random chance would result in the observation the second part is the probability of observing something else that is equally rare and the third part is the probability of observing something rare or more extreme now the question is why do we care about things that are equally rare or more extreme in other words why do we add parts two and three to the p value we add part to the probability of something else that is

we add parts two and three to the p value we add part to the probability of something else that is equally rare because although getting two heads might seem special it doesn't seem as special when we know that other things are just as rare for example imagine giving a loved one a flower and saying this is the rarest flower of this species none are equally as rare chances are your loved one would think that the flower was super special he might even get a kiss on the cheek now imagine saying to

think that the flower was super special he might even get a kiss on the cheek now imagine saying to your loved one this flower is equally as rare as all of these other flowers in this case your loved one might not think the flower is very special wha-wha note even though these flowers are different colors just knowing that they're equally rare would be a bummer because a lot of equally rare things would make something less special we add part two to the p-value and we add rare things to the

would make something less special we add part two to the p-value and we add rare things to the p-value for a similar reason going back to our flower example imagine telling your loved one this is the rarest flower of this species none are rarer again there's a good chance your loved one would think that the flower was super special now imagine saying there are a lot of flowers that are rarer than this one in this case your loved one might not think the flower is very special wah-wah and like

this one in this case your loved one might not think the flower is very special wah-wah and like before even though these flowers are all different colors just knowing they are rare would be a bummer thus because rarer things make something less special we add part three to the p-value okay now that we know that getting two heads in a row is not very special or statistically significant what about getting four heads and one tails would that suggest that our coin is special in other words we can

getting four heads and one tails would that suggest that our coin is special in other words we can calculate a p-value to test this hypothesis even though I got four heads and one tails my coin is no different from a normal coin again although we want to know if the coin is special the null hypothesis focuses on a normal coin but if we get a small p-value and reject the null hypothesis we will know that our coin is special so let's calculate the p-value for getting four heads and one tails

know that our coin is special so let's calculate the p-value for getting four heads and one tails first we know that it is possible to flip a coin five times and get heads each time so let's keep track of that with five blue H's we can also flip a coin five times and get four heads and one tails note there are five different ways to get four heads and one tails but we treat them all the same because the order of heads and tails doesn't matter likewise there are ten ways that we can flip a coin

the order of heads and tails doesn't matter likewise there are ten ways that we can flip a coin and get three heads and two tails and ten ways to get two heads and three tails and five ways to get one heads and four tails and lastly one way to flip a coin five times and get five tails all in all when we flip a coin five times there are 32 possible outcomes the p-value for getting four heads and one tails is the probability we randomly get four heads and one tails this is 5/32 since five of the

tails is the probability we randomly get four heads and one tails this is 5/32 since five of the 32 outcomes had four heads and one tails plus the probability we randomly get something else that is equally rare this is 5 divided by 32 since 5 of the 32 outcomes had one head and four tails plus the probability we randomly get something rarer or more extreme this is 2 divided by 32 because both 5 heads and 5 tails only occurred once each they are rarer than four heads and one tails thus the

5 heads and 5 tails only occurred once each they are rarer than four heads and one tails thus the p-value for getting four heads and one tails is 0.375 again we typically only reject the null hypothesis if the p-value is less than 0.05 so in this case we will fail to reject the null hypothesis in other words the data getting four heads and one tails did not convince us that our coin was special with coin tosses it's pretty easy to calculate probabilities and p-values because it's pretty easy to

coin tosses it's pretty easy to calculate probabilities and p-values because it's pretty easy to list all of the possible outcomes but what if we wanted to calculate probabilities and p-values for how tall or short people are in theory we could try to list every single possible value for height however in practice when we calculate probabilities and p-values for something continuous like height we usually use something called a statistical distribution here we have a distribution of height

we usually use something called a statistical distribution here we have a distribution of height measurements from Brazilian women between 15 and 49 years old taken in 1996 the red area under the curve indicates the probability that a person's height will be within a range of possible values for example 95 percent of the area under the curve is between 142 and 169 and that means that 95 percent of the Brazilian women were between 142 and 169 centimeters tall in other words there is a 95 percent

the Brazilian women were between 142 and 169 centimeters tall in other words there is a 95 percent probability that each time we measure a Brazilian woman their height will be between 142 and 169 centimeters 2.5 percent of the total area under the curve is greater than 169 and that means there is a 2.5 percent probability that each time we measure a Brazilian woman their height will be greater than 169 centimeters likewise 2.5 percent of the total area under the curve is less than 142 thus

than 169 centimeters likewise 2.5 percent of the total area under the curve is less than 142 thus there is a 2.5 percent probability that each time we measure a Brazilian woman their height will be less than 142 centimeters to calculate p-values with a distribution you add up the percentages of area under the curve for example imagine we measured someone who is 142 centimeters tall if we measured someone who is 142 centimeters tall we might wonder if it came from this distribution of heights

someone who is 142 centimeters tall we might wonder if it came from this distribution of heights which has an average value of 150 5.7 or if it came from another distribution of heights for example this green distribution has an average value of 142 so the question is is this measurement 142 centimeters so far away from the mean of the blue distribution that we can reject the idea that it came from it if so then that would suggest that another distribution like this green one might do a better

it if so then that would suggest that another distribution like this green one might do a better job explaining the data the p-value for the hypothesis this measurement comes from the blue distribution starts with the 2.5 percent of the area for people less than or equal to 142 centimeters note when we are working with a distribution we are interested in adding more extreme values to the p value rather than rarer values in this case all heights further than 142 centimeters from the mean are

rather than rarer values in this case all heights further than 142 centimeters from the mean are considered more extreme than what we observed we also add the 2.5% of the area for people 169 centimeters or taller note just like on the other side of the distribution these values are considered equal to or more extreme because there is far from the mean or further now we just do the math and get 0.05 so the p-value for the hypothesis someone 142 centimeters tall could come from the blue

get 0.05 so the p-value for the hypothesis someone 142 centimeters tall could come from the blue distribution is 0.05 and since the cutoff for significance is usually 0.05 we would say hmm maybe it could come from this distribution maybe not it's hard to tell since the p-value is right on the borderline so maybe they come from this distribution or maybe they come from this distribution the data are inconclusive wah wah note if we had measured someone who is 141 centimeters tall so just a little

inconclusive wah wah note if we had measured someone who is 141 centimeters tall so just a little bit shorter than 142 centimeters then the p value would be 0.01 6 plus 0.01 6 which equals zero point zero three and since 0.03 is less than 0.05 the standard threshold we can reject the hypothesis that given the blue distribution it is normal to measure someone 141 centimeters tall thus we will conclude that it's pretty special to measure someone that short and that suggests that a different

conclude that it's pretty special to measure someone that short and that suggests that a different distribution of Heights makes more sense now what if we measured someone who is between 155 point four in 156 centimeters tall note the peak of the curve is right at the average height so we were asking is a measurement between 155 point four and 156 so far away from the mean of the blue distribution that we can reject the idea that it came from it if the p-value is small then that suggests that

that we can reject the idea that it came from it if the p-value is small then that suggests that some other distribution would do a better job explaining the data note the probability of someone being between 155 point four and 156 centimeters is only 0.04 the red area is pretty small barely a lime so 0.04 is the first part of calculating the p-value since given this distribution of heights that is the probability that we would randomly measure someone in this range of values now we need to

is the probability that we would randomly measure someone in this range of values now we need to figure out the more extreme parts on the left side all of the heights less than 150 5.4 are further from the mean thus they are more extreme and because 48% of the area under the curve is for Heights less than 150 5.4 we add 0.48 to the p-value on the right side all of the heights greater than 156 are further from the mean thus they are all more extreme and because 48% of the area under the curve is

further from the mean thus they are all more extreme and because 48% of the area under the curve is for Heights greater than 156 we add 0.48 to the p-value ultimately we end up adding all of the area under the curve so the p-value equals one so this means that given this distribution of heights we would not find it unusual to measure someone whose height was close to the average even though the probability is small in other words the data does not suggest that another distribution would do a

probability is small in other words the data does not suggest that another distribution would do a better job explaining the data BAM so far we've only talked about two-sided p-values now I'll give you an example of a one-sided p-value and tell you why it has the potential to be dangerous imagine we measured how long it took a bunch of people to recover from an illness now imagine we created a new drug super drug and wanted to see if it helped people recover in fewer days if we gave super drug

drug super drug and wanted to see if it helped people recover in fewer days if we gave super drug to a bunch of people and the average recovery was 4.5 days then a two-sided p-value like the ones we've been computing all along would be the sum of this area under the curve 0.01 6 plus this area under the curve 0.01 6 and the total is 0.03 and since 0.03 is less than 0.05 the two-sided p-value tells us that given this distribution of recovery times super drug did something unusual and that

tells us that given this distribution of recovery times super drug did something unusual and that suggests that some other distribution does a better job explaining the data for a one-sided p-value the first thing we do is decide which direction we want to see change in in this case we'd like super drug to shorten the time it takes to recover from the illness so that means we want to see if recovery times are shorter because we want to see change in this direction the only more extreme values

times are shorter because we want to see change in this direction the only more extreme values are less than 4.5 days all of the values greater than 4.5 days are considered less extreme so when we calculate a one-sided p-value we only use the area that is in the direction we want to see change 0.016 again since 0.01 6 is less than 0.05 the one-sided p-value would tell us that given this distribution super drug did something unusual and that some other distribution makes more sense now imagine

super drug did something unusual and that some other distribution makes more sense now imagine that super drug wasn't so super and on average it took fifteen point five days to recover just like before the two-sided p-value would be the sum of this area under the curve zero point zero one six plus this area under the curve zero point zero one six and the total is zero point zero three in other words regardless of whether super drug is super and makes things better or if it is not so super and

regardless of whether super drug is super and makes things better or if it is not so super and makes things worse a two-sided p-value will detect something unusual happened for a one-sided p-value the first thing we do is decide which direction we want to see change in and just like before that means we want to see if recovery times are shorter so the one-sided p-value is this huge area 0.98 because it is more extreme in the direction we want to see change and since 0.98 is greater than 0.05

it is more extreme in the direction we want to see change and since 0.98 is greater than 0.05 the one-sided p-value would not detect that Superdrug was doing anything unusual in other words the one-sided p-value is only looking to see if a distribution to the left of the original mean makes more sense and since the observation is on the right side of the mean we fail to reject the hypothesis that the original distribution makes sense and since failing to detect that Superdrug is making things

the original distribution makes sense and since failing to detect that Superdrug is making things worse would be bad one-sided p-values are tricky and should be avoided or only used by experts who really know what they're doing BAM in summary a p-value is composed of three parts the first part is the probability random chance would result in the observation the second part is the probability of observing something else that is equally rare and the third part is the probability of observing

of observing something else that is equally rare and the third part is the probability of observing something rarer or more extreme BAM hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below

P hackin don't do it if you do it it's a shame skin quest yeah hello I'm Josh stormer and welcome to stat quest today we're gonna talk about P hacking what it is and how to avoid it note this stack quest assumes that you are already familiar with p-values if not check out the quests imagine there was a virus and we wanted to develop a drug to reduce the time it took to recover from it so he created a bunch of candidate drugs and we tested each one to find out if any of them worked so we measured

a bunch of candidate drugs and we tested each one to find out if any of them worked so we measured how long it took for three people to recover from the virus without any drugs and then we gave three people drug a and measured how long it took them to recover just by looking at the graph it appears that drug a did not shorten recovery very much if at all so we measure how long it takes three more people to recover without any medicine and then we give three people drug B and measure how long it

people to recover without any medicine and then we give three people drug B and measure how long it takes them to recover again just by looking at the graph it doesn't look like drug B helped people recover any faster than people without any medicine so we just keep testing drugs until we get one that really looks like it does a good job and at long last it looks like drugs II does a great job reducing the amount of time it takes to recover from the virus so we calculate the means of the two

reducing the amount of time it takes to recover from the virus so we calculate the means of the two groups and do a statistical test to compare the means and we get a p-value equal to 0.02 and since 0.02 is less than 0.05 we reject the null hypothesis which is that there is no difference between not taking a drug and taking drugs II BAM no no BAM we just pee hacked pee hacking refers to the misuse and abuse of analysis techniques and results in being fooled by false positives however instead of

and abuse of analysis techniques and results in being fooled by false positives however instead of feeling great shame let's learn about pee hacking so we don't do it again imagine we measured recovery times for a whole lot of people who did not take any drugs to fight the virus and then we fit a normal distribution to all of the recovery times the red area under the curve indicates the percentage of people that recovered from the illness within a range of possible values for example 2.5

of people that recovered from the illness within a range of possible values for example 2.5 percent of the area under the curve is for durations less than 5 days indicating a 2.5 percent of the people recovered in less than 5 days in contrast 95 percent of the area under the curve is between 5 and 15 days indicating that 95 percent of the people were covered between 5 to 15 days now if we only asked three people represented by light blue circles how long it took them to recover from the illness

three people represented by light blue circles how long it took them to recover from the illness there's a good chance all three would say something between five and fifteen days and if we asked a different set of three people represented by dark blue circles there's a good chance all three would also say something between five and 15 days just like before we can plot these two groups of people on a graph and we can calculate the mean values for the two groups and compare those two means and

on a graph and we can calculate the mean values for the two groups and compare those two means and get a p-value equal to zero point eight six and because zero point eight six is greater than 0.05 we would fail to see a significant difference between the two groups of observations in other words the p-value did not convince us that the observations came from two different distributions and that makes sense because both groups of people came from the exact same distribution now imagine we asked

sense because both groups of people came from the exact same distribution now imagine we asked another group of three people how long it took them to recover and we plotted their recovery times and mean value on a graph then we asked another group of three people how long it took them to recover and we plotted their recovery times and mean value on the graph again we do a test to compare the two means and we get a p-value equal to zero point six three and since 0.63 is greater than 0.05 we

two means and we get a p-value equal to zero point six three and since 0.63 is greater than 0.05 we would fail to see a significant difference between the two groups of observations and again this is good because both sets of observations came from the exact same distribution now imagine we just keep taking two groups of three from the same distribution and testing to see if they are different note these two groups almost look like they could be different but the p value equals 0.06 which is

note these two groups almost look like they could be different but the p value equals 0.06 which is greater than the standard threshold for significance 0.05 so we just keep going and sooner or later we will get something like this when we compare the two means the p-value equals zero point zero two and that tells us that there is a statistically significant difference between the two groups suggesting that the data came from two different distributions which is incorrect since we know that

that the data came from two different distributions which is incorrect since we know that both samples came from the same distribution the small p-value is a false positive note you may remember from the stat quest on interpreting p-values that setting the threshold for significance to 0.05 means that approximately 5% of the statistical tests we do on data gathered from the same distribution will result in false positives that means if we did 100 tests we would expect about 5 false positives or

result in false positives that means if we did 100 tests we would expect about 5 false positives or 5 percent and if we did 10,000 tests we would expect about 500 false positives in other words the more tests we do the more false positives we have to deal with oh no it's the dreaded terminology alert doing a lot of tests and ending up with false positives is called the multiple testing problem the good news is that there are many ways to compensate for the multiple testing problem and reduce

the good news is that there are many ways to compensate for the multiple testing problem and reduce the number of false positives one popular method is called the false discovery rate shameless self-promotion I have a whole stack quest on the false discovery rate the link is in the description below the main idea is that you input the p-values for every single comparison d ppppp boop boop and then the false discovery rate does some surprisingly simple mathematics and outcome adjusted p-values

the false discovery rate does some surprisingly simple mathematics and outcome adjusted p-values that are usually larger than the original p-values and ultimately some of the tests that were false positives before end up with adjusted p-values greater than 0.05 like I said I have a whole stack quest on this method if you want to know more details the important thing to know now however is that in order for false discovery rates or any other method that compensates for multiple testing to work

order for false discovery rates or any other method that compensates for multiple testing to work properly you have to include all of the p-values for all of the tests not just the one that looks like it will give you a small p-value in other words don't cherry-pick your data and only do tests that look good BAM now let's talk about a slightly less obvious form of pee hacking remember these two groups the p-value was 0.06 now we know that both groups came from the same distribution but

two groups the p-value was 0.06 now we know that both groups came from the same distribution but typically when we are doing experiments we don't know if they both came from the same distribution or different ones and let's be honest we usually hope that the observations come from two different distributions in this example we are looking for a new drug to help people so we want to see an improvement so when we get data like this where the p-value is close to 0.05 but not less than it is very

so when we get data like this where the p-value is close to 0.05 but not less than it is very tempting to think hmm I wonder if the p-value will get smaller if I add more data so we add one more measurement to each group and now when we calculate the p-value we get zero point zero two which is less than 0.05 so we can report a statistically significant difference hooray we got what we wanted right no we P hacked again wah wah when a p-value is close to 0.05 like what we had with the original

no we P hacked again wah wah when a p-value is close to 0.05 like what we had with the original data there's a surprisingly high probability that just adding one new measurement to both groups will result in a false positive in other words even though using a threshold of 0.05 should only result in 5% of the bogus test giving us false positives the theory assumes that we only calculate a single p-value to make a decision in this case we calculated two p-values to make our decision the one at

p-value to make a decision in this case we calculated two p-values to make our decision the one at the start which was 0.06 then because the first p-value is close to 0.05 we added more data and calculated a second p-value in this case we know all of the measurements came from the exact same distribution so we know this is a false positive so how do we keep from making this mistake in order to avoid making this mistake we need to determine the proper sample size before doing the experiment and

making this mistake we need to determine the proper sample size before doing the experiment and that means we need to do a power analysis a power analysis is performed before doing an experiment and tells us how many replicates we need in order to have a relatively high probability of correctly rejecting the null hypothesis cool where can I learn more about doing a power analysis in the next stack quests we'll talk about power and power analyses to determine the appropriate sample size BAM in

quests we'll talk about power and power analyses to determine the appropriate sample size BAM in summary if you have a bunch of things you want to test out like a bunch of different drugs that might help people recover from a virus don't just collect all the data but only calculate a p-value for the one time things look different instead calculate a p-value for each test and adjust all of the p-values with something like the false discovery rate this will help reduce the probability of

the p-values with something like the false discovery rate this will help reduce the probability of reporting a false positive and when you do a test and get a p-value close to 0.05 but not quite less than 0.05 don't just add more observations to the data you already have instead use the data you have for a power analysis to determine the correct sample size this will help prevent you from being fooled by a false positive double bomb hooray we've made it to the end of another exciting stat quest

by a false positive double bomb hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

holy freaking smokes what it's time for stat Quest hello and welcome to stat Quest stat Quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about false Discovery rates or FDR if you've ever seen or done anything with high throughput sequencing chances are you've heard false Discovery rates FDR before you may have even used them but where do false Discovery rates come from and how do they work

you may have even used them but where do false Discovery rates come from and how do they work before we get down to the nitty-gritty let me blurt out the main idea of this whole stat Quest false Discovery rates are a tool to weed out bad data that looks good now let's get down to the nitty-gritty let's start with an example of measuring gene expression using RNA sequencing here we're going to plot the measurements or the read counts for a gene called Gene X which is an imaginary gene on a graph

the measurements or the read counts for a gene called Gene X which is an imaginary gene on a graph with the y axis being Gene counts and the xaxis being the samples for this example imagine that we are looking at normal wild type mice later on we'll be comparing them to mice that have been treated with a drug isn't it funny that normal mice are called wild type if someone said I was a wild type I don't think they would also think I was normal anyway here's our measurement for the first mouse

I don't think they would also think I was normal anyway here's our measurement for the first mouse that we do this RNA sequencing on and here's the measurement for the second mouse that we do the RNA sequencing on RNA sequencing isn't perfect and different samples are always a little different so each time we measure expression we'll get slightly different values here's the measurement for the third Mouse and here are the measurements for a bunch of mice if we measured all normal mice we'd be

Mouse and here are the measurements for a bunch of mice if we measured all normal mice we'd be able to calculate the average for all normal mice most of the values are going to be close to the mean rarely we'll get a value that is much larger than the mean and rarely we'll get a value that is much smaller than the mean we can summarize the distribution of the measurements using this bell-shaped curve most of the measurements which are close to the mean will come from the middle of this curve

curve most of the measurements which are close to the mean will come from the middle of this curve the rare measurement that is significantly larger than the average would come from the right side of the bell-shaped curve and the rare measurement that significantly less than the average would come from the left side of the bell-shaped curve now imagine that we do RNA seek on three mice collectively we'll call these three measurements sample number one because these measurements are close to the

we'll call these three measurements sample number one because these measurements are close to the meain they come from the middle of the distribution now imagine we compare sample number one to another three measurements taken from normal wild type mice we'll call these new measurements sample number two again these three measurements come from the middle of the distribution if we did a statistical test to compare sample number one to sample number two the P value would be large greater than

test to compare sample number one to sample number two the P value would be large greater than 0.005 because the two samples overlap very rarely we'll get two samples that do not overlap when this happens the P value will be less than 05 this is called a false positive because the small P value suggests that the samples are from two types of mice or two separate distributions and this is false normally false positives are rare unless you're a packer but that's another stat Quest already on

normally false positives are rare unless you're a packer but that's another stat Quest already on YouTube anyways normally false positives are rare 95% of the time the two samples will overlap this will result in a P value greater than 0.05 5% of the time they don't this will result in a false positive with a P value less than 05 but human and mouse cells have at least 10,000 transcribed genes if we took two samples from the same type of mice and compared all 10,000 genes well 5% of 10,000

if we took two samples from the same type of mice and compared all 10,000 genes well 5% of 10,000 equals 5 00 false positives that means there will be 500 genes that appear to be interesting even when they are not 500 false positives is a lot can we do something about them the false Discovery rate can control the number of false positives technically the false Discovery rate is not a method to limit false positives but the term is used interchangeably with the method me in particular it is used

false positives but the term is used interchangeably with the method me in particular it is used for the benjamini hogberg method now there's a high probability that I just mispronounced benjamini or hurg and if I did I apologize before we talk about the details of the benjamini hosb method let's review the concepts that it's based on we'll start by generating 10,000 P values from samples taken from the same distribution that is to say we'll start with test number one and we'll use wild type

from the same distribution that is to say we'll start with test number one and we'll use wild type mice and we'll take two samples from them we'll then compare the two samples with a statistical test and calculate the P value in this case the P value is large it's 0.83 this is exactly what we expect because both samples are taken from the same type of mice and then we repeat the procedure for test number two and calculate another P value this time at 0.98 again this is as expected to make a

test number two and calculate another P value this time at 0.98 again this is as expected to make a long story short we just repeat this procedure 10,000 times no big deal here I've drawn a histogram of the 10,000 P values generated by testing samples taken from the same Distribution on the X AIS we have possible value for p values on the Y AIS we have the number of P values in each bin 510 P values or 5.1% are less than 005 close to 5% of the P values are between 0.5 and 0.1 actually each bin

or 5.1% are less than 005 close to 5% of the P values are between 0.5 and 0.1 actually each bin contains about 5% of the P values about 500 P values per B since the p values are uniformly distributed there's an equal probability that a test P value falls into any one of these bins now let's look at how P values are distributed when they come from two different distributions and by two different distributions I mean two different types of mice or we have wild type versus knockout or control

distributions I mean two different types of mice or we have wild type versus knockout or control versus drugged we're just comparing two different situations like before we start off with test number one but now we have two different distributions the black distribution is for our control mice the red distribution is for mice that have been treated with a drug in this example the drug increases this Gene's transcription like before we take two samples since the sample are now coming from two

this Gene's transcription like before we take two samples since the sample are now coming from two separate distributions there's a higher likelihood that the two samples will be separated and not overlap when we do the statistical test in this case we get a P value that equals 0.03 and then we do the exact same thing for test number two notice that both of the P values are less than 05 so they're statistically significant since the samples were taken from two separate distributions this is

statistically significant since the samples were taken from two separate distributions this is what we'd expect like before we repeat this process 10,000 times here I've drawn a histogram of the 10,000 P values generated by testing samples taken from two different distributions most of the P values are less than 05 this is what we'd expect the P values greater than 0.05 are false negatives from where the samples overlapped you can reduce the number of false negatives by increasing the sample

where the samples overlapped you can reduce the number of false negatives by increasing the sample size to summarize what we know so far when the samples come from the same distribution the P values are uniformly distributed but when the samples come from different distributions the P values are heavily skewed and closer to zero now imag imagine we're doing an experiment where we are testing all of the active genes in neuronal cells one set of neuronal cells is treated with a drug the other is

of the active genes in neuronal cells one set of neuronal cells is treated with a drug the other is not the drug might affect 1,000 genes the measurements for these genes will come from two different distributions the black sample is from the control cells and the red sample is from the cells treated with the drug since the samples come from different distributions the P values are skewed the remaining 9,000 active genes might not be affected by the drug this means the measurements for most of

9,000 active genes might not be affected by the drug this means the measurements for most of the genes will come from the same distribution the P values for these genes should be uniformly distributed the histogram of P values we obtain from all 10,000 genes is the sum of the two separate histograms the uniformly distributed P values come from the genes unaffected by the drug the P values on the left side are a mixture from genes affected by the drug and genes unaffected by the drug by I we can

side are a mixture from genes affected by the drug and genes unaffected by the drug by I we can see where the P values are uniformly distributed and determine how many tests are in each bin here I've drawn a line indicating that about 450 P values are in each bin in the uniformly distributed part of the histogram we can extend this line and use it as a cut off to identify the true positives since we usually use a cut off of 05 we're going to focus on these P values roughly 450 P values less

we usually use a cut off of 05 we're going to focus on these P values roughly 450 P values less than 05 are above the dotted line and roughly 450 P values less than 05 are below the dotted line one way to isolate the true positives genes affected by the drug from the false positives would be to only consider the smallest 450 P values this procedure Works fairly well because the p values within the bins are skewed for the genes affected by the drug note this histogram is for p values between 0

bins are skewed for the genes affected by the drug note this histogram is for p values between 0 and .5 and spread evenly for the genes not affected by the drug bam if you can understand these Concepts then you understand more about false Discovery rates and the benjamini hochberg method than most people who use it all benjamini and hochberg did is convert this procedure that we just did by I into a mathematical formula so now let's talk about the details of the benjamini hochberg method like I

a mathematical formula so now let's talk about the details of the benjamini hochberg method like I just said it's based on the eyeball method we just saw the benjamini hurg method adjusts P values in a way that limits the number of false positives that are reported as significant adjust P values means that it makes them larger for example before the false Discovery rate correction your P value might be 0.04 I.E significant after the FDR correction your P value might be 0.06 no longer

P value might be 0.04 I.E significant after the FDR correction your P value might be 0.06 no longer significant if your cut off for significance is FDR values less than 0.05 then less than 5% of the significant results will be false positives in other words these are the genes with P values less than 0.05 the black box shows the genes with FDR modified P values less than 0.05 notice that not all of the true positive genes are inside the Box however only 5% of the modified P values in the Box

of the true positive genes are inside the Box however only 5% of the modified P values in the Box are false positives the remaining 95% are true positives why don't all of the true positive genes have adjusted fdrp values less than 0.05 because not all true positive genes will have super small P values here's the histogram of true positive P values less than 0.05 these genes on the right side of the histogram probably won't remain significant after adjustment surprisingly the math behind the

the histogram probably won't remain significant after adjustment surprisingly the math behind the benjamini hochberg method is simple let's take a look let's start with another simple example we'll take 10 pairs of samples taken from the same distribution I.E 10 genes that were not affected by the drug and here are the P values from those 10 tests the first thing we do is we order the P values from smallest to largest notice that one of the P values is a false positive that is to say it's less

smallest to largest notice that one of the P values is a false positive that is to say it's less than 0.05 let's see what the Benjamin hochberg method does to it the second step is to rank the P values and Let's Make spaces for the FDR adjusted P values that we're going to create the largest FDR adjusted P value and the largest P value are the same the next largest adjusted P value is the smaller of two options either the previous adjusted P value which in this case equals 0.91 or the current P

of two options either the previous adjusted P value which in this case equals 0.91 or the current P value times the total number of P values divided by the P Val rank in this case the current P value is 0.81 the total number of P values is 10 and the P value rank is nine plugging these numbers in we get 0.90 since we select the smaller option we're going to go with 0.90 for the next largest adjusted P value we just repeat step four that is to say we select the smaller of these two options

adjusted P value we just repeat step four that is to say we select the smaller of these two options plugging in the numbers gives us the choice of 0.90 or 0.89 since we use the smaller value we go with 0.89 and for the next largest adjusted P value okay you get the idea we just repeat until we've adjusted the remaining P values and here I've plugged in the remaining adjust P values that false positive P value is no longer significant hooray now let's look at a huge example the blue boxes

positive P value is no longer significant hooray now let's look at a huge example the blue boxes represent the P values from when the samples came from two separate distributions that is to say these P values are for genes that were affected by the drug I've made these P values relatively small to deflect their normal skew the P values in red boxes came from samples taken from the same distribution note we've got some false positives the eyeball method suggests we draw a line at the top of the

note we've got some false positives the eyeball method suggests we draw a line at the top of the uniformly distributed P values and extended to separate the false positives from the true positives these are the P values that the eyeball method suggests are true positives now let's see what the benjamini hurg method does here I've shown you the adjusted P values the false positives are now all greater than 05 but these true positives remain less than 05 double bam hooray we made it to the end

than 05 but these true positives remain less than 05 double bam hooray we made it to the end tune in next time for another exciting stat Quest

this clouds outside but who cares it's time for stat quest stat quest hello I'm Josh starburns welcome to stat quest today we're gonna talk about statistical power and it's gonna be clearly explained note this stat quest assumes that you are already familiar with p-values if not check out the quests this stat quest also assumes that you are already familiar with the normal distribution if not check out the quest let's start with two distributions the one on the Left represents the weights of

out the quest let's start with two distributions the one on the Left represents the weights of mice on a special diet and the one on the right represents the weights of mice eating normal Mouse food since there's only a little bit of overlap it's pretty easy to see the difference between these two diets most of the mice on the special diet weigh less than the mice on the normal diet and if we collect a small set of measurements from the special diet and another small set of measurements from

a small set of measurements from the special diet and another small set of measurements from the normal diet and plot these points on a graph and compare their means then in this case we'll get a p-value equal to zero point zero zero zero four and this small p-value less than 0.05 would cause us to correctly reject the null hypothesis that both sets of data came from the same distribution in other words if this distribution which is somewhere between the special and normal diets said all data a

words if this distribution which is somewhere between the special and normal diets said all data a tums from me then the small p-value would say in a loud and confident voice I reject your hypothesis if we repeated this experiment a bunch of times there's a high probability that each statistical test will correctly give us a small p-value in other words there is a high probability that the null hypothesis that all of the data came from the same distribution will be correctly rejected but every

that all of the data came from the same distribution will be correctly rejected but every once in a while we will get something like this where the data overlap and when this happens we will get a large p-value greater than 0.05 and that means that even though we know the data came from two different distributions we cannot correctly reject the null hypothesis that all of the data comes from the same distribution so the large p-value says in a very small and meek voice dang I can't reject the

same distribution so the large p-value says in a very small and meek voice dang I can't reject the null hypothesis that said because these distributions are so far apart and there is so little overlap the probability of correctly rejecting the null hypothesis is high power is the probability that we will correctly reject the null hypothesis alternatively you could say that power is the probability that we will correctly get a small p-value in this example because we have a high probability of

that we will correctly get a small p-value in this example because we have a high probability of correctly getting a small p-value and rejecting the null hypothesis we have a large amount of power BAM [Music] note if there was no difference between the special diet and the normal diet and they both shared the same distribution and we collected one set of measurements for mice on the special diet and one set of measurements for mice on the normal diet then the null hypothesis that both datasets

and one set of measurements for mice on the normal diet then the null hypothesis that both datasets came from the same distribution would be true in this case there is no such thing as correctly rejecting the null hypothesis so the concept of power the probability that we will correctly reject the null hypothesis doesn't apply in this situation contrast if this special diet wasn't very good at helping mice lose weight but it still made a difference then even though there is a lot of overlap we

mice lose weight but it still made a difference then even though there is a lot of overlap we have two distinct distributions and that means power the probability that we correctly reject the null hypothesis applause if we were to weigh three mice on the special diet and three mice on the normal diet and plot these points on a graph and compare their averages then in this case we will get a p-value equal to 0.34 that means we will fail to reject the null hypothesis that both groups come from

equal to 0.34 that means we will fail to reject the null hypothesis that both groups come from the same distribution this is a bummer because in this case we know the data comes from two different distributions and when we repeat this many times most of the time we will get a large p-value and fail to reject the null hypothesis however every once in a while we will get something like this where the data do not overlap and we will correctly get a small p-value when this happens even though the

the data do not overlap and we will correctly get a small p-value when this happens even though the null hypothesis says all day today comes from me the small p-value will say in a loud and confident voice I reject the null hypothesis so out of all these tests this was the only one that gave us a p-value small enough that we correctly rejected the null hypothesis and that means when there is a lot of overlap between the two distributions and we have a small sample size we have a relatively low

of overlap between the two distributions and we have a small sample size we have a relatively low power medium BAM the good news is that we can always increase power by increasing the number of measurements we collect and a power analysis will tell us how many measurements we need to collect to have a good amount of power shameless self-promotion we'll talk more about how and why we can increase power in the stat quest on power analyses BAM in summary power is the probability that we will

power in the stat quest on power analyses BAM in summary power is the probability that we will correctly reject the null hypothesis when we have two distributions that have very little overlap we will have a lot of power because there is a high probability that we will correctly reject the null hypothesis however when the two distributions overlap a lot and if we have a small sample size we will have a small amount of power however if we want more power we can increase the sample size lastly a

have a small amount of power however if we want more power we can increase the sample size lastly a power analysis will tell us how many measurements to collect to have a good amount of power double BAM hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stack quest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a

stat quest is cool [Music] statquest hello i'm josh starmer and welcome to statquest today we're going to talk about power analysis and it's going to be clearly explained note this stat quest assumes that you are already familiar with what power means if not check out the quest it would also be helpful if you understood the difference between population parameters and estimated population parameters if not check out the quest lastly because we do a power analysis to avoid p hacking you should be

if not check out the quest lastly because we do a power analysis to avoid p hacking you should be familiar with that topic as well imagine there was a virus and we had two drugs that we could use to treat it so we see how long it takes for three people using drug a to recover from the virus and we see how long it takes three people using drug b to recover just looking at the data makes us think that drug a might be better since those people tended to recover from the virus more quickly so we

that drug a might be better since those people tended to recover from the virus more quickly so we calculate the means for both drugs and do a statistical test to compare the means and get a p-value equal to 0.06 because the p-value is greater than 0.05 the threshold that we are using to define a statistically significant difference we can't say that drug a is better than drug b in other words even though we suspect that the measurements for drug a represent this distribution and the

words even though we suspect that the measurements for drug a represent this distribution and the measurements for drug b represent this other separate distribution because the p-value 0.06 is greater than 0.05 we cannot reject the idea that maybe all of the measurements represent the same distribution in the middle because we suspect that the measurements represent two different distributions and the p-value 0.06 is just a little bit bigger than 0.05 it is tempting to give one more person drug

the p-value 0.06 is just a little bit bigger than 0.05 it is tempting to give one more person drug a and give another person drug b and recalculate the means and then redo the statistical test however we must resist this temptation because that would be p hacking and we don't want to do that instead of p hacking we're going to do the right thing we're going to do a power analysis to determine the sample size for the next time we do this experiment a power analysis determines what sample size

sample size for the next time we do this experiment a power analysis determines what sample size will ensure a high probability that we will correctly reject the null hypothesis that there is no difference between the two groups in other words if we use the sample size recommended by the power analysis we will know that regardless of the p-value we used enough data to make a good decision power is affected by several things however there are two main factors one how much overlap there is

is affected by several things however there are two main factors one how much overlap there is between the two distributions we want to identify with our study two the sample size the number of measurements we collect from each group for example if i want to have power equal to 0.8 meaning i want to have at least an 80 chance of correctly rejecting the null hypothesis then if there is very little overlap a small sample size will give me power equal to 0.8 however the more overlap there is

overlap a small sample size will give me power equal to 0.8 however the more overlap there is between the two distributions the larger the sample size needs to be in order to have power equal to 0.8 to understand the relationship between overlap and sample size the first thing we need to realize is that when we do a statistical test we usually don't compare the individual measurements instead we compare summaries of the data for example we often compare the means so let's see what happens when

compare summaries of the data for example we often compare the means so let's see what happens when we calculate means with different sample sizes first let's focus on the distribution for drug a the population mean for drug a is represented by this green arrow typically when we do an experiment we don't know the population mean and instead have to estimate it so if we collected one measurement and use that one measurement to estimate the population mean for drug a then the estimated mean

and use that one measurement to estimate the population mean for drug a then the estimated mean represented by this green bar would be the same as the measurement we collected now let's get rid of the measurement but keep the estimated mean and collect a new measurement and use it to estimate the population mean now let's collect more measurements and use each one to estimate the population mean note we occasionally get a wonky point that is really far from the population mean and when that

note we occasionally get a wonky point that is really far from the population mean and when that happens the estimated mean is also pretty wonky and really far from the population mean now compared to the population mean for the distribution we see that the estimated means are all over the place in other words there's a lot of variation in the estimated means and all this variation makes it hard to be confident that any single estimated mean is a good estimate of the population mean sure some

to be confident that any single estimated mean is a good estimate of the population mean sure some of the estimated means are close to the population mean but others are pretty far away and since 25 of the area under the curve is relatively far from the mean and off to the left 25 of the measurements should be far from the mean and off to the left and since in this case a single measurement is the same as the estimated mean 25 percent of the estimated means should be pretty far off to the left

same as the estimated mean 25 percent of the estimated means should be pretty far off to the left likewise another 25 percent of the estimated means should be pretty far off to the right in summary when we only use one measurement to estimate the population mean the probability that we'll get something far from it is too high for us to be confident that we have a good estimate now let's do the same thing for drug b collect one measurement and use that to estimate the population mean now let's

thing for drug b collect one measurement and use that to estimate the population mean now let's do that a bunch of times just like before compared to the population mean for the distribution the estimated means are all over the place and just like before fifty percent of the estimated mean should be pretty far to the left or right of the population mean and when we only use one measurement to estimate the population mean the probability that we'll get something far from it is too high for us to

the population mean the probability that we'll get something far from it is too high for us to be confident in our estimate and because we don't have a lot of confidence in the estimated means we'll end up with a relatively large p-value and that means we will not correctly reject the null hypothesis in other words if this distribution said all data comes from me then due to all of the variation in the estimated means we'd say in a small meek voice dang i can't reject the null hypothesis bam

in the estimated means we'd say in a small meek voice dang i can't reject the null hypothesis bam now let's collect two measurements at one time and use the average to estimate the population mean now let's repeat that process a bunch of times collect two measurements and use the average to estimate the population mean note just like before we occasionally get a wonky point that is really far from the population mean however the other point we measured compensates for the wonky point and

from the population mean however the other point we measured compensates for the wonky point and prevents the estimated mean from being too far from the population mean in other words even though there is a 25 probability that we will get a measurement way out on the left side there is a 75 probability that the next measurement will be in this range and pull the estimated mean back to the population mean in summary when we use more than one measurement to estimate the population mean extreme

mean in summary when we use more than one measurement to estimate the population mean extreme measurements have less effect on how far the estimated mean is from the population mean and as a result the estimated means are closer to the population mean compared to the means we estimated with a single observation this suggests that we should have more confidence that averages estimated with two observations will be closer to the population mean than averages estimated with one observation now

observations will be closer to the population mean than averages estimated with one observation now let's collect two measurements each time for drug b and use their average to estimate the population mean again when we use two measurements we can have more confidence that the estimated means are closer to the population mean compared to the means we estimated with a single observation bam now imagine we did the same thing only this time we collected 10 measurements and used them to estimate

imagine we did the same thing only this time we collected 10 measurements and used them to estimate the population mean then we repeated that process collected 10 measurements and then estimated the population mean a bunch of times then we did the same thing for drug b now we see that the more measurements we use for each estimate the closer they are to the population main and the more confidence we can have that an individual estimated mean will be close to the population mean in this example

we can have that an individual estimated mean will be close to the population mean in this example the estimated means are so close to the population means that they no longer overlap and that suggests there is a high probability that we will correctly reject the null hypothesis that both samples were taken from the same distribution in other words even when the distributions overlap if the sample size is large we can have high power bam note although we used normal distributions in this

sample size is large we can have high power bam note although we used normal distributions in this example the central limit theorem tells us that these results apply to any underlying distribution shameless self-promotion for more details about the central limit theorem check out the quest the link is in the description below now at long last let's talk about how to actually do a power analysis first remember that a power analysis will tell us what sample size we need to have power so the

first remember that a power analysis will tell us what sample size we need to have power so the first thing we need to decide is how much power we want although we can pick any value between 0 and 1 for power a common value is 0.8 so let's use that that means we want an 80 probability that we will correctly reject the null hypothesis the second thing we need to do is determine the threshold for significance often called alpha we can use any value between 0 and 1 but a very common threshold is

significance often called alpha we can use any value between 0 and 1 but a very common threshold is 0.05 so we'll use that lastly we need to estimate the overlap between the two distributions overlap is affected by both the distance between the population means and the standard deviations a common way to combine the distance between the means and the standard deviations into a single metric is to calculate an effect size which is also called d in the numerator we have the estimated difference

calculate an effect size which is also called d in the numerator we have the estimated difference in the means and in the denominator we have the pooled estimated standard deviations one of the simplest ways to pool the estimated standard deviations is the square root of the sum of the squared standard deviations divided by 2 where the green s represents the estimated standard deviation for the green distribution and the purple s represents the estimated standard deviation for the purple

the green distribution and the purple s represents the estimated standard deviation for the purple distribution note there are tons of other ways to calculate effect sizes and this is just one of them so when you do a power analysis you may have to do a little research about how to estimate the overlap however in general the mean and standard deviations can be estimated with prior data a literature search or in a worst case scenario an educated guess in this case the original data suggests that

search or in a worst case scenario an educated guess in this case the original data suggests that the difference between the two means is ten and the estimated standard deviations are seven and six so we plug those into the formula for the pooled standard deviation and we get six point five so the effect size is 1.5 once we know the effect size and the amount of power we want and the threshold for significance we google statistics power calculator pretty much every statistics department in the

significance we google statistics power calculator pretty much every statistics department in the world has one online then we plug in the numbers i got sample size equals nine this means that if i get nine measurements per group i will have an eighty percent chance that i will correctly reject the null hypothesis double bam in summary when two distributions overlap we need a relatively large sample size to have a lot of power when the sample size is small we have low confidence that the

sample size to have a lot of power when the sample size is small we have low confidence that the estimated means are close to the population means and that lack of confidence is reflected in a low probability that we will correctly reject the null hypothesis in contrast when we increase the sample size we have more confidence that the estimated means are close to the population means because extreme observations have less effect on the location of the estimated means and the closer the

extreme observations have less effect on the location of the estimated means and the closer the estimated means are to the population means the less the means from the different distributions will overlap and that increases the probability that we will correctly reject the null hypothesis and when you have a high probability that we will correctly reject the null hypothesis you have high power triple bam hooray we've made it to the end of another exciting stat quest if you like this stat quest

bam hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

my cat can't do stats in the window so I'll do stats walk low all day long stack quest hello I'm Josh stormer and welcome to stack quest today we're going to talk about covariance and this is part 1 in a two-part series on covariance and correlation note this stack quest assumes that you are already familiar with the concept of variance if not check out the quest the link is in the description below in the stack quest on variance we've started with the number of mRNA transcripts for gene X from

in the stack quest on variance we've started with the number of mRNA transcripts for gene X from 5 different cells and if mRNA transcripts aren't your thing you could think that we counted the number of green apples in five different grocery stores then we estimated the mean x-bar and then we estimated the variance due to Boop BAM and that's our review of variance now imagine that in addition to counting mRNA transcripts for gene X we also counted gene Y transcripts in the same 5 cells

to counting mRNA transcripts for gene X we also counted gene Y transcripts in the same 5 cells alternatively you can imagine we counted the number of red apples in the same 5 grocery stores note if you're wondering why gene Y is perpendicular to gene X don't sweat it the reason will become clear in just a bit anyway just like we did for gene X we can estimate the mean for gene y and since gene Y is on the y axis we will use Y bar to represent its mean value and we can estimate the variance T 2

is on the y axis we will use Y bar to represent its mean value and we can estimate the variance T 2 2 2 2 2 2 2 2 2 2 2 BAM so far we've estimated the mean and variance for two different genes measured in the same five cells alternatively you could imagine we estimated the mean and variance for two different types of apples counted in the same five grocery stores since these measurements were taken from the same cells or the same grocery stores we can look at them in pairs for example this pair

from the same cells or the same grocery stores we can look at them in pairs for example this pair of measurements came from the same cell and both measurements are less than their respective mean values this pair of measurements came from another cell and both measurements are greater than their respective mean values since the measurements were taken in pairs the question is do the measurements taken as pairs tell us something that the individual measurements do not covariance is one way to

taken as pairs tell us something that the individual measurements do not covariance is one way to try to answer this question since the measurements came from the same cells or grocery stores we can plot each pair as a single dot by combining the values on the x and y axes now generally speaking we see that cells with relatively low values for gene X also have relatively low values for gene Y and cells with relatively high values for gene X also have relatively high values for gene why this

and cells with relatively high values for gene X also have relatively high values for gene why this relationship low measurements for both genes and some cells and high measurements for both genes and other cells can be summarized with this line note the line that represents this particular relationship has a positive slope and it reflects the positive trend where the values for gene X and gene Y increase together in other words if you told me that there were a lot of transcripts for gene X in

increase together in other words if you told me that there were a lot of transcripts for gene X in a cell then the trend suggests that the same cell should have a large number of transcripts for gene Y likewise if you told me that you had a low value for gene Y then the trend suggests that the same cell should have a small number of transcripts for gene X if the data had looked like this and relatively low values for gene X correspondent with relatively high values for gene Y and relatively

low values for gene X correspondent with relatively high values for gene Y and relatively high values for gene X correspondent with relatively low values for gene Y then the relationship would have a negative slope and reflect the negative trend that the values for gene X increase as the values for gene y decrease if the data had looked like this and every value for gene X was paired with the same value for gene why then there would be no trend positive or negative between gene X and gene why

value for gene why then there would be no trend positive or negative between gene X and gene why this is because if you told me that you got the same measurement for gene Y found in all of the other cells then we would not know if the same cell should have a relatively small value for gene X or a relatively large value or any other value likewise if every value for Jean Y was paired with the same value for Jean X there would be no relationship this is because if you told me that you got the

value for Jean X there would be no relationship this is because if you told me that you got the same measurement for gene X found in all of the other cells then we would not know if the same cell should have a relatively small value for gene why or a relatively large value or any other value the main idea behind covariance is that it can classify three types of relationships one relationships with positive trends two relationships with negative trends and three times when there is no

with positive trends two relationships with negative trends and three times when there is no relationship because there is no trend okay we just covered the main idea behind covariance it's so important that I'm going to repeat it covariants can classify these three types of relationships one relationships with positive trends two relationships with negative trends and three times when there is no relationship because there is no trend BAM the other main idea behind covariance is kind of a

is no relationship because there is no trend BAM the other main idea behind covariance is kind of a bummer covariance in and of itself is not very interesting what I mean by this is that you will never calculate covariance and be done for the day instead covariance is a computational stepping-stone to something that is interesting like correlation like repeating myself let me repeat the second main idea behind covariance covariance is a computational stepping-stone to something that is

main idea behind covariance covariance is a computational stepping-stone to something that is interesting like correlation so let's talk about how covariance is calculated covariance is calculated with a slightly nasty looking thing to get an intuitive sense for how covariance is calculated let's go back to the mean value for gene X and extend the green line to the top of the graph and then extend the red line that represents the mean for Jean why to the edge of the graph now let's focus on the

the red line that represents the mean for Jean why to the edge of the graph now let's focus on the leftmost data point since it's to the left of the solid green line we see that it is less than the mean value for gene X and since it is below the solid red line we see that it is less than the mean value for gene y now let's plug in the gene X measurement for this cell and the main value for gene X and that gives us this difference negative since it is to the left of the mean now let's plug in

X and that gives us this difference negative since it is to the left of the mean now let's plug in the gene Y measurement for this same cell and the mean value for Jean why and that gives us this difference which is negative because it is below the mean and since both differences are negative multiplying them together gives us a positive value same thing for the next data point again since it is to the left of the solid green line we can see that it is less than the mean for gene X and since it

the left of the solid green line we can see that it is less than the mean for gene X and since it is below the solid red line we can see that it is less than the mean for Jean why so we plug in the values for gene X and that gives us a negative difference now we plug in the values for gene Y and that gives us another negative difference again since both differences are negative multiplying them together gives us a positive value so we see that when the values for gene X and gene Y are both less

gives us a positive value so we see that when the values for gene X and gene Y are both less than their respective averages we end up with positive values BAM remaining three cells are to the right of the solid green line so we see that they are all greater than the average value for gene X and they are all above the solid red line so we see that they are also greater than the average value for gene y thus when we plug in the values and do the math we end up with positive values too in the math

y thus when we plug in the values and do the math we end up with positive values too in the math I'm doing the math hip-hip-hooray I'm doing the math hip hip hooray hip hip hooray so we see that when both values are greater than their respective means we end up with positive numbers in summary data in these two quadrants contribute positive values to the total covariance Bamm hooray we've calculated these terms for each cell the Sigma tells us to add up each term and then we divide by the

these terms for each cell the Sigma tells us to add up each term and then we divide by the number of measurements in which in this case is 5-1 and ultimately we end up with a covariance equal to 116 since the covariance value 116 is positive it means that the slope of the relationship between gene X and gene Y is positive in other words when the covariance value is positive we classify the trend as positive double bail note the covariance value itself isn't very easy to interpret and depends on

positive double bail note the covariance value itself isn't very easy to interpret and depends on the context for example the covariance value does not tell us if the slope of the line representing the relationship is steep or not steep it just tells us that the slope is positive more importantly the covariance value doesn't tell us if the points are relatively close to the dotted line or relatively far from the dotted line again it just tells us that the slope of the relationship is positive

far from the dotted line again it just tells us that the slope of the relationship is positive note we'll talk about why the covariance value is so hard to interpret later and remember even though covariance is hard to interpret it is a computational stepping stone to more interesting things BAM now let's imagine we got different values for gene Y just like before we can graph the data using pairs of X and y-axis values the mean value for gene X is the same as before seventeen point six and the

of X and y-axis values the mean value for gene X is the same as before seventeen point six and the mean value for jean y is 20 point 2 now let's focus on the data point on the far left since the measurement for gene X is to the left of the solid green line we can see that it is less than the mean value however the measurement for gene Y is above the solid red line so we see that it is greater than the mean value thus when we plug in the numbers and do the math we end up with a negative number

the mean value thus when we plug in the numbers and do the math we end up with a negative number and the same thing happens to the next data point we end up with a negative number so if one value is less than its mean and one value is more than its mean we end up with a negative number BAM likewise these cells also result in negative numbers because they are greater than gene X's mean and less than gene wise mean in summary data in these quadrants contribute negative values to the covariance

than gene wise mean in summary data in these quadrants contribute negative values to the covariance now we add up each term and then we divide by the number of measurements in which is 5-1 ultimately we end up with a covariance equal to negative 100 5.15 since the covariance value negative 100 5.15 is negative it means that the slope of the relationship between gene X and Gen Y is negative again covariance doesn't tell us if the slope is steep or not and more importantly covariance doesn't tell

doesn't tell us if the slope is steep or not and more importantly covariance doesn't tell us if the points are relatively close to the line or relatively far just that the slope is negative BAM now let's calculate the covariance for when there is no trend in this case every value for gene X corresponds to the same value for gene Y first we calculate the means then we do the math for the first point the difference from gene X's average is negative 14 point 6 and the difference from jean Weis

point the difference from gene X's average is negative 14 point 6 and the difference from jean Weis average is zero and anything times zero is zero so the value for the first data point is zero likewise because the differences between the gene y-values in the gene y average are all 0 all of the remaining terms are 0 doing the rest of the math gives us 0 in the numerator and the whole thing equals 0 likewise when every value for Jean Y corresponds to the same value for Jean X the covariance

0 likewise when every value for Jean Y corresponds to the same value for Jean X the covariance equals zero in this last case we can see that even though there are multiple values for gene x and y there is still no trend because as gene X increases gene Y increases and decreases in other words the negative value for this point is cancelled out by this positive point and this positive point is canceled out by this negative point and the covariance equals zero so we see that the covariance equals

out by this negative point and the covariance equals zero so we see that the covariance equals zero when there is no relationship between gene X and gene y double BAM now let's talk about why the covariance value is hard to interpret to see why the covariance value is difficult to interpret let's go all the way back to looking at just gene X and calculate the covariance between gene X and itself just like before we can plot the data mean value for gene X is the same as before 17.6 and we use

just like before we can plot the data mean value for gene X is the same as before 17.6 and we use 17.6 on the y-axis as well now we are ready to calculate the covariance note in this case the same data are on both axes and that means x equals y and x bar equals y bar so we can replace Y with X and y bar with X bar and then we can multiply X minus X bar times X minus X bar and we are left with a formula for estimating variance in other words the covariance for gene X with itself is the same

a formula for estimating variance in other words the covariance for gene X with itself is the same thing as the estimated variance for gene X now when we do the math we get 102 since the covariance value is positive we know that the relationship between gene X and itself has a positive slope so let's move the graph and the covariance value over here and see what happens when we multiply the data by two now the X and y axis labels on the right are twice what they are on the left and the new mean

two now the X and y axis labels on the right are twice what they are on the left and the new mean values are twice what they were before relative positions of the data did not change and each dot still falls on the same straight line with positive slope in other words the only thing that changed was the scale that the data is on however when we do the math we get covariance equals four hundred eight which is four times what we got before thus we see that the covariance value changes even when

which is four times what we got before thus we see that the covariance value changes even when the relationship does not in other words covariance values are sensitive to the scale of the data and this makes them difficult to interpret this sensitivity to scale also prevents the covariance value from telling us if the data are close to the dotted line that represents the relationship or far from it in this example the covariance on the left when each point is on the dotted line is 102 and the

it in this example the covariance on the left when each point is on the dotted line is 102 and the covariance on the right when the data are relatively far from the dotted line is 381 so in this case when the data are far from the line the covariance is larger now let's just change the scale on the right hand side and recalculate the covariance and now the covariance is less for the data that does not fall on the line if you're thinking I sure wish there was something to describe relationships

not fall on the line if you're thinking I sure wish there was something to describe relationships that wasn't sensitive to the scale of the data then you're in luck calculating covariance is the first step in calculating correlation correlation describes relationships and is not sensitive to the scale of the data and we'll talk about correlation more in the next video in this series it's also worth mentioning that covariance values are used as stepping stones in a wide variety of analyses for

mentioning that covariance values are used as stepping stones in a wide variety of analyses for example covariance values were used for principal component analysis PCA and are still used in other settings as computational stepping-stones to other more interesting things BAM in summary covariance is a way to classify three types of relationships one when the covariance is positive it means the relationship has a positive slope two when the covariance is negative it means the relationship has a

has a positive slope two when the covariance is negative it means the relationship has a negative slope and three when covariance equals zero there is no relationship because there is no trend the covariance value itself is difficult to interpret however it is useful for calculating correlations and in other computational settings hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more please subscribe and if you want to support stack

you liked this stack quest and want to see more please subscribe and if you want to support stack quest well consider buying one or two of my original songs or a t-shirt or a hoodie or just donating money the links to do this are in the description below alright until next time quest on

correlation it's the sensation across the nation stack quests hello I'm Josh starburns welcome to stack quest today is part two in our series on covariance and correlation this time we're going to talk about correlation however before we dive deep into correlation I want to talk about relationships not the fun and/or confusing kind we sometimes find ourselves in will you hold my hand um you don't have a hand you're just a stick figure dang instead I want to talk about the relationships between

have a hand you're just a stick figure dang instead I want to talk about the relationships between data on the x-axis and data on the y-axis in this example we're looking at mRNA transcripts from gene X in five different cells on the x-axis and from gene Y in the same five different cells on the y-axis however if mRNA transcripts doesn't mean anything to you imagine we went into five different grocery stores and put the number of green apples on the x-axis in the number of red apples on the

grocery stores and put the number of green apples on the x-axis in the number of red apples on the y-axis each pair of measurements were taken from a single cell or grocery store and can be represented by a blue dot we can see that in general relatively low values for gene X are paired with relatively low values for gene Y and relatively high values for gene X are paired with relatively high values for gene y we can use a straight line with a positive slope to represent this trend and if

values for gene y we can use a straight line with a positive slope to represent this trend and if someone told us that they collected a new measurement for gene X 20 then we can use the line to predict that when gene X equals 20 then the value for gene Y should be somewhere around 27 alternatively if someone gave us a value for gene Y we could use the trend to predict a range of values for gene X both cases we made guesses based on the trend we observed in the data if the data were closer to

X both cases we made guesses based on the trend we observed in the data if the data were closer to the trendline then given a gene X value we might guess that the value for gene Y falls in a smaller range in this case the closer the data are to the line the more gene X can tell us about gene y alternatively we could say that the relationship between gene X and gene Y is relatively strong the data were further from the trendline then we might guess that the value for Jean Y falls in a larger

were further from the trendline then we might guess that the value for Jean Y falls in a larger range in this case we could say that the values for gene X tell us less about the values for gene y alternatively we could say that the relationship between gene X and gene Y is relatively weak note just to be clear all we are saying is that we observed that low values for gene X tend to be paired with low values for gene Y and that high values for gene X tend to be paired with relatively high values

low values for gene Y and that high values for gene X tend to be paired with relatively high values for gene Y and that this observation suggests a trend that we can use to make predictions and inferences aka educated guesses we are not saying that a low value for gene X causes gene Y to have a low value or that a high value for gene Y causes gene X to have a high value in other words we are not ruling out the possibility that something else causes the trend that we observe small bam so far we

ruling out the possibility that something else causes the trend that we observe small bam so far we have looked at a relatively weak relationship and a relatively strong relationship we can quantify the strength of a relationship with correlation in other words these data with a relatively weak relationship have a small correlation value these data with a moderate relationship have a moderate correlation value and these data with a strong relationship have a relatively large correlation value

value and these data with a strong relationship have a relatively large correlation value the maximum value for correlation is 1 correlation equals one when a straight line with a positive slope can go through the center of every data point this means that if someone gave us a value for gene X then we could guess that jean y had a value in a very very narrow range note correlation does not depend on the scale of the data in fact I intentionally omitted putting numbers on the axes because they

on the scale of the data in fact I intentionally omitted putting numbers on the axes because they do not affect correlation at all in other words regardless of the scale of the data correlation equals one when a straight line with a positive slope can go through all of the data that means that correlation can equal one when the slope is large and when the slope is small note when a straight line with a positive slope goes through the data correlation equals one regardless of how much data we

with a positive slope goes through the data correlation equals one regardless of how much data we have for example if we only had two data points then we can draw a straight line with a positive slope by just connecting the two dots and then correlation equals one and that makes the relationship appear strong but we should not have any confidence in predictions made with this line because we have so little data to understand why we should have low confidence in correlations made with small

have so little data to understand why we should have low confidence in correlations made with small datasets let's start with an empty graph and draw two random points on it then just like before we could draw a straight line that goes through the center of each point just by connecting the dots and that means correlation equals one for these two randomly drawn dots in fact we can always draw a straight line between any two random dots now let's go back to the original data and imagine that

a straight line between any two random dots now let's go back to the original data and imagine that instead of two pairs of measurements we had three pairs of measurements now just like before since we can draw a straight line through all three points correlation equals one however now we can have more confidence in the predictions we make with this line this is because if we started with an empty graph and drew three random points on it then even though it's easy to draw a straight line to

graph and drew three random points on it then even though it's easy to draw a straight line to connect any two points there is a very small chance that we will be able to draw a straight line through all three points ultimately the probability that we can connect three randomly drawn points with a straight line is very small and thus we can have more confidence that the observed correlation isn't just the result of random chance in general the more data we have the more confidence we have in

just the result of random chance in general the more data we have the more confidence we have in the predictions we make with the line because the probability that we can draw a straight line through the same number of randomly placed points gets smaller and smaller with each additional point note we could draw a squiggly line that connects all of the dots but when we're talking about correlation were only talking about using straight lines oh no it's the dreaded terminology alert for

were only talking about using straight lines oh no it's the dreaded terminology alert for correlation a p-value tells us the probability that randomly drawn dots will result in a similarly strong relationship or stronger thus the smaller the p-value the more confidence we have in the predictions we make with the line in this case the p-value is crazy small 2.2 times 10 to the negative 16 which means that the probability of random data creating a similarly strong or stronger relationship is

means that the probability of random data creating a similarly strong or stronger relationship is crazy small to summarize what we've talked about so far the maximum value for correlation one occurs whenever you can draw a straight line with a positive slope that goes through all of the data and our confidence in how useful the relationship is depends on how much data we have of these three examples we should have the least confidence in this relationship since it is supported by the least

we should have the least confidence in this relationship since it is supported by the least amount of data and we should have the most confidence in this relationship since it is supported by the most data and has the smallest p-value BAM when a straight line with a negative slope can go through the center of every data point then the correlation equals negative one since a straight line can go through all of the data points correlation equals negative one implies that there is a strong

go through all of the data points correlation equals negative one implies that there is a strong relationship in the data and if someone gives us a value for gene X then we can guess a value for gene Y within a very narrow range just like before our confidence in that guess which we quantify with a p-value depends on how much data we have if we had a lot of data we could have a lot of confidence in the guess because the p-value would be super small and the less data we have the less confidence

in the guess because the p-value would be super small and the less data we have the less confidence we have in the guess because the p-value gets larger like before as long as a straight line goes through all of the data and the slope of the line is negative correlation equals negative one when the slope is large and when the slope is small BAM so far we've seen that when the slope of the line is negative the strongest relationship has correlation equal to negative one and when the slope of the

negative the strongest relationship has correlation equal to negative one and when the slope of the line is positive the strongest relationship has correlation equal to one in both cases if a straight line cannot go through all of the data then we will get correlation values closer to zero and the worse the fit the closer the correlation gets to zero and when there is no relationship that we can represent with a straight line correlation equals zero when correlation equals zero a value on the

represent with a straight line correlation equals zero when correlation equals zero a value on the x-axis doesn't tell us anything about what to expect on the y-axis because there is no reason to choose one value over another BAM as long as the correlation value is not zero we can still use the line to make inferences but our guesses become more refined the closer the correlation values get to negative one or one and just like before our confidence in our inferences depends on the amount of

negative one or one and just like before our confidence in our inferences depends on the amount of data we have collected and the p-value in the left graph we have very little confidence in the trim because we have very little data and the p value equals 0.8 in the middle we have moderate confidence in the trend because we have more data and the p value equals 0.08 on the right we have a lot of confidence in the trend because we have even more data in the p value equals zero point zero zero

confidence in the trend because we have even more data in the p value equals zero point zero zero eight note the correlation equals zero point three in all three examples in this case increasing the sample size did not increase correlation and that means adding data did not refine our guests all it did was increase our confidence in the guess thus our guesses will probably be pretty bad in all three cases however we'll have the most confidence in the bad guest that came from this data in other

cases however we'll have the most confidence in the bad guest that came from this data in other words just because you have a lot of data and you have a lot of confidence in your guests if the correlation value is small your guests will still be bad double bam if you know how to calculate variance and covariance calculating correlation is a snap note if you're not already familiar with the concepts of variance and covariance check out the quests the links are in the description below if this

of variance and covariance check out the quests the links are in the description below if this were the data then the correlation equals the covariance of gene X and gene Y divided by the square root of the variance for gene X times the square root of the variance for gene y as we saw in the stat quest on covariance the numerator can be any value between positive and negative infinity depending on whether the slope of the line that represents the relationship is positive or negative how far the

whether the slope of the line that represents the relationship is positive or negative how far the data are spread out around the means and the scale of the data thus when we calculate correlation the denominator squeezes the covariance to be a number from negative 1 to 1 in other words the denominator ensures that the scale of the data does not affect the correlation value and this makes correlations much easier to interpret when the data all fall on a straight line with a positive or negative

much easier to interpret when the data all fall on a straight line with a positive or negative slope then the covariance and the product of the square root of the variance terms are the same and division gives us 1 or negative 1 depending on the slope when the data do not fall on a straight line with a positive or negative slope then the covariance accounts for less of the variance in the data and the correlation is closer to zero as we saw in the stat quest on covariance the covariance value

the correlation is closer to zero as we saw in the stat quest on covariance the covariance value for this data is 116 so the denominator will squeeze 116 down to a value from negative 1 to 1 the variants in the gene X data is 100 1.8 and the variants in the gene Y data is 160 point 3 and when we do the math we get 0.9 like I mentioned earlier we can quantify our confidence in this relationship with a p-value the smaller the p-value the more confidence we can have in the guesses we make in this

a p-value the smaller the p-value the more confidence we can have in the guesses we make in this case the p-value is 0.03 that means that there is a 3% chance that random data could produce a similarly strong relationship or stronger triple bam before we go there's one last important thing I want to mention about correlation even though correlation values are way easier to interpret then covariance values they are still not super easy to interpret for example it's not super obvious that this

values they are still not super easy to interpret for example it's not super obvious that this relationship where correlation equals zero point nine is twice as good as making predictions as this relationship where correlation equals zero point six four the good news is that R squared which is related to correlation solves this problem the better news is that if you want to learn more about r-squared you can check out these quests the links are in the description below pS another awesome thing

you can check out these quests the links are in the description below pS another awesome thing about R squared is that it can quantify relationships that are more complicated than simple straight lines in summary correlation quantifies the strengths of relationships if you have a weak relationship then you will have a small correlation value if you have a moderate relationship then you'll have a moderate correlation value and if you have a strong relationship then you will have a large

have a moderate correlation value and if you have a strong relationship then you will have a large correlation value correlation values go from negative one which is the strongest linear relationship with a negative slope to one which is the strongest linear relationship with a positive slope in both cases if a straight line cannot go through all of the data then we will get correlation values closer to zero and the worse the fit the closer the correlation values get to zero and when there is

to zero and the worse the fit the closer the correlation values get to zero and when there is no relationship that we can represent with a straight line correlation equals zero lastly our confidence in the inferences depends on the amount of data we have collected and the p-value the more data we have the smaller the p-value and the more confidence we have in our inferences BAM hooray we made it to the end of another exciting stat quest if you like this stack quest and want to see more please

to the end of another exciting stat quest if you like this stack quest and want to see more please subscribe and if you want to support stack quest consider buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=_IgyaD7vOOA! This is most likely caused by:

No transcripts were found for any of the requested language codes: ['en']

For this video (_IgyaD7vOOA) transcripts are available in the following languages:

None

 - vi ("Vietnamese (auto-generated)")[TRANSLATABLE]

base theorem versus statsquatch base theorem wins statquest hello i'm josh starmer and welcome to statquest today we're going to talk about bayes theorem and it's going to be clearly explained note this stat quest assumes that you are already familiar with conditional probability if not check out the quest that said let's do a quick review in the stat quest on conditional probability we took a trip to statland and asked everyone represented by a colorful dot if they loved candy and or soda these

to statland and asked everyone represented by a colorful dot if they loved candy and or soda these two people loved candy and soda these four people only loved candy these five people only loved soda and these three people didn't like candy and they didn't like soda bam then we calculated the probabilities for each cell in the contingency table by dividing the counts by the total number of people in statland 14. bam then we determined the total number and probability of people who loved soda

in statland 14. bam then we determined the total number and probability of people who loved soda and did not love soda and the total number and probability of people who loved candy and did not love candy bam then we calculated the conditional probability that someone in statland might not love candy but love soda given that we already know that they love soda we did this by dividing the five people that do not love candy but love soda by the seven people that love soda and we got 0.71 then

people that do not love candy but love soda by the seven people that love soda and we got 0.71 then just for fun we divided the numerator and the denominator by the total population of statland 14. doing this extra division did not change the result we still got 0.71 however now the numerator is the original unconditional probability that someone in statland does not love candy but loves soda and the denominator is the unconditional probability that someone in statland loves soda all in all the

the denominator is the unconditional probability that someone in statland loves soda all in all the probability that someone does not love candy but loves soda given that we know that they love soda is equal to the probability that someone does not love candy but loves soda divided by the probability that someone in statland loves soda so one way to think about conditional probability is the probability that an event will happen in this case the probability that we meet someone who does not

that an event will happen in this case the probability that we meet someone who does not love candy but loves soda scaled by the knowledge we already have about the event in this case we know that the person loves soda note because saying someone who does not love candy and love soda given that they love soda is a little redundant many people omit writing out the and love soda part and shorten the conditional probability statement to someone who does not love candy given that they love soda

the conditional probability statement to someone who does not love candy given that they love soda while this notation is standard it makes it harder to see the relationship between the thing we want to calculate the probability for on the left and how we calculate it on the right using the slightly redundant notation for conditional probability makes it obvious that we want the probability that an event happens scaled by the knowledge we already have about the event personally this slightly

an event happens scaled by the knowledge we already have about the event personally this slightly redundant notation helped me get a better understanding of bayes theorem and we'll talk about this more at the end of the stat quest now let's see what happens when we change what we already know about the event from knowing that they love soda to knowing that they do not love candy now we have the probability that an event happens which in this case is the event that we meet someone who does not

probability that an event happens which in this case is the event that we meet someone who does not love candy but loves soda scaled by the knowledge we already have about the event in this case we already know that they do not love candy now we plug in the numbers and do the math and get 0.63 now let's compare this conditional probability where we already know that the person does not love candy to the conditional probability we calculated before where we already knew that the person loves

to the conditional probability we calculated before where we already knew that the person loves soda in both cases we want to know the probability of the same event meeting someone who does not love candy but loves soda and that means in both cases the numerators are the same however since we have different knowledge in each case we scale the probabilities of the events differently and ultimately we get different probabilities hey look it's statsquatch statsquatch is our friend in statland and

we get different probabilities hey look it's statsquatch statsquatch is our friend in statland and he always wants to make a bet i bet you one dollar that you can't solve the conditional probabilities without knowing the probability of not loving candy and loving soda in other words if we don't know the value for the numerators can we still solve for the conditional probabilities well even if we don't know the probability that someone does not love candy but loves soda we can multiply both

we don't know the probability that someone does not love candy but loves soda we can multiply both sides of the top equation by the probability that someone loves soda and these two terms on the right cancel out and we are left with the probability that we meet someone that does not love candy but loves soda equal to this stuff on the left side likewise we can multiply both sides of the equation on the bottom by the probability of not loving candy and these two terms on the right side cancel

on the bottom by the probability of not loving candy and these two terms on the right side cancel out and just like before we end up with the probability of meeting someone who does not love candy but loves soda equal to this stuff on the left side now we have two things on the left side of the equal signs that are both equal to the probability that we will meet someone who does not love candy and loves soda now remember that statsquatch asked us to solve for this term and this term without

and loves soda now remember that statsquatch asked us to solve for this term and this term without this term and because both equations are equal to the term we want to omit both equations are equal to each other so let's move this up a little bit and move this over here now remember we want to solve for this term and we want to solve for this term we'll start with the term on the left first we divide both sides by the probability that someone loves soda and the probability that someone loves

divide both sides by the probability that someone loves soda and the probability that someone loves soda cancels out on the left side and we have solved for this term bam now let's move the thing on the right to the left and the thing on the left to the right and divide both sides by the probability that someone does not love candy and the probability that someone does not love candy cancels out on the left side and we have solved for the other term bam in both cases we won the bet with

out on the left side and we have solved for the other term bam in both cases we won the bet with statsquatch because we no longer need to know the probability that someone does not love candy and loves soda but more importantly we have derived bayes theorem double bam bayes theorem tells us that this conditional probability which is based on knowing that the person loves soda can be derived from this conditional probability which is based on knowing that they do not love candy alternatively

this conditional probability which is based on knowing that they do not love candy alternatively bayes's theorem tells us that this conditional probability which is based on knowing that the person does not love candy can be derived from this conditional probability based on knowing they love soda in general if we let a equal does not love candy and b equals love soda then we can rewrite each equation into the standard formula for bayes's theorem in other words the conditional probability given

into the standard formula for bayes's theorem in other words the conditional probability given that we know one thing about an event can be derived from knowing the other thing about the event now statsquatch says dude you derived bayes theorem with just a little algebra what's the big deal when we have all of the data laid out in a nice colorful chart or in a contingency table then bayes theorem is not that big of a deal in fact when you have all of the data bayes theorem isn't even a small

is not that big of a deal in fact when you have all of the data bayes theorem isn't even a small deal however most of the time we don't have all of the data in other words statsquatch might only tell us the probability that someone does not love candy given that they love soda is 0.71 and i'm not certain but i think the probability that someone loves soda is close to 0.6 and the probability that someone does not like candy is 0.57 and if this is all the data we have then we plug the numbers

someone does not like candy is 0.57 and if this is all the data we have then we plug the numbers into bayes theorem and get approximately 0.75 and that means given this data which includes a guess about the probability someone loves soda the probability that someone loves soda given that we know they do not like candy is about 0.75 note attentive viewers may notice that when we calculated the conditional probability with bayes theorem which we used because we did not have all of the information

probability with bayes theorem which we used because we did not have all of the information the result is different from when we calculated the probability knowing everything this is because statsquatch didn't know the exact value for the probability that someone loved soda they just took a guess and while taking a guess might sound like a terrible thing to do it's the only option when we have a large population for example it would be almost impossible to ask every single person in india if

a large population for example it would be almost impossible to ask every single person in india if they love soda so a lot of times we have to make a guess bayesian statistics is about understanding what it means to make a guess like this and all it implies bayes theorem is the basis for bayesian statistics which is this equation paired with a broader philosophy of how statistics should be calculated and we'll cover all these topics in follow-up stat quests however before we go i want to

calculated and we'll cover all these topics in follow-up stat quests however before we go i want to review the standard notation so if you research bayes theorem or bayesian statistics on your own you won't be totally lost like i said earlier when most people write conditional probabilities they do it differently from the examples i've given here specifically because they know that this person does not love candy they do not include it when stating the probability now the conditional

person does not love candy they do not include it when stating the probability now the conditional probability reads the probability someone loves soda given that they do not love candy likewise because they know this person loves soda they do not include it when stating the probability now the conditional probability reads the probability that someone does not love candy given that they love soda in the end it looks like we want to calculate the probability of two different events however it

in the end it looks like we want to calculate the probability of two different events however it is important to keep in mind that in both cases there is only one event and both conditional probabilities refer to the same yellow area in the drawing and the same yellow square in the contingency table and the only real difference between the two conditional probabilities is the given knowledge and that's why i prefer the longer slightly redundant way to write conditional probabilities because the

why i prefer the longer slightly redundant way to write conditional probabilities because the longer way makes it obvious that in both cases we are talking about the exact same thing small bam no triple bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stack quest if you like this stat quest and

hooray we've made it to the end of another exciting stack quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

today we're gonna talk about what to expect when you're expecting a value stat quest hello i'm josh starmer and welcome to statquest today we're going to talk about expected values and they're going to be clearly explained let's start by taking a trip to the magical place called statland once we get to statland our friend statsquatch says hey i bet the next person we meet has heard of the movie troll 2 and we say are you kidding me troll 2 is one of the worst movies ever made why would anyone

troll 2 and we say are you kidding me troll 2 is one of the worst movies ever made why would anyone know about it and then stat squash says i bet you one dollar that the next person we meet has heard of the movie troll 2. so we think to ourselves good thing we recently asked everyone in statland if they'd heard of the movie troll 2. here's the data there are two types of people in statland people that have heard of the 1990 movie troll 2 and people who have never heard of troll 2 in other words

that have heard of the 1990 movie troll 2 and people who have never heard of troll 2 in other words there isn't anyone who has both sort of heard of troll 2 and sort of hasn't heard of troll 2. each person in statland is in one group or the other 37 of the people in statland have heard of troll 2 and the remaining 176 people in statland have never heard of troll 2 that means there are 213 people living in statland so statland is not a huge place looking at the raw numbers is useful because they

in statland so statland is not a huge place looking at the raw numbers is useful because they tell us that statland is pretty small and that whatever analysis we do only applies to a handful of people that said by looking at the numbers we can get a general sense of the trends in statland in this case we see that most of the people in statland have never heard of troll 2 but at a glance it's not super obvious how the number of people who have never heard of troll 2 relates to the total

not super obvious how the number of people who have never heard of troll 2 relates to the total population of statland the good news is that we can make this relationship super obvious by calculating probabilities so let's calculate the probabilities of people in statland that have and haven't heard of troll 2 if we want to know the probability that a randomly selected person in statland has heard of troll 2 we simply divide the number of people that have heard of troll 2 37 by the total 213

of troll 2 we simply divide the number of people that have heard of troll 2 37 by the total 213 and that gives us 0.17 that means the probability that a randomly selected person in statland has heard of troll 2 is 0.17 which is relatively low likewise the probability that a randomly selected person in statland has never heard of troll 2 is 0.83 which is relatively high now remember that bet our friend statsquatch wanted to make i bet you one dollar that the next person we meet has heard of the

statsquatch wanted to make i bet you one dollar that the next person we meet has heard of the movie troll 2. the good news is that we can use these probabilities to decide if we should agree to the bet so let's move the probabilities to the top so we can focus on them now if the next person we meet has heard of troll 2 then we will lose the bet and that means we will lose one dollar so let's put negative one here to represent the outcome of losing one dollar if we meet someone who has heard of

negative one here to represent the outcome of losing one dollar if we meet someone who has heard of troll two in contrast if the next person has not heard of troll two then we will win the bet and that means we will win one dollar so let's put one here to represent the outcome of winning one dollar if the next person we meet has not heard of troll 2. so the left side of this table tells us that the probability we will lose one dollar is 0.17 and the right side tells us that the probability that

probability we will lose one dollar is 0.17 and the right side tells us that the probability that we will win one dollar is 0.83 in other words the probability that we will win one dollar is much higher than the probability that we will lose one dollar and that makes it seem like it would be a good idea to accept the bet however even though there is a high probability that we will win the bet there is still a low probability that we will lose and no one likes to lose money so we say can we make

is still a low probability that we will lose and no one likes to lose money so we say can we make this bet 100 times or is this just a one-time offer and our friend statsquatch says we can make this bet 100 times now if we make this bet 100 times we will probably win some and we will probably lose some and we can use this table to predict how much we will win and lose if we make this bet 100 times we can approximate how many times we will lose by multiplying the probability we will lose 0.17 by

we can approximate how many times we will lose by multiplying the probability we will lose 0.17 by 100 and if we do the math we get 17. so that means we expect to lose about 17 times in 100 bets since we will lose one dollar each time we lose the bet we can estimate the total amount of money we will lose by multiplying the number of times we expect to lose by negative one so this whole term represents how much money we expect to lose in 100 bets and when we do the math we get negative 17 and

how much money we expect to lose in 100 bets and when we do the math we get negative 17 and that means we expect to lose about 17 dollars now since we can make the bet 100 times we can approximate how many times we will win by multiplying the probability we will win 0.83 by 100 when we do the math we see that we expect to win about 83 times since each time we win the bet we will win one dollar we can estimate how much money we will win by multiplying the number of times we expect to win by one

can estimate how much money we will win by multiplying the number of times we expect to win by one so this whole term represents how much money we expect to win in 100 bets and when we do the math we see that we expect to win 83 dollars now that we have a term for the expected amount of money lost and a term for the expected amount of money won we can add the two terms together to find out the total of how much we expect to win or lose and when we do the math we see that we expect to gain

total of how much we expect to win or lose and when we do the math we see that we expect to gain approximately dollars after 100 bets however we can also calculate the average amount of money we will gain per bet by dividing everything by the number of bets 100 doing the math gives us 66 divided by 100 which is 0.66 so on average we expect to gain 66 cents every time we bet note even though i win or lose one dollar each time i bet on average i expect to gain 66 cents each time in statistics

win or lose one dollar each time i bet on average i expect to gain 66 cents each time in statistics lingo 66 cents is the expected value for the bet bam using fancy statistics notation we could write e of bet equals 0.66 or if we wanted to make it look even more cryptic and more in line with what you might find in a textbook we could write e of x equals 0.66 where x represents the bet now let's talk about why i left this messy math in the middle of everything since we are multiplying each

talk about why i left this messy math in the middle of everything since we are multiplying each probability by the number of bets 100 and dividing by the number of bets 100 then all of the values that represent the number of bets 100 cancel out and we're left with the probability that someone in statland has heard of troll 2 times the outcome negative 1 plus the probability that someone has not heard of troll 2 times the outcome 1. and when we do the math we get the exact same thing we got

heard of troll 2 times the outcome 1. and when we do the math we get the exact same thing we got before 0.66 thus the expected value represents what we would expect per bet if we made this bet a bunch of times note we can rewrite the expected value using fancy sigma notation using fancy sigma notation the expected value e of x is the sum of each outcome x times the probability of observing each outcome x so for the first term herd of troll 2 the outcome is negative 1 and the probability of

outcome x so for the first term herd of troll 2 the outcome is negative 1 and the probability of observing the outcome is 0.17 so we multiply those values together then the sigma tells us to add that term to the term for not heard of troll 2 now the outcome is 1 and the probability of observing the outcome is 0.83 so either way we do the math we get 0.66 that means that if we can make this bet a bunch of times even though we will lose some of the time we should make money in the long run double

of times even though we will lose some of the time we should make money in the long run double bam now imagine statsquatch saying because it is relatively rare for someone in statland to have heard of troll 2 i will pay you 10 if the next person we meet has heard of troll 2 but if they have not you pay me one dollar will we win money or lose money if we can make this bet a bunch of times let's calculate the expected value to find out the outcome for when someone has heard of troll 2 is 10

calculate the expected value to find out the outcome for when someone has heard of troll 2 is 10 because we will gain 10 dollars and the outcome for when someone has not heard of troll 2 is negative 1 because we will lose one dollar so these are the two outcomes now let's calculate the expected value the expected value is the sum of each outcome times its associated probability so let's start by plugging in the numbers for herd of troll two first the outcome x is ten and the probability of

by plugging in the numbers for herd of troll two first the outcome x is ten and the probability of observing that outcome is 0.17 now we add the term for never heard of troll 2. the outcome x is negative 1 and the probability of observing that outcome is 0.83 now we just do the math and the expected value is 0.87 and that means we expect to gain on average 87 cents every time we make this bet and that means stat squatch is the worst gambler ever triple bam note in this stat quest we have only

that means stat squatch is the worst gambler ever triple bam note in this stat quest we have only talked about how to calculate expected values for discrete events like whether or not someone has heard of troll 2. however we'll talk about how to calculate expected values for continuous events like how much time passes between text messages on your phone in another stat quest lastly if you watch this video hoping to learn exactly why we divide the sample variance by n minus 1 just know that this

video hoping to learn exactly why we divide the sample variance by n minus 1 just know that this is the first of several steps to that answer and will get there someday soon now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the statquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe

of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

stat quest stat quest stat quest yeah stat quest hello i'm josh starmer and welcome to statquest today we're going to talk about expected values part 2 continuous variables note this stack quest assumes that you are already familiar with the concept of an expected value if not check out the quest in expected values part 1 we travel to the mystical and magical place called statland and we showed how to calculate expected values for two really bad bets made by our friend statsquatch for example

how to calculate expected values for two really bad bets made by our friend statsquatch for example statsquatch made this bet i bet you one dollar that the next person we meet has heard of the movie troll 2 and we use the probabilities of people in statland having heard of troll 2 or not having heard of troll 2 and the amount of money we would lose if we met someone who had heard of troll 2 in the amount of money we would gain if we met someone who had not heard of troll 2 to calculate the

the amount of money we would gain if we met someone who had not heard of troll 2 to calculate the expected value of the overall amount of money we would gain or lose per bet if we made the bet a lot of times and the result was 0.66 meaning that we expect to gain on average 60 cents per bet if we make the bet a bunch of times oh no it's the dreaded terminology alert when we calculate the expected value for a bad bet like this we say that we are calculating the expected value for a discrete

value for a bad bet like this we say that we are calculating the expected value for a discrete variable in this case the discrete variable is the bet and it has two outcomes lose one dollar or gain one dollar in general any time we have discrete outcomes we have a discrete variable bam now let's talk about expected values for continuous variables continuous variables come from measuring things and the outcomes are wait for it continuous for example imagine you and your friend statsquatch are

and the outcomes are wait for it continuous for example imagine you and your friend statsquatch are walking around statland and statsquatch says i wonder how long we would have to wait per person to see people in other words statsquatch wants to know the expected value for waiting time which is something we can measure and after 10 seconds you meet someone yo what's up squatch so you and statsquatch decide to keep track of that by putting a dot on this number line at 10. the next person we meet

decide to keep track of that by putting a dot on this number line at 10. the next person we meet shows up after 30 seconds and the next person shows up immediately and the next person shows up in 10 seconds etc etc etc then statsquatch says ugh collecting all this data is taking forever then statsquatch notices the gaps in the data and says gasp gaps gaps in the data mean we still have more to collect then statsquatch notices that the data are plotted using 10 second intervals and says but what

then statsquatch notices that the data are plotted using 10 second intervals and says but what if we want different interval sizes like 5 or 2.5 seconds so you tell stat squatch chill out squatch instead of spending the rest of our lives collecting data and worrying about the interval size we can model the waiting times with an exponential distribution bam this curve that skims the top of the data is an exponential distribution and this is the equation for the exponential distribution lambda

is an exponential distribution and this is the equation for the exponential distribution lambda which is also called the rate is a parameter that defines the shape of the curve in this example the rate refers to the number of people we meet per second because that is the unit on the x-axis and if we set lambda to 0.05 we get a curve that fits the data we have already collected however if we set lambda to 0.1 meaning we meet more people per second then we get this green curve that has a steeper

to 0.1 meaning we meet more people per second then we get this green curve that has a steeper slope close to zero and if we set lambda to 0.01 meaning we met fewer people per second then we get this orange curve that barely bends but is much higher on the right side compared to the other curves but like we said when lambda equals 0.05 then the curve fits the data now if we want to calculate the probability we meet someone in 10 seconds or less then we calculate the area under the curve between

we meet someone in 10 seconds or less then we calculate the area under the curve between zero and ten in other words we integrate the exponential distribution from zero to ten for now i'll spare you this math and just tell you that when lambda equals 0.05 the integral is 0.39 which means that the probability we will meet someone in 10 seconds or less is 0.39 alternatively if we wanted to know the probability of meeting someone between 25.302 seconds and 30.122 seconds then we can calculate the

probability of meeting someone between 25.302 seconds and 30.122 seconds then we can calculate the area under the curve between 25.302 and 30.122 in this case the area under the curve is 0.06 which means that the probability we will meet someone in this range of time is 0.06 in summary the exponential distribution fits the data that we have collected so far but it doesn't have any gaps or missing values and we can use it to make calculations on any interval we want note i call the y-axis

values and we can use it to make calculations on any interval we want note i call the y-axis likelihood because the y-axis coordinates generated by this equation are the likelihood values that we use for maximum likelihood estimation and if you want to learn about how these y-axis values are used and maximum likelihood with the exponential distribution check out this quest also note the y axis is scaled so that the total area under the curve is equal to one lastly in theory this curve should go

scaled so that the total area under the curve is equal to one lastly in theory this curve should go all the way to positive infinity on the x-axis but we don't have enough room to draw a graph that goes all the way to infinity so we'll stop drawing at 90 seconds because at that time the curve is pretty close to zero on the y-axis okay enough about the exponential distribution itself now let's talk about how to calculate the expected value and i know we just talked about how awesome it is to

talk about how to calculate the expected value and i know we just talked about how awesome it is to have a continuous distribution but for a few minutes let's pretend that this is actually a discrete distribution and let each 10 second interval represent an outcome note in this case we've drawn each rectangle so that the curve goes through the midpoint of each top side so for example because the interval is 10 seconds long the curve intersects the first rectangle at 5 seconds and the curve

the interval is 10 seconds long the curve intersects the first rectangle at 5 seconds and the curve intersects the second rectangle at 15 seconds etc etc etc now instead of having to integrate the function to get the area under the curve we can approximate the area under the curve for each outcome with the corresponding area of each rectangle for example the probability of meeting someone in the first 10 seconds is approximately the width of the first rectangle which is 10 times the height to

first 10 seconds is approximately the width of the first rectangle which is 10 times the height to calculate the height we need to find the y-axis coordinate for where the top edge of the rectangle intersects the curve and that means we need to find the y-axis coordinate for this exponential distribution when time equals five so we plug x equals five into the equation and do the math and we get 0.04 so the height of the rectangle is 0.04 and the area of the rectangle is the height times the

0.04 so the height of the rectangle is 0.04 and the area of the rectangle is the height times the width which is 0.4 and that means the probability of meeting someone in the first 10 seconds is approximately 0.4 and compared to the exact probability calculated with the integral 0.39 the approximation is not terrible so let's put 0.4 inside the first rectangle so we don't forget likewise we use the exponential distribution to calculate the height for each rectangle and the probabilities for each

exponential distribution to calculate the height for each rectangle and the probabilities for each outcome bam now if we want to approximate the expected value of the exponential distribution we can plug the outcomes and their approximated probabilities into the equation for discrete outcomes for example the first outcome is meeting people in 10 seconds or less and the probability is 0.4 so the first term is 10 times 0.4 the second outcome is the 10 second interval that ends at 20 seconds and

first term is 10 times 0.4 the second outcome is the 10 second interval that ends at 20 seconds and the associated probability is 0.2 so the second term is 20 times 0.2 likewise we add the remaining terms and when we do the math we get 22 and that suggests that on average we expect to wait 22 seconds between each time we meet someone bam now if we want to improve our approximation we can cut the intervals in half so that each one lasts 5 seconds instead of 10. and when we do the math plugging

intervals in half so that each one lasts 5 seconds instead of 10. and when we do the math plugging in each outcome and its corresponding probability we get 21.8 now to improve the estimate of the expected value even more we can keep decreasing the width of each rectangle until the width of the rectangles goes to zero and the number of rectangles goes to infinity note when we have an infinite number of rectangles with zero width then we are no longer approximating the area under the curve but

of rectangles with zero width then we are no longer approximating the area under the curve but calculating it exactly now remember that the probability of observing a specific outcome is the height times the width of the associated rectangle and that the height the y-axis coordinate of the top of each rectangle is the likelihood at that point and the width can be written as delta x now if you remember from high school calculus if the sum of the number of rectangles goes to infinity while the

from high school calculus if the sum of the number of rectangles goes to infinity while the width of each rectangle delta x goes to zero then we end up with an integral now i know this is a huge mess of math so let's summarize everything when we have a discrete distribution like this the expected value of the corresponding discrete variable is the sum of the outcomes times their associated probabilities and when we have a continuous distribution like this then the expected value of the

probabilities and when we have a continuous distribution like this then the expected value of the corresponding continuous variable uses an integral instead of a sum and the rest of the equations are very similar except we replace the probability with the likelihood the y-axis coordinate note although we have been using the exponential distribution as an example this formula works for any continuous variable double bam now that we have a formula for the expected value for continuous variable

variable double bam now that we have a formula for the expected value for continuous variable let's calculate the expected value for a continuous variable from the exponential distribution since we use the exponential distribution equation to calculate the likelihoods let's plug it into the equation for the expected value and because the exponential distribution is defined for all values greater than or equal to zero we will integrate everything from zero to infinity now we just do the math

than or equal to zero we will integrate everything from zero to infinity now we just do the math first because we can split this into two functions we can use integration by parts to find the solution note if you are not familiar with integration by parts there are helpful links in the description below anyways we'll start by setting f of x equal to x now since integration by parts requires the derivative of f of x we will put that here now we'll set the derivative of g of x g prime of x to be

of f of x we will put that here now we'll set the derivative of g of x g prime of x to be equal to the second term in the integral and because we need g of x the antiderivative of g prime of x we need to figure it out now you might have an awesome strategy for finding anti-derivatives but i do not so i start by observing that the derivative of e to the x is e to the x which is close to what we want but among other things is missing the negative lambda in the exponent so let's put negative

we want but among other things is missing the negative lambda in the exponent so let's put negative lambda in the exponent to match what we want and the derivative via the chain rule is this negative lambda times e raised to the negative lambda x and that is almost the derivative we are shooting for except g prime of x does not have this negative sign so let's try putting a negative sign in front of the equation now when we take the derivative with the chain rule we get the same thing as g

of the equation now when we take the derivative with the chain rule we get the same thing as g prime of x so this equation must be the anti-derivative g of x small bam now we just plug these functions and their derivatives into the integration by parts formula first let's plug in f of x now let's plug in the derivative of f of x and since multiplying by one doesn't change anything we can omit it now let's plug in the derivative of g of x and lastly let's plug in g of x and move the minus sign

now let's plug in the derivative of g of x and lastly let's plug in g of x and move the minus sign outside of the parentheses now let's do some more math first let's tackle this term by evaluating it when x equals infinity and when x equals zero so we set x equal infinity then we subtract the term and set x equal to zero now since the exponent in the first term is negative we can turn it into a fraction however it's not obvious what this fraction is equal to 0 infinity a quick google search on

however it's not obvious what this fraction is equal to 0 infinity a quick google search on l'hopital's rule tells us that the limit as x goes to infinity of a of x divided by b of x is equal to the limit as x goes to infinity of a prime of x divided by b prime of x so in our case we have the limit as x goes to infinity of x divided by e raised to the lambda x then we take the derivatives of the numerator and the denominator and plug in infinity for x and that equals zero because we are

of the numerator and the denominator and plug in infinity for x and that equals zero because we are basically dividing one by infinity so we can replace the first term with zero and we can replace the second term with zero two because zero times anything is zero lastly zero minus zero is zero and we are done computing the first term of the integration by parts now let's compute the second term first we recognize that we are subtracting the second term from the first then we solve for the

first we recognize that we are subtracting the second term from the first then we solve for the antiderivative of the stuff inside the integral using the trial and error approach we saw earlier and evaluate it at infinity and zero just like before since the exponent in the first term is negative we can turn it into a fraction and one divided by infinity is zero now since the exponent in the second term is multiplied by zero the whole exponent is zero and anything raised to the zero power is one

term is multiplied by zero the whole exponent is zero and anything raised to the zero power is one and that leaves us with one divided by lambda lastly we commute this minus sign do the math and we see that the expected value is 1 divided by lambda so let's move this up here now given this specific exponential distribution where lambda equals 0.05 we calculate the expected value by plugging in 0.05 in for lambda and we see we expect to wait on average 20 seconds between meeting people so going

in for lambda and we see we expect to wait on average 20 seconds between meeting people so going back to the original question that statsquatch asked how long will we have to wait per person to see people we answer 20 seconds and then statsquatch says triple bam in summary the expected values for discrete and continuous variables are very similar the only two differences are one we replace the sum with the integral and two we replace the probability with the likelihood bam note if you would

sum with the integral and two we replace the probability with the likelihood bam note if you would like to know how we estimate the value for lambda with a pile of data check out the quest on the exponential distribution and maximum likelihood the link is in the description below also note if you watch this video hoping to learn exactly why we divide the sample variance by n minus 1 know that you have taken a big step towards understanding this mystery now it's time for some shameless

that you have taken a big step towards understanding this mystery now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stackquest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member

want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

stat quest is cool that's my opinion if you don't think so then your opinion is inversely correlated with mine stat quest hello and welcome to stat quest today we're going to talk about the binomial distribution in the binomial test and they're going to be clearly explained usually when people talk about the binomial distribution they talk about flipping a coin a coin usually has heads in at least one tail for example you can use the binomial distribution to find out the probability of getting

one tail for example you can use the binomial distribution to find out the probability of getting six heads in six tosses but who really cares about flipping coins what folks really want to know is whether or not people like orange Fanta more than grape Fanta which flavor reigned supreme or are they both equally loved to answer this question we can ask a bunch of people which flavor they prefer if everybody but one person said they liked orange Fanta more than grape Fanta then it would be

if everybody but one person said they liked orange Fanta more than grape Fanta then it would be pretty obvious what people liked most but what if four people say they like orange Fanta and three people say they'd like grape Fanta is that enough to be confident than most people like orange Fanta or could it be that people in general don't have a preference and these results are just due to random chance and a small sample size maybe if we surveyed another seven people we might only get three

chance and a small sample size maybe if we surveyed another seven people we might only get three people who like orange Fanta and for people who like grape Fanta to get to the bottom of this mystery we need to get a sense of what to expect if there is no preference then we determine if our survey results fit those expectations if not we can reject the idea that both Fantas are loved equally the binomial distribution will tell us what to expect if there is no preference to say the same thing

binomial distribution will tell us what to expect if there is no preference to say the same thing using statistics lingo we will use the binomial distribution aka this nasty looking thing to model what to expect when there is no preference then we'll see how well this model fits the data if the model is a poor fit we will reject the idea that both flavors are loved equally so let's start with a super simple example and assume that I asked three people if they liked orange Fanta more than grape

simple example and assume that I asked three people if they liked orange Fanta more than grape Fanta the first person we asked said they preferred orange Fanta the second person we asked also said they preferred orange Fanta in the third person we asked said they preferred grape Fanta if people really didn't prefer one flavor over the other then we will assume that there is a 50% chance they will pick orange and a 50% chance they will pick grape we can then calculate the probability of the

will pick orange and a 50% chance they will pick grape we can then calculate the probability of the first two people randomly choosing orange in the third person randomly choosing grape assuming that there is no real preference the probability of the first person preferring orange Fanta is 0.5 in the probability of the first two people preferring orange Fanta is 0.5 times 0.5 which equals 0.25 and the probability of the first two people preferring orange Fanta and the third person performing

and the probability of the first two people preferring orange Fanta and the third person performing grape is 0.5 times 0.5 times 0.5 which equals 0.125 note 0.125 is the probability of the first two people saying they prefer orange and the third person saying they prefer grape it is not the probability that any two out of three people would prefer orange let me explain it could have just as easily been that the first person said they preferred grape in this case the probability would still be

been that the first person said they preferred grape in this case the probability would still be 0.125 but we'd multiply the numbers together in a different order likewise if the second person said they preferred grape we just multiply the numbers together in a different order so all three of these combinations are equally likely and this means that the probability that any two out of three people prefer orange Fanta is the sum of the three possible orders so we just add the three probabilities

prefer orange Fanta is the sum of the three possible orders so we just add the three probabilities together in the probability that any two out of three people would randomly say they prefer orange Fanta is 0.375 alternatively we could have done the math using this nasty-looking formula X is the number of people who preferred orange Fanta in this case X equals 2 n is the total number of people we asked in this case n equals 3 note n minus X the total number of people we asked minus the number

asked in this case n equals 3 note n minus X the total number of people we asked minus the number of people who preferred orange Fanta equals the number of people who said they prefer grape Fanta P is the probability that someone will pick orange Fanta in this case P equals 0.5 note the probability that someone might prefer grape Fanta is 1 minus P together this says the probability of X the number of people who say to prefer orange Fanta given in the number of people we asked and P the

number of people who say to prefer orange Fanta given in the number of people we asked and P the probability of picking orange Fanta equals this nasty looking thing ooh it's got factorials don't freak out it looks fancy but it just boils down to the number of different ways two of three people could say they prefer orange Fanta when we did everything by hand we saw that there were three ways for two of three people to say they prefer orange Fanta and if we plug in N equals 3 and x equals 2 and

two of three people to say they prefer orange Fanta and if we plug in N equals 3 and x equals 2 and then just do the math we get three three ways that two out of three people could prefer orange Fanta just like when we did it by hand so this fancy thing is really no big deal the next part of the formula P to the X corresponds to the probability that orange Fanta was chosen two of the three times in other words P to the X just consolidates 0.5 times 0.5 into 0.5 squared the last part of the

in other words P to the X just consolidates 0.5 times 0.5 into 0.5 squared the last part of the equation corresponds to the probability that someone preferred grape Fanta remember that one minus P is the probability that someone prefers grape fine too and n minus X is the number of people that said they preferred grape Fanta if we plug in N equals three x equals two and P equals zero point five and then do the math we get zero point five so this term corresponds to the one person who liked

and then do the math we get zero point five so this term corresponds to the one person who liked grape Fanta thus these two parts of the equation correspond to zero point five times zero point five times zero point five and the nasty part just multiplies it by three now we can put all the parts together and plug in x equals to the number of people that preferred orange Fanta in equals three the number of people we asked and P equals 0.5 the probability someone would randomly pick orange Fanta

number of people we asked and P equals 0.5 the probability someone would randomly pick orange Fanta and we get the same probability that two out of three people would randomly prefer orange Fanta that we got when we did everything by hand 0.375 in other words the binomial distribution tells us that the probability that two of three people will prefer orange Fanta due to random chance is 0.375 BAM calculating the probability of three of three people saying they prefer orange Fanta by hand is

BAM calculating the probability of three of three people saying they prefer orange Fanta by hand is pretty easy since there is only one combination but we can just as easily use the fancy formula by plugging in x equals three and then we just do the math this term equals one since we are dividing three factorial by three factorial and this term is also equal one because anything raised to the zero power equals one and then we just keep doing the math and this means that the probability of three

power equals one and then we just keep doing the math and this means that the probability of three of three people randomly preferring orange Fanta is 0.125 which is exactly what we got when we did the calculations by hand now that we've seen that we can calculate probabilities with the binomial distribution let's go back to our original question if four people say they'd like orange Fanta and three people say they'd like grape Fanta can we conclude that people in general prefer orange Fanta

three people say they'd like grape Fanta can we conclude that people in general prefer orange Fanta now we plug in x equals for the number of people that preferred orange Fanta n equals 7 the number of people we asked and P equals 0.5 the probability someone would randomly pick orange Fanta and then just do the math and we get zero point two seven three the probability that four of seven people would randomly prefer orange Fanta double bam when you use a binomial distribution to calculate a

would randomly prefer orange Fanta double bam when you use a binomial distribution to calculate a p-value it's called a binomial test so what's the p-value for four out of seven people preferring orange Fanta the p-value is the probability of the observed data four of seven people prefer orange Fanta plus the probabilities of all other possibilities that are equally likely or rare this means we need to calculate these probabilities these are the observed results of our poll and these are rare

need to calculate these probabilities these are the observed results of our poll and these are rare possibilities and we also need to calculate the probabilities of these combinations these two possibilities for verses three and three versus four are equally rare if you don't believe me plug in the numbers and see the remaining possibilities are rare in other words by including possibilities when grape Fanta is preferred equally or more often we are calculating a two-sided p-value if this is

grape Fanta is preferred equally or more often we are calculating a two-sided p-value if this is blowing your mind don't freak out just watch the stat quests on p-values clearly explained and one and two sided p-values the links are in the description below we've already calculated the probability that four out of seven people prefer orange Fanta it's zero point two seven three for this we just set X to five and plug and chug and we get zero point one six four then we get zero point zero five

set X to five and plug and chug and we get zero point one six four then we get zero point zero five five and then we get zero point zero zero eight adding the probabilities together gives us 0.5 the probability that orange Fanta is preferred now we just plug and chug the numbers for when grape Fanta is preferred adding the probabilities together gives us 0.5 the probability that orange Fanta is not preferred the sum of the probabilities of all combinations of events that have an equal

is not preferred the sum of the probabilities of all combinations of events that have an equal probability or a rarer equals 0.5 plus 0.5 which equals 1 which means the p-value for 4 out of 7 people saying that prefer orange Fanta is 1 which means that the model the binomial distribution with P equals 0.5 ie orange Fanta and grape Fanta are both equally loved is a good fit for the observed data thus we conclude that given the sample size seven we cannot rule out the possibility that both orange

we conclude that given the sample size seven we cannot rule out the possibility that both orange Fanta and grape Fanta are equally loved think about that the next time you watch the World Series of baseball triple bam one last thing before we're done the binomial distribution only works when the probability that someone likes orange Fanta does not change if someone else already said they liked orange Fanta in other words if we asked a bunch of people if they liked orange Fanta and they all say

Fanta in other words if we asked a bunch of people if they liked orange Fanta and they all say yes then that should not affect the probability that the next person also likes orange Fanta hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you want to support stat quest well please click the like button below and consider buying one or two of my original songs alright until next time quest on you

even if you're not normal the average is normal hello I'm Josh starmer and welcome to stat Quest today we're going to talk about the central limit theorem and it's going to be clearly explained note for this stat quest to make any sense at all you should be familiar with the normal distribution if not check out the normal distribution clearly explained it would also be helpful if you were familiar with the concept of sampling from a statistical distribution if not check out sampling from a

with the concept of sampling from a statistical distribution if not check out sampling from a statistical distribution clearly explained the central limit theorem is the basis for a lot of statistics and the good news is that it's a pretty simple concept in this stat Quest I'll explain what the central limit theorem is and why it's important like most things in statistics I think the central limit theorem is easiest to understand if we look at some examples so let's start with a uniform

limit theorem is easiest to understand if we look at some examples so let's start with a uniform distribution this one goes from zero to one it's called The Uniform distribution because there is an equal probability of selecting values between 0 and 1. the probabilities are all equal and thus are uniform we can collect 20 random samples from this uniform distribution and then calculate the mean of the samples and on the right we can draw a histogram of the mean value since we only have one mean

the samples and on the right we can draw a histogram of the mean value since we only have one mean value the histogram isn't very interesting but after we collect 10 more samples and collect 10 more means the histogram starts to look a little more interesting here's the histogram after collecting 20 samples and calculating 20 means 30 mains 40 means 50 means 60 means 70 means 80 means 90 means and 100 means after adding 100 means to the histogram it's pretty easy to see that these means are

and 100 means after adding 100 means to the histogram it's pretty easy to see that these means are normally distributed however to make it easy to see that the means are normally distributed we can overlay a normal distribution you might have noticed that in the last two slides I put means are normally distributed in bold I did this because this is what the central limit theorem is all about even though these means were calculated using data from a uniform distribution the means themselves are

though these means were calculated using data from a uniform distribution the means themselves are not uniformly distributed instead the means are normally distributed bam here's another example this time we'll start with an exponential distribution just like before we can collect 20 random samples from this exponential distribution and just like before we can calculate the mean of the 20 samples and lastly we can draw a histogram of that mean over here on the right after we collect 10 samples

and lastly we can draw a histogram of that mean over here on the right after we collect 10 samples and Calculate 10 means the histogram starts to look a little more interesting here's the histogram after 20 means 30 means 40 means 50 means 60 means 70 means 80 means 90 means and 100 means after adding 100 means to the histogram we can see that they are normally distributed even though these means were calculated using data from an exponential distribution the means themselves are not

means were calculated using data from an exponential distribution the means themselves are not exponentially distributed instead the means are normally distributed [Music] so far we have seen that the means calculated from samples taken from a uniform distribution are normally distributed and means calculated from samples taken from an exponential distribution are also normally distributed well it turns out that it doesn't matter what distribution you start with if you collect samples from

it turns out that it doesn't matter what distribution you start with if you collect samples from those distributions the means will be normally distributed yes there's a little asterisk here that means there's some fine print that will come later for now just know it's really fine print and not worth spending too much time worrying about double bam cool but what are the practical implications of knowing that the means are normally distributed when we do an experiment we don't always know what

knowing that the means are normally distributed when we do an experiment we don't always know what distribution our data comes from to this the central limit theorem says who cares the sample means will be normally distributed because we know that the sample means are normally distributed we don't need to worry too much about the distribution that the samples came from we can use the means normal distribution to make confidence intervals do t-tests where we ask if there's a difference between

distribution to make confidence intervals do t-tests where we ask if there's a difference between the means from two samples and Anova where we ask if there is a difference among the means from three or more samples in pretty much any statistical test that uses the sample mean triple bam note out there in the wild some folks say that in order for the central limit theorem to be true the sample size must be at least 30. this is just a rule of thumb and generally considered safe however as you

size must be at least 30. this is just a rule of thumb and generally considered safe however as you can see in the examples here where I use a sample size of 20 the rule was meant to be broken here's the fine print in order for the central limit theorem to work at all you have to be able to calculate a mean from your sample off the top of my head I can think of only one distribution the Koshi distribution that doesn't have a sample mean and after doing biostatistics for 20 years I've never come

that doesn't have a sample mean and after doing biostatistics for 20 years I've never come across it in practice that said if you know of distributions that don't have means put them in the comments below and tell us what they're used for I'm curious about how common this occurs hooray we've made it to the end of another exciting stat Quest if you like this stat Quest and want to see more of them please subscribe and if you want to support stack Quest well consider buying one or two of my

them please subscribe and if you want to support stack Quest well consider buying one or two of my original songs alright until next time Quest on

Steff quest is not far away Stan Quest is here to stay Stan quest hello I'm Josh stormer and welcome to stack quest stack quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about technical biological and other replicates and they're going to be clearly explained let's start off with some dude and let's take a blood sample from that dude and using that sample let's measure gene expression and

let's take a blood sample from that dude and using that sample let's measure gene expression and let's measure it again and again and again these are technical replicates because every single experiment is performed on the exact same sample technical replicates give us two things one they give us an accurate measurement of this dudes gene expression if we wanted to tell a story about just this dude and we didn't want to generalize a result to a broader population technical replicates would be

and we didn't want to generalize a result to a broader population technical replicates would be the way to go technical replicates also tell us how accurately were measuring gene expression if the numbers were way different after each technical replicate we would know not to trust any single measurement if we wanted to publish a paper about how awesome our new method is we'd use technical replicates here's another example again we start with some dude however now we take three samples at the

here's another example again we start with some dude however now we take three samples at the same time and we measure the gene expression in each individual sample these are still considered technical replicates because they only tell us about an individual however these tell more of a story about the individual than the method this is because there can be variation in the samples that the method is not responsible for now let's look at taking samples from three dudes we've got some dude some

is not responsible for now let's look at taking samples from three dudes we've got some dude some other dude and some other dude once we get the samples we measure gene expression in each one these are biological replicates because each measurement comes from a different sample that comes from a different dude biological replicates tell us about the gene expression in a group of dudes or animals or plants or cell lines etc this particular experiment tells us about gene expression in dudes it

or plants or cell lines etc this particular experiment tells us about gene expression in dudes it doesn't tell us about gene expression in ladies if I only wanted my result to tell a story about dudes because I'm interested in gene expression from the y-chromosome then this would be fine but if I wanted to have a result that generalized to dudes and ladies I would need to measure gene expression in ladies too the same thing can be said about different ethnicities if I only measure gene

in ladies too the same thing can be said about different ethnicities if I only measure gene expression in blue dudes then my result would only tell a story about blue dudes and not orange or green dudes or dudes in general you can mix biological and technical replicates but the wisdom of doing this depends on the type of experiment sometimes you get more bang for your buck if you add more biological replicates and ignore technical replicates for example when doing RNA seek it's better to do

replicates and ignore technical replicates for example when doing RNA seek it's better to do biological replicates rather than technical replicates I have a stat quest that explains why this is so check it out fundamentally it depends on how much is already known about the type of experiment you want to perform in summary technical replicates are just repetition of the same experiment on the same person that means we can take one sample from one person and do a bunch of replicates on that one

person that means we can take one sample from one person and do a bunch of replicates on that one sample or we could take a bunch of samples from that one person and do experiments on each sample in both cases there technical replicates biological replicates use different biological sources of samples ie different people different plants or different cell lines decide which story you want to tell to determine what types of replicates you need to perform do you want to talk about an individual

to determine what types of replicates you need to perform do you want to talk about an individual or a method use technical replicates do you want to talk about a group use biological replicates hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you have any suggestions for future stat quests well put them in the comments below until next time quest on

whoa whoa whoa damn quistis movin whoa whoa whoa whoa dad Quest is on the move hello I'm Josh stormer and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about sample size and effective sample size they're gonna be clearly explained this stat quest builds on what we learned in the stat quest on technical and biological replicates so if you're not already familiar

learned in the stat quest on technical and biological replicates so if you're not already familiar with those concepts you better check that stat quest out ASAP let's start with a simple example let's imagine we are interested in testing a hypothesis about gene expression in blue dudes if you're a mouse geneticist you can think of blue dudes as a specific strain of mouse if you're interested in trees you can think of blue dudes as a specific type of tree we start with a blue dude and then we

trees you can think of blue dudes as a specific type of tree we start with a blue dude and then we take a blood sample and then we use that blood sample to measure gene expression then we do the same thing with another blue dude and then lastly we do the same thing with a third blue dude we've got measurements from three separate blue dudes since we're interested in reporting gene expression in blue dudes n equals three wherein is shorthand for sample size on the other hand if we're interested

dudes n equals three wherein is shorthand for sample size on the other hand if we're interested in reporting gene expression in blue ladies then N equals zero duh if we measure gene expression twice in each blue dude and we still wanted to report a result that applied to dudes the sample size would still be three these pairs of measurements are technical replicates and tell us about the accuracy of our method for measuring gene expression they don't tell us about differences between blue dudes

of our method for measuring gene expression they don't tell us about differences between blue dudes if we were interested in describing the accuracy of our method for measuring gene expression and were not interested in describing dudes then we would count the technical replicates in this case N equals four technical replicates only count when we want to describe a method and not people or mice or something else so far so good everything is pretty straightforward now let's look at something a

or something else so far so good everything is pretty straightforward now let's look at something a little more complicated let's imagine we wanted to test a hypothesis that applied to dudes in general not just blue dudes in this case it is important that in addition to blue dudes we measure orange dudes and green dudes and here in equals 3 still no big deal but what if the blue dude had a twin and we added that due to the study and we measured his gene expression what's the sample size now is

we added that due to the study and we measured his gene expression what's the sample size now is it 3 or 4 it's actually somewhere in between while these twins are clearly two different and separate people their genomes are the same and thus their gene expression will be highly correlated compared to the other dudes in the study if we know or can calculate the correlation between the twins we can calculate their effective sample size for example suppose we calculated the correlation between the

calculate their effective sample size for example suppose we calculated the correlation between the twins to be 0.7 the equation for the effective sample size is the number of samples divided by one plus the number of samples minus one times the correlation so we plug in the numbers for the number of samples and the correlation and then we do the math we end up with 1 point 1 8 when the correlation is high between the twins instead of being counted as two people they are counted as one point 1

is high between the twins instead of being counted as two people they are counted as one point 1 8 people now let's see what happens when the correlation is low this time it's equal to 0.1 again we can use the equation for the effective sample size to figure out how many people these two people actually are first plug in the numbers then do the math in this case we got 1 point 8 2 just a little bit less than 2 when the correlation is low between the twins they almost count as much as two people

less than 2 when the correlation is low between the twins they almost count as much as two people in practice calculating the effective sample size can be more complicated but you get the general idea samples that are highly correlated don't count as individual samples in summary if we want to report about the accuracy of a method the sample size is just the number of technical replicates in this case N equals 3 if we want to report about blue dudes or a specific strain of mouse or tree or

this case N equals 3 if we want to report about blue dudes or a specific strain of mouse or tree or whatever then the sample size is the number of blue dudes in this case N equals 3 if we want to report about all kinds of dudes or all kinds of mice we need to take correlations into account when calculating the sample size if the correlation between blue dudes is 0.7 the effective sample size is three point one eight if the correlation between blue dudes is zero point one the effective sample

three point one eight if the correlation between blue dudes is zero point one the effective sample size is three point eight two hooray we made it to the end of another exciting stack quest if you like this stack quest and want to see more of them please subscribe and if you have any suggestions for new stack quests put them in the comments below I'd love to hear them until next time quest on

hello and welcome to another stat quickie this time we're going to talk about the standard deviation versus the standard error these terms are often confused so let's clear them up once and for all I think the easiest way to understand the differences between the standard deviation and the standard error is to look at an example for the sake of this example imagine we weighed five mice this is the average or mean of the values we measured this is the standard deviation on both sides of the mean

average or mean of the values we measured this is the standard deviation on both sides of the mean it quantifies how much the data are spread out now imagine we did the exact same experiment weighed five mice five separate times using different mice each time this would result in five means or averages one for each set of measurements we would also have five separate standard deviations around the means one for each set of measurements they quantify how much the measurements are spread around

means one for each set of measurements they quantify how much the measurements are spread around their means here's what it would look like if we plotted all five means on the same number line This is the mean of the means and this is the standard deviation on both sides of the mean of the means it's a little bit of a tongue twister there the standard deviation of the means is called the standard error and that's all there is to it it's just that simple now let's summarize the differences

error and that's all there is to it it's just that simple now let's summarize the differences between the standard deviation and the standard error the standard deviation quantifies the variation within a set of measurements the standard error quantifies the variation in the means from multiple sets of measurements the confusing thing is that the standard error can be estimated from a single set of measurements even though it describes the means from multiple sets thus even if you only have a

of measurements even though it describes the means from multiple sets thus even if you only have a single set of measurements you are often given the option to plot the standard error in almost all cases you should plot the standard deviation since graphs are usually intended to describe the data that you measured for more information on standard errors check out the stack Quest on standard errors also the stack Quest on pval pitfalls and power calculations I've provided links to those in the

also the stack Quest on pval pitfalls and power calculations I've provided links to those in the description below all right we made it to the end hooray tune in next week for another stat quickie

stat Quest stat Quest stat Quest hello and welcome to stat Quest this time we're going to talk about standard errors and we're also going to have a bootstrapping bonus we'll start by talking about error bars which are very closely related to standard errors for example you might collect measurements from three samples labeled a b and c and plot them on a scatter plot just like we see here you could then calculate the means for the three data sets and we've Illustrated those here with three green

then calculate the means for the three data sets and we've Illustrated those here with three green horizontal bars approximately halfway up the clusters of data points after that we could calculate the standard deviations and add those to the graph and we've shown those here with red error bars in manuscripts and presentations people often don't display the original data but instead just show the mean and the standard deviation in what's called a dynamite plot because each column in the plot

mean and the standard deviation in what's called a dynamite plot because each column in the plot looks like it's the igniter for a stick of dynamite there are three common types of error bars the first type are standard deviations which we just saw and I'm sure you're all familiar with these tell you how the data are distributed around the mean big standard deviations tell you that some of the data points were pretty far from the mean in most cases you want to use standard deviations in your

data points were pretty far from the mean in most cases you want to use standard deviations in your graphs since it tells us about your data the data points that you collected yourself the second type of error bar comes from standard errors these tell you how the mean is distributed not just the data but the means which sounds crazy but it'll become clear once I draw some pictures the third common type of error bar are confidence intervals and these are related to standard s confidence

common type of error bar are confidence intervals and these are related to standard s confidence intervals will be explained more in a future stat Quest since this stat Quest is all about standard errors that's what we're going to talk about let's start by considering a normal distribution in this case we can imagine that we weighed a lot of mice and plotted the distribution of differences from the mean the Y AIS is the proportion of the mice that we weighed and the x axis is the difference

the mean the Y AIS is the proportion of the mice that we weighed and the x axis is the difference from the mean most of the mice had weights close to the average a few of the mice weighed much less than the average mouse and a few other mice weighed much more than the average Mouse usually you can't afford to measure the weight of all the mice so you just take a sample in this example we'll just assume we took five measurements from the population rather than measuring all the mice since most

assume we took five measurements from the population rather than measuring all the mice since most of the mice have weight close to the average most of our samples are going to be close to zero now just like we always do we can calculate the mean and standard deviation from our sample in this case the mean of our sample is minus point2 and the standard deviation is 1.92 3 and we can plot the mean and standard deviation on our graph as the mean plus or minus the standard deviation around the

and standard deviation on our graph as the mean plus or minus the standard deviation around the mean and for all you stat questers out there here's a rule of thumb remember that one standard deviation on each side of the mean is supposed to cover about 68% of the data two standard deviations on each side of the mean is supposed to cover about 95% of the data this will come in handy later the mean is now a lighter color because we're going to take additional samples and overlay additional means

is now a lighter color because we're going to take additional samples and overlay additional means and standard deviations on this same graph here we've taken other five measurements and from those five measurements we've calculated the mean and the standard deviation and here we've plotted that mean plus or minus one standard deviation on each side and now we take another five measurements this is the first sample where one of the measurements is relatively extreme however that one measurement

the first sample where one of the measurements is relatively extreme however that one measurement doesn't sway the mean that far from zero that is to say the means are relatively close to each other compared to the raw data this is because for a mean to be far from the middle most if not all of the raw data points would have to be in a single cluster that is far away from the metal for example the sample of purple points all form a cluster that are far from the middle this could happen but very

sample of purple points all form a cluster that are far from the middle this could happen but very rarely what's much more likely is to have a sample where most of the points are close to zero and only one or two are far away so far we've shown that you can calculate the standard deviations for each sample but now that we have three means we can also calculate the standard deviation of those means because one standard deviation will cover 68% of the values and two will cover 95% of the values

because one standard deviation will cover 68% of the values and two will cover 95% of the values the standard deviation of the means won't be as wide as the standard deviations of the data here we've plotted the mean of the means plus or minus one standard deviation of the means notice that this standard deviation is much smaller than the standard deviations we got from the individual samples the standard deviation of the mean is called the standard error of the mean or more simply the standard

standard deviation of the mean is called the standard error of the mean or more simply the standard error the standard error gives us a sense of how much variation we can expect in our means if we took a bunch of independent five measurement samples so to review this is how we calculate the standard error of the mean first you take a bunch of samples each with the same number of measurements or n in this case n equals 5 the second step is to calculate the mean for each sample here we've

or n in this case n equals 5 the second step is to calculate the mean for each sample here we've calculated the mean and standard deviation for each sample but for the standard error all we need to do is calculate the mean once we've calculated the means for each sample we can calculate the standard deviation of the means in this case the standard error equals 0.86 here we notice that the standard error is much less than the standard deviations because the means aren't as widely dispersed as

error is much less than the standard deviations because the means aren't as widely dispersed as the raw data we've shown how to calculate the standard error of the mean but there are other standard errors for example we can also take the standard deviation of the standard deviations this is called the standard error of the standard deviations which I guess is to avoid a tongue twister it tells us how the standard deviations of multiple samples are dispersed you can calculate the standard

us how the standard deviations of multiple samples are dispersed you can calculate the standard deviation of any statistic for example the median the mode percentiles or anything anything that you can calculate for multiple samples you just calculate the standard deviation and then you have the standard error of that so if we calculated many medians we could calculate the standard deviation of those medians and we' have the standard error of those medians to summarize everything we've talked

those medians and we' have the standard error of those medians to summarize everything we've talked about so far know that the Standard air is just the standard deviation of multiple means taken from the same population so if there's a population and we can take a bunch of different samples from it all we have to do to get the standard error is to calculate the standard deviation of the memes of each sample well at this point you might be wondering if we can calculate standard errors without

each sample well at this point you might be wondering if we can calculate standard errors without spending a lot of time and money on doing the same experiment a bunch of times the good news is the answer is yes in rare cases there's a formula you can use to estimate it the standard area of the mean is one the formula for that is very simple it's just the standard deviation divided by the square root of the sample size however there aren't many other cases the good news again is that we can use

of the sample size however there aren't many other cases the good news again is that we can use something called bootstrapping for everything else every time we don't have a simple formula we can bootstrap it the nice thing about bootstrapping is it's very simple conceptually and it's easy to make a computer do this work here's a bootstrapping example just like before we have an experiment where we took five measurements as an aside usually for bootstrapping it's good to have 10 or more

where we took five measurements as an aside usually for bootstrapping it's good to have 10 or more measurements in a single experiment now we bootstrap our data with the following steps first we pick a random measurement from the sample that we just took this random measurement isn't a new measurement that we haven't taken before it's not a new number that we haven't seen it's part of the sample that we already have now we just write that value down in this case it's 1.43 in step three we just

that we already have now we just write that value down in this case it's 1.43 in step three we just go back to step one and pick a new random measurement and write that value down and we do that five times our second measurement is - 1.38 the third measurement is - 3.11 our fourth measurement is 1.43 we've already picked that measurement before but that's okay when you're bootstrapping you just pick five measurements from your sample and it doesn't matter if you've picked the same one before

pick five measurements from your sample and it doesn't matter if you've picked the same one before our last measurement is minus 0.10 step four in bootstrapping is to calculate the mean median mode or whatever the statistic it is we're interested in understanding the standard error of and we calculate that with our sample in this case we're interested in the standard error of the mean so all we do is calculate the mean from our new boot bootstrap sample the fifth step is to go all the way back

is calculate the mean from our new boot bootstrap sample the fifth step is to go all the way back to the beginning step one and repeat that until you have a lot of means or medians or whatever you're interested in calculating the standard error of the sixth and final step in the bootstrapping procedure is to Simply calculate the standard deviation of all the means that we generated in steps 1 through five that's all there is to it in this case we calculated the standard error of the mean and

five that's all there is to it in this case we calculated the standard error of the mean and we've plotted it as a black line in the graph so if there's no fancy formula to help us calculate the standard error we can do it ourselves from scratch we can just use bootstrap and get the job done and that's it in this stat Quest we learned that the standard error is a measure of how we might expect the means from many different samples to vary from one sample to another we also learned that if we

the means from many different samples to vary from one sample to another we also learned that if we don't have a fancy formula for calculating the standard error we can do it ourselves using bootstrapping okay so tune in next time and we'll talk about how to use bootstrapping to calculate confidence intervals and that's when things get really cool

bootstrap in part two calculate p value statquest hello i'm josh starmer and welcome to statquest today we're going to talk about bootstrapping part 2 calculating p-values note this stack quest assumes that you are already familiar with the main ideas behind bootstrapping if not check out the quest this stack quest also assumes that you are familiar with hypothesis testing the null hypothesis and p-values if not check out the quests in bootstrapping part one we had a new drug to treat an illness

if not check out the quests in bootstrapping part one we had a new drug to treat an illness and we gave that drug to eight different people that had the illness and we calculated the mean value 0.5 but because of random things like maybe these people were healthier to begin with we were unsure if the drug actually worked and that maybe we got 0.5 instead of zero because of random stuff we cannot control ultimately we used bootstrapping to solve this problem first we showed the four steps of how

ultimately we used bootstrapping to solve this problem first we showed the four steps of how bootstrapping works one make a bootstrapped data set two calculate a statistic in this example we calculated the mean but we could have just as easily calculated the median or the standard deviation etc three keep track of that calculation and four repeat the first three steps until we have a nice distribution of bootstrapped statistics we then used the distribution of means to create a 95 confidence

of bootstrapped statistics we then used the distribution of means to create a 95 confidence interval for the original mean value and because the 95 confidence interval covers zero we could not reject the idea that the drug is not doing anything bam confidence intervals are great for hypothesis testing but so are p-values so now let's talk about how to use bootstrapping to calculate p-values first the null hypothesis is that the drug has no effect on the illness and that means in a perfect world

the null hypothesis is that the drug has no effect on the illness and that means in a perfect world where we can control everything if the null hypothesis was true then we would expect the mean value of the data to be zero however when we calculate the mean we get 0.5 so let's shift all of the measurements to the left 0.5 units so that the mean of the shifted data is 0. in other words this shifted data set with mean equal to 0 represents a true null hypothesis now let's use bootstrapping to see

data set with mean equal to 0 represents a true null hypothesis now let's use bootstrapping to see how the mean value varies when the null hypothesis is true first let's make a new number line and from the eight measurements that were centered on zero create a bootstrapped data set remember we sample with replacement so it's okay to get duplicates now we calculate the mean value of the bootstrapped data set and add it to our histogram then we just repeat the process a few thousand times until

data set and add it to our histogram then we just repeat the process a few thousand times until we have a nice distribution of mean values now because we created the bootstrap data sets from a collection of measurements with mean equal to zero the histogram gives us a sense of what would happen if the null hypothesis was true and the drug had no effect when the null hypothesis is true 36 percent of the means are between negative 0.5 and 0.5 and that tells us that the probability of observing a

of the means are between negative 0.5 and 0.5 and that tells us that the probability of observing a mean value between negative 0.5 and 0.5 is 0.36 likewise because 16 of the bootstrap means were less than or equal to negative 0.5 the probability of observing a mean less than or equal to negative 0.5 is 0.16 lastly because 48 of the bootstrap means were greater than or equal to 0.5 the probability of observing a mean greater than or equal to 0.5 is 0.48 now let's go back to the original data

of observing a mean greater than or equal to 0.5 is 0.48 now let's go back to the original data and remember that the original mean was 0.5 now because this distribution represents possible values for the mean if the drug on average made zero difference on how people felt we can use it to calculate the p-value for observing a mean value of 0.5 or something more extreme where more extreme means further from the null hypothesis than the observed mean which in this case means further than 0.5

further from the null hypothesis than the observed mean which in this case means further than 0.5 units from 0. so the p-value for the observed mean 0.5 is the probability of observing a bootstrapped mean greater than or equal to 0.5 which is 0.47 plus the probability of observing a bootstrap mean less than or equal to negative 0.5 which is 0.16 adding the two probabilities together gives us 0.63 and because 0.63 is greater than 0.05 we fail to reject the hypothesis that the drug makes no

0.63 and because 0.63 is greater than 0.05 we fail to reject the hypothesis that the drug makes no difference double bam note the method we use to calculate this p-value start with raw data calculate the mean and then shift the data so that the mean equals zero and then use bootstrapping to create a histogram of means around zero and then use that histogram to test the hypothesis that the drug made zero difference will work for just about any statistic we can think of for example we could have

zero difference will work for just about any statistic we can think of for example we could have just as easily calculated the median of the original data and shifted the data so that the median equals zero and then use bootstrapping to generate this histogram of median values around zero and use the histogram to calculate the p-value for the observed median given the hypothesis that the drug has zero effect in this case the observed median is 1.8 so the p-value for the observed median 1.8

has zero effect in this case the observed median is 1.8 so the p-value for the observed median 1.8 given this histogram that represents the hypothesis that the drug has zero effect is the probability of observing a bootstrap median greater than or equal to 1.8 which is 0.01 plus the probability of observing a bootstrap median less than or equal to negative 1.8 which is 0.19 and when we do the math we get 0.2 so again we would fail to reject the hypothesis that the drug has zero effect but this

we get 0.2 so again we would fail to reject the hypothesis that the drug has zero effect but this time we use medians instead of means and the point of this example is that we can use bootstrapping to test whatever we want thus if the data looks like it has outliers we can use medians which are more resilient to outliers than means triple bam now it's time for some shameless self-promotion if you want to review statistics and machine learning offline check out the stack quest study guides at

want to review statistics and machine learning offline check out the stack quest study guides at statquest.org there's something for everyone hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below

hello and welcome to another stat quickie today we're going to talk about pie charts versus bar charts I typically prefer that if you're going to if you want to present data as a pie chart that what you do is you use a bar chart instead and so to keep this quick I'm just going to show you some examples of why I think a bar chart is better than a pie chart here's a pie chart showing how much Herman sleeps Works eats and rests what I don't like about this chart is it's hard to tell how much more

sleeps Works eats and rests what I don't like about this chart is it's hard to tell how much more time Herman spends sleeping or working they both look very similar in size with a bar chart it's obvious that Herman spends an hour more working each day than he spends sleeping we can also easily see that he spends an hour more resting than eating the bar chart makes this obvious with two pie charts the data become even more difficult to interpret here we have Herman versus Earl here's a question

the data become even more difficult to interpret here we have Herman versus Earl here's a question does Earl work more than Herman and if so how much more with pie charts this question is surprisingly difficult to answer in contrast with a Bart chart it's much easier to answer this question and others like it here we see that Herman sleeps about 30 minutes longer than Earl we also see that Herman Works about 40 minutes longer than Earl Earl eats for an hour longer than Herman and Earl also

Works about 40 minutes longer than Earl Earl eats for an hour longer than Herman and Earl also rests an hour longer than her terine this is why I like bar charts more than pie charts so next time you're thinking about drawing a pie chart consider drawing a bar chart instead it saves space and it's easier to interpret all right that's it for this stat quickie tune in next time

Stan's quest is so cool when you watch it you're no fool that's what makes it cool hello and welcome to stack quest stack quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about box plots box plots are bad to the bone check them out sometimes box plots are called box and whisker plots here's the box and here the whiskers the line in the middle of the box is the median value 50% of the data

the box and here the whiskers the line in the middle of the box is the median value 50% of the data is above the median 50% of the data is below the media medians are useful because they're not as swayed by outliers as the typical mean or average is George Carlin host of the children's television show shining time station once said think of how stupid the average person is and realize that half of them are stupider than that I think mr. Carlin was referring to the median not the average but

of them are stupider than that I think mr. Carlin was referring to the median not the average but that's okay it's still funny within the box itself we have 25% of the data above the median at 25% of the data below the median so 50% of the data is within the box outliers are plotted as dots beyond the whiskers totes bad-to-the-bone it's common to overlay the original data onto the box plots now it's easy to see that this guy didn't get many measurements and this guy got tons of measurements

it's easy to see that this guy didn't get many measurements and this guy got tons of measurements this means we'll be more confident in the statistics calculated from this guy super totes bad-to-the-bone bask in the awesomeness of boxplots compared to the traditional bar plots both graphs show the exact same data hooray we've made it to the end of another exciting stat quest tune in next time for another fun adventure if you'd like what you've seen and want to see more of it please subscribe

another fun adventure if you'd like what you've seen and want to see more of it please subscribe and if you have something specific that you'd like to learn more about just put it in the comments below

[Music] Oh stat quest hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about logs and we're going to do everything we can to make sure that they're clearly explained let's start with an ordinary number line going from zero to eight it's no big deal eight four two and one are all easily re-written as powers of two the other numbers on the number line like

two and one are all easily re-written as powers of two the other numbers on the number line like seven six or five they can also be written as powers of two it just isn't as neat and tidy even pie can be written as a power of two now let's convert this access into a log base two access to do that you take the log base two of the numbers on the Left let's see how that's done and to do that let's start at the top so we'll take the log base two of eight the first and really only step in

let's start at the top so we'll take the log base two of eight the first and really only step in calculating a log is to simply rewrite the number as a power of two in this case we rewrite 8 as 2 to the third the log base 2 of 2 to the third is just the exponent you need to raise to by in order to get 8 in this case the exponent is 3 so the log base 2 of 2 to the 3 equals 3 the log function just isolates the exponent and that means that 3 is the log base 2 equivalent of 8 on our log base 2

isolates the exponent and that means that 3 is the log base 2 equivalent of 8 on our log base 2 access now let's take the log base 2 of 4 first we rewrite 4 as a power of 2 and the log function just isolates the exponent since 2 is the exponent the log base 2 of 2 to the 2 equals 2 and thus 2 is the log base 2 equivalent of the number 4 on our log axis now let's take the log base 2 of 2 we rewrite 2 as a power of 2 so in this case that's just 2 to the 1 and again the log function just isolates

2 as a power of 2 so in this case that's just 2 to the 1 and again the log function just isolates the exponent thus one is the log base 2 equivalent of the number 2 now we take the log base 2 of 1 again say it with me the log function just isolates the exponent in this case the exponent equals 0 so the log base 2 of 1 equals 0 and thus 0 is the log base 2 equivalent of the number 1 great we've got the top half of our log base 2 scale worked out now let's work out the bottom half on our normal

the top half of our log base 2 scale worked out now let's work out the bottom half on our normal number line we have one half one half can be re-written as a power of two this means that the log base 2 of 1/2 is the same as taking the log base 2 of 2 to the negative 1 guess what the log function is just about to do isolate the exponent boring we already know about this we know that the log function isolates the exponent BAM negative 1 is the log base 2 of 1/2 okay now we've got 1 over 4 on our

isolates the exponent BAM negative 1 is the log base 2 of 1/2 okay now we've got 1 over 4 on our number line and 1/4 can be re-written as a power of 2 2 to the negative 2 so the log base 2 of 1/4 equals the log base 2 of 2 to the negative 2 isolate the exponent double BAM and thus negative 2 is the log base 2 equivalent of 1/4 so now you get the idea the log function just isolates the exponent so for 1 over 8 if we can rewrite that as a power of 2 which we can because we can rewrite any number

for 1 over 8 if we can rewrite that as a power of 2 which we can because we can rewrite any number as a power up to we have the log base 2 of 2 to the negative 3 which equals the exponent negative 3 and negative 3 then is the equivalent on the log to scale of 1 over 8 notice how much space is between 1 and 8 and how little space is between 1 & 1 over 8 a measurement way up here is 8 times greater than 1 and a measurement down here is 8 times less than 1 even though both measurements represent

than 1 and a measurement down here is 8 times less than 1 even though both measurements represent the same magnitude in full change relative to 1 the distance from 1 is not symmetric in contrast the magnitude is equidistant on the log access this is why fold changes should always be plotted on log axes so the take-home message so far is 1 logs isolate expo for example the log base 2 of 8 equals the log base 2 of 2 to the 3rd and if you isolate the exponent you get 3 the other part of the

the log base 2 of 2 to the 3rd and if you isolate the exponent you get 3 the other part of the take-home message is that you should use a log scale or access when talking about fold change this puts positive and negative fold changes on a symmetric scale eight fold up is the same distance from zero as eight fold down here's the weird thing there is no value for log base 2 of zero this is because there is no exponent X for 2 such that 2 to the x equals zero if we set X to negative 1000 we just

there is no exponent X for 2 such that 2 to the x equals zero if we set X to negative 1000 we just get 1 over 2 to the 1000th this is a tiny number but it's still greater than 0 if we set X to negative 1 million we just get 1 over 2 to 1 million this is a super tiny number but it's still greater than 0 just so you know our a programming language that a lot of people used to do stats and I'd be willing to guess that most other programming languages do the same thing defines log base 2 of 0 to be

to guess that most other programming languages do the same thing defines log base 2 of 0 to be equal to negative infinity intuitively this makes sense because 1 over 2 to infinity equals the smallest number you can imagine and in my mind the smallest number I can imagine is 0 here's an example of when using log base 2 is super cool qPCR or real-time PCR if you don't know what PCR is don't worry about it just imagine that it's a process where after each step whatever it's measuring doubles the

about it just imagine that it's a process where after each step whatever it's measuring doubles the log base 2 makes sense with this data because each time the machine goes through a cycle the number of PCR products doubles the first time we do the qPCR we get a baseline for the number of transcripts for a gene we'll set this to 1 in log base 2 land 0 becomes our baseline this is because the log base 2 of 2 to the 0 equals 0 the second time we do the qPCR the machine says there are twice as

base 2 of 2 to the 0 equals 0 the second time we do the qPCR the machine says there are twice as many transcripts as the first time in other words the difference between the first and second runs was one cycle in the machine the third time we do the qPCR the machine says there are eight times as many transcripts as the first time in other words there was a difference of three cycles between the first run and the last run now here's a question what's the average of the three runs the average is

run and the last run now here's a question what's the average of the three runs the average is 3.7 if we look at the quantities of transcripts the average is 1.3 if we look at the differences in cycles if we raise two by 1.3 the mean of the logs to convert back to normal numbers we get to to the 1.3 equals 2.5 the mean calculated with the logs is less than the one calculated with normal numbers because it wasn't as swayed by the third run when we got eight times as many transcripts that third

because it wasn't as swayed by the third run when we got eight times as many transcripts that third run is a bit of an outlier and the mean of the logs called the geometric mean is more robust to the effects of outliers than the mean of normal numbers the geometric mean is useful for qPCR since every cycles doubles the amount of transcripts this makes it easy to get outliers now that we know all about log scales let's really briefly talk about arithmetic with logs let's start with normal

all about log scales let's really briefly talk about arithmetic with logs let's start with normal multiplication two times four equals eight no big deal we already saw how two four and eight can be re-written as powers of two when we express numbers as powers of two instead of multiplying the numbers we simply add their exponents multiplying numbers is the same as adding their exponents after converting the numbers to powers of two this works even when the numbers aren't power of two friendly

the numbers to powers of two this works even when the numbers aren't power of two friendly first you rewrite the numbers as powers of two and then we add the exponents together again multiplying numbers is the same as adding their exponents after converting the numbers to powers of two now let's talk about the log base 2 of 2 times 4 and the log base 2 of 3 times 5 I'll give you a hint logs just isolate exponents we'll start with the power of 2 friendly numbers first we just wrap everything up

isolate exponents we'll start with the power of 2 friendly numbers first we just wrap everything up in log base 2 functions second we rewrite the numbers as powers of 2 just like a normal multiplication we add the exponents together the log function just isolates the exponents this shows that the log of multiplied exponents now let's look at numbers that are not power of two friendly first wrap everything up in log base two functions then rewrite the numbers as powers of two add the exponents

everything up in log base two functions then rewrite the numbers as powers of two add the exponents together and then isolate the exponents that's really all there is to it again we see that the log of x [Music] we just saw how multiplication becomes addition with logs now let's see how division become subtraction will start with normal division just like before we're going to rewrite everything as powers of two and we can rewrite the division as multiplication and we can rewrite the fractions

as powers of two and we can rewrite the division as multiplication and we can rewrite the fractions by flipping the sign on the exponents now we just subtract the exponents okay here's a pop quiz if we wrapped log two functions around everything what would happen we would isolate the exponents thus the log base 2 of 2 divided by 4 is just 1 minus 2 or negative 1 if we take the log of division we end up with subtraction in summary logs just isolate exponents there's no big deal for example log

end up with subtraction in summary logs just isolate exponents there's no big deal for example log base 2 of 8 equals the log base 2 of 2 to the 3 which equals 3 because 3 is the exponent for 2 the second thing is that log scales are great for plotting fold change this is because 8 fold up is the same distance from 0 as 8 fold down everything symmetrical the third thing we learned is that the mean of logs aka the geometric mean is great for log based data when something is doubling every time

of logs aka the geometric mean is great for log based data when something is doubling every time for example and is less sensitive to outliers than the normal mean the fourth thing we learned is that the log of multiplication is just adding the exponents lastly we learned that the log of division is the same as subtracting the exponents one last thing before we're all done here what we've talked about applies to all logs this means it applies to log base 10 which is useful when things go up or

about applies to all logs this means it applies to log base 10 which is useful when things go up or down by powers of 10 like decibels or earthquakes it also applies to the log base E aka the natural log remember E from math class I don't in theory it's natural but I always forget why however just know that it's a number like pi but in this case it's approximately 2.7 I mention it because the log base E is often the default for example the our programming language we mentioned before you just

base E is often the default for example the our programming language we mentioned before you just used log it's gonna set you up with log base E I use it all the time even though I'm not sure what E is I just know that all logs work the same so it doesn't matter and this means that the stuff we've talked about even applies to log to the base whatever makes sense given your data so don't worry about it too much if your data triples at each step use log to the base 3 if it goes up by 7.5 at each

it too much if your data triples at each step use log to the base 3 if it goes up by 7.5 at each step use log to the base 7.5 no big deal hooray we made it to the end tune in next time for another exciting step quest

stab quest Stan quest stad quest hello and welcome to stat quest stat quest is brought to you by the firmly folks in the genetics department at the University of North Carolina at Chapel Hill today's stat quest is all about confidence intervals you may have seen or heard of confidence intervals before however if you're not very confident about them then you're not alone many people misunderstand confidence intervals but that's only because they didn't learn about bootstrapping first now just to

intervals but that's only because they didn't learn about bootstrapping first now just to clarify there are lots of ways to calculate calculate center holes and bootstrapping is just one of them but for me it makes it easiest to understand but when you see confidence intervals out there in the wild you're likely to see a different way to calculate them now even though we just did bootstrapping your brain might be a little cloudy and you may have forgotten what it was all about my brains like

your brain might be a little cloudy and you may have forgotten what it was all about my brains like that so I totally understand that's why we're gonna do a little bootstrap refresher imagine we wait a bunch of female mice in this case we weighed 12 of them we didn't weigh every single female Mouse on the planet just 12 now we can take these 12 measurements and we can use them to calculate the sample mean now the sample mean is not the mean for all mice the entire planet it's just the mean of

mean now the sample mean is not the mean for all mice the entire planet it's just the mean of the mice that we sampled however we can use bootstrapping and the data that we have here to determine what values would be reasonable for the global worldwide mean of all female mice on the planet now that we've calculated the sample mean we can bootstrap the sample to bootstrap the sample we randomly select 12 weights from the original sample and duplicates are okay here's an example of a bootstrap

select 12 weights from the original sample and duplicates are okay here's an example of a bootstrap sample we can see that this measurement on the far left was sampled twice in our bootstrap sample and the measurement to its right wasn't included in our bootstrap sample this is called sampling with replacement now we calculate the mean of the random sample after we've calculated the mean of our first random sample all we have to do is repeat steps 1 and 2 until we've calculated a lot of means

first random sample all we have to do is repeat steps 1 and 2 until we've calculated a lot of means sometimes more than 10,000 and here's what it looks like when we've calculated a lot of means it's maybe a little fewer than 10,000 but you get the idea anyway that's all there is to bootstrapping now let's talk about confidence intervals usually when you see a confidence interval out in the wild it's called a 95% confidence interval a 95% confidence interval is just an interval that covers 95%

it's called a 95% confidence interval a 95% confidence interval is just an interval that covers 95% of the means so here we have a black bar that spans 95% of the bootstrapped means that we just calculated that's it that's all the confidence interval is nothing more nothing less can you guess what a 99% confidence interval is here's a hint it's wider than a 95% confidence interval alright I'll tell you it's just an interval that covers 99% of the means that you calculated when you bootstrap to

you it's just an interval that covers 99% of the means that you calculated when you bootstrap to the sample now that we know what confidence intervals are we might ask why are they useful well I think confidence intervals are useful because they are statistical tests performed visually because the interval covers 95% of the means we know that anything outside of it occurs less than 5% of the time that is to say the p-value of anything outside of the confidence interval is less than 0.05 and

that is to say the p-value of anything outside of the confidence interval is less than 0.05 and thus significantly different here's an example of a visual statistical test you'll remember we originally calculated the sample mean the sample mean is an estimate of the true mean for all female mice well with our confidence interval we can figure out what the p-value is that the true mean of all female mice not just of our sample is less than 20 to perform that test we draw our confidence interval

mice not just of our sample is less than 20 to perform that test we draw our confidence interval which we know because of bootstrapping or some formula that we use we can see that the area left of 20 so values less than 20 or outside of our 95% confidence interval because the highlighted region is outside of the 95% confidence interval which contains 95% of the means we know that the probability that the true mean is in this area has to be less than 0.05 thus the p-value is less than 0.05 this

that the true mean is in this area has to be less than 0.05 thus the p-value is less than 0.05 this is unlikely and because of this we can say there's a statistically significant difference between the true mean and any value less than 20 here's another example of a visual statistical test in this case we're going to compare two samples here we've weighed female mice and now we have a sample of male mice we've already done the bootstrapping on that sample and here in the figure we just show the

mice we've already done the bootstrapping on that sample and here in the figure we just show the means from that bootstrapping because the 95% confidence intervals do not overlap we know that there is a statistically significant difference in the weights of female and male mice that is to say we know that the p-value is less than 0.05 just by looking at the picture there is one caveat to that and to illustrate that caveat I've shifted the means a little bit over to the left so that now the

and to illustrate that caveat I've shifted the means a little bit over to the left so that now the confidence intervals overlap if the confidence intervals overlap there is still a chance that the means are significantly different from each other so in this case you still have to do the t-test but when the confidence intervals do not overlap then you can rest assured that there's a statistically significant difference between those two means that's all there is to it tune in time for another

significant difference between those two means that's all there is to it tune in time for another stat quest

Stat! Quest! Stat! Quest! Stat! Quest! StatQuest! StatQuest is brought to you by the friendly people in the genetics department at the University of North Carolina at Chapel Hill. Hello and welcome to StatQuest in this video we're going to talk about R-squared. R-squared is a metric of correlation that is easy to compute and intuitive to interpret. Most of us are already familiar with correlation and the standard metric of it plain old 'r'. Correlation values that are close to 1 or negative 1

and the standard metric of it plain old 'r'. Correlation values that are close to 1 or negative 1 are good and tell you that two quantitative variables for example weight and size are strongly related. Correlation values close to zero are lame. Some of you may be asking why should we care about R-squared; we already have regular 'r'. Some of you might just be asking what is R-squared. R-squared is very similar to its hipper cousin 'r', but interpretation is easier. For example it's not obvious

very similar to its hipper cousin 'r', but interpretation is easier. For example it's not obvious that when 'r'  equals 0.7 that's twice as good a correlation as when 'r' equals 0.5. However R-squared equals 0.7 is what it looks like it's 1.4 times as good as R-squared equals 0.5. The other thing that I like about R-squared is that it's easy and intuitive to calculate. Let's start with an example. Here were plotting Mouse weight on the y-axis with high weights towards the top and low weights

Here were plotting Mouse weight on the y-axis with high weights towards the top and low weights towards the bottom and mouse identification numbers on the x-axis with ID numbers 1 through 7. We can calculate the mean or average of the mouse weights and plot it as a line that spans the graph. We can calculate the variation of the data around this mean as the sum of the squared differences of the weight for each mouse 'i', where 'i' as an individual mouse represented by a red dot, and the mean.

weight for each mouse 'i', where 'i' as an individual mouse represented by a red dot, and the mean. The difference between each data point is squared so that the points below the mean don't cancel out the points above the mean. Now, what if instead of ordering our mice by their identification number we ordered them by their size? Instead of using identification number on the x-axis we have mouse size, with the smallest size on the left side and the largest size on the right side. All we have

size, with the smallest size on the left side and the largest size on the right side. All we have done is reorder the data on the x-axis, the mean and variation are the exact same as before. Here we show the mean again as a black bar that spans the graph in the exact same location as it was before. Also the distances between the dots and the line have not changed, just the order of the dots. Here's a question for you: Given that we know an individual Mouse's size, is the mean, or average

Here's a question for you: Given that we know an individual Mouse's size, is the mean, or average weight, the best way to predict that individual Mouse's weight? Well the answer is 'no'. We can do way better. All we have to do is fit a line to the data. Now we can predict weight with our line. You tell me you have a large Mouse, I can look at my line and make a good guess about the weight. Here's another question: Does the blue line that we just drew fit the data better than the mean? If so how

another question: Does the blue line that we just drew fit the data better than the mean? If so how much better? By eye, it looks like the blue line fits the data better than the mean. How do we quantify that difference? R-squared. In the bottom of the graph I've drawn the equation for R-squared. We're going to walk through it one step at a time. The first part of the equation is just the variation around the mean. We already calculated that. It's just the sum of the squared differences of the

around the mean. We already calculated that. It's just the sum of the squared differences of the actual data values from the mean. The second part of the equation is the variation around our new blue line. This is calculated in a very similar way. Here, we just want the sum of the squared differences between the actual data points and our new blue line. The numerator, which is the difference between the variation around the mean and the variation around the blue line, is then divided by the

the variation around the mean and the variation around the blue line, is then divided by the variation around the mean. This makes R-squared range from zero to one, because the variation around the line will never be greater than the variation around the mean and it will never be less than zero. This division also makes our squared a percentage and we'll talk more about that in just a second. Now, we'll walk through an example where we calculate things one step at a time. First, we'll start

Now, we'll walk through an example where we calculate things one step at a time. First, we'll start with the variation around the mean. In this case that equals 32. The variation around the blue line is only six, which is what we suspected since it appears to fit the data much better. Once we've calculated the variation around the mean and the variation around our blue line we can plug these values in to our formula for R-squared. After plugging in our values, we get R-squared equals 32 minus 6

in to our formula for R-squared. After plugging in our values, we get R-squared equals 32 minus 6 over 32. After subtracting 6 from 32, we get 26. Doing the division, 26 divided by 32, gives us 0.81, or 81%. This means that there is 81% less variation around the line than the mean. In other words, the size-weight relationship accounts for 81% of the total variation. This means that most of the variation in the data is explained by the size-weight relationship. Here's another example. In this

variation in the data is explained by the size-weight relationship. Here's another example. In this example we're comparing two possibly uncorrelated variables. On the y-axis we have mouse weight again, but on the x-axis we now have "time spent sniffing a rock". Like before, we calculate the variation around the mean and just like before we got 32. However, this time when we calculated the variation around the blue line, we got a much larger value, 30. Now we just plug those values into our

around the blue line, we got a much larger value, 30. Now we just plug those values into our formula for R-squared. By doing the math we see that R-squared equals 0.06 or 6%. Thus there is only 6% less variation around the line than the mean. In other words, the sniff-weight relationship accounts for only 6% of the total variation. This means that hardly any of the variation in the data is explained by the sniff-weight relationship. Now, when someone says "The statistically significant

explained by the sniff-weight relationship. Now, when someone says "The statistically significant R-squared was 0.9", you can think to yourself "Very good! The relationship between the two variables explains 90% of the variation in the data." And when someone else says, "The statistically significant R-squared was 0.01." You can think to yourself, "Dag! Who cares if that relationship is significant? It only accounts for 1% of the variation in the data. Something else must explain the remaining

It only accounts for 1% of the variation in the data. Something else must explain the remaining 99%." What about plain old 'r'? How is it related to R-squared? R-squared is just the square of 'r' Now, when someone says "The statistically significant 'r' was 0.9", and we're talking about just plain old 'r', you can think to yourself "0.9 times 0.9 equals 0.81. Very good! The relationship between the two variables explains 81% of the variation in the data." And when someone else says "The

the two variables explains 81% of the variation in the data." And when someone else says "The statistically significant 'r'", that's plain old 'r', "was 0.5." You can think to yourself "0.5 times 0.5 equals 0.25. The relationship accounts for 25% of the variation in the data. That's good if there are a million other things accounting for the remaining 75% and bad if there's only one thing." I like R-squared more than just plain old 'r' because it's easier to interpret. Here's an example: How

R-squared more than just plain old 'r' because it's easier to interpret. Here's an example: How much better is 'r' equals 0.7 then 'r' equals 0.5? Well if we convert those numbers to R-squared, we see that when R-squared equals 0.7 squared it actually equals 0.5, which means 50% of the original variation is explained by the relationship. When R-squared equals 0.5 squared which equals 0.25, we see that only 25% of the original variation is explained by the relationship. With R-squared it's easy

that only 25% of the original variation is explained by the relationship. With R-squared it's easy to see that the first correlation is twice as good as the second. Explaining 50% of the original variation is twice as good as only explaining 25% of the original variation. That said our squared does not indicate the direction of the correlation because squared numbers are never negative. If the direction of the correlation isn't obvious, you can say "the two variables were positively or

the direction of the correlation isn't obvious, you can say "the two variables were positively or negatively correlated with R squared equals dot dot dot", whatever that value may be. These are the two main ideas for R-squared. R-squared is the percentage of variation explained by the relationship between two variables, and also, if someone gives you a value for plain old are just square it in your head, you'll understand what's going on a whole lot better. We've reached the end of our

it in your head, you'll understand what's going on a whole lot better. We've reached the end of our StatQuest. Tune in next time for an exciting adventure into the land of statistics.

that quest is cool dr. stack quest dr. rules stack quest a quest hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to talk about fitting a curve to data aka Louis smoothing aka Louis smoothing I'm not really certain how to pronounce those two words or if the pronunciation is different so if you know please leave a comment below last time we talked about fitting a line

is different so if you know please leave a comment below last time we talked about fitting a line to data we used least squares to find the line with the minimal squared distance from the data points if this is news to you check out the stat quest fitting a line to data today we're going to talk about fitting a curve to data let's go over the main ideas first the first main idea is to use a type of sliding window to divide the data into smaller blobs the second main idea is at each data point

of sliding window to divide the data into smaller blobs the second main idea is at each data point use a type of least squares to fit a line now let's dive into the nitty-gritty details the good news is that if you understand least squares this is going to be a snap let's start with a simple example we'll fit a curve to this data using a window size 5 we'll start by making a window size 5 for the first point we'll call this point the focal point of the window here are the 5 points in the first

first point we'll call this point the focal point of the window here are the 5 points in the first window this point is closest to the focal point it's one unit away on the x-axis this is the second closest point it's two units away on the x-axis this point is the third closest and this is the fourth closest we'll do a weighted least squares fit on all five points The Closer the point is to the focal point the more weight or influence it has on determining the fit of the line the focal point

focal point the more weight or influence it has on determining the fit of the line the focal point has the most weight of all the closest point has the second most weight the furthest point has the least weight normal unweighted least squares without the weights would fit the data like this with weights however the last point has less influence and doesn't pull the slope up as much now that we have fit a line to the data we'll use it to define the first point in the fitted curve hooray we've

have fit a line to the data we'll use it to define the first point in the fitted curve hooray we've got the first point for our fitted curve actually don't get too excited it's just a first draft of where the first point should go more on that later for now let's work on the second point now the second point is the focal point here's the window that contains the four closest points but wait isn't this window the same as before yep these two points are the closest to the focal point they are

this window the same as before yep these two points are the closest to the focal point they are both one unit away on the x-axis this is the next closest point it's two units away and this is the furthest point three units away so we take the four points that are closest to the focal point even if that means the window stays in the exact same place as before now we do weighted least squares where the focal point it's the most weight these two points get the next most weight and this point it's

the focal point it's the most weight these two points get the next most weight and this point it's the least weight here's our fitted line and we use the line to define the second point on the new curve so far we have two points on our new curve actually they're both just rough drafts but let's press on to the third point now the third point is the focal point again the window is the same because the same points are closest but the distances are different and so are the weights for the least

the same points are closest but the distances are different and so are the weights for the least squares fit and here's our new point now the fourth point is the focal point here's the window finally it's shifted over one these two points are both one unit away these two points are both two units away as you can see the distance along the y axis isn't factored into how we pick points for the window at this stage were only interested in distances along the x axis here's the weighted least

window at this stage were only interested in distances along the x axis here's the weighted least squares fit and here's the new point for the curve these are the new points so far now this is the focal point and here's our least squares fit and the new point now this is the focal point and here's our least squares fit and a new point now this is the vocal point okay you're getting the idea moving along here are all the new points that we created using weighted least squares and a sliding

moving along here are all the new points that we created using weighted least squares and a sliding window remember when I said these points were preliminary these points were all pulled up by this guy this guy's an outlier to reduce its influence on the new curve we create an additional weight for the weighted least squares based on how far the original point is from the new point old and new points that are close together along the y axis get high weights this point would get a lower weight

that are close together along the y axis get high weights this point would get a lower weight because the old and new points are far from each other along the y axis this point would get a really low weight with the new weights you do the whole thing over again however this time we have two sets of weights we have the original weights based on distance along the x-axis and the weights based on distance from the new points these are the new new points after adjusting for the distance from the

distance from the new points these are the new new points after adjusting for the distance from the original points the curve is smoother adjusting all the new points based on their distance from the original we get a nice smooth progression the process of using the distance between the old and new points to adjust the weights can be repeated several times until you get a nice smooth curve per a here's the final curve fit to the data now that we've got the curve let's talk about some additional

the final curve fit to the data now that we've got the curve let's talk about some additional considerations we could fit lines to the data in each window or we could fit parabolas the choice is yours here let's look at a more complicated data set to see the effect of using lines versus parabolas here's the curve using weighted least squares to fit a line at each step here's the curve fitting parabolas at each step as you can see the parabola fits the data just a little bit better before you do

at each step as you can see the parabola fits the data just a little bit better before you do your fit make sure you look at the original data to decide which you think would be better the lowest function in R will only fit along and the low s function in R can fit a line or a parabola however note that the default for low s is to fit a parabola so even though these two functions implement the same algorithm they have different default settings the low s function in R also allows you to draw

same algorithm they have different default settings the low s function in R also allows you to draw confidence intervals around the curve it's also worth talking about the window size you can change the size of the window to contain more or fewer points the choice is yours here's the fit where the window contains 1/5 of the overall points note instead of specifying the exact number of points you usually specify the proportion of the total here's the line using one third of the total points per

usually specify the proportion of the total here's the line using one third of the total points per window this red line was fit using the default setting for low s which uses 75% of the points in each window oh let's also talk about the wave functions the formulas for determining the weights were chosen because they seem to work well but there's no physical or biological justification for them here's a graph of the weights for distance along the x axis here's the graph for weights for distance

a graph of the weights for distance along the x axis here's the graph for weights for distance between the old and new points along the y axis overlapping the standard weight functions shows their subtle differences there's no real reason we can't use an alternative weight function like this so keep that in mind hooray we've made it to the end of another exciting stat quest tune in next time for a fun adventure into the land of statistics

I like stack West do you like stack ground I like stack West and I hope you like stack class - hello and welcome to stack West stack West is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about doing linear regression in R this particular stack West is intended to be a companion video for the stat quest on linear regression for this tutorial I'm going to assume that you already know how to get

quest on linear regression for this tutorial I'm going to assume that you already know how to get your data into R and instead I'm going to focus on how to get that data into a linear regression model and how to interpret the results this is how I created the data for the stat quest on linear regression I created a data frame with two columns weight and size if I just type Mouse data and then press return R will print out the data frame and a nice column format I then use the plot function to

return R will print out the data frame and a nice column format I then use the plot function to plot the data on an XY graph this is where I set up the actual linear regression I call the function L M which stands for linear models and I pass it a formula and I pass it the mouse data the way I've specified the formula means that size are considered to be the Y values and weight are considered to be the X values the linear models function then calculates the least squares estimates for the

to be the X values the linear models function then calculates the least squares estimates for the y-intercept and the slope in our the meat of doing or regression is in the summary function this function generates all kinds of output and I'm going to walk through it one step at a time the first line just prints out the original call to the LM or linear models function after that you get a summary of the residuals those are the distance from the data to the fitted line ideally they should be

of the residuals those are the distance from the data to the fitted line ideally they should be symmetrically distributed about the line that means you want the min value and the max value to be approximately the same distance from 0 likewise you'd like the first quantile or 1q and the third quanta or 3q to be equidistant from 0 also it's nice to have the median close to 0 as well this next section tells us about the least squares estimates for the fitted line this value is for the intercept

tells us about the least squares estimates for the fitted line this value is for the intercept and this value is for the slope the standard error of the estimates and the T value are both provided to show you how the P values were calculated these P values test whether the estimates for the intercept and the slope are equal to 0 or not if they're equal to 0 that means they don't have much use in the model lastly these are the P values for the estimated parameters generally speaking we are

in the model lastly these are the P values for the estimated parameters generally speaking we are usually not interested in the intercept so it doesn't matter what it's p value is however we want to p value for weight to be less than 0.05 that is we want it to be statistically significant a significant p value for weight means that it will give us a reliable guess of mouse-sized if you were unable to read the actual p value but could for some reason see the star to its right then these codes

to read the actual p value but could for some reason see the star to its right then these codes would give you a sense of what the p value was the next line the residual standard error is the square root of the denominator in the equation for f the next line tells us the multiple r-squared and adjusted r-squared values multiple r-squared is just R squared as I described it in the stat quest on linear regression it means that weight can explain 61% of the variation in size this is good generally

regression it means that weight can explain 61% of the variation in size this is good generally speaking the adjusted R squared is the r-squared scaled by the number of parameters in the model the next line tells us if the r-squared is significant or not this is the value for F these are the degrees of freedom and here's our p-value again this says that weight gives us a reliable estimate for size lastly we can add the regression line to the XY graph we started your on earlier hooray we've made

lastly we can add the regression line to the XY graph we started your on earlier hooray we've made it to the end of another exciting stat quest if you liked this video and want to see more like it please subscribe and if you have ideas for future stat quests feel free to put them in the comments below

stat quest is totes cray-cray stat quest hello I'm Josh stormer and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to compare simple and multiple regression and our and just so you know the R code used in this video is available on the stack quest website stack quest or G this stat quest picks up from where the stat quest on multiple regression left off here's the raw data

stat quest picks up from where the stat quest on multiple regression left off here's the raw data that we're going to use in our analysis I've created a data frame with measurements for size weight and tail for simple regression we will focus on how well weight predicts size step 1 always plot your data we specified weight for the x-axis and we specified size for the y-axis plotting your data as a first step is super important because it allows us to evaluate whether doing a linear regression

a first step is super important because it allows us to evaluate whether doing a linear regression to begin with is a good idea can we see a relationship in the data between size and weight in this case we can and that means doing a regression makes sense step 2 use the LM function where L M stands for linear model to fit a line to the data in R this is how you specify the following equation we specify size is predicted by weight by using the tilde character between size and weight and by

we specify size is predicted by weight by using the tilde character between size and weight and by default our adds the terms for the y-intercept and the slope our then uses least-squares to find the values for the y-intercept and the slope that minimize the squared residuals from the line once we've run the linear models function and save the output in a variable called simple dot regression we can get a summary of that regression using the summary function calling the summary function on

we can get a summary of that regression using the summary function calling the summary function on simple dot regression gives us a huge pile of stuff the most important stuff is down here specifically the r-squared and the adjusted R squared multiple r-squared is just another way to say R squared by the way also for simple regression the multiple r-squared value or just plain old r-squared is one we're interested in the adjusted R squared only applies when we have more complicated models we'll

we're interested in the adjusted R squared only applies when we have more complicated models we'll use it later when we do multiple regression there's also the p-value down here together the R squared which equals zero point six one three and the p-value which equals zero point zero one to say that weight does a pretty good job predicting size the last thing we want to do for our simple regression is add a line that shows the least squares fit on the graph we do this using the a beeline

is add a line that shows the least squares fit on the graph we do this using the a beeline function now let's do some multiple regression for multiple regression we will use weight and tail to predict size step one always plot your data since we didn't specify the x and y axes our plots all the data columns size weight and tail against each other this is super useful because it generates all the plots we need to decide whether doing a multiple regression with this data makes sense or not this

plots we need to decide whether doing a multiple regression with this data makes sense or not this graph plots size on the y axis and weight on the x axis this is what we used before in the simple regression down here we have the same exact data however this time sizes on the x axis and weight is on the y axis these two graphs are similar only the axes have been flipped the graph in the upper right hand corner has size on the y axis and tail on the x axis and in the lower left hand corner we

hand corner has size on the y axis and tail on the x axis and in the lower left hand corner we have another graph that's very similar just the axes have been flipped this graph has weight on the y-axis and tail on the x-axis and just like for the other graphs these two graphs are similar just the axes have been flipped we can see that both weight and tail are correlated with size this is good it means that both weight and tail are reasonable predictors for size we can also see that weight and

means that both weight and tail are reasonable predictors for size we can also see that weight and tail are correlated this means they provide similar information and that we might not need both in our model we might only need weight or tail step to use the linear model function to fit a plane to the data in R this is how you specify the following equation using the tilde and the plus symbols we specify that size is predicted by weight and tail and by default R as the terms for the y-intercept

specify that size is predicted by weight and tail and by default R as the terms for the y-intercept and slope 1 and slope 2 once we've run the linear models function we can print out a summary of the results using the summary function again summary gives us a big pile of stuff the r-squared adjusted r-squared and the p-value look good hooray note since we're doing multiple regression we're now more interested in the adjusted r-squared value with multiple regression this section is more

now more interested in the adjusted r-squared value with multiple regression this section is more interesting this line compares the multiple regression to the simple regression it compares this model which uses both weight and tail to predict size to this simpler model where we're just using tail to predict size this is the p-value it means that using weight and tail isn't significantly better than using tail alone to predict size now let's look at this line it compares the fancy multiple

than using tail alone to predict size now let's look at this line it compares the fancy multiple regression where we use weight and tail to predict size to a simple regression where we just use weight to predict size this is the p-value it means that using weight and tail is significantly better than using weight alone to predict size in summary using weight and tail to predict size is good but if we wanted to save time we could spare ourselves the agony of weighing mice and just use their tail

we wanted to save time we could spare ourselves the agony of weighing mice and just use their tail lengths to predict size hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you have any suggestions for future stat quests we'll just put them in the comments below until next time quest on

data point and this zero turns the term for the difference between the mean of the mutant data and the mean of the control data off for this data point this one turns the term for the mean of the control data on for this data point and this one turns the term for the difference between the mean of the mutant data and the control data on for this data point the residuals are the same for both equations and design matrices the equations also have the same number of parameters - so P fit is the

and design matrices the equations also have the same number of parameters - so P fit is the same so in our equation for f we plug in the exact same value for the sum of squares around the fit we also plug in the exact same value for the P fit parameter this results in the exact same value for F and that means we're going to get the exact same P value if they both do the same thing and the result is the same P value Y is the one on the right more common I'll be honest I don't know the answer for

the same P value Y is the one on the right more common I'll be honest I don't know the answer for sure but I think it has something to do with regression so far we've looked at design matrices in the context of using ones and zeros to turn parts of the equation on or off so let's take a step back and remember how it works remember that the numbers in the first column are multiplied by the term for the mean of the control values and the numbers in the second column are multiplied by the term

this line to do this we need an equation that has a term for the y-intercept for the normal mice we also need a term for the mutant mouse offset and lastly a term for the slope which in this case is the same for both types of mice this means we need to design matrix where the first column is ones this means that both lines intercept the y axis at some point the second column indicates whether the mutant offset is on or off the mutant offset is off for the control mice and on for the mutant mice

hard to see since they are so small in this example now we can compare the fancy model to a simpler model in the simpler model we model mouse-sized by using just the average size of the mouse we ignore mouse weight and we ignore Mouse type this is the default model that we use when we do the t-test now we plug in the sum of squares of the residuals for the fancy model and we plug in 3 for the P fancy term since there are 3 parameters in our fancy equation and we plug in the sum of squares of

fancy term since there are 3 parameters in our fancy equation and we plug in the sum of squares of the residuals for the simple model and we plug in one for the P simple term since there is only one parameter in the simple equation this gives us 20 1.88 and that gives us a p-value of 0.003 BAM the small p-value says that taking weight and Mouse type into account is significantly better at predicting size than just using the average size note the simple model can be any simpler model if we did a

size than just using the average size note the simple model can be any simpler model if we did a super simple linear regression we'd have a model that takes weight into account but ignores the fact that some mice are normal and others are mutants then we plug in the sum of squares of the residuals just like before the simple regression equation has two parameters so P simple equals 2 we then plug in the numbers and we get a p-value equal to zero point zero zero two three double bail this small

two and that gives us a p-value equal to zero point zero zero two five oh my gosh it's the coveted triple BAM this small p-value suggests that using Mouse weight and type is better at predicting Mouse size than Mouse type alone so you can see that the question you want to ask determines what type of simple model you want to use to compare your fancy model to okay one last example of a design matrix lab a dozen experiment then lab B replicates it however their measurements tended to be smaller

hello and welcome to the very first stat quickie stat quickies are a little short video it's not a full-on stat quest where it's only gonna take a few minutes where we address a question that someone's asked me in the comments or sent me an email or if I just ran into someone in the hallway and they said hey I got a question so that's what's that quickies are for this very first one we're gonna talk about what a good threshold for significance is people often ask me is point zero five the best

about what a good threshold for significance is people often ask me is point zero five the best threshold for significance should I use it for everything all the time no matter what or are there exceptions or what would how do I deal with this okay so what I'm going to talk about is one the original threshold of point O five was randomly selected well I'm not necessarily randomly but it's relatively arbitrary there's no biological or natural reason at point zero five is the optimal threshold

arbitrary there's no biological or natural reason at point zero five is the optimal threshold for significance the one that we use mostly in science in publications and whatnot we even used it for a long time and for the most part it doesn't okay job lately there have been some high-profile articles about people doing pee hacking and kind of getting away with murder in terms of statistics but for the most part zero point four oh five has been sort of a good way to hedge the bets five percent of

the most part zero point four oh five has been sort of a good way to hedge the bets five percent of the time you're wrong but 95 percent of the time you're right and that seems to be a cost-effective threshold for most of at least biological science okay so now let's talk about what good thresholds are other than 0.05 okay so if you're got data that you're gonna publish you've done your analysis you're gonna publish it what's a good threshold for that well almost always point oh five is a great

gonna publish it what's a good threshold for that well almost always point oh five is a great threshold for that because that's what the editors are expecting that's what the reviewers are expecting if you can go below that that's awesome okay but there are exceptions to that down before you run off let's listen to all those exceptions because sometimes it needs to be smaller and we're going to get to that in just a second okay so here's another threshold for significant we're going to talk

get to that in just a second okay so here's another threshold for significant we're going to talk about one is when you're not necessarily gonna publish the data you say like you've downloaded a dataset from the internet you've got a hypothesis that seems reasonable you've tested that hypothesis the p-value is not point over five okay it's a little bit higher okay is that a bad thing well it depends on what you're gonna do if you're gonna publish immediately yes you want it to be lower than

on what you're gonna do if you're gonna publish immediately yes you want it to be lower than pointer heart but if instead you're just using this limited data set that you got off the internet for free and you're just trying to test some basic hypothesis that you're later going to confirm or validate using alternative methods well in that case who cares what the p-value is as long as it's kind of small that's good enough you don't need a massively tiny p-value when you're just exploring some

of small that's good enough you don't need a massively tiny p-value when you're just exploring some data set that you found you're generating new hypotheses that you're later going to test and validate using all additional data and additional methods okay so if that's the case you know don't don't feel like you have to stick to 0.05 okay now here's another thing you need to think about say like you've done your looks like I just got a text message next time I do this I'm gonna turn off I guess

done your looks like I just got a text message next time I do this I'm gonna turn off I guess alerts or something like that okay so what's the next thing we need to talk about we need to talk about the effect size okay say like you did an R squared and I've got a whole static West on R squared so check this out because I go into this in detail but say like you did an R squared and your R squared value is isn't very good okay you've got like a you know you know r-squared of 10 percent right that

is isn't very good okay you've got like a you know you know r-squared of 10 percent right that means that 10 percent of the variation in the data is explained by whatever it is you're interested in that's not very much okay so even if you have a tiny tiny tiny tiny p-value okay it doesn't actually matter unless you know in certain circumstances maybe that's good enough but generally speaking you want a good r-squared you want your you want a good correlation you want whatever you're studying to

a good r-squared you want your you want a good correlation you want whatever you're studying to explain the data okay and and so if you have a tiny p-value and a tiny effect size and not much explanation of what's go on then who cares how small your p-value is you know I've seen these things in publications where the p-value is zero point zero zero zero zero zero zero on the r-squared is horrible and I say who cares okay so you want to have a decent effect size okay so up the small p-value is

and I say who cares okay so you want to have a decent effect size okay so up the small p-value is not enough okay one last thing okay extraordinary claims need extraordinary data so say like you've done a great experiment proving that there are extraterrestrials flying around New York City in UFOs okay that's an extraordinary claim okay you've done your thing and you've got a p-value less than 0.05 it's point oh four seven okay it's less than that threshold of significance is that good enough

it's point oh four seven okay it's less than that threshold of significance is that good enough absolutely not extraordinary claims need extraordinary data if you're gonna go out and publish a thing sending extraterrestrials are flying around New York City and UFOs your p-value better be so crazy small it's unbelievable and then people say well that p-value is so small I can't even believe it therefore I have to believe that there are extraterrestrials flying around New York City and UFOs okay

I have to believe that there are extraterrestrials flying around New York City and UFOs okay that's it so to summarize if you're publishing your p-values you want a small p-value a PETA threshold of 0.05 it's okay unless you're the thing you're studying only explains a little bit and your r-squared is kind of crummy you want a good r-squared okay so it's you know point oh five is fine if you're if you've got a good correlation um if you're just using it doing statistical stuff just to explore

if you've got a good correlation um if you're just using it doing statistical stuff just to explore stuff that you're going to validate later on who really cares what your threshold is you're just trying to go find something of interest don't worry about 0.05 and the other thing is extraordinary claims require extraordinary data if you're gonna say that there are extraterrestrials flying around New York City and UFOs you better have a darn small p-value all right tune in next time for our next

York City and UFOs you better have a darn small p-value all right tune in next time for our next stat quickie

hello and welcome to a stat quickie on t-tests I work in a large genetics lab and people often ask me questions about T tests the first question they ask me is what type of T tests they should use there are two main categories for T tests paired and unpaired pair T tests are useful when you have before and after measurements taken from the same test subject for example if you have a drug for blood pressure say like you take a group of people and you measure their blood pressure and then you give

pressure say like you take a group of people and you measure their blood pressure and then you give them this drug and then after they've taken the drug you test their breath you test their blood pressure again so for each person in the study each individual you have a pair of measurements you have a before measurement and then you have an after measurement and so when you have data like that that's paired used a paired t-test when you don't have paired data for example say like you have a one

paired used a paired t-test when you don't have paired data for example say like you have a one group of people and you measure their height and we call that group a and then we have another group of people and we measure their height and we croc when we call that group B then we have unpaired data and so that's when you use an unpaired t-test and there are two subcategories of unpaired T tests one assumes that the variance within each group so the variation around the height measurements in

one assumes that the variance within each group so the variation around the height measurements in Group A is the exact same as the variation around the height measurements in Group B so they call that a well actually I don't know what they call that they call that a t-test that assumes equal variation or equal variance there's another type of t-test that does not assume equal variation so you could have a different measurement of variance in Group A as opposed to group B now I often recommend

have a different measurement of variance in Group A as opposed to group B now I often recommend that people select the test that does not assume that the variation is equal in both groups simply because that test is slightly more conservative and if your data can pass this more conservative t-test then you know your data are rock solid so I think that's my general recommendation for using t-test you go with if you have unpaired data go with the test that does not assume equal variance in both

you go with if you have unpaired data go with the test that does not assume equal variance in both groups okay now the second question people ask me is should they use a one-tailed or one sided T test or a two-tailed or two sided t-test now a two-sided T tests say for example we'll go back to our height measurements so we have Group A and Group B and we've measured the heights in both groups a two-tailed t-test would test to see if group a is higher than group B and it also tests to see if it's

t-test would test to see if group a is higher than group B and it also tests to see if it's significantly smaller than Group B so it tests both sides it tests two conditions so you've got a tail up here and you've got a tail down here um it's it's agnostic to the data it doesn't have some preconceived notion that group a should be taller or group a should be smaller it says I'm going to test both sides and just see what group a is a one tailed t-test is a lot less conservative because it it

sides and just see what group a is a one tailed t-test is a lot less conservative because it it requires you to say oh I know which direction a is gonna be a is has to be higher than B and generally speaking in academic journals that's not a good way to go generally speaking you want the data to speak for itself and that's why I always recommend people use two-sided t-test because it's slightly more conservative and it lets the data speak for itself and again the conservative thing means you've

conservative and it lets the data speak for itself and again the conservative thing means you've got rock silence rock solid data so in summary if you've got paired data meaning you've got a single you've got subjects and for each subject you've got two measurements you've got a before and an F Oh Oh then use a pair of t-test but if you don't have paired data so you've got to group two separate groups of people you've measured everything and there's and there's not overlap between who's and

groups of people you've measured everything and there's and there's not overlap between who's and which group so if you've got unpaired data use an unpaired t-test and try not to assume equal variance because that'll make the test more conservative and use a two teeth two-tailed t-test because that makes the data speak for itself and again it makes it a little more conservative so if your data can pass that test you know it's rock-solid all right that's all there is to it thanks so much for

can pass that test you know it's rock-solid all right that's all there is to it thanks so much for paying attention to this stack quickie auntie Tess

Steff quest stat quest stat quest stat quest hello and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about one versus two-tailed tests people frequently ask me which one they should use so I'm gonna settle the matter once and for all right here with this stat quest imagine you've got a new cancer treatment you hope that people do better with your new treatment

imagine you've got a new cancer treatment you hope that people do better with your new treatment than the standard treatment you do a small clinical trial on six patients and here's your data the red dots represent people that took your new treatment and the black dots represent people that took the standard treatment the values range from better to worse the data suggests that people who use your new treatment do better than people on the standard treatment however there is a little bit of

your new treatment do better than people on the standard treatment however there is a little bit of ambiguity in the results so you run the stats a one-tailed or one-sided test gives you a p-value of 0.03 awesome 0.03 is smaller than that pesky 0.05 cutoff that we usually use to determine significance a two-tailed or two-sided test gives you a p-value of 0.06 DAG not so awesome which p-value should you use the one-tailed p-value tests the hypothesis that your treatment is better than the

should you use the one-tailed p-value tests the hypothesis that your treatment is better than the standard treatment great that's what we wanted right it's certainly tempting but let's not jump to conclusions before learning about the two-tailed p-value the two-tailed p-value tests whether the new treatment is better worse or not significantly different the one-tailed p-value is smaller because it doesn't distinguish between worse and not significantly different since we'd want to know if our

it doesn't distinguish between worse and not significantly different since we'd want to know if our new treatment was worse than the standard treatment we should use the two-tailed p-value but wait doesn't the data being skewed towards the new method being better suggests we don't need to test if it is worse no good statistical practice means we need to decide what tests and what p-value we want to use before we do the experiment otherwise were pee hacking this increases the probability that we

use before we do the experiment otherwise were pee hacking this increases the probability that we will report bogus results let's see why this is I started with a standard normal distribution the x-axis represents measurements from small to large the y-axis represents the probability that I'll get certain measurements most of the time I should get measurements in the middle but every now and then I'll get a really small measurement or a really big one then I took a sample from this distribution

I'll get a really small measurement or a really big one then I took a sample from this distribution that means a computer picked three numbers that had a high likelihood of being from the center of the distribution but every now and then one of them might be really small or really big I then took another sample from the exact same distribution in most cases a two-tailed t-test on these two samples should give me a p-value greater than 0.05 this is because most of the time the samples will

should give me a p-value greater than 0.05 this is because most of the time the samples will overlap but every now and then the samples will not overlap and the t-test will give me a p-value less than 0.05 this is called a false positive it happens 5% of the time I did 10,000 two-tailed t-test on data like this percent of 10,000 equals 500 so I was expecting 500 false positives here's a histogram of the p-values the blue line shows that each bin contains about 500 tests these are the false

of the p-values the blue line shows that each bin contains about 500 tests these are the false positives the tests with p-values less than 0.05 we pretty much got what we expected there were close to 500 false positives then I changed things to mimic switching to a one tailed test when things looked good if sample number one had two or more values that were less than all of the values in sample number two then I used a one-tailed t-test since these two values are less than all of the values in

two then I used a one-tailed t-test since these two values are less than all of the values in sample number two I used a one-tailed t-test on this data set here's a histogram of the new p-values the blue line shows the expected number of p-values per bin there are now close to 800 false positives the chance of reporting a false positive went from 5 percent to 8 percent even though we're using 0.05 as the threshold for significance thus you can't wait till you see the data to decide you want to

as the threshold for significance thus you can't wait till you see the data to decide you want to use a one-tailed p-value so let's take a step back to before we did the experiment what do we want to learn from it with a cancer treatment it's obvious we must learn if it improves things or makes them worse but really it's the same for all data that has the option for a 1 or two-tailed p-value we always want to know both sides of the story not just one so when you have a choice always go with a

always want to know both sides of the story not just one so when you have a choice always go with a two-tailed p-value note not all statistical tests have a choice in that case don't worry about it hooray we've made it to the end we now know that when we have a choice we should always select a two-tailed test tune in next time for another exciting stat quest

sted quest is special yes it is stat quest hello i'm josh star and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about quantiles and percentiles and they're gonna be clearly explained I thought putting this stat quest together was going to be super easy but doing a little research sent me down a crazy rabbit hole pretty much every webpage I looked at had a

a little research sent me down a crazy rabbit hole pretty much every webpage I looked at had a slightly different explanation part of the problem is that there's a difference between how the word quantile is defined and how quantiles are used in practice the other problem is that there's a ton of different ways to calculate quantiles the quantile function in R alone has nine different methods let's start by talking about the strict definition of quantile and then we'll move on and talk about

start by talking about the strict definition of quantile and then we'll move on and talk about how the word is used in practice if you can recognize the definition you can skip it and move on to something more useful we'll start by measuring expression for a gene then we measure expression for another gene we measured expression from 15 genes total this is the median value 50% of the genes have higher expression and 50% of the genes have lower expression technically speaking the median is a

higher expression and 50% of the genes have lower expression technically speaking the median is a quantile because it splits the data into groups that contain the same number of data points in this example there are seven data points below the line and seven data points above the line sometimes this quantile the medium is labeled 0.5 since it splits the data in half and sometimes it's labeled 50% since 50% of the data is above it and 50% is below it the median value is 4.5 thus the 50 percent

since 50% of the data is above it and 50% is below it the median value is 4.5 thus the 50 percent or 0.5 quantile value is 4.5 to summarize this first point the median is a quantile because it splits the data into equal sized groups this is called the 0.5 quantile or the 50% quantile regardless of which notation is correct you're likely to see both of them in the wild so let's just roll with it and not get to been out of shape over the nomenclature now we've added two more lines together with

and not get to been out of shape over the nomenclature now we've added two more lines together with the first line they divide the data into four equally sized groups these new lines are quantiles because they divide the data into equally sized groups this one is called the 0.25 or 25 percent quantile because 1/4 or 25% of the points are less than it the 25% or 0.25 quantile is 2.5 this one is called the 0.75 or 75 percent quantile because three-quarters or 75% of the points are less than it

called the 0.75 or 75 percent quantile because three-quarters or 75% of the points are less than it the 75 percent or 0.75 quantile is 7.3 in general quantiles are just the lines that divide data into equally sized groups at least that's the technical definition and technically speaking percentiles are just quantiles that divide the data into 100 equally sized groups however in practice the terminology is much more flexible even though this data set isn't large enough to be divided into 100

is much more flexible even though this data set isn't large enough to be divided into 100 groups we still call the median or the fiftieth quantile the fiftieth percentile and this is called the 75th percentile and this is called the twenty-fifth percentile often the terms quantile and percentile are used when we divide each data point into its own group since no values are less than this one at the bottom it's called the zero percent quantile or the zeroth percentile this data point is the one

bottom it's called the zero percent quantile or the zeroth percentile this data point is the one divided by fifteen equals seven percent quantile or the seventh percentile I use one divided by fifteen because there's one data point of the fifteen that are less than it this data point is the three divided by fifteen or twenty percent quantile or the twentieth percentile etc etc etc calculating quantiles and percentiles is just a matter of finding out how many values are less than the value

quantiles and percentiles is just a matter of finding out how many values are less than the value you're interested in one last thing before we move on so far I've shown you one way to calculate the quantiles and percentiles however there are many more R's quantile function provides nine different ways to calculate quantiles each one resulting in slightly different results what this means is that if your data set is small don't put too much stock in the quantiles since they can change a lot

if your data set is small don't put too much stock in the quantiles since they can change a lot from method to method and sample to sample however when your data set is large then all of the methods give fairly similar results now that we know what quantiles and percentiles are we can talk about quantile quantile plots and quantile normalization which I'll cover in separate stat quests and they'll come out next week and the week after that I'm going to do a whole series on quantiles because I

come out next week and the week after that I'm going to do a whole series on quantiles because I think they're pretty interesting and you see them a lot hooray we've made it to the end of another exciting stat quest be sure to subscribe so you get updates when the next stat quests on quantiles come out and if you have any suggestions for future stat quests well put them in the comments below alright until next time quest on

draw breath draw a line tell me if you think it's fun stat quest hello I'm Josh stormer and welcome to stat quest today we're gonna be talking about quantile quantile plots these are called QQ plots sometimes and they're gonna be clearly explained this stat quest assumes you already know what a quantile is if you don't no big deal just check out the stat quest on quantiles and percentiles and then you can watch this one in or make a lot more sense we'll start with this data set where we measured

you can watch this one in or make a lot more sense we'll start with this data set where we measured expression in 15 jeans total one question we might have is is this data normally distributed a QQ plot will help answer that question step 1 give each point its own quantile step 2 get yourself a normal curve any normal curve will do step 3 add the same number of quantiles to the curve as you created for the data that is to say there are 15 lines dividing the data into equal sized groups and

for the data that is to say there are 15 lines dividing the data into equal sized groups and there are 15 lines dividing the normal curve into equal sized groups for the normal curve equal sized groups means that there is an equal probability of observing a value within each group this means that groups on the edge must be wider to account for the lower probability of observing a value out there and groups in the middle are narrower since there is a higher probability of observing a value in

and groups in the middle are narrower since there is a higher probability of observing a value in that region step 4 now plot your QQ graph a QQ graph has two axes one for the quantiles that we generated from our data set and one for the quantiles we generated from the normal distribution we'll start with the smallest quantile in our data set this quantile is at 0.6 and our data set and so we'll draw a dotted line on the QQ plot to indicate that location then we draw a vertical line

so we'll draw a dotted line on the QQ plot to indicate that location then we draw a vertical line representing the position of the smallest quantile in the normal distribution this quantile is at negative 1.5 so that's where our vertical dotted line goes now all we do is put a dot where those two lines intersect now we move on to the second quantile in the data set that we collected this one is at one point one so we have a horizontal dotted line at one point one in our quantile quantile graph

one point one so we have a horizontal dotted line at one point one in our quantile quantile graph then we draw a vertical line at the location of the second quantile in the normal distribution this quantile is at negative 1.2 so we draw a vertical line at negative 1.2 then we draw a dot where the two lines intersect the third quantile in the data set that we collected is at 1.9 so we draw a horizontal line at 1.9 in the 3rd quantile in our normal distribution is at negative zero point 8 9 so we

line at 1.9 in the 3rd quantile in our normal distribution is at negative zero point 8 9 so we draw a vertical line at that position and then we draw a dot where the two lines intersect and then we just do the same thing over and over again for each quantile until we have all the quantiles represented in our quantile quantile graph hooray now we've got dots showing where the quantiles from our data set intersected with the quantiles from the normal distribution on our graph now we see how well

set intersected with the quantiles from the normal distribution on our graph now we see how well the dots fit a straight line if the data were normally distributed most of the points would be on the line this would mean that both the data set and the normal distribution have comparable quantiles in this case the fit is not awesome so we should compare the data that we collected to another distribution what if we compare our data to a uniform distribution the process is the same step 1 give each

what if we compare our data to a uniform distribution the process is the same step 1 give each point its own quantile step 2 get yourself a uniform distribution any old uniform distribution will do step 3 add the same number of quantiles to the distribution as you created for your data step 4 now plot your QQ graph just like before we've got the data quantiles on the y axis and the distribution quantiles on the x axis now we draw a straight line that goes through the points in the graph and

quantiles on the x axis now we draw a straight line that goes through the points in the graph and look the points are much closer to the line in the QQ plot indicating that the uniform distribution is a better fit so if you're ever wondering which distribution matches your data well you could use QQ plots to answer that question ok one last thing before we're done what if we want to compare the original data set to another one this second one is much smaller the new data set only has four

the original data set to another one this second one is much smaller the new data set only has four quartiles quartiles are just quantiles when you only have four of them so we determine four quartiles for the original data set and compare those and just like we did when we compared the data set that we gathered to the normal distribution and the uniform distribution we plot a QQ plot by drawing horizontal and vertical lines representing the quantiles from the two data sets that we collected

horizontal and vertical lines representing the quantiles from the two data sets that we collected and where the two lines intersect we draw a dot and we just repeat this process for each pair of quantiles until we have all the quantiles represented on the graph hooray now we've got all the quantiles plotted on our QQ graph now at a straight line to determine how similar the distributions are with just a few quantiles in our plot it's hard to have a definitive answer about whether or not the two

just a few quantiles in our plot it's hard to have a definitive answer about whether or not the two data sets have similar distributions but you get the idea if we collected more data we'd have more quantiles and would know more hurray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you have any suggestions for future stat quests put them in the comments below alright until next time quest on

burn burn burn burn burn burn stat quest hello I'm Josh stormer and welcome to stat quest stat quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about quantile normalization and it's going to be clearly explained imagine we have some data from a microarray experiment if you're not familiar with microarrays here's the scoop microarrays measure how active genes are in a sample they do that by

microarrays here's the scoop microarrays measure how active genes are in a sample they do that by measuring the intensity of different colors of light if you have a better light bulb for one experiment every measurement might be brighter than every measurement from another experiment thus we need to normalize the data to account for this technical difference between experiments which has nothing to do with biology this is just an example of the type of data you might want to quantile normalize

to do with biology this is just an example of the type of data you might want to quantile normalize however there are lots of other types of data so if you are doing microarray experiments well it still might be useful to pay attention and see how this is done because it might apply to some other data set that you're working with here's our data in this graph each color represents a different gene these are different from the colors that are scanned in the actual microarray experiment at this

these are different from the colors that are scanned in the actual microarray experiment at this point those colors have already been converted into intensity values and that's what we're looking at here each gene has its own color and the value on the y-axis represents the intensity that that gene had on a microarray by the way the word microarray is really hard to articulate unless you're super focused on your pronunciation so I hope I don't mess it up too many times in this stat quest okay

focused on your pronunciation so I hope I don't mess it up too many times in this stat quest okay back to the good stuff these are the mean values for each sample each sample has a different mean value suggesting that we need to compensate for different overall intensities of light quantile normalization corrects for this technical artifact so let's do it so that we can keep track of how this method works we'll keep the raw data on the left side and the quantile normalized data on the right

method works we'll keep the raw data on the left side and the quantile normalized data on the right side you start by focusing on the most highly expressed gene in each sample then calculate the mean value now you extend the mean value into the new plot the quantile normalized value for the genes with the highest expression is their mean value now focus on the next most highly expressed gene in each sample then calculate the mean value extend the mean value into the new plot the quantile

in each sample then calculate the mean value extend the mean value into the new plot the quantile normalized value for the genes with the next highest expression is their mean value then do the same thing for the third most Express gene in each sample and so on and so on finally you do the same thing for the least Express gene in each sample hooray now we've quantile normalized the data after quantile normalization the values for each sample are the same but the original gene orders are

quantile normalization the values for each sample are the same but the original gene orders are preserved so in sample one the red gene has the lowest expression value in the raw data set and also the quantile normalized data set and in sample two the green gene has the lowest expression values in both the raw data and in the normalized data lastly in sample number three the red gene has the lowest expression values in both the raw data and the normalized data BAM they call it quantile

the lowest expression values in both the raw data and the normalized data BAM they call it quantile normalization because the normalized data sets have identical quartiles double by now that was easy wasn't it quantile normalization sounds so fancy and complicated but that's really all there is to it hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you have any ideas for stat quests you'd like to see

to see more of them please subscribe and if you have any ideas for stat quests you'd like to see me do well put them in the comments below alright until next time quest on

stet quest makes me feel so happy so very very very very very very very happy stat quest hello I'm Josh Dahmer and welcome to stat quest today we're gonna be talking about the difference between probability and likelihood these are two closely related concepts that are very easy to get confused even I mix them up from time to time so enough of this jibber-jabber let's get down to it for me the easiest way to understand the difference between probability and likelihood is to just see it in

easiest way to understand the difference between probability and likelihood is to just see it in pictures so let's start by looking at probability with respect to a normal distribution keeping in mind that this concept applies to all continuous distributions in this case let's imagine that this is a distribution of Mouse weights it has a mean of 32 grams and a standard deviation of 2.5 on the low end we have 24 grams and on the high end we have 40 grams the probability that we will weigh a

low end we have 24 grams and on the high end we have 40 grams the probability that we will weigh a randomly selected Mouse between 32 and 34 grams is the area under the curve between 32 and 34 grams in this case the area under the curve equals zero point 2 9 meaning there's a 29% chance a randomly selected Mouse will weigh between 32 and 34 grams mathematically we say this with the following notation the probability of weighing a mouse between 32 and 34 grams given the mean of the distribution

the probability of weighing a mouse between 32 and 34 grams given the mean of the distribution is 32 and the standard deviation is 2.5 and all this equals zero point two nine this is the part of the equation we change if we are interested in different Mouse weights for example if we wanted to know the probability of a mouse weighing more than 34 grams we would change the bit on the left side to reflect this the right side which defines the shape and location of the distribution stays the same

reflect this the right side which defines the shape and location of the distribution stays the same so when we talk about probabilities we are talking about a distribution that's described by the right side of this equation and the area under the curve that is described on the left side using the same distribution we can change the left side to get a new probability BAM now that we have probability worked out let's talk about likelihood to talk about likelihood you assume that you have already

worked out let's talk about likelihood to talk about likelihood you assume that you have already weighed your mouse or mice if you have weighed more than one so here's our mouse it weighs 34 grams the likelihood of weighing a 34 gram Mouse is this point on the curve and that value is 0.12 mathematically we say this with the following notation the likelihood of a distribution with mean equals 32 and the standard deviation equals 2.5 given we weighed a 34 gram Mouse and all that equals 0.12 if we

the standard deviation equals 2.5 given we weighed a 34 gram Mouse and all that equals 0.12 if we shifted the distribution over so that the mean was 34 grams the new likelihood would be zero point two one so with likelihoods the measurements on the right side are fixed and we modify the shape and location of the distribution with the left side double bam in summary probabilities are the areas under a fixed distribution and mathematically we have the probability of data given a distribution

under a fixed distribution and mathematically we have the probability of data given a distribution likelihoods are the y-axis values for fixed data points with distributions that can be moved mathematically this is written as the likelihood of a distribution given data if you want to see the actual equations check out the stat quest that derives the maximum likelihood estimator for the exponential distribution hooray we've made it to the end of another exciting stat quest if you like this stat

distribution hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more of them please subscribe and if you want to support stat quest well consider buying one or two of my original songs the link to my Bandcamp page is down below in the comments all right until next time quest arm

stick quest chicken it's bad to the bone stand quiz check it out it's bad to the bone hello and welcome to stack quest stack quest is brought to you by the friendly folks in the genetics department at the University of North Carolina at Chapel Hill today we're going to be talking about maximum likelihood let's say we weighed a bunch of mice the goal of maximum likelihood is to find the optimal way to fit a distribution to the data there are lots of different types of distributions for different

to fit a distribution to the data there are lots of different types of distributions for different types of data here's a normal distribution here's what an exponential distribution looks like and here's what a gamma distribution looks like and there are many more the reason you want to fit a distribution to your data is it can be easier to work with and it is also more general it applies to every experiment of the same type in this case we think the weights might be normally distributed that

experiment of the same type in this case we think the weights might be normally distributed that means we think it came from this type of distribution normally distributed means a number of things first we expect most of the measurements for example Mouse weights to be close to the mean or average and we see low and behold in our data set most of the mice weigh close to the average we also expect the measurements to be relatively symmetrical around the mean although the measurements are not

the measurements to be relatively symmetrical around the mean although the measurements are not perfectly symmetrical around the mean they are not crazy skewed to one side either this is pretty good normal distributions come in all kinds of shapes and sizes they can be skinny medium or large boned once we settle on the shape we have to figure out where to Center the thing is one location better the another before we get too technical let's just pick any old normal distribution and see how well

another before we get too technical let's just pick any old normal distribution and see how well it fits the data this distribution says most of the values you measure should be near my average the distributions average is the black dotted line in this case that's different from the average of the actual measurements unfortunately most of the values we measured are far from the distributions average according to a normal distribution with a mean value over here the probability or likelihood of

according to a normal distribution with a mean value over here the probability or likelihood of observing all these weights is low what if we shifted the normal distribution over so that its mean was the same as the average weight according to a normal distribution with a mean value here the probability or likelihood of observing these weights is relatively high if we kept shifting the normal distribution over then the probability or likelihood of observing these measurements would go down

distribution over then the probability or likelihood of observing these measurements would go down again we can plot the likelihood of observing the data over the location of the center of the distribution we start on the left side and we calculate the likelihood of observing the data and then we shift the distribution to the right and recalculate we just do this all the way down the data once we've tried all the possible locations we could Center the normal distribution on we want the location

tried all the possible locations we could Center the normal distribution on we want the location that maximizes the likelihood of observing the weights we measured this location for the mean maximizes the likelihood of observing the weights we measured thus it is the maximum likelihood estimate for the mean in this case we're specifically talking about the mean of the distribution not the mean of the data however with a normal distribution those two things are the same great now we have figured

the data however with a normal distribution those two things are the same great now we have figured out the maximum likelihood estimate for the me now we have to figure out the maximum likelihood estimate for the standard deviation again we can plot the likelihood of observing the data over different values for the standard deviation now we found the standard deviation that maximizes the likelihood of observing the weights we measured this is the normal distribution that has been fit to the

of observing the weights we measured this is the normal distribution that has been fit to the data by using the maximum likelihood estimations for the mean and the standard deviation now when someone says that they have the maximum likelihood estimates for the mean or the standard deviation or for something else you know that they found the value for the mean or the standard deviation or for whatever that maximizes the likelihood that you observed the things that you observed terminology alert

that maximizes the likelihood that you observed the things that you observed terminology alert in everyday conversation probability and likelihood mean the same thing however in stats land likelihood specifically refers to this situation we've covered here where you are trying to find the optimal value for the mean or standard deviation for a distribution given a bunch of observed measurements this is how we fit a distribution to data hooray we've made it to the end of another exciting stat

this is how we fit a distribution to data hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more like it please subscribe it's super easy just click the little button below and if you have any suggestions for other stat quests that I could do put them in the comments alright until next time quest on

Maximum Likelihood for the Exponential Distribution, Clearly Explained!!!

it's raining outside good I've got a stat quest inside yeah hello I'm Josh Starla and welcome to stat quest today we're going to be talking about the exponential distribution and its maximum likelihood estimate we'll start with a brief introduction of the distribution and what it's used for and then we'll dive into the math and nitty-gritty of how maximum likelihood is applied to it so what is the exponential distribution it's a statistical distribution that models the time between events for

exponential distribution it's a statistical distribution that models the time between events for example how long will you wait before you get another text message or how much time will pass before the next person views this video here's what an exponential distribution looks like the x-axis is the amount of time between events the y-axis is scaled so that the total area under the curve equals 1 if we were interested in the probability of an event like someone viewing this video happening

1 if we were interested in the probability of an event like someone viewing this video happening within 0 to 5 seconds we solved for the area under the curve from x equals 0 to x equals 5 seconds here's the equation for an exponential distribution you plug in some value for X and out comes a value for y lambda is called the rate parameter and it is proportional to how quickly things happen in this graph lambda equals 1 and this models an event happening like someone watching this video on

this graph lambda equals 1 and this models an event happening like someone watching this video on average every second here lambda equals two and this models someone watching the video on average twice every second here lambda equals 0.5 and this models someone watching this video on average once every two seconds the goal of maximum likelihood is given a set of measurements to find an optimal value for lambda so assume I collected a lot of data about how much time passed between views of this

for lambda so assume I collected a lot of data about how much time passed between views of this video X sub 1 equals the amount of time that passed between the first and second views X sub 2 equals the amount of time that passed between the second and third views X sub 3 equals the amount of time that passed between the third and fourth views etc etc etc here are the n measurements for now let's assume we already have a good value for lambda what's the likelihood of lambda given our first

assume we already have a good value for lambda what's the likelihood of lambda given our first measurement X sub 1 here's the likelihood function we have the likelihood of lambda given that we have this measurement X sub 1 and the likelihood equals this equation this equation is just the equation for the curve with X sub 1 plugged into it if X sub 1 was here the likelihood of lambda would be this value on the y-axis similarly the likelihood of lambda given the second measurement X sub 2 is just

value on the y-axis similarly the likelihood of lambda given the second measurement X sub 2 is just the equation for the curve with X sub 2 plugged into it if X sub 2 was here the likelihood of lambda would be this value on the y-axis what is the likelihood of lambda given both X sub 1 and X sub 2 well here are the individual likelihood functions and here's the combined likelihood function because we are interested in X sub 1 and X sub 2 we multiply the 2 likelihood functions together here I've

we are interested in X sub 1 and X sub 2 we multiply the 2 likelihood functions together here I've just plugged in the 2 likelihood equations and now I've pulled the two lambdas out and lastly I can add the exponents together thus this equation is the likelihood of lambda given X sub 1 and X sub 2 bam what is the likelihood of lambda given all of the data X sub 1 X sub 2 all the way to X sub n here's the likelihood function that includes all of the data we have collected it is equal to the

n here's the likelihood function that includes all of the data we have collected it is equal to the product of all the individual likelihoods here I've just plugged in all the individual likelihood equations and now I've just pulled out all of the lambdas and lastly I've added all of the exponents together thus this equation is the likelihood of lambda given all of the data X sub 1 X sub 2 all the way to X sub M BAM [Music] what if we don't have a good value for lambda well we try different

the way to X sub M BAM [Music] what if we don't have a good value for lambda well we try different values for lambda to find a good one to find the maximum likelihood we one take the derivative of this and to solve for lambda when the derivative is set to be equal to zero here's a graph of the likelihood using different values for lambda at the maximum likelihood the slope and thus the derivative will be equal to zero to find the maximum likelihood estimate for lambda step 1 we take the

will be equal to zero to find the maximum likelihood estimate for lambda step 1 we take the derivative of the likelihood function anytime you have a function with an exponential in it it's almost always easier to take the derivative of the log of that function so that's what we're going to do we can do this because the derivative of a function and the derivative of the log of a function equals zero at the same place so for the purposes of finding where the derivative equals zero the original

zero at the same place so for the purposes of finding where the derivative equals zero the original function and its log are interchangeable since we are now working with the log of the function we can split up the multiplication into addition next we move lambdas exponent in to be in front of the log in the log of the exponential function reduces to just its exponent if any of this fancy log stuff is confusing you check out the stat quest on logs finally we take the derivative of both parts of

is confusing you check out the stat quest on logs finally we take the derivative of both parts of the equation with respect to lambda now we move on to step two set the derivative to be zero and solve for lambda here I added X sub 1 plus X sub 2 plus all the way to X sub n to both sides causing the term to cancel out on the right side of the equal sign then I just multiplied both sides by lambda and lastly I divided both sides by X sub 1 plus X sub 2 plus all the way to X sub n this is the

and lastly I divided both sides by X sub 1 plus X sub 2 plus all the way to X sub n this is the maximum likelihood estimate for lambda double BAM now whenever we collect a lot of data about how much time takes place between events we just plug those values into this equation and we'll get the maximum likelihood estimate for lambda and then we can fit an exponential distribution to our data for example if two seconds pass between the first and second times this video was watched then X sub 1

example if two seconds pass between the first and second times this video was watched then X sub 1 would equal 2 and of 2.5 seconds passed between the second and third times this video was watched then X sub 2 would equal 2.5 in of 1.5 seconds passed between the third and fourth times this video was watched then X sub 3 would equal 1.5 if that's all our data then we just plug in to 2.5 and 1.5 into the formula for the maximum likelihood estimate for lambda and solve for lambda thus given the

into the formula for the maximum likelihood estimate for lambda and solve for lambda thus given the data the maximum likelihood estimate for lambda is 0.5 and this is what an exponential distribution looks like when lambda equals 0.5 hooray we've made it to the end of another exciting stat quest if you liked this stack quest and want to see more well please subscribe and if you want to support stat quest please click the like button below and consider buying one or two of my original songs

stat quest please click the like button below and consider buying one or two of my original songs alright until next time quest on

Maximum Likelihood for the Binomial Distribution, Clearly Explained!!!

maximum likelihood the binomial distribution that's what we'll talk about today stat quest hello I'm Josh stormer and welcome to stat quest today we're going to talk about maximum likelihood for the binomial distribution and it's gonna be clearly explained note this stat quest follows up on the stat quest maximum likelihood clearly explained as well as the stat quest probability versus likelihood and lastly this stat quest assumes you are already familiar with the binomial distribution if not

and lastly this stat quest assumes you are already familiar with the binomial distribution if not check out the stat quest the binomial distribution and test clearly explained in the stat quest on the binomial distribution and test we use the binomial distribution aka this nasty-looking thing to determine if in general people like orange Fanta more than grape Fanta in the context of this problem X is the number of people who preferred orange Fanta in this case x equals 4 n is the total number

X is the number of people who preferred orange Fanta in this case x equals 4 n is the total number of people we asked about whether they preferred orange Fanta or grape Fanta in this case in equals 7 and P is the probability somebody would randomly choose orange Fanta over grape Fanta in this case P equals 0.5 all together the left side of the equation reads the probability of X the number of people who say they prefer orange Fanta given in the number of people we asked and P the probability of

who say they prefer orange Fanta given in the number of people we asked and P the probability of picking orange Fanta then we just plug the numbers in and chugged away at the math and the probability that 4 out of 7 people would randomly prefer orange Fanta is zero point 2 7 3 now if we want to calculate the likelihood of P equals 0.5 then all we need to do is rearrange the left side of the equation that is to say we change this to this now the left side of the equation reads the likelihood of

that is to say we change this to this now the left side of the equation reads the likelihood of P the probability of picking orange Fanta given in the number of people we asked and X the number of people who say they prefer orange Fanta the right side of the equation however stays the same and this is now the likelihood of P equals 0.5 given that four out of seven people would randomly prefer orange Fanta just a reminder when we calculate likelihoods for P we can plug in different values for it

Fanta just a reminder when we calculate likelihoods for P we can plug in different values for it while the observed data in equals 7 and x equals four remains fixed in other words we can calculate the likelihoods for different values of P given that four out of seven people said they preferred orange Fanta for example the likelihood of P equals 0.25 given that four out of seven people said they prefer two orange Fanta is plug and chug plug and chug plug and chug 0.058 the likelihood of P equals

two orange Fanta is plug and chug plug and chug plug and chug 0.058 the likelihood of P equals 0.25 given that four out of seven people would randomly prefer orange Fanta is less than 0.2 7/3 the likelihood when P equals 0.5 we can also calculate the likelihood of P equals 0.57 given that four out of seven people said they preferred orange Fanta plug and chug plug and chug plug and chug and we get zero point two nine four the likelihood of P equals zero point five seven given that four out of

zero point two nine four the likelihood of P equals zero point five seven given that four out of seven people would randomly prefer orange Fanta is greater than zero point two seven three the likelihood when P equals zero point five we can plot the likelihood with a bunch of different values for P between zero and one tada this peak is the maximum likelihood the slope of the curve at the peak is zero that means we can solve for the value for P that results in the maximum likelihood by finding

zero that means we can solve for the value for P that results in the maximum likelihood by finding where the derivative I II the slope is equal to 0 so let's do it here's the original likelihood function with n equals 7 and x equals 4 the first thing we do is take the log of the likelihood function we do this because the original likelihood function and its log will both reach the maximum using the same value for P and it's way easier to take the derivative of the log of the likelihood function

same value for P and it's way easier to take the derivative of the log of the likelihood function compared to the original function to see this here is a plot of the likelihood function and here is the log of the likelihood function both have peaks at the same value for P the log function turns the multiplication into addition and it turns the exponents into multiplication if this log stuff is freaking you out well don't freak out just watch the stat quest on logs now we're ready to take the

freaking you out well don't freak out just watch the stat quest on logs now we're ready to take the derivative but first because we are running out of room we'll move this to the top of the screen okay now we take the derivative with respect to P this first part doesn't contain P at all so it's derivative equals zero the derivative of the second part is just four times one over P the derivative of this last part is a little tricky since we need to apply the chain rule so we start with 7 minus 4

this last part is a little tricky since we need to apply the chain rule so we start with 7 minus 4 times the derivative of the log of 1 minus P and we multiply that by the derivative of 1 minus P then we simplify and plug it in BAM [Music] now we set the derivative to zero because we want to find the peak where the slope of the curve equals zero and that will tell us which value for P gives the maximum likelihood now multiply both sides by P times 1 minus P now multiply out 4 times 1 minus P

maximum likelihood now multiply both sides by P times 1 minus P now multiply out 4 times 1 minus P now combine negative 4 P and negative 3p then just solve for P the maximum likelihood estimate for P is for the number of people who preferred orange Fanta divided by 7 the total number of people we asked double bam okay we just solved for the maximum likelihood estimate for P when we have data for X and n however we don't actually need data to determine a general formula for the maximum

data for X and n however we don't actually need data to determine a general formula for the maximum likelihood for P this formula will give us the maximum likelihood estimate for P when there are X successes in n trials that's how you say it using fancy statistics lingo we'll start with the original likelihood function however this time all of the variables P X and n are unknown just like before we take the log of the likelihood function because it will make solving for the derivative way

we take the log of the likelihood function because it will make solving for the derivative way easier and just like before the log function turns the multiplication into addition and the exponents into multiplication now we're ready to take the derivative and just like before because we are running out of room we will move this to the top of the screen okay now we take the derivative with respect to P the first part does not contain P so it's derivative is zero the derivative of the second part

to P the first part does not contain P so it's derivative is zero the derivative of the second part is just x times 1 over P and just like before we have to use the chain rule to figure out the derivative of this last part so we start with n minus x times the derivative of the log of 1 minus P and we multiply that by the derivative of 1 minus P then we simplify and plug it in then just like before we set the derivative to zero note different values for n and X will result in different curves

we set the derivative to zero note different values for n and X will result in different curves but the slope is still zero at the maximum likelihood now multiply both sides by P times 1 minus P now multiply out x times 1 minus P and now negative XP and positive XP cancel each other out then just solve for P in this case the maximum likelihood estimate for P is X the number of successes divided by n the total number of trials BAM some of you may be saying to yourself duh what's the big deal the

n the total number of trials BAM some of you may be saying to yourself duh what's the big deal the maximum likelihood estimate for P is just the average that's obvious well I agree once you know the solution it's pretty obvious but now we also have a mathematical proof that backs up our intuition and to me that's a very comforting thing triple bail hooray we've made it to the end of another exciting stat quest if you liked this tech quest and want to see more of them please subscribe and if you

stat quest if you liked this tech quest and want to see more of them please subscribe and if you want to support stat quest well click the like button below and consider buying one or two of my original songs alright until next time quest on

We're gonna do a lot of math step by step by step by step by step StatQuest!!! Hello, I'm Josh Starmer and welcome to StatQuest Today we're going to talk about maximum likelihood for the normal distribution and it's gonna be clearly explained Not: This StatQuest follows up on the StatQuest "Maximum Likelihood Clearly Explained" as well as the StatQuest "Probability Versus Likelihood" Lastly this StatQuest assumes you are already familiar with the normal distribution If not, check out the

this StatQuest assumes you are already familiar with the normal distribution If not, check out the StatQuest "The Normal Distribution Clearly Explained" Let's start with this nasty-looking equation It's the equation for the normal distribution or normal curve It has two parameters the first parameter, the Greek character μ (mu) determines the location of the normal distribution's mean a smaller value for μ moves the mean of the distribution to the left and a larger value for μ moves the mean of

for μ moves the mean of the distribution to the left and a larger value for μ moves the mean of the distribution to the right the second parameter, the Greek character σ (sigma), is the standard deviation and determines the normal distribution's width a larger value for σ makes the normal curve shorter and wider and a smaller value for σ makes the normal curve taller and narrower In this StatQuest we're going to use the likelihood of the normal distribution to find the optimal parameters for μ

we're going to use the likelihood of the normal distribution to find the optimal parameters for μ the mean and σ, the standard deviation, given some data x Let's start with the simplest data set of all: a single measurement Here we've measured a single Mouse and it weighs 32 grams. Now just to see what happens We can overlay a normal distribution with μ equals 28 and σ equals 2 onto the data To determine the likelihood of the data given this curve we can plug the numbers into the likelihood

determine the likelihood of the data given this curve we can plug the numbers into the likelihood function and then plug the numbers into this equation and here's the equation with μ equals 28 σ equals 2 and x equals 32 plugged in Now just do the math plug and chug plug and chug and the likelihood of the curve with μ equals 30 and σ equals 2, given the data, is 0.03 thus the y-axis value here is 0.03 Now we can shift the distribution a little bit to the right by setting μ equals 30 and then

is 0.03 Now we can shift the distribution a little bit to the right by setting μ equals 30 and then calculate the likelihood Again we just plug the numbers into the likelihood function and now we just plug and chug and the likelihood of the new curve with μ equals 30 and σ equals 2, given the data, is 0.12 Thus the y-axis value here is 0.12 If we decide to fix σ equals 2 so that it is a given just like the data Then we can plug in a whole bunch of values for μ and see which one gives the

just like the data Then we can plug in a whole bunch of values for μ and see which one gives the maximum likelihood For example, if we start with the mean of the distribution over here on the left at 20 grams then we plug μ equals 20 into the equation and we get a crazy small likelihood and Then we can plot the likelihood on a graph The y-axis is the likelihood value and the x-axis is for the different values that we plug in for μ Each time we change μ we calculate the likelihood and plot it We

values that we plug in for μ Each time we change μ we calculate the likelihood and plot it We can identify the peak in the likelihood graph by determining where the slope of the curve equals zero in this case the slope equals zero when μ equals 32 Now we can fix μ equals 32 and treat it like a given just like the data And we can plug in different values for σ to find the one that gets the maximum likelihood Note: You actually need more than one measurement to find the optimal value for σ I'll

likelihood Note: You actually need more than one measurement to find the optimal value for σ I'll leave the reason why as an exercise for the viewer That said, if we had more data Then we could plot the likelihoods for different values of σ And the maximum likelihood estimate for σ would be at the peak, where a slope of the curve equals zero The goal of this super simple example is to convey the basic concepts of how to find the maximum likelihood estimates for μ and σ To solve for the maximum

basic concepts of how to find the maximum likelihood estimates for μ and σ To solve for the maximum likelihood estimate for μ We treat σ like it's a constant and then find where the slope of its likelihood function is 0 And to solve for the maximum likelihood estimate for σ we treat μ like it's a constant and then find where the slope of its likelihood function is 0 The example with one measurement kept the math simple, but now I think we're ready to dive in a little deeper So let's use a two

kept the math simple, but now I think we're ready to dive in a little deeper So let's use a two sample data set to calculate the likelihood of a normal distribution Crazy Times! To keep track of things, let's call the mouse that weighs 32 grams X sub 1 And the mouse that weighs 34 grams X sub 2 And again, just to see what happens Let's overlay a normal distribution with μ equals 28 and σ equals 2 onto the data We've already seen how to calculate the likelihood for this curve given X sub 1, the

onto the data We've already seen how to calculate the likelihood for this curve given X sub 1, the mouse that weighs 32 grams And we can calculate the likelihood for the curve given X sub 2 by plugging in 34 into this likelihood function but what's the likelihood of this normal curve given both X sub 1 and X sub 2 In other words, what's this? Because these measurements are independent (i.e. weighing X sub 1 did not have an effect on weighing X sub 2) The likelihood of a normal distribution with

X sub 1 did not have an effect on weighing X sub 2) The likelihood of a normal distribution with μ equals 28 and σ equals 2 given the data X sub 1 equals 32 and X sub 2 equals 34 is just the likelihood of the distribution given X sub 1 times the likelihood of the distribution given X sub 2 So we just plug in the numbers and do the math And that gives us a really small number If we had a third data point then we just add it to the given side of the overall likelihood and Add another individual

point then we just add it to the given side of the overall likelihood and Add another individual likelihood term to our multiplication With n data points We add all n data points to the given side of the overall likelihood function Then multiply together all n individual likelihood functions BAM!!! Now that we know how to calculate the likelihood of a normal distribution when we have more than one measurement (we just multiply together the individual likelihoods). Let's solve for the maximum

one measurement (we just multiply together the individual likelihoods). Let's solve for the maximum likelihood estimates for μ and σ BRACE YOURSELF FOR A LOT OF MATH!!! But don't freak out, we'll go through it one step at a time Here's the likelihood function without any value specified for μ and σ it equals the product of the likelihood functions for the N individual measurements and here's what the equation looks like What we need to do is take two different derivatives of this equation One

the equation looks like What we need to do is take two different derivatives of this equation One derivative will be with respect to μ. When we treat σ like it's a constant and we can find the maximum likelihood estimate for μ by finding where this derivative equals zero the other derivative will be with respect to σ when we treat μ like it's a constant and we can find the maximum likelihood estimate for σ by finding where this derivative equals zero But before we try to take any derivatives,

for σ by finding where this derivative equals zero But before we try to take any derivatives, let's take the log of the likelihood function We do this because it makes taking the derivative way way easier In the likelihood function and the log of the likelihood function both peak at the same values for μ and σ. I know it's hard to tell that the log likelihood function for σ peeks here, but just take my word for it. I double-checked! Here's the log of the likelihood Now we're going to go, step

take my word for it. I double-checked! Here's the log of the likelihood Now we're going to go, step by step, through all of the transformations that the log has on this function Just a heads up - the log is going to do a lot of transformations to this function, so hang in there!!! First the log transforms the multiplication into addition Now we log transform the individual likelihood functions Let's focus on this one first Step 1: Move the log of the first likelihood function to the top

Let's focus on this one first Step 1: Move the log of the first likelihood function to the top left-hand side of the screen for reference Step 2: Convert the multiplication into addition Step 3: Convert 1 over the square root into the exponent -1/2 and convert the exponent into multiplication Step 4: Convert the -1/2 exponent into multiplication and the ln(e)=1 So we can remove it Step 5: The log can convert the multiplication of 2πσ² into addition of two times π and σ squared and there's

log can convert the multiplication of 2πσ² into addition of two times π and σ squared and there's nothing more to do to this term so it doesn't change Step 6: Convert the exponent in the log of σ squared into 2 times the log of σ Step 7: Lastly, the 2/2 term cancels out BAM!!! We started with this and after the log transformation ended up with this!!! I know all of this log transformation stuff looks bonkers the first time you see it Just remember, it will make it easier to take the derivative.

bonkers the first time you see it Just remember, it will make it easier to take the derivative. So now we can go back to the original likelihood and turn this into this And by following the same steps, we can transform the remaining parts of the sum into this Now let's simplify this equation Just to be clear about how we simplify, keep in mind that since we have n data points that means we have a term for the first data point, X sub 1 and that this represents the terms for the remaining n minus

term for the first data point, X sub 1 and that this represents the terms for the remaining n minus 1 data points. So we can combine this from the first term with the remaining n minus 1 occurrences. 1 plus n minus 1 equals n Then all n of the negative log of σ's can be combined and the last parts of each term stay the same. This is the log of the likelihood function after simplification, and it is what we will take the derivative of. So, let's move it to the top for reference We'll start by

is what we will take the derivative of. So, let's move it to the top for reference We'll start by taking the derivative with respect to μ This derivative is the slope function for the log of the likelihood curve and we'll use it to find the peak a.k.a where the slope equals zero The first term doesn't contain μ, so it's derivative is 0 The second term doesn't contain μ either, so it's derivative is also 0 The third term contains μ, so now we have to work Specifically, the numerator contains μ

is also 0 The third term contains μ, so now we have to work Specifically, the numerator contains μ and we have to apply The Chain Rule So we start with the outer derivative of negative 32 minus μ squared and then we multiply that by the derivative of 32 minus μ and then we simplify Because the derivative is with respect to μ, σ is a constant and, thus, the denominator doesn't change. So we can combine the two pieces and the 2s cancel out and that means the derivative of this is this Likewise,

the two pieces and the 2s cancel out and that means the derivative of this is this Likewise, we apply The Change Rule To the remaining terms and get these! BAM!!! Now we can simplify the equation These zeros go away and we can pull the σ squared out and add the numerators together. Then we can combine the measurements and , lastly, we can combine the μs Thus, this is the derivative of the log-likelihood function with respect to μ DOUBLE BAM!!! Now, let's take the derivative of the

the log-likelihood function with respect to μ DOUBLE BAM!!! Now, let's take the derivative of the log-likelihood function with respect to σ. This derivative is the slope function for the log of the likelihood curve and we'll use it to find the peak, which is hard to see in this graph! So, from here on out, because they peak at the same spot I'll show you the likelihood functions instead of the log-likelihood functions The first term doesn't contain σ, so it's derivative is zero. The derivative

functions The first term doesn't contain σ, so it's derivative is zero. The derivative of the second term is just n over σ. The derivative of this term isn't tricky but it's easier to figure out when we rewrite 1 over σ squared as σ to the negative 2 Since we're taking the derivative with respect to σ, this part can be treated like a big constant. and the derivative of this is this. The two negatives cancel out and then the 2s cancel out and lastly we put σ back into the denominator by changing

cancel out and then the 2s cancel out and lastly we put σ back into the denominator by changing the sign of the exponent So the derivative of this is this! So that's what we put into the equation. Likewise, the derivatives of the remaining terms simplify to these. BAM!!! This is the derivative of the log-likelihood function with respect to σ. We can simplify the equation by omitting the zero leaving the second term the same and we can pull the σ cubed out and add up the remaining terms. DOUBLE

the second term the same and we can pull the σ cubed out and add up the remaining terms. DOUBLE BAM!!! At long last here are the two derivatives!!! To find the maximum likelihood estimate for μ we need to solve for where the derivative with respect to μ equals zero because the slope is zero at the peak of the curve Likewise to find the maximum likelihood estimate for σ we need to solve for where the derivative with respect to σ equals zero because the slope is zero at the peak of the curve

the derivative with respect to σ equals zero because the slope is zero at the peak of the curve We'll start by setting the derivative with respect to μ to 0 and solve for μ We start by multiplying both sides by σ squared, that makes the σ squared go away then we add n times μ to both sides divide both sides by n and solve. Thus, the maximum likelihood estimate for μ is the mean of the measurements. So that is where the center of our normal curve will go. DON'T GET TOO EXCITED.

WE'RE NOT DONE YET!!! DANG!!! Now we need to set the derivative with respect to σ to 0 Now multiply both sides by σ add n to both sides multiply both sides by σ squared divide both sides by n and take the square root of both sides and at long last we see that the maximum likelihood estimate for σ is the standard deviation of the measurements Thus, we use the formula for the standard deviation to determine the width of the normal curve that given the data, has the maximum likelihood In summary

determine the width of the normal curve that given the data, has the maximum likelihood In summary The mean of the data is the maximum likelihood estimate for where the center of the normal distribution should go and the standard deviation of the data is the maximum likelihood estimate of how wide the normal curve should be Note: These solutions may be obvious, but now we have the math that proves that our intuition is correct. wait for it TRIPLE BAM! Hooray! We've made it to the end of another

that our intuition is correct. wait for it TRIPLE BAM! Hooray! We've made it to the end of another exciting StatQuest. If you like this StatQuest and want to see more of them please subscribe, and if you want to support StatQuest, well, please consider buying one or two of my original songs Alright, until next time QUEST ON!!!

Frank Starmer Clearly Explained (How my pop influenced StatQuest!!!)

frank starman he's my pop today turns eighty hip hip hooray bam stack quest hello i'm josh starmer and welcome to statquest today we're gonna talk about my pop and he's going to be clearly explained today my pop frank starmer turns 80. hooray as you might imagine my pop had a large influence on my life and as a result a huge influence on statquest so today i want to go over three ways my pop has influenced me in statquest lesson number one if you've heard me talk about statquest before you've

influenced me in statquest lesson number one if you've heard me talk about statquest before you've probably already heard me say that it is important to focus on the main ideas however it's so important that i cannot repeat it enough so let me repeat it one more time focus on the main ideas a good example on the importance of focusing on the main ideas comes from when i took my first statistics class in this class instead of learning the main idea we memorized a lot of individual recipes for

class in this class instead of learning the main idea we memorized a lot of individual recipes for example when we learned about t-tests we had to memorize these equations to calculate p-values then later on when we sort of learned about anova we had to memorize this nasty looking equation to calculate a p-value then when we learned about linear regression we had to memorize these double nasty looking equations to calculate p-values ugh instead of learning the main idea i was learning recipes

equations to calculate p-values ugh instead of learning the main idea i was learning recipes however my pop showed me how even though these equations look very different they are all related to this one relatively easy to remember equation f equals the explained variance divided by the unexplained variance this one equation which does t-test anova and regression with equal ease is one of the main ideas in all of statistics it's simple and powerful and unlike learning a bunch of isolated recipes

ideas in all of statistics it's simple and powerful and unlike learning a bunch of isolated recipes you only have to learn one overarching concept that can be applied in all kinds of situations bam note if you're not already familiar with this main idea and how awesome it is then i highly recommend checking out the stat quests on linear models stat quests more than any other are based on the lessons my pop gave me during that first statistics class lesson number two there is always a better way

my pop gave me during that first statistics class lesson number two there is always a better way when i was young my pop had a poster on his door that showed turtles swimming across a river except the last one wasn't swimming it was paddling and the poster said there's always a better way i think about this poster all the time because it gives me the courage to make statquest different from other data science channels when i learn new subjects i am usually in awe of both the material and the

data science channels when i learn new subjects i am usually in awe of both the material and the way it was taught but then i think about this guy and i think just because i learned something one way doesn't mean i have to teach it the same way because there is always a better way knowing this pushes me to try harder to find a better way double bam lesson number three don't guess do the math back when i was a kid doing math homework i had something that looked like this the goal was to solve

when i was a kid doing math homework i had something that looked like this the goal was to solve for x so i did a little algebra and moved all the constants to the left side and when i saw this i said bam x equals one then my pop said you're guessing then i said no i'm not when i plug in x equals one the math works out and my pop said don't guess do the math so finally i finished the math and i saw that i was wrong my pop was right i had been guessing from this i learned that it was easy to be

that i was wrong my pop was right i had been guessing from this i learned that it was easy to be fooled into skipping steps and guessing when the answer looked obvious and that no matter how obvious the solution is unless i take the time to do the math step by step i am just making a guess now when i'm learning a new algorithm i make sure i work through every single step of the process no matter how simple it looks by doing this i often discover new insights that other people omit bam one of

how simple it looks by doing this i often discover new insights that other people omit bam one of the best examples of how going through the math step by step resulted in a deeper understanding is my series on neural networks these videos show the power of my pop's advice triple bam in summary my pop influenced me and statquest by telling me one focus on the main ideas two there's always a better way and three don't guess do the math now last but not least happy birthday pop hooray we've made

way and three don't guess do the math now last but not least happy birthday pop hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support statquest consider contributing to my patreon campaign becoming a channel member buying one or two of my original songs or a t-shirt or a hoodie or just donate the links are in the description below alright until next time quest on

if I had to choose between stack quest and watching cool is a start vanilla ice I'd watch stack quest stack quest hello I'm Josh stormer and welcome to stack quest today we're going to talk about why dividing by n underestimates the variance this stack quest assumes you already understand why we want to estimate population parameters if not check out the quest also this stack quest picks up from where we left off when we gave an overview of how to estimate the mean variance and standard

from where we left off when we gave an overview of how to estimate the mean variance and standard deviation if you haven't seen that one you might want to check it out getting up from where we left off in the stat quest on the mean variance and standard deviation we measured gene X in five different liver cells and then we collected data from more liver cells until we had the entire population of liver cells and we used all of that data to draw a histogram and then we fit a normal curve to the

liver cells and we used all of that data to draw a histogram and then we fit a normal curve to the histogram that meant we calculated the population mean mu the population mean mu equals the sum of the measurements divided by the number of measurements which equals the average measurement mu and we calculated the population variance in standard deviation the population variance is the average of the squared distances between the data and the population mean and the population standard deviation

squared distances between the data and the population mean and the population standard deviation is just the square root of the variance since the standard deviation is in the same units as the original data we can draw it on the graph however since we rarely if ever have enough time and money to measure every single thing in a population we almost always estimate the population mean the estimated population mean x-bar equals the sum of the measurements divided by the number of measurements and

population mean x-bar equals the sum of the measurements divided by the number of measurements and that equals the average measurement x-bar and we estimate the variation and standard deviation the estimated population variance is the sum of the squared differences divided by n minus 1 and the standard deviation is just the square root of the variance and since the standard deviation is in the same units as the original data we can draw it on the graph we also mentioned that dividing by IDI

same units as the original data we can draw it on the graph we also mentioned that dividing by IDI minus one compensates for the fact that we are calculating differences from the sample mean instead of the population mean otherwise we would consistently underestimate the variance around the population mean then I said I'd give more details about why dividing by n underestimates the population variance in a future stat quest the future is now BAM to understand why dividing by n underestimates

in a future stat quest the future is now BAM to understand why dividing by n underestimates the population variance we'll start with a few simple examples and then we'll dive into the math and prove it once and for all in this first example I want to replace the sample mean x-bar with zero and see what happens now we square the differences between the measurements and zero calculate the average and that gives us 391 BAM now let's plot that value on a graph the y-axis on this graph corresponds

and that gives us 391 BAM now let's plot that value on a graph the y-axis on this graph corresponds to the value we just calculated it is the variance around a specific point and the x-axis corresponds to that point now let's move the purple line over to five and square the differences between the measurements and five and then calculate the average and that gives us 240 we can plot that point on the graph here's another point and another and this is the variance around the sample mean remember

the graph here's another point and another and this is the variance around the sample mean remember right now we are dividing by n not n minus 1 this is the variance around the population mean and here are a few more points note the point with the smallest variance corresponds to the sample mean x-bar and this point with a slightly larger variance corresponds to the population mean so in this case when we plug in the population mean and divide by n we get a larger variance then when we plug in

when we plug in the population mean and divide by n we get a larger variance then when we plug in the sample mean and divide by n in other words when we use the sample mean we underestimated the variance we got with the population mean BAM now let's get 5 new measurements from the same population and see if the same thing happens when we divide by n with a smallest variance be around the sample mean so just like before let's replace the sample mean x-bar with zero and see what happens now

mean so just like before let's replace the sample mean x-bar with zero and see what happens now square the differences between the measurements and zero calculate the average that gives us 616 before we can plot variances on the graph here's another point and another and another this is the variance around the population mean and this is the variance around the sample mean and here are a few more points before we see that the minimum variance is at the sample main so just like before when we

points before we see that the minimum variance is at the sample main so just like before when we plug in the population mean and divide by n we get a larger variance then when we plug in the sample mean and divide by n so again when we use the sample mean and divided by n we underestimated the variance calculated around the population mean BAM so far we have seen two simple examples where using the sample mean and dividing by n underestimated the variance as we got with the population mean now

sample mean and dividing by n underestimated the variance as we got with the population mean now let's prove that this will always happen first let's go back to the original data in the graph that we drew with it the first thing we do is realize that even though we only calculated variance around a handful of points we can replace X bar with an unknown value V and use this formula to graph all possible values for V note to emphasize the fact that we are plugging in different values for V I've

values for V note to emphasize the fact that we are plugging in different values for V I've modified the X access label now we can take the derivative of this formula with respect to the unknown value V and use it to determine the slope of the curve at different values for V the slope equals zero then we found the value for V that gives us the smallest variance so let's move this to the upper left hand corner and solve for the derivative the first thing we do is use the chain rule what the

left hand corner and solve for the derivative the first thing we do is use the chain rule what the chain rule to solve for the derivative of X minus V squared so we bring the square down to the front and then we multiply everything by the derivative of X minus V which is negative one because the derivative of X with respect to V is zero and the derivative of negative V is negative one and that gives us the derivative with respect to V now we simplify by multiplying 2 and negative 1 lastly we

gives us the derivative with respect to V now we simplify by multiplying 2 and negative 1 lastly we can simplify things just a little more by moving the negative 2 and 1 divided by n outside of the summation this is the derivative with respect to the unknown value V BAM just to remind you the derivative corresponds to the slope of the Purple Line and we want to find the value for V such that the slope of the Purple Line equals zero because that is where we will find the minimum variance to make

of the Purple Line equals zero because that is where we will find the minimum variance to make this as clear as possible we will find where the derivative is zero and the variance is minimized three different ways first we'll find where the variance is minimized using the observed data then we'll find where the variance is minimized for any five measurements and then we'll show how to find the minimum variance for any sample regardless of size so let's start by plugging the data into the

the minimum variance for any sample regardless of size so let's start by plugging the data into the derivative the first thing we do is plug in 5 for n since we have 5 measurements then we plug in the measurements since we want to find the value for V where the slope equals zero and the derivative is the slope we set the derivative equal to zero and solve for V note this negative 2/5 is the only thing making it hard to solve for V so we multiply both sides by 5 divided by negative 2 to cancel

thing making it hard to solve for V so we multiply both sides by 5 divided by negative 2 to cancel out the negative 2/5 now solving for V is super easy boo boo boo boo boo boo boo boo boo V is the average of the five measurements which is the sample mean x-bar and thus V equals x-bar which equals seventeen point six thus the derivative is zero when V equals x-bar which equals seventeen point six and the variance is minimized when V equals x-bar which equals seventeen point six this is why given

the variance is minimized when V equals x-bar which equals seventeen point six this is why given this data the value around the sample mean is less than the value around the population mean in other words the differences between the data and the sample mean tend to be smaller than the differences between the data and the population mean thus the differences around the population mean will result in a larger average and the larger average is what we are trying to estimate BAM now let's go back

in a larger average and the larger average is what we are trying to estimate BAM now let's go back to plugging data into the derivative and replace the data with five unknown values these unknown values represent future measurements we'll call this unknown value X sub one note even though X sub one is on the left side of the graph just know that it could be any possible value and let's call this unknown value X sub 2 X sub 3 of four and X sub 5 now let's plug the unknown data into the

this unknown value X sub 2 X sub 3 of four and X sub 5 now let's plug the unknown data into the derivative just like before we plug in five four in since we have five measurements then we plug in the measurements since we want to find the value for V where the slope equals zero we set the derivative equal to zero and solve for V like before we multiply both sides by 5 divided by negative 2 to cancel out the negative 2/5 now solving for V is super easy boo-boo-boo-boo-boo-boo-boop boom boom V is

out the negative 2/5 now solving for V is super easy boo-boo-boo-boo-boo-boo-boop boom boom V is the average of the five measurements which is the sample mean x-bar so no matter what five measurements we start with the value that gives us the minimum variance is x-bar BAM now let's see what happens when we have any size sample ie a sample with in measurements so let's plug the unknown data into the derivative now instead of replacing n with a number we just leave it since we have n measurements

derivative now instead of replacing n with a number we just leave it since we have n measurements now we plug in all in measurements and set the derivative equal to zero and solve for V first we multiply both sides by n divided by negative 2 to cancel out the negative 2 divided by N now solving for V is super easy v is the average of the end measurements which is the sample mean x-bar so no matter how many measurements we start with the value that gives us the minimum variance is X bar double

how many measurements we start with the value that gives us the minimum variance is X bar double bail thus when we divide by n the value around the sample mean is always less than the value around the population mean unless the sample mean is the exact same as the population mean and that pretty much never happens triple bam before we go let's talk about why we square the differences instead of using the absolute value remember when we use the derivative to find the minimal value doing the

of using the absolute value remember when we use the derivative to find the minimal value doing the calculus and understanding that this formula underestimated the variance around the population mean was relatively easy in contrast if we use the absolute value instead we'd get a graph that looked like this and since we have this sharp angle at the minimum value and derivatives do not exist at sharp angles like this then finding the minimum value is much harder with the absolute value than with

angles like this then finding the minimum value is much harder with the absolute value than with the square BAM in summary when we only divide by n we underestimate the variation in the data around the population main this is because the differences between the data and the sample mean tend to be smaller than the differences between the data and the population mean thus the differences around the population mean will result in a larger average and the larger average is what we are trying to

the population mean will result in a larger average and the larger average is what we are trying to estimate so if you are estimating the population variance divided by n minus one PS if you're wondering why we divide by n minus 1 and not n minus 0.5 or n minus 2 then you'll just have to wait for the stat quest on expected values hooray we've made it to the end of another exciting stat quest if you like this stat quest and want to see more please subscribe and if you want to support stat quest

like this stat quest and want to see more please subscribe and if you want to support stat quest well consider buying an original song or buying a t-shirt or a hoodie or just donating anything would be great alright until next time quest on

This is a 3. It's sloppily written and rendered at an extremely low resolution of 28x28 pixels,  but your brain has no trouble recognizing it as a 3. And I want you to take a moment to appreciate how  crazy it is that brains can do this so effortlessly. I mean, this, this and this are also recognizable as 3s,  even though the specific values of each pixel is very different from one  image to the next. The particular light-sensitive cells in your eye that are firing when  you see this 3 are very

The particular light-sensitive cells in your eye that are firing when  you see this 3 are very different from the ones firing when you see this 3. But something in that crazy-smart visual cortex of yours resolves these as representing  the same idea, while at the same time recognizing other images as their own distinct  ideas. But if I told you, hey, sit down and write for me a program that takes in a grid of  28x28 pixels like this and outputs a single number between 0 and 10,  telling you

in a grid of  28x28 pixels like this and outputs a single number between 0 and 10,  telling you what it thinks the digit is, well the task goes from comically trivial to  dauntingly difficult. Unless you've been living under a rock, I think I hardly need to motivate the relevance  and importance of machine learning and neural networks to the present and to the future. But what I want to do here is show you what a neural network actually is,  assuming no background, and to help visualize what

is show you what a neural network actually is,  assuming no background, and to help visualize what it's doing,  not as a buzzword but as a piece of math. My hope is that you come away feeling like the structure itself is motivated,  and to feel like you know what it means when you read,  or you hear about a neural network quote-unquote learning. This video is just going to be devoted to the structure component of that,  and the following one is going to tackle learning. What we're going to do

component of that,  and the following one is going to tackle learning. What we're going to do is put together a neural  network that can learn to recognize handwritten digits. This is a somewhat classic example for introducing the topic,  and I'm happy to stick with the status quo here,  because at the end of the two videos I want to point you to a couple good  resources where you can learn more, and where you can download the code that  does this and play with it on your own computer. There

and where you can download the code that  does this and play with it on your own computer. There are many many variants of neural networks,  and in recent years there's been sort of a boom in research towards these variants,  but in these two introductory videos you and I are just going to look at the simplest  plain vanilla form with no added frills. This is kind of a necessary prerequisite for understanding any of the more powerful  modern variants, and trust me it still has plenty of

for understanding any of the more powerful  modern variants, and trust me it still has plenty of complexity for us to wrap our minds  around. But even in this simplest form it can learn to recognize handwritten digits,  which is a pretty cool thing for a computer to be able to do. And at the same time you'll see how it does fall  short of a couple hopes that we might have for it. As the name suggests neural networks are inspired by the brain, but let's break that down. What are the neurons, and

neural networks are inspired by the brain, but let's break that down. What are the neurons, and in what sense are they linked together? Right now when I say neuron all I want you to think about is a thing that holds a number,  specifically a number between 0 and 1. It's really not more than that. For example the network starts with a bunch of neurons corresponding to  each of the 28x28 pixels of the input image, which is 784 neurons in total. Each one of these holds a number that represents the

input image, which is 784 neurons in total. Each one of these holds a number that represents the grayscale value of the  corresponding pixel, ranging from 0 for black pixels up to 1 for white pixels. This number inside the neuron is called its activation,  and the image you might have in mind here is that each neuron is lit up when its  activation is a high number. So all of these 784 neurons make up the first layer of our network. Now jumping over to the last layer, this has 10 neurons,  each

up the first layer of our network. Now jumping over to the last layer, this has 10 neurons,  each representing one of the digits. The activation in these neurons, again some number that's between 0 and 1,  represents how much the system thinks that a given image corresponds with a given digit. There's also a couple layers in between called the hidden layers,  which for the time being should just be a giant question mark for  how on earth this process of recognizing digits is going to be

just be a giant question mark for  how on earth this process of recognizing digits is going to be handled. In this network I chose two hidden layers, each one with 16 neurons,  and admittedly that's kind of an arbitrary choice. To be honest I chose two layers based on how I want to motivate the structure  in just a moment, and 16, well that was just a nice number to fit on the screen. In practice there is a lot of room for experiment with a specific structure here. The way the network operates,

there is a lot of room for experiment with a specific structure here. The way the network operates, activations in one  layer determine the activations of the next layer. And of course the heart of the network as an information processing mechanism comes down  to exactly how those activations from one layer bring about activations in the next layer. It's meant to be loosely analogous to how in biological networks of neurons,  some groups of neurons firing cause certain others to fire. Now the

networks of neurons,  some groups of neurons firing cause certain others to fire. Now the network I'm showing here has already been trained to recognize digits,  and let me show you what I mean by that. It means if you feed in an image, lighting up all 784 neurons of the input layer  according to the brightness of each pixel in the image,  that pattern of activations causes some very specific pattern in the next layer  which causes some pattern in the one after it,  which finally gives some

pattern in the next layer  which causes some pattern in the one after it,  which finally gives some pattern in the output layer. And the brightest neuron of that output layer is the network's choice,  so to speak, for what digit this image represents. And before jumping into the math for how one layer influences the next,  or how training works, let's just talk about why it's even reasonable  to expect a layered structure like this to behave intelligently. What are we expecting here? What is

expect a layered structure like this to behave intelligently. What are we expecting here? What is the best hope for what those middle layers might be doing? Well, when you or I recognize digits, we piece together various components. A 9 has a loop up top and a line on the right. An 8 also has a loop up top, but it's paired with another loop down low. A 4 basically breaks down into three specific lines, and things like that. Now in a perfect world, we might hope that each neuron in the second

lines, and things like that. Now in a perfect world, we might hope that each neuron in the second  to last layer corresponds with one of these subcomponents,  that anytime you feed in an image with, say, a loop up top,  like a 9 or an 8, there's some specific neuron whose activation is going to be close to 1. And I don't mean this specific loop of pixels,  the hope would be that any generally loopy pattern towards the top sets off this neuron. That way, going from the third layer to the last

pattern towards the top sets off this neuron. That way, going from the third layer to the last one just requires  learning which combination of subcomponents corresponds to which digits. Of course, that just kicks the problem down the road,  because how would you recognize these subcomponents,  or even learn what the right subcomponents should be? And I still haven't even talked about how one layer influences the next,  but run with me on this one for a moment. Recognizing a loop can also break

influences the next,  but run with me on this one for a moment. Recognizing a loop can also break down into subproblems. One reasonable way to do this would be to first  recognize the various little edges that make it up. Similarly, a long line, like the kind you might see in the digits 1 or 4 or 7,  is really just a long edge, or maybe you think of it as a certain pattern of several  smaller edges. So maybe our hope is that each neuron in the second layer of  the network corresponds with the

So maybe our hope is that each neuron in the second layer of  the network corresponds with the various relevant little edges. Maybe when an image like this one comes in, it lights up all of the  neurons associated with around 8 to 10 specific little edges,  which in turn lights up the neurons associated with the upper loop  and a long vertical line, and those light up the neuron associated with a 9. Whether or not this is what our final network actually does is another question,  one that I'll

9. Whether or not this is what our final network actually does is another question,  one that I'll come back to once we see how to train the network,  but this is a hope that we might have, a sort of goal with the layered structure  like this. Moreover, you can imagine how being able to detect edges and patterns  like this would be really useful for other image recognition tasks. And even beyond image recognition, there are all sorts of intelligent  things you might want to do that break down

image recognition, there are all sorts of intelligent  things you might want to do that break down into layers of abstraction. Parsing speech, for example, involves taking raw audio and picking out distinct sounds,  which combine to make certain syllables, which combine to form words,  which combine to make up phrases and more abstract thoughts, etc. But getting back to how any of this actually works,  picture yourself right now designing how exactly the activations in one layer might

works,  picture yourself right now designing how exactly the activations in one layer might  determine the activations in the next. The goal is to have some mechanism that could conceivably combine pixels into edges,  or edges into patterns, or patterns into digits. And to zoom in on one very specific example, let's say the  hope is for one particular neuron in the second layer to pick  up on whether or not the image has an edge in this region here. The question at hand is what parameters

whether or not the image has an edge in this region here. The question at hand is what parameters should the network have? What dials and knobs should you be able to tweak so that it's expressive  enough to potentially capture this pattern, or any other pixel pattern,  or the pattern that several edges can make a loop, and other such things? Well, what we'll do is assign a weight to each one of the  connections between our neuron and the neurons from the first layer. These weights are just

of the  connections between our neuron and the neurons from the first layer. These weights are just numbers. Then take all of those activations from the first layer  and compute their weighted sum according to these weights. I find it helpful to think of these weights as being organized into a  little grid of their own, and I'm going to use green pixels to indicate positive weights,  and red pixels to indicate negative weights, where the brightness of  that pixel is some loose depiction of the

to indicate negative weights, where the brightness of  that pixel is some loose depiction of the weight's value. Now if we made the weights associated with almost all of the pixels zero  except for some positive weights in this region that we care about,  then taking the weighted sum of all the pixel values really just amounts  to adding up the values of the pixel just in the region that we care about. And if you really wanted to pick up on whether there's an edge here,  what you might do is

about. And if you really wanted to pick up on whether there's an edge here,  what you might do is have some negative weights associated with the surrounding pixels. Then the sum is largest when those middle pixels  are bright but the surrounding pixels are darker. When you compute a weighted sum like this, you might come out with any number,  but for this network what we want is for activations to be some value between 0 and 1. So a common thing to do is to pump this weighted sum into some

to be some value between 0 and 1. So a common thing to do is to pump this weighted sum into some function  that squishes the real number line into the range between 0 and 1. And a common function that does this is called the sigmoid function,  also known as a logistic curve. Basically very negative inputs end up close to 0,  positive inputs end up close to 1, and it just steadily increases around the input 0. So the activation of the neuron here is basically a  measure of how positive the

the input 0. So the activation of the neuron here is basically a  measure of how positive the relevant weighted sum is. But maybe it's not that you want the neuron to  light up when the weighted sum is bigger than 0. Maybe you only want it to be active when the sum is bigger than say 10. That is, you want some bias for it to be inactive. What we'll do then is just add in some other number like negative 10 to this  weighted sum before plugging it through the sigmoid squishification function.

negative 10 to this  weighted sum before plugging it through the sigmoid squishification function. That additional number is called the bias. So the weights tell you what pixel pattern this neuron in the second  layer is picking up on, and the bias tells you how high the weighted  sum needs to be before the neuron starts getting meaningfully active. And that is just one neuron. Every other neuron in this layer is going to be connected to  all 784 pixel neurons from the first layer, and each one

in this layer is going to be connected to  all 784 pixel neurons from the first layer, and each one of  those 784 connections has its own weight associated with it. Also, each one has some bias, some other number that you add  on to the weighted sum before squishing it with the sigmoid. And that's a lot to think about! With this hidden layer of 16 neurons, that's a total of 784 times 16 weights,  along with 16 biases. And all of that is just the connections from the first layer to the second.

along with 16 biases. And all of that is just the connections from the first layer to the second. The connections between the other layers also have  a bunch of weights and biases associated with them. All said and done, this network has almost exactly 13,000 total weights and biases. 13,000 knobs and dials that can be tweaked and  turned to make this network behave in different ways. So when we talk about learning, what that's referring to is  getting the computer to find a valid setting for

talk about learning, what that's referring to is  getting the computer to find a valid setting for all of these  many many numbers so that it'll actually solve the problem at hand. One thought experiment that is at once fun and kind of horrifying is to imagine sitting  down and setting all of these weights and biases by hand,  purposefully tweaking the numbers so that the second layer picks up on edges,  the third layer picks up on patterns, etc. I personally find this satisfying rather than

on edges,  the third layer picks up on patterns, etc. I personally find this satisfying rather than just treating the network as a total  black box, because when the network doesn't perform the way you anticipate,  if you've built up a little bit of a relationship with what those weights and biases  actually mean, you have a starting place for experimenting with how to change the  structure to improve. Or when the network does work but not for the reasons you might expect,  digging into what

improve. Or when the network does work but not for the reasons you might expect,  digging into what the weights and biases are doing is a good way to challenge  your assumptions and really expose the full space of possible solutions. By the way, the actual function here is a little cumbersome to write down,  don't you think? So let me show you a more notationally compact way that these connections are represented. This is how you'd see it if you choose to read up more about neural networks.

Organize all of the activations from one layer into a column as a vector. Then organize all of the weights as a matrix, where each row of that matrix corresponds  to the connections between one layer and a particular neuron in the next layer. What that means is that taking the weighted sum of the activations in  the first layer according to these weights corresponds to one of the  terms in the matrix vector product of everything we have on the left here. By the way, so much of machine learning

vector product of everything we have on the left here. By the way, so much of machine learning just comes down to having a  good grasp of linear algebra, so for any of you who want a nice visual  understanding for matrices and what matrix vector multiplication means,  take a look at the series I did on linear algebra, especially chapter 3. Back to our expression, instead of talking about adding the bias to each one of  these values independently, we represent it by organizing all those biases

the bias to each one of  these values independently, we represent it by organizing all those biases into a vector,  and adding the entire vector to the previous matrix vector product. Then as a final step, I'll wrap a sigmoid around the outside here,  and what that's supposed to represent is that you're going to apply the  sigmoid function to each specific component of the resulting vector inside. So once you write down this weight matrix and these vectors as their own symbols,  you can

inside. So once you write down this weight matrix and these vectors as their own symbols,  you can communicate the full transition of activations from one layer to the next in an  extremely tight and neat little expression, and this makes the relevant code both a lot  simpler and a lot faster, since many libraries optimize the heck out of matrix  multiplication. Remember how earlier I said these neurons are simply things that hold numbers? Well of course the specific numbers that they hold

neurons are simply things that hold numbers? Well of course the specific numbers that they hold depends on the image you feed in,  so it's actually more accurate to think of each neuron as a function,  one that takes in the outputs of all the neurons in the previous layer and spits out a  number between 0 and 1. Really the entire network is just a function, one that takes in  784 numbers as an input and spits out 10 numbers as an output. It's an absurdly complicated function, one that involves

and spits out 10 numbers as an output. It's an absurdly complicated function, one that involves 13,000 parameters  in the forms of these weights and biases that pick up on certain patterns,  and which involves iterating many matrix vector products and the sigmoid  squishification function, but it's just a function nonetheless. And in a way it's kind of reassuring that it looks complicated. I mean if it were any simpler, what hope would we have  that it could take on the challenge of recognizing

if it were any simpler, what hope would we have  that it could take on the challenge of recognizing digits? And how does it take on that challenge? How does this network learn the appropriate weights and biases just by looking at data? Well that's what I'll show in the next video, and I'll also dig a little  more into what this particular network we're seeing is really doing. Now is the point I suppose I should say subscribe to stay notified  about when that video or any new videos come out,

suppose I should say subscribe to stay notified  about when that video or any new videos come out,  but realistically most of you don't actually receive notifications from YouTube, do you? Maybe more honestly I should say subscribe so that the neural networks  that underlie YouTube's recommendation algorithm are primed to believe  that you want to see content from this channel get recommended to you. Anyway, stay posted for more. Thank you very much to everyone supporting these videos on

to you. Anyway, stay posted for more. Thank you very much to everyone supporting these videos on Patreon. I've been a little slow to progress in the probability series this summer,  but I'm jumping back into it after this project,  so patrons you can look out for updates there. To close things off here I have with me Lisha Li who did her PhD work on the  theoretical side of deep learning and who currently works at a venture capital  firm called Amplify Partners who kindly provided some of the

currently works at a venture capital  firm called Amplify Partners who kindly provided some of the funding for this video. So Lisha one thing I think we should quickly bring up is this sigmoid function. As I understand it early networks use this to squish the relevant weighted  sum into that interval between zero and one, you know kind of motivated  by this biological analogy of neurons either being inactive or active. Exactly. But relatively few modern networks actually use sigmoid anymore.

being inactive or active. Exactly. But relatively few modern networks actually use sigmoid anymore. Yeah. It's kind of old school right? Yeah or rather ReLU seems to be much easier to train. And ReLU, ReLU stands for rectified linear unit? Yes it's this kind of function where you're just taking a max of zero  and a where a is given by what you were explaining in the video and  what this was sort of motivated from I think was a partially by a  biological analogy with how neurons would either be

of motivated from I think was a partially by a  biological analogy with how neurons would either be activated or not. And so if it passes a certain threshold it would be the identity function but if it did  not then it would just not be activated so it'd be zero so it's kind of a simplification. Using sigmoids didn't help training or it was very difficult  to train at some point and people just tried ReLU and it happened  to work very well for these incredibly deep neural networks. All right

tried ReLU and it happened  to work very well for these incredibly deep neural networks. All right thank you Lisha.

Gradient descent, how neural networks learn | Chapter 2, Deep learning

Last video I laid out the structure of a neural network. I'll give a quick recap here so that it's fresh in our minds,  and then I have two main goals for this video. The first is to introduce the idea of gradient descent,  which underlies not only how neural networks learn,  but how a lot of other machine learning works as well. Then after that we'll dig in a little more into how this particular network performs,  and what those hidden layers of neurons end up looking for. As a reminder, our

network performs,  and what those hidden layers of neurons end up looking for. As a reminder, our goal here is the classic example of handwritten digit recognition,  the hello world of neural networks. These digits are rendered on a 28x28 pixel grid,  each pixel with some grayscale value between 0 and 1. Those are what determine the activations of 784 neurons in the input layer of the network. And then the activation for each neuron in the following layers is based on a weighted  sum of all the

then the activation for each neuron in the following layers is based on a weighted  sum of all the activations in the previous layer, plus some special number called a bias. Then you compose that sum with some other function,  like the sigmoid squishification, or a relu, the way I walked through last video. In total, given the somewhat arbitrary choice of two hidden layers here with 16  neurons each, the network has about 13,000 weights and biases that we can adjust,  and it's these values that

the network has about 13,000 weights and biases that we can adjust,  and it's these values that determine what exactly the network actually does. Then what we mean when we say that this network classifies a given digit is that  the brightest of those 10 neurons in the final layer corresponds to that digit. And remember, the motivation we had in mind here for the layered  structure was that maybe the second layer could pick up on the edges,  and the third layer might pick up on patterns like

the second layer could pick up on the edges,  and the third layer might pick up on patterns like loops and lines,  and the last one could just piece together those patterns to recognize digits. So here, we learn how the network learns. What we want is an algorithm where you can show this network a whole bunch of  training data, which comes in the form of a bunch of different images of handwritten  digits, along with labels for what they're supposed to be,  and it'll adjust those 13,000 weights

digits, along with labels for what they're supposed to be,  and it'll adjust those 13,000 weights and biases so as to improve its performance  on the training data. Hopefully, this layered structure will mean that what it  learns generalizes to images beyond that training data. The way we test that is that after you train the network,  you show it more labeled data that it's never seen before,  and you see how accurately it classifies those new images. Fortunately for us, and what makes this

and you see how accurately it classifies those new images. Fortunately for us, and what makes this such a common example to start with,  is that the good people behind the MNIST database have put together a collection of tens  of thousands of handwritten digit images, each one labeled with the numbers they're  supposed to be. And as provocative as it is to describe a machine as learning,  once you see how it works, it feels a lot less like some crazy sci-fi premise,  and a lot more like a

you see how it works, it feels a lot less like some crazy sci-fi premise,  and a lot more like a calculus exercise. I mean, basically it comes down to finding the minimum of a certain function. Remember, conceptually, we're thinking of each neuron as being connected to  all the neurons in the previous layer, and the weights in the weighted sum  defining its activation are kind of like the strengths of those connections,  and the bias is some indication of whether that neuron tends to be active

of those connections,  and the bias is some indication of whether that neuron tends to be active or inactive. And to start things off, we're just going to initialize  all of those weights and biases totally randomly. Needless to say, this network is going to perform pretty horribly  on a given training example, since it's just doing something random. For example, you feed in this image of a 3, and the output layer just looks like a mess. So what you do is define a cost function, a way of

3, and the output layer just looks like a mess. So what you do is define a cost function, a way of telling the computer,  no, bad computer, that output should have activations which are 0 for most neurons,  but 1 for this neuron, what you gave me is utter trash. To say that a little more mathematically, you add up the squares of the  differences between each of those trash output activations and the value you  want them to have, and this is what we'll call the cost of a single training example.

value you  want them to have, and this is what we'll call the cost of a single training example. Notice this sum is small when the network confidently classifies the image correctly,  but it's large when the network seems like it doesn't know what it's doing. So then what you do is consider the average cost over all of  the tens of thousands of training examples at your disposal. This average cost is our measure for how lousy the network is,  and how bad the computer should feel. And that's a

is our measure for how lousy the network is,  and how bad the computer should feel. And that's a complicated thing. Remember how the network itself was basically a function,  one that takes in 784 numbers as inputs, the pixel values,  and spits out 10 numbers as its output, and in a sense it's parameterized  by all these weights and biases? Well the cost function is a layer of complexity on top of that. It takes as its input those 13,000 or so weights and biases,  and spits out a single number

that. It takes as its input those 13,000 or so weights and biases,  and spits out a single number describing how bad those weights and biases are,  and the way it's defined depends on the network's behavior over all the tens of  thousands of pieces of training data. That's a lot to think about. But just telling the computer what a crappy job it's doing isn't very helpful. You want to tell it how to change those weights and biases so that it gets better. To make it easier, rather than struggling

change those weights and biases so that it gets better. To make it easier, rather than struggling to imagine a function with 13,000 inputs,  just imagine a simple function that has one number as an input and one number as an  output. How do you find an input that minimizes the value of this function? Calculus students will know that you can sometimes figure out that minimum explicitly,  but that's not always feasible for really complicated functions,  certainly not in the 13,000 input version

not always feasible for really complicated functions,  certainly not in the 13,000 input version of this situation for our crazy complicated  neural network cost function. A more flexible tactic is to start at any input,  and figure out which direction you should step to make that output lower. Specifically, if you can figure out the slope of the function where you are,  then shift to the left if that slope is positive,  and shift the input to the right if that slope is negative. If you do this

that slope is positive,  and shift the input to the right if that slope is negative. If you do this repeatedly, at each point checking the new slope and taking the  appropriate step, you're going to approach some local minimum of the function. The image you might have in mind here is a ball rolling down a hill. Notice, even for this really simplified single input function,  there are many possible valleys that you might land in,  depending on which random input you start at, and there's no

valleys that you might land in,  depending on which random input you start at, and there's no guarantee  that the local minimum you land in is going to be the smallest possible  value of the cost function. That will carry over to our neural network case as well. And I also want you to notice how if you make your step sizes proportional to the slope,  then when the slope is flattening out towards the minimum,  your steps get smaller and smaller, and that kind of helps you from overshooting.

the minimum,  your steps get smaller and smaller, and that kind of helps you from overshooting. Bumping up the complexity a bit, imagine instead  a function with two inputs and one output. You might think of the input space as the xy-plane,  and the cost function as being graphed as a surface above it. Instead of asking about the slope of the function,  you have to ask which direction you should step in this input space so as to decrease  the output of the function most quickly. In other words,

in this input space so as to decrease  the output of the function most quickly. In other words, what's the downhill direction? Again, it's helpful to think of a ball rolling down that hill. Those of you familiar with multivariable calculus will know that the  gradient of a function gives you the direction of steepest ascent,  which direction should you step to increase the function most quickly. Naturally enough, taking the negative of that gradient gives you  the direction to step that

Naturally enough, taking the negative of that gradient gives you  the direction to step that decreases the function most quickly. Even more than that, the length of this gradient vector  is an indication for just how steep that steepest slope is. If you're unfamiliar with multivariable calculus and want to learn more,  check out some of the work I did for Khan Academy on the topic. Honestly though, all that matters for you and me right now is that  in principle there exists a way to compute

all that matters for you and me right now is that  in principle there exists a way to compute this vector,  this vector that tells you what the downhill direction is and how steep it is. You'll be okay if that's all you know and you're not rock solid on the details. If you can get that, the algorithm for minimizing the function is to compute this  gradient direction, then take a small step downhill, and repeat that over and over. It's the same basic idea for a function that has 13,000 inputs

and repeat that over and over. It's the same basic idea for a function that has 13,000 inputs instead of 2 inputs. Imagine organizing all 13,000 weights and biases  of our network into a giant column vector. The negative gradient of the cost function is just a vector,  it's some direction inside this insanely huge input space that tells you which  nudges to all of those numbers is going to cause the most rapid decrease to  the cost function. And of course, with our specially designed cost

the most rapid decrease to  the cost function. And of course, with our specially designed cost function,  changing the weights and biases to decrease it means making the  output of the network on each piece of training data look less like  a random array of 10 values, and more like an actual decision we want it to make. It's important to remember, this cost function involves an average over all of the  training data, so if you minimize it, it means it's a better performance on all of those

of the  training data, so if you minimize it, it means it's a better performance on all of those  samples. The algorithm for computing this gradient efficiently,  which is effectively the heart of how a neural network learns,  is called backpropagation, and it's what I'm going to be talking about next video. There, I really want to take the time to walk through what exactly happens to  each weight and bias for a given piece of training data,  trying to give an intuitive feel for what's

weight and bias for a given piece of training data,  trying to give an intuitive feel for what's happening beyond the pile of relevant  calculus and formulas. Right here, right now, the main thing I want you to know,  independent of implementation details, is that what we mean when we  talk about a network learning is that it's just minimizing a cost function. And notice, one consequence of that is that it's important for this cost function to have  a nice smooth output, so that we can find a

is that it's important for this cost function to have  a nice smooth output, so that we can find a local minimum by taking little steps downhill. This is why, by the way, artificial neurons have continuously ranging activations,  rather than simply being active or inactive in a binary way,  the way biological neurons are. This process of repeatedly nudging an input of a function by  some multiple of the negative gradient is called gradient descent. It's a way to converge towards some local

of the negative gradient is called gradient descent. It's a way to converge towards some local minimum of a cost function,  basically a valley in this graph. I'm still showing the picture of a function with two inputs, of course,  because nudges in a 13,000 dimensional input space are a little hard to  wrap your mind around, but there is a nice non-spatial way to think about this. Each component of the negative gradient tells us two things. The sign, of course, tells us whether the

component of the negative gradient tells us two things. The sign, of course, tells us whether the corresponding  component of the input vector should be nudged up or down. But importantly, the relative magnitudes of all these  components kind of tells you which changes matter more. You see, in our network, an adjustment to one of the weights might have a much  greater impact on the cost function than the adjustment to some other weight. Some of these connections just matter more for our

than the adjustment to some other weight. Some of these connections just matter more for our training data. So a way you can think about this gradient vector of our mind-warpingly massive  cost function is that it encodes the relative importance of each weight and bias,  that is, which of these changes is going to carry the most bang for your buck. This really is just another way of thinking about direction. To take a simpler example, if you have some function with two variables as an input,

direction. To take a simpler example, if you have some function with two variables as an input,  and you compute that its gradient at some particular point comes out as 3,1,  then on the one hand you can interpret that as saying that when you're  standing at that input, moving along this direction increases the function most quickly,  that when you graph the function above the plane of input points,  that vector is what's giving you the straight uphill direction. But another way to read that is

that vector is what's giving you the straight uphill direction. But another way to read that is to say that changes to this first variable have 3  times the importance as changes to the second variable,  that at least in the neighborhood of the relevant input,  nudging the x-value carries a lot more bang for your buck. Let's zoom out and sum up where we are so far. The network itself is this function with 784 inputs and 10 outputs,  defined in terms of all these weighted sums. The cost

function with 784 inputs and 10 outputs,  defined in terms of all these weighted sums. The cost function is a layer of complexity on top of that. It takes the 13,000 weights and biases as inputs and spits out  a single measure of lousiness based on the training examples. And the gradient of the cost function is one more layer of complexity still. It tells us what nudges to all these weights and biases cause the  fastest change to the value of the cost function,  which you might interpret as

biases cause the  fastest change to the value of the cost function,  which you might interpret as saying which changes to which weights matter the most. So, when you initialize the network with random weights and biases,  and adjust them many times based on this gradient descent process,  how well does it actually perform on images it's never seen before? The one I've described here, with the two hidden layers of 16 neurons each,  chosen mostly for aesthetic reasons, is not bad,  classifying

hidden layers of 16 neurons each,  chosen mostly for aesthetic reasons, is not bad,  classifying about 96% of the new images it sees correctly. And honestly, if you look at some of the examples it messes up on,  you feel compelled to cut it a little slack. Now if you play around with the hidden layer structure and make a couple tweaks,  you can get this up to 98%. And that's pretty good! It's not the best, you can certainly get better performance by getting more sophisticated  than this plain

the best, you can certainly get better performance by getting more sophisticated  than this plain vanilla network, but given how daunting the initial task is,  I think there's something incredible about any network doing this well on images it's  never seen before, given that we never specifically told it what patterns to look for. Originally, the way I motivated this structure was by describing a hope we might have,  that the second layer might pick up on little edges,  that the third layer

a hope we might have,  that the second layer might pick up on little edges,  that the third layer would piece together those edges to recognize loops  and longer lines, and that those might be pieced together to recognize digits. So is this what our network is actually doing? Well, for this one at least, not at all. Remember how last video we looked at how the weights of the connections from  all the neurons in the first layer to a given neuron in the second layer can be  visualized as a given

the neurons in the first layer to a given neuron in the second layer can be  visualized as a given pixel pattern that the second layer neuron is picking up on? Well, when we actually do that for the weights associated with these transitions,  from the first layer to the next, instead of picking up on isolated little edges here  and there, they look, well, almost random, just with some very loose patterns in the  middle there. It would seem that in the unfathomably large 13,000 dimensional space

in the  middle there. It would seem that in the unfathomably large 13,000 dimensional space  of possible weights and biases, our network found itself a happy  little local minimum that, despite successfully classifying most images,  doesn't exactly pick up on the patterns we might have hoped for. And to really drive this point home, watch what happens when you input a random image. If the system was smart, you might expect it to feel uncertain,  maybe not really activating any of those 10

was smart, you might expect it to feel uncertain,  maybe not really activating any of those 10 output neurons or activating them all evenly,  but instead it confidently gives you some nonsense answer,  as if it feels as sure that this random noise is a 5 as it does that an actual  image of a 5 is a 5. Phrased differently, even if this network can recognize digits pretty well,  it has no idea how to draw them. A lot of this is because it's such a tightly constrained training setup. I mean, put

to draw them. A lot of this is because it's such a tightly constrained training setup. I mean, put yourself in the network's shoes here. From its point of view, the entire universe consists of nothing but clearly  defined unmoving digits centered in a tiny grid,  and its cost function never gave it any incentive to be anything but utterly  confident in its decisions. So with this as the image of what those second layer neurons are really doing,  you might wonder why I would introduce this

of what those second layer neurons are really doing,  you might wonder why I would introduce this network with the  motivation of picking up on edges and patterns. I mean, that's just not at all what it ends up doing. Well, this is not meant to be our end goal, but instead a starting point. Frankly, this is old technology, the kind researched in the 80s and 90s,  and you do need to understand it before you can understand more detailed modern variants,  and it clearly is capable of solving some

before you can understand more detailed modern variants,  and it clearly is capable of solving some interesting problems,  but the more you dig into what those hidden layers are really doing,  the less intelligent it seems. Shifting the focus for a moment from how networks learn to how you learn,  that'll only happen if you engage actively with the material here somehow. One pretty simple thing I want you to do is just pause right now and think deeply  for a moment about what changes you might

want you to do is just pause right now and think deeply  for a moment about what changes you might make to this system and how it perceives  images if you wanted it to better pick up on things like edges and patterns. But better than that, to actually engage with the material,  I highly recommend the book by Michael Nielsen on deep learning and neural networks. In it, you can find the code and the data to download and play with for this exact  example, and the book will walk you through step by

data to download and play with for this exact  example, and the book will walk you through step by step what that code is doing. What's awesome is that this book is free and publicly available,  so if you do get something out of it, consider joining me in making a donation towards  Nielsen's efforts. I've also linked a couple other resources I like a lot in the description,  including the phenomenal and beautiful blog post by Chris Ola and the articles in Distill. To close things off here for

and beautiful blog post by Chris Ola and the articles in Distill. To close things off here for the last few minutes,  I want to jump back into a snippet of the interview I had with Leisha Lee. You might remember her from the last video, she did her PhD work in deep learning. In this little snippet she talks about two recent papers that really dig into  how some of the more modern image recognition networks are actually learning. Just to set up where we were in the conversation,  the first paper

networks are actually learning. Just to set up where we were in the conversation,  the first paper took one of these particularly deep neural networks that's really good  at image recognition, and instead of training it on a properly labeled dataset,  shuffled all the labels around before training. Obviously the testing accuracy here was going to be no better than random,  since everything's just randomly labeled. But it was still able to achieve  the same training accuracy as you would on a

randomly labeled. But it was still able to achieve  the same training accuracy as you would on a properly labeled dataset. Basically, the millions of weights for this particular network were  enough for it to just memorize the random data,  which raises the question for whether minimizing this cost function  actually corresponds to any sort of structure in the image, or is it just memorization? ...to memorize the entire dataset of what the correct classification is.  And so a couple of, you

...to memorize the entire dataset of what the correct classification is.  And so a couple of, you know, half a year later at ICML this year,  there was not exactly rebuttal paper, but paper that addressed some aspects of like,  hey, actually these networks are doing something a little bit smarter than that.  If you look at that accuracy c Whereas if you're actually training on a structured dataset,  one that has the right labels, you fiddle around a little bit in the beginning,  but then you

one that has the right labels, you fiddle around a little bit in the beginning,  but then you kind of dropped very fast to get to that accuracy level,  and so in some sense it was easier to find that local maxima. And so what was also interesting about that is it brings into light another paper from  actually a couple of years ago, which has a lot more simplifications about the network  layers, but one of the results was saying how if you look at the optimization landscape,  the local minima

but one of the results was saying how if you look at the optimization landscape,  the local minima that these networks tend to learn are actually of equal quality,  so in some sense if your dataset is structured,  you should be able to find that much more easily. My thanks, as always, to those of you supporting on Patreon. I've said before just what a game changer Patreon is,  but these videos really would not be possible without you.

301
00:20:07,125 --> 00:20:06,800
I also want to give a special thanks to the VC firm Amplify Partners 
302
00:20:07,460 --> 00:20:07,125
and their support of these initial videos in the series. Thank you.

What is backpropagation really doing? | Chapter 3, Deep learning

Here, we tackle backpropagation, the core algorithm behind how neural networks learn. After a quick recap for where we are, the first thing I'll do is an intuitive walkthrough  for what the algorithm is actually doing, without any reference to the formulas. Then, for those of you who do want to dive into the math,  the next video goes into the calculus underlying all this. If you watched the last two videos, or if you're just jumping in with the appropriate  background, you know what a neural

two videos, or if you're just jumping in with the appropriate  background, you know what a neural network is, and how it feeds forward information. Here, we're doing the classic example of recognizing handwritten digits whose pixel  values get fed into the first layer of the network with 784 neurons,  and I've been showing a network with two hidden layers having just 16 neurons each,  and an output layer of 10 neurons, indicating which digit the network is choosing  as its answer. I'm also

output layer of 10 neurons, indicating which digit the network is choosing  as its answer. I'm also expecting you to understand gradient descent,  as described in the last video, and how what we mean by learning is  that we want to find which weights and biases minimize a certain cost function. As a quick reminder, for the cost of a single training example,  you take the output the network gives, along with the output you wanted it to give,  and add up the squares of the differences between

along with the output you wanted it to give,  and add up the squares of the differences between each component. Doing this for all of your tens of thousands of training examples and  averaging the results, this gives you the total cost of the network. And as if that's not enough to think about, as described in the last video,  the thing that we're looking for is the negative gradient of this cost function,  which tells you how you need to change all of the weights and biases,  all of these

cost function,  which tells you how you need to change all of the weights and biases,  all of these connections, so as to most efficiently decrease the cost. Backpropagation, the topic of this video, is an  algorithm for computing that crazy complicated gradient. And the one idea from the last video that I really want you to hold  firmly in your mind right now is that because thinking of the gradient  vector as a direction in 13,000 dimensions is, to put it lightly,  beyond the scope of our

vector as a direction in 13,000 dimensions is, to put it lightly,  beyond the scope of our imaginations, there's another way you can think about it. The magnitude of each component here is telling you how  sensitive the cost function is to each weight and bias. For example, let's say you go through the process I'm about to describe,  and you compute the negative gradient, and the component associated with the weight on  this edge here comes out to be 3.2, while the component associated with

with the weight on  this edge here comes out to be 3.2, while the component associated with this edge here  comes out as 0.1. The way you would interpret that is that the cost of the function is 32 times  more sensitive to changes in that first weight,  so if you were to wiggle that value just a little bit,  it's going to cause some change to the cost, and that change is 32 times greater  than what the same wiggle to that second weight would give. Personally, when I was first learning about

what the same wiggle to that second weight would give. Personally, when I was first learning about backpropagation,  I think the most confusing aspect was just the notation and the index chasing of it all. But once you unwrap what each part of this algorithm is really doing,  each individual effect it's having is actually pretty intuitive,  it's just that there's a lot of little adjustments getting layered on top of each other. So I'm going to start things off here with a complete disregard for

layered on top of each other. So I'm going to start things off here with a complete disregard for the notation,  and just step through the effects each training example has on the weights and biases. Because the cost function involves averaging a certain cost per example over  all the tens of thousands of training examples,  the way we adjust the weights and biases for a single gradient descent step also  depends on every single example. Or rather, in principle it should, but for computational

also  depends on every single example. Or rather, in principle it should, but for computational efficiency we'll do a little  trick later to keep you from needing to hit every single example for every step. In other cases, right now, all we're going to do is focus  our attention on one single example, this image of a 2. What effect should this one training example have  on how the weights and biases get adjusted? Let's say we're at a point where the network is not well trained yet,  so the

biases get adjusted? Let's say we're at a point where the network is not well trained yet,  so the activations in the output are going to look pretty random,  maybe something like 0.5, 0.8, 0.2, on and on. We can't directly change those activations, we  only have influence on the weights and biases. But it's helpful to keep track of which adjustments  we wish should take place to that output layer. And since we want it to classify the image as a 2,  we want that third value to get nudged up

And since we want it to classify the image as a 2,  we want that third value to get nudged up while all the others get nudged down. Moreover, the sizes of these nudges should be proportional  to how far away each current value is from its target value. For example, the increase to that number 2 neuron's activation  is in a sense more important than the decrease to the number 8 neuron,  which is already pretty close to where it should be. So zooming in further, let's focus just on this one

is already pretty close to where it should be. So zooming in further, let's focus just on this one neuron,  the one whose activation we wish to increase. Remember, that activation is defined as a certain weighted sum of all  the activations in the previous layer, plus a bias,  which is all then plugged into something like the sigmoid squishification function,  or a ReLU. So there are three different avenues that can  team up together to help increase that activation. You can increase the bias,

avenues that can  team up together to help increase that activation. You can increase the bias, you can increase the weights,  and you can change the activations from the previous layer. Focusing on how the weights should be adjusted,  notice how the weights actually have differing levels of influence. The connections with the brightest neurons from the preceding layer have the  biggest effect since those weights are multiplied by larger activation values. So if you were to increase one of

since those weights are multiplied by larger activation values. So if you were to increase one of those weights,  it actually has a stronger influence on the ultimate cost function than increasing  the weights of connections with dimmer neurons,  at least as far as this one training example is concerned. Remember, when we talk about gradient descent,  we don't just care about whether each component should get nudged up or down,  we care about which ones give you the most bang for your buck.

should get nudged up or down,  we care about which ones give you the most bang for your buck. This, by the way, is at least somewhat reminiscent of a theory in  neuroscience for how biological networks of neurons learn, Hebbian theory,  often summed up in the phrase, neurons that fire together wire together. Here, the biggest increases to weights, the biggest strengthening of connections,  happens between neurons which are the most active,  and the ones which we wish to become more active. In a

between neurons which are the most active,  and the ones which we wish to become more active. In a sense, the neurons that are firing while seeing a 2 get more  strongly linked to those are the ones firing when thinking about a 2. To be clear, I'm not in a position to make statements one way or another about  whether artificial networks of neurons behave anything like biological brains,  and this fires together wire together idea comes with a couple meaningful asterisks,  but taken as a very

fires together wire together idea comes with a couple meaningful asterisks,  but taken as a very loose analogy, I find it interesting to note. Anyway, the third way we can help increase this neuron's  activation is by changing all the activations in the previous layer. Namely, if everything connected to that digit 2 neuron with a positive  weight got brighter, and if everything connected with a negative weight got dimmer,  then that digit 2 neuron would become more active. And similar to the

negative weight got dimmer,  then that digit 2 neuron would become more active. And similar to the weight changes, you're going to get the most bang for your buck  by seeking changes that are proportional to the size of the corresponding weights. Now of course, we cannot directly influence those activations,  we only have control over the weights and biases. But just as with the last layer, it's helpful  to keep a note of what those desired changes are. But keep in mind, zooming out one step

helpful  to keep a note of what those desired changes are. But keep in mind, zooming out one step here, this  is only what that digit 2 output neuron wants. Remember, we also want all the other neurons in the last layer to become less active,  and each of those other output neurons has its own thoughts about  what should happen to that second to last layer. So, the desire of this digit 2 neuron is added together with the  desires of all the other output neurons for what should happen to this

is added together with the  desires of all the other output neurons for what should happen to this  second to last layer, again in proportion to the corresponding weights,  and in proportion to how much each of those neurons needs to change. This right here is where the idea of propagating backwards comes in. By adding together all these desired effects, you basically get a  list of nudges that you want to happen to this second to last layer. And once you have those, you can recursively apply

you want to happen to this second to last layer. And once you have those, you can recursively apply the same process to the  relevant weights and biases that determine those values,  repeating the same process I just walked through and moving backwards through the network. And zooming out a bit further, remember that this is all just how a single  training example wishes to nudge each one of those weights and biases. If we only listened to what that 2 wanted, the network would  ultimately be

weights and biases. If we only listened to what that 2 wanted, the network would  ultimately be incentivized just to classify all images as a 2. So what you do is go through this same backprop routine for every other training example,  recording how each of them would like to change the weights and biases,  and average together those desired changes. This collection here of the averaged nudges to each weight and bias is,  loosely speaking, the negative gradient of the cost function referenced

each weight and bias is,  loosely speaking, the negative gradient of the cost function referenced  in the last video, or at least something proportional to it. I say loosely speaking only because I have yet to get quantitatively precise  about those nudges, but if you understood every change I just referenced,  why some are proportionally bigger than others,  and how they all need to be added together, you understand the mechanics for  what backpropagation is actually doing. By the way, in

together, you understand the mechanics for  what backpropagation is actually doing. By the way, in practice, it takes computers an extremely long time to  add up the influence of every training example every gradient descent step. So here's what's commonly done instead. You randomly shuffle your training data and then divide it into a whole  bunch of mini-batches, let's say each one having 100 training examples. Then you compute a step according to the mini-batch. It's not going to be the

training examples. Then you compute a step according to the mini-batch. It's not going to be the actual gradient of the cost function,  which depends on all of the training data, not this tiny subset,  so it's not the most efficient step downhill, but each mini-batch does give  you a pretty good approximation, and more importantly,  it gives you a significant computational speedup. If you were to plot the trajectory of your network under the relevant cost surface,  it would be a little more

to plot the trajectory of your network under the relevant cost surface,  it would be a little more like a drunk man stumbling aimlessly down a hill but taking  quick steps, rather than a carefully calculating man determining the exact downhill  direction of each step before taking a very slow and careful step in that direction. This technique is referred to as stochastic gradient descent. There's a lot going on here, so let's just sum it up for ourselves, shall we? Backpropagation is the

a lot going on here, so let's just sum it up for ourselves, shall we? Backpropagation is the algorithm for determining how a single training  example would like to nudge the weights and biases,  not just in terms of whether they should go up or down,  but in terms of what relative proportions to those changes cause the  most rapid decrease to the cost. A true gradient descent step would involve doing this for all your tens of  thousands of training examples and averaging the desired changes you

this for all your tens of  thousands of training examples and averaging the desired changes you get. But that's computationally slow, so instead you randomly subdivide the  data into mini-batches and compute each step with respect to a mini-batch. Repeatedly going through all of the mini-batches and making these adjustments,  you will converge towards a local minimum of the cost function,  which is to say your network will end up doing a really good job on the training examples. So with all of

is to say your network will end up doing a really good job on the training examples. So with all of that said, every line of code that would go into implementing backprop  actually corresponds with something you have now seen, at least in informal terms. But sometimes knowing what the math does is only half the battle,  and just representing the damn thing is where it gets all muddled and confusing. So for those of you who do want to go deeper, the next video goes through the same  ideas that

So for those of you who do want to go deeper, the next video goes through the same  ideas that were just presented here, but in terms of the underlying calculus,  which should hopefully make it a little more familiar as you see the topic in other  resources. Before that, one thing worth emphasizing is that for this algorithm to work,  and this goes for all sorts of machine learning beyond just neural networks,  you need a lot of training data. In our case, one thing that makes handwritten

neural networks,  you need a lot of training data. In our case, one thing that makes handwritten digits such a nice example is that  there exists the MNIST database, with so many examples that have been labeled by humans. So a common challenge that those of you working in machine learning will be familiar with  is just getting the labeled training data you actually need,  whether that's having people label tens of thousands of images,  or whatever other data type you might be dealing with.

The hard assumption here is that you've watched part 3,  giving an intuitive walkthrough of the backpropagation algorithm. Here we get a little more formal and dive into the relevant calculus. It's normal for this to be at least a little confusing,  so the mantra to regularly pause and ponder certainly applies as much here  as anywhere else. Our main goal is to show how people in machine learning commonly think about  the chain rule from calculus in the context of networks,  which has a

commonly think about  the chain rule from calculus in the context of networks,  which has a different feel from how most introductory calculus courses  approach the subject. For those of you uncomfortable with the relevant calculus,  I do have a whole series on the topic. Let's start off with an extremely simple network,  one where each layer has a single neuron in it. This network is determined by three weights and three biases,  and our goal is to understand how sensitive the cost function is

three weights and three biases,  and our goal is to understand how sensitive the cost function is to these variables. That way, we know which adjustments to those terms will  cause the most efficient decrease to the cost function. And we're just going to focus on the connection between the last two neurons. Let's label the activation of that last neuron with a superscript L,  indicating which layer it's in, so the activation of the previous neuron is Al-1. These are not exponents, they're just

it's in, so the activation of the previous neuron is Al-1. These are not exponents, they're just a way of indexing what we're talking about,  since I want to save subscripts for different indices later on. Let's say that the value we want this last activation to be for  a given training example is y, for example, y might be 0 or 1. So the cost of this network for a single training example is Al-y2. We'll denote the cost of that one training example as c0. As a reminder, this last activation is

We'll denote the cost of that one training example as c0. As a reminder, this last activation is determined by a weight,  which I'm going to call WL, times the previous neuron's activation plus some bias,  which I'll call BL. And then you pump that through some special nonlinear function like the sigmoid or ReLU. It's actually going to make things easier for us if we give a special name to  this weighted sum, like z, with the same superscript as the relevant activations. This is a lot of terms,

sum, like z, with the same superscript as the relevant activations. This is a lot of terms, and a way you might conceptualize it is that the weight,  previous action and the bias all together are used to compute z,  which in turn lets us compute a, which finally, along with a constant y,  lets us compute the cost. And of course Al-1 is influenced by its own weight and bias and such,  but we're not going to focus on that right now. All of these are just numbers, right? And it can be nice to

not going to focus on that right now. All of these are just numbers, right? And it can be nice to think of each one as having its own little number line. Our first goal is to understand how sensitive the  cost function is to small changes in our weight WL. Or phrase differently, what is the derivative of c with respect to WL? When you see this del W term, think of it as meaning some tiny nudge to W,  like a change by 0.01, and think of this del c term as meaning  whatever the resulting nudge to

W,  like a change by 0.01, and think of this del c term as meaning  whatever the resulting nudge to the cost is. What we want is their ratio. Conceptually, this tiny nudge to WL causes some nudge to ZL,  which in turn causes some nudge to AL, which directly influences the cost. So we break things up by first looking at the ratio of a tiny change to  ZL to this tiny change W, that is, the derivative of ZL with respect to WL. Likewise, you then consider the ratio of the change to AL to  the tiny

of ZL with respect to WL. Likewise, you then consider the ratio of the change to AL to  the tiny change in ZL that caused it, as well as the ratio  between the final nudge to c and this intermediate nudge to AL. This right here is the chain rule, where multiplying together these  three ratios gives us the sensitivity of c to small changes in WL. So on screen right now, there's a lot of symbols,  and take a moment to make sure it's clear what they all are,  because now we're going to compute the

take a moment to make sure it's clear what they all are,  because now we're going to compute the relevant derivatives. The derivative of c with respect to AL works out to be 2AL-y. Notice this means its size is proportional to the difference between the  network's output and the thing we want it to be, so if that output was very different,  even slight changes stand to have a big impact on the final cost function. The derivative of AL with respect to ZL is just the derivative of our sigmoid

final cost function. The derivative of AL with respect to ZL is just the derivative of our sigmoid function,  or whatever nonlinearity you choose to use. And the derivative of ZL with respect to WL comes out to be AL-1. Now I don't know about you, but I think it's easy to get stuck head down in the  formulas without taking a moment to sit back and remind yourself of what they all mean. In the case of this last derivative, the amount that the small nudge to the  weight influenced the last layer

of this last derivative, the amount that the small nudge to the  weight influenced the last layer depends on how strong the previous neuron is. Remember, this is where the neurons-that-fire-together-wire-together idea comes in. And all of this is the derivative with respect to WL  only of the cost for a specific single training example. Since the full cost function involves averaging together all  those costs across many different training examples,  its derivative requires averaging this

all  those costs across many different training examples,  its derivative requires averaging this expression over all training examples. And of course, that is just one component of the gradient vector,  which itself is built up from the partial derivatives of the  cost function with respect to all those weights and biases. But even though that's just one of the many partial derivatives we need,  it's more than 50% of the work. The sensitivity to the bias, for example, is almost identical. We

it's more than 50% of the work. The sensitivity to the bias, for example, is almost identical. We just need to change out this del z del w term for a del z del b. And if you look at the relevant formula, that derivative comes out to be 1. Also, and this is where the idea of propagating backwards comes in,  you can see how sensitive this cost function is to the activation of the previous layer. Namely, this initial derivative in the chain rule expression,  the sensitivity of z to the previous

Namely, this initial derivative in the chain rule expression,  the sensitivity of z to the previous activation, comes out to be the weight WL. And again, even though we're not going to be able to directly influence  that previous layer activation, it's helpful to keep track of,  because now we can just keep iterating this same chain rule idea backwards  to see how sensitive the cost function is to previous weights and previous biases. And you might think this is an overly simple example, since

previous weights and previous biases. And you might think this is an overly simple example, since all layers have one neuron,  and things are going to get exponentially more complicated for a real network. But honestly, not that much changes when we give the layers multiple neurons,  really it's just a few more indices to keep track of. Rather than the activation of a given layer simply being AL,  it's also going to have a subscript indicating which neuron of that layer it is. Let's use the

AL,  it's also going to have a subscript indicating which neuron of that layer it is. Let's use the letter k to index the layer L-1, and j to index the layer L. For the cost, again we look at what the desired output is,  but this time we add up the squares of the differences between these last layer  activations and the desired output. That is, you take a sum over ALj minus Yj squared. Since there's a lot more weights, each one has to have a couple  more indices to keep track of where it is, so

a lot more weights, each one has to have a couple  more indices to keep track of where it is, so let's call the weight  of the edge connecting this kth neuron to the jth neuron, WLjk. Those indices might feel a little backwards at first,  but it lines up with how you'd index the weight matrix I talked about in the part 1 video. Just as before, it's still nice to give a name to the relevant weighted sum,  like z, so that the activation of the last layer is just your special function,  like the

sum,  like z, so that the activation of the last layer is just your special function,  like the sigmoid, applied to z. You can see what I mean, where all of these are essentially the same equations we had  before in the one-neuron-per-layer case, it's just that it looks a little more  complicated. And indeed, the chain-ruled derivative expression describing how  sensitive the cost is to a specific weight looks essentially the same. I'll leave it to you to pause and think about each of those

weight looks essentially the same. I'll leave it to you to pause and think about each of those terms if you want. What does change here, though, is the derivative of the  cost with respect to one of the activations in the layer L-1. In this case, the difference is that the neuron influences  the cost function through multiple different paths. That is, on the one hand, it influences AL0, which plays a role in the cost function,  but it also has an influence on AL1, which also plays a role in the

a role in the cost function,  but it also has an influence on AL1, which also plays a role in the cost function,  and you have to add those up. And that, well, that's pretty much it. Once you know how sensitive the cost function is to the  activations in this second-to-last layer, you can just repeat  the process for all the weights and biases feeding into that layer. So pat yourself on the back! If all of this makes sense, you have now looked deep into the heart of backpropagation,  the

back! If all of this makes sense, you have now looked deep into the heart of backpropagation,  the workhorse behind how neural networks learn. These chain rule expressions give you the derivatives that determine each component in  the gradient that helps minimize the cost of the network by repeatedly stepping downhill. If you sit back and think about all that, this is a lot of layers of complexity to  wrap your mind around, so don't worry if it takes time for your mind to digest it all.

But what is a GPT?  Visual intro to transformers | Chapter 5, Deep Learning

Could not retrieve a transcript for the video https://www.youtube.com/watch?v=wjZofJX0v4M! This is most likely caused by:

For this video (wjZofJX0v4M) transcripts are available in the following languages:

 - ar ("Arabic")[TRANSLATABLE]
 - zh ("Chinese")[TRANSLATABLE]
 - fr ("French")[TRANSLATABLE]
 - de ("German")[TRANSLATABLE]
 - iw ("Hebrew")[TRANSLATABLE]
 - hu ("Hungarian")[TRANSLATABLE]
 - id ("Indonesian")[TRANSLATABLE]
 - it ("Italian")[TRANSLATABLE]
 - ja ("Japanese")[TRANSLATABLE]
 - ko ("Korean")[TRANSLATABLE]
 - pt ("Portuguese")[TRANSLATABLE]
 - ru ("Russian")[TRANSLATABLE]
 - es ("Spanish")[TRANSLATABLE]
 - th ("Thai")[TRANSLATABLE]

- ru ("Russian")[TRANSLATABLE]
 - tr ("Turkish")[TRANSLATABLE]
 - uk ("Ukrainian")[TRANSLATABLE]
 - vi ("Vietnamese")[TRANSLATABLE]

Attention in transformers, visually explained | Chapter 6, Deep Learning

In the last chapter, you and I started to step  through the internal workings of a transformer. This is one of the key pieces of technology inside large language models,  and a lot of other tools in the modern wave of AI. It first hit the scene in a now-famous 2017 paper called Attention is All You Need,  and in this chapter you and I will dig into what this attention mechanism is,  visualizing how it processes data. As a quick recap, here's the important context I want you to have in mind. The

it processes data. As a quick recap, here's the important context I want you to have in mind. The goal of the model that you and I are studying is to  take in a piece of text and predict what word comes next. The input text is broken up into little pieces that we call tokens,  and these are very often words or pieces of words,  but just to make the examples in this video easier for you and me to think about,  let's simplify by pretending that tokens are always just words. The first step in a

think about,  let's simplify by pretending that tokens are always just words. The first step in a transformer is to associate each token  with a high-dimensional vector, what we call its embedding. The most important idea I want you to have in mind is how directions in this  high-dimensional space of all possible embeddings can correspond with semantic meaning. In the last chapter we saw an example for how direction can correspond to gender,  in the sense that adding a certain step in this

for how direction can correspond to gender,  in the sense that adding a certain step in this space can take you from the  embedding of a masculine noun to the embedding of the corresponding feminine noun. That's just one example you could imagine how many other directions in this  high-dimensional space could correspond to numerous other aspects of a word's meaning. The aim of a transformer is to progressively adjust these  embeddings so that they don't merely encode an individual word,  but

to progressively adjust these  embeddings so that they don't merely encode an individual word,  but instead they bake in some much, much richer contextual meaning. I should say up front that a lot of people find the attention mechanism,  this key piece in a transformer, very confusing,  so don't worry if it takes some time for things to sink in. I think that before we dive into the computational details and  all the matrix multiplications, it's worth thinking about a couple  examples for the

details and  all the matrix multiplications, it's worth thinking about a couple  examples for the kind of behavior that we want attention to enable. Consider the phrases American true mole, one mole of carbon dioxide,  and take a biopsy of the mole. You and I know that the word mole has different meanings in each one of these,  based on the context. But after the first step of a transformer, the one that breaks up the text  and associates each token with a vector, the vector that's associated

one that breaks up the text  and associates each token with a vector, the vector that's associated with  mole would be the same in all of these cases, because this initial token  embedding is effectively a lookup table with no reference to the context. It's only in the next step of the transformer that the surrounding  embeddings have the chance to pass information into this one. The picture you might have in mind is that there are multiple distinct directions in  this embedding space encoding

might have in mind is that there are multiple distinct directions in  this embedding space encoding the multiple distinct meanings of the word mole,  and that a well-trained attention block calculates what you need to add to the generic  embedding to move it to one of these specific directions, as a function of the context. To take another example, consider the embedding of the word tower. This is presumably some very generic, non-specific direction in the space,  associated with lots of other

presumably some very generic, non-specific direction in the space,  associated with lots of other large, tall nouns. If this word was immediately preceded by Eiffel,  you could imagine wanting the mechanism to update this vector so that  it points in a direction that more specifically encodes the Eiffel tower,  maybe correlated with vectors associated with Paris and France and things made of steel. If it was also preceded by the word miniature,  then the vector should be updated even further,

If it was also preceded by the word miniature,  then the vector should be updated even further,  so that it no longer correlates with large, tall things. More generally than just refining the meaning of a word,  the attention block allows the model to move information encoded in  one embedding to that of another, potentially ones that are quite far away,  and potentially with information that's much richer than just a single word. What we saw in the last chapter was how after all of the vectors

richer than just a single word. What we saw in the last chapter was how after all of the vectors flow through the  network, including many different attention blocks,  the computation you perform to produce a prediction of the next token is entirely a  function of the last vector in the sequence. Imagine, for example, that the text you input is most of an entire mystery novel,  all the way up to a point near the end, which reads, therefore the murderer was. If the model is going to accurately

a point near the end, which reads, therefore the murderer was. If the model is going to accurately predict the next word,  that final vector in the sequence, which began its life simply embedding the word was,  will have to have been updated by all of the attention blocks to represent much,  much more than any individual word, somehow encoding all of the information  from the full context window that's relevant to predicting the next word. To step through the computations, though, let's take a

that's relevant to predicting the next word. To step through the computations, though, let's take a much simpler example. Imagine that the input includes the phrase, a  fluffy blue creature roamed the verdant forest. And for the moment, suppose that the only type of update that we care about  is having the adjectives adjust the meanings of their corresponding nouns. What I'm about to describe is what we would call a single head of attention,  and later we will see how the attention block

is what we would call a single head of attention,  and later we will see how the attention block consists of many different heads run in  parallel. Again, the initial embedding for each word is some high dimensional vector  that only encodes the meaning of that particular word with no context. Actually, that's not quite true. They also encode the position of the word. There's a lot more to say way that positions are encoded, but right now,  all you need to know is that the entries of this

way that positions are encoded, but right now,  all you need to know is that the entries of this vector are enough to  tell you both what the word is and where it exists in the context. Let's go ahead and denote these embeddings with the letter e. The goal is to have a series of computations produce a new refined  set of embeddings where, for example, those corresponding to the  nouns have ingested the meaning from their corresponding adjectives. And playing the deep learning game, we want most

the meaning from their corresponding adjectives. And playing the deep learning game, we want most of the computations  involved to look like matrix-vector products, where the matrices are  full of tunable weights, things that the model will learn based on data. To be clear, I'm making up this example of adjectives updating nouns just to  illustrate the type of behavior that you could imagine an attention head doing. As with so much deep learning, the true behavior is much harder to parse

an attention head doing. As with so much deep learning, the true behavior is much harder to parse because it's  based on tweaking and tuning a huge number of parameters to minimize some cost function. It's just that as we step through all of different matrices filled with parameters  that are involved in this process, I think it's really helpful to have an imagined  example of something that it could be doing to help keep it all more concrete. For the first step of this process, you might

it could be doing to help keep it all more concrete. For the first step of this process, you might imagine each noun, like creature,  asking the question, hey, are there any adjectives sitting in front of me? And for the words fluffy and blue, to each be able to answer,  yeah, I'm an adjective and I'm in that position. That question is somehow encoded as yet another vector,  another list of numbers, which we call the query for this word. This query vector though has a much smaller dimension

which we call the query for this word. This query vector though has a much smaller dimension than the embedding vector, say 128. Computing this query looks like taking a certain matrix,  which I'll label wq, and multiplying it by the embedding. Compressing things a bit, let's write that query vector as q,  and then anytime you see me put a matrix next to an arrow like this one,  it's meant to represent that multiplying this matrix by the vector at the arrow's start  gives you the vector at the

that multiplying this matrix by the vector at the arrow's start  gives you the vector at the arrow's end. In this case, you multiply this matrix by all of the embeddings in the context,  producing one query vector for each token. The entries of this matrix are parameters of the model,  which means the true behavior is learned from data, and in practice,  what this matrix does in a particular attention head is challenging to parse. But for our sake, imagining an example that we might hope that

head is challenging to parse. But for our sake, imagining an example that we might hope that it would learn,  we'll suppose that this query matrix maps the embeddings of nouns to  certain directions in this smaller query space that somehow encodes  the notion of looking for adjectives in preceding positions. As to what it does to other embeddings, who knows? Maybe it simultaneously tries to accomplish some other goal with those. Right now, we're laser focused on the nouns. At the same time,

some other goal with those. Right now, we're laser focused on the nouns. At the same time, associated with this is a second matrix called the key matrix,  which you also multiply by every one of the embeddings. This produces a second sequence of vectors that we call the keys. Conceptually, you want to think of the keys as potentially answering the queries. This key matrix is also full of tunable parameters, and just like the query matrix,  it maps the embedding vectors to that same smaller

parameters, and just like the query matrix,  it maps the embedding vectors to that same smaller dimensional space. You think of the keys as matching the queries whenever they closely align with each other. In our example, you would imagine that the key matrix maps the adjectives like fluffy  and blue to vectors that are closely aligned with the query produced by the word creature. To measure how well each key matches each query,  you compute a dot product between each possible key-query pair. I

each key matches each query,  you compute a dot product between each possible key-query pair. I like to visualize a grid full of a bunch of dots,  where the bigger dots correspond to the larger dot products,  the places where the keys and queries align. For our adjective noun example, that would look a little more like this,  where if the keys produced by fluffy and blue really do align closely with the query  produced by creature, then the dot products in these two spots would be some large

with the query  produced by creature, then the dot products in these two spots would be some large  positive numbers. In the lingo, machine learning people would say that this means the  embeddings of fluffy and blue attend to the embedding of creature. By contrast to the dot product between the key for some other  word like the and the query for creature would be some small  or negative value that reflects that are unrelated to each other. So we have this grid of values that can be any real

that reflects that are unrelated to each other. So we have this grid of values that can be any real number from  negative infinity to infinity, giving us a score for how relevant  each word is to updating the meaning of every other word. The way we're about to use these scores is to take a certain  weighted sum along each column, weighted by the relevance. So instead of having values range from negative infinity to infinity,  what we want is for the numbers in these columns to be between 0 and

infinity to infinity,  what we want is for the numbers in these columns to be between 0 and 1,  and for each column to add up to 1, as if they were a probability distribution. If you're coming in from the last chapter, you know what we need to do then. We compute a softmax along each one of these columns to normalize the values. In our picture, after you apply softmax to all of the columns,  we'll fill in the grid with these normalized values. At this point you're safe to think about each

we'll fill in the grid with these normalized values. At this point you're safe to think about each column as giving weights according  to how relevant the word on the left is to the corresponding value at the top. We call this grid an attention pattern. Now if you look at the original transformer paper,  there's a really compact way that they write this all down. Here the variables q and k represent the full arrays of query  and key vectors respectively, those little vectors you get by

represent the full arrays of query  and key vectors respectively, those little vectors you get by  multiplying the embeddings by the query and the key matrices. This expression up in the numerator is a really compact way to represent  the grid of all possible dot products between pairs of keys and queries. A small technical detail that I didn't mention is that for numerical stability,  it happens to be helpful to divide all of these values by the  square root of the dimension in that key query

to be helpful to divide all of these values by the  square root of the dimension in that key query space. Then this softmax that's wrapped around the full expression  is meant to be understood to apply column by column. As to that v term, we'll talk about it in just a second. Before that, there's one other technical detail that so far I've skipped. During the training process, when you run this model on a given text example,  and all of the weights are slightly adjusted and tuned to either

model on a given text example,  and all of the weights are slightly adjusted and tuned to either reward or punish it  based on how high a probability it assigns to the true next word in the passage,  it turns out to make the whole training process a lot more efficient if you  simultaneously have it predict every possible next token following each initial  subsequence of tokens in this passage. For example, with the phrase that we've been focusing on,  it might also be predicting what words

For example, with the phrase that we've been focusing on,  it might also be predicting what words follow creature and what words follow the. This is really nice, because it means what would otherwise  be a single training example effectively acts as many. For the purposes of our attention pattern, it means that you never  want to allow later words to influence earlier words,  since otherwise they could kind of give away the answer for what comes next. What this means is that we want all of

they could kind of give away the answer for what comes next. What this means is that we want all of these spots here,  the ones representing later tokens influencing earlier ones,  to somehow be forced to be zero. The simplest thing you might think to do is to set them equal to zero,  but if you did that the columns wouldn't add up to one anymore,  they wouldn't be normalized. So instead, a common way to do this is that before applying softmax,  you set all of those entries to be negative

common way to do this is that before applying softmax,  you set all of those entries to be negative infinity. If you do that, then after applying softmax, all of those get turned into zero,  but the columns stay normalized. This process is called masking. There are versions of attention where you don't apply it, but in our GPT example,  even though this is more relevant during the training phase than it would be,  say, running it as a chatbot or something like that,  you do always apply this

than it would be,  say, running it as a chatbot or something like that,  you do always apply this masking to prevent later tokens from influencing earlier ones. Another fact that's worth reflecting on about this attention  pattern is how its size is equal to the square of the context size. So this is why context size can be a really huge bottleneck for large language models,  and scaling it up is non-trivial. As you imagine, motivated by a desire for bigger and bigger context windows,  recent

non-trivial. As you imagine, motivated by a desire for bigger and bigger context windows,  recent years have seen some variations to the attention mechanism aimed at making  context more scalable, but right here, you and I are staying focused on the basics. Okay, great, computing this pattern lets the model  deduce which words are relevant to which other words. Now you need to actually update the embeddings,  allowing words to pass information to whichever other words they're relevant to. For

embeddings,  allowing words to pass information to whichever other words they're relevant to. For example, you want the embedding of Fluffy to somehow cause a change  to Creature that moves it to a different part of this 12,000-dimensional  embedding space that more specifically encodes a Fluffy creature. What I'm going to do here is first show you the most straightforward  way that you could do this, though there's a slight way that  this gets modified in the context of multi-headed attention.

though there's a slight way that  this gets modified in the context of multi-headed attention. This most straightforward way would be to use a third matrix,  what we call the value matrix, which you multiply by the embedding of that first word,  for example Fluffy. The result of this is what you would call a value vector,  and this is something that you add to the embedding of the second word,  in this case something you add to the embedding of Creature. So this value vector lives in the same

in this case something you add to the embedding of Creature. So this value vector lives in the same very high-dimensional space as the embeddings. When you multiply this value matrix by the embedding of a word,  you might think of it as saying, if this word is relevant to adjusting the meaning of  something else, what exactly should be added to the embedding of that something else  in order to reflect this? Looking back in our diagram, let's set aside all of the keys and the queries,  since

reflect this? Looking back in our diagram, let's set aside all of the keys and the queries,  since after you compute the attention pattern you're done with those,  then you're going to take this value matrix and multiply it by every  one of those embeddings to produce a sequence of value vectors. You might think of these value vectors as being  kind of associated with the corresponding keys. For each column in this diagram, you multiply each of the  value vectors by the corresponding weight in

each column in this diagram, you multiply each of the  value vectors by the corresponding weight in that column. For example here, under the embedding of Creature,  you would be adding large proportions of the value vectors for Fluffy and Blue,  while all of the other value vectors get zeroed out, or at least nearly zeroed out. And then finally, the way to actually update the embedding associated with this column,  previously encoding some context-free meaning of Creature,  you add together all

with this column,  previously encoding some context-free meaning of Creature,  you add together all of these rescaled values in the column,  producing a change that you want to add, that I'll label delta-e,  and then you add that to the original embedding. Hopefully what results is a more refined vector encoding the more  contextually rich meaning, like that of a fluffy blue creature. And of course you don't just do this to one embedding,  you apply the same weighted sum across all of the

course you don't just do this to one embedding,  you apply the same weighted sum across all of the columns in this picture,  producing a sequence of changes, adding all of those changes to the corresponding  embeddings, produces a full sequence of more refined embeddings popping out  of the attention block. Zooming out, this whole process is what you would describe as a single head of attention. As I've described things so far, this process is parameterized by three distinct  matrices, all

As I've described things so far, this process is parameterized by three distinct  matrices, all filled with tunable parameters, the key, the query, and the value. I want to take a moment to continue what we started in the last chapter,  with the scorekeeping where we count up the total number of model parameters using the  numbers from GPT-3. These key and query matrices each have 12,288 columns, matching the embedding dimension,  and 128 rows, matching the dimension of that smaller key query

matching the embedding dimension,  and 128 rows, matching the dimension of that smaller key query space. This gives us an additional 1.5 million or so parameters for each one. If you look at that value matrix by contrast, the way I've described things so  far would suggest that it's a square matrix that has 12,288 columns and 12,288 rows,  since both its inputs and outputs live in this very large embedding space. If true, that would mean about 150 million added parameters. And to be clear, you

embedding space. If true, that would mean about 150 million added parameters. And to be clear, you could do that. You could devote orders of magnitude more parameters  to the value map than to the key and query. But in practice, it is much more efficient if instead you make  it so that the number of parameters devoted to this value map  is the same as the number devoted to the key and the query. This is especially relevant in the setting of  running multiple attention heads in parallel. The way

is especially relevant in the setting of  running multiple attention heads in parallel. The way this looks is that the value map is factored as a product of two smaller matrices. Conceptually, I would still encourage you to think about the overall linear map,  one with inputs and outputs, both in this larger embedding space,  for example taking the embedding of blue to this blueness direction that you would  add to nouns. It's just that it's a smaller number of rows,  typically the same size as

you would  add to nouns. It's just that it's a smaller number of rows,  typically the same size as the key query space. What this means is you can think of it as mapping the  large embedding vectors down to a much smaller space. This is not the conventional naming, but I'm going to call this the value down matrix. The second matrix maps from this smaller space back up to the embedding space,  producing the vectors that you use to make the actual updates. I'm going to call this one the value up

the vectors that you use to make the actual updates. I'm going to call this one the value up matrix, which again is not conventional. The way that you would see this written in most papers looks a little different. I'll talk about it in a minute. In my opinion, it tends to make things a little more conceptually confusing. To throw in linear algebra jargon here, what we're basically doing  is constraining the overall value map to be a low rank transformation. Turning back to the parameter count,

the overall value map to be a low rank transformation. Turning back to the parameter count, all four of these matrices have the same size,  and adding them all up we get about 6.3 million parameters for one attention head. As a quick side note, to be a little more accurate,  everything described so far is what people would call a self-attention head,  to distinguish it from a variation that comes up in other models that's  called cross-attention. This isn't relevant to our GPT example, but if

up in other models that's  called cross-attention. This isn't relevant to our GPT example, but if you're curious,  cross-attention involves models that process two distinct types of data,  like text in one language and text in another language that's part of an  ongoing generation of a translation, or maybe audio input of speech and an  ongoing transcription. A cross-attention head looks almost identical. The only difference is that the key and query maps act on different data sets. In a model

The only difference is that the key and query maps act on different data sets. In a model doing translation, for example, the keys might come from one language,  while the queries come from another, and the attention pattern could describe  which words from one language correspond to which words in another. And in this setting there would typically be no masking,  since there's not really any notion of later tokens affecting earlier ones. Staying focused on self-attention though, if you

any notion of later tokens affecting earlier ones. Staying focused on self-attention though, if you understood everything so far,  and if you were to stop here, you would come away with the essence of what attention  really is. All that's really left to us is to lay out the  sense in which you do this many many different times. In our central example we focused on adjectives updating nouns,  but of course there are lots of different ways that context can influence the  meaning of a word. If the

course there are lots of different ways that context can influence the  meaning of a word. If the words they crashed the preceded the word car,  it has implications for the shape and structure of that car. And a lot of associations might be less grammatical. If the word wizard is anywhere in the same passage as Harry,  it suggests that this might be referring to Harry Potter,  whereas if instead the words Queen, Sussex, and William were in that passage,  then perhaps the embedding of Harry

the words Queen, Sussex, and William were in that passage,  then perhaps the embedding of Harry should instead be updated to refer to the prince. For every different type of contextual updating that you might imagine,  the parameters of these key and query matrices would be different to  capture the different attention patterns, and the parameters of our  value map would be different based on what should be added to the embeddings. And again, in practice the true behavior of these maps is much

should be added to the embeddings. And again, in practice the true behavior of these maps is much more  difficult to interpret, where the weights are set to do whatever the  model needs them to do to best accomplish its goal of predicting the next token. As I said before, everything we described is a single head of attention,  and a full attention block inside a transformer consists of what's  called multi-headed attention, where you run a lot of these operations in parallel,  each with its own

multi-headed attention, where you run a lot of these operations in parallel,  each with its own distinct key query and value maps. GPT-3 for example uses 96 attention heads inside each block. Considering that each one is already a bit confusing,  it's certainly a lot to hold in your head. Just to spell it all out very explicitly, this means you have 96  distinct key and query matrices producing 96 distinct attention patterns. Then each head has its own distinct value matrices  used to produce

96 distinct attention patterns. Then each head has its own distinct value matrices  used to produce 96 sequences of value vectors. These are all added together using the corresponding attention patterns as weights. What this means is that for each position in the context, each token,  every one of these heads produces a proposed change to be added to the embedding in  that position. So what you do is you sum together all of those proposed changes,  one for each head, and you add the result to

do is you sum together all of those proposed changes,  one for each head, and you add the result to the original embedding of that position. This entire sum here would be one slice of what's outputted from this multi-headed  attention block, a single one of those refined embeddings that pops out the other end  of it. Again, this is a lot to think about, so don't  worry at all if it takes some time to sink in. The overall idea is that by running many distinct heads in parallel,  you're giving

to sink in. The overall idea is that by running many distinct heads in parallel,  you're giving the model the capacity to learn many distinct ways that context  changes meaning. Pulling up our running tally for parameter count with 96 heads,  each including its own variation of these four matrices,  each block of multi-headed attention ends up with around 600 million parameters. There's one added slightly annoying thing that I should really  mention for any of you who go on to read more about

slightly annoying thing that I should really  mention for any of you who go on to read more about transformers. You remember how I said that the value map is factored out into these two  distinct matrices, which I labeled as the value down and the value up matrices. The way that I framed things would suggest that you see this pair of matrices  inside each attention head, and you could absolutely implement it this way. That would be a valid design. But the way that you see this written in papers

it this way. That would be a valid design. But the way that you see this written in papers and the way  that it's implemented in practice looks a little different. All of these value up matrices for each head appear stapled together in one giant matrix  that we call the output matrix, associated with the entire multi-headed attention block. And when you see people refer to the value matrix for a given attention head,  they're typically only referring to this first step,  the one that I was

a given attention head,  they're typically only referring to this first step,  the one that I was labeling as the value down projection into the smaller space. For the curious among you, I've left an on-screen note about it. It's one of those details that runs the risk of distracting  from the main conceptual points, but I do want to call it out  just so that you know if you read about this in other sources. Setting aside all the technical nuances, in the preview from the last chapter we saw

sources. Setting aside all the technical nuances, in the preview from the last chapter we saw  how data flowing through a transformer doesn't just flow through a single attention block. For one thing, it also goes through these other operations called multi-layer perceptrons. We'll talk more about those in the next chapter. And then it repeatedly goes through many many copies of both of these operations. What this means is that after a given word imbibes some of its context,  there are many

operations. What this means is that after a given word imbibes some of its context,  there are many more chances for this more nuanced embedding  to be influenced by its more nuanced surroundings. The further down the network you go, with each embedding taking in more and more  meaning from all the other embeddings, which themselves are getting more and more  nuanced, the hope is that there's the capacity to encode higher level and more  abstract ideas about a given input beyond just

the capacity to encode higher level and more  abstract ideas about a given input beyond just descriptors and grammatical structure. Things like sentiment and tone and whether it's a poem and what underlying  scientific truths are relevant to the piece and things like that. Turning back one more time to our scorekeeping, GPT-3 includes 96 distinct layers,  so the total number of key query and value parameters is multiplied by another 96,  which brings the total sum to just under 58 billion

value parameters is multiplied by another 96,  which brings the total sum to just under 58 billion distinct parameters  devoted to all of the attention heads. That is a lot to be sure, but it's only about a third  of the 175 billion that are in the network in total. So even though attention gets all of the attention,  the majority of parameters come from the blocks sitting in between these steps. In the next chapter, you and I will talk more about those  other blocks and also a lot more about

In the next chapter, you and I will talk more about those  other blocks and also a lot more about the training process. A big part of the story for the success of the attention mechanism is not so much any  specific kind of behavior that it enables, but the fact that it's extremely  parallelizable, meaning that you can run a huge number of computations in a short time  using GPUs. Given that one of the big lessons about deep learning in the last decade or two has  been that scale alone seems to

the big lessons about deep learning in the last decade or two has  been that scale alone seems to give huge qualitative improvements in model performance,  there's a huge advantage to parallelizable architectures that let you do this. If you want to learn more about this stuff, I've left lots of links in the description. In particular, anything produced by Andrej Karpathy or Chris Ola tend to be pure gold. In this video, I wanted to just jump into attention in its current form,  but if you're

pure gold. In this video, I wanted to just jump into attention in its current form,  but if you're curious about more of the history for how we got here  and how you might reinvent this idea for yourself,  my friend Vivek just put up a couple videos giving a lot more of that motivation. Also, Britt Cruz from the channel The Art of the Problem has  a really nice video about the history of large language models. Thank you.

If you feed a large language model the phrase, Michael Jordan plays the sport of blank,  and you have it predict what comes next, and it correctly predicts basketball,  this would suggest that somewhere, inside its hundreds of billions of parameters,  it's baked in knowledge about a specific person and his specific sport. And I think in general, anyone who's played around with one of these  models has the clear sense that it's memorized tons and tons of facts. So a reasonable question you could

has the clear sense that it's memorized tons and tons of facts. So a reasonable question you could ask is, how exactly does that work? And where do those facts live? Last December, a few researchers from Google DeepMind posted about work on this question,  and they were using this specific example of matching athletes to their sports. And although a full mechanistic understanding of how facts are stored remains unsolved,  they had some interesting partial results, including the very general

are stored remains unsolved,  they had some interesting partial results, including the very general high-level  conclusion that the facts seem to live inside a specific part of these networks,  known fancifully as the multi-layer perceptrons, or MLPs for short. In the last couple of chapters, you and I have been digging into  the details behind transformers, the architecture underlying large language models,  and also underlying a lot of other modern AI. In the most recent chapter, we were

language models,  and also underlying a lot of other modern AI. In the most recent chapter, we were focusing on a piece called Attention. And the next step for you and me is to dig into the details of what happens inside  these multi-layer perceptrons, which make up the other big portion of the network. The computation here is actually relatively simple,  especially when you compare it to attention. It boils down essentially to a pair of matrix  multiplications with a simple something in

It boils down essentially to a pair of matrix  multiplications with a simple something in between. However, interpreting what these computations are doing is exceedingly challenging. Our main goal here is to step through the computations and make them memorable,  but I'd like to do it in the context of showing a specific example of how  one of these blocks could, at least in principle, store a concrete fact. Specifically, it'll be storing the fact that Michael Jordan plays basketball. I should

fact. Specifically, it'll be storing the fact that Michael Jordan plays basketball. I should mention the layout here is inspired by a conversation  I had with one of those DeepMind researchers, Neil Nanda. For the most part, I will assume that you've either watched the last two chapters,  or otherwise you have a basic sense for what a transformer is,  but refreshers never hurt, so here's the quick reminder of the overall flow. You and I have been studying a model that's trained  to take in a

reminder of the overall flow. You and I have been studying a model that's trained  to take in a piece of text and predict what comes next. That input text is first broken into a bunch of tokens,  which means little chunks that are typically words or little pieces of words,  and each token is associated with a high-dimensional vector,  which is to say a long list of numbers. This sequence of vectors then repeatedly passes through two kinds of operation,  attention, which allows the vectors to

then repeatedly passes through two kinds of operation,  attention, which allows the vectors to pass information between one another,  and then the multilayer perceptrons, the thing that we're gonna dig into today,  and also there's a certain normalization step in between. After the sequence of vectors has flowed through many,  many different iterations of both of these blocks, by the end,  the hope is that each vector has soaked up enough information, both from the context,  all of the other

hope is that each vector has soaked up enough information, both from the context,  all of the other words in the input, and also from the general knowledge that  was baked into the model weights through training,  that it can be used to make a prediction of what token comes next. One of the key ideas that I want you to have in your mind is that all of  these vectors live in a very, very high-dimensional space,  and when you think about that space, different directions can encode different

space,  and when you think about that space, different directions can encode different  kinds of meaning. So a very classic example that I like to refer back to is how if you look  at the embedding of woman and subtract the embedding of man,  and you take that little step and you add it to another masculine noun,  something like uncle, you land somewhere very,  very close to the corresponding feminine noun. In this sense, this particular direction encodes gender information. The idea is that

noun. In this sense, this particular direction encodes gender information. The idea is that many other distinct directions in this super high-dimensional  space could correspond to other features that the model might want to represent. In a transformer, these vectors don't merely encode the meaning of a single word, though. As they flow through the network, they imbibe a much richer meaning based  on all the context around them, and also based on the model's knowledge. Ultimately, each one

on all the context around them, and also based on the model's knowledge. Ultimately, each one needs to encode something far,  far beyond the meaning of a single word, since it needs to be sufficient to  predict what will come next. We've already seen how attention blocks let you incorporate context,  but a majority of the model parameters actually live inside the MLP blocks,  and one thought for what they might be doing is that they offer extra capacity  to store facts. Like I said, the lesson

what they might be doing is that they offer extra capacity  to store facts. Like I said, the lesson here is gonna center on the concrete toy example  of how exactly it could store the fact that Michael Jordan plays basketball. Now, this toy example is gonna require that you and I make  a couple of assumptions about that high-dimensional space. First, we'll suppose that one of the directions represents the idea of a first name  Michael, and then another nearly perpendicular direction represents

the idea of a first name  Michael, and then another nearly perpendicular direction represents the idea of the  last name Jordan, and then yet a third direction will represent the idea of basketball. So specifically, what I mean by this is if you look in the network and  you pluck out one of the vectors being processed,  if its dot product with this first name Michael direction is one,  that's what it would mean for the vector to be encoding the idea of a  person with that first name. Otherwise,

it would mean for the vector to be encoding the idea of a  person with that first name. Otherwise, that dot product would be zero or negative,  meaning the vector doesn't really align with that direction. And for simplicity, let's completely ignore the very reasonable  question of what it might mean if that dot product was bigger than one. Similarly, its dot product with these other directions would  tell you whether it represents the last name Jordan or basketball. So let's say a vector is

would  tell you whether it represents the last name Jordan or basketball. So let's say a vector is meant to represent the full name, Michael Jordan,  then its dot product with both of these directions would have to be one. Since the text Michael Jordan spans two different tokens,  this would also mean we have to assume that an earlier attention block has successfully  passed information to the second of these two vectors so as to ensure that it can  encode both names. With all of those as the

of these two vectors so as to ensure that it can  encode both names. With all of those as the assumptions, let's now dive into the meat of the lesson. What happens inside a multilayer perceptron? You might think of this sequence of vectors flowing into the block, and remember,  each vector was originally associated with one of the tokens from the input text. What's gonna happen is that each individual vector from that sequence  goes through a short series of operations, we'll unpack them in

vector from that sequence  goes through a short series of operations, we'll unpack them in just a moment,  and at the end, we'll get another vector with the same dimension. That other vector is gonna get added to the original one that flowed in,  and that sum is the result flowing out. This sequence of operations is something you apply to every vector in the sequence,  associated with every token in the input, and it all happens in parallel. In particular, the vectors don't talk to each other

in the input, and it all happens in parallel. In particular, the vectors don't talk to each other in this step,  they're all kind of doing their own thing. And for you and me, that actually makes it a lot simpler,  because it means if we understand what happens to just one of the  vectors through this block, we effectively understand what happens to all of them. When I say this block is gonna encode the fact that Michael Jordan plays basketball,  what I mean is that if a vector flows in that

the fact that Michael Jordan plays basketball,  what I mean is that if a vector flows in that encodes first name Michael and last  name Jordan, then this sequence of computations will produce something that includes  that direction basketball, which is what will add on to the vector in that position. The first step of this process looks like multiplying that vector by a very big matrix. No surprises there, this is deep learning. And this matrix, like all of the other ones we've seen,  is filled

there, this is deep learning. And this matrix, like all of the other ones we've seen,  is filled with model parameters that are learned from data,  which you might think of as a bunch of knobs and dials that get tweaked and  tuned to determine what the model behavior is. Now, one nice way to think about matrix multiplication is to imagine each row of  that matrix as being its own vector, and taking a bunch of dot products between  those rows and the vector being processed, which I'll label as E

a bunch of dot products between  those rows and the vector being processed, which I'll label as E for embedding. For example, suppose that very first row happened to equal  this first name Michael direction that we're presuming exists. That would mean that the first component in this output, this dot product right here,  would be one if that vector encodes the first name Michael,  and zero or negative otherwise. Even more fun, take a moment to think about what it would mean if that  first row

otherwise. Even more fun, take a moment to think about what it would mean if that  first row was this first name Michael plus last name Jordan direction. And for simplicity, let me go ahead and write that down as M plus J. Then, taking a dot product with this embedding E,  things distribute really nicely, so it looks like M dot E plus J dot E. And notice how that means the ultimate value would be two if the vector encodes the  full name Michael Jordan, and otherwise it would be one or something

two if the vector encodes the  full name Michael Jordan, and otherwise it would be one or something smaller than one. And that's just one row in this matrix. You might think of all of the other rows as in parallel asking some other kinds of  questions, probing at some other sorts of features of the vector being processed. Very often this step also involves adding another vector to the output,  which is full of model parameters learned from data. This other vector is known as the bias. For our

is full of model parameters learned from data. This other vector is known as the bias. For our example, I want you to imagine that the value of this  bias in that very first component is negative one,  meaning our final output looks like that relevant dot product, but minus one. You might very reasonably ask why I would want you to assume that the  model has learned this, and in a moment you'll see why it's very clean  and nice if we have a value here which is positive if and only if a vector

why it's very clean  and nice if we have a value here which is positive if and only if a vector  encodes the full name Michael Jordan, and otherwise it's zero or negative. The total number of rows in this matrix, which is something  like the number of questions being asked, in the case of GPT-3,  whose numbers we've been following, is just under 50,000. In fact, it's exactly four times the number of dimensions in this embedding space. That's a design choice. You could make it more, you could

of dimensions in this embedding space. That's a design choice. You could make it more, you could make it less,  but having a clean multiple tends to be friendly for hardware. Since this matrix full of weights maps us into a higher dimensional space,  I'm gonna give it the shorthand W up. I'll continue labeling the vector we're processing as E,  and let's label this bias vector as B up and put that all back down in the diagram. At this point, a problem is that this operation is purely linear,

all back down in the diagram. At this point, a problem is that this operation is purely linear,  but language is a very non-linear process. If the entry that we're measuring is high for Michael plus Jordan,  it would also necessarily be somewhat triggered by Michael plus Phelps  and also Alexis plus Jordan, despite those being unrelated conceptually. What you really want is a simple yes or no for the full name. So the next step is to pass this large intermediate  vector through a very simple

the full name. So the next step is to pass this large intermediate  vector through a very simple non-linear function. A common choice is one that takes all of the negative values and  maps them to zero and leaves all of the positive values unchanged. And continuing with the deep learning tradition of overly fancy names,  this very simple function is often called the rectified linear unit, or ReLU for short. Here's what the graph looks like. So taking our imagined example where this first entry

for short. Here's what the graph looks like. So taking our imagined example where this first entry of the intermediate vector is one,  if and only if the full name is Michael Jordan and zero or negative otherwise,  after you pass it through the ReLU, you end up with a very clean value where  all of the zero and negative values just get clipped to zero. So this output would be one for the full name Michael Jordan and zero otherwise. In other words, it very directly mimics the behavior of an AND

Michael Jordan and zero otherwise. In other words, it very directly mimics the behavior of an AND gate. Often models will use a slightly modified function that's called the JLU,  which has the same basic shape, it's just a bit smoother. But for our purposes, it's a little bit cleaner if we only think about the ReLU. Also, when you hear people refer to the neurons of a transformer,  they're talking about these values right here. Whenever you see that common neural network picture with a layer of

about these values right here. Whenever you see that common neural network picture with a layer of dots and a  bunch of lines connecting to the previous layer, which we had earlier in this series,  that's typically meant to convey this combination of a linear step,  a matrix multiplication, followed by some simple term-wise nonlinear function like a ReLU. You would say that this neuron is active whenever this value  is positive and that it's inactive if that value is zero. The next step looks

whenever this value  is positive and that it's inactive if that value is zero. The next step looks very similar to the first one. You multiply by a very large matrix and you add on a certain bias term. In this case, the number of dimensions in the output is back down to the size of  that embedding space, so I'm gonna go ahead and call this the down projection matrix. And this time, instead of thinking of things row by row,  it's actually nicer to think of it column by column. You see, another

of things row by row,  it's actually nicer to think of it column by column. You see, another way that you can hold matrix multiplication in your head is to  imagine taking each column of the matrix and multiplying it by the corresponding  term in the vector that it's processing and adding together all of those rescaled columns. The reason it's nicer to think about this way is because here the columns have the same  dimension as the embedding space, so we can think of them as directions in that

have the same  dimension as the embedding space, so we can think of them as directions in that space. For instance, we will imagine that the model has learned to make that  first column into this basketball direction that we suppose exists. What that would mean is that when the relevant neuron in that first position is active,  we'll be adding this column to the final result. But if that neuron was inactive, if that number was zero, then this would have no effect. And it doesn't just have to be

inactive, if that number was zero, then this would have no effect. And it doesn't just have to be basketball. The model could also bake into this column and many other features that  it wants to associate with something that has the full name Michael Jordan. And at the same time, all of the other columns in this matrix are telling you  what will be added to the final result if the corresponding neuron is active. And if you have a bias in this case, it's something that you're  just adding every

is active. And if you have a bias in this case, it's something that you're  just adding every single time, regardless of the neuron values. You might wonder what's that doing. As with all parameter-filled objects here, it's kind of hard to say exactly. Maybe there's some bookkeeping that the network needs to do,  but you can feel free to ignore it for now. Making our notation a little more compact again,  I'll call this big matrix W down and similarly call that bias vector B down and  put that

again,  I'll call this big matrix W down and similarly call that bias vector B down and  put that back into our diagram. Like I previewed earlier, what you do with this final result is add it to the vector  that flowed into the block at that position and that gets you this final result. So for example, if the vector flowing in encoded both first name Michael and last name  Jordan, then because this sequence of operations will trigger that AND gate,  it will add on the basketball direction, so

sequence of operations will trigger that AND gate,  it will add on the basketball direction, so what pops out will encode all of those  together. And remember, this is a process happening to every one of those vectors in parallel. In particular, taking the GPT-3 numbers, it means that this block doesn't just  have 50,000 neurons in it, it has 50,000 times the number of tokens in the input. So that is the entire operation, two matrix products,  each with a bias added and a simple clipping

So that is the entire operation, two matrix products,  each with a bias added and a simple clipping function in between. Any of you who watched the earlier videos of the series will recognize this  structure as the most basic kind of neural network that we studied there. In that example, it was trained to recognize handwritten digits. Over here, in the context of a transformer for a large language model,  this is one piece in a larger architecture and any attempt to interpret  what exactly it's

model,  this is one piece in a larger architecture and any attempt to interpret  what exactly it's doing is heavily intertwined with the idea of encoding  information into vectors of a high-dimensional embedding space. That is the core lesson, but I do wanna step back and reflect on two different things,  the first of which is a kind of bookkeeping, and the second of which  involves a very thought-provoking fact about higher dimensions that  I actually didn't know until I dug into transformers.

fact about higher dimensions that  I actually didn't know until I dug into transformers. In the last two chapters, you and I started counting up the total number of parameters  in GPT-3 and seeing exactly where they live, so let's quickly finish up the game here. I already mentioned how this up projection matrix has just under 50,000 rows and  that each row matches the size of the embedding space, which for GPT-3 is 12,288. Multiplying those together, it gives us 604 million parameters just for

which for GPT-3 is 12,288. Multiplying those together, it gives us 604 million parameters just for that matrix,  and the down projection has the same number of parameters just with a transposed shape. So together, they give about 1.2 billion parameters. The bias vector also accounts for a couple more parameters,  but it's a trivial proportion of the total, so I'm not even gonna show it. In GPT-3, this sequence of embedding vectors flows through not one,  but 96 distinct MLPs, so the total

this sequence of embedding vectors flows through not one,  but 96 distinct MLPs, so the total number of parameters devoted  to all of these blocks adds up to about 116 billion. This is around 2 thirds of the total parameters in the network,  and when you add it to everything that we had before, for the attention blocks,  the embedding, and the unembedding, you do indeed get that grand total of 175  billion as advertised. It's probably worth mentioning there's another set of parameters

of 175  billion as advertised. It's probably worth mentioning there's another set of parameters associated  with those normalization steps that this explanation has skipped over,  but like the bias vector, they account for a very trivial proportion of the total. As to that second point of reflection, you might be wondering if  this central toy example we've been spending so much time on  reflects how facts are actually stored in real large language models. It is true that the rows of that first

how facts are actually stored in real large language models. It is true that the rows of that first matrix can be thought of as  directions in this embedding space, and that means the activation of each  neuron tells you how much a given vector aligns with some specific direction. It's also true that the columns of that second matrix tell  you what will be added to the result if that neuron is active. Both of those are just mathematical facts. However, the evidence does suggest that individual

Both of those are just mathematical facts. However, the evidence does suggest that individual neurons very rarely  represent a single clean feature like Michael Jordan,  and there may actually be a very good reason this is the case,  related to an idea floating around interpretability researchers these  days known as superposition. This is a hypothesis that might help to explain both why the models are  especially hard to interpret and also why they scale surprisingly well. The basic idea is

are  especially hard to interpret and also why they scale surprisingly well. The basic idea is that if you have an n-dimensional space and you wanna  represent a bunch of different features using directions that are all  perpendicular to one another in that space, you know,  that way if you add a component in one direction,  it doesn't influence any of the other directions,  then the maximum number of vectors you can fit is only n, the number of dimensions. To a mathematician, actually, this is

of vectors you can fit is only n, the number of dimensions. To a mathematician, actually, this is the definition of dimension. But where it gets interesting is if you relax that  constraint a little bit and you tolerate some noise. Say you allow those features to be represented by vectors that aren't exactly  perpendicular, they're just nearly perpendicular, maybe between 89 and 91 degrees apart. If we were in two or three dimensions, this makes no difference. That gives you hardly any extra

If we were in two or three dimensions, this makes no difference. That gives you hardly any extra wiggle room to fit more vectors in,  which makes it all the more counterintuitive that for higher dimensions,  the answer changes dramatically. I can give you a really quick and dirty illustration of this using some  scrappy Python that's going to create a list of 100-dimensional vectors,  each one initialized randomly, and this list is going to contain 10,000 distinct vectors,  so 100 times as many

randomly, and this list is going to contain 10,000 distinct vectors,  so 100 times as many vectors as there are dimensions. This plot right here shows the distribution of angles between pairs of these vectors. So because they started at random, those angles could be anything from 0 to 180 degrees,  but you'll notice that already, even just for random vectors,  there's this heavy bias for things to be closer to 90 degrees. Then what I'm going to do is run a certain optimization process that

to be closer to 90 degrees. Then what I'm going to do is run a certain optimization process that iteratively nudges  all of these vectors so that they try to become more perpendicular to one another. After repeating this many different times, here's  what the distribution of angles looks like. We have to actually zoom in on it here because all of the possible angles  between pairs of vectors sit inside this narrow range between 89 and 91 degrees. In general, a consequence of something known as

inside this narrow range between 89 and 91 degrees. In general, a consequence of something known as the Johnson-Lindenstrauss  lemma is that the number of vectors you can cram into a space that are nearly  perpendicular like this grows exponentially with the number of dimensions. This is very significant for large language models,  which might benefit from associating independent ideas with nearly  perpendicular directions. It means that it's possible for it to store many,  many more ideas than

perpendicular directions. It means that it's possible for it to store many,  many more ideas than there are dimensions in the space that it's allotted. This might partially explain why model performance seems to scale so well with size. A space that has 10 times as many dimensions can store way,  way more than 10 times as many independent ideas. And this is relevant not just to that embedding space where the vectors  flowing through the model live, but also to that vector full of neurons  in

where the vectors  flowing through the model live, but also to that vector full of neurons  in the middle of that multilayer perceptron that we just studied. That is to say, at the sizes of GPT-3, it might not just be probing at 50,000 features,  but if it instead leveraged this enormous added capacity by using  nearly perpendicular directions of the space, it could be probing at many,  many more features of the vector being processed. But if it was doing that, what it means is that individual

features of the vector being processed. But if it was doing that, what it means is that individual  features aren't gonna be visible as a single neuron lighting up. It would have to look like some specific combination of neurons instead, a superposition. For any of you curious to learn more, a key relevant search term here is sparse  autoencoder, which is a tool that some of the interpretability people use to try to  extract what the true features are, even if they're very superimposed on all

people use to try to  extract what the true features are, even if they're very superimposed on all these  neurons. I'll link to a couple really great anthropic posts all about this. At this point, we haven't touched every detail of a transformer,  but you and I have hit the most important points. The main thing that I wanna cover in a next chapter is the training process. On the one hand, the short answer for how training works is that it's all  backpropagation, and we covered backpropagation

answer for how training works is that it's all  backpropagation, and we covered backpropagation in a separate context with earlier  chapters in the series. But there is more to discuss, like the specific cost function used for language models,  the idea of fine-tuning using reinforcement learning with human feedback,  and the notion of scaling laws. Quick note for the active followers among you,  there are a number of non-machine learning-related videos that I'm excited to  sink my teeth into

there are a number of non-machine learning-related videos that I'm excited to  sink my teeth into before I make that next chapter, so it might be a while,  but I do promise it'll come in due time. Thank you.

The fundamental, root-of-it-all building block for linear algebra is the vector. So it's worth making sure that we're all on the same page about what exactly a vector is. You see, broadly speaking, there are three distinct but related ideas about vectors,  which I'll call the physics student perspective,  the computer science student perspective, and the mathematician's perspective. The physics student perspective is that vectors are arrows pointing in space. What defines a given vector is its

perspective is that vectors are arrows pointing in space. What defines a given vector is its length and the direction it's pointing,  but as long as those two facts are the same, you can move it all around,  and it's still the same vector. Vectors that live in the flat plane are two-dimensional,  and those sitting in broader space that you and I live in are three-dimensional. The computer science perspective is that vectors are ordered lists of numbers. For example, let's say you were doing

perspective is that vectors are ordered lists of numbers. For example, let's say you were doing some analytics about house prices,  and the only features you cared about were square footage and price. You might model each house with a pair of numbers,  the first indicating square footage and the second indicating price. Notice the order matters here. In the lingo, you'd be modeling houses as two-dimensional vectors,  where in this context, vector is pretty much just a fancy word for list,  and

vectors,  where in this context, vector is pretty much just a fancy word for list,  and what makes it two-dimensional is the fact that the length of that list is two. The mathematician, on the other hand, seeks to generalize both these views,  basically saying that a vector can be anything where there's a sensible notion of adding  two vectors and multiplying a vector by a number,  operations that I'll talk about later on in this video. The details of this view are rather abstract, and I

that I'll talk about later on in this video. The details of this view are rather abstract, and I actually think it's healthy to ignore  it until the last video of this series, favoring a more concrete setting in the interim. But the reason I bring it up here is that it hints at the  fact that the ideas of vector addition and multiplication by  numbers will play an important role throughout linear algebra. But before I talk about those operations, let's just settle in  on a specific thought to

algebra. But before I talk about those operations, let's just settle in  on a specific thought to have in mind when I say the word vector. Given the geometric focus that I'm shooting for here,  whenever I introduce a new topic involving vectors,  I want you to first think about an arrow, and specifically,  think about that arrow inside a coordinate system, like the xy-plane,  with its tail sitting at the origin. This is a little bit different from the physics student perspective,  where vectors

at the origin. This is a little bit different from the physics student perspective,  where vectors can freely sit anywhere they want in space. In linear algebra, it's almost always the case  that your vector will be rooted at the origin. Then, once you understand a new concept in the context of arrows in space,  we'll translate it over to the list of numbers point of view,  which we can do by considering the coordinates of the vector. Now, while I'm sure that many of you are already familiar

the coordinates of the vector. Now, while I'm sure that many of you are already familiar with this coordinate system,  it's worth walking through explicitly, since this is where all of the important  back and forth happens between the two perspectives of linear algebra. Focusing our attention on two dimensions for the moment,  you have a horizontal line, called the x-axis, and a vertical line, called the y-axis. The place where they intersect is called the origin,  which you should think of as

the y-axis. The place where they intersect is called the origin,  which you should think of as the center of space and the root of all vectors. After choosing an arbitrary length to represent one,  you make tick marks on each axis to represent this distance. When I want to convey the idea of 2D space as a whole,  which you'll see comes up a lot in these videos,  I'll extend these tick marks to make grid lines, but right now,  they'll actually get a little bit in the way. The coordinates of a

make grid lines, but right now,  they'll actually get a little bit in the way. The coordinates of a vector is a pair of numbers that basically gives  instructions for how to get from the tail of that vector at the origin to its tip. The first number tells you how far to walk along the x-axis,  positive numbers indicating rightward motion, negative numbers indicating leftward  motion, and the second number tells you how far to walk parallel to the y-axis  after that, positive numbers indicating

number tells you how far to walk parallel to the y-axis  after that, positive numbers indicating upward motion,  and negative numbers indicating downward motion. To distinguish vectors from points, the convention is to write  this pair of numbers vertically with square brackets around them. Every pair of numbers gives you one and only one vector,  and every vector is associated with one and only one pair of numbers. What about in three dimensions? Well, you add a third axis, called the z-axis,

pair of numbers. What about in three dimensions? Well, you add a third axis, called the z-axis,  which is perpendicular to both the x and y-axes, and in this case,  each vector is associated with ordered triplet of numbers. The first tells you how far to move along the x-axis,  the second tells you how far to move parallel to the y-axis,  and the third one tells you how far to then move parallel to this new z-axis. Every triplet of numbers gives you one unique vector in space,  and every vector

this new z-axis. Every triplet of numbers gives you one unique vector in space,  and every vector in space gives you exactly one triplet of numbers. All right, so back to vector addition and multiplication by numbers. After all, every topic in linear algebra is going to center around these two operations. Luckily, each one's pretty straightforward to define. Let's say we have two vectors, one pointing up and a little to the right,  and the other one pointing right and down a bit. To add these

up and a little to the right,  and the other one pointing right and down a bit. To add these two vectors, move the second one so  that its tail sits at the tip of the first one. Then, if you draw a new vector from the tail of the first one to  where the tip of the second one sits, that new vector is their sum. This definition of addition, by the way, is pretty much the only time  in linear algebra where we let vectors stray away from the origin. Now, why is this a reasonable thing to do? Why

where we let vectors stray away from the origin. Now, why is this a reasonable thing to do? Why this definition of addition and not some other one? Well, the way I like to think about it is that each vector represents a certain movement,  a step with a certain distance and direction in space. If you take a step along the first vector, then take a step in the direction  and distance described by the second vector, the overall effect is just  the same as if you moved along the sum of those two

the second vector, the overall effect is just  the same as if you moved along the sum of those two vectors to start with. You could think about this as an extension of  how we think about adding numbers on a number line. One way that we teach kids to think about this, say with 2 plus 5,  is to think of moving two steps to the right followed by another five steps to the right. The overall effect is the same as if you just took seven steps to the right. In fact, let's see how vector addition

is the same as if you just took seven steps to the right. In fact, let's see how vector addition looks numerically. The first vector here has coordinates 1, 2, and the second one has coordinates 3,  negative 1. When you take the vector sum using this tip-to-tail method,  you can think of a four-step path from the origin to the tip of the second vector. Walk 1 to the right, then 2 up, then 3 to the right, then 1 down. Reorganizing these steps so that you first do all of the rightward motion,

the right, then 1 down. Reorganizing these steps so that you first do all of the rightward motion,  then do all the vertical motion, you can read it as saying first  move 1 plus 3 to the right, then move 2 minus 1 up. So the new vector has coordinates 1 plus 3 and 2 plus negative 1. In general, vector addition in this list of numbers conception  looks like matching up their terms and adding each one together. The other fundamental vector operation is multiplication by a number. Now this is best

together. The other fundamental vector operation is multiplication by a number. Now this is best understood just by looking at a few examples. If you take the number 2 and multiply it by a given vector,  it means you stretch out that vector so that it's two times as long as when you started. If you multiply that vector by, say, one-third,  it means you squish it down so that it's one-third the original length. When you multiply it by a negative number, like negative 1.8,  then the vector first

length. When you multiply it by a negative number, like negative 1.8,  then the vector first gets flipped around, then stretched out by that factor of 1.8. This process of stretching or squishing or sometimes reversing the direction of  a vector is called scaling, and whenever you catch a number like two or one-third  or negative 1.8 acting like this, scaling some vector, you call it a scalar. In fact, throughout linear algebra, one of the main things that numbers do is scale  vectors, so it's

fact, throughout linear algebra, one of the main things that numbers do is scale  vectors, so it's common to use the word scalar pretty much interchangeably with the word  number. Numerically, stretching out a vector by a factor of, say, 2,  corresponds with multiplying each of its components by that factor, 2. So in the conception of vectors as lists of numbers,  multiplying a given vector by a scalar means multiplying each one of those  components by that scalar. You'll see in the following

scalar means multiplying each one of those  components by that scalar. You'll see in the following videos what I mean when I say linear algebra topics tend to  revolve around these two fundamental operations,  vector addition and scalar multiplication. And I'll talk more in the last video about how and why the  mathematician thinks only about these operations,  independent and abstracted away from however you choose to represent vectors. In truth, it doesn't matter whether you think about

from however you choose to represent vectors. In truth, it doesn't matter whether you think about vectors as fundamentally being arrows  in space, like I'm suggesting you do, that happen to have a nice numerical  representation, or fundamentally as lists of numbers that happen to have a nice geometric  interpretation. The usefulness of linear algebra has less to do with either one of these  views than it does with the ability to translate back and forth between them. It gives the data analyst a

than it does with the ability to translate back and forth between them. It gives the data analyst a nice way to conceptualize many lists  of numbers in a visual way, which can seriously clarify patterns  in data and give a global view of what certain operations do. And on the flip side, it gives people like physicists and computer  graphics programmers a language to describe space and the manipulation  of space using numbers that can be crunched and run through a computer. When I do math-y

of space using numbers that can be crunched and run through a computer. When I do math-y animations, for example, I start by thinking about what's  actually going on in space, and then get the computer to represent things numerically,  thereby figuring out where to place the pixels on the screen. And doing that usually relies on a lot of linear algebra understanding. So there are your vector basics, and in the next video I'll  start getting into some pretty neat concepts surrounding vectors

and in the next video I'll  start getting into some pretty neat concepts surrounding vectors like span,  bases, and linear dependence. See you then! you

Linear combinations, span, and basis vectors | Chapter 2, Essence of linear algebra

In the last video, along with the ideas of vector addition and scalar multiplication,  I described vector coordinates, where there's this back and forth between,  for example, pairs of numbers and two-dimensional vectors. Now, I imagine the vector coordinates were already familiar to a lot of you,  but there's another kind of interesting way to think about these coordinates,  which is pretty central to linear algebra. When you have a pair of numbers that's meant to describe a vector,  like 3,

to linear algebra. When you have a pair of numbers that's meant to describe a vector,  like 3, negative 2, I want you to think about each coordinate as a scalar,  meaning, think about how each one stretches or squishes vectors. In the xy coordinate system, there are two very special vectors,  the one pointing to the right with length 1, commonly called i-hat,  or the unit vector in the x direction, and the one pointing straight up with length 1,  commonly called j-hat, or the unit vector in the

and the one pointing straight up with length 1,  commonly called j-hat, or the unit vector in the y direction. Now, think of the x coordinate of our vector as a scalar that scales i-hat,  stretching it by a factor of 3, and the y coordinate as a scalar that scales j-hat,  flipping it and stretching it by a factor of 2. In this sense, the vector that these coordinates  describe is the sum of two scaled vectors. That's a surprisingly important concept, this idea of adding together two scaled

scaled vectors. That's a surprisingly important concept, this idea of adding together two scaled vectors. Those two vectors, i-hat and j-hat, have a special name, by the way. Together, they're called the basis of a coordinate system. What this means, basically, is that when you think about coordinates as scalars,  the basis vectors are what those scalars actually, you know, scale. There's also a more technical definition, but I'll get to that later. By framing our coordinate system in terms of

more technical definition, but I'll get to that later. By framing our coordinate system in terms of these two special basis vectors,  it raises a pretty interesting and subtle point. We could have chosen different basis vectors and  gotten a completely reasonable new coordinate system. For example, take some vector pointing up and to the right,  along with some other vector pointing down and to the right in some way. Take a moment to think about all the different vectors that you can get by

the right in some way. Take a moment to think about all the different vectors that you can get by choosing two  scalars, using each one to scale one of the vectors, then adding together what you get. Which two-dimensional vectors can you reach by altering the choices of scalars? The answer is that you can reach every possible two-dimensional vector,  and I think it's a good puzzle to contemplate why. A new pair of basis vectors like this still gives us a valid way to go back and forth  between

why. A new pair of basis vectors like this still gives us a valid way to go back and forth  between pairs of numbers and two-dimensional vectors,  but the association is definitely different from the one that you get using the more  standard basis of i-hat and j-hat. This is something I'll go into much more detail on later,  describing the exact relationship between different coordinate systems,  but for right now, I just want you to appreciate the fact that any time we  describe vectors

but for right now, I just want you to appreciate the fact that any time we  describe vectors numerically, it depends on an implicit choice of what basis  vectors we're using. So any time that you're scaling two vectors and adding them like this,  it's called a linear combination of those two vectors. Where does this word linear come from? Why does this have anything to do with lines? Well, this isn't the etymology, but one way I like to think about it  is that if you fix one of those scalars

isn't the etymology, but one way I like to think about it  is that if you fix one of those scalars and let the other one change its value freely,  the tip of the resulting vector draws a straight line. Now, if you let both scalars range freely and consider every possible  vector that you can get, there are two things that can happen. For most pairs of vectors, you'll be able to reach every possible point in the plane. Every two-dimensional vector is within your grasp. However, in the unlucky

point in the plane. Every two-dimensional vector is within your grasp. However, in the unlucky case where your two original vectors happen to line up,  the tip of the resulting vector is limited to just this single line passing through the  origin. Actually, technically there's a third possibility too. Both your vectors could be zero, in which case you'd just be stuck at the origin. Here's some more terminology. The set of all possible vectors that you can reach with a linear combination  of a

terminology. The set of all possible vectors that you can reach with a linear combination  of a given pair of vectors is called the span of those two vectors. So restating what we just saw in this lingo, the span of most  pairs of 2D vectors is all vectors of 2D space, but when they line up,  their span is all vectors whose tip sit on a certain line. Remember how I said that linear algebra revolves  around vector addition and scalar multiplication? Well, the span of two vectors is basically a

around vector addition and scalar multiplication? Well, the span of two vectors is basically a way of asking what  are all the possible vectors you can reach using only these two fundamental operations,  vector addition and scalar multiplication. This is a good time to talk about how people commonly think about vectors as points. It gets really crowded to think about a whole collection of vectors sitting on a line,  and more crowded still to think about all two-dimensional vectors all at once,

sitting on a line,  and more crowded still to think about all two-dimensional vectors all at once,  filling up the plane. So when dealing with collections of vectors like this,  it's common to represent each one with just a point in space,  the point at the tip of that vector where, as usual,  I want you thinking about that vector with its tail on the origin. That way, if you want to think about every possible vector whose  tip sits on a certain line, just think about the line itself. Likewise,

possible vector whose  tip sits on a certain line, just think about the line itself. Likewise, to think about all possible two-dimensional vectors all at once,  conceptualize each one as the point where its tip sits. So in effect, what you'll be thinking about is the infinite flat  sheet of two-dimensional space itself, leaving the arrows out of it. In general, if you're thinking about a vector on its own, think of it as an arrow. And if you're dealing with a collection of vectors,  it's

on its own, think of it as an arrow. And if you're dealing with a collection of vectors,  it's convenient to think of them all as points. So for our span example, the span of most pairs of vectors ends  up being the entire infinite sheet of two-dimensional space. But if they line up, their span is just a line. The idea of span gets a lot more interesting if we  start thinking about vectors in three-dimensional space. For example, if you take two vectors in 3D space that are not  pointing in the

space. For example, if you take two vectors in 3D space that are not  pointing in the same direction, what does it mean to take their span? Well, their span is the collection of all possible linear combinations  of those two vectors, meaning all possible vectors you get by scaling  each of the two of them in some way and then adding them together. You can kind of imagine turning two different knobs to change  the two scalars defining the linear combination,  adding the scaled vectors and

knobs to change  the two scalars defining the linear combination,  adding the scaled vectors and following the tip of the resulting vector. That tip will trace out some kind of flat sheet  cutting through the origin of three-dimensional space. This flat sheet is the span of the two vectors. Or more precisely, the set of all possible vectors whose  tips sit on that flat sheet is the span of your two vectors. Isn't that a beautiful mental image? So, what happens if we add a third vector and

two vectors. Isn't that a beautiful mental image? So, what happens if we add a third vector and  consider the span of all three of those guys? A linear combination of three vectors is defined  pretty much the same way as it is for two. You'll choose three different scalars, scale each of those vectors,  and then add them all together. And again, the span of these vectors is the set of all possible linear combinations. Two different things could happen here. If your third vector happens to be

linear combinations. Two different things could happen here. If your third vector happens to be sitting on the span of the first two,  then the span doesn't change. You're sort of trapped on that same flat sheet. In other words, adding a scaled version of that third vector to the  linear combination doesn't really give you access to any new vectors. But if you just randomly choose a third vector,  it's almost certainly not sitting on the span of those first two. Then, since it's pointing in a

it's almost certainly not sitting on the span of those first two. Then, since it's pointing in a separate direction,  it unlocks access to every possible three-dimensional vector. One way I like to think about this is that as you scale that new third vector,  it moves around that span sheet of the first two, sweeping it through all of space. Another way to think about it is that you're making full use of the three freely changing  scalars that you have at your disposal to access the full three

use of the three freely changing  scalars that you have at your disposal to access the full three dimensions of space. Now, in the case where the third vector was already sitting on the span of the first two,  or the case where two vectors happen to line up,  we want some terminology to describe the fact that at least one of these vectors is  redundant, not adding anything to our span. Whenever this happens, where you have multiple vectors and you could remove one without  reducing the span,

this happens, where you have multiple vectors and you could remove one without  reducing the span, the relevant terminology is to say that they are linearly dependent. Another way of phrasing that would be to say that one of the vectors can be expressed  as a linear combination of the others, since it's already in the span of the others. On the other hand, if each vector really does add another dimension to the span,  they're said to be linearly independent. So with all of that terminology, and

to the span,  they're said to be linearly independent. So with all of that terminology, and hopefully with some good mental  images to go with it, let me leave you with a puzzle before we go. The technical definition of a basis of a space is a  set of linearly independent vectors that span that space. Now, given how I described a basis earlier, and given your current understanding of the  words span and linearly independent, think about why this definition would make sense. In the next video,

span and linearly independent, think about why this definition would make sense. In the next video, I'll get into matrices in transforming space. See you then!

Linear transformations and matrices | Chapter 3, Essence of linear algebra

Hey everyone! If I had to choose just one topic that makes all of the others in  linear algebra start to click, and which too often goes unlearned  the first time a student takes linear algebra, it would be this one. The idea of a linear transformation and its relation to matrices. For this video, I'm just going to focus on what these transformations look like in the  case of two dimensions, and how they relate to the idea of matrix vector multiplication. In particular, I want to show you a way

they relate to the idea of matrix vector multiplication. In particular, I want to show you a way to think about matrix  vector multiplication that doesn't rely on memorization. To start, let's just parse this term, linear transformation. Transformation is essentially a fancy word for function. It's something that takes in inputs and spits out an output for each one. Specifically, in the context of linear algebra,  we like to think about transformations that take in some vector and  spit out

of linear algebra,  we like to think about transformations that take in some vector and  spit out another vector. So why use the word transformation instead of function if they mean the same thing? Well, it's to be suggestive of a certain way to visualize this input-output relation. You see, a great way to understand functions of vectors is to use movement. If a transformation takes some input vector to some output vector,  we imagine that input vector moving over to the output vector. Then to

to some output vector,  we imagine that input vector moving over to the output vector. Then to understand the transformation as a whole,  we might imagine watching every possible input vector move over to its  corresponding output vector. It gets really crowded to think about all of the vectors all at once,  each one as an arrow. So as I mentioned last video, a nice trick is to conceptualize each vector  not as an arrow, but as a single point, the point where its tip sits. That way, to think

vector  not as an arrow, but as a single point, the point where its tip sits. That way, to think about a transformation taking every possible input vector  to some output vector, we watch every point in space moving to some other point. In the case of transformations in two dimensions,  to get a better feel for the whole shape of the transformation,  I like to do this with all of the points on an infinite grid. I also sometimes like to keep a copy of the grid in the background,  just to help

an infinite grid. I also sometimes like to keep a copy of the grid in the background,  just to help keep track of where everything ends up relative to where it starts. The effect for various transformations moving around all of the points in space is,  you've got to admit, beautiful. It gives the feeling of squishing and morphing space itself. As you can imagine though, arbitrary transformations can look pretty complicated. But luckily, linear algebra limits itself to a special type of

can look pretty complicated. But luckily, linear algebra limits itself to a special type of transformation,  ones that are easier to understand, called linear transformations. Visually speaking, a transformation is linear if it has two properties. All lines must remain lines without getting curved,  and the origin must remain fixed in place. For example, this right here would not be a linear transformation,  since the lines get all curvy. And this one right here, although it keeps the lines

since the lines get all curvy. And this one right here, although it keeps the lines straight,  is not a linear transformation, because it moves the origin. This one here fixes the origin, and it might look like it keeps lines straight,  but that's just because I'm only showing the horizontal and vertical grid lines. When you see what it does to a diagonal line, it becomes clear  that it's not at all linear, since it turns that line all curvy. In general, you should think of linear

it's not at all linear, since it turns that line all curvy. In general, you should think of linear transformations  as keeping grid lines parallel and evenly spaced. Some linear transformations are simple to think about, like rotations about the origin. Others are a little trickier to describe with words. So, how do you think you could describe these transformations numerically? If you were, say, programming some animations to make a video teaching the topic,  what formula do you give the

say, programming some animations to make a video teaching the topic,  what formula do you give the computer so that if you give it the coordinates of a vector,  it can give you the coordinates of where that vector lands? It turns out that you only need to record where the two basis vectors,  i-hat and j-hat, each land, and everything else will follow from that. For example, consider the vector v with coordinates negative 1, 2,  meaning that it equals negative 1 times i-hat plus 2 times j-hat.

with coordinates negative 1, 2,  meaning that it equals negative 1 times i-hat plus 2 times j-hat. If we play some transformation and follow where all three of these vectors go,  the property that grid lines remain parallel and evenly spaced has a really important  consequence. The place where v lands will be negative 1 times the vector  where i-hat landed plus 2 times the vector where j-hat landed. In other words, it started off as a certain linear combination of i-hat and j-hat,  and it ends

In other words, it started off as a certain linear combination of i-hat and j-hat,  and it ends up as that same linear combination of where those two vectors landed. This means you can deduce where v must go based only on where i-hat and j-hat each land. This is why I like keeping a copy of the original grid in the background. For the transformation shown here, we can read off that i-hat lands on the coordinates 1,  negative 2, and j-hat lands on the x-axis over at the coordinates 3, 0. This

on the coordinates 1,  negative 2, and j-hat lands on the x-axis over at the coordinates 3, 0. This means that the vector represented by negative 1 i-hat plus 2 times j-hat  ends up at negative 1 times the vector 1, negative 2 plus 2 times the vector 3, 0. Adding that all together, you can deduce that it has to land on the vector 5, 2. This is a good point to pause and ponder, because it's pretty important. Now, given that I'm actually showing you the full transformation,  you could have just

important. Now, given that I'm actually showing you the full transformation,  you could have just looked to see that v has the coordinates 5, 2. But the cool part here is that this gives us a technique to deduce  where any vectors land so long as we have a record of where i-hat  and j-hat each land without needing to watch the transformation itself. Write the vector with more general coordinates, x and y,  and it will land on x times the vector where i-hat lands, 1, negative 2,  plus y times

x and y,  and it will land on x times the vector where i-hat lands, 1, negative 2,  plus y times the vector where j-hat lands, 3, 0. Carrying out that sum, you see that it lands at 1x plus 3y, negative 2x plus 0y. I give you any vector, and you can tell me where that vector lands using this formula. What all of this is saying is that a two-dimensional linear transformation  is completely described by just four numbers, the two coordinates for  where i-hat lands and the two coordinates for where

by just four numbers, the two coordinates for  where i-hat lands and the two coordinates for where j-hat lands. Isn't that cool? It's common to package these coordinates into a 2x2 grid of numbers called a 2x2 matrix,  where you can interpret the columns as the two special vectors  where i-hat and j-hat each land. If you're given a 2x2 matrix describing a linear transformation and some specific vector,  and you want to know where that linear transformation takes that vector,  you can take the

vector,  and you want to know where that linear transformation takes that vector,  you can take the coordinates of the vector, multiply them by the corresponding  columns of the matrix, then add together what you get. This corresponds with the idea of adding the scaled versions of our new basis vectors. Let's see what this looks like in the most general case,  where your matrix has entries A, B, C, D. And remember, this matrix is just a way of packaging the  information needed to describe a

B, C, D. And remember, this matrix is just a way of packaging the  information needed to describe a linear transformation. Always remember to interpret that first column, AC,  as the place where the first basis vector lands, and that second column, BD,  as the place where the second basis vector lands. When we apply this transformation to some vector xy, what do you get? Well, it'll be x times AC plus y times BD. Putting this together, you get a vector Ax plus By, Cx plus Dy. You could even

AC plus y times BD. Putting this together, you get a vector Ax plus By, Cx plus Dy. You could even define this as matrix vector multiplication,  when you put the matrix on the left of the vector like it's a function. Then, you could make high schoolers memorize this without  showing them the crucial part that makes it feel intuitive. But, isn't it more fun to think about these columns as the  transformed versions of your basis vectors, and to think about  the result as the appropriate linear

versions of your basis vectors, and to think about  the result as the appropriate linear combination of those vectors? Let's practice describing a few linear transformations with matrices. For example, if we rotate all of space 90 degrees counterclockwise,  then i-hat lands on the coordinates 0, 1. And j-hat lands on the coordinates negative 1, 0. So the matrix we end up with has columns 0, 1, negative 1, 0. To figure out what happens to any vector after a 90-degree rotation,  you could just

negative 1, 0. To figure out what happens to any vector after a 90-degree rotation,  you could just multiply its coordinates by this matrix. Here's a fun transformation with a special name, called a shear. In it, i-hat remains fixed, so the first column of the matrix is 1, 0. But j-hat moves over to the coordinates 1, 1,  which become the second column of the matrix. And at the risk of being redundant here, figuring out how a shear transforms  a given vector comes down to multiplying this

redundant here, figuring out how a shear transforms  a given vector comes down to multiplying this matrix by that vector. Let's say we want to go the other way around, starting with a matrix,  say with columns 1, 2 and 3, 1, and we want to deduce what its transformation looks like. Pause and take a moment to see if you can imagine it. One way to do this is to first move i-hat to 1, 2, then move j-hat to 3, 1. Always moving the rest of space in such a way  that keeps gridlines parallel and

j-hat to 3, 1. Always moving the rest of space in such a way  that keeps gridlines parallel and evenly spaced. If the vectors that i-hat and j-hat land on are linearly dependent, which,  if you recall from last video, means that one is a scaled version of the other,  it means that the linear transformation squishes all of 2D space onto the line where  those two vectors sit, also known as the one-dimensional span of those two linearly  dependent vectors. To sum up, linear transformations are a

span of those two linearly  dependent vectors. To sum up, linear transformations are a way to move around space such that  gridlines remain parallel and evenly spaced, and such that the origin remains fixed. Delightfully, these transformations can be described using only a handful of numbers,  the coordinates of where each basis vector lands. Matrices give us a language to describe these transformations,  where the columns represent those coordinates,  and matrix-vector multiplication is just a

where the columns represent those coordinates,  and matrix-vector multiplication is just a way to compute what that  transformation does to a given vector. The important takeaway here is that every time you see a matrix,  you can interpret it as a certain transformation of space. Once you really digest this idea, you're in a  great position to understand linear algebra deeply. Almost all of the topics coming up, from matrix multiplication to determinants,  change of basis, eigenvalues, all of

topics coming up, from matrix multiplication to determinants,  change of basis, eigenvalues, all of these will become easier to understand  once you start thinking about matrices as transformations of space. Most immediately, in the next video, I'll be talking about  multiplying two matrices together. See you then! Thank you for watching!

Matrix multiplication as composition | Chapter 4, Essence of linear algebra

Hey everyone, where we last left off, I showed what linear  transformations look like and how to represent them using matrices. This is worth a quick recap because it's just really important,  but of course if this feels like more than just a recap, go back and watch the full video. Technically speaking, linear transformations are functions with vectors  as inputs and vectors as outputs, but I showed last time how we can think  about them visually as smooshing around space in such a way that

showed last time how we can think  about them visually as smooshing around space in such a way that grid  lines stay parallel and evenly spaced, and so that the origin remains fixed. The key takeaway was that a linear transformation is completely determined by where it  takes the basis vectors of the space, which for two dimensions means i-hat and j-hat. This is because any other vector could be described  as a linear combination of those basis vectors. A vector with coordinates x, y is x times

as a linear combination of those basis vectors. A vector with coordinates x, y is x times i-hat plus y times j-hat. After going through the transformation, this property that grid  lines remain parallel and evenly spaced has a wonderful consequence. The place where your vector lands will be x times the transformed  version of i-hat plus y times the transformed version of j-hat. This means if you keep a record of the coordinates where i-hat lands and the  coordinates where j-hat lands, you can

keep a record of the coordinates where i-hat lands and the  coordinates where j-hat lands, you can compute that a vector which starts at x,  y must land on x times the new coordinates of i-hat plus y times the new coordinates  of j-hat. The convention is to record the coordinates of where i-hat and j-hat  land as the columns of a matrix, and to define this sum of the scaled  versions of those columns by x and y to be matrix-vector multiplication. In this way, a matrix represents a specific

columns by x and y to be matrix-vector multiplication. In this way, a matrix represents a specific linear transformation,  and multiplying a matrix by a vector is what it means  computationally to apply that transformation to that vector. Alright, recap over, on to the new stuff. Oftentimes, you find yourself wanting to describe the  effects of applying one transformation and then another. For example, maybe you want to describe what happens when you first  rotate the plane 90 degrees

For example, maybe you want to describe what happens when you first  rotate the plane 90 degrees counterclockwise, then apply a shear. The overall effect here, from start to finish,  is another linear transformation, distinct from the rotation and the shear. This new linear transformation is commonly called the  composition of the two separate transformations we applied. And like any linear transformation, it can be described  with a matrix all of its own by following i-hat and j-hat. In this

it can be described  with a matrix all of its own by following i-hat and j-hat. In this example, the ultimate landing spot for i-hat after both transformations is 1,1,  so let's make that the first column of a matrix. Likewise, j-hat ultimately ends up at the location negative 1,0,  so we make that the second column of the matrix. This new matrix captures the overall effect of applying a rotation then a shear,  but as one single action, rather than two successive ones. Here's one way to think

then a shear,  but as one single action, rather than two successive ones. Here's one way to think about that new matrix. If you were to take some vector and pump it through the rotation, then the shear,  the long way to compute where it ends up is to first multiply it on the left by the  rotation matrix, then take whatever you get and multiply that on the left by the shear  matrix. This is, numerically speaking, what it means to  apply a rotation then a shear to a given vector. But whatever you

speaking, what it means to  apply a rotation then a shear to a given vector. But whatever you get should be the same as just applying this new composition matrix  that we just found by that same vector, no matter what vector you chose,  since this new matrix is supposed to capture the same overall effect as the rotation  then shear action. Based on how things are written down here, I think it's reasonable to  call this new matrix the product of the original two matrices, don't you? We can think

to  call this new matrix the product of the original two matrices, don't you? We can think about how to compute that product more generally in just a moment,  but it's way too easy to get lost in the forest of numbers. Always remember that multiplying two matrices like this has the  geometric meaning of applying one transformation then another. One thing that's kind of weird here is that this has us reading from right to left. You first apply the transformation represented by the matrix on the

us reading from right to left. You first apply the transformation represented by the matrix on the right,  then you apply the transformation represented by the matrix on the left. This stems from function notation, since we write functions on the left of variables,  so every time you compose two functions, you always have to read it right to left. Good news for the Hebrew readers, bad news for the rest of us. Let's look at another example. Take the matrix with columns 1,1 and negative 2,0,

the rest of us. Let's look at another example. Take the matrix with columns 1,1 and negative 2,0, whose transformation looks like this. And let's call it M1. Next, take the matrix with columns 0,1 and 2,0, whose transformation looks like this. And let's call that guy M2. The total effect of applying M1 then M2 gives us a new transformation,  so let's find its matrix. But this time, let's see if we can do it without watching the animations,  and instead just using the numerical entries in each

we can do it without watching the animations,  and instead just using the numerical entries in each matrix. First, we need to figure out where i-hat goes. After applying M1, the new coordinates of i-hat,  by definition, are given by that first column of M1, namely 1,1. To see what happens after applying M2, multiply the matrix for M2 by that vector 1,1. Working it out, the way I described last video, you'll get the vector 2,1. This will be the first column of the composition matrix. Likewise,

you'll get the vector 2,1. This will be the first column of the composition matrix. Likewise, to follow j-hat, the second column of  M1 tells us that it first lands on negative 2,0. Then, when we apply M2 to that vector, you can work out the matrix-vector product  to get 0, negative 2, which becomes the second column of our composition matrix. Let me talk through that same process again, but this time I'll show variable entries  in each matrix, just to show that the same line of reasoning works

time I'll show variable entries  in each matrix, just to show that the same line of reasoning works for any matrices. This is more symbol-heavy and will require some more room,  but it should be pretty satisfying for anyone who has previously been taught matrix  multiplication the more rote way. To follow where i-hat goes, start by looking at the first column of  the matrix on the right, since this is where i-hat initially lands. Multiplying that column by the matrix on the left is how you can

is where i-hat initially lands. Multiplying that column by the matrix on the left is how you can tell where the  intermediate version of i-hat ends up after applying the second transformation. So the first column of the composition matrix will always  equal the left matrix times the first column of the right matrix. Likewise, j-hat will always initially land on the second column of the right matrix. So multiplying the left matrix by this second column will give its final location,  and hence

So multiplying the left matrix by this second column will give its final location,  and hence that's the second column of the composition matrix. Notice there's a lot of symbols here, and it's common to be taught this formula as  something to memorize, along with a certain algorithmic process to help remember it. But I really do think that before memorizing that process,  you should get in the habit of thinking about what matrix  multiplication really represents, applying one transformation

habit of thinking about what matrix  multiplication really represents, applying one transformation after another. Trust me, this will give you a much better conceptual framework that  makes the properties of matrix multiplication much easier to understand. For example, here's a question. Does it matter what order we put the two matrices in when we multiply them? Well, let's think through a simple example, like the one from earlier. Take a shear, which fixes i-hat and smooshes j-hat over to the

example, like the one from earlier. Take a shear, which fixes i-hat and smooshes j-hat over to the right,  and a 90 degree rotation. If you first do the shear, then rotate, we can see that  i-hat ends up at 0,1 and j-hat ends up at negative 1,1. Both are generally pointing close together. If you first rotate, then do the shear, i-hat ends up over at 1,1,  and j-hat is off in a different direction at negative 1,0, and they're pointing,  you know, farther apart. The overall effect here is clearly

at negative 1,0, and they're pointing,  you know, farther apart. The overall effect here is clearly different, so evidently, order totally does matter. Notice, by thinking in terms of transformations,  that's the kind of thing that you can do in your head by visualizing. No matrix multiplication necessary. I remember when I first took linear algebra, there was this one homework  problem that asked us to prove that matrix multiplication is associative. This means that if you have three matrices,

us to prove that matrix multiplication is associative. This means that if you have three matrices, A, B, and C,  and you multiply them all together, it shouldn't matter if you first compute A times B,  then multiply the result by C, or if you first multiply B times C,  then multiply that result by A on the left. In other words, it doesn't matter where you put the parentheses. Now, if you try to work through this numerically, like I did back then,  it's horrible, just horrible, and

you try to work through this numerically, like I did back then,  it's horrible, just horrible, and unenlightening for that matter. But when you think about matrix multiplication as applying  one transformation after another, this property is just trivial. Can you see why? What it's saying is that if you first apply C, then B,  then A, it's the same as applying C, then B, then A. I mean, there's nothing to prove. You're just applying the same three things one after the other, all in the same

nothing to prove. You're just applying the same three things one after the other, all in the same order. This might feel like cheating, but it's not. This is an honest-to-goodness proof that matrix multiplication is associative,  and even better than that, it's a good explanation for why that property should be true. I really do encourage you to play around more with this idea,  imagining two different transformations, thinking about what happens when  you apply one after the other, and then

transformations, thinking about what happens when  you apply one after the other, and then working out the matrix product numerically. Trust me, this is the kind of playtime that really makes the idea sink in. In the next video, I'll start talking about extending  these ideas beyond just two dimensions. See you then!

Three-dimensional linear transformations | Chapter 5, Essence of linear algebra

Hey folks, I've got a relatively quick video for you today,  just sort of a footnote between chapters. In the last two videos I talked about linear transformations and matrices,  but I only showed the specific case of transformations that take  two-dimensional vectors to other two-dimensional vectors. In general throughout the series we'll work mainly in two dimensions,  mostly because it's easier to actually see on the screen and wrap your mind around. But more importantly than that, once you

to actually see on the screen and wrap your mind around. But more importantly than that, once you get all the core ideas in two dimensions,  they carry over pretty seamlessly to higher dimensions. Nevertheless, it's good to peek our heads outside of flatland now and then to,  you know, see what it means to apply these ideas in more than just those two dimensions. For example, consider a linear transformation with three-dimensional  vectors as inputs and three-dimensional vectors as outputs. We

with three-dimensional  vectors as inputs and three-dimensional vectors as outputs. We can visualize this by smooshing around all the points in three-dimensional space,  as represented by a grid, in such a way that keeps the grid lines parallel  and evenly spaced, and which fixes the origin in place. And just as with two dimensions, every point of space that we see moving around is  really just a proxy for a vector who has its tip at that point,  and what we're really doing is thinking about

a proxy for a vector who has its tip at that point,  and what we're really doing is thinking about input vectors moving over to their  corresponding outputs. And just as with two dimensions, one of these transformations  is completely described by where the basis vectors go. But now, there are three standard basis vectors that we typically use. The unit vector in the x direction, i-hat, the unit vector in the y direction,  j-hat, and a new guy, the unit vector in the z direction, called k-hat.

vector in the y direction,  j-hat, and a new guy, the unit vector in the z direction, called k-hat. In fact, I think it's easier to think about these transformations by only following  those basis vectors, since the full 3D grid representing all points can get kind of messy. By leaving a copy of the original axes in the background,  we can think about the coordinates of where each of these three basis vectors lands. Record the coordinates of these three vectors as the columns of a 3x3 matrix.

basis vectors lands. Record the coordinates of these three vectors as the columns of a 3x3 matrix. This gives a matrix that completely describes the transformation using only nine numbers. As a simple example, consider the transformation  that rotates space 90 degrees around the y-axis. So that would mean that it takes i-hat to the coordinates 0,0, negative 1 on the z-axis. It doesn't move j-hat, so it stays at the coordinates 0,1,0. And then k-hat moves over to the x-axis at 1,0,0. Those three

so it stays at the coordinates 0,1,0. And then k-hat moves over to the x-axis at 1,0,0. Those three sets of coordinates become the columns of  a matrix that describes that rotation transformation. To see where a vector with coordinates x,y,z lands,  the reasoning is almost identical to what it was for two dimensions. Each of those coordinates can be thought of as instructions for how to  scale each basis vector so that they add together to get your vector. And the important part, just like the

basis vector so that they add together to get your vector. And the important part, just like the 2D case,  is that this scaling and adding process works both before and after the transformation. So to see where your vector lands, you multiply those coordinates by the  corresponding columns of the matrix, and then you add together the three results. Multiplying two matrices is also similar. Whenever you see two 3x3 matrices getting multiplied together,  you should imagine first applying the

you see two 3x3 matrices getting multiplied together,  you should imagine first applying the transformation encoded by the right one,  then applying the transformation encoded by the left one. It turns out that 3D matrix multiplication is actually pretty important for fields  like computer graphics and robotics, since things like rotations and three dimensions  can be pretty hard to describe, but they're easier to wrap your mind around if you  can break them down as the composition of separate,

they're easier to wrap your mind around if you  can break them down as the composition of separate, easier-to-think-about rotations. Performing this matrix multiplication numerically is,  once again, pretty similar to the two-dimensional case. In fact, a good way to test your understanding of the last video would be to try to  reason through what specifically this matrix multiplication should look like,  thinking closely about how it relates to the idea of applying two successive

should look like,  thinking closely about how it relates to the idea of applying two successive  transformations in space. In the next video, I'll start getting into the determinant.

Hello, hello again. So moving forward, I'll be assuming that you have a visual understanding  of linear transformations and how they're represented with matrices,  the way that I've been talking about in the last few videos. If you think about a couple of these linear transformations,  you might notice how some of them seem to stretch space out, while others squish it on in. One thing that turns out to be pretty useful for understanding one of these  transformations is to measure exactly how

out to be pretty useful for understanding one of these  transformations is to measure exactly how much it stretches or squishes things. More specifically, to measure the factor by which  the area of a given region increases or decreases. For example, look at the matrix with columns 3, 0 and 0, 2. It scales i-hat by a factor of 3 and scales j-hat by a factor of 2. Now, if we focus our attention on the 1 by 1 square whose bottom sits on i-hat and whose  left side sits on j-hat, after the

on the 1 by 1 square whose bottom sits on i-hat and whose  left side sits on j-hat, after the transformation, this turns into a 2 by 3 rectangle. Since this region started out with area 1 and ended up with area 6,  we can say the linear transformation has scaled its area by a factor of 6. Compare that to a shear, whose matrix has columns 1, 0 and 1,  1, meaning i-hat stays in place and j-hat moves over to 1, 1. That same unit square determined by i-hat and j-hat gets slanted  and turned into a

over to 1, 1. That same unit square determined by i-hat and j-hat gets slanted  and turned into a parallelogram, but the area of that parallelogram is still 1,  since its base and height each continue to have length 1. So even though this transformation smushes things about,  it seems to leave areas unchanged, at least in the case of that 1 unit square. Actually though, if you know how much the area of that one single unit square changes,  it can tell you how the area of any possible region in

of that one single unit square changes,  it can tell you how the area of any possible region in space changes. For starters, notice that whatever happens to one square in the grid  has to happen to any other square in the grid, no matter the size. This follows from the fact that grid lines remain parallel and evenly spaced. Then, any shape that's not a grid square can be approximated by grid squares pretty well,  with arbitrarily good approximations if you use small enough grid squares. So,

pretty well,  with arbitrarily good approximations if you use small enough grid squares. So, since the areas of all those tiny grid squares are being scaled by some single  amount, the area of the blob as a whole will also be scaled by that same single amount. This very special scaling factor, the factor by which a linear transformation  changes any area, is called the determinant of that transformation. I'll show how to compute the determinant of a transformation  using its matrix later on in

I'll show how to compute the determinant of a transformation  using its matrix later on in this video, but understanding what it represents is,  trust me, much more important than the computation. For example, the determinant of a transformation would be 3 if  that transformation increases the area of a region by a factor of 3.

40
00:02:57,610 --> 00:02:57,040
The determinant of a transformation would be ½ 
41
00:02:58,180 --> 00:02:57,610

if it squishes down all areas by a factor of ½. The determinant of a transformation would be 1 half if it squishes down  all areas by a factor of 1 half. And the determinant of a 2D transformation  is 0 if it squishes all of space onto a line, or even onto a single point. Since then, the area of any region would become zero. That last example will prove to be pretty important. It means that checking if the determinant of a given matrix is zero  will give a way of computing whether or not the

if the determinant of a given matrix is zero  will give a way of computing whether or not the transformation  associated with that matrix squishes everything into a smaller dimension. You'll see in the next few videos why this is even a useful thing to think about,  but for now, I just want to lay down all of the visual intuition,  which, in and of itself, is a beautiful thing to think about. Okay, I need to confess that what I've said so far is not quite right. The full concept of the

Okay, I need to confess that what I've said so far is not quite right. The full concept of the determinant allows for negative values. But what would the idea of scaling an area by a negative amount even mean? This has to do with the idea of orientation. For example, notice how this transformation gives the sensation of flipping space over. If you were thinking of 2D space as a sheet of paper,  a transformation like that one seems to turn over that sheet onto the other side. Any transformations

transformation like that one seems to turn over that sheet onto the other side. Any transformations that do this are said to invert the orientation of space. Another way to think about it is in terms of i-hat and j-hat. Notice that in their starting positions, j-hat is to the left of i-hat. If, after a transformation, j-hat is now on the right of i-hat,  the orientation of space has been inverted. Whenever this happens, whenever the orientation of space is inverted,  the determinant will be

Whenever this happens, whenever the orientation of space is inverted,  the determinant will be negative. The absolute value of the determinant, though,  still tells you the factor by which areas have been scaled. For example, the matrix with columns 1, 1 and 2,  negative 1 encodes a transformation that has determinant, I'll just tell you, negative 3. And what this means is that space gets flipped over and areas are scaled by a factor of 3. So why would this idea of a negative area scaling

over and areas are scaled by a factor of 3. So why would this idea of a negative area scaling  factor be a natural way to describe orientation flipping? Think about the series of transformations you get by  slowly letting i-hat get closer and closer to j-hat. As i-hat gets closer, all of the areas in space are getting squished more and more,  meaning the determinant approaches 0. Once i-hat lines up perfectly with j-hat, the determinant is 0. Then, if i-hat continues the way that it was going,

up perfectly with j-hat, the determinant is 0. Then, if i-hat continues the way that it was going,  doesn't it kind of feel natural for the determinant to keep decreasing into  the negative numbers? So that's the understanding of determinants in two dimensions. What do you think it should mean for three dimensions? It also tells you how much a transformation scales things,  but this time, it tells you how much volumes get scaled. Just as in two dimensions, where this is easiest to think about

you how much volumes get scaled. Just as in two dimensions, where this is easiest to think about by focusing  on one particular square with an area 1 and watching only what happens to it,  in three dimensions, it helps to focus your attention on the specific 1 by 1  by 1 cube whose edges are resting on the basis vectors, i-hat, j-hat and k-hat. After the transformation, that cube might get warped into some kind of slanty slanty cube. This shape, by the way, has the best name ever,

get warped into some kind of slanty slanty cube. This shape, by the way, has the best name ever, parallelipiped,  a name that's made even more delightful when your professor has a nice thick  Russian accent. Since this cube starts out with a volume of 1,  and the determinant gives the factor by which any volume is scaled,  you can think of the determinant simply as being the volume of that  parallelipiped that the cube turns into. A determinant of 0 would mean that all of space is squished onto

that the cube turns into. A determinant of 0 would mean that all of space is squished onto something with 0 volume,  meaning either a flat plane, a line, or, in the most extreme case, onto a single point. Those of you who watched chapter 2 will recognize this as  meaning that the columns of the matrix are linearly dependent. Can you see why? What about negative determinants? What should that mean for three dimensions? One way to describe orientation in 3D is with the right hand rule. Point the

for three dimensions? One way to describe orientation in 3D is with the right hand rule. Point the forefinger of your right hand in the direction of i-hat,  stick out your middle finger in the direction of j-hat,  and notice how when you point your thumb up, it's in the direction of k-hat. If you can still do that after the transformation,  orientation has not changed, and the determinant is positive. Otherwise, if after the transformation it only makes sense to do that with  your left hand,

Otherwise, if after the transformation it only makes sense to do that with  your left hand, orientation has been flipped, and the determinant is negative. So, if you haven't seen it before, you're probably wondering by now,  how do you actually compute the determinant? For a 2x2 matrix with entries a, b, c, d, the formula is a times d minus b times c. Here's part of an intuition for where this formula comes from. Let's say that the terms b and c both happened to be 0. Then, the term a tells you

comes from. Let's say that the terms b and c both happened to be 0. Then, the term a tells you how much i-hat is stretched in the x direction,  and the term d tells you how much j-hat is stretched in the y direction. So, since those other terms are 0, it should make sense that a  times d gives the area of the rectangle that our favorite unit square turns into,  kind of like the 3, 0, 0, 2 example from earlier. Even if only one of b or c are 0, you'll have  a parallelogram with a base a and a

from earlier. Even if only one of b or c are 0, you'll have  a parallelogram with a base a and a height d. So, the area should still be a times d. Loosely speaking, if both b and c are non-zero,  then that b times c term tells you how much this parallelogram is stretched or  squished in the diagonal direction. For those of you hungry for a more precise description of this b times c term,  here's a helpful diagram if you'd like to pause and ponder. Now, if you feel like computing determinants by

helpful diagram if you'd like to pause and ponder. Now, if you feel like computing determinants by hand is something that you need to know,  the only way to get it down is to just practice it with a few. There's really not that much I can say or animate  that's going to drill in the computation. This is all triply true for three-dimensional determinants. There is a formula, and if you feel like that's something you need to know,  you should practice with a few matrices, or, you know,  go watch

something you need to know,  you should practice with a few matrices, or, you know,  go watch Sal Khan work through a few. Honestly, though, I don't think that those computations fall within  the essence of linear algebra, but I definitely think that  understanding what the determinant represents falls within that essence. Here's kind of a fun question to think about before the next video. If you multiply two matrices together, the determinant of the resulting matrix  is the same as the product

multiply two matrices together, the determinant of the resulting matrix  is the same as the product of the determinants of the original two matrices. If you tried to justify this with numbers, it would take a really long time,  but see if you can explain why this makes sense in just one sentence. Next up, I'll be relating the idea of linear transformations covered so far to one of  the areas where linear algebra is most useful, linear systems of equations. See you then!

Inverse matrices, column space and null space | Chapter 7, Essence of linear algebra

As you can probably tell by now, the bulk of this series is on understanding matrix  and vector operations through that more visual lens of linear transformations. This video is no exception, describing the concepts of inverse matrices,  column space, rank, and null space through that lens. A forewarning though, I'm not going to talk about the methods for actually  computing these things, and some would argue that that's pretty important. There are a lot of very good resources for learning those

would argue that that's pretty important. There are a lot of very good resources for learning those methods outside this series,  keywords Gaussian elimination and row echelon form. I think most of the value that I actually have to add here is on the intuition half. Plus, in practice, we usually get software to compute this stuff for us anyway. First, a few words on the usefulness of linear algebra. By now, you already have a hint for how it's used in describing the manipulation  of space,

By now, you already have a hint for how it's used in describing the manipulation  of space, which is useful for things like computer graphics and robotics. But one of the main reasons that linear algebra is more  broadly applicable and required for just about any technical  discipline is that it lets us solve certain systems of equations. When I say system of equations, I mean you have a list of variables,  things you don't know, and a list of equations relating them. In a lot of situations,

variables,  things you don't know, and a list of equations relating them. In a lot of situations, those equations can get very complicated. But, if you're lucky, they might take on a certain special form. Within each equation, the only thing happening to each variable is  that it's scaled by some constant, and the only thing happening to  each of those scaled variables is that they're added to each other. So no exponents or fancy functions or multiplying two variables together,  things like

each other. So no exponents or fancy functions or multiplying two variables together,  things like that. The typical way to organize this sort of special system of equations is to  throw all the variables on the left and put any lingering constants on the right. It's also nice to vertically line up the common variables,  and to do that, you might need to throw in some zero coefficients  whenever the variable doesn't show up in one of the equations. This is called a linear system of equations.

the variable doesn't show up in one of the equations. This is called a linear system of equations. You might notice that this looks a lot like matrix-vector multiplication. In fact, you can package all of the equations together into a single  vector equation where you have the matrix containing all of the  constant coefficients and a vector containing all of the variables,  and their matrix-vector product equals some different constant vector. Let's name that constant matrix A, denote the

product equals some different constant vector. Let's name that constant matrix A, denote the vector holding the variables  with a bold-faced X, and call the constant vector on the right-hand side V. This is more than just a notational trick to get  our system of equations written on one line. It sheds light on a pretty cool geometric interpretation for the problem. The matrix A corresponds with some linear transformation,  so solving Ax equals V means we're looking for a vector X, which,  after

linear transformation,  so solving Ax equals V means we're looking for a vector X, which,  after applying the transformation, lands on V. Think about what's happening here for a moment. You can hold in your head this really complicated idea of multiple  variables all intermingling with each other just by thinking about  squishing and morphing space and trying to figure out which vector lands on another. Cool, right? To start simple, let's say you have a system with two equations and two

on another. Cool, right? To start simple, let's say you have a system with two equations and two unknowns. This means the matrix A is a 2x2 matrix, and V and X are each two-dimensional vectors. Now, how we think about the solutions to this equation depends on whether the  transformation associated with A squishes all of space into a lower dimension,  like a line or a point, or if it leaves everything spanning the full two dimensions  where it started. In the language of the last video, we

spanning the full two dimensions  where it started. In the language of the last video, we subdivide into the cases where  A has zero determinant and the case where A has non-zero determinant. Let's start with the most likely case, where the determinant is non-zero,  meaning space does not get squished into a zero-area region. In this case, there will always be one and only one vector that lands on V,  and you can find it by playing the transformation in reverse. Following where V goes as we

on V,  and you can find it by playing the transformation in reverse. Following where V goes as we rewind the tape like this,  you'll find the vector x such that A times x equals V. When you play the transformation in reverse, it actually corresponds to a separate  linear transformation, commonly called the inverse of A, denoted A to the negative one. For example, if A was a counterclockwise rotation by 90 degrees,  then the inverse of A would be a clockwise rotation by 90 degrees. If A was a

by 90 degrees,  then the inverse of A would be a clockwise rotation by 90 degrees. If A was a rightward shear that pushes j-hat one unit to the right,  the inverse of A would be a leftward shear that pushes j-hat one unit to the left. In general, A inverse is the unique transformation with the property that if you first  apply A, then follow it with the transformation A inverse,  you end up back where you started. Applying one transformation after another is captured algebraically with  matrix

where you started. Applying one transformation after another is captured algebraically with  matrix multiplication, so the core property of this transformation A inverse  is that A inverse times A equals the matrix that corresponds to doing nothing. The transformation that does nothing is called the identity transformation. It leaves i-hat and j-hat each where they are, unmoved, so its columns are 1,0 and 0,1. Once you find this inverse, which in practice you'd do with a computer,  you can

are 1,0 and 0,1. Once you find this inverse, which in practice you'd do with a computer,  you can solve your equation by multiplying this inverse matrix by v. And again, what this means geometrically is that you're  playing the transformation in reverse and following v. This non-zero determinant case, which for a random choice of matrix is by far the  most likely one, corresponds with the idea that if you have two unknowns and two  equations, it's almost certainly the case that there's a single

if you have two unknowns and two  equations, it's almost certainly the case that there's a single unique solution. This idea also makes sense in higher dimensions,  when the number of equations equals the number of unknowns. Again, the system of equations can be translated to the geometric  interpretation where you have some transformation A and some vector v,  and you're looking for the vector x that lands on v. As long as the transformation A doesn't squish all of space into a lower

vector x that lands on v. As long as the transformation A doesn't squish all of space into a lower dimension,  meaning its determinant is non-zero, there will be an inverse transformation A inverse,  with the property that if you first do A, then you do A inverse,  it's the same as doing nothing. And to solve your equation, you just have to multiply  that reverse transformation matrix by the vector v. But when the determinant is zero, and the transformation associated with the  system of

vector v. But when the determinant is zero, and the transformation associated with the  system of equations squishes space into a smaller dimension, there is no inverse. You cannot unsquish a line to turn it into a plane. At least that's not something that a function can do. That would require transforming each individual vector into a whole line full of vectors. But functions can only take a single input to a single output. Similarly, for three equations and three unknowns,  there will be no

input to a single output. Similarly, for three equations and three unknowns,  there will be no inverse if the corresponding transformation  squishes 3D space onto the plane, or even if it squishes it onto a line or a point. Those all correspond to a determinant of zero,  since any region is squished into something with zero volume. It's still possible that a solution exists even when there is no inverse. It's just that when your transformation squishes space onto, say, a line,  you have to be

inverse. It's just that when your transformation squishes space onto, say, a line,  you have to be lucky enough that the vector v lives somewhere on that line. You might notice that some of these zero determinant  cases feel a lot more restrictive than others. Given a 3x3 matrix, for example, it seems a lot harder for a solution  to exist when it squishes space onto a line compared to when it squishes  things onto a plane, even though both of those are zero determinant. We have some language

things onto a plane, even though both of those are zero determinant. We have some language that's a bit more specific than just saying zero determinant. When the output of a transformation is a line,  meaning it's one-dimensional, we say the transformation has a rank of one. If all the vectors land on some two-dimensional plane,  we say the transformation has a rank of two. So the word rank means the number of dimensions in the output of a transformation. For instance, in the case of 2x2

means the number of dimensions in the output of a transformation. For instance, in the case of 2x2 matrices, rank two is the best that it can be. It means the basis vectors continue to span the full two dimensions of space,  and the determinant is not zero. But for 3x3 matrices, rank two means that we've collapsed,  but not as much as they would have collapsed for a rank one situation. If a 3D transformation has a non-zero determinant and its output fills all of 3D space,  it has a rank of

transformation has a non-zero determinant and its output fills all of 3D space,  it has a rank of three. This set of all possible outputs for your matrix, whether it's a line,  a plane, 3D space, whatever, is called the column space of your matrix. You can probably guess where that name comes from. The columns of your matrix tell you where the basis vectors land,  and the span of those transformed basis vectors gives you all possible outputs. In other words, the column space is the span of the

basis vectors gives you all possible outputs. In other words, the column space is the span of the columns of your matrix. So a more precise definition of rank would be that  it's the number of dimensions in the column space. When this rank is as high as it can be, meaning it equals the number of columns,  we call the matrix full rank. Notice the zero vector will always be included in the column space,  since linear transformations must keep the origin fixed in place. For a full rank

column space,  since linear transformations must keep the origin fixed in place. For a full rank transformation, the only vector  that lands at the origin is the zero vector itself. But for matrices that aren't full rank, which squish to a smaller dimension,  you can have a whole bunch of vectors that land on zero. If a 2D transformation squishes space onto a line, for example,  there is a separate line in a different direction full of vectors that get squished  onto the origin. If a 3D

separate line in a different direction full of vectors that get squished  onto the origin. If a 3D transformation squishes space onto a plane,  there's also a full line of vectors that land on the origin. If a 3D transformation squishes all of space onto a line,  then there's a whole plane full of vectors that land on the origin. This set of vectors that lands on the origin is called the null space,  or the kernel of your matrix. It's the space of all vectors that become null,  in the sense

space,  or the kernel of your matrix. It's the space of all vectors that become null,  in the sense that they land on the zero vector. In terms of the linear system of equations, when v happens to be the zero vector,  the null space gives you all of the possible solutions to the equation. So that's a very high level overview of how to  think about linear systems of equations geometrically. Each system has some kind of linear transformation associated with it,  and when that transformation has

system has some kind of linear transformation associated with it,  and when that transformation has an inverse, you can use that inverse to solve  your system. Otherwise, the idea of column space lets us understand when a solution even exists,  and the idea of a null space helps us to understand what the  set of all possible solutions can look like. Again, there's a lot that I haven't covered here,  most notably how to compute these things. I also had to limit my scope to examples where the

most notably how to compute these things. I also had to limit my scope to examples where the  number of equations equals the number of unknowns. But the goal here is not to try to teach everything,  it's that you come away with a strong intuition for inverse matrices,  column space, and null space, and that those intuitions make any future  learning that you do more fruitful. Next video, by popular request, will be a brief footnote about non-square matrices. Then after that, I'm going to give

request, will be a brief footnote about non-square matrices. Then after that, I'm going to give you my take on dot products,  and something pretty cool that happens when you view them under the light of linear  transformations. See you then!

Nonsquare matrices as transformations between dimensions | Chapter 8, Essence of linear algebra

Hey everyone, I've got another quick footnote for you between chapters today. When I've talked about linear transformations so far,  I've only really talked about transformations from 2D vectors to other 2D vectors,  represented with 2x2 matrices, or from 3D vectors to other 3D vectors,  represented with 3x3 matrices. But several commenters have asked about non-square matrices,  so I thought I'd take a moment to just show what those mean geometrically. By now in the series, you actually have

take a moment to just show what those mean geometrically. By now in the series, you actually have most of the background  you need to start pondering a question like this on your own,  but I'll start talking through it just to give a little mental momentum. It's perfectly reasonable to talk about transformations between dimensions,  such as one that takes 2D vectors to 3D vectors. Again, what makes one of these linear is that gridlines remain  parallel and evenly spaced, and that the origin

makes one of these linear is that gridlines remain  parallel and evenly spaced, and that the origin maps to the origin. What I have pictured here is the input space on the left,  which is just 2D space, and the output of the transformation shown on the right. The reason I'm not showing the inputs move over to the outputs like I usually do is not  just animation laziness, it's worth emphasizing that 2D vector inputs are very different  animals from these 3D vector outputs, living in a completely

2D vector inputs are very different  animals from these 3D vector outputs, living in a completely separate, unconnected space. Encoding one of these transformations with a matrix is  really just the same thing as what we've done before. You look at where each basis vector lands, and write the  coordinates of the landing spots as the columns of a matrix. For example, what you're looking at here is an output of a transformation that takes  i-hat to the coordinates 2, negative 1, negative 2, and

an output of a transformation that takes  i-hat to the coordinates 2, negative 1, negative 2, and j-hat to the coordinates 0, 1, 1. Notice, this means the matrix encoding our transformation has three rows and two columns,  which, to use standard terminology, makes it a 3x2 matrix. In the language of last video, the column space of this matrix,  the place where all the vectors land, is a 2D plane slicing through the origin  of 3D space. But the matrix is still full rank, since the number of

slicing through the origin  of 3D space. But the matrix is still full rank, since the number of dimensions in this  column space is the same as the number of dimensions of the input space. So if you see a 3x2 matrix out in the wild, you can know that it has the geometric  interpretation of mapping two dimensions to three dimensions,  since the two columns indicate that the input space has two basis vectors,  and the three rows indicate that the landing spots for each of those basis vectors is

vectors,  and the three rows indicate that the landing spots for each of those basis vectors is  described with three separate coordinates. Likewise, if you see a 2x3 matrix with two rows and three columns,  what do you think that means? Well, the three columns indicate that you're starting in a space that has  three basis vectors, so we're starting in three dimensions,  and the two rows indicate that the landing spot for each of those three  basis vectors is described with only two

indicate that the landing spot for each of those three  basis vectors is described with only two coordinates,  so they must be landing in two dimensions. So it's a transformation from 3D space onto the 2D plane,  a transformation that should feel very uncomfortable if you imagine going through it. You could also have a transformation from two dimensions to one dimension. One-dimensional space is really just the number line,  so a transformation like this takes in 2D vectors and spits out

is really just the number line,  so a transformation like this takes in 2D vectors and spits out numbers. Thinking about grid lines remaining parallel and evenly spaced is a little bit  messy due to all of the squishification happening here, so in this case,  the visual understanding for what linearity means is that if you have a line of  evenly spaced dots, it would remain evenly spaced once they're mapped onto the  number line. One of these transformations is encoded with a 1x2 matrix,  each

mapped onto the  number line. One of these transformations is encoded with a 1x2 matrix,  each of whose two columns has just a single entry. The two columns represent where the basis vectors land,  and each one of those columns requires just one number,  the number that that basis vector landed on. This is actually a surprisingly meaningful type of transformation with  close ties to the dot product, and I'll be talking about that next video. Until then, I encourage you to play around with this

and I'll be talking about that next video. Until then, I encourage you to play around with this idea on your own,  contemplating the meanings of things like matrix multiplication and linear systems  of equations in the context of transformations between different dimensions. Have fun!

["Ode to Joy", by Beethoven, plays to the end of the piano.] Traditionally,  dot products are something that's introduced really early on in a linear algebra course,  typically right at the start. So it might seem strange that I've pushed them back this far in the series. I did this because there's a standard way to introduce the topic,  which requires nothing more than a basic understanding of vectors,  but a fuller understanding of the role that dot products play in math can only really be

vectors,  but a fuller understanding of the role that dot products play in math can only really be  found under the light of linear transformations. Before that, though, let me just briefly cover the standard way that dot products are  introduced, which I'm assuming is at least partially review for a number of viewers. Numerically, if you have two vectors of the same dimension,  two lists of numbers with the same lengths, taking their dot product means  pairing up all of the coordinates,

numbers with the same lengths, taking their dot product means  pairing up all of the coordinates, multiplying those pairs together,  and adding the result. So the vector 1, 2 dotted with 3, 4 would be 1 times 3 plus 2 times 4. The vector 6, 2, 8, 3 dotted with 1, 8, 5, 3 would be  6 times 1 plus 2 times 8 plus 8 times 5 plus 3 times 3. Luckily, this computation has a really nice geometric interpretation. To think about the dot product between two vectors, v and w,  imagine projecting w onto the

To think about the dot product between two vectors, v and w,  imagine projecting w onto the line that passes through the origin and the tip of v. Multiplying the length of this projection by the length of v,  you have the dot product v dot w. Except when this projection of w is pointing in the opposite direction from v,  that dot product will actually be negative. So when two vectors are generally pointing in the same direction,  their dot product is positive. When they're perpendicular,

pointing in the same direction,  their dot product is positive. When they're perpendicular, meaning the projection of one  onto the other is the zero vector, their dot product is zero. And if they point in generally the opposite direction, their dot product is negative. Now, this interpretation is weirdly asymmetric. It treats the two vectors very differently. So when I first learned this, I was surprised that order doesn't matter. You could instead project v onto w, multiply the length of  the

that order doesn't matter. You could instead project v onto w, multiply the length of  the projected v by the length of w, and get the same result. I mean, doesn't that feel like a really different process? Here's the intuition for why order doesn't matter. If v and w happened to have the same length, we could leverage some symmetry. Since projecting w onto v, then multiplying the length of that projection  by the length of v, is a complete mirror image of projecting v onto w,  then multiplying

by the length of v, is a complete mirror image of projecting v onto w,  then multiplying the length of that projection by the length of w. Now, if you scale one of them, say v, by some constant like 2,  so that they don't have equal length, the symmetry is broken. But let's think through how to interpret the dot product between this new vector,  2 times v, and w. If you think of w as getting projected onto v,  then the dot product 2v dot w will be exactly twice the dot product v dot w. This is

onto v,  then the dot product 2v dot w will be exactly twice the dot product v dot w. This is because when you scale v by 2, it doesn't change the length of the  projection of w, but it doubles the length of the vector that you're projecting onto. But on the other hand, let's say you were thinking about v getting projected onto w. Well, in that case, the length of the projection is the thing that gets scaled when we  multiply v by 2, but the length of the vector that you're projecting onto

that gets scaled when we  multiply v by 2, but the length of the vector that you're projecting onto stays constant. So the overall effect is still to just double the dot product. So even though symmetry is broken in this case,  the effect that this scaling has on the value of the dot product is the same  under both interpretations. There's also one other big question that confused me when I first learned this stuff. Why on earth does this numerical process of matching coordinates,  multiplying

learned this stuff. Why on earth does this numerical process of matching coordinates,  multiplying pairs, and adding them together have anything to do with projection? Well, to give a satisfactory answer, and also to do full justice to  the significance of the dot product, we need to unearth something a  little bit deeper going on here, which often goes by the name duality. But before getting into that, I need to spend some time talking about linear  transformations from multiple dimensions to

that, I need to spend some time talking about linear  transformations from multiple dimensions to one dimension, which is just the number line. These are functions that take in a 2D vector and spit out some number,  but linear transformations are of course much more restricted than  your run-of-the-mill function with a 2D input and a 1D output. As with transformations in higher dimensions, like the ones I talked about in chapter 3,  there are some formal properties that make these functions

the ones I talked about in chapter 3,  there are some formal properties that make these functions linear,  but I'm going to purposefully ignore those here so as to not distract from our end goal,  and instead focus on a certain visual property that's equivalent to all the formal stuff. If you take a line of evenly spaced dots and apply a transformation,  a linear transformation will keep those dots evenly spaced once  they land in the output space, which is the number line. Otherwise, if

dots evenly spaced once  they land in the output space, which is the number line. Otherwise, if there's some line of dots that gets unevenly spaced,  then your transformation is not linear. As with the cases we've seen before, one of these linear transformations is  completely determined by where it takes i-hat and j-hat,  but this time each one of those basis vectors just lands on a number,  so when we record where they land as the columns of a matrix,  each of those columns just has a single

when we record where they land as the columns of a matrix,  each of those columns just has a single number. This is a 1x2 matrix. Let's walk through an example of what it means  to apply one of these transformations to a vector. Let's say you have a linear transformation that takes i-hat to 1 and j-hat to negative 2. To follow where a vector with coordinates, say, 4, 3 ends up,  think of breaking up this vector as 4 times i-hat plus 3 times j-hat. A consequence of linearity is that after the

up this vector as 4 times i-hat plus 3 times j-hat. A consequence of linearity is that after the transformation,  the vector will be 4 times the place where i-hat lands, 1,  plus 3 times the place where j-hat lands, negative 2,  which in this case implies that it lands on negative 2. When you do this calculation purely numerically, it's matrix vector multiplication. Now, this numerical operation of multiplying a 1x2 matrix by  a vector feels just like taking the dot product of two vectors.

of multiplying a 1x2 matrix by  a vector feels just like taking the dot product of two vectors. Doesn't that 1x2 matrix just look like a vector that we tipped on its side? In fact, we could say right now that there's a nice association between 1x2 matrices  and 2D vectors, defined by tilting the numerical representation of a vector on its side  to get the associated matrix, or to tip the matrix back up to get the associated vector. Since we're just looking at numerical expressions right now,

back up to get the associated vector. Since we're just looking at numerical expressions right now,  going back and forth between vectors and 1x2 matrices might feel like a silly thing to do. But this suggests something that's truly awesome from the geometric view. There's some kind of connection between linear transformations  that take vectors to numbers and vectors themselves. Let me show an example that clarifies the significance,  and which just so happens to also answer the dot product

example that clarifies the significance,  and which just so happens to also answer the dot product puzzle from earlier. Unlearn what you have learned, and imagine that you don't  already know that the dot product relates to projection. What I'm going to do here is take a copy of the number line and place  it diagonally in space somehow, with the number 0 sitting at the origin. Now think of the two-dimensional unit vector whose  tip sits where the number 1 on the number is. I want to give that

unit vector whose  tip sits where the number 1 on the number is. I want to give that guy a name, u-hat. This little guy plays an important role in what's about to happen,  so just keep him in the back of your mind. If we project 2d vectors straight onto this diagonal number line,  in effect, we've just defined a function that takes 2d vectors to numbers. What's more, this function is actually linear,  since it passes our visual test that any line of evenly spaced dots remains evenly  spaced

linear,  since it passes our visual test that any line of evenly spaced dots remains evenly  spaced once it lands on the number line. Just to be clear, even though I've embedded the number line in 2d space like this,  the outputs of the function are numbers, not 2d vectors. You should think of a function that takes in two  coordinates and outputs a single coordinate. But that vector u-hat is a two-dimensional vector, living in the input space. It's just situated in such a way that overlaps with

vector, living in the input space. It's just situated in such a way that overlaps with the embedding of the number line. With this projection, we just defined a linear transformation from 2d vectors to numbers,  so we're going to be able to find some kind of 1x2 matrix that  describes that transformation. To find that 1x2 matrix, let's zoom in on this diagonal number  line setup and think about where i-hat and j-hat each land,  since those landing spots are going to be the columns of the

where i-hat and j-hat each land,  since those landing spots are going to be the columns of the matrix. This part's super cool. We can reason through it with a really elegant piece of symmetry. Since i-hat and u-hat are both unit vectors, projecting i-hat onto the line  passing through u-hat looks totally symmetric to projecting u-hat onto the x-axis. So when we ask what number does i-hat land on when it gets projected,  the answer is going to be the same as whatever u-hat lands on when it's

on when it gets projected,  the answer is going to be the same as whatever u-hat lands on when it's projected  onto the x-axis. But projecting u-hat onto the x-axis just means taking the x-coordinate of u-hat. So by symmetry, the number where i-hat lands when it's projected onto  that diagonal number line is going to be the x-coordinate of u-hat. Isn't that cool? The reasoning is almost identical for the j-hat case. Think about it for a moment. For all the same reasons, the y-coordinate of

for the j-hat case. Think about it for a moment. For all the same reasons, the y-coordinate of u-hat gives us the  number where j-hat lands when it's projected onto the number line copy. Pause and ponder that for a moment. I just think that's really cool. So the entries of the 1x2 matrix describing the projection  transformation are going to be the coordinates of u-hat. And computing this projection transformation for arbitrary vectors in space,  which requires multiplying that matrix by those

transformation for arbitrary vectors in space,  which requires multiplying that matrix by those vectors,  is computationally identical to taking a dot product with u-hat. This is why taking the dot product with a unit vector can be interpreted as  projecting a vector onto the span of that unit vector and taking the length. So what about non-unit vectors? For example, let's say we take that unit vector u-hat,  but we scale it up by a factor of 3. Numerically, each of its components gets

unit vector u-hat,  but we scale it up by a factor of 3. Numerically, each of its components gets multiplied by 3. So looking at the matrix associated with that vector,  it takes i-hat and j-hat to three times the values where they landed before. Since this is all linear, it implies more generally that the new matrix can be  interpreted as projecting any vector onto the number line copy and multiplying where it  lands by 3. This is why the dot product with a non-unit vector can be  interpreted

where it  lands by 3. This is why the dot product with a non-unit vector can be  interpreted as first projecting onto that vector,  then scaling up the length of that projection by the length of the vector. Take a moment to think about what happened here. We had a linear transformation from 2D space to the number line,  which was not defined in terms of numerical vectors or numerical dot products,  it was just defined by projecting space onto a diagonal copy of the number line. But because the

it was just defined by projecting space onto a diagonal copy of the number line. But because the transformation is linear, it was necessarily described by some 1x2 matrix. And since multiplying a 1x2 matrix by a 2D vector is the same  as turning that matrix on its side and taking a dot product,  this transformation was inescapably related to some 2D vector. The lesson here is that any time you have one of these linear transformations whose  output space is the number line, no matter how it was

one of these linear transformations whose  output space is the number line, no matter how it was defined,  there's going to be some unique vector v corresponding to that transformation,  in the sense that applying the transformation is the same thing as taking a dot  product with that vector. To me, this is utterly beautiful. It's an example of something in math called duality. Duality shows up in many different ways and forms throughout math,  and it's super tricky to actually define. Loosely

many different ways and forms throughout math,  and it's super tricky to actually define. Loosely speaking, it refers to situations where you have a natural  but surprising correspondence between two types of mathematical thing. For the linear algebra case that you just learned about,  you'd say that the dual of a vector is the linear transformation that it encodes,  and the dual of a linear transformation from some space to one dimension is a  certain vector in that space. So to sum up, on the

from some space to one dimension is a  certain vector in that space. So to sum up, on the surface, the dot product is a very useful  geometric tool for understanding projections and for testing  whether or not vectors tend to point in the same direction. And that's probably the most important thing for you to remember about the dot product. But at a deeper level, dotting two vectors together is a way  to translate one of them into the world of transformations. Again, numerically, this might

a way  to translate one of them into the world of transformations. Again, numerically, this might feel like a silly point to emphasize. It's just two computations that happen to look similar. But the reason I find this so important is that throughout math,  when you're dealing with a vector, once you really get to know its personality,  sometimes you realize that it's easier to understand it not as an arrow in space,  but as the physical embodiment of a linear transformation. It's as if the

as an arrow in space,  but as the physical embodiment of a linear transformation. It's as if the vector is really just a conceptual shorthand for a certain transformation,  since it's easier for us to think about arrows in space rather than  moving all of that space to the number line. In the next video, you'll see another really cool example of this duality in action,  as I talk about the cross product.

Last video I talked about the dot product, showing both the standard introduction  to the topic, as well as a deeper view of how it relates to linear transformations. I'd like to do the same thing for cross products,  which also have a standard introduction, along with a deeper understanding  in the light of linear transformations, but this time I'm dividing it into  two separate videos. Here, I'll try to hit the main points that students are usually shown  about the cross product, and in the

try to hit the main points that students are usually shown  about the cross product, and in the next video I'll be showing a view  which is less commonly taught, but really satisfying when you learn it. We'll start in two dimensions. If you have two vectors, v and w, think about the parallelogram that they span out. What I mean by that is that if you take a copy of v and move its tail to the tip of w,  and you take a copy of w and move its tail to the tip of v,  the four vectors now on the

tip of w,  and you take a copy of w and move its tail to the tip of v,  the four vectors now on the screen enclose a certain parallelogram. The cross product of v and w, written with the x-shaped multiplication symbol,  is the area of this parallelogram. Well, almost. We also need to consider orientation. Basically, if v is on the right of w, then v cross w  is positive and equal to the area of the parallelogram. But if v is on the left of w, then the cross product is negative,  namely the

of the parallelogram. But if v is on the left of w, then the cross product is negative,  namely the negative area of that parallelogram. Notice this means that order matters. If you swapped v and w, instead taking w cross v,  the cross product would become the negative of whatever it was before. The way I always remember the ordering here is that when you take the cross product  of the two basis vectors in order, i-hat cross j-hat, the result should be positive. In fact, the order of your basis

in order, i-hat cross j-hat, the result should be positive. In fact, the order of your basis vectors is what defines orientation. So since i-hat is on the right of j-hat, I remember that v  cross w has to be positive whenever v is on the right of w. So for example, with the vectors shown here, I'll just  tell you that the area of that parallelogram is seven. And since v is on the left of w, the cross product should be negative. So v cross w is negative seven. But of course, you want to be able

product should be negative. So v cross w is negative seven. But of course, you want to be able to compute this without someone telling you the area. This is where the determinant comes in. So if you didn't see chapter five of this series,  where I talk about the determinant, now would be a really good time to go take a look. Even if you did see it, but it was a while ago,  I'd recommend taking another look just to make sure those ideas are fresh in your mind. For the 2D cross product, v cross

look just to make sure those ideas are fresh in your mind. For the 2D cross product, v cross w, what you do is you write the coordinates  of v as the first column of a matrix, and you take the coordinates of w  and make them the second column, then you just compute the determinant. This is because a matrix whose columns represent v and w corresponds with a  linear transformation that moves the basis vectors i-hat and j-hat to v and w. The determinant is all about measuring how areas change due

vectors i-hat and j-hat to v and w. The determinant is all about measuring how areas change due to a transformation,  and the prototypical area that we look at is the unit square resting on i-hat and j-hat. After the transformation, that square gets turned  into the parallelogram that we care about. So the determinant, which generally measures the factor by which areas are changed,  gives the area of this parallelogram, since it evolved from a square that started with  area one. What's more, if

of this parallelogram, since it evolved from a square that started with  area one. What's more, if v is on the left of w, it means that orientation was flipped during  that transformation, which is what it means for the determinant to be negative. As an example, let's say v has coordinates negative 3, 1, and w has coordinates 2, 1. The determinant of the matrix with those coordinates as columns  is negative 3 times 1 minus 2 times 1, which is negative 5. So evidently, the area of the

columns  is negative 3 times 1 minus 2 times 1, which is negative 5. So evidently, the area of the parallelogram they define is 5,  and since v is on the left of w, it should make sense that this value is negative. As with any new operation you learn, I'd recommend playing  around with this notion a bit in your head, just to get kind  of an intuitive feel for what the cross product is all about. For example, you might notice that when two vectors are perpendicular,  or at least close to being

For example, you might notice that when two vectors are perpendicular,  or at least close to being perpendicular, their cross product is larger than  it would be if they were pointing in very similar directions,  because the area of that parallelogram is larger when the sides are closer to  being perpendicular. Something else you might notice is that if you were to scale up one of those vectors,  perhaps multiplying v by 3, then the area of that parallelogram  is also scaled up by a factor of

perhaps multiplying v by 3, then the area of that parallelogram  is also scaled up by a factor of 3. So what this means for the operation is that 3v  cross w will be exactly 3 times the value of v cross w. Now, even though all of this is a perfectly fine mathematical operation,  what I just described is technically not the cross product. The true cross product is something that combines  two different 3d vectors to get a new 3d vector. Just as before, we're still going to consider the

two different 3d vectors to get a new 3d vector. Just as before, we're still going to consider the parallelogram  defined by the two vectors that we're crossing together,  and the area of this parallelogram is still going to play a big role. To be concrete, let's say that the area is 2.5 for the vectors shown here. But as I said, the cross product is not a number, it's a vector. This new vector's length will be the area of that parallelogram,  which in this case is 2.5, and the direction of

length will be the area of that parallelogram,  which in this case is 2.5, and the direction of that new vector is going to be  perpendicular to the parallelogram. But which way, right? I mean, there are two possible vectors with length  2.5 that are perpendicular to a given plane. This is where the right hand rule comes in. Point the forefinger of your right hand in the direction of v,  then stick out your middle finger in the direction of w. Then, when you point up your thumb, that's the

stick out your middle finger in the direction of w. Then, when you point up your thumb, that's the direction of the cross product. For example, let's say that v was a vector with length 2 pointing straight up in  the z direction, and w is a vector with length 2 pointing in the pure y direction. The parallelogram that they define in this simple example is actually a square,  since they're perpendicular and have the same length, and the area of that square is 4. So their cross product should be a

and have the same length, and the area of that square is 4. So their cross product should be a vector with length 4. Using the right hand rule, their cross product should point in the negative x direction. So the cross product of these two vectors is negative 4 times i-hat. For more general computations, there is a formula that you could memorize if you wanted,  but it's common and easier to instead remember a certain  process involving the 3D determinant. Now, this process looks truly strange

remember a certain  process involving the 3D determinant. Now, this process looks truly strange at first. You write down a 3D matrix where the second and  third columns contain the coordinates of v and w. But for that first column, you write the basis vectors i-hat, j-hat, and k-hat. Then you compute the determinant of this matrix. The silliness is probably clear here. What on earth does it mean to put in a vector as the entry of a matrix? Students are often told that this is just a notational

to put in a vector as the entry of a matrix? Students are often told that this is just a notational trick. When you carry out the computations as if i-hat, j-hat, and k-hat were numbers,  then you get some linear combination of those basis vectors. And the vector defined by that linear combination, students are told to just believe,  is the unique vector perpendicular to v and w,  whose magnitude is the area of the appropriate parallelogram,  and whose direction obeys the right hand rule. And

is the area of the appropriate parallelogram,  and whose direction obeys the right hand rule. And sure, in some sense this is just a notational trick,  but there is a reason for doing it. It's not just a coincidence that the determinant is once again important. And putting the basis vectors in those slots is not just a random thing to do. To understand where all of this comes from, it helps to  use the idea of duality that I introduced in the last video. This concept is a little bit heavy

to  use the idea of duality that I introduced in the last video. This concept is a little bit heavy though, so I'm putting it in a  separate follow-on video for any of you who are curious to learn more. Arguably, it falls outside the essence of linear algebra. The important part here is to know what that cross  product vector geometrically represents. So if you want to skip that next video, feel free. But for those of you who are willing to go a bit deeper,  and who are curious about the

feel free. But for those of you who are willing to go a bit deeper,  and who are curious about the connection between this computation and the underlying  geometry, the ideas that I'll talk about in the next video are just a really  elegant piece of math.

Cross products in the light of linear transformations | Chapter 11, Essence of linear algebra

Hey folks, where we left off I was talking about how to compute  a three-dimensional cross product between two vectors, v cross w. It's this funny thing where you write a matrix whose second column has the  coordinates of v, whose third column has the coordinates of w,  but the entries of that first column, weirdly, are the symbols i-hat, j-hat,  and k-hat, where you just pretend like those guys are numbers for the sake  of computations. Then with that funky matrix in hand, you compute its

are numbers for the sake  of computations. Then with that funky matrix in hand, you compute its determinant. If you just chug along with those computations, ignoring the weirdness,  you get some constant times i-hat, plus some constant times j-hat,  plus some constant times k-hat. How specifically you think about computing that determinant is kind of beside the point. All that really matters here is that you'll end up with three different  numbers that are interpreted as the coordinates of some

is that you'll end up with three different  numbers that are interpreted as the coordinates of some resulting vector. From here, students are typically told to just believe that  the resulting vector has the following geometric properties. Its length equals the area of the parallelogram defined by v and w. It points in a direction perpendicular to both v and w,  and this direction obeys the right-hand rule, in the sense that if  you point your forefinger along v and your middle finger along w,

rule, in the sense that if  you point your forefinger along v and your middle finger along w,  then when you stick up your thumb, it'll point in the direction of the new vector. There are some brute force computations that you could do to confirm these facts,  but I want to share with you a really elegant line of reasoning. It leverages a bit of background, though, so for this video  I'm assuming that everybody has watched chapter 5 on the determinant and chapter 7,  where I introduced the idea

that everybody has watched chapter 5 on the determinant and chapter 7,  where I introduced the idea of duality. As a quick reminder, the idea of duality is that any time you have a  linear transformation from some space to the number line,  it's associated with a unique vector in that space,  in the sense that performing the linear transformation is the same as  taking a dot product with that vector. Numerically, this is because one of those transformations is described by a matrix with  just

Numerically, this is because one of those transformations is described by a matrix with  just one row, where each column tells you the number that each basis vector lands on. And multiplying this matrix by some vector v is computationally identical to taking  the dot product between v and the vector you get by turning that matrix on its side. The takeaway is that whenever you're out in the mathematical wild and you find  a linear transformation to the number line, you will be able to match it

wild and you find  a linear transformation to the number line, you will be able to match it to some vector,  which is called the dual vector of that transformation,  so that performing the linear transformation is the same as taking a dot product  with that vector. The cross product gives us a really slick example of this process in action. It takes some effort, but it's definitely worth it. What I'm going to do is define a certain linear transformation from three dimensions  to the number

What I'm going to do is define a certain linear transformation from three dimensions  to the number line, and it'll be defined in terms of the two vectors v and w. Then when we associate that transformation with its dual vector in 3D space,  that dual vector is going to be the cross product of v and w. The reason for doing this will be that understanding that transformation is going to  make clear the connection between the computation and the geometry of the cross product. So to back up a bit,

the connection between the computation and the geometry of the cross product. So to back up a bit, remember in two dimensions what  it meant to compute the 2D version of the cross product? When you have two vectors v and w, you put the coordinates of v as the first  column of a matrix and the coordinates of w as the second column of a matrix. Then you just compute the determinant. There's no nonsense with basis vectors stuck in a matrix or anything like that,  just an ordinary determinant

nonsense with basis vectors stuck in a matrix or anything like that,  just an ordinary determinant returning a number. Geometrically, this gives us the area of a parallelogram spanned out by those two  vectors, with the possibility of being negative depending on the orientation of the  vectors. Now, if you didn't already know the 3D cross product and you're trying to extrapolate,  you might imagine that it involves taking three separate 3D vectors,  u, v, and w, and making their coordinates the

that it involves taking three separate 3D vectors,  u, v, and w, and making their coordinates the columns of a 3x3 matrix,  then computing the determinant of that matrix. And as you know from chapter 5, geometrically this would give you the volume  of a parallelepiped spanned out by those three vectors,  with a plus or minus sign depending on the right hand rule orientation of  those three vectors. Of course, you all know that this is not the 3D cross product. The actual 3D cross product takes

Of course, you all know that this is not the 3D cross product. The actual 3D cross product takes in two vectors and spits out a vector. It doesn't take in three vectors and spit out a number. But this idea actually gets us really close to what the real cross product is. Consider that first vector u to be a variable,  say with variable entries x, y, and z, while v and w remain fixed. What we have then is a function from three dimensions to the number line. You input some vector x, y, z and you

then is a function from three dimensions to the number line. You input some vector x, y, z and you get out a number by taking  the determinant of a matrix whose first column is x, y,  z and whose other two columns are the coordinates of the constant vectors v and w. Geometrically, the meaning of this function is that for any input vector x,  y, z, you consider the parallelepiped defined by this vector v and w. Then you return its volume with a plus or minus sign depending on orientation. Now,

vector v and w. Then you return its volume with a plus or minus sign depending on orientation. Now, this might feel like kind of a random thing to do. I mean, where does this function come from? Why are we defining it this way? And I'll admit, at this stage it might kind of feel like it's coming out of the blue. But if you're willing to go along with it and play around with the  properties that this guy has, it's the key to understanding the cross product. One really important fact about this

this guy has, it's the key to understanding the cross product. One really important fact about this function is that it's linear. I'll actually leave it to you to work through the details  of why this is true based on properties of the determinant. But once you know that it's linear, we can start bringing in the idea of duality. Once you know that it's linear, you know that there's some  way to describe this function as matrix multiplication. Specifically, since it's a function that goes from

describe this function as matrix multiplication. Specifically, since it's a function that goes from three dimensions to one dimension,  there will be a one by three matrix that encodes this transformation. And the whole idea of duality is that the special thing about transformations from  several dimensions to one dimension is that you can turn that matrix on its side and  instead interpret the entire transformation as the dot product with a certain vector. What we're looking for is the special

transformation as the dot product with a certain vector. What we're looking for is the special 3D vector that I'll call p such that taking  the dot product between p and any other vector x, y,  z gives the same result as plugging in x, y, z as the first column of a three  by three matrix whose other two columns have the coordinates of v and w,  then computing the determinant. I'll get to the geometry of this in just a moment,  but right now let's dig in and think about what this means

the geometry of this in just a moment,  but right now let's dig in and think about what this means computationally. Taking the dot product between p and x, y, z will give us something times x plus  something times y plus something times z, where those somethings are the coordinates of p. But on the right side here, when you compute the determinant,  you can organize it to look like some constant times x plus some constant times y  plus some constant times z, where those constants involve

times x plus some constant times y  plus some constant times z, where those constants involve certain combinations of  the components of v and w. So those constants, those particular combinations of the coordinates of v  and w are going to be the coordinates of the vector p that we're looking for. But what's going on on the right here should feel very familiar to  anyone who's actually worked through a cross product computation. Collecting the constant terms that are multiplied by x, y,  and by

a cross product computation. Collecting the constant terms that are multiplied by x, y,  and by z like this is no different from plugging in the symbols i-hat, j-hat,  and k-hat to that first column, and seeing which coefficients aggregate on each  one of those terms. It's just that plugging in i-hat, j-hat, and k-hat is a way of signaling  that we should interpret those coefficients as the coordinates of a vector. So what all of this is saying is that this funky computation  can be thought of

of a vector. So what all of this is saying is that this funky computation  can be thought of as a way to answer the following question. What vector p has the special property that when you take a dot  product between p and some vector x, y, z, it gives the same result as plugging in x,  y, z to the first column of a matrix whose other two columns have  the coordinates of v and w, then computing the determinant. That's a bit of a mouthful, but it's an important question to digest for this video.

determinant. That's a bit of a mouthful, but it's an important question to digest for this video. Now for the cool part, which ties all this together with the geometric  understanding of the cross product that I introduced last video. I'm going to ask the same question again, but this time we're  going to try to answer it geometrically instead of computationally. What 3D vector p has the special property that when you take a dot product between  p and some other vector x, y, z, it gives the

property that when you take a dot product between  p and some other vector x, y, z, it gives the same result as if you took the signed  volume of a parallelepiped defined by this vector x, y, z along with v and w. Remember, the geometric interpretation of a dot product between a  vector p and some other vector is to project that other vector onto p,  then to multiply the length of that projection by the length of p. With that in mind, let me show a certain way to think  about the volume of the

by the length of p. With that in mind, let me show a certain way to think  about the volume of the parallelepiped that we care about. Start by taking the area of the parallelogram defined by v and w,  then multiply it not by the length of x, y, z, but by the component of x,  y, z that's perpendicular to that parallelogram. In other words, the way our linear function works on a given vector is to project  that vector onto a line that's perpendicular to both v and w,  then to multiply the length

project  that vector onto a line that's perpendicular to both v and w,  then to multiply the length of that projection by the area of the parallelogram  spanned by v and w. But this is the same thing as taking a dot product between x, y,  z and a vector that's perpendicular to v and w with a length equal to the area of  that parallelogram. What's more, if you choose the appropriate direction for that vector,  the cases where the dot product is negative will line up with the cases  where the

that vector,  the cases where the dot product is negative will line up with the cases  where the right hand rule for the orientation of x, y, z, v and w is negative. This means that we just found a vector p so that taking a dot product  between p and some vector x, y, z is the same thing as computing that  determinant of a 3x3 matrix whose columns are x, y, z, the coordinates of v and w. So the answer that we found earlier computationally using that  special notational trick must correspond

answer that we found earlier computationally using that  special notational trick must correspond geometrically to this vector. This is the fundamental reason why the computation and the  geometric interpretation of the cross product are related. Just to sum up what happened here, I started by defining a linear transformation  from 3D space to the number line, and it was defined in terms of the vectors v and w. Then I went through two separate ways to think about the dual vector  of this

the vectors v and w. Then I went through two separate ways to think about the dual vector  of this transformation, the vector such that applying the transformation  is the same thing as taking a dot product with that vector. On the one hand, a computational approach will lead you to  the trick of plugging in the symbols i-hat, j-hat,  and k-hat to the first column of a matrix and computing the determinant. But thinking geometrically, we can deduce that this dual vector  must be perpendicular to

But thinking geometrically, we can deduce that this dual vector  must be perpendicular to v and w with a length equal to the  area of the parallelogram spanned out by those two vectors. Since both of these approaches give us a dual vector to the same transformation,  they must be the same vector. So that wraps up dot products and cross products,  and the next video will be a really important concept for linear algebra, change of basis.

Cramer's rule, explained geometrically | Chapter 12, Essence of linear algebra

In a previous video I've talked about linear systems of equations,  and I sort of brushed aside the discussion of actually computing solutions to  these systems. And while it's true that number crunching is typically something we  leave to the computers, digging into some of these computational  methods is a good litmus test for whether or not you actually understand what's going on,  since that's really where the rubber meets the road. Here I want to describe the geometry behind a certain

really where the rubber meets the road. Here I want to describe the geometry behind a certain method  for computing solutions to these systems, known as Cramer's rule. The relevant background here is understanding determinants,  a little bit of dot products, and of course linear systems of equations,  so be sure to watch the relevant videos on those topics if you're unfamiliar or rusty. But first I should say up front that this Cramer's rule is not  actually the best way for computing solutions

I should say up front that this Cramer's rule is not  actually the best way for computing solutions to linear systems of equations,  Gaussian elimination for example will always be faster. So why learn it? Well think of it as a sort of cultural excursion. It's a helpful exercise in deepening your knowledge of the theory behind these systems. Wrapping your mind around this concept is going to help consolidate ideas from linear  algebra, like the determinant and linear systems, by seeing how they

consolidate ideas from linear  algebra, like the determinant and linear systems, by seeing how they relate to each other. Also from a purely artistic standpoint the ultimate result here is just  really pretty to think about, way more so than Gaussian elimination. Alright so the setup here will be some linear system of equations,  say with two unknowns x and y and two equations. In principle everything we're talking about will also work for systems  with larger number of unknowns and the same

we're talking about will also work for systems  with larger number of unknowns and the same number of equations,  but for simplicity a smaller example is just nicer to hold in our heads. So as I talked about in a previous video you can think of this setup  geometrically as a certain known matrix transforming an unknown vector x y  where you know what the output is going to be, in this case negative 4 negative 2. Remember the columns of this matrix are telling you how that matrix acts as a

4 negative 2. Remember the columns of this matrix are telling you how that matrix acts as a transform,  each one telling you where the basis vectors of the input space land. So what we have is a sort of puzzle, which input vector  x y is going to land on this output negative 4 negative 2. One way to think about our little puzzle here is that we know the given  output vector is some linear combination of the columns of the matrix x  times the vector where i hat lands plus y times the vector

of the columns of the matrix x  times the vector where i hat lands plus y times the vector where j hat lands,  but what we want is to figure out what exactly that linear combination should be. Remember the type of answer you get here can depend on whether or not the transformation  squishes all of space into a lower dimension, that is if it has a zero determinant. In that case either none of the inputs land on our given output,  or there's a whole bunch of inputs landing on that output. But for

land on our given output,  or there's a whole bunch of inputs landing on that output. But for this video we'll limit our view to the case of a non-zero determinant,  meaning the outputs of this transformation still span the  full in-dimensional space that it started in. Every input lands on one and only one output, and every output has one and only one input. As a first pass let me show you an idea that's wrong but in the right direction. The x coordinate of this mystery input vector is what

idea that's wrong but in the right direction. The x coordinate of this mystery input vector is what you  get by taking its dot product with the first basis vector 1 0. Likewise the y coordinate is what you get by dotting it with the second basis vector 0 1. So maybe you hope that after the transformation the dot products with  the transformed version of the mystery vector with the transformed  version of the basis vectors will also be these coordinates x and y. That'd be fantastic because we

version of the basis vectors will also be these coordinates x and y. That'd be fantastic because we know what the transformed  version of each of those vectors are. There's just one problem with it, it's not at all true. For most linear transformations the dot product before  and after the transformation will look very different. For example, you could have two vectors generally pointing in the same direction  with a positive dot product, which get pulled apart from each other during the

the same direction  with a positive dot product, which get pulled apart from each other during the  transformation in such a way that they end up having a negative dot product. Likewise things that start off perpendicular with dot product 0,  like the two basis vectors, quite often don't stay perpendicular to each  other after the transformation, that is they don't preserve that 0 dot product. And looking at the example I just showed dot products certainly aren't preserved,  they tend to get

And looking at the example I just showed dot products certainly aren't preserved,  they tend to get bigger since most vectors are getting stretched out. In fact, worthwhile side note here, transformations which do preserve dot  products are special enough to have their own name, orthonormal transformations. These are the ones that leave all of the basis vectors  perpendicular to each other and still with unit lengths. You often think of these as the rotation matrices,  they correspond to rigid

with unit lengths. You often think of these as the rotation matrices,  they correspond to rigid motion with no stretching or squishing or morphing. Solving a linear system with an orthonormal matrix is actually super easy. Because dot products are preserved, taking the dot product between the  output vector and all the columns of your matrix will be the same as taking  the dot product between the mystery input vector and all of the basis vectors,  which is the same as just finding the

the mystery input vector and all of the basis vectors,  which is the same as just finding the coordinates of that mystery input. So in that very special case, x would be the dot product of the first column with the  output vector, and y would be the dot product of the second column with the output vector. Why am I bringing this up when this idea breaks down for almost all linear systems? Well, it points us in a direction of something to look for. Is there an alternate geometric understanding

it points us in a direction of something to look for. Is there an alternate geometric understanding for the coordinates  of our input vector that remains unchanged after the transformation? If your mind has been mulling over determinants,  you might think of the following clever idea. Take the parallelogram defined by the first basis  vector i-hat and the mystery input vector xy. The area of this parallelogram is the base, 1,  times the height perpendicular to that base, which is the

of this parallelogram is the base, 1,  times the height perpendicular to that base, which is the y-coordinate  of that input vector. So the area of that parallelogram is a sort of screwy  roundabout way to describe the vector's y-coordinate. It's a wacky way to talk about coordinates, but run with me. And actually, to be a little more accurate, you should think of this as the  signed area of that parallelogram, in the sense described in the determinant video. That way, a vector with a negative

parallelogram, in the sense described in the determinant video. That way, a vector with a negative y-coordinate would correspond to a  negative area for this parallelogram, at least if you think of i-hat as in  some sense being the first out of these two vectors defining the parallelogram. And symmetrically, if you look at the parallelogram spanned  by our mystery input vector and the second basis, j-hat,  its area is going to be the x-coordinate of that mystery vector. Again, it's a strange

j-hat,  its area is going to be the x-coordinate of that mystery vector. Again, it's a strange way to represent the x-coordinate,  but see what it buys us in a moment. And just to make sure it's clear how this might generalize,  let's look in three dimensions. Ordinarily, the way you might think about one of a vector's coordinates,  say its z-coordinate, would be to take its dot product with  the third standard basis vector, often called k-hat. But an alternate geometric interpretation would be

third standard basis vector, often called k-hat. But an alternate geometric interpretation would be to consider the  parallelepiped that it creates with the other two basis vectors, i-hat and j-hat. If you think of the square with area 1 spanned by i-hat and  j-hat as the base of this whole shape, then its volume is the same as its height,  which is the third coordinate of our vector. And likewise, the wacky way to think about the other coordinates of the vector  would be to form a

And likewise, the wacky way to think about the other coordinates of the vector  would be to form a parallelepiped using the vector and then all of the basis  vectors other than the one corresponding to the direction you're looking for. Then the volume of this gives you the coordinate. Or rather, we should be talking about the signed volume of parallelepiped  in the sense described in the determinant video using the right-hand rule. So the order in which you list these three vectors matters.

video using the right-hand rule. So the order in which you list these three vectors matters. That way, negative coordinates still make sense. Okay, so why think of coordinates as areas and volumes like this? Well, as you apply some sort of matrix transformation, the areas of these parallelograms,  well, they don't stay the same, they might get scaled up or down. But, and this is the key idea of determinants,  all of the areas get scaled by the same amount,  namely the determinant of our

of determinants,  all of the areas get scaled by the same amount,  namely the determinant of our transformation matrix. For example, if you look at the parallelogram spanned by the vector  where your first basis vector lands, which is the first column of the matrix,  and the transformed version of xy, what is its area? Well, this is the transformed version of the parallelogram we were looking at earlier,  the one whose area was the y-coordinate of the mystery input vector. So its area is just

earlier,  the one whose area was the y-coordinate of the mystery input vector. So its area is just going to be the determinant of  the transformation multiplied by that y-coordinate. So that means we can solve for y by taking the area of this new parallelogram  in the output space divided by the determinant of the full transformation. And how do you get that area? Well, we know the coordinates for where the mystery input vector lands,  that's the whole point of a linear system of equations. So

where the mystery input vector lands,  that's the whole point of a linear system of equations. So what you might do is create a new matrix whose first column is the same as that of our  matrix, but whose second column is the output vector, and then you take its determinant. So look at that, just using data from the output of the transformation,  namely the columns of the matrix and the coordinates of our output vector,  we can recover the y-coordinate of the mystery input vector,  which is

of our output vector,  we can recover the y-coordinate of the mystery input vector,  which is halfway to solving the system. Likewise, the same idea can give us the x-coordinate. Look at the parallelogram we defined earlier, which encodes the  x-coordinate of the mystery input vector spanned by that vector and j-hat. The transformed version of this guy is spanned by the output vector and the second column  of the matrix, and its area will have been multiplied by the determinant of that matrix.

column  of the matrix, and its area will have been multiplied by the determinant of that matrix. So to solve for x, you can take this new area  divided by the determinant of the full transformation. And similar to what we did before, you can compute the area of that  output parallelogram by creating a new matrix whose first column is the  output vector and whose second column is the same as the original matrix. So again, just using data from the output space,  the numbers we see in our original

matrix. So again, just using data from the output space,  the numbers we see in our original linear system, we can solve for what x must be. This formula for finding the solutions to a linear  system of equations is known as Cramer's rule. Here, just to sanity check ourselves, plug in some numbers here. The determinant of that top altered matrix is 4 plus 2, which is 6,  and the bottom determinant is 2, so the x-coordinate should be 3. And indeed, looking back at the input vector we started

is 2, so the x-coordinate should be 3. And indeed, looking back at the input vector we started with, the x-coordinate is 3. Likewise, Cramer's rule suggests that the y-coordinate should be 4 divided by 2,  or 2, and that is in fact the y-coordinate of the input vector we were starting with. The case with three dimensions or more is similar,  and I highly recommend you take a moment to pause and think through it yourself. Here, I'll give you a little bit of momentum. What we have is a known

think through it yourself. Here, I'll give you a little bit of momentum. What we have is a known transformation given by some 3x3 matrix  and a known output vector given by the right side of our linear system,  and we want to know what input lands on that output. And if you think of, say, the z-coordinate of that input vector as the volume of  that special parallelepiped we were looking at earlier, spanned by i-hat, j-hat,  and the mystery input vector, what happens to that volume after the

spanned by i-hat, j-hat,  and the mystery input vector, what happens to that volume after the transformation? And what are the various ways you can compute that volume? Really, pause and take a moment to think through the details  of generalizing this to higher dimensions, finding an expression  for each coordinate of the solution to a larger linear system. Thinking through more general cases like this and convincing yourself that it  works and why it works is where all the learning really

like this and convincing yourself that it  works and why it works is where all the learning really happens,  much more so than listening to some dude on YouTube walk you through the same  reasoning again.

If I have a vector sitting here in 2D space, we  have a standard way to describe it with coordinates. In this case, the vector has coordinates 3, 2,  which means going from its tail to its tip involves moving three units to  the right and two units up. Now, the more linear algebra-oriented way to describe coordinates is to think  of each of these numbers as a scalar, a thing that stretches or squishes vectors. You think of that first coordinate as scaling i-hat,  the vector with length 1

or squishes vectors. You think of that first coordinate as scaling i-hat,  the vector with length 1 pointing to the right,  while the second coordinate scales j-hat, the vector with length 1 pointing straight up. The tip-to-tail sum of those two scaled vectors  is what the coordinates are meant to describe. You can think of these two special vectors as encapsulating  all of the implicit assumptions of our coordinate system. The fact that the first number indicates rightward motion,  that the

of our coordinate system. The fact that the first number indicates rightward motion,  that the second one indicates upward motion, exactly how far a unit of distance is,  all of that is tied up in the choice of i-hat and j-hat as the  vectors which are scalar coordinates are meant to actually scale. Any way to translate between vectors and sets of numbers is called a coordinate system,  and the two special vectors i-hat and j-hat are called the basis  vectors of our standard coordinate system.

special vectors i-hat and j-hat are called the basis  vectors of our standard coordinate system. What I'd like to talk about here is the idea of using a different set of basis vectors. For example, let's say you have a friend, Jennifer,  who uses a different set of basis vectors, which I'll call b1 and b2. Her first basis vector, b1, points up and to the right a little bit,  and her second vector, b2, points left and up. Now take another look at that vector that I showed earlier,  the one that

b2, points left and up. Now take another look at that vector that I showed earlier,  the one that you and I would describe using the coordinates 3,2,  using our basis vectors i-hat and j-hat. Jennifer would actually describe this vector with the coordinates 5 thirds and 1 third. What this means is that the particular way to get to that vector using her two basis  vectors is to scale b1 by 5 thirds, scale b2 by 1 third, then add them both together. In a little bit, I'll show you how you could

scale b2 by 1 third, then add them both together. In a little bit, I'll show you how you could have figured out those two numbers,  5 thirds and 1 third. In general, whenever Jennifer uses coordinates to describe a vector,  she thinks of her first coordinate as scaling b1,  the second coordinate as scaling b2, and she adds the results. What she gets will typically be completely different from the  vector that you and I would think of as having those coordinates. To be a little more precise

the  vector that you and I would think of as having those coordinates. To be a little more precise about the setup here, her first basis vector,  b1, is something that we would describe with the coordinates 2,1,  and her second basis vector, b2, is something that we would describe as negative 1,1. But it's important to realize from her perspective in her system,  those vectors have coordinates 1,0 and 0,1. They are what define the meaning of the coordinates 1,0 and 0,1 in her world. So in

1,0 and 0,1. They are what define the meaning of the coordinates 1,0 and 0,1 in her world. So in effect, we're speaking different languages. We're all looking at the same vectors in space,  but Jennifer uses different words and numbers to describe them. Let me say a quick word about how I'm representing things here. When I animate 2D space, I typically use this square grid. But that grid is just a construct, a way to visualize our coordinate system,  and so it depends on our choice of basis.

a construct, a way to visualize our coordinate system,  and so it depends on our choice of basis. Space itself has no intrinsic grid. Jennifer might draw her own grid, which would be an equally made up construct meant  as nothing more than a visual tool to help follow the meaning of her coordinates. Her origin though would actually line up with ours,  since everybody agrees on what the coordinates 0,0 should mean. It's the thing that you get when you scale any vector by 0. But the direction of

0,0 should mean. It's the thing that you get when you scale any vector by 0. But the direction of her axes and the spacing of her grid lines will be different,  depending on her choice of basis vectors. So after all this is set up, a pretty natural question  to ask is how we translate between coordinate systems. If for example, Jennifer describes a vector with coordinates negative 1,2,  what would that be in our coordinate system? How do you translate from her language to ours? Well, what her

that be in our coordinate system? How do you translate from her language to ours? Well, what her coordinates are saying is that  this vector is negative 1 times b1 plus 2 times b2. And from our perspective, b1 has coordinates 2,1, and b2 has coordinates negative 1,1. So we can actually compute negative 1 times b1 plus 2  times b2 as they're represented in our coordinate system. And working this out, you get a vector with coordinates negative 4,1. So that's how we would describe the vector that

you get a vector with coordinates negative 4,1. So that's how we would describe the vector that she thinks of as negative 1,2. This process here of scaling each of her basis vectors by the corresponding  coordinates of some vector, then adding them together, might feel somewhat familiar. It's matrix-vector multiplication, with a matrix whose  columns represent Jennifer's basis vectors in our language. In fact, once you understand matrix-vector multiplication as applying a certain linear

language. In fact, once you understand matrix-vector multiplication as applying a certain linear  transformation, say by watching what I view to be the most important video in this  series, chapter 3, there's a pretty intuitive way to think about what's going on here. A matrix whose columns represent Jennifer's basis vectors can be  thought of as a transformation that moves our basis vectors,  i-hat and j-hat, the things we think of when we say 1,0 and 0,1,  to Jennifer's basis vectors, the

i-hat and j-hat, the things we think of when we say 1,0 and 0,1,  to Jennifer's basis vectors, the things she thinks of when she says 1,0 and 0,1. To show how this works, let's walk through what it would mean to take the vector  that we think of as having coordinates negative 1,2 and applying that transformation. Before the linear transformation, we're thinking of this vector as a certain  linear combination of our basis vectors, negative 1 times i-hat plus 2 times j-hat. And the key feature

combination of our basis vectors, negative 1 times i-hat plus 2 times j-hat. And the key feature of a linear transformation is that the resulting vector  will be that same linear combination but of the new basis vectors,  negative 1 times the place where i-hat lands plus 2 times the place where j-hat lands. So what this matrix does is transform our misconception of what  Jennifer means into the actual vector that she's referring to. I remember that when I was first learning this, it always felt

vector that she's referring to. I remember that when I was first learning this, it always felt kind of backwards to me. Geometrically, this matrix transforms our grid into Jennifer's grid,  but numerically, it's translating a vector described in her language to our language. What made it finally click for me was thinking about how it takes our  misconception of what Jennifer means, the vector we get using the same  coordinates but in our system, then it transforms it into the vector that she

get using the same  coordinates but in our system, then it transforms it into the vector that she  really meant. What about going the other way around? In the example I used earlier this video, when I had the vector with coordinates 3,  2 in our system, how did I compute that it would have coordinates  5 thirds and 1 third in Jennifer's system? You start with that change of basis matrix that translates Jennifer's language into ours,  then you take its inverse. Remember, the inverse of a

translates Jennifer's language into ours,  then you take its inverse. Remember, the inverse of a transformation is a new transformation  that corresponds to playing that first one backwards. In practice, especially when you're working in more than two dimensions,  you'd use a computer to compute the matrix that actually represents this inverse. In this case, the inverse of the change of basis matrix that  has Jennifer's basis as its columns ends up working out to have columns 1 third,  negative

that  has Jennifer's basis as its columns ends up working out to have columns 1 third,  negative 1 third, and 1 third, 2 thirds. So, for example, to see what the vector 3, 2 looks like in Jennifer's system,  we multiply this inverse change of basis matrix by the vector 3,  2, which works out to be 5 thirds, 1 third. So that, in a nutshell, is how to translate the description of  individual vectors back and forth between coordinate systems. The matrix whose columns represent Jennifer's basis

back and forth between coordinate systems. The matrix whose columns represent Jennifer's basis vectors but written  in our coordinates translates vectors from her language into our language. And the inverse matrix does the opposite. But vectors aren't the only thing that we describe using coordinates. For this next part, it's important that you're all comfortable  representing transformations with matrices and that you know how  matrix multiplication corresponds to composing successive

with matrices and that you know how  matrix multiplication corresponds to composing successive transformations. Definitely pause and take a look at chapters 3 and 4 if any of that feels uneasy. Consider some linear transformation, like a 90 degree counterclockwise rotation. When you and I represent this with a matrix, we  follow where the basis vectors i-hat and j-hat each go. i-hat ends up at the spot with coordinates 0, 1,  and j-hat ends up at the spot with coordinates negative 1, 0. So

the spot with coordinates 0, 1,  and j-hat ends up at the spot with coordinates negative 1, 0. So those coordinates become the columns of our matrix. But this representation is heavily tied up in our choice of basis vectors,  from the fact that we're following i-hat and j-hat in the first place to  the fact that we're recording their landing spots in our own coordinate system. How would Jennifer describe this same 90 degree rotation of space? You might be tempted to just translate the columns

describe this same 90 degree rotation of space? You might be tempted to just translate the columns  of our rotation matrix into Jennifer's language. But that's not quite right. Those columns represent where our basis vectors i-hat and j-hat go. But the matrix that Jennifer wants should represent where her basis vectors land,  and it needs to describe those landing spots in her language. Here's a common way to think of how this is done. Start with any vector written in Jennifer's language.

a common way to think of how this is done. Start with any vector written in Jennifer's language. Rather than trying to follow what happens to it in terms of her language,  first we're going to translate it into our language using the change of basis matrix,  the one whose columns represent her basis vectors in our language. This gives us the same vector but now written in our language. Then apply the transformation matrix to what you get by multiplying it on the left. This tells us where that

the transformation matrix to what you get by multiplying it on the left. This tells us where that vector lands, but still in our language. So as a last step, apply the inverse change of basis matrix,  multiplied on the left as usual, to get the transformed vector but now in  Jennifer's language. Since we could do this with any vector written in her language,  first applying the change of basis, then the transformation,  then the inverse change of basis, that composition of three matrices gives

the transformation,  then the inverse change of basis, that composition of three matrices gives us the  transformation matrix in Jennifer's language. It takes in a vector of her language and spits out  the transformed version of that vector in her language. For this specific example, when Jennifer's basis vectors look like 2,  1 and negative 1, 1 in our language, and when the transformation is a 90 degree rotation,  the product of these three matrices, if you work through it, has columns 1

a 90 degree rotation,  the product of these three matrices, if you work through it, has columns 1 third,  5 thirds, and negative 2 thirds, negative 1 third. So if Jennifer multiplies that matrix by the coordinates of a vector in her system,  it will return the 90 degree rotated version of that vector expressed in her coordinate  system. In general, whenever you see an expression like A inverse times M times A,  it suggests a mathematical sort of empathy. That middle matrix represents a

times M times A,  it suggests a mathematical sort of empathy. That middle matrix represents a transformation of some kind as you see it,  and the outer two matrices represent the empathy, the shift in perspective. And the full matrix product represents that same  transformation but as someone else sees it. For those of you wondering why we care about alternate coordinate systems,  the next video on eigenvectors and eigenvalues will give a really important example  of this.

Eigenvectors and eigenvalues | Chapter 14, Essence of linear algebra

Eigenvectors and eigenvalues is one of those topics  that a lot of students find particularly unintuitive. Questions like, why are we doing this and what does this actually mean,  are too often left just floating away in an unanswered sea of computations. And as I've put out the videos of this series,  a lot of you have commented about looking forward to visualizing this topic in particular. I suspect that the reason for this is not so much that  eigenthings are particularly complicated or

I suspect that the reason for this is not so much that  eigenthings are particularly complicated or poorly explained. In fact, it's comparatively straightforward, and  I think most books do a fine job explaining it. The issue is that it only really makes sense if you have a  solid visual understanding for many of the topics that precede it. Most important here is that you know how to think about matrices as  linear transformations, but you also need to be comfortable with things  like

about matrices as  linear transformations, but you also need to be comfortable with things  like determinants, linear systems of equations, and change of basis. Confusion about eigenstuffs usually has more to do with a shaky foundation in  one of these topics than it does with eigenvectors and eigenvalues themselves. To start, consider some linear transformation in two dimensions, like the one shown here. It moves the basis vector i-hat to the coordinates 3, 0, and j-hat to 1, 2. So it's

one shown here. It moves the basis vector i-hat to the coordinates 3, 0, and j-hat to 1, 2. So it's represented with a matrix whose columns are 3, 0, and 1, 2. Focus in on what it does to one particular vector,  and think about the span of that vector, the line passing through its origin and its tip. Most vectors are going to get knocked off their span during the transformation. I mean, it would seem pretty coincidental if the place where  the vector landed also happened to be somewhere on that

pretty coincidental if the place where  the vector landed also happened to be somewhere on that line. But some special vectors do remain on their own span,  meaning the effect that the matrix has on such a vector is just to stretch it or  squish it, like a scalar. For this specific example, the basis vector i-hat is one such special vector. The span of i-hat is the x-axis, and from the first column of the matrix,  we can see that i-hat moves over to 3 times itself, still on that x-axis. What's

of the matrix,  we can see that i-hat moves over to 3 times itself, still on that x-axis. What's more, because of the way linear transformations work,  any other vector on the x-axis is also just stretched by a factor of 3,  and hence remains on its own span. A slightly sneakier vector that remains on its own  span during this transformation is negative 1, 1. It ends up getting stretched by a factor of 2. And again, linearity is going to imply that any other vector on the diagonal  line spanned

of 2. And again, linearity is going to imply that any other vector on the diagonal  line spanned by this guy is just going to get stretched out by a factor of 2. And for this transformation, those are all the vectors  with this special property of staying on their span. Those on the x-axis getting stretched out by a factor of 3,  and those on this diagonal line getting stretched by a factor of 2. Any other vector is going to get rotated somewhat during the transformation,  knocked off the line

Any other vector is going to get rotated somewhat during the transformation,  knocked off the line that it spans. As you might have guessed by now, these special vectors are called the eigenvectors of  the transformation, and each eigenvector has associated with it what's called an  eigenvalue, which is just the factor by which it's stretched or squished during the  transformation. Of course, there's nothing special about stretching versus squishing,  or the fact that these eigenvalues happen

nothing special about stretching versus squishing,  or the fact that these eigenvalues happen to be positive. In another example, you could have an eigenvector with eigenvalue negative 1 half,  meaning that the vector gets flipped and squished by a factor of 1 half. But the important part here is that it stays on the  line that it spans out without getting rotated off of it. For a glimpse of why this might be a useful thing to think about,  consider some three-dimensional rotation. If you can

this might be a useful thing to think about,  consider some three-dimensional rotation. If you can find an eigenvector for that rotation,  a vector that remains on its own span, what you have found is the axis of rotation. And it's much easier to think about a 3D rotation in terms of some  axis of rotation and an angle by which it's rotating,  rather than thinking about the full 3x3 matrix associated with that transformation. In this case, by the way, the corresponding eigenvalue would have to

with that transformation. In this case, by the way, the corresponding eigenvalue would have to be 1,  since rotations never stretch or squish anything,  so the length of the vector would remain the same. This pattern shows up a lot in linear algebra. With any linear transformation described by a matrix,  you could understand what it's doing by reading off the columns of this matrix as the  landing spots for basis vectors. But often, a better way to get at the heart of what the linear

landing spots for basis vectors. But often, a better way to get at the heart of what the linear  transformation actually does, less dependent on your particular coordinate system,  is to find the eigenvectors and eigenvalues. I won't cover the full details on methods for computing eigenvectors  and eigenvalues here, but I'll try to give an overview of the  computational ideas that are most important for a conceptual understanding. Symbolically, here's what the idea of an eigenvector looks

for a conceptual understanding. Symbolically, here's what the idea of an eigenvector looks like. A is the matrix representing some transformation, with v as the eigenvector,  and lambda is a number, namely the corresponding eigenvalue. What this expression is saying is that the matrix-vector product, A times v,  gives the same result as just scaling the eigenvector v by some value lambda. So finding the eigenvectors and their eigenvalues of a matrix A comes  down to finding the values of v and

the eigenvectors and their eigenvalues of a matrix A comes  down to finding the values of v and lambda that make this expression true. It's a little awkward to work with at first, because that left-hand side represents  matrix-vector multiplication, but the right-hand side here is scalar-vector  multiplication. So let's start by rewriting that right-hand side as some kind of matrix-vector  multiplication, using a matrix which has the effect of scaling any vector by a factor  of lambda. The

using a matrix which has the effect of scaling any vector by a factor  of lambda. The columns of such a matrix will represent what happens to each basis vector,  and each basis vector is simply multiplied by lambda,  so this matrix will have the number lambda down the diagonal, with zeros everywhere else. The common way to write this guy is to factor that lambda out and write it  as lambda times i, where i is the identity matrix with 1s down the diagonal. With both sides looking like

times i, where i is the identity matrix with 1s down the diagonal. With both sides looking like matrix-vector multiplication,  we can subtract off that right-hand side and factor out the v. So what we now have is a new matrix, A minus lambda times the identity,  and we're looking for a vector v such that this new matrix times v gives the zero vector. Now, this will always be true if v itself is the zero vector, but that's boring. What we want is a non-zero eigenvector. And if you watch chapter

zero vector, but that's boring. What we want is a non-zero eigenvector. And if you watch chapter 5 and 6, you'll know that the only way it's possible  for the product of a matrix with a non-zero vector to become zero is if the  transformation associated with that matrix squishes space into a lower dimension. And that squishification corresponds to a zero determinant for the matrix. To be concrete, let's say your matrix A has columns 2, 1 and 2, 3,  and think about subtracting off a variable

let's say your matrix A has columns 2, 1 and 2, 3,  and think about subtracting off a variable amount, lambda, from each diagonal entry. Now imagine tweaking lambda, turning a knob to change its value. As that value of lambda changes, the matrix itself changes,  and so the determinant of the matrix changes. The goal here is to find a value of lambda that will make this determinant zero,  meaning the tweaked transformation squishes space into a lower dimension. In this case, the sweet spot comes

tweaked transformation squishes space into a lower dimension. In this case, the sweet spot comes when lambda equals 1. Of course, if we had chosen some other matrix, the eigenvalue might not necessarily be 1. The sweet spot might be hit at some other value of lambda. So this is kind of a lot, but let's unravel what this is saying. When lambda equals 1, the matrix A minus lambda  times the identity squishes space onto a line. That means there's a non-zero vector v such that A minus  lambda times

squishes space onto a line. That means there's a non-zero vector v such that A minus  lambda times the identity times v equals the zero vector. And remember, the reason we care about that is because it means A times v  equals lambda times v, which you can read off as saying that the vector v  is an eigenvector of A, staying on its own span during the transformation A. In this example, the corresponding eigenvalue is 1,  so v would actually just stay fixed in place. Pause and ponder if you need

eigenvalue is 1,  so v would actually just stay fixed in place. Pause and ponder if you need to make sure that that line of reasoning feels good. This is the kind of thing I mentioned in the introduction. If you didn't have a solid grasp of determinants and why they  relate to linear systems of equations having non-zero solutions,  an expression like this would feel completely out of the blue. To see this in action, let's revisit the example from the start,  with a matrix whose columns are 3, 0

see this in action, let's revisit the example from the start,  with a matrix whose columns are 3, 0 and 1, 2. To find if a value lambda is an eigenvalue, subtract it from  the diagonals of this matrix and compute the determinant. Doing this, we get a certain quadratic polynomial in lambda,  3 minus lambda times 2 minus lambda. Since lambda can only be an eigenvalue if this determinant happens to be zero,  you can conclude that the only possible eigenvalues are lambda equals 2 and lambda  equals

zero,  you can conclude that the only possible eigenvalues are lambda equals 2 and lambda  equals 3. To figure out what the eigenvectors are that actually have one of these eigenvalues,  say lambda equals 2, plug in that value of lambda to the matrix and then  solve for which vectors this diagonally altered matrix sends to zero. If you computed this the way you would any other linear system,  you'd see that the solutions are all the vectors on the diagonal line spanned  by negative 1, 1. This

see that the solutions are all the vectors on the diagonal line spanned  by negative 1, 1. This corresponds to the fact that the unaltered matrix, 3, 0, 1,  2, has the effect of stretching all those vectors by a factor of 2. Now, a 2D transformation doesn't have to have eigenvectors. For example, consider a rotation by 90 degrees. This doesn't have any eigenvectors since it rotates every vector off of its own span. If you actually try computing the eigenvalues of a rotation like this,  notice

off of its own span. If you actually try computing the eigenvalues of a rotation like this,  notice what happens. Its matrix has columns 0, 1 and negative 1, 0. Subtract off lambda from the diagonal elements and look for when the determinant is zero. In this case, you get the polynomial lambda squared plus 1. The only roots of that polynomial are the imaginary numbers, i and negative i. The fact that there are no real number solutions indicates that there are no eigenvectors. Another pretty

that there are no real number solutions indicates that there are no eigenvectors. Another pretty interesting example worth holding in the back of your mind is a shear. This fixes i-hat in place and moves j-hat 1 over, so its matrix has columns 1, 0 and 1, 1. All of the vectors on the x-axis are eigenvectors  with eigenvalue 1 since they remain fixed in place. In fact, these are the only eigenvectors. When you subtract off lambda from the diagonals and compute the determinant,  what you get is 1

When you subtract off lambda from the diagonals and compute the determinant,  what you get is 1 minus lambda squared. And the only root of this expression is lambda equals 1. This lines up with what we see geometrically,  that all of the eigenvectors have eigenvalue 1. Keep in mind though, it's also possible to have just one eigenvalue,  but with more than just a line full of eigenvectors. A simple example is a matrix that scales everything by 2. The only eigenvalue is 2, but every vector in

example is a matrix that scales everything by 2. The only eigenvalue is 2, but every vector in the  plane gets to be an eigenvector with that eigenvalue. Now is another good time to pause and ponder some  of this before I move on to the last topic. I want to finish off here with the idea of an eigenbasis,  which relies heavily on ideas from the last video. Take a look at what happens if our basis vectors just so happen to be eigenvectors. For example, maybe i-hat is scaled by negative 1 and

vectors just so happen to be eigenvectors. For example, maybe i-hat is scaled by negative 1 and j-hat is scaled by 2. Writing their new coordinates as the columns of a matrix,  notice that those scalar multiples, negative 1 and 2,  which are the eigenvalues of i-hat and j-hat, sit on the diagonal of our matrix,  and every other entry is a 0. Any time a matrix has zeros everywhere other than the diagonal,  it's called, reasonably enough, a diagonal matrix. And the way to interpret this is that

diagonal,  it's called, reasonably enough, a diagonal matrix. And the way to interpret this is that all the basis vectors are eigenvectors,  with the diagonal entries of this matrix being their eigenvalues. There are a lot of things that make diagonal matrices much nicer to work with. One big one is that it's easier to compute what will happen  if you multiply this matrix by itself a whole bunch of times. Since all one of these matrices does is scale each basis vector by some eigenvalue,

of times. Since all one of these matrices does is scale each basis vector by some eigenvalue,  applying that matrix many times, say 100 times,  is just going to correspond to scaling each basis vector by the 100th power of  the corresponding eigenvalue. In contrast, try computing the 100th power of a non-diagonal matrix. Really, try it for a moment. It's a nightmare. Of course, you'll rarely be so lucky as to have your basis vectors also be eigenvectors. But if your transformation has a lot of

lucky as to have your basis vectors also be eigenvectors. But if your transformation has a lot of eigenvectors,  like the one from the start of this video, enough so that you can choose a set that  spans the full space, then you could change your coordinate system so that these  eigenvectors are your basis vectors. I talked about change of basis last video, but I'll go through  a super quick reminder here of how to express a transformation  currently written in our coordinate system into a

reminder here of how to express a transformation  currently written in our coordinate system into a different system. Take the coordinates of the vectors that you want to use as a new basis,  which in this case means our two eigenvectors,  then make those coordinates the columns of a matrix, known as the change of basis matrix. When you sandwich the original transformation,  putting the change of basis matrix on its right and the inverse of the  change of basis matrix on its left, the result

of basis matrix on its right and the inverse of the  change of basis matrix on its left, the result will be a matrix representing  that same transformation, but from the perspective of the new basis  vectors coordinate system. The whole point of doing this with eigenvectors is that this new matrix is  guaranteed to be diagonal with its corresponding eigenvalues down that diagonal. This is because it represents working in a coordinate system where what  happens to the basis vectors is that they

it represents working in a coordinate system where what  happens to the basis vectors is that they get scaled during the transformation. A set of basis vectors which are also eigenvectors is called,  again, reasonably enough, an eigenbasis. So if, for example, you needed to compute the 100th power of this matrix,  it would be much easier to change to an eigenbasis,  compute the 100th power in that system, then convert back to our standard system. You can't do this with all transformations. A

system, then convert back to our standard system. You can't do this with all transformations. A shear, for example, doesn't have enough eigenvectors to span the full space. But if you can find an eigenbasis, it makes matrix operations really lovely. For those of you willing to work through a pretty neat puzzle to  see what this looks like in action and how it can be used to produce  some surprising results, I'll leave up a prompt here on the screen. It takes a bit of work, but I think you'll

results, I'll leave up a prompt here on the screen. It takes a bit of work, but I think you'll enjoy it. The next and final video of this series is going to be on abstract vector spaces.  See you then!

A quick trick for computing eigenvalues | Chapter 15, Essence of linear algebra

This is a video for anyone who already knows what eigenvalues and eigenvectors are,  and who might enjoy a quick way to compute them in the case of 2x2 matrices. If you're unfamiliar with eigenvalues, go ahead and take a look at this video here,  which is actually meant to introduce them. You can skip ahead if all you want to do is see the trick,  but if possible I'd like you to rediscover it for yourself. So for that, let's lay out a little background. As a quick reminder, if the effect of a

yourself. So for that, let's lay out a little background. As a quick reminder, if the effect of a linear transformation on a  given vector is to scale that vector by some constant,  we call it an eigenvector of the transformation,  and we call the relevant scaling factor the corresponding eigenvalue,  often denoted with the letter lambda. When you write this as an equation, and you rearrange a little bit,  what you see is that if the number lambda is an eigenvalue of a matrix A,  then the

a little bit,  what you see is that if the number lambda is an eigenvalue of a matrix A,  then the matrix A minus lambda times the identity must send some non-zero vector,  namely the corresponding eigenvector, to the zero vector,  which in turn means that the determinant of this modified matrix must be zero. Okay, that's all a little bit of a mouthful to say, but again,  I'm assuming that all of this is review for any of you watching. So, the usual way to compute eigenvalues, how I used to do

this is review for any of you watching. So, the usual way to compute eigenvalues, how I used to do it and how I believe  most students are taught to carry it out, is to subtract the unknown value  lambda off the diagonals, and then solve for the determinant is equal to zero. Doing this always involves a few extra steps to expand out and simplify to get a  clean quadratic polynomial, what's known as the characteristic polynomial of the matrix. The eigenvalues are the roots of this polynomial,

as the characteristic polynomial of the matrix. The eigenvalues are the roots of this polynomial,  so to find them you have to apply the quadratic formula,  which itself typically requires one or two more steps of simplification. Honestly, the process isn't terrible, but at least for two by two matrices,  there is a much more direct way you can get at the answer. And if you want to rediscover this trick, there's only three  relevant facts you need to know, each of which is worth knowing  in its

trick, there's only three  relevant facts you need to know, each of which is worth knowing  in its own right and can help you with other problem solving. Number one, the trace of a matrix, which is the sum of these two diagonal entries,  is equal to the sum of the eigenvalues. Or, another way to phrase it, more useful for our purposes,  is that the mean of the two eigenvalues is the same as the mean of these two  diagonal entries. Number two, the determinant of a matrix, our usual ad-bc

the mean of these two  diagonal entries. Number two, the determinant of a matrix, our usual ad-bc formula,  is equal to the product of the two eigenvalues. And this should kind of make sense if you understand that eigenvalues describe  how much an operator stretches space in a particular direction,  and that the determinant describes how much an operator scales areas, or volumes,  as a whole. Now before getting to the third fact, notice how you can essentially read  these first two values out

before getting to the third fact, notice how you can essentially read  these first two values out of the matrix without really writing much down. Take this matrix here as an example. Straight away, you can know that the mean of the  eigenvalues is the same as the mean of 8 and 6, which is 7. Likewise, most linear algebra students are pretty well practiced at  finding the determinant, which in this case works out to be 48 minus 8. So right away, you know that the product of the two eigenvalues

case works out to be 48 minus 8. So right away, you know that the product of the two eigenvalues is 40. Now take a moment to see if you can derive what will be our third relevant fact,  which is how you can quickly recover two numbers when you  know their mean and you know their product. Here, let's focus on this example. You know that the two values are evenly spaced around the number 7,  so they look like 7 plus or minus something, let's call that something d for distance. You also know that

look like 7 plus or minus something, let's call that something d for distance. You also know that the product of these two numbers is 40. Now to find d, notice that this product expands really nicely,  it works out as a difference of squares. So from there, you can find d. d squared is 7 squared minus 40, or 9, which means that d itself is 3. In other words, the two values for this very specific example work out to be 4 and 10. But our goal is a quick trick, and you wouldn't want to think

example work out to be 4 and 10. But our goal is a quick trick, and you wouldn't want to think through this each time,  so let's wrap up what we just did in a general formula. For any mean m and product p, the distance squared  is always going to be m squared minus p. This gives the third key fact, which is that when two numbers  have a mean m and a product p, you can write those two numbers  as m plus or minus the square root of m squared minus p. This is decently fast to re-derive on the fly

m plus or minus the square root of m squared minus p. This is decently fast to re-derive on the fly if you ever forget it,  and it's essentially just a rephrasing of the difference of squares formula. But even still, it's a fact that's worth memorizing so it's at the tip of your fingers. In fact, my friend Tim from the channel A Capella Science wrote  us a nice quick jingle to make it a little bit more memorable. Let me show you how this works, say for the matrix 3 1 4 1. You start by bringing

more memorable. Let me show you how this works, say for the matrix 3 1 4 1. You start by bringing to mind the formula, maybe stating it all in your head. But when you write it down, you fill in the appropriate values for m and p as you go. So in this example, the mean of the eigenvalues is the same as the mean of 3 and 1,  which is 2, so the thing you start writing is 2 plus or minus  the square root of 2 squared minus. Then the product of the eigenvalues is the determinant,  which in this

root of 2 squared minus. Then the product of the eigenvalues is the determinant,  which in this example is 3 times 1 minus 1 times 4, or negative 1,  so that's the final thing you fill in, which means the eigenvalues are 2 plus  or minus the square root of 5. You might recognize that this is the same matrix I was using at the beginning,  but notice how much more directly we can get at the answer. Here, try another one. This time, the mean of the eigenvalues is the same as the mean of 2 and 8,

Here, try another one. This time, the mean of the eigenvalues is the same as the mean of 2 and 8, which is 5. So again, you start writing out the formula, but this time writing 5 in place of m. And then the determinant is 2 times 8 minus 7 times 1, or 9. So in this example, the eigenvalues look like 5 plus or minus the square root of 16,  which simplifies even further as 9 and 1. You see what I mean about how you can basically just start  writing down the eigenvalues while you're staring at the

about how you can basically just start  writing down the eigenvalues while you're staring at the matrix? It's typically just the tiniest bit of simplification at the end. Honestly, I've found myself using this trick a lot when I'm sketching quick  notes related to linear algebra and want to use small matrices as examples. I've been working on a video about matrix exponents,  where eigenvalues pop up a lot, and I realize it's just very handy  if students can read out the eigenvalues from small

up a lot, and I realize it's just very handy  if students can read out the eigenvalues from small examples without  losing the main line of thought by getting bogged down in a different calculation. As another fun example, take a look at this set of three different matrices,  which comes up a lot in quantum mechanics. They're known as the Pauli spin matrices. If you know quantum mechanics, you'll know that the eigenvalues  of matrices are highly relevant to the physics that they describe. And

know that the eigenvalues  of matrices are highly relevant to the physics that they describe. And if you don't know quantum mechanics, let this just be a little glimpse  of how these computations are actually very relevant to real applications. The mean of the diagonal entries in all three cases is zero. So the mean of the eigenvalues in all of these cases is zero,  which makes our formula look especially simple. What about the products of the eigenvalues, the determinants of these matrices?

especially simple. What about the products of the eigenvalues, the determinants of these matrices? For the first one, it's 0, minus 1, or negative 1. The second one also looks like 0, minus 1, but it takes  a moment more to see because of the complex numbers. And the final one looks like negative 1, minus 0. So in all cases, the eigenvalues simplify to be plus and minus 1. Although in this case, you really don't need a formula to find two values if  you know that they're evenly spaced around 0

you really don't need a formula to find two values if  you know that they're evenly spaced around 0 and their product is negative 1. If you're curious, in the context of quantum mechanics,  these matrices describe observations you might make about a particle's spin in the x,  y, or z direction. And the fact that their eigenvalues are plus and minus 1 corresponds with the idea  that the values for the spin that you would observe would be either entirely in one  direction or entirely in another,

the spin that you would observe would be either entirely in one  direction or entirely in another, as opposed to something continuously ranging in between. Maybe you'd wonder how exactly this works, or why you would use 2x2  matrices that have complex numbers to describe spin in three dimensions. Those would be fair questions, just outside the scope of what I want to talk about here. You know, it's funny, I wrote this section because I wanted some case where  you have 2x2 matrices that aren't

funny, I wrote this section because I wanted some case where  you have 2x2 matrices that aren't just toy examples or homework problems,  ones where they actually come up in practice, and quantum mechanics is great for that. The thing is, after I made it, I realized that the whole  example kind of undercuts the point that I'm trying to make. For these specific matrices, when you use the traditional method,  the one with characteristic polynomials, it's essentially just as fast. It might actually

method,  the one with characteristic polynomials, it's essentially just as fast. It might actually be faster. I mean, take a look at the first one. The relevant determinant directly gives you a characteristic polynomial  of lambda squared minus 1, and clearly that has roots of plus and minus 1. Same answer when you do the second matrix, lambda squared minus 1. And as for the last matrix, forget about doing any computations,  traditional or otherwise, it's already a diagonal matrix,  so those

about doing any computations,  traditional or otherwise, it's already a diagonal matrix,  so those diagonal entries are the eigenvalues. However, the example is not totally lost to our cause. Where you will actually feel the speedup is in the more general case,  where you take a linear combination of these three matrices and then try to compute  the eigenvalues. You might write this as a times the first one,  plus b times the second, plus c times the third. In quantum mechanics, this would

the first one,  plus b times the second, plus c times the third. In quantum mechanics, this would describe spin observations  in a general direction of a vector with coordinates a, b, c. More specifically, you should assume that this vector is normalized,  meaning a squared plus b squared plus c squared is equal to 1. When you look at this new matrix, it's immediate  to see that the mean of the eigenvalues is still 0. And you might also enjoy pausing for a brief moment to confirm  that the

eigenvalues is still 0. And you might also enjoy pausing for a brief moment to confirm  that the product of those eigenvalues is still negative 1. And then from there, concluding what the eigenvalues must be. And this time, the characteristic polynomial approach would be by  comparison a lot more cumbersome, definitely harder to do in your head. To be clear, using the mean product formula is not fundamentally  different from finding roots of the characteristic polynomial. I mean, it can't be,

fundamentally  different from finding roots of the characteristic polynomial. I mean, it can't be, they're solving the same problem. One way to think about this actually is that the mean  product formula is a nice way to solve quadratics in general. And some viewers of the channel may recognize this. Think about it, when you're trying to find the roots of a quadratic,  given the coefficients, that's another situation where you know the sum of two values,  and you also know their product, but

another situation where you know the sum of two values,  and you also know their product, but you're trying to recover the original two values. Specifically, if the polynomial is normalized, so that this leading coefficient is 1,  then the mean of the roots will be negative 1 half times this linear coefficient,  which is negative 1 times the sum of those roots. With the example on the screen, that makes the mean 5. And the product of the roots is even easier, it's just the constant term,  no

makes the mean 5. And the product of the roots is even easier, it's just the constant term,  no adjustments needed. So from there, you would apply the mean product formula, and that gives you the roots. And on the one hand, you could think of this as a lighter  weight version of the traditional quadratic formula. But the real advantage is not just that it's fewer symbols to memorize,  it's that each one of them carries more meaning with it. I mean, the whole point of this eigenvalue trick is

each one of them carries more meaning with it. I mean, the whole point of this eigenvalue trick is that because you can read  out the mean and product directly from looking at the matrix,  you don't need to go through the intermediate step of setting up the characteristic  polynomial. You can jump straight to writing down the roots without ever  explicitly thinking about what the polynomial looks like. But to do that, we need a version of the quadratic  formula where the terms carry some kind

like. But to do that, we need a version of the quadratic  formula where the terms carry some kind of meaning. I realize this is a very specific trick for a very specific audience,  but it's something I wish I knew in college, so if you happen to know  any students who might benefit from this, consider sharing it with them. The hope is that it's not just one more thing that you memorize,  but that the framing reinforces some other nice facts that are worth knowing,  like how the trace and the

the framing reinforces some other nice facts that are worth knowing,  like how the trace and the determinant are related to eigenvalues. If you want to prove those facts, by the way, take a moment to  expand out the characteristic polynomial for a general matrix,  and then think hard about the meaning of each of these coefficients. Many thanks to Tim for ensuring that this mean product formula  will stay stuck in all of our heads for at least a few months. If you don't know about alcappella

will stay stuck in all of our heads for at least a few months. If you don't know about alcappella science, please do check it out. The molecular shape of you in particular is one of the greatest things on the internet.

I'd like to revisit a deceptively simple question  that I asked in the very first video of this series. What are vectors? Is a two-dimensional vector, for example, fundamentally an arrow on  a flat plane that we can describe with coordinates for convenience? Or is it fundamentally that pair of real numbers which  is just nicely visualized as an arrow on a flat plane? Or are both of these just manifestations of something deeper? On the one hand, defining vectors as primarily being  a list of

manifestations of something deeper? On the one hand, defining vectors as primarily being  a list of numbers feels clear-cut and unambiguous. It makes things like four-dimensional vectors or 100-dimensional vectors sound like real,  concrete ideas that you can actually work with. When otherwise, an idea like four dimensions is just a vague geometric  notion that's difficult to describe without waving your hands a bit. But on the other hand, a common sensation for those who actually work with

your hands a bit. But on the other hand, a common sensation for those who actually work with  linear algebra, especially as you get more fluent with changing your basis,  is that you're dealing with a space that exists independently from the  coordinates that you give it, and that coordinates are actually somewhat arbitrary,  depending on what you happen to choose as your basis vectors. Core topics in linear algebra, like determinants and eigenvectors,  seem indifferent to your choice of

topics in linear algebra, like determinants and eigenvectors,  seem indifferent to your choice of coordinate systems. The determinant tells you how much a transformation scales areas,  and eigenvectors are the ones that stay on their own span during a transformation. But both of these properties are inherently spatial,  and you can freely change your coordinate system without changing the underlying  values of either one. But if vectors are not fundamentally lists of real numbers,  and if their

values of either one. But if vectors are not fundamentally lists of real numbers,  and if their underlying essence is something more spatial,  that just begs the question of what mathematicians mean when they use a  word like space or spatial. To build up to where this is going, I'd actually like to spend the  bulk of this video talking about something which is neither an arrow  nor a list of numbers, but also has vector-ish qualities – functions. You see, there's a sense in which functions

numbers, but also has vector-ish qualities – functions. You see, there's a sense in which functions are actually just another type of vector. In the same way that you can add two vectors together,  there's also a sensible notion for adding two functions, f and g,  to get a new function, f plus g. It's one of those things where you kind of already know what it's going to be,  but actually phrasing it is a mouthful. The output of this new function at any given input, like negative four,  is the

it is a mouthful. The output of this new function at any given input, like negative four,  is the sum of the outputs of f and g when you evaluate them each at that same input,  negative four. Or more generally, the value of the sum function at any  given input x is the sum of the values f of x plus g of x. This is pretty similar to adding vectors coordinate by coordinate,  it's just that there are, in a sense, infinitely many coordinates to deal with. Similarly, there's a sensible notion for

are, in a sense, infinitely many coordinates to deal with. Similarly, there's a sensible notion for scaling a function by a real number,  just scale all of the outputs by that number. And again, this is analogous to scaling a vector coordinate by coordinate,  it just feels like there's infinitely many coordinates. Now, given that the only thing vectors can really do is get added together or scaled,  it feels like we should be able to take the same useful constructs and problem  solving

or scaled,  it feels like we should be able to take the same useful constructs and problem  solving techniques of linear algebra that were originally thought about in  the context of arrows and space and apply them to functions as well. For example, there's a perfectly reasonable notion of a linear transformation  for functions, something that takes in one function and turns it into another. One familiar example comes from calculus, the derivative. It's something which transforms one function

familiar example comes from calculus, the derivative. It's something which transforms one function into another function. Sometimes in this context you'll hear these called operators instead of transformations,  but the meaning is the same. A natural question you might want to ask is what it  means for a transformation of functions to be linear. The formal definition of linearity is relatively abstract and symbolically driven  compared to the way that I first talked about it in chapter 3 of

abstract and symbolically driven  compared to the way that I first talked about it in chapter 3 of this series. But the reward of abstractness is that we'll get something  general enough to apply to functions as well as arrows. A transformation is linear if it satisfies two properties,  commonly called additivity and scaling. Additivity means that if you add two vectors, v and w,  then apply a transformation to their sum, you get the same result as if you added the  transformed versions of v

transformation to their sum, you get the same result as if you added the  transformed versions of v and w. The scaling property is that when you scale a vector v by some number,  then apply the transformation, you get the same ultimate vector as  if you scaled the transformed version of v by that same amount. The way you'll often hear this described is that linear transformations  preserve the operations of vector addition and scalar multiplication. The idea of gridlines remaining parallel and

of vector addition and scalar multiplication. The idea of gridlines remaining parallel and evenly spaced that I've  talked about in past videos is really just an illustration of what  these two properties mean in the specific case of points in 2D space. One of the most important consequences of these properties,  which makes matrix vector multiplication possible,  is that a linear transformation is completely described by where it  takes the basis vectors. Since any vector can be expressed by

is completely described by where it  takes the basis vectors. Since any vector can be expressed by scaling and adding the basis vectors in some way,  finding the transformed version of a vector comes down to scaling and adding  the transformed versions of the basis vectors in that same way. As you'll see in just a moment, this is as true for functions as it is for arrows. For example, calculus students are always using the fact that the derivative is  additive and has the scaling property, even

are always using the fact that the derivative is  additive and has the scaling property, even if they haven't heard it phrased that way. If you add two functions, then take the derivative,  it's the same as first taking the derivative of each one separately,  then adding the result. Similarly, if you scale a function, then take the derivative,  it's the same as first taking the derivative, then scaling the result. To really drill in the parallel, let's see what it  might look like to describe

scaling the result. To really drill in the parallel, let's see what it  might look like to describe the derivative with a matrix. This will be a little tricky, since function spaces have a tendency to be  infinite dimensional, but I think this exercise is actually quite satisfying. Let's limit ourselves to polynomials, things like x squared plus 3x plus 5,  or 4x to the seventh minus 5x squared. Each of the polynomials in our space will only have finitely many terms,  but the full space is

Each of the polynomials in our space will only have finitely many terms,  but the full space is going to include polynomials with arbitrarily large degree. The first thing we need to do is give coordinates to this space,  which requires choosing a basis. Since polynomials are already written down as the sum of scaled powers of the variable x,  it's pretty natural to just choose pure powers of x as the basis function. In other words, our first basis function will be the constant function, b0 of

the basis function. In other words, our first basis function will be the constant function, b0 of x equals 1. The second basis function will be b1 of x equals x,  then b2 of x equals x squared, then b3 of x equals x cubed, and so on. The role that these basis functions serve will be similar to the roles of i-hat,  j-hat, and k-hat in the world of vectors as arrows. Since our polynomials can have arbitrarily large degree,  this set of basis functions is infinite. But that's okay, it just means

arbitrarily large degree,  this set of basis functions is infinite. But that's okay, it just means that when we treat our polynomials as vectors,  they're going to have infinitely many coordinates. A polynomial like x squared plus 3x plus 5, for example,  would be described with the coordinates 5, 3, 1, then infinitely many zeros. You'd read this as saying that it's 5 times the first basis function,  plus 3 times that second basis function, plus 1 times the third basis function,  and then none

plus 3 times that second basis function, plus 1 times the third basis function,  and then none of the other basis functions should be added from that point on. The polynomial 4x to the seventh minus 5x squared would have the coordinates 0,  0, negative 5, 0, 0, 0, 0, 4, then an infinite string of zeros. In general, since every individual polynomial has only finitely many terms,  its coordinates will be some finite string of numbers with an infinite tail of zeros. In this coordinate system, the

be some finite string of numbers with an infinite tail of zeros. In this coordinate system, the derivative is described with  an infinite matrix that's mostly full of zeros,  but which has the positive integers counting down on this offset diagonal. I'll talk about how you could find this matrix in just a moment,  but the best way to get a feel for it is to just watch it in action. Take the coordinates representing the polynomial x cubed plus 5x squared plus 4x plus 5,  then put those

the coordinates representing the polynomial x cubed plus 5x squared plus 4x plus 5,  then put those coordinates on the right of the matrix. The only term that contributes to the first coordinate of the result is 1 times 4,  which means the constant term in the result will be 4. This corresponds to the fact that the derivative of 4x is the constant 4. The only term contributing to the second coordinate of the matrix vector product  is 2 times 5, which means the coefficient in front of x in the

of the matrix vector product  is 2 times 5, which means the coefficient in front of x in the derivative is 10. That one corresponds to the derivative of 5x squared. Similarly, the third coordinate in the matrix  vector product comes down to taking 3 times 1. This one corresponds to the derivative of x cubed being 3x squared. And after that, it'll be nothing but zeros. What makes this possible is that the derivative is linear. And for those of you who like to pause and ponder,  you could

is that the derivative is linear. And for those of you who like to pause and ponder,  you could construct this matrix by taking the derivative of each  basis function and putting the coordinates of the results in each column. So, surprisingly, matrix vector multiplication and taking a derivative,  which at first seem like completely different animals,  are both just really members of the same family. In fact, most of the concepts I've talked about in this series with  respect to vectors as

family. In fact, most of the concepts I've talked about in this series with  respect to vectors as arrows in space, things like the dot product or eigenvectors,  have direct analogs in the world of functions,  though sometimes they go by different names, things like inner product or eigenfunction. So back to the question of what is a vector. The point I want to make here is that there are lots of vectorish things in math. As long as you're dealing with a set of objects where there's a

lots of vectorish things in math. As long as you're dealing with a set of objects where there's a reasonable notion of  scaling and adding, whether that's a set of arrows in space, lists of numbers, functions,  or whatever other crazy thing you choose to define,  all of the tools developed in linear algebra regarding vectors,  linear transformations and all that stuff, should be able to apply. Take a moment to imagine yourself right now as a  mathematician developing the theory of linear

Take a moment to imagine yourself right now as a  mathematician developing the theory of linear algebra. You want all of the definitions and discoveries of your work to apply to  all of the vectorish things in full generality, not just to one specific case. These sets of vectorish things, like arrows or lists of numbers or functions,  are called vector spaces. And what you as the mathematician might want to do is say,  hey everyone, I don't want to have to think about all the  different types

want to do is say,  hey everyone, I don't want to have to think about all the  different types of crazy vector spaces that you all might come up with. So what you do is establish a list of rules that  vector addition and scaling have to abide by. These rules are called axioms, and in the modern theory of linear algebra,  there are eight axioms that any vector space must satisfy if all of  the theory and constructs that we've discovered are going to apply. I'll leave them on the screen here for

and constructs that we've discovered are going to apply. I'll leave them on the screen here for anyone who wants to pause and ponder,  but basically it's just a checklist to make sure that the notions of vector  addition and scalar multiplication do the things that you'd expect them to do. These axioms are not so much fundamental rules of nature as they are an  interface between you, the mathematician, discovering results,  and other people who might want to apply those results to new sorts of

discovering results,  and other people who might want to apply those results to new sorts of vector spaces. If, for example, someone defines some crazy type of vector space,  like the set of all pi creatures with some definition of adding and scaling pi creatures,  these axioms are like a checklist of things that they need to verify about  their definitions before they can start applying the results of linear algebra. And you, as the mathematician, never have to think about  all the possible

of linear algebra. And you, as the mathematician, never have to think about  all the possible crazy vector spaces people might define. You just have to prove your results in terms of these axioms so  anyone whose definitions satisfy those axioms can happily apply your results,  even if you never thought about their situation. As a consequence, you'd tend to phrase all of your results pretty abstractly,  which is to say, only in terms of these axioms,  rather than centering on a specific type of

which is to say, only in terms of these axioms,  rather than centering on a specific type of vector, like arrows in space or functions. For example, this is why just about every textbook you'll find will  define linear transformations in terms of additivity and scaling,  rather than talking about gridlines remaining parallel and evenly spaced. Even though the latter is more intuitive, and at least in my view,  more helpful for first-time learners, even if it is specific to one situation. So

in my view,  more helpful for first-time learners, even if it is specific to one situation. So the mathematician's answer to what are vectors is to just ignore the question. In the modern theory, the form that vectors take doesn't really matter. Arrows, lists of numbers, functions, pi creatures, really, it can be anything,  so long as there's some notion of adding and scaling vectors that follows these rules. It's like asking what the number 3 really is. Whenever it comes up concretely, it's in

these rules. It's like asking what the number 3 really is. Whenever it comes up concretely, it's in the context of some triplet of things,  but in math, it's treated as an abstraction for all possible triplets of things,  and lets you reason about all possible triplets using a single idea. Same goes with vectors, which have many embodiments,  but math abstracts them all into a single, intangible notion of a vector space. But, as anyone watching this series knows, I think it's better  to begin

notion of a vector space. But, as anyone watching this series knows, I think it's better  to begin reasoning about vectors in a concrete, visualizable setting,  like 2D space, with arrows rooted at the origin. But as you learn more linear algebra, know that these tools apply much more generally,  and that this is the underlying reason why textbooks and lectures tend to be phrased,  well, abstractly. So with that, folks, I think I'll call it an in to this essence of linear algebra series. If

So with that, folks, I think I'll call it an in to this essence of linear algebra series. If you've watched and understood the videos, I really do believe that  you have a solid foundation in the underlying intuitions of linear algebra. This is not the same thing as learning the full topic, of course,  that's something that can only really come from working through problems,  but the learning you do moving forward could be substantially more efficient if you have  all the right intuitions in

do moving forward could be substantially more efficient if you have  all the right intuitions in place. So, have fun applying those intuitions, and best of luck with your future learning.