Работа с невронни мрежи: контролен списък за отстраняване на грешки

Работа с невронни мрежи: контролен списък за отстраняване на грешки

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

Тази статия е за алгоритъм за отстраняване на грешки във вашите невронни мрежи.

Skillbox препоръчва: Практически курс Разработчик на Python от нулата.

Напомняме ви: за всички читатели на "Habr" - отстъпка от 10 000 рубли при записване във всеки курс Skillbox, използвайки промоционалния код на "Habr".

Алгоритъмът се състои от пет етапа:

  • лесен старт;
  • потвърждаване на загуби;
  • проверка на междинни резултати и връзки;
  • параметрична диагностика;
  • контрол на работата.

Ако нещо ви се струва по-интересно от останалите, можете веднага да преминете към тези раздели.

Лесен старт

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

Лесно начало е да създадете опростен модел и да го обучите върху един набор (точка) от данни.

Първо създаваме опростен модел

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

Ние обучаваме модела върху един набор (точка) от данни

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

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

Оценка на загубите

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

Важно е да сте внимателни към първоначалните загуби. Проверете колко близо е действителният резултат до очаквания резултат, ако моделът е започнал с произволно предположение. IN Работата на Андрей Карпати предполага следното:: „Уверете се, че получавате резултата, който очаквате, когато започнете с малък брой параметри. По-добре е незабавно да проверите загубата на данни (със степен на регулиране, зададена на нула). Например, за CIFAR-10 с класификатор Softmax очакваме първоначалната загуба да бъде 2.302, тъй като очакваната дифузна вероятност е 0,1 за всеки клас (тъй като има 10 класа), а загубата Softmax е отрицателната логаритмична вероятност на правилния клас като − ln (0.1) = 2.302.“

За двоичния пример подобно изчисление просто се прави за всеки от класовете. Ето например данните: 20% 0 и 80% 1. Очакваната първоначална загуба ще бъде до –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Ако резултатът е по-голям от 1, това може да показва, че теглата на невронната мрежа не са правилно балансирани или данните не са нормализирани.

Проверка на междинни резултати и връзки

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

  • неправилни изрази за актуализации на gradle;
  • не се прилагат актуализации на теглото;
  • експлодиращи градиенти.

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

Освен това е необходимо да се следят стойностите на функциите за активиране, теглата и актуализациите на всеки от слоевете. Например, величината на актуализациите на параметрите (тегла и отклонения) трябва да бъде 1-e3.

Има феномен, наречен „Dying ReLU“ или "проблем с изчезващ градиент", когато ReLU невроните ще изведат нула, след като са научили голяма отрицателна стойност на отклонение за своите тегла. Тези неврони никога не се задействат отново в никоя точка от данните.

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

Файзан Шейх посочва три основни метода за визуализиране на невронна мрежа:

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

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

Работа с невронни мрежи: контролен списък за отстраняване на грешки

Параметрична диагностика

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

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

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

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

Пакетно нормализиране - използва се за нормализиране на входните данни на всеки слой, което ни позволява да решим проблема с вътрешното ковариатно изместване. Ако използвате Dropout и Batch Norma заедно, вижте тази статия.

Стохастичен градиентен спад (SGD) — има няколко разновидности на SGD, които използват инерция, адаптивни скорости на обучение и метода на Нестеров. Нито един от тях обаче няма явно предимство по отношение както на ефективността на обучението, така и на обобщението (подробности тук).

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

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

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

Важно: Ако използвате както отпадане, така и пакетна нормализация, внимавайте за реда на тези операции или дори да ги използвате заедно. Всичко това все още активно се обсъжда и допълва. Ето две важни дискусии по тази тема на Stackoverflow и arxiv.

Контрол на работата

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

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

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

Работа с невронни мрежи: контролен списък за отстраняване на грешки

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

Skillbox препоръчва:

Източник: www.habr.com

Добавяне на нов коментар