телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Невронна мрежа Yandex. Yandex представи нова версия на търсенето, базирано на невронни мрежи. Изкуствен интелект или машинно обучение

Писателят на научна фантастика Сергей Лукяненко, заедно с невронната мрежа Yandex, създаде произведение в стила на поредицата „Вечери във ферма близо до Диканка“. Писателят разработи героите и основните сюжетни линии, а след това невронната мрежа генерира историята „Лош договор“ на тази основа, която е публично достояние.

Характеристики на разработката

Идеята на проекта принадлежи на канала TV-3. Поводът беше излизането на филма „Гогол. Ужасно отмъщение“, чиято премиера в Русия е насрочена за 30 август 2018 г. Продуцентът Валери Федорович отбеляза, че процесът на създаване на историята съответства на начина, по който Гогол е работил върху произведенията си. Но ако народните легенди за Николай Василиевич са записани и изпратени от майка, тогава в в такъв случайинформацията се обработва от невронна мрежа, а фолклорната “храна” се осигурява от писателя.

Програмата добави много подробности, сюжетни линии към историята „Лошият договор“ и също така предостави наративен език, подобен на този на Гогол. Този резултат беше постигнат благодарение на предварителното обучение на базата на руската проза като цяло, а след това и на произведенията на писателя в частност.

Мнението на писателя

Сергей Лукяненко оцени резултата по два начина сътрудничествос Yandex. От една страна, той е доволен, че въпреки бързото развитие на невронните мрежи и изкуствения интелект е необходим човек, който да създаде основата на едно творчество. От друга страна, писателят е разстроен, че някои съвременни книги са написани по-лошо от история, създадена от машина.

Материалът, разказан от нашия колега Константин Лахман, обобщава историята на развитието на невронните мрежи, техните основни характеристики и фундаментални разлики от други модели, използвани в машинното обучение. Ние също ще говорим за конкретни примериприложение на невронни мрежови технологии и техните непосредствени перспективи. Лекцията ще бъде полезна за тези, които искат да систематизират в главите си всички най-важни съвременни знания за невронните мрежи.

Константин Клахман Лахман е завършил МИФИ, работил е като изследовател в отдела по невронауки на Националния изследователски център „Курчатовски институт“. В Yandex той работи върху технологии за невронни мрежи, използвани в компютърното зрение.

Под разреза - подробен преписс диапозитиви.

Невронни мрежи

Здравейте всички. Казвам се Костя Лахман и темата на днешната лекция е „Невронни мрежи“. Работя в Yandex в групата за технологии за невронни мрежи и ние разработваме всякакви готини неща, базирани на машинно обучение, използвайки невронни мрежи. Невронните мрежи са един от методите за машинно обучение, които сега привличат доста голямо внимание не само от специалисти в областта на анализа на данни или математици, но и от хора като цяло, които по никакъв начин не са свързани с тази професия. И това се дължи на факта, че решенията, базирани на невронни мрежи, показват най-добри резултати в различни области на човешкото познание, като разпознаване на реч, анализ на текст, анализ на изображения, за които ще се опитам да говоря в тази лекция. Разбирам, че вероятно всички в тази публика и тези, които ни слушат, имат малко различно нивоподготовка - някои знаят малко повече, други малко по-малко - но можете ли да вдигнете ръце за тези, които са чели нещо за невронните мрежи? Това е много солидна част от публиката. Ще се опитам да го направя интересно както за тези, които не са чували нищо, така и за тези, които са чели нещо, защото повечето от изследванията, за които ще говоря, са проучвания от тази или предходната година, защото има т.н. много всичко се случва и минават буквално шест месеца, а тези статии, които бяха публикувани преди шест месеца, вече са малко остарели.


Да започваме. Просто ще ви кажа много бързо какво е предизвикателството на машинното обучение като цяло. Сигурен съм, че много от вас знаят това, но за да продължа напред, бих искал всички да разберат. Използвайки примера на проблема с класификацията като най-разбираем и прост.

Нека имаме някакво U - набор от обекти в реалния свят и на всеки от тези обекти приписваме някои характеристики на тези обекти. Освен това, всеки от тези обекти има някакъв клас, който бихме искали да можем да предвидим, като се имат предвид характеристиките на обекта. Нека разгледаме тази ситуация, използвайки изображения като пример.


Обектите са всички изображения в света, от които може да се интересуваме.


Най-простите характеристики на изображенията са пикселите. През последния половин век, през който човечеството се е занимавало с разпознаване на образи, значително повече сложни знациизображения - но това са най-простите.


И класът, който можем да присвоим на всяко изображение, е например човек (това е снимка на Алън Тюринг например), птица, къща и т.н.


Задачата на машинното обучение в този случай е да конструира функция за вземане на решения, която на базата на вектора от характеристики на даден обект да каже към кой клас принадлежи. Имахте лекция, доколкото знам, от Константин Воронцов, който говори за всичко това много по-задълбочено от мен, така че покривам само върха.


В повечето случаи е необходим така нареченият тренировъчен комплект. Това е набор от примери, за които знаем със сигурност, че този обект има такъв клас. И на базата на тази обучителна извадка можем да изградим тази функция за вземане на решения, която прави възможно най-малко грешки в обекти от обучаващия набор и по този начин изчислява, че върху обекти, които не са включени в обучаващия набор, също ще имаме добро качествокласификации.


За да направим това, трябва да въведем някаква функция за грешка. Тук D е наборът за обучение, F е функцията за вземане на решение. И в най-простия случай функцията за грешка е просто броят примери, в които правим грешки. И за да намерим оптималната функция за решаване, трябва да разберем. Обикновено ние избираме функция от някакъв вид параметричен набор, тоест това е просто някакъв вид, например полином на уравнение, което има някои коефициенти, и ние трябва по някакъв начин да ги изберем. И параметрите на тази функция, които минимизират тази функция за грешка, функцията за загуба, са нашата цел, тоест искаме да намерим тези параметри.

Има много методи за търсене на тези параметри. Няма да навлизам в това сега. Един метод е, когато вземаме един пример за тази функция, вижме дали сме я класифицирали правилно или неправилно и вземаме производната по отношение на параметрите на нашата функция. Както знаете, ако отидем към обратното на тази производна, тогава ще намалим грешката в този пример. И по този начин, преминавайки през всички примери, ще намалим грешката чрез коригиране на параметрите на функцията.

Това, за което току-що говорих, се отнася за всички алгоритми за машинно обучение и в същата степен се отнася за невронните мрежи, въпреки че невронните мрежи винаги са стояли малко встрани от всички други алгоритми.


В момента има прилив на интерес към невронните мрежи, но това е един от най-старите алгоритми за машинно обучение, за които можете да се сетите. Първият официален неврон, клетъчната невронна мрежа, беше предложен, неговата първа версия, през 1943 г. от Уорън МакКълох и Уолтър Питс. Още през 1958 г. Франк Розенблат предлага първата много проста невронна мрежа, която вече може да разделя, например, обекти в двумерно пространство. И невронните мрежи са преминали през възходи и падения през тази повече от половин век история. Интересът към невронните мрежи беше много голям през 50-те и 60-те години на миналия век, когато бяха получени първите впечатляващи резултати. След това невронните мрежи отстъпиха място на други алгоритми за машинно обучение, които бяха по-мощни по това време. Интересът се възобновява отново през 90-те години, след което отново намалява.


И сега, през последните 5-7 години се оказа, че в много задачи, свързани с анализ на естествена информация, а всичко, което ни заобикаля е естествена информация, това е език, това е реч, това е изображение, видео, много други неща различна информация, – невронните мрежи са по-добри от другите алгоритми. Поне засега. Може би ренесансът отново ще свърши и нещо ще дойде да ги замени, но сега те показват най-добри резултати в повечето случаи.

Какво доведе до това? Фактът, че невронните мрежи са като алгоритъм за машинно обучение, те трябва да бъдат обучени. Но за разлика от повечето алгоритми, невронните мрежи са много критични към обема на данните, към обема на обучителната извадка, която е необходима за тяхното обучение. А мрежите просто не работят добре с малко количество данни. Те генерализират лошо и работят лошо върху примери, които не са видели по време на учебния процес. Но през последните 15 години растежът на данните в света стана може би експоненциален и сега това вече не е толкова голям проблем. Имаме много данни.

Вторият крайъгълен камък защо сега има ренесанс на мрежите са изчислителните ресурси. Невронните мрежи са един от най-тежките алгоритми за машинно обучение. Необходими са огромни изчислителни ресурси, за да се обучи невронна мрежа и дори да се приложи. И сега имаме такива ресурси. И, разбира се, бяха измислени нови алгоритми. Науката не стои неподвижна, инженерството не стои неподвижно и сега разбираме повече за това как да тренираме тези видове структури.


Какво е формален неврон? Това е много прост елемент, който има някакъв ограничен брой входове, някаква тежест е прикрепена към всеки от тези входове и невронът просто взема и извършва претеглено сумиране на своите входове. Входът може например да бъде същите пиксели на изображението, за които говорих по-рано. Нека си представим това X 1 и до X n– това са просто всички пиксели на изображението. И всеки пиксел има някаква тежест, прикрепена към него. Той ги обобщава и извършва някои нелинейни трансформации върху тях. Но дори и да не пипаш линейна трансформация, тогава само един такъв неврон е доста мощен класификатор. Можете да замените този неврон и да кажете, че това е просто линеен класификатор, и това е формалният неврон, той е просто линеен класификатор. Ако, например, в двумерното пространство имаме определен набор от точки от два класа и това са техните характеристики X 1И X 2, тоест чрез избиране на тези тегла V 1И V 2, можем да конструираме разделителна повърхност в това пространство. И така, ако имаме тази сума, например, по-голяма от нула, тогава обектът принадлежи към първия клас. Ако тази сума е по-малка от нула, тогава обектът принадлежи към втория клас.

И всичко би било наред, но единственото нещо е, че тази картина е много оптимистична, има само два знака, класовете са, както се казва, линейно разделими. Това означава, че можем просто да начертаем линия, която правилно класифицира всички обекти в набора за обучение. Всъщност това не винаги е така и почти никога не се случва. И следователно, един неврон не е достатъчен за решаване на по-голямата част от практическите проблеми.


Тази нелинейна трансформация, която всеки неврон извършва върху тази сума, е критично важна, защото, както знаем, ако ние, например, извършим такова просто сумиране и кажем, че това, например, е някаква нова функция Y 1 (W 1 x 1 + W 2 x 2 = y 1)и тогава имаме, например, втори неврон, който също обобщава същите характеристики, само че това ще бъде, например, W 1 "x 1 +W 2 "x 2 =y 2. Ако след това искаме отново да приложим линейна класификация в пространството на тези характеристики, тогава това няма да има никакъв смисъл, тъй като две линейни класификации, приложени в един ред, могат лесно да бъдат заменени с една, това е просто свойството на линейността на операциите. И ако извършим някаква нелинейна трансформация на тези характеристики, например най-простата... Преди използвахме по-сложни нелинейни трансформации, като тази логистична функция, тя е ограничена от нула и едно и виждаме, че има области на линейност тук. Тоест около 0 в х се държи доста линейно, като обикновена права линия, а след това се държи нелинейно. Но, както се оказа, за да се обучават ефективно този вид класификатори, е достатъчна най-простата нелинейност в света - просто пресечена права линия, когато на положителния участък е права линия, а на отрицателния участък е винаги 0. Това е най-простата нелинейност и се оказва, че дори това е достатъчно за ефективно обучение на класификацията.


Какво е невронна мрежа? Невронната мрежа е последователност от такива трансформации. F 1– Това е така нареченият слой на невронната мрежа. Слоят на невронната мрежа е просто колекция от неврони, които работят върху едни и същи функции. Нека си представим, че имаме първоначалните характеристики x 1, x 2, x 3, и имаме три неврона, всеки от които е свързан с всички тези характеристики. Но всеки от невроните има свои собствени тегла, на които претегля такива характеристики, и задачата на обучението на мрежата е да избере такива тегла за всеки от невроните, които оптимизират тази наша функция за грешка. И функция F 1– това е един слой от такива неврони и след прилагане на функцията получаваме някакво ново пространство за функции. След това прилагаме друг такъв слой към това функционално пространство. Може да има различен брой неврони, някаква друга нелинейност като трансформираща функция, но това са същите неврони, но със същите тегла. Така, като последователно прилагаме тези трансформации, получаваме общата функция Е– функция за преобразуване на невронна мрежа, която се състои от последователно прилагане на няколко функции.


Как се обучават невронните мрежи? По принцип, като всеки друг алгоритъм за обучение. Имаме някакъв изходен вектор, който се получава на изхода на мрежата, например клас, някакъв вид етикет на клас. Има някакъв референтен изход, за който знаем, че тези функции трябва да имат, например такъв обект или какъв номер трябва да прикрепим към него.


И имаме някаква делта, тоест разликата между изходния вектор и референтния вектор, и след това на базата на тази делта има голяма формула, но нейната същност е, че ако разберем, че тази делта зависи от Fn, тоест от изхода на последния слой на мрежата, ако вземем производната на тази делта по тегла, тоест по тези елементи, които искаме да обучим, и също приложим така нареченото верижно правило, т.е. , когато имаме производни сложна функцияе произведението на производната по отношение на функция и произведението на функция по отношение на параметър, се оказва, че по този прост начин можем да намерим производни за всички наши тегла и да ги коригираме в зависимост от грешката, която наблюдаваме. Тоест, ако нямаме грешка в конкретен пример за обучение, тогава, съответно, производните ще бъдат равни на нула, което означава, че го класифицираме правилно и не е необходимо да правим нищо. Ако грешката в примера за обучение е много голяма, тогава трябва да направим нещо по въпроса, по някакъв начин да променим теглата, за да намалим грешката.

Конволюционни мрежи

Сега имаше малко математика, много повърхностна. След това по-голямата част от доклада ще бъде посветена на готини неща, които могат да се правят с помощта на невронни мрежи и които много хора по света правят сега, включително в Yandex.


Един от методите, който първи показа практическа употреба, са така наречените конволюционни невронни мрежи. Какво представляват конволюционните невронни мрежи? Да кажем, че имаме образ на Алберт Айнщайн. Много от вас вероятно също са виждали тази снимка. И тези кръгове са неврони. Можем да свържем неврон към всички пиксели на входното изображение. Но тук има голям проблем, че ако свържем всеки неврон с всички пиксели, тогава, първо, ще получим много тегла и това ще бъде много интензивна от изчислителна гледна точка операция, ще отнеме много време за изчисляване на такива сума за всеки от невроните, и второ, второ, ще има толкова много тегла, че този метод ще бъде много нестабилен за пренастройване, тоест до ефекта, когато в набора за обучение прогнозираме всичко добре, но в набора от примери които не са включени в набора за обучение, работим много зле, просто защото Превключихме към комплекта за обучение. Имаме твърде много тежести, твърде много свобода, можем да обясним всяка вариация в тренировъчния набор много добре. Затова те излязоха с различна архитектура, в която всеки от невроните е свързан само с малък квартал в изображението. Освен всичко друго, всички тези неврони имат еднакви тегла и този дизайн се нарича конволюция на изображението.


Как се провежда? Тук в центъра имаме така нареченото конволюционно ядро ​​- това е набор от тегла на този неврон. И ние прилагаме това ядро ​​на навиване към всички пиксели на изображението последователно. Прилагане - това означава, че просто претегляме пикселите в този квадрат по тегла и получаваме нова стойност. Можем да кажем, че трансформирахме изображението и го преминахме с филтър. Като във Photoshop, например, има някои филтри. Тоест, най-простият филтър е как можете да превърнете цветна картина в черно-бяла. И така минахме през този филтър и получихме трансформирано изображение.

Какво е предимството тук? Първото предимство е, че има по-малко тежести, по-бързи за броене и по-малко податливи на преквалификация. От друга страна, всеки от тези неврони се получава от някакъв детектор, както ще покажа по-късно. Да кажем, че ако имаме око някъде в изображението, тогава ще използваме същия набор от тежести, преминавайки през картината, за да определим къде е окото в изображението.


Тук трябва да има видео.
И едно от първите неща, към които беше приложена такава архитектура, беше разпознаването на числата като най-простите обекти.

Това беше приложено някъде през 1993 г. от Yann LeCun в Париж и тук сега ще има практически архивен запис. Качеството е така-така. Ето сега те предоставят ръкописни номера, натискат някакъв бутон и мрежата разпознава тези ръкописни номера. По принцип разпознава безпогрешно. Е, тези числа са естествено по-прости, защото са отпечатани. Но, например, в това изображение числата са много по-сложни. И честно казано, дори аз не мога да различа тези числа. Изглежда че има четворка отляво, но мрежата предполага. Тя дори разпознава тези видове числа. Това беше първият успех на конволюционните невронни мрежи и показа, че те действително са приложими на практика.


Каква е спецификата на тези конволюционни невронни мрежи? Тази операция на навиване е елементарна и ние изграждаме слоеве от тези навивки върху изображението, трансформирайки се все повече и повече в изображението. Така че всъщност получаваме нови функции. Основните ни характеристики бяха пиксели и след това трансформираме изображението и получаваме нови функции в ново пространство, което може да ни позволи по-ефективно да класифицираме това изображение. Ако си представите изображение на кучета, те могат да бъдат в различни пози, на различно осветление, на различни фонове и е много трудно да ги класифицирате директно въз основа само на пиксели. И чрез последователно получаване на йерархия от характеристики на нови пространства, можем да направим това.
Това е основната разлика между невронните мрежи и другите алгоритми за машинно обучение. Например в района компютърно зрениеПри разпознаването на изображения преди невронните мрежи беше възприет следният подход.

Когато вземете предметна област, например, трябва да определим между десет класа към кой от класовете принадлежи даден обект - къща, птица, човек, хората седяха много дълго време и мислеха какви знаци могат да бъдат намерени за разграничаване на тези изображения. Например, изображение на къща е лесно да се различи, ако имаме много геометрични линии, които по някакъв начин се пресичат. Птиците, например, имат много ярки цветове, така че ако имаме комбинация от зелено, червено и други характеристики, тогава вероятно изглежда повече като птица. Целият подход беше да се измислят възможно най-много такива характеристики и след това да се подадат на някакъв доста прост линеен класификатор, нещо подобно, който всъщност се състои от един слой. Има и по-сложни методи, но въпреки това те са работили върху тези знаци, които са измислени от човека. И с невронните мрежи се оказа, че можете просто да направите тренировъчна извадка, да не избирате никакви характеристики, просто да й подадете изображения като вход и тя сама ще се научи, ще избере онези характеристики, които са критични за класифицирането на тези изображения поради това йерархия.


Нека да разгледаме какви функции идентифицира невронната мрежа. На първите слоеве на такава мрежа се оказва, че мрежата избира много прости функции. Например градиентни преходи или няколко линии под различни ъгли. Тоест, той подчертава характеристики - това означава, че невронът реагира, ако види приблизително такова парче от изображението в прозореца на своето ядро ​​на навивка, в зоната на видимост. Тези знаци не са много интересни, можем сами да ги измислим.


Придвижвайки се по-дълбоко, виждаме, че мрежата започва да подчертава по-сложни характеристики, като кръгли елементи и дори кръгли елементи заедно с някои ивици.


И колкото по-далеч отиваме по невронната мрежа, колкото по-далеч сме от входа, толкова по-сложни стават характеристиките. Тоест, например, този неврон вече може да реагира на лицето на кучето, тоест той светва, когато види лицето на кучето, буркан, часовник или нещо друго в част от изображението.


За какво е всичко това? Не е много голяма по съвременните стандарти, но в продължение на три години беше най-голямата база данни с етикетирани изображения в света Image.net. Той има малко над милион изображения, които са разделени на хиляда класа. И е необходимо да се постигне най-висока точност на разпознаване на тази проба.


Този избор не е никак лесен. Просто трябва да разберете, че например хъски и сибирско хъски са два различни класа. Ако ми покажете тези две изображения, няма да мога да разбера кое е хъски и кое е сибирско хъски, но мрежата може да направи разликата. Там, по мое мнение, има повече от 300 породи кучета от различни класове и само няколко десетки вида териери. Тоест човек сигурно има някакви специфични познания в областта на кинологията, но обикновен човек не може.


Приложихме невронна мрежа към тази извадка от изображения и се оказа, че тя се справи много добре. Например, тук е показана картина, правилният клас е показан под картината, а мрежовите прогнози са показани тук в ленти. И колкото по-голяма е лентата, толкова по-уверена е мрежата, че тази прогноза е правилна. И виждаме, че правилно предсказва леопард, предсказва скутер, въпреки факта, че в изображението има хора освен скутера. Но тя вижда, че скутерът е доминиращият обект в изображението и прогнозира това. Да кажем, че дори предсказва отметка, въпреки факта, че цялото изображение се състои само от еднороден фон, а отметката е само някъде в самия, много ъгъл. Но тя разбира, че кърлежът е в основата на тази сцена. В същото време анализирането на грешките на невронна мрежа също е много интересно и ни позволява да идентифицираме например грешки в набора за обучение, тъй като този набор е маркиран от хора, а хората винаги правят грешки. Да кажем, че има снимка с далматинец и череша, на която невронната мрежа отговаря с голяма увереност, че това е далматинец. Е, наистина, гледаме това изображение и виждаме, че основният обект е далматин. Но всъщност има черешово дърво на преден план и човекът, който маркира това изображение по време на процеса на вземане на проби, по някакъв начин реши, че черешата е доминиращият обект в това изображение. И се оказва, че невронната мрежа е грешна според нашата метрика.

От друга страна, например, тук долу вдясно има някакво животно. Не знаех що за животно е. Маркировката казва, че това е мадагаскарска котка. Да се ​​доверим на маркировките. Но мрежата прави много разумно предположение какво може да е то. Тя казва, че е някаква маймуна. Струва ми се, че тези грешки са много разумни. Тоест, бих могъл също да предположа, че това е някаква маймуна, много необичайна и екзотична.


Основният показател за грешки на тази основа е така наречената Топ 5 грешка. Това е, когато вземем Топ 5 прогнози, първите пет прогнози, в които нашата мрежа е най-уверена, и ако правилният клас от маркирането е в тези пет прогнози, тогава казваме, че мрежата е правилна. И грешка е, когато първите ни пет прогнози не включват правилния клас. И преди ерата на невронната мрежа (това е 2010-2011 г., това е преди ерата на конволюционните невронни мрежи), виждаме, че грешката, разбира се, намаля, беше малко под 30%, а през 2011 г. беше дори леко по-ниска, но например през 2012 г., когато за първи път приложихме конволюционна невронна мрежа към този проблем, се оказа, че можем да намалим радикално грешката, тоест всички други методи не бяха способни на това, но невронната мрежа беше способна от това, а след това, когато интересът към невронните мрежи нарасна, се оказа, че можем да намалим тази грешка - това ще бъдат някои спекулации сега - до нивото, което човек може да постигне на тази база. Бяха проведени някои изследвания, не бяха много глобални, имаше петима души, които прекараха няколко дни в подготовка да разпознаят този вид изображения и получиха грешка някъде около 4,5% в тази извадка и невронната мрежа по време на пролетта или През лятото на 2015 г. този крайъгълен камък беше нарушен, което изненада всички, имаше много новини за това и т.н.


Това, което казах по-рано, е, че дълбочината на тази мрежа, тоест броят на тези функции, които прилагаме последователно към входното изображение, има значение. Например през 2013 г. победителят беше мрежа, която според мен имаше около 8 или 9 слоя последователна трансформация на изображението. И например през 2014 г. победител беше мрежа, в която има много слоеве и архитектурата като цяло е много по-сложна, но основното е, че е по-дълбока, тоест това означава, че прилагаме повече нелинейности към нашето входно изображение и поради това получаваме пробив в качеството.


За какво е всичко това? Не само разпознаване на изображения, но как можем да приложим това на практика? Например, тъй като вие и аз вече знаем, че на всеки слой получаваме някои нови функции, можем да вземем изходите от един от последните слоеве на невронната мрежа и да прочетем нещо, да кажем, че това са някои нови характеристики на изображението и потърсете подобни изображения въз основа на тези характеристики, тоест, грубо казано, опитайте се да намерите изображения със същите характеристики като входното. Например, има такава снимка, момчета играят баскетбол, НБА, всичко се случва и ние искаме да намерим подобни изображения.


Хвърляме тази снимка в услуга за подобни изображения и наистина намираме други изображения. Това са различни играчи, различни отбори. Но виждаме, че всички те са свързани с това как играчът дриблира топката на терена.


Всъщност това, за което говоря сега – алгоритмите за компютърно зрение – има много приложения, но има и много приложения в реалния свят, като например търсене на такива изображения, разпознаване. Но има и много анекдотични приложения. Например, група изследователи се опита да вземе достатъчно проста снимка, тя е тук отляво в горния ред на изображението и научете мрежата да стилизира това изображение като картини на различни велики художници, като Пабло Пикасо, Кандински, Винсент Ван Гог. Това, което правеха, беше по същество да дадат на входа обикновено изображение и картина и да кажат: "Искаме изходното изображение да бъде подобно на оригиналното изображение, но също така да има част от стила на този художник в него." И както виждаме, трансформира картините по доста интересен начин. И, от една страна, можем да разпознаем оригиналното изображение, както и чертите на автора. Както можете да видите, повечето от статиите, за които говоря, са от около 2014-2015 г. и можете също да влезете и да разгледате по-подробно.

Повтарящи се невронни мрежи

През последната година станаха популярни други модели на невронни мрежи: не конволюционните, които прилагаме към изображенията, а така наречените повтарящи се модели на невронни мрежи. Какво е?


Обикновено такава мрежа - мрежа с предварителна връзка - няма никаква памет. Тоест, да кажем, че изпратихме изображение в тази мрежа, тя разпозна нещо, изпратихме следващото изображение и то вече не си спомня нищо за предишното изображение. Тоест по никакъв начин не свързва последователността от изображения едно с друго. В много проблеми този подход не е много приложим, защото ако например вземем някакъв текст, да речем, текст на естествен език, някаква глава от книга, тогава този текст се състои от думи и тези думи образуват определен последователност. И бихме искали, например, да подадем тази дума към мрежата, след това да я подадем към следващата дума, но така че тя да не забравя за предишната дума, така че да си спомня за нея, да си спомня, че е била, и да анализира всяка следваща дума, като се вземе предвид предишната история. И за това има повтарящи се невронни мрежи. Както можете да видите тук, в допълнение към факта, че имаме път от входни характеристики до някакъв изход на невронната мрежа, ние също вземаме под внимание сигнали от тези вътрешни слоеве от предишни времеви стъпки, тоест изглежда, че помним информация и я връщаме обратно към себе си като вход. И такава повтаряща се невронна мрежа може да бъде разгърната.

Вдясно е само времеви преглед. x 0, x 1, x 2и така нататък. И мрежата все още помни предишното си състояние. И как анализира всеки входен обект зависи не само от този обект, но и от предишната история.


За какво се използва това? Едно от интересните приложения е, например, че искаме да генерираме текстове просто по букви. Да кажем, че първо инициализираме тази мрежа с някаква последователност, например дума, и след това искаме тя да ни изплюе само една буква на всяка следваща времева стъпка, тоест коя следваща буква иска да напише. Това е статия в LaTeX, която ви позволява да пишете едновременно, тоест това е език за програмиране за писане на статии като цяло. Ако тренирате мрежата по този начин и й позволите да генерира текст, тогава получавате поне смислени думи. Тоест тя не бърка думите. Изглежда, че дори синтаксисът на изреченията също има смисъл. Тоест имаме глагол, има субект, сказуемо в английски език, но семантиката на тези изречения, тоест тяхното значение, не винаги присъства. Изглежда, че от гледна точка на конструкцията всичко изглежда добре, но понякога има малко смисъл. Но това е много прост модел, той генерира един символ на преминаване. И, например, тя дори се опитва да начертае някои диаграми тук горе вдясно. Тъй като езикът за маркиране LaTeX позволява не само писане, но и рисуване, тя се опитва да нарисува нещо друго.


Или, например, можем директно да генерираме изходния код на програмите. Тази мрежа е обучена на изходния код на ядрото на операционната система Linux системии можем да видим, че изглежда генерира поне това, което изглежда като смислен код. Тоест имаме например функции, има различни условни изрази, цикли и т.н. Това изглежда има смисъл. Скоро самите мрежи ще пишат програми за нас, изглежда, но мисля, че това е още далеч и все още ще имаме нужда от програмисти, не само от мрежи.


Оказва се, че обучението на такива повтарящи се мрежи, ако просто ги представим като слоеве от неврони, е доста трудно. Трудно е, защото те много бързо забравят информация за предишни обекти, които сме им дали преди текущия. И понякога се нуждаем от тях, за да запомним връзките между обекти, които са много отдалечени в далечината. Да речем, ако си представим „Война и мир“, едно прекрасно произведение на Лев Толстой, тогава някои изречения там заемат няколко реда. И си спомням, че когато ги четях, в края на изречението вече бях забравил какво имаше в началото. И същият проблем се наблюдава при повтарящи се мрежи, те също забравят какво се е случило в началото на последователността, което не е това, което бихме искали. И за това те излязоха с по-сложна архитектура. Важното тук е, че имаме един неврон в центъра, който доставя своя изход към собствения си вход. Виждаме такава повтаряща се връзка. Освен всичко друго, имаме и отделни неврони, които контролират, те са врати, тоест те определят дали трябва да възприемаме текущата входяща информация. На входа има порта, тоест имаме някакъв вход и ние определяме дали трябва да се премине по-нататък или не. Или трябва да го игнорираме и просто да запазим спомените си. По същия начин има клапан за спомените: трябва ли да запазим спомените си в настоящия момент за предишните, или трябва да ги нулираме и да кажем, че изтриваме паметта си.

Откъде идва броят на невроните и какви са те?
- Невронът е просто суматор, който има някои входове и тегла, с които ги сумира по претеглен начин. Това е много прост елемент.

А количеството е добър въпрос, въпрос на експериментален подход. В различни задачи може да се нуждаем от различен брой слоеве от тези неврони и различен брой неврони в слоевете. Много зависи от задачата. Всеки път, когато се натъкнете на проблем, който искате да разрешите с помощта на невронни мрежи, трябва да проведете определен брой експерименти, за да разберете, че ако имате 100 неврона, това не е достатъчно. Учи се зле, има висока грешка в набора за обучение, необходими са повече неврони. Например 100 хиляди неврона са твърде много, ние нямаме такива изчислителни ресурси, да пресметне всичко, да я обучава. Тя се преквалифицира на снимачната площадка. Така че истината е някъде по средата. Да вземем например 50 хиляди и да получим оптималното качество на разпознаване.
Подобни мрежи, които могат да контролират с гейтове дали е необходимо да възприемат текущия вход и дали е необходимо да забравим някаква памет, която имаме в момента, сега се използват. И типичната архитектура на такава мрежа изглежда така.


Имаме входна последователност, например някои изречения, на входа на тази мрежа, а на изхода можем също да генерираме думи, използвайки същата повтаряща се мрежа. Тоест свиваме входната последователност и генерираме изходната последователност.

За какво е? Има много приложения, така че няма да говоря за всички. Едно приложение, което се проучва активно, е например преводът. Тоест на входа имаме изречение от един език, например от руски, а на изхода се опитваме да генерираме превод на това изречение на друг език, например на английски. Друго приложение е малко фантастично - това е, когато имаме някаква статия, която някой журналист ни е написал, и ние искаме някакво кратко резюме от тази статия, резюме. И ние подаваме цялата тази статия към входа на тази мрежа и след това тя ни изплюва малко съдържание на тази статия на изхода.

Или, например, можем да обучим някаква система, която да води диалог и да говори с нея. Например, можем да вземем големи регистрационни файлове на комуникация между хора и екипа за техническа поддръжка, тоест хора, които решават някои потребителски проблеми, свързани с ИТ, обучават такава мрежа и се опитват да комуникират с нея. Например, тук потребител има проблем, че не може да се свърже по мрежата с отдалечен терминал и потребителят пита какво трябва да направи и машината се опитва да разреши проблема му. Първо се опитва да разбере някои входни данни, тоест какво операционна системапотребителят, това, което вижда на екрана, се опитва да проведе различни диагностични тестове и предлага някои решения. И всичко това се прави с помощта на тази проста мрежа, която просто се състои от претегляне на различните входове, които са й дадени. Тук няма тайно знание или хората не са седели дълго, дълго време и са си мислили, че „Нека опитаме по някакъв начин, ако имаме една дума в началото на изречението, друга дума в края, как можем да ги свържем , анализирайте ги?“ Не, всичко това беше захранено с невронна мрежа, тя беше обучена и генерира толкова прекрасни диалози с човек.

В крайна сметка една невронна мрежа решава човешки проблем. Тя му казва, че трябва да вземе друг сертификат, нещо друго, да въведе парола и човекът е доволен.

Конволюционни + рекурентни мрежи

Можем да опитаме да свържем конволюционни мрежи с повтарящи се мрежи. За някои говорих отделно, за други отделно, но може да се опитаме да ги свържем.


Например задачата „картина към текст“. Да кажем, че имаме картина като вход и използваме конволюционна невронна мрежа, за да получим някакво компресирано представяне на тази картина, някои функции. След това подаваме тези знаци към входа на повтарящата се мрежа и тя генерира описание на това изображение за нас. Да кажем, че преди три години това изглеждаше просто невъзможно, но сега невронните мрежи просто описват изображението, какво е изобразено върху тях, какви обекти. И те не просто казват, че има такъв обект на снимката, но го описват в последователно изречение.

Тук трябва да има още едно видео. Нарича се Ходене с невронна мрежа. Беше публикувано само преди две-три седмици. Един от феновете на невронните мрежи, да го наречем така, реши да използва технологията „картина към текст“, просто се разхожда из родния си град Амстердам с телефон и снима нещо на камера, и се опитва да разбере какво ще направи мрежата да речем на обектите в околния свят. Тоест, не като гледа тези снимки в академичните колекции, които може и да не са много близки до реалността, а просто да заснеме какво се случва около него. Тук няма да се вижда много, но се надявам да видим.

Тук горе вляво е отговорът на мрежата на това, което вижда. Тя е тази, която казва „някакъв мъж в сако“. Генерира някои фрази. Тук тя казва, че това е някакъв знак, тя не разбира какво пише на него, но разбира, че това е знак. Тя казва, че това е човек, който върви по улицата, има някакви сгради наоколо, прозорец или врата, алея, тя казва, че има много велосипеди (но това е Амстердам, там има много велосипеди, така че тя често казва, че има велосипеди навсякъде). Казва, че има паркирана бяла лодка. И така нататък. Не бих казал, че това е специално подготвено изображение, човек просто върви и прави снимки и в реално време се оказва, че невронната мрежа се справя с разпознаването на това, което човекът снима.

Колко бързо тя разпознава това? И ако човек тича и не ходи, колко бързо разбира?
- Струва ми се, че честотата на кадрите е просто зададена.
- да Всъщност те измамих малко, защото, доколкото си спомням, това видео беше заснето с последваща обработка, тоест той го засне и след това го пусна локално на компютъра чрез разпознаването на тази мрежа. Но сега в много мобилни телефониИма графични видео карти, които са в компютъра, само че те са по-малки, по-малко мощни, но по-мощни от процесорите. И като цяло, с почти някакво кадрово вземане на проби в реално време, можете да разпознаете нещо с някаква малка мрежа, дори когато бягате, тоест опитайте се да го направите. Като цяло е възможно и мисля, че този въпрос ще бъде по-малко актуален след още няколко години, защото, както знаем, изчислителните възможности растат и вероятно някой ден това ще бъде възможно в реално време с най-големите мрежи. разпознавам нещо.

- Какъв е истинският смисъл на тази технология за разпознаване на изображения? Тоест виждам го сам.
- Тук ми казват - за хора със уврежданиятова има много смисъл. Второ, представете си как работи търсенето на изображения в Интернет. как?
- Ти ми каза точно за тези неща.
- Това е търсене на подобни изображения. И например, ако отидете на някакъв сървър като "Yandex.Pictures"...
- По ключови думи.
- да И в този момент, ако можем да генерираме тези ключови думи от изображението, тогава търсенето просто ще бъде по-добро. Тоест, можем да намерим снимки... В днешно време търсенето на изображения се основава най-вече на текстовете, прикачени към снимките. Тоест има някакъв текст около снимката. Когато поставим снимка в нашия индекс, казваме, че снимката има следния текст. Когато потребител въведе заявка, ние се опитваме да съпоставим думите и заявките с думите в текста. Но картинният текст е много сложно нещо; не винаги е подходящ за картината, до която се намира. Много хора се опитват да оптимизират печалбите си в Интернет, например, или нещо подобно и затова това не винаги е надеждна информация.

И ако можем надеждно да кажем какво е на снимката, тогава това ще бъде много полезно.

В това видео имаше доста сухи и кратки описания, тоест казахме, че „Ето лодка, паркирана някъде“ или „Ето купчина велосипеди, лежащи на асфалта“, но можем да обучим мрежата с малко по-различна извадка , например, върху извадка от приключенски романи и след това ще генерира много живи описания за всякакви снимки. Те няма да са напълно подходящи за тези снимки, тоест не напълно, но поне ще бъдат много забавни. Например, тук един човек просто кара ски надолу и в мрежата се казва, че имало човек, който живеел сам и не знаел докъде може да стигне и гонел, без да показва признаци на слабост. Тоест приключенски роман по една картина. Това беше направено и от група изследователи в отговор на казаното от тях: „Имате някои много сухи прогнози въз основа на картината, някак си мрежата не гори.“ Но те накараха мрежата да генерира интересни описания.

И тук, ако четете, има цяла драма как човек се качил на автобус, опитал се да стигне до някъде и след това сменил маршрута, качил се на кола, попаднал в Лондон и т.н.

Всъщност можем да променим тези два блока в нашата архитектура и да кажем, че „Нека първо поставим на първо място една повтаряща се мрежа, която ще възприема думи, а след това някакъв вид конволюционна мрежа, която няма да компресира нашето изображение, а обратното, да го разхлаби ." Тоест, има някакъв вектор на характеристики в някакво пространство и ние искаме да генерираме изображение, използвайки този вектор на характеристики. И един от моите колеги в Yandex каза, че „Бъдещето е тук, само малко замъглено за сега.“ И бъдещето наистина е тук, но леко замъглено. Тук можете да видите, че генерираме изображение въз основа на описанието. Например горе вляво е паркиран жълт автобус място за паркиране. Тук цветовете са трудни за възприемане, за съжаление, но въпреки това, ако заменим например думата „жълто“ с думата „червено“ в същото изречение, тогава цветът на това петно, което е автобус, наистина ще промяна, тоест ще стане червено. И същото нещо, ако уточним, че това е зелен автобус, тогава това място ще стане зелено. Наистина прилича малко на автобус.
Тук е представено същото: ако променим не само цвета, но и самите обекти, например „на масата е шоколадово блокче“ или „на масата има банан“, тогава ние не задаваме директно цвят на обекта, но е ясно, че блокчето шоколад обикновено е кафяво, а бананът обикновено е жълт и следователно, дори без директно да уточняваме цвета на обекта, нашата мрежа променя част от цвета на изображението.

Това е почти същото нещо, за което говорих по-рано. Например, стадо слонове минава през изгоряло поле, през поле със суха трева. И сухата трева обикновено е оранжева, а зелената трева обикновено е зелена. И тук можете да видите, че някои същества, не много различими, вървят върху нещо зелено, а тук върху нещо оранжево. Обикновено има повече от едно от тези същества. Ако се срещнем с вас след година или шест месеца, ще постигнем голям напредък в тази област.

Невронни мрежи + обучение с подсилване

Това, за което бих искал да говоря в заключение, е много интересната тема „Комбиниране на невронни мрежи с обучение за укрепване“. Някой от вас чел ли е какво е обучение с подсилване?

- Има такова нещо в психологията.
- Всъщност има отношение към психологията. Областта на „свързване на невронни мрежи с обучение за подсилване“ е най-биологично и психологически релевантната област на изследване на невронни мрежи.

Нека си представим, че имаме мишка и има лабиринт. И знаем, че в краищата на този лабиринт има сирене, вода, моркови и нищо в единия край на лабиринта. И знаем, че всеки от тези елементи има някаква полза за нашата мишка. Например една мишка много обича сирене, но по-малко обича моркови и вода, но ги обича еднакво, но не харесва абсолютно нищо. Тоест, ако тя стигне до края на лабиринта и не види нищо, тя ще бъде много разстроена.

Представете си, че в този прост лабиринт имаме само три състояния, в които може да бъде мишката - това S 1. Способен S 1тя може да избере да отиде наляво или надясно. И способен S 2И S 3тя също може да избере да тръгне наляво или надясно.


Можем да създадем прекрасно дърво, което ни казва, че ако мишката отиде наляво два пъти, тя ще получи някаква стойност, равна на четири конвенционални единици. Ако тя тръгне надясно и тогава няма значение дали ще тръгне наляво или надясно, след първия път, когато е тръгнала надясно, тя получава стойност две.

И задачата на обучението за подсилване в този най-прост случай е да се конструира функция Q, така че за всяко състояние Св нашия лабиринт или в някои от нашите среди ще каже: „Ако извършите това действие, например отидете наляво, тогава можете да получите такава и такава награда.“ За нас е важно да можем S 1когато все още не знаем какво предстои, така че тази функция казва, че „Ако отидете наляво в това състояние, можете да получите награда 4.“ Въпреки че, ако сме от S 1Хайде да отидем до S 2, тогава можем да получим награда 0. Но максималната награда, която можем да получим, когато правилната стратегияповедението е 4.


Това е отразено в тази формула. Нека си представим, че за някои от състоянията знаем за всички следващи състояния, които могат да бъдат достигнати от това, оптималната награда, тоест знаем оптималната политика на поведение. Тогава за текущото състояние можем много лесно да кажем какво действие трябва да извършим. Можем просто да разгледаме всички следващи състояния, да кажем в кое от следните състояния получаваме най-голяма награда - да се преструваме, че го знаем, въпреки че в действителност не е така - и да кажем, че трябва да отидем до състоянието, в което очакваната награда повече.


Има алгоритъм за тази функция, тъй като не знаем оптималната политика на поведение за следните състояния.


И този алгоритъм е доста прост, той е итеративен. Нека си представим, че имаме тази функция Q(s,a).


Имаме старото му значение и искаме да го актуализираме по някакъв начин, така че да оценява по-правилно текущия реален свят.

Какво да правим? За всички следващи състояния трябва да преценим къде можем да спечелим най-голям максимум, в кое от следните състояния. Виждате, че това все още не е оптимална оценка, това е просто някакво приближение на тази оценка. И това е разликата между оценката на наградата в текущото състояние и в следващото. Какво означава това?

Нека си представим, че сме в някакво състояние на нашата среда, например, нека просто приемем, че това е някакъв вид лабиринт, освен това с такива клетки, тоест ние сме тук в това състояние и искаме да намерим тази функция Q (S, нагоре), тоест намерете колко можем да придобием от тази полезност, ако тръгнем нагоре.

И да кажем, че в настоящия момент тази функция е равна на три. И в това състояние S, в което преминаваме след излизане С, представете си, че ако вземем макс. a" Q(S",a"), тоест да вземем максималното, което можем да получим от това състояние С, то е равно на 5, например. Очевидно имаме някакво несъответствие. Тоест, ние знаем, че от това състояние можем да получим награда 5, но в това състояние по някаква причина все още не знаем това, въпреки че ако отидем нагоре, можем да получим тази награда 5. И в този случай ние се опитваме това несъответствие елиминирайте, тоест вземете разликата между Q (S, нагоре)=3И max (a") ⁡ Q(S",a")=5и по този начин, в следващата итерация, ние увеличаваме стойността на това действие в това състояние. И така ние се учим итеративно.


За какво е всичко това? В тази задача, към която невронните мрежи първоначално нямаха нищо общо, това беше обучение с подсилване, където също бяха използвани класически методи на обучение и вие също можете да ги приложите.


Имаме игри на Atari. Не съм сигурен дали някой от вас ги е играл, защото дори аз не съм ги играл. Играх ги, но като възрастен. Много са различни. Най-известният от тях, който се намира долу вляво, се нарича Space Invaders, това е, когато имаме някаква совалка, група жълти извънземни нашественици се приближава към нас, а ние сме такова самотно зелено оръдие и се опитваме да застреляте всички тези жълти нашественици и по този начин да спечелите.
Има много прости игри, като пинг-понг, където трябва да се опитаме да не загубим топката в собствената си половина и да сме сигурни, че опонентът загуби топката в своята половина.


Какво можем да направим? Можем отново да вземем конволюционни невронни мрежи, да подадем изображението на играта като вход към тези конволюционни невронни мрежи и да се опитаме да получим като изход не класа на това изображение, а какво трябва да направим в тази игрова ситуация, тоест какво трябва да направим : отидете наляво, стреляйте, нищо не го правете и така нататък.

И ако направим такава доста стандартна мрежа, тоест има конволюционни слоеве, слоеве просто с неврони, и ние я обучаваме, стартираме я в тази среда - и в тази среда трябва правилно да разберем, че имаме акаунт и това акаунтът е точно награда - ако стартираме тази игра и я оставим да научи малко, тогава ще получим система, която може, както ще покажа по-късно, дори да победи човек.

Тоест, сега те са на ниво значително по-високо от най-добрия човек, който играе тази игра. И виждаме, че тази игра не е много проста, тук трябва да се скриете зад тези малки червени неща. Те ни защитават. И когато видим бластер да лети към нас, по-добре е да избягваме, да се скрием зад тях, след това да се върнем и да продължим да стреляме по онези жълти пиксели отгоре. Не изглежда много впечатляващо, чувствам. Но всъщност беше необходима доста работа, за да се постигне такъв пробив. И ще се опитам да ви кажа защо е наистина впечатляващо.

Дори преди използването на невронни мрежи в тази задача имаше много методи, които бяха създадени специално за всяка от тези игри и те работеха много добре. Те също понякога бият човек и т.н. Но, както в областта на разпознаването на изображения, хората трябваше да работят много усилено, за да измислят определени печеливши стратегии в тази игра.

Те взеха всяка игра, например Space Invaders или Ping Pong, обмисляха дълго време как да се движат, измислиха някои знаци, казаха, че ако топката лети под такъв ъгъл и с такава скорост, тогава трябва да се развием такава скорост, да го приеме отсреща и така да отскочи все пак неудобно за противника. И така нататък. И за всяка игра това трябваше да се измисли отделно. И сега те взеха една и съща архитектура на невронна мрежа, пуснаха я в различни игри и във всички тези игри тази същата архитектура, макар и с различно тегло - във всяка игра имаше различни тежести, но същата архитектура - успя да победи почти всички тези методи, които бяха измислени в течение на 10–20 години.

Тук синьото е, грубо казано, колко точки отбелязва невронната мрежа, сивото е състоянието на изкуството, което невронните мрежи могат да постигнат, а процентите в колоните са с колко процента невронната мрежа играе по-добре от човек. Тоест можем да видим, например, че една невронна мрежа играе флипер 2500% по-добре от човек. Невронната мрежа играе бокс, различни игри, състезания, тенис, пинг-понг, дори Space Invaders по-добре от човек. Освен това трябва да разберете, че Space Invaders е много сложна игра. Ако погледнем тук, то е тук и това сиво нещо е състоянието на техниката, което беше преди, грубо казано. Да кажем, че беше много зле. Това означава, че тази игра е много трудна и с помощта на невронни мрежи е възможно не само да го победите, но и да победите човек.

Всъщност показвам само горната част на тази диаграма, все още има част от тази диаграма в долната част, където успехът на невронната мрежа върви в низходящ ред, но сега в повечето игри на Atari с нови резултати мрежата печели над човешкото.
Разбира се има много предизвикателни игриза мрежа, където трябва да имате паметта, за която говорих, там могат да се приложат и повтарящи се мрежи и тогава резултатите ще се подобрят значително.

Благодаря за вниманието. Надявам се, че все още имате въпроси.

Единственото нещо, което исках да кажа е, че в интернет има безумно количество различни материали за невронни мрежи, много материали под формата на научни статии, които вероятно ще бъдат трудни за разбиране от нулата. Но въпреки това има много добри уроци. В повечето случаи са на английски. Има много добър курс на Виктор Лемпицки в ShAD за възрастни. Има например втора връзка - така нареченото Ръководство на хакерите за невронни мрежи. Това е урок без математика, само с програмиране. Тоест там, например, на езика Python е показано как се правят най-простите мрежи, как се обучават, как се събират образци и т.н. Има много софтуер, които реализират невронни мрежи и са много лесни за използване. Тоест, вие, грубо казано, просто създавате неврони, създавате слоеве, сглобявате невронна мрежа от тухли и след това я използвате. И ви уверявам, че всеки от вас може да направи това - опитайте да експериментирате. Много е интересно, забавно и полезно. Благодаря за вниманието.

Тагове: Добавете тагове

Според пресслужбата на компанията Yandex, използвайки невронна мрежа, тя успя значително да увеличи разделителната способност и да подобри качеството на изображението с десет Съветски карикатури, които са сред най-известните.

По време на последните годиниУчените създават различни невронни мрежи, те са получили тази възможност благодарение на увеличаването на изчислителната мощност на компютрите и развитието на математиката. Невронните мрежи са системи с изкуствен интелект, които могат да решават нетривиални проблеми. Някои такива сложни невронни мрежи дори могат да мислят извън кутията, като по този начин независимо създават нови произведения на изкуството и разработват иновативни технологии.

Невронната мрежа от Yandex се нарича DeepHD. Преди това вече се е показал добре, когато е бил използван за подобряване на качеството на филми, разказващи за Великата отечествена война. Тогава седем филма бяха подложени на промени. Сега е ред на съветската анимация: „Снежната кралица“, „Аленото цвете“, „Коте на име Уф“, „Умка търси приятел“, „Палечка“ и др.

Специална система за изкуствен интелект се занимава изключително с подобряването на качеството и не прави абсолютно никакви промени в рамките на анимационни филми. Нейната работа е да възстанови детайли, които са били замислени от художника, но са били изгубени, докато анимационните филми са били прехвърляни от филм на филм. цифров формат. Страницата, където има описание на невронната мрежа DeepHD, говори за нейните характеристики. Има общо четири такива функции: премахване на дефекти и шум, запазване на детайлите при уголемяване, отлична работа с видео потоци и отделни изображения, възможност за работа в реално време.

Основата на технологията DeepHD са генеративни състезателни невронни мрежи. В началния етап една невронна мрежа се занимава с отстраняване на дефекти, които се появяват във видеото по време на компресирането му. Вторият етап се осъществява от различна невронна мрежа, която е отговорна за увеличаването на изображението, както и за поддържането на яснотата на детайлите по време на такива промени. Можете да се запознаете с подробната работа на невронната мрежа DeepHD в официалния блог на нейните създатели.

Заслужава да се отбележи, че в DeepHD зрителите днес имат достъп не само до стари филми и анимационни филми, но и до нови игрални и анимационни филми. Можете да ги намерите чрез заявка за търсенес добавянето на "DeepHD". Днес дори можете да гледате телевизионни канали с по-високо качество, това стана достъпно благодарение на способността на невронната мрежа да работи в реално време.

Хареса ли ви тази новина? Тогава Натиснете.

Днес обявихме нов алгоритъм за търсене „Палех“. Той включва всички подобрения, върху които работим напоследък.

Например търсенето сега използва невронни мрежи за първи път, за да намира документи не по думите, които се използват в заявката и в самия документ, а по значението на заявката и заглавието.

В продължение на много десетилетия изследователите се борят с проблема със семантичното търсене, при което документите се класират въз основа на семантичното значение на заявка. И сега се превръща в реалност.

В тази публикация ще се опитам да говоря малко за това как го направихме и защо това не е просто още един алгоритъм за машинно обучение, а важна стъпка в бъдещето.

Изкуствен интелект или машинно обучение?

Почти всеки знае, че модерен търсачкиработа с помощта на машинно обучение. Защо трябва да говорим отделно за използването на невронни мрежи за нейните задачи? И защо едва сега, след като шумът около тази тема не стихва от няколко години? Ще се опитам да ви разкажа за историята на проблема.

Интернет търсенето е сложна система, появила се преди много време. Първоначално беше просто търсене на страници, след това се превърна в решаване на проблеми, а сега се превръща в пълноправен помощник. Колкото по-голям е интернет и колкото повече хора има, толкова по-високи са техните изисквания, толкова по-трудно трябва да стане търсенето.

Ерата на наивното търсене

Отначало имаше само търсене на думи - обърнат индекс. Тогава имаше твърде много страници, те трябваше да бъдат класирани. Започнаха да се вземат предвид различни усложнения - честота на думите, tf-idf.

Ерата на връзките

Тогава имаше твърде много страници по всякаква тема, настъпи важен пробив - те започнаха да вземат под внимание връзките, появи се PageRank.

Ерата на машинното обучение

Интернет стана важен от търговска гледна точка и се появиха много измамници, които се опитваха да заблудят простите алгоритми, които съществуваха по онова време. Настъпи втори важен пробив - търсачките започнаха да използват знанията си за поведението на потребителите, за да разберат кои страници са добри и кои не.

Някъде на този етап човешкият ум вече не беше достатъчен, за да разбере как да класира документите. Настъпи следващият преход - търсачките започнаха да използват активно машинно обучение.

Един от най-добрите алгоритми за машинно обучение е изобретен в Yandex - Matrixnet. Можем да кажем, че класирането се подпомага от колективната интелигентност на потребителите и „мъдростта на тълпата“. Информацията за сайтовете и поведението на хората се преобразува в много фактори, всеки от които се използва от Matrixnet за изграждане на формула за класиране. Всъщност формулата за класиране се пише машинно (оказа се около 300 мегабайта).

Но „класическото“ машинно обучение има ограничение: то работи само там, където има много данни. Малък пример. Милиони потребители въвеждат заявката [VKontakte], за да намерят същия сайт. В този случай поведението им е толкова силен сигнал, че търсенето не принуждава хората да гледат резултатите, а подсказва адреса веднага при въвеждане на заявката.

Но хората са по-сложни и искат все повече и повече от търсенето си. Сега до 40% от всички заявки са уникални, тоест не се повтарят поне два пъти през целия период на наблюдение. Това означава, че търсенето няма достатъчно данни за поведението на потребителите и Matrixnet е лишен от ценни фактори. Такива заявки в Yandex се наричат ​​„дълга опашка“, тъй като заедно те съставляват значителна част от посещенията в нашето търсене.

Ерата на изкуствения интелект

И сега е време да поговорим за последния пробив: преди няколко години компютрите станаха достатъчно бързи и имаше достатъчно данни за използване на невронни мрежи. Базираните на тях технологии се наричат ​​още машинен интелект или изкуствен интелект – тъй като невронните мрежи са изградени по подобие на невроните в нашия мозък и се опитват да подражават на работата на някои негови части.

Машинният интелект е много по-добър от по-старите методи при задачи, които хората могат да изпълняват, като разпознаване на реч или разпознаване на образи в изображения. Но как това помага на търсенето?

Като правило, нискочестотните и уникални заявки са доста трудни за търсене и е много по-трудно да се намери добър отговор за тях. Как да го направим? Нямаме съвети от потребителите (кой документ е по-добър и кой е по-лош), така че за да разрешим проблема с търсенето, трябва да се научим да разбираме по-добре семантичното съответствие между два текста: заявката и документа.

Лесно е да се каже

Строго погледнато, изкуствените невронни мрежи са един от методите за машинно обучение. Съвсем наскоро им беше посветена лекция в рамките на Малкия ШАД. Невронните мрежи показват впечатляващи резултати в областта на анализа на естествена информация - звук и изображения. Това се случва вече няколко години. Но защо те не са били използвани толкова активно в търсенията досега?

Простият отговор е, защото да говорим за смисъл е много по-трудно, отколкото да говорим за изображение в картина или как да превърнем звуците в декодирани думи. Въпреки това, в търсенето на смисъл, изкуственият интелект наистина започна да идва от областта, в която отдавна е цар - търсенето на изображения.

Няколко думи за това как работи това при търсене на изображения. Вземате изображение и използвате невронни мрежи, за да го трансформирате във вектор в N-измерното пространство. Вземете заявката (която може да бъде под формата на текст или под формата на друга снимка) и направете същото с нея. И след това сравнявате тези вектори. Колкото по-близо са един до друг, толкова повече картината отговаря на заявката.

Добре, ако работи в изображения, защо не приложите същата логика към търсенето в мрежата?

Дяволът е в технологиите

Нека формулираме проблема по следния начин. Имаме потребителска заявка и заглавие на страницата на входа. Трябва да разберете доколко те съответстват един на друг по смисъл. За да направите това, е необходимо да представите текста на заявката и текста на заглавието под формата на такива вектори, чието скаларно умножение ще бъде по-голямо, колкото по-подходящ е документът с даденото заглавие за заявката. С други думи, искаме да обучим невронна мрежа по такъв начин, че за текстове, които са близки по смисъл, да генерира подобни вектори, но за семантично несвързани заявки и заглавия векторите трябва да са различни.

Сложността на тази задача се състои в избора на правилната архитектура и метод за обучение на невронната мрежа. От научни публикации са известни доста подходи за решаване на проблема. Може би най-много прост методтук е представянето на текстове под формата на вектори с помощта на алгоритъма word2vec (за съжаление, практическият опит показва, че това е доста неудачно решение на разглеждания проблем).

DSSM

През 2013 г. изследователи от Microsoft Research описват своя подход, наречен Deep Structured Semantic Model.

Входът на модела е текстовете на заявките и заглавките. За намаляване на размера на модела върху тях се извършва операция, която авторите наричат ​​хеширане на думи. Към текста се добавят начални и крайни маркери, след което той се разделя на буквени триграми. Например, за заявката [palekh] ще получим триграмите [pa, ale, lekh, ex]. Тъй като броят на различните триграми е ограничен, можем да представим текста на заявката като вектор с размер от няколко десетки хиляди елемента (размера на нашата азбука на 3-та степен). Елементите на вектора, съответстващи на триграмите на заявката, ще бъдат равни на 1, а останалите - на 0. По същество ние отбелязваме въвеждането на триграми от текста в речник, състоящ се от всички известни триграми. Ако сравните такива вектори, можете да разберете само за наличието на идентични триграми в заявката и заглавката, което не е от особен интерес. Следователно сега те трябва да бъдат преобразувани в други вектори, които вече ще имат семантичните свойства на близост, от които се нуждаем.

След входния слой, както се очаква в дълбоки архитектури, има няколко скрити слоя както за заявката, така и за заглавката. Последният слой е с размер 128 елемента и служи като вектор, който се използва за сравнение. Резултатът от модела е резултат от скаларно умножение на последния хедър и векторите на заявката (за да бъдем точни, се изчислява косинусът на ъгъла между векторите). Моделът е обучен по такъв начин, че за положителните примери за обучение изходната стойност е голяма, а за отрицателните е малка. С други думи, чрез сравняване на векторите на последния слой, можем да изчислим грешката на прогнозиране и да модифицираме модела, така че грешката да намалее.

Ние от Yandex също активно изследваме модели, базирани на изкуствени невронни мрежи, така че се заинтересувахме от модела DSSM. След това ще говорим за нашите експерименти в тази област.

Теория и практика

Характерно свойство на описаните в научната литература алгоритми е, че те не винаги работят предварително. Факт е, че „академичният“ изследовател и индустриалният изследовател са в значително различни условия. Отправната точка (базова линия), с която авторът на научна публикация сравнява решението си, трябва да бъде някакъв добре познат алгоритъм - това гарантира възпроизводимост на резултатите. Изследователите вземат резултатите от публикуван по-рано подход и показват как те могат да бъдат надминати. Например, авторите на оригиналния DSSM сравняват своя модел, използвайки NDCG метриката с BM25 и LSA алгоритмите. В случай на приложен изследовател, който се занимава с качеството на търсене в реално търсачка, отправната точка не е един конкретен алгоритъм, а цялата класация като цяло. Целта на разработчика на Yandex не е да изпревари BM25, а да постигне подобрение на фона на целия набор от по-рано въведени фактори и модели. По този начин базовата линия за изследовател в Yandex е изключително висока и много алгоритми, които имат научна новост и показват добри резултати с „академичен“ подход, се оказват безполезни на практика, тъй като всъщност не подобряват качеството на търсенето.

В случая с DSSM се натъкнахме на същия проблем. Както често се случва, в „бойни“ условия точното прилагане на модела от статията показа доста скромни резултати. Бяха необходими редица значителни „модификации на файлове“, преди да успеем да получим резултати, които са интересни от практическа гледна точка. Тук ще говорим за основните модификации на оригиналния модел, които ни позволиха да го направим по-мощен.

Голям входен слой

В оригиналния DSSM модел входният слой е набор от буквени триграми. Размерът му е 30 000. Триграмният подход има няколко предимства. Първо, има сравнително малко от тях, така че работата с тях не изисква големи ресурси. Второ, използването им улеснява идентифицирането на правописни грешки и неправилно изписани думи. Нашите експерименти обаче показаха, че представянето на текстове като „чанта“ от триграми значително намалява изразителната сила на мрежата. Затова радикално увеличихме размера на входния слой, включително, в допълнение към буквените триграми, още около 2 милиона думи и фрази. По този начин ние представяме текстовете на заявката и заглавието като съвместна „чанта“ от думи, биграми на думи и триграми на букви.

Използването на голям входен слой води до увеличаване на размера на модела, времето за обучение и изисква значително повече изчислителни ресурси.

Трудно за научаване: как една невронна мрежа се бори сама със себе си и се учи от грешките си

Обучението на оригиналния DSSM се състои от излагане на мрежата на голям брой положителни и отрицателни примери. Тези примери са взети от резултати от търсене (очевидно за това е използвана търсачката Bing). Положителни примери са заглавията на кликнати документи за търсене, отрицателни примери са заглавията на документи, върху които не е кликнато. Този подход има някои недостатъци. Факт е, че липсата на щракване не винаги означава, че документът е неподходящ. Обратното твърдение също е вярно – наличието на клик не гарантира актуалността на документа. По същество, като се учим по начина, описан в оригиналната статия, ние се стремим да прогнозираме привлекателността на заглавията, при условие че те ще присъстват в резултатите от търсенето. Това, разбира се, също не е лошо, но има доста косвено отношение към основната ни цел - да се научим да разбираме семантичната близост.

По време на нашите експерименти открихме, че резултатът може да бъде значително подобрен, ако използваме различна стратегия за избор на отрицателни примери. За да постигнем нашата цел, добри отрицателни примери са тези документи, които гарантирано нямат отношение към заявката, но в същото време помагат на невронната мрежа да разбере по-добре значението на думите. Откъде мога да ги взема?

Първи опит

Първо, нека просто вземем заглавието на произволен документ като отрицателен пример. Например, за заявката [Палехска картина] произволно заглавие може да бъде „Правила трафик 2016 г. Руска федерация“. Разбира се, невъзможно е напълно да се изключи възможността документ, произволно избран от милиарди, да бъде подходящ за заявката, но вероятността за това е толкова малка, че може да бъде пренебрегната. Така много лесно можем да получим голям брой негативни примери. Изглежда, че сега можем да научим нашата мрежа точно на това, което искаме - да различаваме добри документи, които интересуват потребителите, от документи, които нямат нищо общо със заявката. За съжаление моделът, обучен на такива примери, се оказа доста слаб. Невронната мрежа е умно нещо и винаги ще намери начин да опрости работата си. В този случай тя просто започна да търси едни и същи думи в заявки и заглавия: да - добра двойка, не - лоша. Но ние можем да направим това сами. За нас е важно мрежата да се научи да различава неочевидните модели.

Още един опит

Следващият експеримент беше да се добавят думи от заявката към заглавията на отрицателните примери. Например за заявката [Палехска картина] произволното заглавие изглеждаше като [Пътни правила 2016 на Руската федерация картина]. Невронната мрежа имаше малко повече затруднения, но въпреки това бързо се научи да разграничава добре естествените двойки от тези, компилирани ръчно. Стана ясно, че с такива методи няма да постигнем успех.

Успех

Много очевидни решения стават очевидни едва след като бъдат открити. Случи се и този път: след известно време се разбра, че По най-добрия начингенерирането на негативни примери означава принуждаване на мрежата да се „бори“ срещу себе си, като се учи от собствените си грешки. Сред стотици произволни заглавия избрахме това, което настоящата невронна мрежа смята за най-добро. Но тъй като това заглавие все още е произволно, много вероятно е да не съответства на заявката. И това са заглавията, които започнахме да използваме като негативни примери. С други думи, можете да покажете на мрежата най-добрите произволни заглавки, да я обучите, да намерите нови най-добри произволни заглавки, да покажете отново мрежата и т.н. Повтаряйки тази процедура отново и отново, видяхме как качеството на модела забележимо се подобрява и все по-често най-добрите от произволните двойки стават подобни на реални положителни примери. Проблемът беше решен.

Подобна схема на обучение обикновено се нарича твърд негативен майнинг в научната литература. Трябва също да се отбележи, че подобни решения са широко разпространени в научната общност за генериране на реалистично изглеждащи изображения; този клас модели се нарича Generative Adversarial Networks.

Различни цели

Изследователи от Microsoft Research използваха щраквания върху документи като положителни примери. Въпреки това, както вече беше споменато, това е доста ненадежден сигнал за семантичното съответствие на заглавката с заявката. В крайна сметка нашата задача не е да класираме най-посещаваните сайтове в резултатите от търсенето, а наистина да намерим полезна информация. Затова се опитахме да използваме други характеристики на потребителското поведение като цел за обучение. Например, един от моделите прогнозира дали потребителят ще остане на сайта или ще напусне. Друг е колко дълго ще остане на сайта. Както се оказва, можете значително да подобрите резултатите, ако оптимизирате такъв целеви показател, който показва, че потребителят е намерил това, от което се нуждае.

печалба

Добре, какво ни дава това на практика? Нека сравним поведението на нашия невронен модел и прост текстов фактор, базиран на съответствието между думите на заявката и текста - BM25. Дойде при нас от онези времена, когато класирането беше просто и сега е удобно да го използвате като основно ниво.

Нека вземем за пример заявката [Book of Kells] и да видим какво значение имат факторите за различните заглавия. За да контролираме това, нека добавим явно неуместен резултат към списъка със заглавки.

Всички фактори в Yandex са нормализирани към интервала. Очаква се BM25 да има високи стойности за заглавия, които съдържат думи за заявка. И е доста предсказуемо този фактор да получи нулева стойност за заглавия, които нямат общи думи със заявката. Сега забележете как се държи невронният модел. Той еднакво добре разпознава връзката между заявка както с руското заглавие на съответната страница в Wikipedia, така и със заглавието на статия на английски! Освен това изглежда, че моделът е „видял“ връзката между заявката и заглавието, което не споменава Книгата на Келс, но съдържа подобна фраза („Ирландски евангелия“). Стойността на модела за нерелевантно заглавие е значително по-ниска.

Сега нека видим как ще се държат нашите фактори, ако преформулираме искането, без да променяме значението му: [Евангелие от Келс].

За BM25 преформулирането на заявката се превърна в истинска катастрофа - факторът стана нула за съответните заглавия. И нашият модел демонстрира отлична устойчивост на преформулиране: уместните заглавия все още имат висока факторна стойност, докато неуместното заглавие все още има ниска факторна стойност. Изглежда, че това е точно поведението, което очаквахме от нещо, което твърди, че може да „разбира“ семантиката на текст.

Друг пример. Искане [история, в която пеперуда е била смачкана].

Както виждаме, невронният модел успя да оцени високо заглавието с правилния отговор, въпреки пълната липса на общи думи със заявката. Освен това ясно се вижда, че заглавия, които не отговарят на заявката, но все още са свързани по смисъл, получават доста висока стойност на фактора. Сякаш нашият модел е „прочел“ историята на Бредбъри и „знае“, че това е точно това, за което той говори в заявката!

Какво следва?

Ние сме в самото начало на едно дълго и много интересно пътуване. Очевидно невронните мрежи имат голям потенциал за подобряване на класирането. Вече са ясни основните направления, които се нуждаят от активно развитие.

Например, очевидно е, че заглавието съдържа непълна информация за документа и би било добре да се научите как да изградите модел, като използвате пълния текст (както се оказа, това не е напълно тривиална задача). Освен това можем да си представим модели, които имат значително по-сложна архитектура от DSSM - има причина да вярваме, че по този начин ще можем да се справим по-добре с някои естествени езикови конструкции. Виждаме нашата дългосрочна цел като създаване на модели, които могат да „разберат“ семантичното съответствие между заявки и документи на ниво, сравнимо с това на човек. Ще има много трудности по пътя към тази цел - толкова по-интересно ще бъде преминаването през нея. Обещаваме да говорим за нашата работа в тази област. Следете следващите публикации.



Свързани публикации