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

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

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

Илюстративен материал

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

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

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

Най-простата невронна мрежа

Най-простата възможна конфигурация на невронни мрежи е един неврон с един вход и един изход без активиране (или можем да кажем с линейно активиране f (x) = x):

картини

N.B. Както можете да видите, към мрежовия вход се подават две стойности - x и една. Последното е необходимо, за да се въведе отместване b. Във всички популярни рамки входната единица вече присъства неявно и не е посочена от потребителя отделно. Следователно по-долу ще приемем, че входът е една стойност.

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

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

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


Първото число е теглото w, второто е отместването b. За да проверим това, нека начертаем линията f (x) = w * x + b:

Усложнява примера

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