Как работи невронната мрежа: алгоритми, обучение, функции за активиране и загуба

Как работи невронната мрежа

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

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

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

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

обучение

Трите най-важни компонента на изкуствена невронна мрежа са:

  • Входен слой;
  • Скрити (изчислителни) слоеве;
  • Изходен слой.

Обучението на невронни мрежи протича на два етапа:

  • Директно размножаване
  • Обратно размножаване

При директно разпространение се предвижда отговор. Специалността на обратното разпространение е свеждането до минимум на грешката между действителния отговор и прогнозирания.

Директно размножаване

Нека да дадем началните тегла на случаен принцип:

  • w1
  • w2

След това нека умножим входящите данни по тежестите, за да създадем скрития слой:

  • h1 = (x1 * w1) + (x2 * w1)
  • h2 = (x1 * w2) + (x2 * w2)
  • h3 = (x1 * w3) + (x2 * w3)

Нелинейната функция (функция за активиране) прехвърля изходните данни от скрития слой, за да получи мрежовия изход:

  • y_ = fn (h1, h2, h3)

Обратно размножаване

  • Общата грешка (total_error) е разликата между очакваната стойност "y" (от обучителния набор) и получената стойност "y_" (т.е. тя се изчислява във фазата на директно разпространение), през която преминава функцията за загуба (функция на разходите).
  • Частичното производно на грешката се изчислява за всяко тегло. Счита се, че тези частични диференциали отразяват приноса на всяко тегло към общата грешка (total_loss).
  • В следващата фаза тези диференциали се умножават по число, наречено скорост на обучение или скорост на обучение (η).

Накрая резултатът се изважда от съответните тежести.

Резултатът е следните актуализирани тегла:

  • w1 = w1 - (η * ∂ (грешка)/∂ (w1))
  • w2 = w2 - (η * ∂ (грешка)/∂ (w2))
  • w3 = w3 - (η * ∂ (грешка)/∂ (w3))

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

Обратното размножаване може да се сравни с серията Тейлър: крайните резултати са еднакви. Разликата обаче е, че се оптимизира не безкрайният ред, а първият му член.

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

Частични производни

Частичните производни могат да бъдат изчислени. Следователно приносът за грешка за всяко тегло е известен. Необходимостта от деривации е очевидна. Като пример може да се посочи невронна мрежа, която се опитва да определи оптималната скорост на безпилотно превозно средство. Ако автомобилът определи, че пътува по-бързо или по-бавно от необходимата скорост, невронната мрежа регулира скоростта, като ускорява или забавя автомобила. Какво се ускорява/забавя? Получените скорости.

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

Например, децата получават задачата да хвърлят стрела в целта, като се насочат към центъра. Ето резултатите:

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

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

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

Хиперпараметри

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

Скорост на обучение

Скоростта на обучение е един от много важните хиперпараметри. Ако скоростта на обучение е бавна, невронната мрежа не постига оптимални резултати дори след непрекъснато обучение. Резултатите могат да бъдат представени както следва:

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

Функция за активиране

Функцията за активиране е един от най-мощните инструменти, тъй като влияе върху мощността, която се възлага на невронни мрежи. Отчасти той определя кои неврони се активират; H. каква информация се предава на следващи смени.

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

Функция за загуба

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

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

Функцията на загубите е едномерна, а не векторна, тъй като измерва колко добре функционира невронната мрежа като цяло.

Някои известни функции за загуба са:

  • Квадратичен (средно квадратно отклонение)
  • Кръстосана ентропия
  • Експоненциални стойности (AdaBoost/Adaptive Boosting)
  • Дивергенция на Kullback-Leibler или печалба на информация.

Средноквадратичното отклонение е най-простата и най-често използваната функция на загубите. Той е настроен по следния начин:

Има две условия, на които трябва да отговаря функцията на загуба в невронната мрежа:

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

Дълбоки невронни мрежи

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

Някои подробности за дълбокото обучение:

  • Каскада се използва за извличане и трансформиране на характеристики от много обработващи слоеве (нелинейни); тръбопровод като последователно предаван поток.
  • Дълбокото обучение се основава на учебните характеристики (представяне на информация) в данните без контролирано обучение. Функциите на по-високо ниво, които са в последните слоеве, се получават от функциите на по-ниското ниво, които са в началните слоеве.
  • Дълбокото обучение изследва многопластови представяния, които съответстват на различни нива на абстракция. Тези нива формират йерархия на дисплея.

пример

По-долу е представено еднослойната невронна мрежа:

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

Докато в случая на двуслойната невронна мрежа, независимо от начина на обучение на зеления скрит слой, той се прехвърля към синия скрит слой, където обучението продължава:

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

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

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

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

Най-важното е балансът

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

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

Проклятие за размерност

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

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

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

Компромис

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

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

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

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

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